Decompile aiIfOrders

This commit is contained in:
Ryan Dwyer 2020-02-16 14:10:46 +10:00
parent 5cec968821
commit 785c55294b
3 changed files with 36 additions and 74 deletions

View File

@ -8988,7 +8988,7 @@ bool aiSetAction(void)
g_Vars.chrdata->myaction[0] = cmd[2];
if (cmd[3] == 0) {
g_Vars.chrdata->orders = 0;
g_Vars.chrdata->orders[0] = 0;
}
g_Vars.aioffset += 4;
@ -9053,69 +9053,69 @@ bool aiSetTeamOrders(void)
switch (chractions[0].myaction) {
case MA_COVERGOTO:
if (func0f048e74(chr, 45) == 0) {
chr->orders = MA_SHOOTING;
chr->orders[0] = MA_SHOOTING;
}
break;
case MA_COVERBREAK:
if (func0f048e74(chr, 30) == 0) {
chr->orders = MA_SHOOTING;
chr->orders[0] = MA_SHOOTING;
}
num++;
break;
case MA_COVERSEEN:
if (func0f048e74(chr, 30) == 0) {
chr->orders = MA_SHOOTING;
g_Vars.chrdata->orders = MA_COVERGOTO;
chr->orders[0] = MA_SHOOTING;
g_Vars.chrdata->orders[0] = MA_COVERGOTO;
}
num++;
break;
case MA_FLANKLEFT:
if (func0f048e74(chr, 50)) {
chr->orders = MA_FLANKRIGHT;
chr->orders[0] = MA_FLANKRIGHT;
} else {
chr->orders = MA_SHOOTING;
chr->orders[0] = MA_SHOOTING;
}
num++;
g_Vars.chrdata->orders = MA_FLANKLEFT;
g_Vars.chrdata->orders[0] = MA_FLANKLEFT;
break;
case MA_FLANKRIGHT:
if (func0f048e74(chr, 50)) {
chr->orders = MA_FLANKLEFT;
chr->orders[0] = MA_FLANKLEFT;
} else {
chr->orders = MA_SHOOTING;
chr->orders[0] = MA_SHOOTING;
}
num++;
g_Vars.chrdata->orders = MA_FLANKRIGHT;
g_Vars.chrdata->orders[0] = MA_FLANKRIGHT;
break;
case MA_DODGE:
if (func0f048e74(chr, 30) == 0 &&
chrHasFlagById(chr, CHR_SELF, CHRFLAG0_CAN_BACKOFF, BANK_0)) {
chr->orders = MA_WITHDRAW;
chr->orders[0] = MA_WITHDRAW;
} else {
chr->orders = MA_SHOOTING;
chr->orders[0] = MA_SHOOTING;
}
num++;
break;
case MA_GRENADE:
if (num < 2) {
chr->orders = MA_WAITING;
chr->orders[0] = MA_WAITING;
} else if (chrHasFlagById(chr, CHR_SELF, CHRFLAG0_CAN_BACKOFF, BANK_0)) {
chr->orders = MA_WITHDRAW;
chr->orders[0] = MA_WITHDRAW;
}
num++;
break;
case MA_WAITSEEN:
if (func0f048e74(chr, 30) &&
chrHasFlagById(chr, CHR_SELF, CHRFLAG0_CAN_BACKOFF, BANK_0)) {
chr->orders = MA_WITHDRAW;
chr->orders[0] = MA_WITHDRAW;
} else {
chr->orders = MA_SHOOTING;
chr->orders[0] = MA_SHOOTING;
}
num++;
break;
case MA_WITHDRAW:
if (chrHasFlagById(chr, CHR_SELF, CHRFLAG0_CAN_BACKOFF, BANK_0)) {
chr->orders = MA_WITHDRAW;
chr->orders[0] = MA_WITHDRAW;
}
break;
}
@ -9138,60 +9138,22 @@ bool aiSetTeamOrders(void)
/**
* @cmd 0134
*/
GLOBAL_ASM(
glabel aiIfOrders
/* f05b220: 3c03800a */ lui $v1,%hi(g_Vars)
/* f05b224: 24639fc0 */ addiu $v1,$v1,%lo(g_Vars)
/* f05b228: 8c640434 */ lw $a0,0x434($v1)
/* f05b22c: 8c650438 */ lw $a1,0x438($v1)
/* f05b230: 8c6f0424 */ lw $t7,0x424($v1)
/* f05b234: 27bdffe8 */ addiu $sp,$sp,-24
/* f05b238: afbf0014 */ sw $ra,0x14($sp)
/* f05b23c: 00851021 */ addu $v0,$a0,$a1
/* f05b240: 904e0003 */ lbu $t6,0x3($v0)
/* f05b244: 91f802a1 */ lbu $t8,0x2a1($t7)
/* f05b248: 24a90005 */ addiu $t1,$a1,0x5
/* f05b24c: 55d8000e */ bnel $t6,$t8,.L0f05b288
/* f05b250: ac690438 */ sw $t1,0x438($v1)
/* f05b254: 0fc13583 */ jal chraiGoToLabel
/* f05b258: 90460004 */ lbu $a2,0x4($v0)
/* f05b25c: 3c03800a */ lui $v1,%hi(g_Vars)
/* f05b260: 24639fc0 */ addiu $v1,$v1,%lo(g_Vars)
/* f05b264: 8c790424 */ lw $t9,0x424($v1)
/* f05b268: ac620438 */ sw $v0,0x438($v1)
/* f05b26c: 2401000d */ addiu $at,$zero,0xd
/* f05b270: 932802a1 */ lbu $t0,0x2a1($t9)
/* f05b274: 55010005 */ bnel $t0,$at,.L0f05b28c
/* f05b278: 8fbf0014 */ lw $ra,0x14($sp)
/* f05b27c: 10000003 */ beqz $zero,.L0f05b28c
/* f05b280: 8fbf0014 */ lw $ra,0x14($sp)
/* f05b284: ac690438 */ sw $t1,0x438($v1)
.L0f05b288:
/* f05b288: 8fbf0014 */ lw $ra,0x14($sp)
.L0f05b28c:
/* f05b28c: 27bd0018 */ addiu $sp,$sp,0x18
/* f05b290: 00001025 */ or $v0,$zero,$zero
/* f05b294: 03e00008 */ jr $ra
/* f05b298: 00000000 */ sll $zero,$zero,0x0
);
bool aiIfOrders(void)
{
u8 *cmd = g_Vars.ailist + g_Vars.aioffset;
// Mismatch because it uses different temporary registers
//bool aiIfOrders(void)
//{
// u8 *cmd = g_Vars.ailist + g_Vars.aioffset;
//
// if (g_Vars.chrdata->orders == cmd[3]) {
// g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[4]);
//
// if (g_Vars.chrdata->orders == 13) {
// // empty
// }
// } else {
// g_Vars.aioffset += 5;
// }
//
// return false;
//}
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[0] == MA_WITHDRAW) {
// empty
}
} else {
g_Vars.aioffset += 5;
}
return false;
}
/**
* @cmd 0135
@ -9200,7 +9162,7 @@ bool aiIfHasOrders(void)
{
u8 *cmd = g_Vars.ailist + g_Vars.aioffset;
if (g_Vars.chrdata->orders) {
if (g_Vars.chrdata->orders[0]) {
g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[2]);
} else {
g_Vars.aioffset += 3;

View File

@ -2685,7 +2685,7 @@ void chrInit(struct prop *prop, u8 *ailist)
chr->targetlastseenp.y = 0;
chr->targetlastseenp.z = 0;
chr->myaction[0] = MA_NONE;
chr->orders = 0;
chr->orders[0] = MA_NONE;
chr->squadron = 0;
chr->listening = 0;
chr->convtalk = 0;

View File

@ -587,7 +587,7 @@ struct chrdata {
/*0x292*/ s16 cover;
/*0x294*/ struct coord targetlastseenp;
/*0x2a0*/ u8 myaction[1];
/*0x2a1*/ u8 orders;
/*0x2a1*/ u8 orders[1];
/*0x2a2*/ u8 squadron;
/*0x2a3*/ u8 listening;
/*0x2a4*/ u32 convtalk;