From c42c86c2c584998c121a41eb695228a55027ebe2 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 11 Apr 2020 13:11:12 +1000 Subject: [PATCH] Attempt to decompile func0f19d5f4 --- src/game/data/data_02e820.c | 24 +++----- src/game/game_19c990.c | 87 ++++++++++++++++++++++++++--- src/include/game/data/data_02e820.h | 1 + src/include/game/game_19c990.h | 2 +- src/include/game/wallhit.h | 2 +- src/include/types.h | 44 ++++++++++----- 6 files changed, 121 insertions(+), 39 deletions(-) diff --git a/src/game/data/data_02e820.c b/src/game/data/data_02e820.c index ba75497c0..75a0c1927 100644 --- a/src/game/data/data_02e820.c +++ b/src/game/data/data_02e820.c @@ -23,22 +23,14 @@ u8 var80088804 = 0; u8 var80088808 = 0; u8 var8008880c = 0; void *var80088810 = NULL; -u32 var80088814 = 0x00d600d7; -u32 var80088818 = 0x00d900d8; -u32 var8008881c = 0x00da00db; -u32 var80088820 = 0x00dc00dd; -u32 var80088824 = 0x00de00df; -u32 var80088828 = 0x00e000e1; -u32 var8008882c = 0x00e200e3; -u32 var80088830 = 0x00e400e5; -u32 var80088834 = 0x00e600e7; -u32 var80088838 = 0x00e800e9; -u32 var8008883c = 0x00ea00eb; -u32 var80088840 = 0x00f400f3; -u32 var80088844 = 0x00f200f1; -u32 var80088848 = 0x00f000ef; -u32 var8008884c = 0x00ee00ed; -u32 var80088850 = 0x00ec0000; + +u16 g_FrPads[] = { + 0x00d6, 0x00d7, 0x00d9, 0x00d8, 0x00da, 0x00db, 0x00dc, 0x00dd, + 0x00de, 0x00df, 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, + 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00f4, 0x00f3, + 0x00f2, 0x00f1, 0x00f0, 0x00ef, 0x00ee, 0x00ed, 0x00ec, +}; + u32 var80088854 = 0x00000005; u32 var80088858 = 0x00000006; u32 var8008885c = 0x00000007; diff --git a/src/game/game_19c990.c b/src/game/game_19c990.c index 118c8f70a..e9cde0a56 100644 --- a/src/game/game_19c990.c +++ b/src/game/game_19c990.c @@ -901,7 +901,7 @@ glabel func0f19d5f4 /* f19d5f4: 27bdff60 */ addiu $sp,$sp,-160 /* f19d5f8: afbf003c */ sw $ra,0x3c($sp) /* f19d5fc: 3c018009 */ lui $at,%hi(var8008880c) -/* f19d600: 3c048009 */ lui $a0,%hi(var80088814) +/* f19d600: 3c048009 */ lui $a0,%hi(g_FrPads) /* f19d604: afb50038 */ sw $s5,0x38($sp) /* f19d608: afb40034 */ sw $s4,0x34($sp) /* f19d60c: afb30030 */ sw $s3,0x30($sp) @@ -911,7 +911,7 @@ glabel func0f19d5f4 /* f19d61c: f7b60018 */ sdc1 $f22,0x18($sp) /* f19d620: f7b40010 */ sdc1 $f20,0x10($sp) /* f19d624: a020880c */ sb $zero,%lo(var8008880c)($at) -/* f19d628: 94848814 */ lhu $a0,%lo(var80088814)($a0) +/* f19d628: 94848814 */ lhu $a0,%lo(g_FrPads)($a0) /* f19d62c: 27a60048 */ addiu $a2,$sp,0x48 /* f19d630: 0fc456ac */ jal padUnpack /* f19d634: 24050002 */ addiu $a1,$zero,0x2 @@ -1019,6 +1019,79 @@ glabel func0f19d5f4 /* f19d7c8: 27bd00a0 */ addiu $sp,$sp,0xa0 ); +// Mismatch due to something weird with the unk465 bitfield, plus some f32 +// regalloc near pad.pos.z. +//void func0f19d5f4(void) +//{ +// s32 i; +// struct pad pad; +// +// var8008880c = 0; +// +// padUnpack(g_FrPads[0], PADFIELD_POS, &pad); +// +// g_FiringRangeData.unk000 = 0; +// g_FiringRangeData.goalscore = 0; +// g_FiringRangeData.timelimit = 200; +// g_FiringRangeData.ammolimit = 255; +// g_FiringRangeData.sdgrenadelimit = 255; +// g_FiringRangeData.goalaccuracy = 0; +// g_FiringRangeData.goaltargets = 255; +// g_FiringRangeData.unk00c = 1; +// +// for (i = 0; i < 18; i++) { +// g_FiringRangeData.unk010[i].unk08.x = pad.pos.x; +// g_FiringRangeData.unk010[i].unk08.y = pad.pos.y; +// g_FiringRangeData.unk010[i].unk08.z = pad.pos.z + i * 6.0f; +// +// g_FiringRangeData.unk010[i].unk00_01 = false; +// g_FiringRangeData.unk010[i].unk00_06 = false; +// g_FiringRangeData.unk010[i].unk00_03 = false; +// g_FiringRangeData.unk010[i].unk20 = 0; +// g_FiringRangeData.unk010[i].unk21 = 0; +// +// g_FiringRangeData.unk010[i].unk1c = 0; +// g_FiringRangeData.unk010[i].unk14 = 15300; +// g_FiringRangeData.unk010[i].unk18 = 0; +// +// g_FiringRangeData.unk010[i].unk00_05 = false; +// g_FiringRangeData.unk010[i].unk24 = 0; +// g_FiringRangeData.unk010[i].unk28 = 0; +// g_FiringRangeData.unk010[i].unk2c = 0; +// g_FiringRangeData.unk010[i].unk31 = 0; +// g_FiringRangeData.unk010[i].unk32 = 0; +// g_FiringRangeData.unk010[i].unk33 = 0; +// g_FiringRangeData.unk010[i].unk38 = 0; +// g_FiringRangeData.unk010[i].unk34 = -1; +// +// func0f13e40c(g_FiringRangeData.unk010[i].unk04, false); +// func0f13e40c(g_FiringRangeData.unk010[i].unk04, true); +// } +// +// g_FiringRangeData.unk465_05 = true; +// g_FiringRangeData.timetaken = -240; +// g_FiringRangeData.unk476 = -1; +// g_FiringRangeData.score = 0; +// g_FiringRangeData.unk454 = 0; +// g_FiringRangeData.targetsdestroyed = 0; +// g_FiringRangeData.unk464 = 0; +// g_FiringRangeData.unk470 = 0; +// g_FiringRangeData.unk471 = 0; +// g_FiringRangeData.unk472 = 0; +// g_FiringRangeData.failreason = 0; +// g_FiringRangeData.numshots = 0; +// g_FiringRangeData.numhitstype4 = 0; +// g_FiringRangeData.numhitstype3 = 0; +// g_FiringRangeData.numhitstype2 = 0; +// g_FiringRangeData.numhitstype1 = 0; +// g_FiringRangeData.unk466 = 0; +// g_FiringRangeData.unk467 = 0; +// g_FiringRangeData.unk468 = 0; +// g_FiringRangeData.unk46c = 0; +// g_FiringRangeData.unk474 = 0; +// g_FiringRangeData.unk465_04 = false; +//} + struct frdata *getFiringRangeData(void) { return &g_FiringRangeData; @@ -1758,7 +1831,7 @@ glabel var7f1b941c /* f19e14c: 00403825 */ or $a3,$v0,$zero /* f19e150: 0007c040 */ sll $t8,$a3,0x1 /* f19e154: 806d0044 */ lb $t5,0x44($v1) -/* f19e158: 3c048009 */ lui $a0,%hi(var80088814) +/* f19e158: 3c048009 */ lui $a0,%hi(g_FrPads) /* f19e15c: 8fa8004c */ lw $t0,0x4c($sp) /* f19e160: 144d0006 */ bne $v0,$t5,.L0f19e17c /* f19e164: 00982021 */ addu $a0,$a0,$t8 @@ -1769,7 +1842,7 @@ glabel var7f1b941c /* f19e178: a06f0031 */ sb $t7,0x31($v1) .L0f19e17c: /* f19e17c: a0670044 */ sb $a3,0x44($v1) -/* f19e180: 94848814 */ lhu $a0,%lo(var80088814)($a0) +/* f19e180: 94848814 */ lhu $a0,%lo(g_FrPads)($a0) /* f19e184: 24050002 */ addiu $a1,$zero,0x2 /* f19e188: 27a60070 */ addiu $a2,$sp,0x70 /* f19e18c: afa30058 */ sw $v1,0x58($sp) @@ -2017,7 +2090,7 @@ glabel var7f1b9424 /* f19e4f4: a620004c */ sh $zero,0x4c($s1) /* f19e4f8: a6400002 */ sh $zero,0x2($s2) /* f19e4fc: 8e0e0010 */ lw $t6,0x10($s0) -/* f19e500: 3c048009 */ lui $a0,%hi(var80088814) +/* f19e500: 3c048009 */ lui $a0,%hi(g_FrPads) /* f19e504: 000e7fc2 */ srl $t7,$t6,0x1f /* f19e508: 51e0003b */ beqzl $t7,.L0f19e5f8 /* f19e50c: 8e2d000c */ lw $t5,0xc($s1) @@ -2054,7 +2127,7 @@ glabel var7f1b9424 /* f19e580: 000b6040 */ sll $t4,$t3,0x1 /* f19e584: 008c2021 */ addu $a0,$a0,$t4 /* f19e588: 0fc456ac */ jal padUnpack -/* f19e58c: 94848814 */ lhu $a0,%lo(var80088814)($a0) +/* f19e58c: 94848814 */ lhu $a0,%lo(g_FrPads)($a0) /* f19e590: 44935000 */ mtc1 $s3,$f10 /* f19e594: c7a400dc */ lwc1 $f4,0xdc($sp) /* f19e598: c7a800e4 */ lwc1 $f8,0xe4($sp) @@ -4907,7 +4980,7 @@ glabel func0f1a0a70 s32 frIsInTraining(void) { if (g_FiringRangeData.unk464 > 0 && - (g_FiringRangeData.unk465 == 2 || g_FiringRangeData.unk465 == 3)) { + (g_FiringRangeData.unk465_00 == 2 || g_FiringRangeData.unk465_00 == 3)) { return true; } diff --git a/src/include/game/data/data_02e820.h b/src/include/game/data/data_02e820.h index cddbb65a1..1c3ada0de 100644 --- a/src/include/game/data/data_02e820.h +++ b/src/include/game/data/data_02e820.h @@ -8,6 +8,7 @@ extern u8 var80088804; extern u8 var80088808; extern u8 var8008880c; extern void *var80088810; +extern u16 g_FrPads[]; extern u32 var80088854; extern u8 var800888a0; extern struct chrbio g_ChrBios[10]; diff --git a/src/include/game/game_19c990.h b/src/include/game/game_19c990.h index a05f97549..9c64ce409 100644 --- a/src/include/game/game_19c990.h +++ b/src/include/game/game_19c990.h @@ -24,7 +24,7 @@ void func0f19d4ec(void); void *func0f19d560(u32 len); void frSetDifficulty(s32 difficulty); u32 frGetDifficulty(void); -u32 func0f19d5f4(void); +void func0f19d5f4(void); struct frdata *getFiringRangeData(void); u32 func0f19d7d8(void); u32 func0f19d8a4(void); diff --git a/src/include/game/wallhit.h b/src/include/game/wallhit.h index c155e260c..cda366b1d 100644 --- a/src/include/game/wallhit.h +++ b/src/include/game/wallhit.h @@ -5,7 +5,7 @@ u32 func0f13e0e0(void); u32 func0f13e1b0(void); -u32 func0f13e40c(void); +void func0f13e40c(u32 arg0, bool arg1); u32 func0f13e4a8(void); u32 func0f13e5c8(void); u32 func0f13e640(void); diff --git a/src/include/types.h b/src/include/types.h index dd6e812e0..b370c05ea 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -4777,19 +4777,28 @@ struct hudmessage { struct frdata010 { /*0x00*/ u32 unk00_01 : 1; + /*0x00*/ u32 unk00_02 : 1; + /*0x00*/ u32 unk00_03 : 1; + /*0x00*/ u32 unk00_04 : 1; + /*0x00*/ u32 unk00_05 : 1; + /*0x00*/ u32 unk00_06 : 1; + /*0x00*/ u32 unk00_07 : 1; + /*0x00*/ u32 unk00_08 : 1; /*0x04*/ u32 unk04; - /*0x08*/ u32 unk08; - /*0x0c*/ u32 unk0c; - /*0x10*/ u32 unk10; + /*0x08*/ struct coord unk08; /*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; + /*0x1c*/ f32 unk1c; + /*0x20*/ u8 unk20; + /*0x21*/ u8 unk21; + /*0x24*/ f32 unk24; + /*0x28*/ f32 unk28; + /*0x2c*/ f32 unk2c; + /*0x30*/ u8 unk30; + /*0x31*/ u8 unk31; + /*0x32*/ u8 unk32; + /*0x33*/ u8 unk33; + /*0x34*/ s8 unk34; /*0x38*/ u32 unk38; }; @@ -4802,7 +4811,7 @@ struct frdata { /*0x006*/ u8 ammolimit; /*0x007*/ u8 sdgrenadelimit; /*0x008*/ u8 goalaccuracy; - /*0x00c*/ u32 unk00c; + /*0x00c*/ f32 unk00c; /*0x010*/ struct frdata010 unk010[18]; /*0x448*/ u8 difficulty; /*0x44c*/ s32 timetaken; @@ -4818,13 +4827,20 @@ struct frdata { /*0x460*/ u16 numhitstype3; /*0x462*/ u16 numhitstype4; /*0x464*/ s8 unk464; - /*0x465*/ u8 unk465 : 3; + /*0x465*/ u8 unk465_00 : 3; + /*0x465*/ u8 unk465_03 : 1; + /*0x465*/ u8 unk465_04 : 1; + /*0x465*/ u8 unk465_05 : 1; + /*0x465*/ u8 unk465_06 : 2; /*0x466*/ u8 unk466; /*0x467*/ u8 unk467; /*0x468*/ u8 unk468; /*0x46c*/ u32 unk46c; - /*0x470*/ u32 unk470; - /*0x474*/ u32 unk474; + /*0x470*/ u8 unk470; + /*0x471*/ u8 unk471; + /*0x472*/ u8 unk472; + /*0x474*/ u16 unk474; + /*0x476*/ s16 unk476; /*0x478*/ u32 unk478; /*0x47c*/ u32 unk47c; };