From 3761574afd73f4fca1c1eaba119254818ee4f3c0 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sun, 3 Jan 2021 12:15:20 +1000 Subject: [PATCH] Decompile func0f013550 --- src/game/game_013550.c | 441 ++++++++++---------------------------- src/gvars/gvars.c | 12 +- src/include/gvars/gvars.h | 16 +- src/include/types.h | 38 ++++ 4 files changed, 170 insertions(+), 337 deletions(-) diff --git a/src/game/game_013550.c b/src/game/game_013550.c index deba55a76..fc5ac0c29 100644 --- a/src/game/game_013550.c +++ b/src/game/game_013550.c @@ -11,334 +11,121 @@ #include "lib/lib_121e0.h" #include "types.h" -const u32 var7f1a8290[] = {0x3e99999a}; -const u32 var7f1a8294[] = {0x3ecccccd}; -const u32 var7f1a8298[] = {0x00000000}; -const u32 var7f1a829c[] = {0x00000000}; +/** + * Initialises an array of room numbers and a linked list of structs. + * + * Related to blood splats, bullet holes and scorch marks. + * With this function nopped they do not appear. + */ +void func0f013550(void) +{ + s32 stack; + s32 type = 2; + s32 i; -GLOBAL_ASM( -glabel func0f013550 -/* f013550: 3c0e8009 */ lui $t6,%hi(g_Is4Mb) -/* f013554: 91ce0af0 */ lbu $t6,%lo(g_Is4Mb)($t6) -/* f013558: 27bdffd8 */ addiu $sp,$sp,-40 -/* f01355c: 24080001 */ addiu $t0,$zero,0x1 -/* f013560: afbf0014 */ sw $ra,0x14($sp) -/* f013564: 150e0005 */ bne $t0,$t6,.L0f01357c -/* f013568: 24060002 */ addiu $a2,$zero,0x2 -/* f01356c: 3c0d800a */ lui $t5,%hi(g_Vars) -/* f013570: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars) -/* f013574: 10000044 */ b .L0f013688 -/* f013578: 00003025 */ or $a2,$zero,$zero -.L0f01357c: -/* f01357c: 3c0d800a */ lui $t5,%hi(g_Vars) -/* f013580: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars) -/* f013584: 8daf0298 */ lw $t7,0x298($t5) -/* f013588: 24010002 */ addiu $at,$zero,0x2 -/* f01358c: 05e30005 */ bgezl $t7,.L0f0135a4 -/* f013590: 8db9006c */ lw $t9,0x6c($t5) -/* f013594: 8db8029c */ lw $t8,0x29c($t5) -/* f013598: 07020020 */ bltzl $t8,.L0f01361c -/* f01359c: 8db8006c */ lw $t8,0x6c($t5) -/* f0135a0: 8db9006c */ lw $t9,0x6c($t5) -.L0f0135a4: -/* f0135a4: 00002825 */ or $a1,$zero,$zero -/* f0135a8: 00002025 */ or $a0,$zero,$zero -/* f0135ac: 13200003 */ beqz $t9,.L0f0135bc -/* f0135b0: 00001825 */ or $v1,$zero,$zero -/* f0135b4: 10000001 */ b .L0f0135bc -/* f0135b8: 01002825 */ or $a1,$t0,$zero -.L0f0135bc: -/* f0135bc: 8dae0068 */ lw $t6,0x68($t5) -/* f0135c0: 00001025 */ or $v0,$zero,$zero -/* f0135c4: 11c00003 */ beqz $t6,.L0f0135d4 -/* f0135c8: 00000000 */ nop -/* f0135cc: 10000001 */ b .L0f0135d4 -/* f0135d0: 01002025 */ or $a0,$t0,$zero -.L0f0135d4: -/* f0135d4: 8daf0064 */ lw $t7,0x64($t5) -/* f0135d8: 11e00003 */ beqz $t7,.L0f0135e8 -/* f0135dc: 00000000 */ nop -/* f0135e0: 10000001 */ b .L0f0135e8 -/* f0135e4: 01001825 */ or $v1,$t0,$zero -.L0f0135e8: -/* f0135e8: 8db80070 */ lw $t8,0x70($t5) -/* f0135ec: 13000003 */ beqz $t8,.L0f0135fc -/* f0135f0: 00000000 */ nop -/* f0135f4: 10000001 */ b .L0f0135fc -/* f0135f8: 01001025 */ or $v0,$t0,$zero -.L0f0135fc: -/* f0135fc: 0043c821 */ addu $t9,$v0,$v1 -/* f013600: 03247021 */ addu $t6,$t9,$a0 -/* f013604: 01c57821 */ addu $t7,$t6,$a1 -/* f013608: 55e10004 */ bnel $t7,$at,.L0f01361c -/* f01360c: 8db8006c */ lw $t8,0x6c($t5) -/* f013610: 1000001d */ b .L0f013688 -/* f013614: 01003025 */ or $a2,$t0,$zero -/* f013618: 8db8006c */ lw $t8,0x6c($t5) -.L0f01361c: -/* f01361c: 8da20068 */ lw $v0,0x68($t5) -/* f013620: 8da30064 */ lw $v1,0x64($t5) -/* f013624: 13000003 */ beqz $t8,.L0f013634 -/* f013628: 8da70070 */ lw $a3,0x70($t5) -/* f01362c: 10000002 */ b .L0f013638 -/* f013630: 01002825 */ or $a1,$t0,$zero -.L0f013634: -/* f013634: 00002825 */ or $a1,$zero,$zero -.L0f013638: -/* f013638: 10400003 */ beqz $v0,.L0f013648 -/* f01363c: 00002025 */ or $a0,$zero,$zero -/* f013640: 10000001 */ b .L0f013648 -/* f013644: 01002025 */ or $a0,$t0,$zero -.L0f013648: -/* f013648: 10600003 */ beqz $v1,.L0f013658 -/* f01364c: 00001025 */ or $v0,$zero,$zero -/* f013650: 10000002 */ b .L0f01365c -/* f013654: 01001825 */ or $v1,$t0,$zero -.L0f013658: -/* f013658: 00001825 */ or $v1,$zero,$zero -.L0f01365c: -/* f01365c: 10e00003 */ beqz $a3,.L0f01366c -/* f013660: 00000000 */ nop -/* f013664: 10000001 */ b .L0f01366c -/* f013668: 01001025 */ or $v0,$t0,$zero -.L0f01366c: -/* f01366c: 0043c821 */ addu $t9,$v0,$v1 -/* f013670: 03247021 */ addu $t6,$t9,$a0 -/* f013674: 01c57821 */ addu $t7,$t6,$a1 -/* f013678: 29e10002 */ slti $at,$t7,0x2 -/* f01367c: 14200002 */ bnez $at,.L0f013688 -/* f013680: 00000000 */ nop -/* f013684: 00003025 */ or $a2,$zero,$zero -.L0f013688: -/* f013688: 10c00008 */ beqz $a2,.L0f0136ac -/* f01368c: 3c0b800a */ lui $t3,%hi(g_Menus+0x2000) -/* f013690: 10c80022 */ beq $a2,$t0,.L0f01371c -/* f013694: 3c0b800a */ lui $t3,%hi(var8009cc44) -/* f013698: 24010002 */ addiu $at,$zero,0x2 -/* f01369c: 10c1003c */ beq $a2,$at,.L0f013790 -/* f0136a0: 00000000 */ nop -/* f0136a4: 1000003a */ b .L0f013790 -/* f0136a8: 00000000 */ nop -.L0f0136ac: -/* f0136ac: 256bcc44 */ addiu $t3,$t3,%lo(var8009cc44) -/* f0136b0: 24180050 */ addiu $t8,$zero,0x50 -/* f0136b4: ad780000 */ sw $t8,%lo(g_Menus+0x2000)($t3) -/* f0136b8: 2419000a */ addiu $t9,$zero,0xa -/* f0136bc: 3c01800a */ lui $at,%hi(var8009cc5c) -/* f0136c0: ac39cc5c */ sw $t9,%lo(var8009cc5c)($at) -/* f0136c4: 3c01800a */ lui $at,%hi(var8009cc60) -/* f0136c8: 240e0028 */ addiu $t6,$zero,0x28 -/* f0136cc: ac2ecc60 */ sw $t6,%lo(var8009cc60)($at) -/* f0136d0: 3c01800a */ lui $at,%hi(var8009cc64) -/* f0136d4: ac28cc64 */ sw $t0,%lo(var8009cc64)($at) -/* f0136d8: 3c01800a */ lui $at,%hi(var8009cc68) -/* f0136dc: 240f0019 */ addiu $t7,$zero,0x19 -/* f0136e0: ac2fcc68 */ sw $t7,%lo(var8009cc68)($at) -/* f0136e4: 3c01800a */ lui $at,%hi(var8009cc6c) -/* f0136e8: 24180014 */ addiu $t8,$zero,0x14 -/* f0136ec: ac38cc6c */ sw $t8,%lo(var8009cc6c)($at) -/* f0136f0: 3c01800a */ lui $at,%hi(var8009cc70) -/* f0136f4: 24190005 */ addiu $t9,$zero,0x5 -/* f0136f8: ac39cc70 */ sw $t9,%lo(var8009cc70)($at) -/* f0136fc: 3c01800a */ lui $at,%hi(var8009cc74) -/* f013700: 240e000f */ addiu $t6,$zero,0xf -/* f013704: ac2ecc74 */ sw $t6,%lo(var8009cc74)($at) -/* f013708: 3c017f1b */ lui $at,%hi(var7f1a8290) -/* f01370c: c4248290 */ lwc1 $f4,%lo(var7f1a8290)($at) -/* f013710: 3c01800a */ lui $at,%hi(var8009cc78) -/* f013714: 1000003b */ b .L0f013804 -/* f013718: e424cc78 */ swc1 $f4,%lo(var8009cc78)($at) -.L0f01371c: -/* f01371c: 256bcc44 */ addiu $t3,$t3,-13244 -/* f013720: 240f00c8 */ addiu $t7,$zero,0xc8 -/* f013724: ad6f0000 */ sw $t7,0x0($t3) -/* f013728: 24180019 */ addiu $t8,$zero,0x19 -/* f01372c: 3c01800a */ lui $at,%hi(var8009cc5c) -/* f013730: ac38cc5c */ sw $t8,%lo(var8009cc5c)($at) -/* f013734: 3c01800a */ lui $at,%hi(var8009cc60) -/* f013738: 24190064 */ addiu $t9,$zero,0x64 -/* f01373c: ac39cc60 */ sw $t9,%lo(var8009cc60)($at) -/* f013740: 3c01800a */ lui $at,%hi(var8009cc64) -/* f013744: 240e0004 */ addiu $t6,$zero,0x4 -/* f013748: ac2ecc64 */ sw $t6,%lo(var8009cc64)($at) -/* f01374c: 3c01800a */ lui $at,%hi(var8009cc68) -/* f013750: 240f0028 */ addiu $t7,$zero,0x28 -/* f013754: ac2fcc68 */ sw $t7,%lo(var8009cc68)($at) -/* f013758: 3c01800a */ lui $at,%hi(var8009cc6c) -/* f01375c: 24180050 */ addiu $t8,$zero,0x50 -/* f013760: ac38cc6c */ sw $t8,%lo(var8009cc6c)($at) -/* f013764: 3c01800a */ lui $at,%hi(var8009cc70) -/* f013768: 24190014 */ addiu $t9,$zero,0x14 -/* f01376c: ac39cc70 */ sw $t9,%lo(var8009cc70)($at) -/* f013770: 3c01800a */ lui $at,%hi(var8009cc74) -/* f013774: 240e001e */ addiu $t6,$zero,0x1e -/* f013778: ac2ecc74 */ sw $t6,%lo(var8009cc74)($at) -/* f01377c: 3c017f1b */ lui $at,%hi(var7f1a8294) -/* f013780: c4268294 */ lwc1 $f6,%lo(var7f1a8294)($at) -/* f013784: 3c01800a */ lui $at,%hi(var8009cc78) -/* f013788: 1000001e */ b .L0f013804 -/* f01378c: e426cc78 */ swc1 $f6,%lo(var8009cc78)($at) -.L0f013790: -/* f013790: 3c0b800a */ lui $t3,%hi(var8009cc44) -/* f013794: 256bcc44 */ addiu $t3,$t3,%lo(var8009cc44) -/* f013798: 240f0168 */ addiu $t7,$zero,0x168 -/* f01379c: ad6f0000 */ sw $t7,0x0($t3) -/* f0137a0: 24180032 */ addiu $t8,$zero,0x32 -/* f0137a4: 3c01800a */ lui $at,%hi(var8009cc5c) -/* f0137a8: ac38cc5c */ sw $t8,%lo(var8009cc5c)($at) -/* f0137ac: 3c01800a */ lui $at,%hi(var8009cc60) -/* f0137b0: 24190078 */ addiu $t9,$zero,0x78 -/* f0137b4: ac39cc60 */ sw $t9,%lo(var8009cc60)($at) -/* f0137b8: 3c01800a */ lui $at,%hi(var8009cc64) -/* f0137bc: 240e000a */ addiu $t6,$zero,0xa -/* f0137c0: ac2ecc64 */ sw $t6,%lo(var8009cc64)($at) -/* f0137c4: 3c01800a */ lui $at,%hi(var8009cc68) -/* f0137c8: 240f003c */ addiu $t7,$zero,0x3c -/* f0137cc: ac2fcc68 */ sw $t7,%lo(var8009cc68)($at) -/* f0137d0: 3c01800a */ lui $at,%hi(var8009cc6c) -/* f0137d4: 241800b4 */ addiu $t8,$zero,0xb4 -/* f0137d8: ac38cc6c */ sw $t8,%lo(var8009cc6c)($at) -/* f0137dc: 3c01800a */ lui $at,%hi(var8009cc70) -/* f0137e0: 24190019 */ addiu $t9,$zero,0x19 -/* f0137e4: ac39cc70 */ sw $t9,%lo(var8009cc70)($at) -/* f0137e8: 3c01800a */ lui $at,%hi(var8009cc74) -/* f0137ec: 240e0028 */ addiu $t6,$zero,0x28 -/* f0137f0: ac2ecc74 */ sw $t6,%lo(var8009cc74)($at) -/* f0137f4: 3c013f00 */ lui $at,0x3f00 -/* f0137f8: 44814000 */ mtc1 $at,$f8 -/* f0137fc: 3c01800a */ lui $at,%hi(var8009cc78) -/* f013800: e428cc78 */ swc1 $f8,%lo(var8009cc78)($at) -.L0f013804: -/* f013804: 3c0c800a */ lui $t4,%hi(var8009cc40) -/* f013808: 258ccc40 */ addiu $t4,$t4,%lo(var8009cc40) -/* f01380c: ad800000 */ sw $zero,0x0($t4) -/* f013810: 3c01800a */ lui $at,%hi(var8009cc48) -/* f013814: 3c0a800a */ lui $t2,%hi(var8009cc4c) -/* f013818: ac20cc48 */ sw $zero,%lo(var8009cc48)($at) -/* f01381c: 254acc4c */ addiu $t2,$t2,%lo(var8009cc4c) -/* f013820: ad400000 */ sw $zero,0x0($t2) -/* f013824: 3c01800a */ lui $at,%hi(var8009cc50) -/* f013828: ac20cc50 */ sw $zero,%lo(var8009cc50)($at) -/* f01382c: 3c01800a */ lui $at,%hi(var8009cc54) -/* f013830: ac20cc54 */ sw $zero,%lo(var8009cc54)($at) -/* f013834: 3c01800a */ lui $at,%hi(var8009cc58) -/* f013838: ac20cc58 */ sw $zero,%lo(var8009cc58)($at) -/* f01383c: 8daf04b4 */ lw $t7,0x4b4($t5) -/* f013840: 3c04800a */ lui $a0,%hi(var800a41b0) -/* f013844: 248441b0 */ addiu $a0,$a0,%lo(var800a41b0) -/* f013848: 29e1005a */ slti $at,$t7,0x5a -/* f01384c: 54200003 */ bnezl $at,.L0f01385c -/* f013850: 8d660000 */ lw $a2,0x0($t3) -/* f013854: ad600000 */ sw $zero,0x0($t3) -/* f013858: 8d660000 */ lw $a2,0x0($t3) -.L0f01385c: -/* f01385c: 54c00004 */ bnezl $a2,.L0f013870 -/* f013860: 8da302bc */ lw $v1,0x2bc($t5) -/* f013864: 1000005e */ b .L0f0139e0 -/* f013868: ac800000 */ sw $zero,0x0($a0) -/* f01386c: 8da302bc */ lw $v1,0x2bc($t5) -.L0f013870: -/* f013870: 00061140 */ sll $v0,$a2,0x5 -/* f013874: 00461023 */ subu $v0,$v0,$a2 -/* f013878: 2407fff0 */ addiu $a3,$zero,-16 -/* f01387c: 00021080 */ sll $v0,$v0,0x2 -/* f013880: 0003c040 */ sll $t8,$v1,0x1 -/* f013884: 2442000f */ addiu $v0,$v0,0xf -/* f013888: 2703000f */ addiu $v1,$t8,0xf -/* f01388c: 00471024 */ and $v0,$v0,$a3 -/* f013890: 00671824 */ and $v1,$v1,$a3 -/* f013894: 00432021 */ addu $a0,$v0,$v1 -/* f013898: afa30018 */ sw $v1,0x18($sp) -/* f01389c: 0c0048f2 */ jal malloc -/* f0138a0: 24050004 */ addiu $a1,$zero,0x4 -/* f0138a4: 8fa30018 */ lw $v1,0x18($sp) -/* f0138a8: 3c04800a */ lui $a0,%hi(var800a41b0) -/* f0138ac: 3c08800a */ lui $t0,%hi(var800a41b4) -/* f0138b0: 3c0c800a */ lui $t4,%hi(var8009cc40) -/* f0138b4: 258ccc40 */ addiu $t4,$t4,%lo(var8009cc40) -/* f0138b8: 250841b4 */ addiu $t0,$t0,%lo(var800a41b4) -/* f0138bc: 248441b0 */ addiu $a0,$a0,%lo(var800a41b0) -/* f0138c0: 0043c821 */ addu $t9,$v0,$v1 -/* f0138c4: 3c0b800a */ lui $t3,%hi(var8009cc44) -/* f0138c8: ad820000 */ sw $v0,0x0($t4) -/* f0138cc: ac990000 */ sw $t9,0x0($a0) -/* f0138d0: ad000000 */ sw $zero,0x0($t0) -/* f0138d4: 3c01800a */ lui $at,%hi(var800a41b8) -/* f0138d8: 256bcc44 */ addiu $t3,$t3,%lo(var8009cc44) -/* f0138dc: ac2041b8 */ sw $zero,%lo(var800a41b8)($at) -/* f0138e0: 8d6e0000 */ lw $t6,0x0($t3) -/* f0138e4: 3c0a800a */ lui $t2,%hi(var8009cc4c) -/* f0138e8: 3c0d800a */ lui $t5,%hi(g_Vars) -/* f0138ec: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars) -/* f0138f0: 254acc4c */ addiu $t2,$t2,%lo(var8009cc4c) -/* f0138f4: 19c0002e */ blez $t6,.L0f0139b0 -/* f0138f8: 00003025 */ or $a2,$zero,$zero -/* f0138fc: 8c870000 */ lw $a3,0x0($a0) -/* f013900: 00001825 */ or $v1,$zero,$zero -/* f013904: 2409ffff */ addiu $t1,$zero,-1 -.L0f013908: -/* f013908: 00e37821 */ addu $t7,$a3,$v1 -/* f01390c: a1e0006d */ sb $zero,0x6d($t7) -/* f013910: 8c980000 */ lw $t8,0x0($a0) -/* f013914: 24c60001 */ addiu $a2,$a2,0x1 -/* f013918: 0303c821 */ addu $t9,$t8,$v1 -/* f01391c: a320006e */ sb $zero,0x6e($t9) -/* f013920: 8c8e0000 */ lw $t6,0x0($a0) -/* f013924: 01c31021 */ addu $v0,$t6,$v1 -/* f013928: 8c450070 */ lw $a1,0x70($v0) -/* f01392c: 00057902 */ srl $t7,$a1,0x4 -/* f013930: 000fc100 */ sll $t8,$t7,0x4 -/* f013934: 0305c826 */ xor $t9,$t8,$a1 -/* f013938: ac590070 */ sw $t9,0x70($v0) -/* f01393c: 8c8e0000 */ lw $t6,0x0($a0) -/* f013940: 01c31021 */ addu $v0,$t6,$v1 -/* f013944: 904f006f */ lbu $t7,0x6f($v0) -/* f013948: 31f8ff7f */ andi $t8,$t7,0xff7f -/* f01394c: a058006f */ sb $t8,0x6f($v0) -/* f013950: 8c990000 */ lw $t9,0x0($a0) -/* f013954: 03237021 */ addu $t6,$t9,$v1 -/* f013958: a5c90068 */ sh $t1,0x68($t6) -/* f01395c: 8c8f0000 */ lw $t7,0x0($a0) -/* f013960: 01e3c021 */ addu $t8,$t7,$v1 -/* f013964: af00005c */ sw $zero,0x5c($t8) -/* f013968: 8c990000 */ lw $t9,0x0($a0) -/* f01396c: 03237021 */ addu $t6,$t9,$v1 -/* f013970: adc00060 */ sw $zero,0x60($t6) -/* f013974: 8d4f0000 */ lw $t7,0x0($t2) -/* f013978: 8c8e0000 */ lw $t6,0x0($a0) -/* f01397c: 8d190000 */ lw $t9,0x0($t0) -/* f013980: 25f80001 */ addiu $t8,$t7,0x1 -/* f013984: ad580000 */ sw $t8,0x0($t2) -/* f013988: 01c37821 */ addu $t7,$t6,$v1 -/* f01398c: adf90074 */ sw $t9,0x74($t7) -/* f013990: 8d6e0000 */ lw $t6,0x0($t3) -/* f013994: 8c870000 */ lw $a3,0x0($a0) -/* f013998: 00ce082a */ slt $at,$a2,$t6 -/* f01399c: 0067c021 */ addu $t8,$v1,$a3 -/* f0139a0: 2463007c */ addiu $v1,$v1,0x7c -/* f0139a4: 1420ffd8 */ bnez $at,.L0f013908 -/* f0139a8: ad180000 */ sw $t8,0x0($t0) -/* f0139ac: 00003025 */ or $a2,$zero,$zero -.L0f0139b0: -/* f0139b0: 8db902bc */ lw $t9,0x2bc($t5) -/* f0139b4: 1b20000a */ blez $t9,.L0f0139e0 -/* f0139b8: 00001025 */ or $v0,$zero,$zero -/* f0139bc: 8d8f0000 */ lw $t7,0x0($t4) -.L0f0139c0: -/* f0139c0: 24c60001 */ addiu $a2,$a2,0x1 -/* f0139c4: 01e2c021 */ addu $t8,$t7,$v0 -/* f0139c8: a7000000 */ sh $zero,0x0($t8) -/* f0139cc: 8dae02bc */ lw $t6,0x2bc($t5) -/* f0139d0: 24420002 */ addiu $v0,$v0,0x2 -/* f0139d4: 00ce082a */ slt $at,$a2,$t6 -/* f0139d8: 5420fff9 */ bnezl $at,.L0f0139c0 -/* f0139dc: 8d8f0000 */ lw $t7,0x0($t4) -.L0f0139e0: -/* f0139e0: 8fbf0014 */ lw $ra,0x14($sp) -/* f0139e4: 27bd0028 */ addiu $sp,$sp,0x28 -/* f0139e8: 03e00008 */ jr $ra -/* f0139ec: 00000000 */ nop -); + if (IS4MB()) { + type = 0; + } else if ((g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) && PLAYERCOUNT() == 2) { + type = 1; + } else if (PLAYERCOUNT() >= 2) { + type = 0; + } + + switch (type) { + case 0: + // 4MB or MP with 2+ players + var8009cc44 = 80; + var8009cc5c = 10; + var8009cc60 = 40; + var8009cc64 = 1; + var8009cc68 = 25; + var8009cc6c = 20; + var8009cc70 = 5; + var8009cc74 = 15; + var8009cc78 = 0.3f; + break; + case 1: + // 2 player coop/anti + var8009cc44 = 200; + var8009cc5c = 25; + var8009cc60 = 100; + var8009cc64 = 4; + var8009cc68 = 40; + var8009cc6c = 80; + var8009cc70 = 20; + var8009cc74 = 30; + var8009cc78 = 0.4f; + break; + case 2: + default: + // 1 player 8MB + var8009cc44 = 360; + var8009cc5c = 50; + var8009cc60 = 120; + var8009cc64 = 10; + var8009cc68 = 60; // max bullet holes + var8009cc6c = 180; + var8009cc70 = 25; + var8009cc74 = 40; + var8009cc78 = 0.5f; + break; + } + + var8009cc40 = 0; + var8009cc48 = 0; + var8009cc4c = 0; + var8009cc50 = 0; + var8009cc54 = 0; + var8009cc58 = 0; + + if (g_Vars.stagenum >= STAGE_TITLE) { + var8009cc44 = 0; + } + + if (var8009cc44 == 0) { + var800a41b0 = NULL; + } else { + // Allocate an array of s16 room numbers followed by a bunch of structs + u32 numberssize; + u32 structssize; + void *ptr; + + structssize = var8009cc44 * sizeof(struct var800a41b0); + structssize += 0xf; + structssize &= ~0xf; + + numberssize = g_Vars.roomcount * 2; + numberssize += 0xf; + numberssize &= ~0xf; + + ptr = malloc(structssize + numberssize, 4); + + var8009cc40 = ptr; + var800a41b0 = (struct var800a41b0 *)((u32)ptr + numberssize); + var800a41b4 = NULL; + var800a41b8 = 0; + + // Initialise structs + for (i = 0; i < var8009cc44; i++) { + var800a41b0[i].unk6d = 0; + var800a41b0[i].unk6e = 0; + var800a41b0[i].unk70 = var800a41b0[i].unk70 ^ ((var800a41b0[i].unk70 >> 4) << 4); + var800a41b0[i].unk6f &= 0xff7f; + var800a41b0[i].unk68 = -1; + var800a41b0[i].unk5c = 0; + var800a41b0[i].unk60 = 0; + + var8009cc4c++; + var800a41b0[i].prev = var800a41b4; + var800a41b4 = &var800a41b0[i]; + } + + // Initialise room numbers + for (i = 0; i < g_Vars.roomcount; i++) { + var8009cc40[i] = 0; + } + } +} GLOBAL_ASM( glabel func0f0139f0 diff --git a/src/gvars/gvars.c b/src/gvars/gvars.c index 0a3415cd2..bd04f6ac1 100644 --- a/src/gvars/gvars.c +++ b/src/gvars/gvars.c @@ -14581,8 +14581,8 @@ s32 var8009cc30 = 0; u32 var8009cc34 = 0; u32 var8009cc38 = 0; u32 var8009cc3c = 0; -u32 var8009cc40 = 0; -u32 var8009cc44 = 0; +s16 *var8009cc40 = NULL; +s32 var8009cc44 = 0; u32 var8009cc48 = 0; u32 var8009cc4c = 0; u32 var8009cc50 = 0; @@ -14590,12 +14590,12 @@ u32 var8009cc54 = 0; u32 var8009cc58 = 0; u32 var8009cc5c = 0; u32 var8009cc60 = 0; -u32 var8009cc64 = 0; +s32 var8009cc64 = 0; u32 var8009cc68 = 0; u32 var8009cc6c = 0; u32 var8009cc70 = 0; u32 var8009cc74 = 0; -u32 var8009cc78 = 0; +f32 var8009cc78 = 0; u32 var8009cc7c = 0; void *var8009cc80 = NULL; void *var8009cc84 = NULL; @@ -15097,8 +15097,8 @@ u32 var800a41a0 = 0; u32 var800a41a4 = 0; u32 var800a41a8 = 0; u32 var800a41ac = 0; -u32 var800a41b0 = 0; -u32 var800a41b4 = 0; +struct var800a41b0 *var800a41b0 = NULL; +struct var800a41b0 *var800a41b4 = NULL; u32 var800a41b8 = 0; u32 var800a41bc = 0; char var800a41c0[4] = {'\0'}; diff --git a/src/include/gvars/gvars.h b/src/include/gvars/gvars.h index 3f324d4fd..705da0418 100644 --- a/src/include/gvars/gvars.h +++ b/src/include/gvars/gvars.h @@ -529,13 +529,21 @@ extern u32 var8009cb08; extern u32 var8009cbf8; extern struct prop *g_DangerousProps[MAX_DANGEROUSPROPS]; extern s32 var8009cc30; -extern u32 var8009cc40; -extern u32 var8009cc44; +extern s16 *var8009cc40; +extern s32 var8009cc44; extern u32 var8009cc48; extern u32 var8009cc4c; extern u32 var8009cc50; extern u32 var8009cc54; extern u32 var8009cc58; +extern u32 var8009cc5c; +extern u32 var8009cc60; +extern s32 var8009cc64; +extern u32 var8009cc68; +extern u32 var8009cc6c; +extern u32 var8009cc70; +extern u32 var8009cc74; +extern f32 var8009cc78; extern void *var8009cc80; extern void *var8009cc84; extern void *var8009cc88; @@ -706,8 +714,8 @@ extern u32 var800a418c; extern u32 var800a4190; extern u32 var800a4194; extern u32 var800a41a0; -extern u32 var800a41b0; -extern u32 var800a41b4; +extern struct var800a41b0 *var800a41b0; // head +extern struct var800a41b0 *var800a41b4; // tail extern u32 var800a41b8; extern char var800a41c0[]; extern u32 var800a41d8; diff --git a/src/include/types.h b/src/include/types.h index 98daf5206..9566f5bfc 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -6784,4 +6784,42 @@ struct stageheadlimit { u8 maxheads; }; +struct var800a41b0 { + /*0x00*/ u32 unk00; + /*0x04*/ u32 unk04; + /*0x08*/ u32 unk08; + /*0x0c*/ u32 unk0c; + /*0x10*/ u32 unk10; + /*0x14*/ u32 unk14; + /*0x18*/ u32 unk18; + /*0x1c*/ u32 unk1c; + /*0x20*/ u32 unk20; + /*0x24*/ u32 unk24; + /*0x28*/ u32 unk28; + /*0x2c*/ u32 unk2c; + /*0x30*/ u32 unk30; + /*0x34*/ u32 unk34; + /*0x38*/ u32 unk38; + /*0x3c*/ u32 unk3c; + /*0x40*/ u32 unk40; + /*0x44*/ u32 unk44; + /*0x48*/ u32 unk48; + /*0x4c*/ u32 unk4c; + /*0x50*/ u32 unk50; + /*0x54*/ u32 unk54; + /*0x58*/ u32 unk58; + /*0x5c*/ u32 unk5c; + /*0x60*/ u32 unk60; + /*0x64*/ u32 unk64; + /*0x68*/ s16 unk68; + /*0x6a*/ u16 unk6a; + /*0x6c*/ u8 unk6c; + /*0x6d*/ u8 unk6d; + /*0x6e*/ u8 unk6e; + /*0x6f*/ u8 unk6f; + /*0x70*/ u32 unk70; + /*0x74*/ struct var800a41b0 *prev; + /*0x78*/ u32 unk78; +}; + #endif