Discover AI command try_start_alarm and decompile objFindByPadNum

This commit is contained in:
Ryan Dwyer 2020-05-27 21:03:53 +10:00
parent 1e55efb2e8
commit 690ba9baa8
8 changed files with 42 additions and 42 deletions

View File

@ -1111,7 +1111,7 @@ glabel func0f02ef40
/* f02eff8: 00000000 */ sll $zero,$zero,0x0
);
void func0f02effc(struct chrdata *chr)
void chrStartAlarm(struct chrdata *chr)
{
chrStopFiring(chr);
chr->actiontype = ACT_STARTALARM;
@ -13869,16 +13869,16 @@ glabel var7f1a8ed4
/* f03b5ec: 27bd02b8 */ addiu $sp,$sp,0x2b8
);
bool func0f03b5f0(struct chrdata *chr, s32 pad_id)
bool chrTryStartAlarm(struct chrdata *chr, s32 pad_id)
{
if (CHRRACE(chr) == RACE_HUMAN && chrIsReadyForOrders(chr)) {
pad_id = chrResolvePadId(chr, pad_id);
if (pad_id >= 0) {
struct defaultobj *obj = func0f0681c0(pad_id);
struct defaultobj *obj = objFindByPadNum(pad_id);
if (obj && objIsHealthy(obj)) {
func0f02effc(chr);
chrStartAlarm(chr);
return true;
}
}

View File

@ -57,7 +57,7 @@ bool (*g_CommandPointers[])(void) = {
/*0x0024*/ aiSurrender,
/*0x0025*/ aiFadeOut,
/*0x0026*/ aiRemoveChr,
/*0x0027*/ ai0027,
/*0x0027*/ aiTryStartAlarm,
/*0x0028*/ aiActivateAlarm,
/*0x0029*/ aiDeactivateAlarm,
/*0x002a*/ ai002a,

View File

@ -937,12 +937,12 @@ bool aiRemoveChr(void)
/**
* @cmd 0027
*/
bool ai0027(void)
bool aiTryStartAlarm(void)
{
u8 *cmd = g_Vars.ailist + g_Vars.aioffset;
u16 pad_id = cmd[3] | (cmd[2] << 8);
if (func0f03b5f0(g_Vars.chrdata, pad_id)) {
if (chrTryStartAlarm(g_Vars.chrdata, pad_id)) {
g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[4]);
} else {
g_Vars.aioffset += 5;

View File

@ -2370,34 +2370,24 @@ glabel func0f06803c
/* f0681bc: 27bd0058 */ addiu $sp,$sp,0x58
);
GLOBAL_ASM(
glabel func0f0681c0
/* f0681c0: 3c02800a */ lui $v0,%hi(g_Vars+0x33c)
/* f0681c4: 8c42a2fc */ lw $v0,%lo(g_Vars+0x33c)($v0)
/* f0681c8: 24050001 */ addiu $a1,$zero,0x1
/* f0681cc: 50400010 */ beqzl $v0,.L0f068210
/* f0681d0: 00001025 */ or $v0,$zero,$zero
/* f0681d4: 904e0000 */ lbu $t6,0x0($v0)
.L0f0681d8:
/* f0681d8: 54ae000a */ bnel $a1,$t6,.L0f068204
/* f0681dc: 8c420020 */ lw $v0,0x20($v0)
/* f0681e0: 8c430004 */ lw $v1,0x4($v0)
/* f0681e4: 00047c00 */ sll $t7,$a0,0x10
/* f0681e8: 000fc403 */ sra $t8,$t7,0x10
/* f0681ec: 84790006 */ lh $t9,0x6($v1)
/* f0681f0: 57190004 */ bnel $t8,$t9,.L0f068204
/* f0681f4: 8c420020 */ lw $v0,0x20($v0)
/* f0681f8: 03e00008 */ jr $ra
/* f0681fc: 00601025 */ or $v0,$v1,$zero
/* f068200: 8c420020 */ lw $v0,0x20($v0)
.L0f068204:
/* f068204: 5440fff4 */ bnezl $v0,.L0f0681d8
/* f068208: 904e0000 */ lbu $t6,0x0($v0)
/* f06820c: 00001025 */ or $v0,$zero,$zero
.L0f068210:
/* f068210: 03e00008 */ jr $ra
/* f068214: 00000000 */ sll $zero,$zero,0x0
);
struct defaultobj *objFindByPadNum(s32 padnum)
{
struct prop *prop = g_Vars.unk00033c;
while (prop) {
if (prop->type == PROPTYPE_OBJ) {
struct defaultobj *obj = prop->obj;
if (obj->pad == (s16)padnum) {
return obj;
}
}
prop = prop->next;
}
return NULL;
}
GLOBAL_ASM(
glabel func0f068218

View File

@ -372,7 +372,17 @@
mkshort(0x0026), \
chr,
#define cmd0027(pad, label) \
/**
* Makes the chr try to run to an alarm switch and activate it.
*
* The pad argument should be the pad that the alarm is at. A check is done to
* make sure the object at that pad is healthy.
*
* Note that no check is done to make sure that the object at the pad is
* actually an alarm switch, and the chr will actually run to their closest
* alarm switch rather than the one at the given pad.
*/
#define try_start_alarm(pad, label) \
mkshort(0x0027), \
mkshort(pad), \
label,
@ -382,8 +392,8 @@
* start. To make guards spawn when the alarm is sounded, an AI list must wait
* for the alarm then spawn them.
*
* The alarm does not have a timer. You may want to use an AI list to wait for
* them alarm, then wait a certain amount of time before deactivating it.
* Alarms have a 30 second timer, with the exception of G5 Building which is
* 55 seconds.
*/
#define activate_alarm \
mkshort(0x0028),

View File

@ -210,7 +210,7 @@ void func0f02e9a0(struct chrdata *chr, f32 arg1);
void func0f02ed28(struct chrdata *chr, f32 arg1);
void chrStop(struct chrdata *chr);
void chrKneel(struct chrdata *chr);
void func0f02effc(struct chrdata *chr);
void chrStartAlarm(struct chrdata *chr);
void chrThrowGrenade(struct chrdata *chr, s32 arg1, s32 arg2);
void chrDoSurprisedSurrender(struct chrdata *chr);
void chrDoSurprisedLookAround(struct chrdata *chr);
@ -248,7 +248,7 @@ bool chrTrySurprisedSurrender(struct chrdata *chr);
bool chrTrySurprisedLookAround(struct chrdata *chr);
bool chrTryKneel(struct chrdata *chr);
bool func0f03af44(struct chrdata *chr, u32 anim_id, f32 fstartframe, f32 fendframe, u8 flags, u32 transition, f32 result);
bool func0f03b5f0(struct chrdata *chr, s32 pad_id);
bool chrTryStartAlarm(struct chrdata *chr, s32 pad_id);
s32 chrConsiderGrenadeThrow(struct chrdata *chr, u32 entitytype, u32 entityid);
void chrTickKneel(struct chrdata *chr);
void func0f03ccdc(struct chrdata *chr);

View File

@ -42,7 +42,7 @@
/*0x0024*/ bool aiSurrender(void);
/*0x0025*/ bool aiFadeOut(void);
/*0x0026*/ bool aiRemoveChr(void);
/*0x0027*/ bool ai0027(void);
/*0x0027*/ bool aiTryStartAlarm(void);
/*0x0028*/ bool aiActivateAlarm(void);
/*0x0029*/ bool aiDeactivateAlarm(void);
/*0x002a*/ bool ai002a(void);

View File

@ -51,7 +51,7 @@ u32 func0f067d88(void);
u32 func0f067dc4(void);
void func0f068018(struct animdata *animdata, f32 *arg1, f32 *arg2, f32 *arg3, f32 *arg4);
u32 func0f06803c(void);
struct defaultobj *func0f0681c0(s32 pad_id);
struct defaultobj *objFindByPadNum(s32 padnum);
u32 func0f068218(void);
u32 func0f0682dc(void);
u32 func0f0682fc(void);