diff --git a/src/game/bot.c b/src/game/bot.c index 8c581c0bd..266177e29 100644 --- a/src/game/bot.c +++ b/src/game/bot.c @@ -240,7 +240,7 @@ void botSpawn(struct chrdata *chr, u8 respawning) if (aibot) { botReset(chr, respawning); - chrInitSplats(chr); + splatResetChr(chr); thing = scenarioChooseSpawnLocation(chr->chrwidth, &pos, rooms, chr->prop); chr->hidden |= CHRHFLAG_00100000; chrMoveToPos(chr, &pos, rooms, thing, true); diff --git a/src/game/chr.c b/src/game/chr.c index c7cf6c691..8bd6e195a 100644 --- a/src/game/chr.c +++ b/src/game/chr.c @@ -1335,7 +1335,7 @@ void chrInit(struct prop *prop, u8 *ailist) chr->goposhitcount = 0; #endif - chrInitSplats(chr); + splatResetChr(chr); } struct prop *chr0f020b14(struct prop *prop, struct model *model, @@ -5417,7 +5417,7 @@ void chrHit(struct shotdata *shotdata, struct hit *hit) chrBruise(hit->model, hit->hitpart, hit->node, &sp5c); } - splatsCreateForChrHit(prop, (struct splat *)shotdata, &sp98, &hitpos, darker, 0, g_Vars.currentplayer->prop->chr); + splatsCreateForChrHit(prop, shotdata, &sp98, &hitpos, darker, 0, g_Vars.currentplayer->prop->chr); } #else // NTSC beta wraps all the blood logic in this paintball check. @@ -5439,7 +5439,7 @@ void chrHit(struct shotdata *shotdata, struct hit *hit) chrBruise(hit->model, hit->hitpart, hit->node, &sp5c); - splatsCreateForChrHit(prop, (struct splat *)shotdata, &sp98, &hitpos, darker, 0, g_Vars.currentplayer->prop->chr); + splatsCreateForChrHit(prop, shotdata, &sp98, &hitpos, darker, 0, g_Vars.currentplayer->prop->chr); } #endif } diff --git a/src/game/player.c b/src/game/player.c index ee1df7700..2c6a519d7 100644 --- a/src/game/player.c +++ b/src/game/player.c @@ -506,7 +506,7 @@ void playerStartNewLife(void) } } - chrInitSplats(g_Vars.currentplayer->prop->chr); + splatResetChr(g_Vars.currentplayer->prop->chr); playerLoadDefaults(); g_Vars.currentplayer->isdead = false; g_Vars.currentplayer->healthdamagetype = DAMAGETYPE_7; diff --git a/src/game/prop.c b/src/game/prop.c index 135fad1bb..8753b4cb8 100644 --- a/src/game/prop.c +++ b/src/game/prop.c @@ -1984,7 +1984,7 @@ glabel var7f1ab190pf /* f063720: 920f003d */ lbu $t7,0x3d($s0) /* f063724: 8e020004 */ lw $v0,0x4($s0) /* f063728: 02002025 */ move $a0,$s0 -/* f06372c: 0fc5260c */ jal splatTick +/* f06372c: 0fc5260c */ jal splatTickChr /* f063730: afa20048 */ sw $v0,0x48($sp) /* f063734: 8fa20048 */ lw $v0,0x48($sp) /* f063738: 10400008 */ beqz $v0,.PF0f06375c @@ -2052,7 +2052,7 @@ glabel var7f1ab190pf .PF0f063818: /* f063818: 54610007 */ bnel $v1,$at,.PF0f063838 /* f06381c: 962e035e */ lhu $t6,0x35e($s1) -/* f063820: 0fc5260c */ jal splatTick +/* f063820: 0fc5260c */ jal splatTickChr /* f063824: 02002025 */ move $a0,$s0 /* f063828: 0fc30a3b */ jal playerTickThirdPerson /* f06382c: 02002025 */ move $a0,$s0 @@ -2154,7 +2154,7 @@ glabel var7f1ab190pf /* f06398c: 00000000 */ nop /* f063990: 8e020004 */ lw $v0,0x4($s0) /* f063994: 02002025 */ move $a0,$s0 -/* f063998: 0fc5260c */ jal splatTick +/* f063998: 0fc5260c */ jal splatTickChr /* f06399c: afa20044 */ sw $v0,0x44($sp) /* f0639a0: 8fa20044 */ lw $v0,0x44($sp) /* f0639a4: 10400008 */ beqz $v0,.PF0f0639c8 @@ -2227,7 +2227,7 @@ glabel var7f1ab190pf .PF0f063a98: /* f063a98: 54610007 */ bnel $v1,$at,.PF0f063ab8 /* f063a9c: 8faf0034 */ lw $t7,0x34($sp) -/* f063aa0: 0fc5260c */ jal splatTick +/* f063aa0: 0fc5260c */ jal splatTickChr /* f063aa4: 02002025 */ move $a0,$s0 /* f063aa8: 0fc30a3b */ jal playerTickThirdPerson /* f063aac: 02002025 */ move $a0,$s0 @@ -2983,7 +2983,7 @@ glabel var7f1ab190pf /* f063670: 920f003d */ lbu $t7,0x3d($s0) /* f063674: 8e020004 */ lw $v0,0x4($s0) /* f063678: 02002025 */ move $a0,$s0 -/* f06367c: 0fc527cc */ jal splatTick +/* f06367c: 0fc527cc */ jal splatTickChr /* f063680: afa20048 */ sw $v0,0x48($sp) /* f063684: 8fa20048 */ lw $v0,0x48($sp) /* f063688: 10400008 */ beqz $v0,.PB0f0636ac @@ -3051,7 +3051,7 @@ glabel var7f1ab190pf .PB0f063768: /* f063768: 54610007 */ bnel $v1,$at,.PB0f063788 /* f06376c: 962e035e */ lhu $t6,0x35e($s1) -/* f063770: 0fc527cc */ jal splatTick +/* f063770: 0fc527cc */ jal splatTickChr /* f063774: 02002025 */ move $a0,$s0 /* f063778: 0fc309fe */ jal playerTickThirdPerson /* f06377c: 02002025 */ move $a0,$s0 @@ -3153,7 +3153,7 @@ glabel var7f1ab190pf /* f0638dc: 00000000 */ nop /* f0638e0: 8e020004 */ lw $v0,0x4($s0) /* f0638e4: 02002025 */ move $a0,$s0 -/* f0638e8: 0fc527cc */ jal splatTick +/* f0638e8: 0fc527cc */ jal splatTickChr /* f0638ec: afa20044 */ sw $v0,0x44($sp) /* f0638f0: 8fa20044 */ lw $v0,0x44($sp) /* f0638f4: 10400008 */ beqz $v0,.PB0f063918 @@ -3226,7 +3226,7 @@ glabel var7f1ab190pf .PB0f0639e8: /* f0639e8: 54610007 */ bnel $v1,$at,.PB0f063a08 /* f0639ec: 8faf0034 */ lw $t7,0x34($sp) -/* f0639f0: 0fc527cc */ jal splatTick +/* f0639f0: 0fc527cc */ jal splatTickChr /* f0639f4: 02002025 */ move $a0,$s0 /* f0639f8: 0fc309fe */ jal playerTickThirdPerson /* f0639fc: 02002025 */ move $a0,$s0 @@ -3969,7 +3969,7 @@ glabel propsTickPlayer /* f0634b4: 920f003d */ lbu $t7,0x3d($s0) /* f0634b8: 8e020004 */ lw $v0,0x4($s0) /* f0634bc: 02002025 */ or $a0,$s0,$zero -/* f0634c0: 0fc522e0 */ jal splatTick +/* f0634c0: 0fc522e0 */ jal splatTickChr /* f0634c4: afa20048 */ sw $v0,0x48($sp) /* f0634c8: 8fa20048 */ lw $v0,0x48($sp) /* f0634cc: 10400008 */ beqz $v0,.L0f0634f0 @@ -4037,7 +4037,7 @@ glabel propsTickPlayer .L0f0635ac: /* f0635ac: 54610007 */ bnel $v1,$at,.L0f0635cc /* f0635b0: 962e035e */ lhu $t6,0x35e($s1) -/* f0635b4: 0fc522e0 */ jal splatTick +/* f0635b4: 0fc522e0 */ jal splatTickChr /* f0635b8: 02002025 */ or $a0,$s0,$zero /* f0635bc: 0fc308d9 */ jal playerTickThirdPerson /* f0635c0: 02002025 */ or $a0,$s0,$zero @@ -4133,7 +4133,7 @@ glabel propsTickPlayer /* f063708: 00000000 */ nop /* f06370c: 8e020004 */ lw $v0,0x4($s0) /* f063710: 02002025 */ or $a0,$s0,$zero -/* f063714: 0fc522e0 */ jal splatTick +/* f063714: 0fc522e0 */ jal splatTickChr /* f063718: afa20044 */ sw $v0,0x44($sp) /* f06371c: 8fa20044 */ lw $v0,0x44($sp) /* f063720: 10400008 */ beqz $v0,.L0f063744 @@ -4206,7 +4206,7 @@ glabel propsTickPlayer .L0f063814: /* f063814: 54610007 */ bnel $v1,$at,.L0f063834 /* f063818: 8faf0034 */ lw $t7,0x34($sp) -/* f06381c: 0fc522e0 */ jal splatTick +/* f06381c: 0fc522e0 */ jal splatTickChr /* f063820: 02002025 */ or $a0,$s0,$zero /* f063824: 0fc308d9 */ jal playerTickThirdPerson /* f063828: 02002025 */ or $a0,$s0,$zero @@ -4942,7 +4942,7 @@ glabel propsTickPlayer /* f062728: 920f003d */ lbu $t7,0x3d($s0) /* f06272c: 8e020004 */ lw $v0,0x4($s0) /* f062730: 02002025 */ or $a0,$s0,$zero -/* f062734: 0fc50cd4 */ jal splatTick +/* f062734: 0fc50cd4 */ jal splatTickChr /* f062738: afa20048 */ sw $v0,0x48($sp) /* f06273c: 8fa20048 */ lw $v0,0x48($sp) /* f062740: 10400008 */ beqz $v0,.NB0f062764 @@ -5010,7 +5010,7 @@ glabel propsTickPlayer .NB0f062820: /* f062820: 54610007 */ bnel $v1,$at,.NB0f062840 /* f062824: 962e035e */ lhu $t6,0x35e($s1) -/* f062828: 0fc50cd4 */ jal splatTick +/* f062828: 0fc50cd4 */ jal splatTickChr /* f06282c: 02002025 */ or $a0,$s0,$zero /* f062830: 0fc2ffcb */ jal playerTickThirdPerson /* f062834: 02002025 */ or $a0,$s0,$zero @@ -5106,7 +5106,7 @@ glabel propsTickPlayer /* f06297c: 00000000 */ sll $zero,$zero,0x0 /* f062980: 8e020004 */ lw $v0,0x4($s0) /* f062984: 02002025 */ or $a0,$s0,$zero -/* f062988: 0fc50cd4 */ jal splatTick +/* f062988: 0fc50cd4 */ jal splatTickChr /* f06298c: afa20044 */ sw $v0,0x44($sp) /* f062990: 8fa20044 */ lw $v0,0x44($sp) /* f062994: 10400008 */ beqz $v0,.NB0f0629b8 @@ -5179,7 +5179,7 @@ glabel propsTickPlayer .NB0f062a88: /* f062a88: 54610007 */ bnel $v1,$at,.NB0f062aa8 /* f062a8c: 8faf0034 */ lw $t7,0x34($sp) -/* f062a90: 0fc50cd4 */ jal splatTick +/* f062a90: 0fc50cd4 */ jal splatTickChr /* f062a94: 02002025 */ or $a0,$s0,$zero /* f062a98: 0fc2ffcb */ jal playerTickThirdPerson /* f062a9c: 02002025 */ or $a0,$s0,$zero @@ -5818,7 +5818,7 @@ glabel propsTickPlayer // if (prop->type == PROPTYPE_CHR) { // struct chrdata *chr = prop->chr; // -// splatTick(prop); +// splatTickChr(prop); // // if (chr && chr->aibot) { // op = botTick(prop); @@ -5837,7 +5837,7 @@ glabel propsTickPlayer // } else if (prop->type == PROPTYPE_SMOKE) { // op = smokeTickPlayer(prop); // } else if (prop->type == PROPTYPE_PLAYER) { -// splatTick(prop); +// splatTickChr(prop); // op = playerTickThirdPerson(prop); // } // } @@ -5881,7 +5881,7 @@ glabel propsTickPlayer // if (prop->type == PROPTYPE_CHR) { // struct chrdata *chr = prop->chr; // -// splatTick(prop); +// splatTickChr(prop); // // if (chr && chr->aibot) { // op = botTick(prop); @@ -5909,7 +5909,7 @@ glabel propsTickPlayer // } else if (prop->type == PROPTYPE_SMOKE) { // op = smokeTickPlayer(prop); // } else if (prop->type == PROPTYPE_PLAYER) { -// splatTick(prop); +// splatTickChr(prop); // op = playerTickThirdPerson(prop); // } // diff --git a/src/game/splat.c b/src/game/splat.c index 277213f05..7f8c0a3cf 100644 --- a/src/game/splat.c +++ b/src/game/splat.c @@ -25,7 +25,7 @@ u32 var8007f8b0 = 0x43340000; u32 var8007f8b4 = 0x40a00000; u32 var8007f8b8 = 0x42480000; -void splatTick(struct prop *prop) +void splatTickChr(struct prop *prop) { struct chrdata *chr = prop->chr; struct chrdata *attacker = chr->lastattacker; @@ -64,6 +64,7 @@ void splatTick(struct prop *prop) chr->deaddropsplatsadded += splatsCreate(1, 1.1f, prop, NULL, 0, 0, isskedar, 1, TICKS(150), attacker, random() & 8); } } else { + // Consider creating a wounded drop u32 value = chr->bulletstaken * chr->tickssincesplat; if (value > TICKS(240)) { @@ -72,10 +73,10 @@ void splatTick(struct prop *prop) if (dist > 40) { addmore = true; - chr->splatsdroppedhe = 0; - } else if (chr->splatsdroppedhe < 8) { + chr->splatsdroppedhere = 0; + } else if (chr->splatsdroppedhere < 8) { addmore = true; - chr->splatsdroppedhe++; + chr->splatsdroppedhere++; } if (addmore) { @@ -95,7 +96,7 @@ void splatTick(struct prop *prop) chr->tickssincesplat += g_Vars.lvupdate240_60; } -void splatsCreateForChrHit(struct prop *prop, struct splat *arg1, struct coord *arg2, struct coord *arg3, s32 arg4, s32 arg5, struct chrdata *arg6) +void splatsCreateForChrHit(struct prop *prop, struct shotdata *arg1, struct coord *arg2, struct coord *arg3, s32 arg4, s32 arg5, struct chrdata *arg6) { #if VERSION != VERSION_JPN_FINAL struct chrdata *chr = prop->chr; @@ -114,30 +115,30 @@ void splatsCreateForChrHit(struct prop *prop, struct splat *arg1, struct coord * #endif } -s32 splatsCreate(s32 qty, f32 arg1, struct prop *prop, struct splat *arg3, struct coord *arg4, struct coord *arg5, s32 arg6, s32 arg7, s32 arg8, struct chrdata *arg9, s32 arg10) +s32 splatsCreate(s32 qty, f32 arg1, struct prop *prop, struct shotdata *arg3, struct coord *arg4, struct coord *arg5, s32 arg6, s32 arg7, s32 arg8, struct chrdata *arg9, s32 arg10) { #if VERSION == VERSION_JPN_FINAL return 0; #else - s32 i; - s32 j; - struct splat stacksplat; - struct splat *splat = arg7 == 0 ? arg3 : &stacksplat; - f32 spfc[3]; - f32 spf0[3]; - f32 spe4[3]; + struct shotdata stackshotdata; + struct shotdata *shotdata = arg7 == 0 ? arg3 : &stackshotdata; + struct coord spfc; + struct coord spf0; + struct coord spe4; Mtxf spa4; s32 numdropped = 0; f32 dist; + s32 i; + s32 j; if (arg7 == 0) { - dist = coordsGetDistance(&splat->unk01c, arg5); + dist = coordsGetDistance(&shotdata->gunpos, arg5); for (i = 0; i < 3; i++) { - spfc[i] = ((f32 *)&splat->unk028)[i]; - spf0[i] = ((f32 *)&splat->unk00c)[i]; - ((f32 *)&splat->unk01c)[i] = ((f32 *)arg5)[i]; - ((f32 *)&splat->unk000)[i] = ((f32 *)arg4)[i]; + spfc.f[i] = shotdata->dir.f[i]; + spf0.f[i] = shotdata->unk0c.f[i]; + shotdata->gunpos.f[i] = arg5->f[i]; + shotdata->unk00.f[i] = arg4->f[i]; } } else { f32 extraheight; @@ -150,42 +151,41 @@ s32 splatsCreate(s32 qty, f32 arg1, struct prop *prop, struct splat *arg3, struc dist = 0.7f; - splat->unk028.x = 0; spfc[0] = 0; - splat->unk028.y = -1; spfc[1] = -1; - splat->unk028.z = 0; spfc[2] = 0; + spfc.x = shotdata->dir.x = 0; + spfc.y = shotdata->dir.y = -1; + spfc.z = shotdata->dir.z = 0; - splat->unk00c.x = 0; spf0[0] = 0; - splat->unk00c.y = -1; spf0[1] = -1; - splat->unk00c.z = 0; spf0[2] = 0; + spf0.x = shotdata->unk0c.x = 0; + spf0.y = shotdata->unk0c.y = -1; + spf0.z = shotdata->unk0c.z = 0; - splat->unk01c.x = prop->pos.x; - splat->unk01c.y = prop->pos.y + extraheight; - splat->unk01c.z = prop->pos.z; + shotdata->gunpos.x = prop->pos.x; + shotdata->gunpos.y = prop->pos.y + extraheight; + shotdata->gunpos.z = prop->pos.z; - splat->unk000.x = prop->pos.x; - splat->unk000.y = prop->pos.y + extraheight; - splat->unk000.z = prop->pos.z; + shotdata->unk00.x = prop->pos.x; + shotdata->unk00.y = prop->pos.y + extraheight; + shotdata->unk00.z = prop->pos.z; } for (i = 0; i < qty; i++) { for (j = 0; j < 3; j++) { - f32 rand = RANDOMFRAC(); - spe4[j] = (rand * var8007f8a8 + rand * var8007f8a8 - var8007f8a8) * 0.017453292384744f; + spe4.f[j] = (RANDOMFRAC() * var8007f8a8 * 2.0f - var8007f8a8) * 0.017453292384744f; } - mtx4LoadRotation((struct coord *)spe4, &spa4); - mtx4RotateVec(&spa4, (struct coord *)spfc, &splat->unk028); - mtx4RotateVec(&spa4, (struct coord *)spf0, &splat->unk00c); + mtx4LoadRotation(&spe4, &spa4); + mtx4RotateVec(&spa4, &spfc, &shotdata->dir); + mtx4RotateVec(&spa4, &spf0, &shotdata->unk0c); #if VERSION >= VERSION_NTSC_1_0 - func0f177164(&splat->unk028, &splat->unk028, 403, "splat.c"); - func0f177164(&splat->unk00c, &splat->unk00c, 404, "splat.c"); + func0f177164(&shotdata->dir, &shotdata->dir, 403, "splat.c"); + func0f177164(&shotdata->unk0c, &shotdata->unk0c, 404, "splat.c"); #else - func0f177164(&splat->unk028, &splat->unk028, 405, "splat.c"); - func0f177164(&splat->unk00c, &splat->unk00c, 406, "splat.c"); + func0f177164(&shotdata->dir, &shotdata->dir, 405, "splat.c"); + func0f177164(&shotdata->unk0c, &shotdata->unk0c, 406, "splat.c"); #endif - if (func0f149274(arg1, prop, splat, dist, arg6, arg7, arg8, arg9, arg10)) { + if (func0f149274(arg1, prop, shotdata, dist, arg6, arg7, arg8, arg9, arg10)) { numdropped++; } } @@ -204,7 +204,6 @@ s32 splatsCreate(s32 qty, f32 arg1, struct prop *prop, struct splat *arg3, struc } const char var7f1b5fe0[] = "Splat : Out of range\n"; -const char var7f1b5ff8[] = "Splat_ResetChr : Reset One Char : chrdata = %x\n"; #if VERSION == VERSION_JPN_FINAL void func0f149250jf(void); @@ -945,14 +944,16 @@ glabel var7f1b6048 ); #endif -void chrInitSplats(struct chrdata *chr) +void splatResetChr(struct chrdata *chr) { + osSyncPrintf("Splat_ResetChr : Reset One Char : chrdata = %x\n", (u32)chr); + chr->bulletstaken = 0; chr->tickssincesplat = 0; chr->stdsplatsadded = 0; chr->woundedsplatsadded = 0; chr->deaddropsplatsadded = 0; - chr->splatsdroppedhe = 0; + chr->splatsdroppedhere = 0; chr->lastdroppos.x = 0; chr->lastdroppos.y = 0; chr->lastdroppos.z = 0; diff --git a/src/include/game/splat.h b/src/include/game/splat.h index 9d17794a9..952e7279f 100644 --- a/src/include/game/splat.h +++ b/src/include/game/splat.h @@ -4,13 +4,13 @@ #include "data.h" #include "types.h" -void splatTick(struct prop *prop); -void splatsCreateForChrHit(struct prop *prop, struct splat *arg1, struct coord *arg2, struct coord *arg3, s32 arg4, s32 arg5, struct chrdata *arg6); -s32 splatsCreate(s32 qty, f32 arg1, struct prop *prop, struct splat *arg3, struct coord *arg4, struct coord *arg5, s32 arg6, s32 arg7, s32 arg8, struct chrdata *arg9, s32 arg10); -bool func0f149274(f32 arg0, struct prop *prop, struct splat *arg2, f32 arg3, s32 arg4, s32 arg5, s32 arg6, struct chrdata *arg7, s32 arg8); +void splatTickChr(struct prop *prop); +void splatsCreateForChrHit(struct prop *prop, struct shotdata *arg1, struct coord *arg2, struct coord *arg3, s32 arg4, s32 arg5, struct chrdata *arg6); +s32 splatsCreate(s32 qty, f32 arg1, struct prop *prop, struct shotdata *arg3, struct coord *arg4, struct coord *arg5, s32 arg6, s32 arg7, s32 arg8, struct chrdata *arg9, s32 arg10); +bool func0f149274(f32 arg0, struct prop *prop, struct shotdata *arg2, f32 arg3, s32 arg4, s32 arg5, s32 arg6, struct chrdata *arg7, s32 arg8); void splatsTick(void); u32 func0f14986c(void); -void chrInitSplats(struct chrdata *chr); +void splatResetChr(struct chrdata *chr); void pheadInit2(void); #endif diff --git a/src/include/types.h b/src/include/types.h index 2f4411937..940d06d15 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -1313,7 +1313,7 @@ struct chrdata { /*0x334*/ u8 bulletstaken; /*0x335*/ u8 woundedsplatsadded; /*0x336*/ u16 tickssincesplat; - /*0x338*/ u8 splatsdroppedhe; + /*0x338*/ u8 splatsdroppedhere; /*0x339*/ u8 stdsplatsadded; /*0x33a*/ u8 deaddropsplatsadded; /*0x33b*/ s8 aimtesttimer60; @@ -5514,275 +5514,6 @@ struct var800ab718 { s32 lrt; }; -// This struct might be the same struct as shotdata -struct splat { - /*0x000*/ struct coord unk000; - /*0x00c*/ struct coord unk00c; - /*0x018*/ u32 unk018; - /*0x01c*/ struct coord unk01c; - /*0x028*/ struct coord unk028; - /*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*/ u32 unk3f8; - /*0x3fc*/ u32 unk3fc; - /*0x400*/ u32 unk400; - /*0x404*/ u32 unk404; - /*0x408*/ u32 unk408; - /*0x40c*/ u32 unk40c; - /*0x410*/ u32 unk410; - /*0x414*/ u32 unk414; - /*0x418*/ u32 unk418; - /*0x41c*/ u32 unk41c; - /*0x420*/ u32 unk420; - /*0x424*/ u32 unk424; - /*0x428*/ u32 unk428; - /*0x42c*/ u32 unk42c; - /*0x430*/ u32 unk430; - /*0x434*/ u32 unk434; - /*0x438*/ u32 unk438; - /*0x43c*/ u32 unk43c; - /*0x440*/ u32 unk440; -}; - struct menurendercontext { s16 x; s16 y;