mirror of
https://gitlab.com/ryandwyer/perfect-dark
synced 2026-07-27 22:59:11 -04:00
Discover face_cover AI command and decompile chrFaceCover
This commit is contained in:
+17
-46
@@ -901,52 +901,23 @@ void chrStand(struct chrdata *chr)
|
||||
}
|
||||
}
|
||||
|
||||
GLOBAL_ASM(
|
||||
glabel func0f02ec94
|
||||
.late_rodata
|
||||
glabel var7f1a8d00
|
||||
.word 0x46230028
|
||||
.text
|
||||
/* f02ec94: 27bdffd0 */ addiu $sp,$sp,-48
|
||||
/* f02ec98: afb00018 */ sw $s0,0x18($sp)
|
||||
/* f02ec9c: 00808025 */ or $s0,$a0,$zero
|
||||
/* f02eca0: afbf001c */ sw $ra,0x1c($sp)
|
||||
/* f02eca4: 84840292 */ lh $a0,0x292($a0)
|
||||
/* f02eca8: 0fc458b8 */ jal coverLoad
|
||||
/* f02ecac: 27a50020 */ addiu $a1,$sp,0x20
|
||||
/* f02ecb0: 14400003 */ bnez $v0,.L0f02ecc0
|
||||
/* f02ecb4: 00000000 */ sll $zero,$zero,0x0
|
||||
/* f02ecb8: 10000016 */ beqz $zero,.L0f02ed14
|
||||
/* f02ecbc: 00001025 */ or $v0,$zero,$zero
|
||||
.L0f02ecc0:
|
||||
/* f02ecc0: 0fc0baaf */ jal chrStand
|
||||
/* f02ecc4: 02002025 */ or $a0,$s0,$zero
|
||||
/* f02ecc8: 240e0010 */ addiu $t6,$zero,0x10
|
||||
/* f02eccc: 240f0001 */ addiu $t7,$zero,0x1
|
||||
/* f02ecd0: ae000038 */ sw $zero,0x38($s0)
|
||||
/* f02ecd4: ae0e0030 */ sw $t6,0x30($s0)
|
||||
/* f02ecd8: ae0f003c */ sw $t7,0x3c($s0)
|
||||
/* f02ecdc: 8fb80024 */ lw $t8,0x24($sp)
|
||||
/* f02ece0: c70c0000 */ lwc1 $f12,0x0($t8)
|
||||
/* f02ece4: c70e0008 */ lwc1 $f14,0x8($t8)
|
||||
/* f02ece8: 46006307 */ neg.s $f12,$f12
|
||||
/* f02ecec: 0fc259d4 */ jal func0f096750
|
||||
/* f02ecf0: 46007387 */ neg.s $f14,$f14
|
||||
/* f02ecf4: 3c017f1b */ lui $at,%hi(var7f1a8d00)
|
||||
/* f02ecf8: c4248d00 */ lwc1 $f4,%lo(var7f1a8d00)($at)
|
||||
/* f02ecfc: 24020001 */ addiu $v0,$zero,0x1
|
||||
/* f02ed00: 46040182 */ mul.s $f6,$f0,$f4
|
||||
/* f02ed04: 4600320d */ trunc.w.s $f8,$f6
|
||||
/* f02ed08: 44084000 */ mfc1 $t0,$f8
|
||||
/* f02ed0c: 00000000 */ sll $zero,$zero,0x0
|
||||
/* f02ed10: ae080034 */ sw $t0,0x34($s0)
|
||||
.L0f02ed14:
|
||||
/* f02ed14: 8fbf001c */ lw $ra,0x1c($sp)
|
||||
/* f02ed18: 8fb00018 */ lw $s0,0x18($sp)
|
||||
/* f02ed1c: 27bd0030 */ addiu $sp,$sp,0x30
|
||||
/* f02ed20: 03e00008 */ jr $ra
|
||||
/* f02ed24: 00000000 */ sll $zero,$zero,0x0
|
||||
);
|
||||
bool chrFaceCover(struct chrdata *chr)
|
||||
{
|
||||
struct cover cover;
|
||||
|
||||
if (!coverLoad(chr->cover, &cover)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
chrStand(chr);
|
||||
chr->act_stand.unk038 = 0;
|
||||
chr->act_stand.face_entitytype = ENTITYTYPE_DIRECTION;
|
||||
chr->act_stand.unk03c = 1;
|
||||
//chr->act_stand.face_entityid = func0f096750(-cover.look->x, -cover.look->z) * (0x4000 / DEG2RAD(90));
|
||||
chr->act_stand.face_entityid = func0f096750(-cover.look->x, -cover.look->z) * 10432.039f;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void func0f02ed28(struct chrdata *chr, f32 arg1)
|
||||
{
|
||||
|
||||
@@ -334,7 +334,7 @@ bool (*g_CommandPointers[])(void) = {
|
||||
/*0x0139*/ ai0139,
|
||||
/*0x013a*/ aiSetChrPresetToUnalertedTeammate,
|
||||
/*0x013b*/ aiSetSquadron,
|
||||
/*0x013c*/ ai013c,
|
||||
/*0x013c*/ aiFaceCover,
|
||||
/*0x013d*/ aiIfDangerousObjectNearby,
|
||||
/*0x013e*/ ai013e,
|
||||
/*0x013f*/ aiIfHeliWeaponsArmed,
|
||||
|
||||
@@ -8928,11 +8928,11 @@ bool aiSetSquadron(void)
|
||||
/**
|
||||
* @cmd 013c
|
||||
*/
|
||||
bool ai013c(void)
|
||||
bool aiFaceCover(void)
|
||||
{
|
||||
u8 *cmd = g_Vars.ailist + g_Vars.aioffset;
|
||||
|
||||
if (func0f02ec94(g_Vars.chrdata)) {
|
||||
if (chrFaceCover(g_Vars.chrdata)) {
|
||||
g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[2]);
|
||||
} else {
|
||||
g_Vars.aioffset += 3;
|
||||
|
||||
@@ -2856,7 +2856,12 @@
|
||||
mkshort(0x013b), \
|
||||
id,
|
||||
|
||||
#define cmd013c(label) \
|
||||
/**
|
||||
* Makes the current chr face their cover spot. Or face away from it. Not sure.
|
||||
*
|
||||
* The cover spot must have been assigned to the chr already.
|
||||
*/
|
||||
#define face_cover(label) \
|
||||
mkshort(0x013c), \
|
||||
label,
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ u32 func0f02e550(void);
|
||||
u32 func0f02e684(void);
|
||||
void func0f02e6dc(struct chrdata *chr, f32 arg1);
|
||||
void chrStand(struct chrdata *chr);
|
||||
u32 func0f02ec94(struct chrdata *chr);
|
||||
u32 chrFaceCover(struct chrdata *chr);
|
||||
void func0f02ed88(struct chrdata *chr);
|
||||
void func0f02ef40(struct chrdata *chr);
|
||||
void func0f02f070(struct chrdata *chr);
|
||||
|
||||
@@ -314,7 +314,7 @@
|
||||
/*0x0139*/ bool ai0139(void);
|
||||
/*0x013a*/ bool aiSetChrPresetToUnalertedTeammate(void);
|
||||
/*0x013b*/ bool aiSetSquadron(void);
|
||||
/*0x013c*/ bool ai013c(void);
|
||||
/*0x013c*/ bool aiFaceCover(void);
|
||||
/*0x013d*/ bool aiIfDangerousObjectNearby(void);
|
||||
/*0x013e*/ bool ai013e(void);
|
||||
/*0x013f*/ bool aiIfHeliWeaponsArmed(void);
|
||||
|
||||
+1
-1
@@ -352,7 +352,7 @@ struct aibot {
|
||||
struct act_stand {
|
||||
/*0x2c*/ s32 unk02c;
|
||||
/*0x30*/ u32 face_entitytype;
|
||||
/*0x34*/ u32 face_entityid;
|
||||
/*0x34*/ s32 face_entityid;
|
||||
/*0x38*/ u32 unk038;
|
||||
/*0x3c*/ s32 unk03c;
|
||||
/*0x40*/ u32 unk040;
|
||||
|
||||
Reference in New Issue
Block a user