Decompile chrGoToPad
This commit is contained in:
parent
543071f3fd
commit
4ed6643dd2
|
|
@ -2240,21 +2240,21 @@ u8 func101a_init_laser_switch_guards[] = {
|
|||
if_difficulty_lt(DIFF_PA, /*goto*/ 0x09)
|
||||
|
||||
// Perfect Agent
|
||||
set_chr_flag_bankx(0x0c, CHRFLAG0_CAN_RUN_FOR_ALARM, BANK_0)
|
||||
set_chr_flag_bankx(0x0d, CHRFLAG0_CAN_RUN_FOR_ALARM, BANK_0)
|
||||
set_chr_flag_bankx(0x0e, CHRFLAG0_CAN_RUN_FOR_ALARM, BANK_0)
|
||||
set_chr_flag_bankx(0x0c, CHRFLAG0_CAN_GO_TO_PLACES, BANK_0)
|
||||
set_chr_flag_bankx(0x0d, CHRFLAG0_CAN_GO_TO_PLACES, BANK_0)
|
||||
set_chr_flag_bankx(0x0e, CHRFLAG0_CAN_GO_TO_PLACES, BANK_0)
|
||||
goto_next(0x06)
|
||||
|
||||
// Agent
|
||||
label(0x08)
|
||||
set_chr_flag_bankx(0x0e, CHRFLAG0_CAN_RUN_FOR_ALARM, BANK_0)
|
||||
set_chr_flag_bankx(0x0e, CHRFLAG0_CAN_GO_TO_PLACES, BANK_0)
|
||||
set_chr_flag_bankx(0x0e, CHRFLAG0_UNSURPRISABLE, BANK_0)
|
||||
goto_next(0x06)
|
||||
|
||||
// Special Agent
|
||||
label(0x09)
|
||||
set_chr_flag_bankx(0x0e, CHRFLAG0_CAN_RUN_FOR_ALARM, BANK_0)
|
||||
set_chr_flag_bankx(0x0d, CHRFLAG0_CAN_RUN_FOR_ALARM, BANK_0)
|
||||
set_chr_flag_bankx(0x0e, CHRFLAG0_CAN_GO_TO_PLACES, BANK_0)
|
||||
set_chr_flag_bankx(0x0d, CHRFLAG0_CAN_GO_TO_PLACES, BANK_0)
|
||||
|
||||
label(0x06)
|
||||
set_ailist(CHR_SELF, GAILIST_IDLE)
|
||||
|
|
|
|||
|
|
@ -13019,62 +13019,32 @@ bool chrFaceEntity(struct chrdata *chr, u32 entitytype, u32 entityid)
|
|||
return false;
|
||||
}
|
||||
|
||||
GLOBAL_ASM(
|
||||
glabel func0f03a894
|
||||
/* f03a894: 27bdff88 */ addiu $sp,$sp,-120
|
||||
/* f03a898: afb00018 */ sw $s0,0x18($sp)
|
||||
/* f03a89c: 00808025 */ or $s0,$a0,$zero
|
||||
/* f03a8a0: afbf001c */ sw $ra,0x1c($sp)
|
||||
/* f03a8a4: 04a00027 */ bltz $a1,.L0f03a944
|
||||
/* f03a8a8: afa60080 */ sw $a2,0x80($sp)
|
||||
/* f03a8ac: 0fc0e686 */ jal chrIsReadyForOrders
|
||||
/* f03a8b0: afa5007c */ sw $a1,0x7c($sp)
|
||||
/* f03a8b4: 10400023 */ beqz $v0,.L0f03a944
|
||||
/* f03a8b8: 8fa7007c */ lw $a3,0x7c($sp)
|
||||
/* f03a8bc: 3c0e8006 */ lui $t6,%hi(var80062cbc)
|
||||
/* f03a8c0: 8dce2cbc */ lw $t6,%lo(var80062cbc)($t6)
|
||||
/* f03a8c4: 02002025 */ or $a0,$s0,$zero
|
||||
/* f03a8c8: 29c10009 */ slti $at,$t6,0x9
|
||||
/* f03a8cc: 14200009 */ bnez $at,.L0f03a8f4
|
||||
/* f03a8d0: 00000000 */ sll $zero,$zero,0x0
|
||||
/* f03a8d4: 8e0f0014 */ lw $t7,0x14($s0)
|
||||
/* f03a8d8: 000fc240 */ sll $t8,$t7,0x9
|
||||
/* f03a8dc: 07010005 */ bgez $t8,.L0f03a8f4
|
||||
/* f03a8e0: 00000000 */ sll $zero,$zero,0x0
|
||||
/* f03a8e4: 8e190114 */ lw $t9,0x114($s0)
|
||||
/* f03a8e8: 00194340 */ sll $t0,$t9,0xd
|
||||
/* f03a8ec: 05030016 */ bgezl $t0,.L0f03a948
|
||||
/* f03a8f0: 00001025 */ or $v0,$zero,$zero
|
||||
.L0f03a8f4:
|
||||
/* f03a8f4: 0fc1258b */ jal chrResolvePadId
|
||||
/* f03a8f8: 00e02825 */ or $a1,$a3,$zero
|
||||
/* f03a8fc: 04400011 */ bltz $v0,.L0f03a944
|
||||
/* f03a900: 00402025 */ or $a0,$v0,$zero
|
||||
/* f03a904: 24050042 */ addiu $a1,$zero,0x42
|
||||
/* f03a908: 0fc456ac */ jal padUnpack
|
||||
/* f03a90c: 27a60020 */ addiu $a2,$sp,0x20
|
||||
/* f03a910: 8fa90068 */ lw $t1,0x68($sp)
|
||||
/* f03a914: 240affff */ addiu $t2,$zero,-1
|
||||
/* f03a918: a7aa0076 */ sh $t2,0x76($sp)
|
||||
/* f03a91c: 02002025 */ or $a0,$s0,$zero
|
||||
/* f03a920: 27a50020 */ addiu $a1,$sp,0x20
|
||||
/* f03a924: 27a60074 */ addiu $a2,$sp,0x74
|
||||
/* f03a928: 8fa70080 */ lw $a3,0x80($sp)
|
||||
/* f03a92c: 0fc0e10f */ jal chrGoToPos
|
||||
/* f03a930: a7a90074 */ sh $t1,0x74($sp)
|
||||
/* f03a934: 50400004 */ beqzl $v0,.L0f03a948
|
||||
/* f03a938: 00001025 */ or $v0,$zero,$zero
|
||||
/* f03a93c: 10000002 */ beqz $zero,.L0f03a948
|
||||
/* f03a940: 24020001 */ addiu $v0,$zero,0x1
|
||||
.L0f03a944:
|
||||
/* f03a944: 00001025 */ or $v0,$zero,$zero
|
||||
.L0f03a948:
|
||||
/* f03a948: 8fbf001c */ lw $ra,0x1c($sp)
|
||||
/* f03a94c: 8fb00018 */ lw $s0,0x18($sp)
|
||||
/* f03a950: 27bd0078 */ addiu $sp,$sp,0x78
|
||||
/* f03a954: 03e00008 */ jr $ra
|
||||
/* f03a958: 00000000 */ sll $zero,$zero,0x0
|
||||
);
|
||||
bool chrGoToPad(struct chrdata *chr, s32 padnum, u32 speed)
|
||||
{
|
||||
if (padnum >= 0
|
||||
&& chrIsReadyForOrders(chr)
|
||||
&& (var80062cbc <= 8
|
||||
|| (chr->hidden & CHRHFLAG_00400000) == 0
|
||||
|| (chr->flags & CHRFLAG0_CAN_GO_TO_PLACES))) {
|
||||
padnum = chrResolvePadId(chr, padnum);
|
||||
|
||||
if (padnum >= 0) {
|
||||
s16 rooms[2];
|
||||
struct pad pad;
|
||||
|
||||
padUnpack(padnum, PADFIELD_ROOM | PADFIELD_POS, &pad);
|
||||
|
||||
rooms[0] = pad.room;
|
||||
rooms[1] = -1;
|
||||
|
||||
if (chrGoToPos(chr, &pad.pos, rooms, speed)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool chrSetPath(struct chrdata *chr, u32 path_id)
|
||||
{
|
||||
|
|
@ -13117,7 +13087,7 @@ bool chrGoToTarget(struct chrdata *chr, u32 speed)
|
|||
if (chrIsReadyForOrders(chr)) {
|
||||
if (var80062cbc <= 8 ||
|
||||
(chr->hidden & CHRHFLAG_00400000) == 0 ||
|
||||
(chr->flags & CHRFLAG0_CAN_RUN_FOR_ALARM)) {
|
||||
(chr->flags & CHRFLAG0_CAN_GO_TO_PLACES)) {
|
||||
struct prop *prop = chrGetTargetProp(chr);
|
||||
|
||||
if (chrGoToPos(chr, &prop->pos, &prop->rooms[0], speed)) {
|
||||
|
|
@ -13134,7 +13104,7 @@ bool chrGoToChr(struct chrdata *chr, u32 dst_chrnum, u32 speed)
|
|||
if (chrIsReadyForOrders(chr)) {
|
||||
if (var80062cbc <= 8 ||
|
||||
(chr->hidden & CHRHFLAG_00400000) == 0 ||
|
||||
(chr->flags & CHRFLAG0_CAN_RUN_FOR_ALARM)) {
|
||||
(chr->flags & CHRFLAG0_CAN_GO_TO_PLACES)) {
|
||||
struct chrdata *dstchr = chrFindById(chr, dst_chrnum);
|
||||
|
||||
if (dstchr && dstchr->prop && chrGoToPos(chr, &dstchr->prop->pos, &dstchr->prop->rooms[0], speed)) {
|
||||
|
|
|
|||
|
|
@ -1149,7 +1149,7 @@ bool aiJogToPad(void)
|
|||
u8 *cmd = g_Vars.ailist + g_Vars.aioffset;
|
||||
u16 pad = cmd[3] | (cmd[2] << 8);
|
||||
|
||||
func0f03a894(g_Vars.chrdata, pad, SPEED_JOG);
|
||||
chrGoToPad(g_Vars.chrdata, pad, SPEED_JOG);
|
||||
g_Vars.aioffset += 4;
|
||||
|
||||
return false;
|
||||
|
|
@ -1164,13 +1164,13 @@ bool aiGoToPadPreset(void)
|
|||
|
||||
switch (cmd[2]) {
|
||||
case 0:
|
||||
func0f03a894(g_Vars.chrdata, g_Vars.chrdata->padpreset1, SPEED_WALK);
|
||||
chrGoToPad(g_Vars.chrdata, g_Vars.chrdata->padpreset1, SPEED_WALK);
|
||||
break;
|
||||
case 1:
|
||||
func0f03a894(g_Vars.chrdata, g_Vars.chrdata->padpreset1, SPEED_JOG);
|
||||
chrGoToPad(g_Vars.chrdata, g_Vars.chrdata->padpreset1, SPEED_JOG);
|
||||
break;
|
||||
default:
|
||||
func0f03a894(g_Vars.chrdata, g_Vars.chrdata->padpreset1, SPEED_RUN);
|
||||
chrGoToPad(g_Vars.chrdata, g_Vars.chrdata->padpreset1, SPEED_RUN);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -1187,7 +1187,7 @@ bool aiWalkToPad(void)
|
|||
u8 *cmd = g_Vars.ailist + g_Vars.aioffset;
|
||||
u16 pad = cmd[3] | (cmd[2] << 8);
|
||||
|
||||
func0f03a894(g_Vars.chrdata, pad, SPEED_WALK);
|
||||
chrGoToPad(g_Vars.chrdata, pad, SPEED_WALK);
|
||||
g_Vars.aioffset += 4;
|
||||
|
||||
return false;
|
||||
|
|
@ -1201,7 +1201,7 @@ bool aiRunToPad(void)
|
|||
u8 *cmd = g_Vars.ailist + g_Vars.aioffset;
|
||||
u16 pad = cmd[3] | (cmd[2] << 8);
|
||||
|
||||
func0f03a894(g_Vars.chrdata, pad, SPEED_RUN);
|
||||
chrGoToPad(g_Vars.chrdata, pad, SPEED_RUN);
|
||||
g_Vars.aioffset += 4;
|
||||
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -365,7 +365,7 @@ u8 func0006_unalerted[] = {
|
|||
label(0x16)
|
||||
if_chr_has_hiddenflag(CHR_TARGET, CHRHFLAG_DISGUISED, /*goto*/ 0x14)
|
||||
if_chr_in_squadron_doing_action(MA_GOTOALARM, /*goto*/ 0x16)
|
||||
if_self_flag_bankx_eq(CHRFLAG0_CAN_RUN_FOR_ALARM, TRUE, BANK_0, /*goto*/ 0x9f)
|
||||
if_self_flag_bankx_eq(CHRFLAG0_CAN_GO_TO_PLACES, TRUE, BANK_0, /*goto*/ 0x9f)
|
||||
label(0x16)
|
||||
say_quip(CHR_BOND, QUIP_SEEPLAYER, 0xff, 0x03, 0xff, BANK_0, 0x00, 0x00)
|
||||
label(0x9f)
|
||||
|
|
@ -753,7 +753,7 @@ u8 func0006_unalerted[] = {
|
|||
|
||||
label(0x77)
|
||||
if_chr_in_squadron_doing_action(MA_GOTOALARM, /*goto*/ 0x16)
|
||||
if_self_flag_bankx_eq(CHRFLAG0_CAN_RUN_FOR_ALARM, TRUE, BANK_0, /*goto*/ 0x13)
|
||||
if_self_flag_bankx_eq(CHRFLAG0_CAN_GO_TO_PLACES, TRUE, BANK_0, /*goto*/ 0x13)
|
||||
label(0x16)
|
||||
set_ailist(CHR_SELF, GAILIST_INIT_COMBAT)
|
||||
|
||||
|
|
@ -1074,7 +1074,7 @@ u8 func0007_alerted[] = {
|
|||
dprint 'B','4',' ','T','E','A','M',' ','C','H','E','C','K','\n',0,
|
||||
if_alarm_active(/*goto*/ 0x16)
|
||||
if_chr_in_squadron_doing_action(MA_GOTOALARM, /*goto*/ 0x16)
|
||||
if_self_flag_bankx_eq(CHRFLAG0_CAN_RUN_FOR_ALARM, TRUE, BANK_0, /*goto*/ LABEL_RUN_FOR_ALARM)
|
||||
if_self_flag_bankx_eq(CHRFLAG0_CAN_GO_TO_PLACES, TRUE, BANK_0, /*goto*/ LABEL_RUN_FOR_ALARM)
|
||||
|
||||
// No need to warn
|
||||
label(0x16)
|
||||
|
|
|
|||
|
|
@ -303,7 +303,7 @@
|
|||
#define CHRFLAG0_00008000 0x00008000 // Something to do with breaking cover or grenades?
|
||||
#define CHRFLAG0_AIVSAI 0x00010000
|
||||
#define CHRFLAG0_CAN_TRAP 0x00020000
|
||||
#define CHRFLAG0_CAN_RUN_FOR_ALARM 0x00040000
|
||||
#define CHRFLAG0_CAN_GO_TO_PLACES 0x00040000
|
||||
#define CHRFLAG0_SQUADALERTANYDIST 0x00080000
|
||||
#define CHRFLAG0_00100000 0x00100000 // Become alert when hearing player and never on screen
|
||||
#define CHRFLAG0_00200000 0x00200000 // Globals, Villa hostage takers
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@ u32 chrTryAttackWalk(struct chrdata *chr);
|
|||
bool chrTryAttackRun(struct chrdata *chr);
|
||||
u32 chrTryAttackRoll(struct chrdata *chr);
|
||||
u32 chrTryAttackAmount(struct chrdata *chr, u32 arg1, u32 arg2, u8 arg3, u8 arg4);
|
||||
u32 func0f03a894(struct chrdata *chr, s32 pad, s32 arg2);
|
||||
bool chrGoToPad(struct chrdata *chr, s32 padnum, u32 speed);
|
||||
u32 func0f03abd0(void);
|
||||
u32 func0f03aca0(struct chrdata *chr, u32 arg1, u32 arg2);
|
||||
u32 chrTryRunFromTarget(struct chrdata *chr);
|
||||
|
|
|
|||
Loading…
Reference in New Issue