diff --git a/src/game/bondmove.c b/src/game/bondmove.c index 74b0b9c34..1ce9657f7 100644 --- a/src/game/bondmove.c +++ b/src/game/bondmove.c @@ -4845,7 +4845,7 @@ glabel var7f1ad8e4 // if (getCurrentPlayerWeaponId(0) == WEAPON_FARSIGHTXR20 // && g_Vars.currentplayer->insightaimmode // && uStack48 -// && g_Vars.currentplayer->unk0638[0].unk063b == 1 +// && g_Vars.currentplayer->unk0638[0].weaponfunc == FUNC_SECONDARY // && g_Vars.currentplayer->autoeraserdist > 0) { // fVar25 = func0f0b49b8(500.0f / g_Vars.currentplayer->autoeraserdist); // fStack436 = 2; @@ -4885,7 +4885,7 @@ glabel var7f1ad8e4 // } // // if (getCurrentPlayerWeaponId(0) == WEAPON_AR34 -// && g_Vars.currentplayer->unk0638[0].unk063b == 1) { +// && g_Vars.currentplayer->unk0638[0].weaponfunc == FUNC_SECONDARY) { // fStack432 = func0f0b14d8(); // } // @@ -5132,7 +5132,7 @@ glabel var7f1ad8e4 // || g_Vars.currentplayer->autoyaimprop == NULL // || func0f0b1804(iStack180, 2) == 0 // ) -// && (getCurrentPlayerWeaponId(0) != WEAPON_CMP150 || g_Vars.currentplayer->unk0638[0].unk063b != 1)) { +// && (getCurrentPlayerWeaponId(0) != WEAPON_CMP150 || g_Vars.currentplayer->unk0638[0].weaponfunc != FUNC_SECONDARY)) { // // if (g_Vars.currentplayer->unk1b68 < 0.979f) { // g_Vars.currentplayer->unk1b68 += g_Vars.lvupdate240freal * 0.00032f; @@ -5149,7 +5149,7 @@ glabel var7f1ad8e4 // bool followlockon = false; // // if (getCurrentPlayerWeaponId(0) == WEAPON_CMP150 -// && g_Vars.currentplayer->unk0638[0].unk063b == 1) { +// && g_Vars.currentplayer->unk0638[0].weaponfunc == FUNC_SECONDARY) { // followlockon = true; // } // diff --git a/src/game/chr/chraction.c b/src/game/chr/chraction.c index 566d876f1..78fc6b0aa 100644 --- a/src/game/chr/chraction.c +++ b/src/game/chr/chraction.c @@ -9146,7 +9146,7 @@ void func0f036358(struct chrdata *chr, s32 arg1) chr->aioffset = 0; func0f0b09f4(arg1, mpPlayerGetIndex(chr)); - func0f199964(chr, chr->aibot->unk020); + func0f199964(chr, chr->aibot->weaponnum); chr->aibot->unk09c_00 = 0; chr->aibot->unk09c_01 = 0; diff --git a/src/game/game_0b0420.c b/src/game/game_0b0420.c index 6046ab8e0..ea03eada9 100644 --- a/src/game/game_0b0420.c +++ b/src/game/game_0b0420.c @@ -923,40 +923,19 @@ struct weaponfunc *weaponGetFunction(u8 *arg0, s32 which) return NULL; } +struct weaponfunc *currentPlayerGetWeaponFunction(u32 hand) +{ + struct weapon *weapon = weaponFindById(g_Vars.currentplayer->unk0638[hand].weaponnum); + + if (weapon) { + return weapon->functions[g_Vars.currentplayer->unk0638[hand].weaponfunc]; + } + + return NULL; +} + GLOBAL_ASM( -glabel currentPlayerGetWeaponFunction -/* f0b10ec: 00041900 */ sll $v1,$a0,0x4 -/* f0b10f0: 00641823 */ subu $v1,$v1,$a0 -/* f0b10f4: 00031880 */ sll $v1,$v1,0x2 -/* f0b10f8: 00641821 */ addu $v1,$v1,$a0 -/* f0b10fc: 3c0e800a */ lui $t6,%hi(g_Vars+0x284) -/* f0b1100: 8dcea244 */ lw $t6,%lo(g_Vars+0x284)($t6) -/* f0b1104: 000318c0 */ sll $v1,$v1,0x3 -/* f0b1108: 00641821 */ addu $v1,$v1,$a0 -/* f0b110c: 27bdffe0 */ addiu $sp,$sp,-32 -/* f0b1110: 00031880 */ sll $v1,$v1,0x2 -/* f0b1114: afbf0014 */ sw $ra,0x14($sp) -/* f0b1118: 01c37821 */ addu $t7,$t6,$v1 -/* f0b111c: 91e40638 */ lbu $a0,0x638($t7) -/* f0b1120: 0fc2c3f4 */ jal weaponFindById -/* f0b1124: afa30018 */ sw $v1,0x18($sp) -/* f0b1128: 10400009 */ beqz $v0,.L0f0b1150 -/* f0b112c: 8fa30018 */ lw $v1,0x18($sp) -/* f0b1130: 3c18800a */ lui $t8,%hi(g_Vars+0x284) -/* f0b1134: 8f18a244 */ lw $t8,%lo(g_Vars+0x284)($t8) -/* f0b1138: 0303c821 */ addu $t9,$t8,$v1 -/* f0b113c: 9328063b */ lbu $t0,0x63b($t9) -/* f0b1140: 00084880 */ sll $t1,$t0,0x2 -/* f0b1144: 00495021 */ addu $t2,$v0,$t1 -/* f0b1148: 10000002 */ beqz $zero,.L0f0b1154 -/* f0b114c: 8d420014 */ lw $v0,0x14($t2) -.L0f0b1150: -/* f0b1150: 00001025 */ or $v0,$zero,$zero -.L0f0b1154: -/* f0b1154: 8fbf0014 */ lw $ra,0x14($sp) -/* f0b1158: 27bd0020 */ addiu $sp,$sp,0x20 -/* f0b115c: 03e00008 */ jr $ra -/* f0b1160: 00000000 */ sll $zero,$zero,0x0 +glabel func0f0b1164 /* f0b1164: 27bdffe8 */ addiu $sp,$sp,-24 /* f0b1168: afbf0014 */ sw $ra,0x14($sp) /* f0b116c: 0fc2c3f4 */ jal weaponFindById @@ -1951,7 +1930,7 @@ s8 weaponGetMaxFireRatePerTick(u32 weaponnum, u32 funcindex) u32 currentPlayerGetSight(void) { - struct weaponfunc *func = weaponGetFunctionById(g_Vars.currentplayer->unk0638[0].unk0638, g_Vars.currentplayer->unk0638[0].unk063b); + struct weaponfunc *func = weaponGetFunctionById(g_Vars.currentplayer->unk0638[0].weaponnum, g_Vars.currentplayer->unk0638[0].weaponfunc); if (func && (func->type & 0xff) == INVENTORYFUNCTYPE_CLOSE) { return SIGHT_NONE; @@ -1961,7 +1940,7 @@ u32 currentPlayerGetSight(void) return SIGHT_CLASSIC; } - switch (g_Vars.currentplayer->unk0638[0].unk0638) { + switch (g_Vars.currentplayer->unk0638[0].weaponnum) { case WEAPON_HORIZONSCANNER: return SIGHT_NONE; case WEAPON_NONE: diff --git a/src/game/game_0fd660.c b/src/game/game_0fd660.c index befa15b01..7d328e9c4 100644 --- a/src/game/game_0fd660.c +++ b/src/game/game_0fd660.c @@ -626,7 +626,7 @@ void activemenuApply(s32 slot) if (var80088804 != 0) { uVar6 = frGetWeaponBySlot(frGetSlot()); - if (uVar6 == g_Vars.currentplayer->unk0638[0].unk0638) { + if (g_Vars.currentplayer->unk0638[0].weaponnum == uVar6) { pass = false; } } @@ -747,8 +747,8 @@ void activemenuGetSlotDetails(s32 slot, u32 *flags, char *label) if (slot == 4) { strcpy(label, langGet(L_MISC(171))); // "Function" } else if (slot == 1 || slot == 7) { - prifunc = weaponGetFunction(&g_Vars.currentplayer->unk0638[0].unk0638, 0); - secfunc = weaponGetFunction(&g_Vars.currentplayer->unk0638[0].unk0638, 1); + prifunc = weaponGetFunction(&g_Vars.currentplayer->unk0638[0].weaponnum, FUNC_PRIMARY); + secfunc = weaponGetFunction(&g_Vars.currentplayer->unk0638[0].weaponnum, FUNC_SECONDARY); if (slot == 1) { if (!secfunc diff --git a/src/game/game_190260.c b/src/game/game_190260.c index 7d7b4cc00..5f6452a02 100644 --- a/src/game/game_190260.c +++ b/src/game/game_190260.c @@ -325,7 +325,7 @@ glabel mpChrReset // aibot->unk04c_03 = 0; // aibot->unk09c_01 = 0; // aibot->unk04c_05 = 0; -// aibot->unk020 = 1; +// aibot->weaponnum = WEAPON_UNARMED; // aibot->unk024 = 0; // aibot->unk028 = 0; // aibot->prop = NULL; @@ -1332,10 +1332,10 @@ glabel var7f1b8eb4 u32 func0f1915b4(struct chrdata *chr) { if (chr->aibot) { - return chr->aibot->unk020; + return chr->aibot->weaponnum; } - return g_Vars.players[propGetPlayerNum(chr->prop)]->unk0638[0].unk0638; + return g_Vars.players[propGetPlayerNum(chr->prop)]->unk0638[0].weaponnum; } u8 func0f191600(struct chrdata *chr) diff --git a/src/include/game/game_0b0420.h b/src/include/game/game_0b0420.h index ba9c8b532..70ccfc9fc 100644 --- a/src/include/game/game_0b0420.h +++ b/src/include/game/game_0b0420.h @@ -22,7 +22,7 @@ struct weaponfunc *weaponGetFunctionById(s32 weapon_id, s32 which); u32 func0f0b103c(void); u32 func0f0b107c(void); struct weaponfunc *weaponGetFunction(u8 *arg0, s32 which); -struct weaponfunc *currentPlayerGetWeaponFunction(u32 arg0); +struct weaponfunc *currentPlayerGetWeaponFunction(u32 hand); u32 func0f0b11bc(void); u32 func0f0b11ec(void); f32 func0f0b12ec(u32 arg0); diff --git a/src/include/game/game_197600.h b/src/include/game/game_197600.h index 87a16fcfb..97a7f209d 100644 --- a/src/include/game/game_197600.h +++ b/src/include/game/game_197600.h @@ -25,7 +25,7 @@ u32 func0f198e78(void); u32 func0f198eec(void); u32 func0f1994b0(void); u32 func0f19978c(void); -void func0f199964(struct chrdata *chr, u32 arg1); +void func0f199964(struct chrdata *chr, u32 weaponnum); u32 func0f199984(void); #endif diff --git a/src/include/types.h b/src/include/types.h index 0acce6ae0..3d7d81270 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -151,7 +151,7 @@ struct aibot { /*0x014*/ u32 unk014; /*0x018*/ u32 unk018; /*0x01c*/ struct aibotammotype *ammotypes; - /*0x020*/ u32 unk020; + /*0x020*/ u32 weaponnum; /*0x024*/ u32 unk024; /*0x028*/ u32 unk028; /*0x02c*/ u16 unk02c; @@ -1161,11 +1161,12 @@ struct player1630 { s16 unk0a; }; +// Suspected weapon data per hand struct player638 { - /*0x0638*/ u8 unk0638; // weapon num + /*0x0638*/ u8 weaponnum; /*0x0639*/ u8 unk0639; /*0x063a*/ u8 unk063a; - /*0x063b*/ u8 unk063b; // 1 if using second function + /*0x063b*/ u8 weaponfunc; // 0 or 1 /*0x063c*/ u8 unk063c; /*0x0640*/ u32 unk0640; /*0x0644*/ u32 unk0644;