From 125046899ecf90624c3596e4abe91c4da4eb3ff4 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Wed, 14 Apr 2021 17:44:32 +1000 Subject: [PATCH] Attempt to decompile handRenderHud --- src/game/game_097ba0.c | 463 ++++++++++++++++++++++++++++++--- src/game/game_0b69d0.c | 2 +- src/game/game_1531a0.c | 2 +- src/game/propobj.c | 32 +-- src/include/game/game_097ba0.h | 8 +- src/include/game/game_1531a0.h | 2 +- src/include/types.h | 6 +- 7 files changed, 458 insertions(+), 57 deletions(-) diff --git a/src/game/game_097ba0.c b/src/game/game_097ba0.c index aa4f6c174..bc5d1bb10 100644 --- a/src/game/game_097ba0.c +++ b/src/game/game_097ba0.c @@ -16911,8 +16911,6 @@ char *weaponGetShortName(s32 weaponnum) const char var7f1ac170[] = "wantedfn %d tiggle %d\n"; const char var7f1ac188[] = "%d\n"; -const char var7f1ac18c[] = "%02d:%02d:%02d\n"; -const char var7f1ac19c[] = "%02d:%02d\n"; void currentPlayerReloadHandIfPossible(s32 handnum) { @@ -32300,7 +32298,7 @@ s32 weaponGetAmmoCapacity(s32 weaponnum, s32 func) } GLOBAL_ASM( -glabel func0f0a9b68 +glabel handRenderHudString /* f0a9b68: 27bdffa0 */ addiu $sp,$sp,-96 /* f0a9b6c: 3c0e8008 */ lui $t6,%hi(g_FontNumeric2) /* f0a9b70: 8dcefafc */ lw $t6,%lo(g_FontNumeric2)($t6) @@ -32425,7 +32423,7 @@ glabel func0f0a9b68 ); GLOBAL_ASM( -glabel func0f0a9d2c +glabel handRenderHudInteger /* f0a9d2c: 27bdffc8 */ addiu $sp,$sp,-56 /* f0a9d30: afa60040 */ sw $a2,0x40($sp) /* f0a9d34: 00a03025 */ or $a2,$a1,$zero @@ -32446,7 +32444,7 @@ glabel func0f0a9d2c /* f0a9d70: 8fa70044 */ lw $a3,0x44($sp) /* f0a9d74: afae0010 */ sw $t6,0x10($sp) /* f0a9d78: afaf0014 */ sw $t7,0x14($sp) -/* f0a9d7c: 0fc2a6da */ jal func0f0a9b68 +/* f0a9d7c: 0fc2a6da */ jal handRenderHudString /* f0a9d80: afb80018 */ sw $t8,0x18($sp) /* f0a9d84: 8fbf0024 */ lw $ra,0x24($sp) /* f0a9d88: 27bd0038 */ addiu $sp,$sp,0x38 @@ -32778,7 +32776,7 @@ glabel func0f0a9da8 #if VERSION >= VERSION_PAL_FINAL GLOBAL_ASM( -glabel func0f0a9fc0 +glabel handRenderHudGauge /* f0aa41c: 27bdff28 */ addiu $sp,$sp,-216 /* f0aa420: afbe0038 */ sw $s8,0x38($sp) /* f0aa424: afa600e0 */ sw $a2,0xe0($sp) @@ -33401,7 +33399,7 @@ glabel func0f0a9fc0 ); #else GLOBAL_ASM( -glabel func0f0a9fc0 +glabel handRenderHudGauge /* f0a9fc0: 27bdff30 */ addiu $sp,$sp,-208 /* f0a9fc4: afa600d8 */ sw $a2,0xd8($sp) /* f0a9fc8: 8faf00d8 */ lw $t7,0xd8($sp) @@ -33998,7 +33996,7 @@ glabel func0f0a9fc0 #if VERSION >= VERSION_PAL_FINAL GLOBAL_ASM( -glabel hudRenderAmmo +glabel handRenderHud /* f0aad34: 3c0e800a */ lui $t6,0x800a /* f0aad38: 8dcea794 */ lw $t6,-0x586c($t6) /* f0aad3c: 27bdfed0 */ addiu $sp,$sp,-304 @@ -34869,7 +34867,7 @@ glabel hudRenderAmmo /* f0ab9dc: afa00028 */ sw $zero,0x28($sp) /* f0ab9e0: afa8001c */ sw $t0,0x1c($sp) /* f0ab9e4: 24c6fffd */ addiu $a2,$a2,-3 -/* f0ab9e8: 0fc2a907 */ jal func0f0a9fc0 +/* f0ab9e8: 0fc2a907 */ jal handRenderHudGauge /* f0ab9ec: afaf0018 */ sw $t7,0x18($sp) /* f0ab9f0: 8fa3004c */ lw $v1,0x4c($sp) /* f0ab9f4: 8fb80048 */ lw $t8,0x48($sp) @@ -34883,7 +34881,7 @@ glabel hudRenderAmmo /* f0aba14: afa00014 */ sw $zero,0x14($sp) /* f0aba18: 00402025 */ move $a0,$v0 /* f0aba1c: 24070001 */ li $a3,0x1 -/* f0aba20: 0fc2a85e */ jal func0f0a9d2c +/* f0aba20: 0fc2a85e */ jal handRenderHudInteger /* f0aba24: 24c60002 */ addiu $a2,$a2,0x2 /* f0aba28: 8faa0058 */ lw $t2,0x58($sp) /* f0aba2c: afa20130 */ sw $v0,0x130($sp) @@ -35008,7 +35006,7 @@ glabel hudRenderAmmo /* f0abbe8: afa3001c */ sw $v1,0x1c($sp) /* f0abbec: 24c6fffd */ addiu $a2,$a2,-3 /* f0abbf0: 8fa40130 */ lw $a0,0x130($sp) -/* f0abbf4: 0fc2a907 */ jal func0f0a9fc0 +/* f0abbf4: 0fc2a907 */ jal handRenderHudGauge /* f0abbf8: afb90018 */ sw $t9,0x18($sp) /* f0abbfc: 8fa80038 */ lw $t0,0x38($sp) /* f0abc00: 8fa60100 */ lw $a2,0x100($sp) @@ -35021,7 +35019,7 @@ glabel hudRenderAmmo /* f0abc1c: 00402025 */ move $a0,$v0 /* f0abc20: 00003825 */ move $a3,$zero /* f0abc24: 24c6fffe */ addiu $a2,$a2,-2 -/* f0abc28: 0fc2a85e */ jal func0f0a9d2c +/* f0abc28: 0fc2a85e */ jal handRenderHudInteger /* f0abc2c: afb90010 */ sw $t9,0x10($sp) /* f0abc30: 8fa80038 */ lw $t0,0x38($sp) /* f0abc34: 8faa0058 */ lw $t2,0x58($sp) @@ -35089,7 +35087,7 @@ glabel hudRenderAmmo /* f0abd18: afab001c */ sw $t3,0x1c($sp) /* f0abd1c: afa60048 */ sw $a2,0x48($sp) /* f0abd20: afa9009c */ sw $t1,0x9c($sp) -/* f0abd24: 0fc2a907 */ jal func0f0a9fc0 +/* f0abd24: 0fc2a907 */ jal handRenderHudGauge /* f0abd28: afae0010 */ sw $t6,0x10($sp) /* f0abd2c: 8fae0048 */ lw $t6,0x48($sp) /* f0abd30: 3c1800ff */ lui $t8,0xff @@ -35101,7 +35099,7 @@ glabel hudRenderAmmo /* f0abd48: 8fa5009c */ lw $a1,0x9c($sp) /* f0abd4c: 8fa60054 */ lw $a2,0x54($sp) /* f0abd50: 00003825 */ move $a3,$zero -/* f0abd54: 0fc2a85e */ jal func0f0a9d2c +/* f0abd54: 0fc2a85e */ jal handRenderHudInteger /* f0abd58: afa00014 */ sw $zero,0x14($sp) /* f0abd5c: afa20130 */ sw $v0,0x130($sp) /* f0abd60: 8fb9005c */ lw $t9,0x5c($sp) @@ -35244,7 +35242,7 @@ glabel hudRenderAmmo /* f0abf50: 00003825 */ move $a3,$zero /* f0abf54: afa00014 */ sw $zero,0x14($sp) /* f0abf58: 24c6fffe */ addiu $a2,$a2,-2 -/* f0abf5c: 0fc2a7ed */ jal func0f0a9b68 +/* f0abf5c: 0fc2a7ed */ jal handRenderHudString /* f0abf60: afae0010 */ sw $t6,0x10($sp) /* f0abf64: afa20130 */ sw $v0,0x130($sp) .PF0f0abf68: @@ -35261,7 +35259,7 @@ glabel hudRenderAmmo ); #elif VERSION >= VERSION_NTSC_1_0 GLOBAL_ASM( -glabel hudRenderAmmo +glabel handRenderHud /* f0aa86c: 3c0e800a */ lui $t6,%hi(g_Vars+0x284) /* f0aa870: 8dcea244 */ lw $t6,%lo(g_Vars+0x284)($t6) /* f0aa874: 27bdfed0 */ addiu $sp,$sp,-304 @@ -36137,7 +36135,7 @@ glabel hudRenderAmmo /* f0ab520: afa00028 */ sw $zero,0x28($sp) /* f0ab524: afa8001c */ sw $t0,0x1c($sp) /* f0ab528: 24c6fffd */ addiu $a2,$a2,-3 -/* f0ab52c: 0fc2a7f0 */ jal func0f0a9fc0 +/* f0ab52c: 0fc2a7f0 */ jal handRenderHudGauge /* f0ab530: afb90018 */ sw $t9,0x18($sp) /* f0ab534: 8fa3004c */ lw $v1,0x4c($sp) /* f0ab538: 8fae0048 */ lw $t6,0x48($sp) @@ -36151,7 +36149,7 @@ glabel hudRenderAmmo /* f0ab558: afa00014 */ sw $zero,0x14($sp) /* f0ab55c: 00402025 */ or $a0,$v0,$zero /* f0ab560: 24070001 */ addiu $a3,$zero,0x1 -/* f0ab564: 0fc2a74b */ jal func0f0a9d2c +/* f0ab564: 0fc2a74b */ jal handRenderHudInteger /* f0ab568: 24c60002 */ addiu $a2,$a2,0x2 /* f0ab56c: 8faa0058 */ lw $t2,0x58($sp) /* f0ab570: afa20130 */ sw $v0,0x130($sp) @@ -36276,7 +36274,7 @@ glabel hudRenderAmmo /* f0ab72c: afa3001c */ sw $v1,0x1c($sp) /* f0ab730: 24c6fffd */ addiu $a2,$a2,-3 /* f0ab734: 8fa40130 */ lw $a0,0x130($sp) -/* f0ab738: 0fc2a7f0 */ jal func0f0a9fc0 +/* f0ab738: 0fc2a7f0 */ jal handRenderHudGauge /* f0ab73c: afaf0018 */ sw $t7,0x18($sp) /* f0ab740: 8fa80038 */ lw $t0,0x38($sp) /* f0ab744: 8fa60100 */ lw $a2,0x100($sp) @@ -36289,7 +36287,7 @@ glabel hudRenderAmmo /* f0ab760: 00402025 */ or $a0,$v0,$zero /* f0ab764: 00003825 */ or $a3,$zero,$zero /* f0ab768: 24c6fffe */ addiu $a2,$a2,-2 -/* f0ab76c: 0fc2a74b */ jal func0f0a9d2c +/* f0ab76c: 0fc2a74b */ jal handRenderHudInteger /* f0ab770: afaf0010 */ sw $t7,0x10($sp) /* f0ab774: 8fa80038 */ lw $t0,0x38($sp) /* f0ab778: 8faa0058 */ lw $t2,0x58($sp) @@ -36357,7 +36355,7 @@ glabel hudRenderAmmo /* f0ab85c: afab001c */ sw $t3,0x1c($sp) /* f0ab860: afa60048 */ sw $a2,0x48($sp) /* f0ab864: afa9009c */ sw $t1,0x9c($sp) -/* f0ab868: 0fc2a7f0 */ jal func0f0a9fc0 +/* f0ab868: 0fc2a7f0 */ jal handRenderHudGauge /* f0ab86c: afb80010 */ sw $t8,0x10($sp) /* f0ab870: 8fb80048 */ lw $t8,0x48($sp) /* f0ab874: 3c0e00ff */ lui $t6,0xff @@ -36369,7 +36367,7 @@ glabel hudRenderAmmo /* f0ab88c: 8fa5009c */ lw $a1,0x9c($sp) /* f0ab890: 8fa60054 */ lw $a2,0x54($sp) /* f0ab894: 00003825 */ or $a3,$zero,$zero -/* f0ab898: 0fc2a74b */ jal func0f0a9d2c +/* f0ab898: 0fc2a74b */ jal handRenderHudInteger /* f0ab89c: afa00014 */ sw $zero,0x14($sp) /* f0ab8a0: afa20130 */ sw $v0,0x130($sp) /* f0ab8a4: 8faf005c */ lw $t7,0x5c($sp) @@ -36512,7 +36510,7 @@ glabel hudRenderAmmo /* f0aba94: 00003825 */ or $a3,$zero,$zero /* f0aba98: afa00014 */ sw $zero,0x14($sp) /* f0aba9c: 24c6fffe */ addiu $a2,$a2,-2 -/* f0abaa0: 0fc2a6da */ jal func0f0a9b68 +/* f0abaa0: 0fc2a6da */ jal handRenderHudString /* f0abaa4: afb80010 */ sw $t8,0x10($sp) /* f0abaa8: afa20130 */ sw $v0,0x130($sp) .L0f0abaac: @@ -36529,7 +36527,7 @@ glabel hudRenderAmmo ); #else GLOBAL_ASM( -glabel hudRenderAmmo +glabel handRenderHud /* f0a860c: 3c0e800a */ lui $t6,0x800a /* f0a8610: 8dcee944 */ lw $t6,-0x16bc($t6) /* f0a8614: 27bdfee0 */ addiu $sp,$sp,-288 @@ -37388,7 +37386,7 @@ glabel hudRenderAmmo /* f0a9280: afa00028 */ sw $zero,0x28($sp) /* f0a9284: afa8001c */ sw $t0,0x1c($sp) /* f0a9288: 24c6fffd */ addiu $a2,$a2,-3 -/* f0a928c: 0fc29f58 */ jal func0f0a9fc0 +/* f0a928c: 0fc29f58 */ jal handRenderHudGauge /* f0a9290: afaf0018 */ sw $t7,0x18($sp) /* f0a9294: 8fa3004c */ lw $v1,0x4c($sp) /* f0a9298: 8fae0048 */ lw $t6,0x48($sp) @@ -37402,7 +37400,7 @@ glabel hudRenderAmmo /* f0a92b8: afa00014 */ sw $zero,0x14($sp) /* f0a92bc: 00402025 */ or $a0,$v0,$zero /* f0a92c0: 24070001 */ addiu $a3,$zero,0x1 -/* f0a92c4: 0fc29eb3 */ jal func0f0a9d2c +/* f0a92c4: 0fc29eb3 */ jal handRenderHudInteger /* f0a92c8: 24c60002 */ addiu $a2,$a2,0x2 /* f0a92cc: 8faa0058 */ lw $t2,0x58($sp) /* f0a92d0: afa20120 */ sw $v0,0x120($sp) @@ -37527,7 +37525,7 @@ glabel hudRenderAmmo /* f0a948c: afa3001c */ sw $v1,0x1c($sp) /* f0a9490: 24c6fffd */ addiu $a2,$a2,-3 /* f0a9494: 8fa40120 */ lw $a0,0x120($sp) -/* f0a9498: 0fc29f58 */ jal func0f0a9fc0 +/* f0a9498: 0fc29f58 */ jal handRenderHudGauge /* f0a949c: afb90018 */ sw $t9,0x18($sp) /* f0a94a0: 8fa80038 */ lw $t0,0x38($sp) /* f0a94a4: 8fa600f0 */ lw $a2,0xf0($sp) @@ -37540,7 +37538,7 @@ glabel hudRenderAmmo /* f0a94c0: 00402025 */ or $a0,$v0,$zero /* f0a94c4: 00003825 */ or $a3,$zero,$zero /* f0a94c8: 24c6fffe */ addiu $a2,$a2,-2 -/* f0a94cc: 0fc29eb3 */ jal func0f0a9d2c +/* f0a94cc: 0fc29eb3 */ jal handRenderHudInteger /* f0a94d0: afb90010 */ sw $t9,0x10($sp) /* f0a94d4: 8fa80038 */ lw $t0,0x38($sp) /* f0a94d8: 8faa0058 */ lw $t2,0x58($sp) @@ -37608,7 +37606,7 @@ glabel hudRenderAmmo /* f0a95bc: afab001c */ sw $t3,0x1c($sp) /* f0a95c0: afa60048 */ sw $a2,0x48($sp) /* f0a95c4: afa9009c */ sw $t1,0x9c($sp) -/* f0a95c8: 0fc29f58 */ jal func0f0a9fc0 +/* f0a95c8: 0fc29f58 */ jal handRenderHudGauge /* f0a95cc: afb80010 */ sw $t8,0x10($sp) /* f0a95d0: 8fb80048 */ lw $t8,0x48($sp) /* f0a95d4: 3c0e00ff */ lui $t6,0xff @@ -37620,7 +37618,7 @@ glabel hudRenderAmmo /* f0a95ec: 8fa5009c */ lw $a1,0x9c($sp) /* f0a95f0: 8fa60054 */ lw $a2,0x54($sp) /* f0a95f4: 00003825 */ or $a3,$zero,$zero -/* f0a95f8: 0fc29eb3 */ jal func0f0a9d2c +/* f0a95f8: 0fc29eb3 */ jal handRenderHudInteger /* f0a95fc: afa00014 */ sw $zero,0x14($sp) /* f0a9600: afa20120 */ sw $v0,0x120($sp) /* f0a9604: 8fb9005c */ lw $t9,0x5c($sp) @@ -37763,7 +37761,7 @@ glabel hudRenderAmmo /* f0a97f4: 00003825 */ or $a3,$zero,$zero /* f0a97f8: afa00014 */ sw $zero,0x14($sp) /* f0a97fc: 24c6fffe */ addiu $a2,$a2,-2 -/* f0a9800: 0fc29e42 */ jal func0f0a9b68 +/* f0a9800: 0fc29e42 */ jal handRenderHudString /* f0a9804: afb80010 */ sw $t8,0x10($sp) /* f0a9808: afa20120 */ sw $v0,0x120($sp) .NB0f0a980c: @@ -37780,6 +37778,409 @@ glabel hudRenderAmmo ); #endif +const char var7f1ac18c[] = "%02d:%02d:%02d\n"; +const char var7f1ac19c[] = "%02d:%02d\n"; + +// Mismatch: regalloc near da8 +//Gfx *handRenderHud(Gfx *gdl) +//{ +// struct player *player = g_Vars.currentplayer; // 12c +// s32 bottom = viGetViewTop() + viGetViewHeight() - 13; // 128 +// s32 playercount; // 124 +// s32 playernum; // 120 +// struct hand *lefthand; +// s32 secs60; +// s32 secs; +// s32 ammoindex; // 110 +// s32 barwidth; // 10c +// s32 reserveheight; // 108 +// s32 clipheight; // 104 +// s32 xpos; // 100 +// struct weapon *weapon; // fc +// u32 alpha; +// u32 fncolour; // f4 +// s32 funcnum; // f0 +// s32 fnfaderinc; // ec +// s32 tmpfuncnum; // e8 +// +// struct handweaponinfo info; // dc +// struct hand *hand; +// char *str; // d4 +// u32 colour; // d0 +// s32 x; // cc +// s32 y; // c8 +// s32 textheight; // c4 +// s32 textwidth; // c0 +// struct weaponfunc *func; // bc +// u16 nameid; // ba +// +// s32 ammotype; // a4 +// s32 ammoheld; // a0 +// s32 ammototal; // 9c +// +// char text[32]; // 78 +// s32 mins; // 5c +// struct gunctrl *ctrl; // 58 +// +// playercount = PLAYERCOUNT(); +// playernum = g_Vars.currentplayernum; +// ammoindex = 0; +// barwidth = 9; +// reserveheight = 36; +// clipheight = 57; +// weapon = weaponFindById(player->gunctrl.weaponnum); +// +// hand = &player->hands[HAND_RIGHT]; +// lefthand = &player->hands[HAND_LEFT]; +// ctrl = &player->gunctrl; +// +// // 958 +// if (player->isdead) { +// return gdl; +// } +// +// if (g_Vars.currentplayer->gunctrl.passivemode) { +// return gdl; +// } +// +// if (g_Vars.lvframenum < 5) { +// return gdl; +// } +// +// if (g_ViMode == VIMODE_HIRES) { +// g_ScaleX = 2; +// } else { +// g_ScaleX = 1; +// } +// +// gdl = func0f153628(gdl); +// +// // 9d8 +// if (playercount >= 2) { +// barwidth = 5; +// reserveheight = 26; +// clipheight = 47; +// +// if (playercount == 2) { +// if (IS4MB() || (optionsGetScreenSplit() != SCREENSPLIT_VERTICAL && playernum == 0)) { +// bottom += 10; +// } else { +// bottom += 2; +// } +// } else if (playercount >= 3) { +// if (playernum < 2) { +// bottom += 10; +// } else { +// bottom += 2; +// } +// } +// } else if (optionsGetEffectiveScreenSize() != SCREENSIZE_FULL) { +// bottom += 8; +// } +// +// // a9c +// fncolour = 0xff000040; +// funcnum = hand->base.weaponfunc; +// fnfaderinc = g_Vars.lvupdate240 * 2; +// +// handGetWeaponInfo(&info, HAND_RIGHT); +// tmpfuncnum = currentPlayerIsUsingSecondaryFunction(); +// +// if (func0f098ca0(tmpfuncnum, &info, hand) >= 0) { +// funcnum = tmpfuncnum; +// } +// +// xpos = (viGetViewLeft() + viGetViewWidth()) / g_ScaleX - barwidth - 24; +// +// // b64 +// if (playercount == 2 && (optionsGetScreenSplit() == SCREENSPLIT_VERTICAL || IS4MB()) && playernum == 0) { +// xpos += 15; +// } else if (playercount >= 3 && (playernum % 2) == 0) { +// xpos += 15; +// } +// +// // bd4 +// // Render function square +// if (funcnum == FUNC_SECONDARY && ctrl->fnfader < 255) { +// if (ctrl->fnfader < 128) { +// ctrl->fnfader = 128; +// } +// +// if (ctrl->fnfader + fnfaderinc > 255) { +// ctrl->fnfader = 255; +// } else { +// ctrl->fnfader += fnfaderinc; +// } +// } +// +// if (funcnum == FUNC_PRIMARY && ctrl->fnfader > 0) { +// if (ctrl->fnfader - fnfaderinc < 0) { +// ctrl->fnfader = 0; +// } else { +// ctrl->fnfader -= fnfaderinc; +// } +// } +// +// if (ctrl->fnfader > 128) { +// fncolour = ((ctrl->fnfader * 2) - 256) << 16 | 0xff000040; +// } +// +// gdl = gfxSetPrimColour(gdl, fncolour); +// +// gDPFillRectangleScaled(gdl++, xpos - 13, bottom - 11, xpos - 2, bottom); +// +// gdl = func0f153838(gdl); +// +// // d20 +// // Render weapon name and function name +// if (optionsGetShowGunFunction(g_Vars.currentplayerstats->mpindex)) { +// func = weaponGetFunctionById(hand->base.weaponnum, funcnum); +// nameid = invGetNameIdByIndex(invGetCurrentIndex()); +// str = langGet(nameid); +// +// // d70 +// if (ctrl->curgunstr != nameid) { +// ctrl->guntypetimer = 0; +// ctrl->curgunstr = nameid; +// } +// +// // d8c +// if (ctrl->guntypetimer < 255) { +// colour = 0x55ffffff; +// +// if (ctrl->guntypetimer); +// +// // da8 +// if (ctrl->guntypetimer + g_Vars.lvupdate240_60 > 255) { +// ctrl->guntypetimer = 255; +// } else { +// ctrl->guntypetimer = (u32)ctrl->guntypetimer + g_Vars.lvupdate240_60; +// } +// +// textMeasure(&textheight, &textwidth, str, g_FontHandelGothicXs1, g_FontHandelGothicXs2, 0); +// textwidth += 2; +// +// if (textwidth > ctrl->guntypetimer * 3) { +// textwidth = ctrl->guntypetimer * 3; +// } +// +// // e24 +// if (playercount >= 2) { +// x = xpos - textwidth - 13; +// } else { +// x = xpos - textwidth - 2; +// } +// +// y = bottom - textheight - 15; +// +// if (ctrl->guntypetimer > 192) { +// alpha = 255 - (ctrl->guntypetimer - 192) * 255 / 63U; +// colour = (colour & 0xfffffff00) | alpha; +// } +// +// gdl = gfxSetPrimColour(gdl, 0); +// +// gDPFillRectangleScaled(gdl++, x - 1, y - 1, xpos - 11, bottom); +// +// gdl = func0f153838(gdl); +// func0f153d50(var80061630 * 50.0f, 0, 50); +// func0f153e38(0xffffffff, 0xffffffff); +// gdl = textRenderProjected(gdl, &x, &y, str, g_FontHandelGothicXs1, g_FontHandelGothicXs2, colour, textwidth, 1000, 0, 0); +// func0f153e4c(); +// } +// +// // fbc +// if (func) { +// langGet(func->name); +// +// colour = 0xff5555ff; +// +// if ((ctrl->curfnstr != func->name && ctrl->fnfader > 128) || !ctrl->curfnstr) { +// ctrl->fnstrtimer = 0; +// ctrl->curfnstr = func->name; +// } +// +// // A match can be made here by changing langGet's argument to a u32 +// // but that causes a mismatch within langGet +// str = langGet(ctrl->curfnstr); +// +// // 040 +// if (ctrl->fnstrtimer < 255) { +// if (ctrl->fnstrtimer + g_Vars.lvupdate240_60 > 255) { +// ctrl->fnstrtimer = 255; +// } else { +// ctrl->fnstrtimer += (u32)g_Vars.lvupdate240_60; +// } +// +// if (funcnum == FUNC_SECONDARY && func->name == ctrl->curfnstr) { +// colour |= 0x00ff0000; +// } +// +// if (funcnum == FUNC_PRIMARY && func->name != ctrl->curfnstr) { +// colour |= 0x00ff0000; +// } +// +// textMeasure(&textheight, &textwidth, str, g_FontHandelGothicXs1, g_FontHandelGothicXs2, 0); +// textwidth += 2; +// +// if (textwidth > ctrl->fnstrtimer * 3) { +// textwidth = ctrl->fnstrtimer * 3; +// } +// +// x = xpos - textwidth - 13; +// y = bottom - textheight - 1; +// +// // 158 +// if (ctrl->fnstrtimer > 192) { +// alpha = 255 - (ctrl->fnstrtimer - 192) * 255 / 63U; +// colour = (colour & 0xffffff00) | alpha; +// } +// +// gdl = gfxSetPrimColour(gdl, 0); +// +// gDPFillRectangleScaled(gdl++, x - 1, y - 1, xpos - 11, bottom + 3); +// +// gdl = func0f153838(gdl); +// +// func0f153d50(var80061630 * 50.0f, 0, 50); +// func0f153e38(0xffffffff, 0xffffffff); +// +// gdl = textRenderProjected(gdl, &x, &y, str, +// g_FontHandelGothicXs1, g_FontHandelGothicXs2, colour, textwidth, +// 1000, 0, 0); +// +// func0f153e4c(); +// } +// } +// } +// +// // 2b8 +// if (weapon && weapon->functions[hand->base.weaponfunc] != NULL) { +// ammoindex = ((struct weaponfunc *)(weapon->functions[hand->base.weaponfunc]))->ammoindex; +// } +// +// if (ammoindex == -1) { +// if (weapon->functions[1 - hand->base.weaponfunc] != NULL) { +// ammoindex = ((struct weaponfunc *)(weapon->functions[1 - hand->base.weaponfunc]))->ammoindex; +// } +// +// if (ammoindex == -1) { +// gdl = func0f153780(gdl); +// g_ScaleX = 1; +// return gdl; +// } +// } +// +// if (ammoindex != ctrl->lastmag) { +// abmagReset(&player->hands[HAND_LEFT].abmag); +// abmagReset(&hand->abmag); +// abmagReset(&ctrl->abmag); +// ctrl->lastmag = ammoindex; +// } +// +// // 39c +// // Left hand - mag +// if (lefthand->inuse +// && weapon->ammos[ammoindex] != NULL +// && lefthand->base.weaponnum != WEAPON_REMOTEMINE) { +// xpos = viGetViewLeft() / g_ScaleX + 24; +// +// if (playercount == 2 && (optionsGetScreenSplit() == SCREENSPLIT_VERTICAL || IS4MB()) && playernum == 1) { +// xpos -= 14; +// } else if (playercount >= 3 && (playernum & 1) == 1) { +// xpos -= 14; +// } +// +// if (lefthand->clipsizes[ammoindex] > 0 && (weapon->ammos[ammoindex]->flags & 2) == 0) { +// gdl = handRenderHudGauge(gdl, +// xpos, bottom - reserveheight - clipheight - 3, xpos + barwidth, bottom - reserveheight - 3, +// &lefthand->abmag, lefthand->loadedammo[ammoindex], lefthand->clipsizes[ammoindex], +// 0x00300080, 0x00ff0040, false); +// gdl = handRenderHudInteger(gdl, lefthand->loadedammo[ammoindex], xpos + barwidth + 2, true, +// bottom - reserveheight - 8, 0, 0x00ff00a0); +// } +// } +// +// // 584 +// // Right hand - mag, reserve and combat boost timer +// if (hand->inuse && ctrl->ammotypes[ammoindex] >= 0) { +// ammotype = player->gunctrl.ammotypes[ammoindex]; +// +// xpos = (viGetViewLeft() + viGetViewWidth()) / g_ScaleX - barwidth - 24; +// +// if (playercount == 2 && (optionsGetScreenSplit() == SCREENSPLIT_VERTICAL || IS4MB()) && playernum == 0) { +// xpos += 15; +// } else if (playercount >= 3 && (playernum % 2) == 0) { +// xpos += 15; +// } +// +// // Mag +// // 6a8 +// ammoheld = player->ammoheldarr[ammotype]; +// +// if (hand->clipsizes[ammoindex] > 0 +// && weapon->ammos[ammoindex] != NULL +// && (weapon->ammos[ammoindex]->flags & 2) == 0) { +// gdl = handRenderHudGauge(gdl, xpos, bottom - reserveheight - clipheight - 3, xpos + barwidth, +// bottom - reserveheight - 3, &hand->abmag, hand->loadedammo[ammoindex], hand->clipsizes[ammoindex], +// 0x00300080, 0x00ff0040, false); +// gdl = handRenderHudInteger(gdl, hand->loadedammo[ammoindex], xpos - 2, false, +// bottom - reserveheight - 8, 0, 0x00ff00a0); +// } +// +// // Reserve +// // 7ac +// if (g_AmmoTypes[ammotype].capacity > 0 +// && (weapon->ammos[ammoindex]->flags & 1) == 0) { +// ammototal = ammoheld; +// +// if (weapon->ammos[ammoindex]->flags & 2) { +// if (hand->clipsizes[ammoindex] > 0) { +// ammototal += hand->loadedammo[ammoindex]; +// } +// +// if (lefthand->clipsizes[ammoindex] > 0) { +// ammototal += lefthand->loadedammo[ammoindex]; +// } +// } +// +// gdl = handRenderHudGauge(gdl, xpos, bottom - reserveheight, xpos + barwidth, +// bottom, &ctrl->abmag, ammototal, g_AmmoTypes[ammotype].capacity, +// 0x00403080, 0x00ffc040, true); +// gdl = handRenderHudInteger(gdl, ammototal, xpos - 2, false, bottom - reserveheight + 1, 0, 0x00ffc0a0); +// } +// +// // 8b8 +// // Combat boost timer +// if (hand->base.weaponnum == WEAPON_COMBATBOOST) { +// mins = g_Vars.speedpilltime / 3600; +// +// // 91c +// if (mins >= 1) { +// secs60 = g_Vars.speedpilltime - mins * 3600; +// secs = secs60 / 60; +// +// sprintf(text, "%02d:%02d:%02d\n", mins, secs, (secs60 - secs * 60) * 100 / 60); +// } else { +// // 9d4 +// secs60 = g_Vars.speedpilltime - mins * 3600; +// secs = secs60 / 60; +// +// sprintf(text, "%02d:%02d\n", secs, (secs60 - secs * 60) * 100 / 60); +// } +// +// // a7c +// gdl = handRenderHudString(gdl, text, xpos + barwidth - 2, 0, bottom - reserveheight + 1, 0, 0x00ffc0a0); +// } +// } +// +// // aac +// gdl = func0f153780(gdl); +// g_ScaleX = 1; +// +// return gdl; +//} + void cboostAdd(s32 amount) { g_Vars.speedpilltime += amount; diff --git a/src/game/game_0b69d0.c b/src/game/game_0b69d0.c index 7ab6c7fe9..1428f835c 100644 --- a/src/game/game_0b69d0.c +++ b/src/game/game_0b69d0.c @@ -16014,7 +16014,7 @@ Gfx *func0f0c07c8(Gfx *gdl) } if (optionsGetAmmoOnScreen(g_Vars.currentplayerstats->mpindex)) { - gdl = hudRenderAmmo(gdl); + gdl = handRenderHud(gdl); } #if VERSION >= VERSION_NTSC_1_0 diff --git a/src/game/game_1531a0.c b/src/game/game_1531a0.c index 1ded6ee4c..07bc59c5c 100644 --- a/src/game/game_1531a0.c +++ b/src/game/game_1531a0.c @@ -600,7 +600,7 @@ void func0f153d3c(void) var800a45d0.unk00 = var800a45d0.unk2a; } -void func0f153d50(u32 arg0, u32 arg1, u32 arg2) +void func0f153d50(s32 arg0, s32 arg1, s32 arg2) { var800a45d0.unk00 |= 0x04; var800a45d0.unk4c = arg0; diff --git a/src/game/propobj.c b/src/game/propobj.c index c50681dd0..453798e89 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -75595,7 +75595,7 @@ glabel var7f1ab1a8 /* f090a54: 00402025 */ move $a0,$v0 /* f090a58: 24070002 */ li $a3,0x2 /* f090a5c: afb00010 */ sw $s0,0x10($sp) -/* f090a60: 0fc2a85e */ jal func0f0a9d2c +/* f090a60: 0fc2a85e */ jal handRenderHudInteger /* f090a64: 24c6ffee */ addiu $a2,$a2,-18 /* f090a68: 8fa5005c */ lw $a1,0x5c($sp) /* f090a6c: 2401000a */ li $at,0xa @@ -75610,7 +75610,7 @@ glabel var7f1ab1a8 /* f090a90: 00402025 */ move $a0,$v0 /* f090a94: 24070002 */ li $a3,0x2 /* f090a98: afb00010 */ sw $s0,0x10($sp) -/* f090a9c: 0fc2a85e */ jal func0f0a9d2c +/* f090a9c: 0fc2a85e */ jal handRenderHudInteger /* f090aa0: 24c6fff2 */ addiu $a2,$a2,-14 /* f090aa4: 8fa60044 */ lw $a2,0x44($sp) /* f090aa8: 3c0f00ff */ lui $t7,0xff @@ -75623,7 +75623,7 @@ glabel var7f1ab1a8 /* f090ac4: 00402025 */ move $a0,$v0 /* f090ac8: 24070002 */ li $a3,0x2 /* f090acc: afb00010 */ sw $s0,0x10($sp) -/* f090ad0: 0fc2a7ed */ jal func0f0a9b68 +/* f090ad0: 0fc2a7ed */ jal handRenderHudString /* f090ad4: 24c6fff8 */ addiu $a2,$a2,-8 /* f090ad8: 8fa50058 */ lw $a1,0x58($sp) /* f090adc: 2401003c */ li $at,0x3c @@ -75641,7 +75641,7 @@ glabel var7f1ab1a8 /* f090b0c: 00402025 */ move $a0,$v0 /* f090b10: 24070002 */ li $a3,0x2 /* f090b14: afb00010 */ sw $s0,0x10($sp) -/* f090b18: 0fc2a85e */ jal func0f0a9d2c +/* f090b18: 0fc2a85e */ jal handRenderHudInteger /* f090b1c: 24c6fffe */ addiu $a2,$a2,-2 /* f090b20: 8fa50058 */ lw $a1,0x58($sp) /* f090b24: 2401000a */ li $at,0xa @@ -75656,7 +75656,7 @@ glabel var7f1ab1a8 /* f090b48: 00402025 */ move $a0,$v0 /* f090b4c: 24070002 */ li $a3,0x2 /* f090b50: afb00010 */ sw $s0,0x10($sp) -/* f090b54: 0fc2a85e */ jal func0f0a9d2c +/* f090b54: 0fc2a85e */ jal handRenderHudInteger /* f090b58: 24c60002 */ addiu $a2,$a2,0x2 /* f090b5c: 8fa60044 */ lw $a2,0x44($sp) /* f090b60: 3c0f00ff */ lui $t7,0xff @@ -75669,7 +75669,7 @@ glabel var7f1ab1a8 /* f090b7c: 00402025 */ move $a0,$v0 /* f090b80: 24070002 */ li $a3,0x2 /* f090b84: afb00010 */ sw $s0,0x10($sp) -/* f090b88: 0fc2a7ed */ jal func0f0a9b68 +/* f090b88: 0fc2a7ed */ jal handRenderHudString /* f090b8c: 24c60008 */ addiu $a2,$a2,0x8 /* f090b90: 8fa50054 */ lw $a1,0x54($sp) /* f090b94: 24010064 */ li $at,0x64 @@ -75687,7 +75687,7 @@ glabel var7f1ab1a8 /* f090bc4: 00402025 */ move $a0,$v0 /* f090bc8: 24070002 */ li $a3,0x2 /* f090bcc: afb00010 */ sw $s0,0x10($sp) -/* f090bd0: 0fc2a85e */ jal func0f0a9d2c +/* f090bd0: 0fc2a85e */ jal handRenderHudInteger /* f090bd4: 24c6000e */ addiu $a2,$a2,0xe /* f090bd8: 8fa50054 */ lw $a1,0x54($sp) /* f090bdc: 2401000a */ li $at,0xa @@ -75702,7 +75702,7 @@ glabel var7f1ab1a8 /* f090c00: 00402025 */ move $a0,$v0 /* f090c04: 24070002 */ li $a3,0x2 /* f090c08: afb00010 */ sw $s0,0x10($sp) -/* f090c0c: 0fc2a85e */ jal func0f0a9d2c +/* f090c0c: 0fc2a85e */ jal handRenderHudInteger /* f090c10: 24c60012 */ addiu $a2,$a2,0x12 /* f090c14: 0fc55125 */ jal func0f153780 /* f090c18: 00402025 */ move $a0,$v0 @@ -75909,7 +75909,7 @@ glabel var7f1ab1a8 /* f090b54: 00402025 */ or $a0,$v0,$zero /* f090b58: 24070002 */ addiu $a3,$zero,0x2 /* f090b5c: afb00010 */ sw $s0,0x10($sp) -/* f090b60: 0fc2a74b */ jal func0f0a9d2c +/* f090b60: 0fc2a74b */ jal handRenderHudInteger /* f090b64: 24c6ffee */ addiu $a2,$a2,-18 /* f090b68: 8fa5005c */ lw $a1,0x5c($sp) /* f090b6c: 2401000a */ addiu $at,$zero,0xa @@ -75924,7 +75924,7 @@ glabel var7f1ab1a8 /* f090b90: 00402025 */ or $a0,$v0,$zero /* f090b94: 24070002 */ addiu $a3,$zero,0x2 /* f090b98: afb00010 */ sw $s0,0x10($sp) -/* f090b9c: 0fc2a74b */ jal func0f0a9d2c +/* f090b9c: 0fc2a74b */ jal handRenderHudInteger /* f090ba0: 24c6fff2 */ addiu $a2,$a2,-14 /* f090ba4: 8fa60044 */ lw $a2,0x44($sp) /* f090ba8: 3c0900ff */ lui $t1,0xff @@ -75937,7 +75937,7 @@ glabel var7f1ab1a8 /* f090bc4: 00402025 */ or $a0,$v0,$zero /* f090bc8: 24070002 */ addiu $a3,$zero,0x2 /* f090bcc: afb00010 */ sw $s0,0x10($sp) -/* f090bd0: 0fc2a6da */ jal func0f0a9b68 +/* f090bd0: 0fc2a6da */ jal handRenderHudString /* f090bd4: 24c6fff8 */ addiu $a2,$a2,-8 /* f090bd8: 8fa50058 */ lw $a1,0x58($sp) /* f090bdc: 2401003c */ addiu $at,$zero,0x3c @@ -75955,7 +75955,7 @@ glabel var7f1ab1a8 /* f090c0c: 00402025 */ or $a0,$v0,$zero /* f090c10: 24070002 */ addiu $a3,$zero,0x2 /* f090c14: afb00010 */ sw $s0,0x10($sp) -/* f090c18: 0fc2a74b */ jal func0f0a9d2c +/* f090c18: 0fc2a74b */ jal handRenderHudInteger /* f090c1c: 24c6fffe */ addiu $a2,$a2,-2 /* f090c20: 8fa50058 */ lw $a1,0x58($sp) /* f090c24: 2401000a */ addiu $at,$zero,0xa @@ -75970,7 +75970,7 @@ glabel var7f1ab1a8 /* f090c48: 00402025 */ or $a0,$v0,$zero /* f090c4c: 24070002 */ addiu $a3,$zero,0x2 /* f090c50: afb00010 */ sw $s0,0x10($sp) -/* f090c54: 0fc2a74b */ jal func0f0a9d2c +/* f090c54: 0fc2a74b */ jal handRenderHudInteger /* f090c58: 24c60002 */ addiu $a2,$a2,0x2 /* f090c5c: 8fa60044 */ lw $a2,0x44($sp) /* f090c60: 3c0900ff */ lui $t1,0xff @@ -75983,7 +75983,7 @@ glabel var7f1ab1a8 /* f090c7c: 00402025 */ or $a0,$v0,$zero /* f090c80: 24070002 */ addiu $a3,$zero,0x2 /* f090c84: afb00010 */ sw $s0,0x10($sp) -/* f090c88: 0fc2a6da */ jal func0f0a9b68 +/* f090c88: 0fc2a6da */ jal handRenderHudString /* f090c8c: 24c60008 */ addiu $a2,$a2,0x8 /* f090c90: 8fa50054 */ lw $a1,0x54($sp) /* f090c94: 24010064 */ addiu $at,$zero,0x64 @@ -76001,7 +76001,7 @@ glabel var7f1ab1a8 /* f090cc4: 00402025 */ or $a0,$v0,$zero /* f090cc8: 24070002 */ addiu $a3,$zero,0x2 /* f090ccc: afb00010 */ sw $s0,0x10($sp) -/* f090cd0: 0fc2a74b */ jal func0f0a9d2c +/* f090cd0: 0fc2a74b */ jal handRenderHudInteger /* f090cd4: 24c6000e */ addiu $a2,$a2,0xe /* f090cd8: 8fa50054 */ lw $a1,0x54($sp) /* f090cdc: 2401000a */ addiu $at,$zero,0xa @@ -76016,7 +76016,7 @@ glabel var7f1ab1a8 /* f090d00: 00402025 */ or $a0,$v0,$zero /* f090d04: 24070002 */ addiu $a3,$zero,0x2 /* f090d08: afb00010 */ sw $s0,0x10($sp) -/* f090d0c: 0fc2a74b */ jal func0f0a9d2c +/* f090d0c: 0fc2a74b */ jal handRenderHudInteger /* f090d10: 24c60012 */ addiu $a2,$a2,0x12 /* f090d14: 0fc54de0 */ jal func0f153780 /* f090d18: 00402025 */ or $a0,$v0,$zero diff --git a/src/include/game/game_097ba0.h b/src/include/game/game_097ba0.h index 286fcfd8a..6231f612a 100644 --- a/src/include/game/game_097ba0.h +++ b/src/include/game/game_097ba0.h @@ -162,12 +162,12 @@ u32 weaponGetAmmoType(u32 weaponnum, u32 func); s32 currentPlayerGetAmmoQuantityForWeapon(u32 weaponnum, u32 func); void currentPlayerGiveAmmoForWeapon(u32 weaponnum, u32 func, u32 quantity); s32 weaponGetAmmoCapacity(s32 weaponnum, s32 func); -u32 func0f0a9b68(void); -u32 func0f0a9d2c(void); +Gfx *handRenderHudString(Gfx *gdl, char *text, s32 arg2, s32 arg3, s32 arg4, s32 arg5, u32 colour); +Gfx *handRenderHudInteger(Gfx *gdl, s32 value, s32 x, bool leftalign, s32 y, s32 arg5, u32 colour); void abmagReset(struct abmag *abmag); u32 func0f0a9da8(void); -u32 func0f0a9fc0(void); -Gfx *hudRenderAmmo(Gfx *gdl); +Gfx *handRenderHudGauge(Gfx *gdl, s32 x1, s32 y1, s32 x2, s32 y2, struct abmag *abmag, s32 remaining, s32 capacity, u32 vacantcolour, u32 occupiedcolour, bool flip); +Gfx *handRenderHud(Gfx *gdl); void cboostAdd(s32 arg0); void cboostSubtract(s32 arg0); void cboostBoost(void); diff --git a/src/include/game/game_1531a0.h b/src/include/game/game_1531a0.h index 28da40f17..e9e7b33c9 100644 --- a/src/include/game/game_1531a0.h +++ b/src/include/game/game_1531a0.h @@ -26,7 +26,7 @@ void func0f153c88(void); void func0f153ce8(s32 x1, s32 x2, u32 arg2); void func0f153d24(void); void func0f153d3c(void); -void func0f153d50(u32 arg0, u32 arg1, u32 arg2); +void func0f153d50(s32 arg0, s32 arg1, s32 arg2); void func0f153d88(f32 arg0); void func0f153e38(u32 colour1, u32 colour2); void func0f153e4c(void); diff --git a/src/include/types.h b/src/include/types.h index 3da4e8b24..7413928db 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -188,7 +188,7 @@ struct g_vars { /*000450*/ s32 pendingantiplayernum; /*000454*/ s32 coopfriendlyfire; /*000458*/ u32 modifiedfiles; - /*00045c*/ s32 speedpilltime; + /*00045c*/ s32 speedpilltime; // in time60 /*000460*/ s32 speedpillchange; /*000464*/ u32 speedpillwant; /*000468*/ bool speedpillon; @@ -2500,11 +2500,11 @@ struct gunctrl { /*0x15e6*/ u8 action; /*0x15e7*/ u8 fnfader; /*0x15e8*/ u8 upgradewant; - /*0x15e9*/ u8 lastmag; + /*0x15e9*/ s8 lastmag; /*0x15ea*/ u8 gunmemowner; /*0x15eb*/ s8 gunlocktimer; /*0x15ec*/ u16 curfnstr; - /*0x15ee*/ s8 fnstrtimer; + /*0x15ee*/ u8 fnstrtimer; /*0x15ef*/ u8 guntypetimer; /*0x15f0*/ u8 guntypefader; /*0x15f2*/ u16 curgunstr;