mirror of
https://gitlab.com/ryandwyer/perfect-dark
synced 2026-08-10 18:56:53 -04:00
Find resolution for u8 foo[1] hacks in chrdata struct
This commit is contained in:
+3
-3
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
+4
-4
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user