From 3b4b626610fe090212fde93e26f9c7ad790aa764 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Tue, 29 Sep 2020 22:22:24 +1000 Subject: [PATCH] Find resolution for u8 foo[1] hacks in chrdata struct --- src/game/chr/chr.c | 6 +- src/game/chr/chraction.c | 4 +- src/game/chr/chraicommands.c | 106 +++++++++++++++++------------------ src/game/game_02cde0.c | 2 +- src/game/game_190260.c | 6 +- src/include/types.h | 8 +-- 6 files changed, 66 insertions(+), 66 deletions(-) diff --git a/src/game/chr/chr.c b/src/game/chr/chr.c index 4b198a7fb..9dc45ab02 100644 --- a/src/game/chr/chr.c +++ b/src/game/chr/chr.c @@ -2459,10 +2459,10 @@ void chrInit(struct prop *prop, u8 *ailist) chr->targetlastseenp.x = 0; chr->targetlastseenp.y = 0; chr->targetlastseenp.z = 0; - chr->myaction[0] = MA_NONE; - chr->orders[0] = MA_NONE; + chr->myaction = MA_NONE; + chr->orders = MA_NONE; chr->squadron = 0; - chr->listening[0] = 0; + chr->listening = 0; chr->convtalk = 0; chr->question = 0; chr->runfrompos.x = 0; diff --git a/src/game/chr/chraction.c b/src/game/chr/chraction.c index 0205d2abd..8629529f9 100644 --- a/src/game/chr/chraction.c +++ b/src/game/chr/chraction.c @@ -9279,7 +9279,7 @@ void chrGoPosChooseAnimation(struct chrdata *chr) anim = 0x59; } } else { - if (chr->myaction[0] != MA_PANIC) { + if (chr->myaction != MA_PANIC) { if (random() % 2) { anim = 0x5d; } else { @@ -23242,7 +23242,7 @@ void chrTickGoPos(struct chrdata *chr) pos.y = chr->act_gopos.pos.y; pos.z = chr->act_gopos.pos.z; - if (chr->aibot && chr->myaction[0] == MA_AIBOTGETITEM) { + if (chr->aibot && chr->myaction == MA_AIBOTGETITEM) { sp240 = false; } } diff --git a/src/game/chr/chraicommands.c b/src/game/chr/chraicommands.c index b14f6f04e..e89805ab1 100644 --- a/src/game/chr/chraicommands.c +++ b/src/game/chr/chraicommands.c @@ -8465,11 +8465,11 @@ bool aiIncreaseSquadronAlertness(void) */ bool aiSetAction(void) { - u8 *cmd = g_Vars.ailist + g_Vars.aioffset; - g_Vars.chrdata->myaction[0] = cmd[2]; + struct bytelist *cmd = (struct bytelist *)(g_Vars.ailist + g_Vars.aioffset); + g_Vars.chrdata->myaction = cmd->b2; - if (cmd[3] == 0) { - g_Vars.chrdata->orders[0] = 0; + if (cmd->b3 == 0) { + g_Vars.chrdata->orders = 0; } g_Vars.aioffset += 4; @@ -8493,7 +8493,7 @@ bool aiSetTeamOrders(void) chraction = chractions; chraction->chrnum = g_Vars.chrdata->chrnum; - chraction->myaction = g_Vars.chrdata->myaction[0]; + chraction->myaction = g_Vars.chrdata->myaction; chraction++; if (chrnums) { @@ -8505,14 +8505,14 @@ bool aiSetTeamOrders(void) && chr->actiontype != ACT_DEAD && chrCompareTeams(g_Vars.chrdata, chr, true) && g_Vars.chrdata->chrnum != chr->chrnum) { - if (chr->myaction[0] == MA_COVERWAIT - || chr->myaction[0] == MA_NORMAL - || chr->myaction[0] == MA_WAITING - || chr->myaction[0] == MA_SHOOTING) { + if (chr->myaction == MA_COVERWAIT + || chr->myaction == MA_NORMAL + || chr->myaction == MA_WAITING + || chr->myaction == MA_SHOOTING) { if (chrGetDistanceToChr(g_Vars.chrdata, chr->chrnum) < 3500) { chrcount++; chraction->chrnum = chr->chrnum; - chraction->myaction = chr->myaction[0]; + chraction->myaction = chr->myaction; chraction++; } } @@ -8534,69 +8534,69 @@ bool aiSetTeamOrders(void) switch (chractions[0].myaction) { case MA_COVERGOTO: if (func0f048e74(chr, 45) == 0) { - chr->orders[0] = MA_SHOOTING; + chr->orders = MA_SHOOTING; } break; case MA_COVERBREAK: if (func0f048e74(chr, 30) == 0) { - chr->orders[0] = MA_SHOOTING; + chr->orders = MA_SHOOTING; } num++; break; case MA_COVERSEEN: if (func0f048e74(chr, 30) == 0) { - chr->orders[0] = MA_SHOOTING; - g_Vars.chrdata->orders[0] = MA_COVERGOTO; + chr->orders = MA_SHOOTING; + g_Vars.chrdata->orders = MA_COVERGOTO; } num++; break; case MA_FLANKLEFT: if (func0f048e74(chr, 50)) { - chr->orders[0] = MA_FLANKRIGHT; + chr->orders = MA_FLANKRIGHT; } else { - chr->orders[0] = MA_SHOOTING; + chr->orders = MA_SHOOTING; } num++; - g_Vars.chrdata->orders[0] = MA_FLANKLEFT; + g_Vars.chrdata->orders = MA_FLANKLEFT; break; case MA_FLANKRIGHT: if (func0f048e74(chr, 50)) { - chr->orders[0] = MA_FLANKLEFT; + chr->orders = MA_FLANKLEFT; } else { - chr->orders[0] = MA_SHOOTING; + chr->orders = MA_SHOOTING; } num++; - g_Vars.chrdata->orders[0] = MA_FLANKRIGHT; + g_Vars.chrdata->orders = MA_FLANKRIGHT; break; case MA_DODGE: if (func0f048e74(chr, 30) == 0 && chrHasFlagById(chr, CHR_SELF, CHRFLAG0_CAN_BACKOFF, BANK_0)) { - chr->orders[0] = MA_WITHDRAW; + chr->orders = MA_WITHDRAW; } else { - chr->orders[0] = MA_SHOOTING; + chr->orders = MA_SHOOTING; } num++; break; case MA_GRENADE: if (num < 2) { - chr->orders[0] = MA_WAITING; + chr->orders = MA_WAITING; } else if (chrHasFlagById(chr, CHR_SELF, CHRFLAG0_CAN_BACKOFF, BANK_0)) { - chr->orders[0] = MA_WITHDRAW; + chr->orders = MA_WITHDRAW; } num++; break; case MA_WAITSEEN: if (func0f048e74(chr, 30) && chrHasFlagById(chr, CHR_SELF, CHRFLAG0_CAN_BACKOFF, BANK_0)) { - chr->orders[0] = MA_WITHDRAW; + chr->orders = MA_WITHDRAW; } else { - chr->orders[0] = MA_SHOOTING; + chr->orders = MA_SHOOTING; } num++; break; case MA_WITHDRAW: if (chrHasFlagById(chr, CHR_SELF, CHRFLAG0_CAN_BACKOFF, BANK_0)) { - chr->orders[0] = MA_WITHDRAW; + chr->orders = MA_WITHDRAW; } break; } @@ -8621,12 +8621,12 @@ bool aiSetTeamOrders(void) */ bool aiIfOrders(void) { - u8 *cmd = g_Vars.ailist + g_Vars.aioffset; + struct bytelist *cmd = (struct bytelist *)(g_Vars.ailist + g_Vars.aioffset); - if (cmd[3] == g_Vars.chrdata->orders[0]) { - g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[4]); + if (g_Vars.chrdata->orders == cmd->b3) { + g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd->b4); - if (g_Vars.chrdata->orders[0] == MA_WITHDRAW) { + if (g_Vars.chrdata->orders == MA_WITHDRAW) { // empty } } else { @@ -8643,7 +8643,7 @@ bool aiIfHasOrders(void) { u8 *cmd = g_Vars.ailist + g_Vars.aioffset; - if (g_Vars.chrdata->orders[0]) { + if (g_Vars.chrdata->orders) { g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[2]); } else { g_Vars.aioffset += 3; @@ -8681,7 +8681,7 @@ bool aiIfChrInSquadronDoingAction(void) { s32 ret; s16 *chrnums = squadronGetChrIds(g_Vars.chrdata->squadron); - u8 *cmd = g_Vars.ailist + g_Vars.aioffset; + struct bytelist *cmd = (struct bytelist *)(g_Vars.ailist + g_Vars.aioffset); ret = 1; if (chrnums) { @@ -8693,7 +8693,7 @@ bool aiIfChrInSquadronDoingAction(void) chrCompareTeams(g_Vars.chrdata, chr, 1) && g_Vars.chrdata->chrnum != chr->chrnum && chrGetDistanceToChr(g_Vars.chrdata, chr->chrnum) < 3500 && - cmd[2] == chr->myaction[0]) { + chr->myaction == cmd->b2) { ret = 2; break; } @@ -8701,7 +8701,7 @@ bool aiIfChrInSquadronDoingAction(void) } if (ret != 1) { - g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[3]); + g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd->b3); } else { g_Vars.aioffset += 4; } @@ -8735,8 +8735,8 @@ bool aiSetChrPresetToUnalertedTeammate(void) u8 *cmd = g_Vars.ailist + g_Vars.aioffset; s16 *chrnums = teamGetChrIds(g_Vars.chrdata->team); - if (g_Vars.chrdata->talktimer >= 0x1e1 && g_Vars.chrdata->listening[0]) { - g_Vars.chrdata->listening[0] = 0; + if (g_Vars.chrdata->talktimer > 480 && g_Vars.chrdata->listening) { + g_Vars.chrdata->listening = 0; } for (; *chrnums != -2; chrnums++) { @@ -9108,8 +9108,8 @@ bool aiChrSetListening(void) u8 *cmd = g_Vars.ailist + g_Vars.aioffset; struct chrdata *chr = chrFindById(g_Vars.chrdata, cmd[2]); - if (chr && chr->listening[0] == 0) { - chr->listening[0] = cmd[3]; + if (chr && chr->listening == 0) { + chr->listening = cmd[3]; } g_Vars.aioffset += 4; @@ -9122,18 +9122,18 @@ bool aiChrSetListening(void) */ bool aiIfChrListening(void) { - u8 *cmd = g_Vars.ailist + g_Vars.aioffset; - struct chrdata *chr = chrFindById(g_Vars.chrdata, cmd[2]); + struct bytelist *cmd = (struct bytelist *)(g_Vars.ailist + g_Vars.aioffset); + struct chrdata *chr = chrFindById(g_Vars.chrdata, cmd->b2); - if (cmd[4] == 0) { - if (cmd[3] == chr->listening[0]) { - g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[5]); + if (cmd->b4 == 0) { + if (chr->listening == cmd->b3) { + g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd->b5); } else { g_Vars.aioffset += 6; } } else { if (g_Vars.chrdata->convtalk == 0) { - g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[5]); + g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd->b5); } else { g_Vars.aioffset += 6; } @@ -9160,7 +9160,7 @@ bool aiIfNotListening(void) { u8 *cmd = g_Vars.ailist + g_Vars.aioffset; - if (g_Vars.chrdata->listening[0] == 0) { + if (g_Vars.chrdata->listening == 0) { g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[2]); } else { g_Vars.aioffset += 3; @@ -9238,10 +9238,10 @@ bool aiIfChrInjured(void) */ bool aiIfAction(void) { - u8 *cmd = g_Vars.ailist + g_Vars.aioffset; + struct bytelist *cmd = (struct bytelist *)(g_Vars.ailist + g_Vars.aioffset); - if (cmd[2] == g_Vars.chrdata->myaction[0]) { - g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[3]); + if (g_Vars.chrdata->myaction == cmd->b2) { + g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd->b3); } else { g_Vars.aioffset += 4; } @@ -9266,10 +9266,10 @@ bool aiHovercopterFireRocket(void) */ bool aiIfNaturalAnim(void) { - u8 *cmd = g_Vars.ailist + g_Vars.aioffset; + struct bytelist *cmd = (struct bytelist *)(g_Vars.ailist + g_Vars.aioffset); - if (cmd[2] == g_Vars.chrdata->naturalanim[0]) { - g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[3]); + if (g_Vars.chrdata->naturalanim == cmd->b2) { + g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd->b3); } else { g_Vars.aioffset += 4; } @@ -9527,7 +9527,7 @@ bool aiChrCopyProperties(void) g_Vars.chrdata->accuracyrating = g_Vars.chrdata->accuracyrating; g_Vars.chrdata->speedrating = g_Vars.chrdata->speedrating; - g_Vars.chrdata->naturalanim[0] = chr->naturalanim[0]; + g_Vars.chrdata->naturalanim = chr->naturalanim; g_Vars.chrdata->myspecial = chr->myspecial; g_Vars.chrdata->yvisang = chr->yvisang; g_Vars.chrdata->teamscandist = chr->teamscandist; diff --git a/src/game/game_02cde0.c b/src/game/game_02cde0.c index da31033de..cf43dfbb4 100644 --- a/src/game/game_02cde0.c +++ b/src/game/game_02cde0.c @@ -995,7 +995,7 @@ struct prop *propAllocateEyespy(struct pad *pad, s16 room) chr->maxdamage = 2; chr->tude = random() & 3; chr->voicebox = random() % 3; - chr->naturalanim[0] = 0; + chr->naturalanim = 0; chr->myspecial = 0; chr->yvisang = 0; chr->teamscandist = 0; diff --git a/src/game/game_190260.c b/src/game/game_190260.c index e3218df55..eb822df91 100644 --- a/src/game/game_190260.c +++ b/src/game/game_190260.c @@ -3530,7 +3530,7 @@ bool mpIsChrFollowedByChr(struct chrdata *leader, struct chrdata *follower) while (true) { struct aibot *aibot = follower->aibot; - if (!aibot || follower->myaction[0] != MA_AIBOTFOLLOW || aibot->followingplayernum < 0) { + if (!aibot || follower->myaction != MA_AIBOTFOLLOW || aibot->followingplayernum < 0) { break; } @@ -3550,7 +3550,7 @@ s32 func0f193530(struct chrdata *chr, f32 arg1) s32 result = -1; if (g_MpSetup.options & MPOPTION_TEAMSENABLED) { - if (chr->myaction[0] != MA_AIBOTFOLLOW && (random() % 100) < chr->aibot->unk000) { + if (chr->myaction != MA_AIBOTFOLLOW && (random() % 100) < chr->aibot->unk000) { f32 bestvalue = 0; s32 bestindex = -1; s32 i; @@ -7908,7 +7908,7 @@ void func0f197544(struct chrdata *chr) bool pass = false; struct aibot *aibot = chr->aibot; - if (chr->myaction[0] == MA_AIBOTGETITEM) { + if (chr->myaction == MA_AIBOTGETITEM) { if (chr->act_gopos.waypoints[chr->act_gopos.curindex] == 0) { struct prop *prop = aibot->prop; diff --git a/src/include/types.h b/src/include/types.h index f1818ec3c..be2784067 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -948,10 +948,10 @@ struct chrdata { /*0x291*/ u8 goposhitcount; /*0x292*/ s16 cover; /*0x294*/ struct coord targetlastseenp; - /*0x2a0*/ u8 myaction[1]; - /*0x2a1*/ u8 orders[1]; + /*0x2a0*/ u8 myaction; + /*0x2a1*/ u8 orders; /*0x2a2*/ u8 squadron; - /*0x2a3*/ u8 listening[1]; + /*0x2a3*/ u8 listening; /*0x2a4*/ u32 convtalk; /*0x2a8*/ s32 talktimer; /*0x2ac*/ u8 question; @@ -976,7 +976,7 @@ struct chrdata { /*0x2e1*/ u8 cloakfadefrac : 7; /*0x2e1*/ u8 cloakfadefinished : 1; /*0x2e2*/ u8 teamscandist; - /*0x2e3*/ u8 naturalanim[1]; + /*0x2e3*/ u8 naturalanim; /*0x2e4*/ s32 myspecial; // This is an object tag ID /*0x2e8*/ f32 timeextra; /*0x2ec*/ f32 elapseextra;