From 6112fc01ad857a25c9f76dd07c3ff0eadf34af6b Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Tue, 28 Sep 2021 18:42:19 +1000 Subject: [PATCH] Decompile func0f14a06c --- src/game/camdraw.c | 112 ++++-------- src/include/game/camdraw.h | 2 +- src/include/types.h | 353 +++++++++++++++++++++++++++++++++++++ 3 files changed, 386 insertions(+), 81 deletions(-) diff --git a/src/game/camdraw.c b/src/game/camdraw.c index ae8db9031..a7977c1d3 100644 --- a/src/game/camdraw.c +++ b/src/game/camdraw.c @@ -19,7 +19,7 @@ #include "data.h" #include "types.h" -u32 var800a45a0; +struct var800a45a0 *var800a45a0; u32 var800a45a4; u32 var800a45a8; u32 var800a45ac; @@ -373,7 +373,7 @@ u32 var8007f8d0 = (u32)&var7f1b6088; u32 var8007f8d4 = (u32)&var7f1b6090; u32 var8007f8d8 = (u32)&var7f1b6098; u32 var8007f8dc = 0x00000000; -u32 var8007f8e0 = 0x00000000; +struct var8007f8e0 *var8007f8e0 = NULL; u32 var8007f8e4 = 0x00000000; u32 var8007f8e8 = 0x00000008; u32 var8007f8ec = 0x0000005a; @@ -761,78 +761,30 @@ glabel func0f14a00c /* f14a068: 00000000 */ nop ); -GLOBAL_ASM( -glabel func0f14a06c -/* f14a06c: 2401ffff */ addiu $at,$zero,-1 -/* f14a070: 14810008 */ bne $a0,$at,.L0f14a094 -/* f14a074: 3c0e800a */ lui $t6,%hi(var800a45a0) -/* f14a078: 8dce45a0 */ lw $t6,%lo(var800a45a0)($t6) -/* f14a07c: 3c198008 */ lui $t9,%hi(var8007f8e0) -/* f14a080: 8f39f8e0 */ lw $t9,%lo(var8007f8e0)($t9) -/* f14a084: 8dcf016c */ lw $t7,0x16c($t6) -/* f14a088: 000fc280 */ sll $t8,$t7,0xa -/* f14a08c: 03e00008 */ jr $ra -/* f14a090: 03191021 */ addu $v0,$t8,$t9 -.L0f14a094: -/* f14a094: 2401fffc */ addiu $at,$zero,-4 -/* f14a098: 14810008 */ bne $a0,$at,.L0f14a0bc -/* f14a09c: 3c08800a */ lui $t0,%hi(var800a45a0) -/* f14a0a0: 8d0845a0 */ lw $t0,%lo(var800a45a0)($t0) -/* f14a0a4: 3c0b8008 */ lui $t3,%hi(var8007f8e0) -/* f14a0a8: 8d6bf8e0 */ lw $t3,%lo(var8007f8e0)($t3) -/* f14a0ac: 8d090174 */ lw $t1,0x174($t0) -/* f14a0b0: 00095280 */ sll $t2,$t1,0xa -/* f14a0b4: 03e00008 */ jr $ra -/* f14a0b8: 014b1021 */ addu $v0,$t2,$t3 -.L0f14a0bc: -/* f14a0bc: 2401fffb */ addiu $at,$zero,-5 -/* f14a0c0: 14810008 */ bne $a0,$at,.L0f14a0e4 -/* f14a0c4: 3c0c800a */ lui $t4,%hi(var800a45a0) -/* f14a0c8: 8d8c45a0 */ lw $t4,%lo(var800a45a0)($t4) -/* f14a0cc: 3c0f8008 */ lui $t7,%hi(var8007f8e0) -/* f14a0d0: 8deff8e0 */ lw $t7,%lo(var8007f8e0)($t7) -/* f14a0d4: 8d8d0178 */ lw $t5,0x178($t4) -/* f14a0d8: 000d7280 */ sll $t6,$t5,0xa -/* f14a0dc: 03e00008 */ jr $ra -/* f14a0e0: 01cf1021 */ addu $v0,$t6,$t7 -.L0f14a0e4: -/* f14a0e4: 2401fffe */ addiu $at,$zero,-2 -/* f14a0e8: 1481000b */ bne $a0,$at,.L0f14a118 -/* f14a0ec: 3c03800a */ lui $v1,%hi(var800a45a0) -/* f14a0f0: 8c6345a0 */ lw $v1,%lo(var800a45a0)($v1) -/* f14a0f4: 3c0b8008 */ lui $t3,%hi(var8007f8e0) -/* f14a0f8: 8d6bf8e0 */ lw $t3,%lo(var8007f8e0)($t3) -/* f14a0fc: 8c780004 */ lw $t8,0x4($v1) -/* f14a100: 0018c880 */ sll $t9,$t8,0x2 -/* f14a104: 00794021 */ addu $t0,$v1,$t9 -/* f14a108: 8d090014 */ lw $t1,0x14($t0) -/* f14a10c: 00095280 */ sll $t2,$t1,0xa -/* f14a110: 03e00008 */ jr $ra -/* f14a114: 014b1021 */ addu $v0,$t2,$t3 -.L0f14a118: -/* f14a118: 2401fffd */ addiu $at,$zero,-3 -/* f14a11c: 14810009 */ bne $a0,$at,.L0f14a144 -/* f14a120: 3c18800a */ lui $t8,%hi(var800a45a0) -/* f14a124: 3c0c800a */ lui $t4,%hi(var800a45a0) -/* f14a128: 8d8c45a0 */ lw $t4,%lo(var800a45a0)($t4) -/* f14a12c: 3c0f8008 */ lui $t7,%hi(var8007f8e0) -/* f14a130: 8deff8e0 */ lw $t7,%lo(var8007f8e0)($t7) -/* f14a134: 8d8d0170 */ lw $t5,0x170($t4) -/* f14a138: 000d7280 */ sll $t6,$t5,0xa -/* f14a13c: 03e00008 */ jr $ra -/* f14a140: 01cf1021 */ addu $v0,$t6,$t7 -.L0f14a144: -/* f14a144: 8f1845a0 */ lw $t8,%lo(var800a45a0)($t8) -/* f14a148: 0004c880 */ sll $t9,$a0,0x2 -/* f14a14c: 3c0b8008 */ lui $t3,%hi(var8007f8e0) -/* f14a150: 03194021 */ addu $t0,$t8,$t9 -/* f14a154: 8d090014 */ lw $t1,0x14($t0) -/* f14a158: 8d6bf8e0 */ lw $t3,%lo(var8007f8e0)($t3) -/* f14a15c: 00095280 */ sll $t2,$t1,0xa -/* f14a160: 014b1021 */ addu $v0,$t2,$t3 -/* f14a164: 03e00008 */ jr $ra -/* f14a168: 00000000 */ nop -); +struct var8007f8e0 *func0f14a06c(s32 index) +{ + if (index == -1) { + return &var8007f8e0[var800a45a0->unk16c]; + } + + if (index == -4) { + return &var8007f8e0[var800a45a0->unk174]; + } + + if (index == -5) { + return &var8007f8e0[var800a45a0->unk178]; + } + + if (index == -2) { + return &var8007f8e0[var800a45a0->unk014[var800a45a0->unk004]]; + } + + if (index == -3) { + return &var8007f8e0[var800a45a0->unk170]; + } + + return &var8007f8e0[var800a45a0->unk014[index]]; +} GLOBAL_ASM( glabel func0f14a16c @@ -8235,16 +8187,16 @@ glabel func0f15015c void phGetGuid(s32 index, struct fileguid *guid) { - u8 *ptr = func0f14a06c(index); + struct var8007f8e0 *thing = func0f14a06c(index); - guid->fileid = *(s32 *) &ptr[0x3f8]; - guid->deviceserial = *(u16 *) &ptr[0x3fc]; + guid->fileid = thing->fileguid.fileid; + guid->deviceserial = thing->fileguid.deviceserial; } void phSetFileId(s32 fileid) { - u8 *ptr = func0f14a06c(-1); + struct var8007f8e0 *thing = func0f14a06c(-1); - *(u16 *) &ptr[0x3fc] = 0; - *(s32 *) &ptr[0x3f8] = fileid; + thing->fileguid.deviceserial = 0; + thing->fileguid.fileid = fileid; } diff --git a/src/include/game/camdraw.h b/src/include/game/camdraw.h index 5393e85e9..70817ecee 100644 --- a/src/include/game/camdraw.h +++ b/src/include/game/camdraw.h @@ -8,7 +8,7 @@ u32 func0f149c90(void); u32 func0f149d58(void); u32 func0f149e58(void); u32 func0f14a00c(void); -void *func0f14a06c(s32 index); +struct var8007f8e0 *func0f14a06c(s32 index); u32 func0f14a16c(void); u32 func0f14a1cc(void); u32 func0f14a1ec(void); diff --git a/src/include/types.h b/src/include/types.h index e27d4933d..8935533a3 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -7125,4 +7125,357 @@ struct shotdata { /*0x3c*/ struct hit hits[10]; }; +struct var800a45a0 { + /*0x000*/ u32 unk000; + /*0x004*/ u32 unk004; + /*0x008*/ u32 unk008; + /*0x00c*/ u32 unk00c; + /*0x010*/ u32 unk010; + /*0x014*/ u32 unk014[4]; + /*0x024*/ u32 unk024; + /*0x028*/ u32 unk028; + /*0x02c*/ u32 unk02c; + /*0x030*/ u32 unk030; + /*0x034*/ u32 unk034; + /*0x038*/ u32 unk038; + /*0x03c*/ u32 unk03c; + /*0x040*/ u32 unk040; + /*0x044*/ u32 unk044; + /*0x048*/ u32 unk048; + /*0x04c*/ u32 unk04c; + /*0x050*/ u32 unk050; + /*0x054*/ u32 unk054; + /*0x058*/ u32 unk058; + /*0x05c*/ u32 unk05c; + /*0x060*/ u32 unk060; + /*0x064*/ u32 unk064; + /*0x068*/ u32 unk068; + /*0x06c*/ u32 unk06c; + /*0x070*/ u32 unk070; + /*0x074*/ u32 unk074; + /*0x078*/ u32 unk078; + /*0x07c*/ u32 unk07c; + /*0x080*/ u32 unk080; + /*0x084*/ u32 unk084; + /*0x088*/ u32 unk088; + /*0x08c*/ u32 unk08c; + /*0x090*/ u32 unk090; + /*0x094*/ u32 unk094; + /*0x098*/ u32 unk098; + /*0x09c*/ u32 unk09c; + /*0x0a0*/ u32 unk0a0; + /*0x0a4*/ u32 unk0a4; + /*0x0a8*/ u32 unk0a8; + /*0x0ac*/ u32 unk0ac; + /*0x0b0*/ u32 unk0b0; + /*0x0b4*/ u32 unk0b4; + /*0x0b8*/ u32 unk0b8; + /*0x0bc*/ u32 unk0bc; + /*0x0c0*/ u32 unk0c0; + /*0x0c4*/ u32 unk0c4; + /*0x0c8*/ u32 unk0c8; + /*0x0cc*/ u32 unk0cc; + /*0x0d0*/ u32 unk0d0; + /*0x0d4*/ u32 unk0d4; + /*0x0d8*/ u32 unk0d8; + /*0x0dc*/ u32 unk0dc; + /*0x0e0*/ u32 unk0e0; + /*0x0e4*/ u32 unk0e4; + /*0x0e8*/ u32 unk0e8; + /*0x0ec*/ u32 unk0ec; + /*0x0f0*/ u32 unk0f0; + /*0x0f4*/ u32 unk0f4; + /*0x0f8*/ u32 unk0f8; + /*0x0fc*/ u32 unk0fc; + /*0x100*/ u32 unk100; + /*0x104*/ u32 unk104; + /*0x108*/ u32 unk108; + /*0x10c*/ u32 unk10c; + /*0x110*/ u32 unk110; + /*0x114*/ u32 unk114; + /*0x118*/ u32 unk118; + /*0x11c*/ u32 unk11c; + /*0x120*/ u32 unk120; + /*0x124*/ u32 unk124; + /*0x128*/ u32 unk128; + /*0x12c*/ u32 unk12c; + /*0x130*/ u32 unk130; + /*0x134*/ u32 unk134; + /*0x138*/ u32 unk138; + /*0x13c*/ u32 unk13c; + /*0x140*/ u32 unk140; + /*0x144*/ u32 unk144; + /*0x148*/ u32 unk148; + /*0x14c*/ u32 unk14c; + /*0x150*/ u32 unk150; + /*0x154*/ u32 unk154; + /*0x158*/ u32 unk158; + /*0x15c*/ u32 unk15c; + /*0x160*/ u32 unk160; + /*0x164*/ u32 unk164; + /*0x168*/ u32 unk168; + /*0x16c*/ u32 unk16c; + /*0x170*/ u32 unk170; + /*0x174*/ u32 unk174; + /*0x178*/ u32 unk178; +}; + +struct var8007f8e0 { // perfect head? + /*0x000*/ u32 unk000; + /*0x004*/ u32 unk004; + /*0x008*/ u32 unk008; + /*0x00c*/ u32 unk00c; + /*0x010*/ u32 unk010; + /*0x014*/ u32 unk014; + /*0x018*/ u32 unk018; + /*0x01c*/ u32 unk01c; + /*0x020*/ u32 unk020; + /*0x024*/ u32 unk024; + /*0x028*/ u32 unk028; + /*0x02c*/ u32 unk02c; + /*0x030*/ u32 unk030; + /*0x034*/ u32 unk034; + /*0x038*/ u32 unk038; + /*0x03c*/ u32 unk03c; + /*0x040*/ u32 unk040; + /*0x044*/ u32 unk044; + /*0x048*/ u32 unk048; + /*0x04c*/ u32 unk04c; + /*0x050*/ u32 unk050; + /*0x054*/ u32 unk054; + /*0x058*/ u32 unk058; + /*0x05c*/ u32 unk05c; + /*0x060*/ u32 unk060; + /*0x064*/ u32 unk064; + /*0x068*/ u32 unk068; + /*0x06c*/ u32 unk06c; + /*0x070*/ u32 unk070; + /*0x074*/ u32 unk074; + /*0x078*/ u32 unk078; + /*0x07c*/ u32 unk07c; + /*0x080*/ u32 unk080; + /*0x084*/ u32 unk084; + /*0x088*/ u32 unk088; + /*0x08c*/ u32 unk08c; + /*0x090*/ u32 unk090; + /*0x094*/ u32 unk094; + /*0x098*/ u32 unk098; + /*0x09c*/ u32 unk09c; + /*0x0a0*/ u32 unk0a0; + /*0x0a4*/ u32 unk0a4; + /*0x0a8*/ u32 unk0a8; + /*0x0ac*/ u32 unk0ac; + /*0x0b0*/ u32 unk0b0; + /*0x0b4*/ u32 unk0b4; + /*0x0b8*/ u32 unk0b8; + /*0x0bc*/ u32 unk0bc; + /*0x0c0*/ u32 unk0c0; + /*0x0c4*/ u32 unk0c4; + /*0x0c8*/ u32 unk0c8; + /*0x0cc*/ u32 unk0cc; + /*0x0d0*/ u32 unk0d0; + /*0x0d4*/ u32 unk0d4; + /*0x0d8*/ u32 unk0d8; + /*0x0dc*/ u32 unk0dc; + /*0x0e0*/ u32 unk0e0; + /*0x0e4*/ u32 unk0e4; + /*0x0e8*/ u32 unk0e8; + /*0x0ec*/ u32 unk0ec; + /*0x0f0*/ u32 unk0f0; + /*0x0f4*/ u32 unk0f4; + /*0x0f8*/ u32 unk0f8; + /*0x0fc*/ u32 unk0fc; + /*0x100*/ u32 unk100; + /*0x104*/ u32 unk104; + /*0x108*/ u32 unk108; + /*0x10c*/ u32 unk10c; + /*0x110*/ u32 unk110; + /*0x114*/ u32 unk114; + /*0x118*/ u32 unk118; + /*0x11c*/ u32 unk11c; + /*0x120*/ u32 unk120; + /*0x124*/ u32 unk124; + /*0x128*/ u32 unk128; + /*0x12c*/ u32 unk12c; + /*0x130*/ u32 unk130; + /*0x134*/ u32 unk134; + /*0x138*/ u32 unk138; + /*0x13c*/ u32 unk13c; + /*0x140*/ u32 unk140; + /*0x144*/ u32 unk144; + /*0x148*/ u32 unk148; + /*0x14c*/ u32 unk14c; + /*0x150*/ u32 unk150; + /*0x154*/ u32 unk154; + /*0x158*/ u32 unk158; + /*0x15c*/ u32 unk15c; + /*0x160*/ u32 unk160; + /*0x164*/ u32 unk164; + /*0x168*/ u32 unk168; + /*0x16c*/ u32 unk16c; + /*0x170*/ u32 unk170; + /*0x174*/ u32 unk174; + /*0x178*/ u32 unk178; + /*0x17c*/ u32 unk17c; + /*0x180*/ u32 unk180; + /*0x184*/ u32 unk184; + /*0x188*/ u32 unk188; + /*0x18c*/ u32 unk18c; + /*0x190*/ u32 unk190; + /*0x194*/ u32 unk194; + /*0x198*/ u32 unk198; + /*0x19c*/ u32 unk19c; + /*0x1a0*/ u32 unk1a0; + /*0x1a4*/ u32 unk1a4; + /*0x1a8*/ u32 unk1a8; + /*0x1ac*/ u32 unk1ac; + /*0x1b0*/ u32 unk1b0; + /*0x1b4*/ u32 unk1b4; + /*0x1b8*/ u32 unk1b8; + /*0x1bc*/ u32 unk1bc; + /*0x1c0*/ u32 unk1c0; + /*0x1c4*/ u32 unk1c4; + /*0x1c8*/ u32 unk1c8; + /*0x1cc*/ u32 unk1cc; + /*0x1d0*/ u32 unk1d0; + /*0x1d4*/ u32 unk1d4; + /*0x1d8*/ u32 unk1d8; + /*0x1dc*/ u32 unk1dc; + /*0x1e0*/ u32 unk1e0; + /*0x1e4*/ u32 unk1e4; + /*0x1e8*/ u32 unk1e8; + /*0x1ec*/ u32 unk1ec; + /*0x1f0*/ u32 unk1f0; + /*0x1f4*/ u32 unk1f4; + /*0x1f8*/ u32 unk1f8; + /*0x1fc*/ u32 unk1fc; + /*0x200*/ u32 unk200; + /*0x204*/ u32 unk204; + /*0x208*/ u32 unk208; + /*0x20c*/ u32 unk20c; + /*0x210*/ u32 unk210; + /*0x214*/ u32 unk214; + /*0x218*/ u32 unk218; + /*0x21c*/ u32 unk21c; + /*0x220*/ u32 unk220; + /*0x224*/ u32 unk224; + /*0x228*/ u32 unk228; + /*0x22c*/ u32 unk22c; + /*0x230*/ u32 unk230; + /*0x234*/ u32 unk234; + /*0x238*/ u32 unk238; + /*0x23c*/ u32 unk23c; + /*0x240*/ u32 unk240; + /*0x244*/ u32 unk244; + /*0x248*/ u32 unk248; + /*0x24c*/ u32 unk24c; + /*0x250*/ u32 unk250; + /*0x254*/ u32 unk254; + /*0x258*/ u32 unk258; + /*0x25c*/ u32 unk25c; + /*0x260*/ u32 unk260; + /*0x264*/ u32 unk264; + /*0x268*/ u32 unk268; + /*0x26c*/ u32 unk26c; + /*0x270*/ u32 unk270; + /*0x274*/ u32 unk274; + /*0x278*/ u32 unk278; + /*0x27c*/ u32 unk27c; + /*0x280*/ u32 unk280; + /*0x284*/ u32 unk284; + /*0x288*/ u32 unk288; + /*0x28c*/ u32 unk28c; + /*0x290*/ u32 unk290; + /*0x294*/ u32 unk294; + /*0x298*/ u32 unk298; + /*0x29c*/ u32 unk29c; + /*0x2a0*/ u32 unk2a0; + /*0x2a4*/ u32 unk2a4; + /*0x2a8*/ u32 unk2a8; + /*0x2ac*/ u32 unk2ac; + /*0x2b0*/ u32 unk2b0; + /*0x2b4*/ u32 unk2b4; + /*0x2b8*/ u32 unk2b8; + /*0x2bc*/ u32 unk2bc; + /*0x2c0*/ u32 unk2c0; + /*0x2c4*/ u32 unk2c4; + /*0x2c8*/ u32 unk2c8; + /*0x2cc*/ u32 unk2cc; + /*0x2d0*/ u32 unk2d0; + /*0x2d4*/ u32 unk2d4; + /*0x2d8*/ u32 unk2d8; + /*0x2dc*/ u32 unk2dc; + /*0x2e0*/ u32 unk2e0; + /*0x2e4*/ u32 unk2e4; + /*0x2e8*/ u32 unk2e8; + /*0x2ec*/ u32 unk2ec; + /*0x2f0*/ u32 unk2f0; + /*0x2f4*/ u32 unk2f4; + /*0x2f8*/ u32 unk2f8; + /*0x2fc*/ u32 unk2fc; + /*0x300*/ u32 unk300; + /*0x304*/ u32 unk304; + /*0x308*/ u32 unk308; + /*0x30c*/ u32 unk30c; + /*0x310*/ u32 unk310; + /*0x314*/ u32 unk314; + /*0x318*/ u32 unk318; + /*0x31c*/ u32 unk31c; + /*0x320*/ u32 unk320; + /*0x324*/ u32 unk324; + /*0x328*/ u32 unk328; + /*0x32c*/ u32 unk32c; + /*0x330*/ u32 unk330; + /*0x334*/ u32 unk334; + /*0x338*/ u32 unk338; + /*0x33c*/ u32 unk33c; + /*0x340*/ u32 unk340; + /*0x344*/ u32 unk344; + /*0x348*/ u32 unk348; + /*0x34c*/ u32 unk34c; + /*0x350*/ u32 unk350; + /*0x354*/ u32 unk354; + /*0x358*/ u32 unk358; + /*0x35c*/ u32 unk35c; + /*0x360*/ u32 unk360; + /*0x364*/ u32 unk364; + /*0x368*/ u32 unk368; + /*0x36c*/ u32 unk36c; + /*0x370*/ u32 unk370; + /*0x374*/ u32 unk374; + /*0x378*/ u32 unk378; + /*0x37c*/ u32 unk37c; + /*0x380*/ u32 unk380; + /*0x384*/ u32 unk384; + /*0x388*/ u32 unk388; + /*0x38c*/ u32 unk38c; + /*0x390*/ u32 unk390; + /*0x394*/ u32 unk394; + /*0x398*/ u32 unk398; + /*0x39c*/ u32 unk39c; + /*0x3a0*/ u32 unk3a0; + /*0x3a4*/ u32 unk3a4; + /*0x3a8*/ u32 unk3a8; + /*0x3ac*/ u32 unk3ac; + /*0x3b0*/ u32 unk3b0; + /*0x3b4*/ u32 unk3b4; + /*0x3b8*/ u32 unk3b8; + /*0x3bc*/ u32 unk3bc; + /*0x3c0*/ u32 unk3c0; + /*0x3c4*/ u32 unk3c4; + /*0x3c8*/ u32 unk3c8; + /*0x3cc*/ u32 unk3cc; + /*0x3d0*/ u32 unk3d0; + /*0x3d4*/ u32 unk3d4; + /*0x3d8*/ u32 unk3d8; + /*0x3dc*/ u32 unk3dc; + /*0x3e0*/ u32 unk3e0; + /*0x3e4*/ u32 unk3e4; + /*0x3e8*/ u32 unk3e8; + /*0x3ec*/ u32 unk3ec; + /*0x3f0*/ u32 unk3f0; + /*0x3f4*/ u32 unk3f4; + /*0x3f8*/ struct fileguid fileguid; +}; + #endif