From 454306a7e957141c267db79ef718c64ae892bfb8 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Thu, 28 Nov 2019 12:27:19 +1000 Subject: [PATCH] Decompile ai0075 and ai0076 --- src/game/chr/chraicommands.c | 96 ++------ src/include/game/chr/chr.h | 443 +---------------------------------- 2 files changed, 26 insertions(+), 513 deletions(-) diff --git a/src/game/chr/chraicommands.c b/src/game/chr/chraicommands.c index 074999369..c54f3d9fc 100644 --- a/src/game/chr/chraicommands.c +++ b/src/game/chr/chraicommands.c @@ -3766,82 +3766,34 @@ bool aiIfObjectiveFailed(void) /** * @cmd 0075 */ -GLOBAL_ASM( -glabel ai0075 -/* f052780: 3c03800a */ lui $v1,%hi(g_Vars) -/* f052784: 24639fc0 */ addiu $v1,$v1,%lo(g_Vars) -/* f052788: 8c6e0434 */ lw $t6,0x434($v1) -/* f05278c: 8c6f0438 */ lw $t7,0x438($v1) -/* f052790: 27bdffe0 */ addiu $sp,$sp,-32 -/* f052794: afbf0014 */ sw $ra,0x14($sp) -/* f052798: 01cf3821 */ addu $a3,$t6,$t7 -/* f05279c: 90e50002 */ lbu $a1,0x2($a3) -/* f0527a0: afa7001c */ sw $a3,0x1c($sp) -/* f0527a4: 0fc1293b */ jal func0f04a4ec -/* f0527a8: 8c640424 */ lw $a0,0x424($v1) -/* f0527ac: 3c03800a */ lui $v1,%hi(g_Vars) -/* f0527b0: 24639fc0 */ addiu $v1,$v1,%lo(g_Vars) -/* f0527b4: 10400009 */ beqz $v0,.L0f0527dc -/* f0527b8: 8fa7001c */ lw $a3,0x1c($sp) -/* f0527bc: 8c640434 */ lw $a0,0x434($v1) -/* f0527c0: 8c650438 */ lw $a1,0x438($v1) -/* f0527c4: 0fc13583 */ jal chraiGoToLabel -/* f0527c8: 90e60003 */ lbu $a2,0x3($a3) -/* f0527cc: 3c03800a */ lui $v1,%hi(g_Vars) -/* f0527d0: 24639fc0 */ addiu $v1,$v1,%lo(g_Vars) -/* f0527d4: 10000004 */ beqz $zero,.L0f0527e8 -/* f0527d8: ac620438 */ sw $v0,0x438($v1) -.L0f0527dc: -/* f0527dc: 8c780438 */ lw $t8,0x438($v1) -/* f0527e0: 27190004 */ addiu $t9,$t8,0x4 -/* f0527e4: ac790438 */ sw $t9,0x438($v1) -.L0f0527e8: -/* f0527e8: 8fbf0014 */ lw $ra,0x14($sp) -/* f0527ec: 27bd0020 */ addiu $sp,$sp,0x20 -/* f0527f0: 00001025 */ or $v0,$zero,$zero -/* f0527f4: 03e00008 */ jr $ra -/* f0527f8: 00000000 */ sll $zero,$zero,0x0 -); +bool ai0075(void) +{ + u8 *cmd = g_Vars.ailist + g_Vars.aioffset; + + if (func0f04a4ec(g_Vars.chrdata, cmd[2])) { + g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[3]); + } else { + g_Vars.aioffset += 4; + } + + return false; +} /** * @cmd 0076 */ -GLOBAL_ASM( -glabel ai0076 -/* f0527fc: 3c03800a */ lui $v1,%hi(g_Vars) -/* f052800: 24639fc0 */ addiu $v1,$v1,%lo(g_Vars) -/* f052804: 8c6e0434 */ lw $t6,0x434($v1) -/* f052808: 8c6f0438 */ lw $t7,0x438($v1) -/* f05280c: 27bdffe0 */ addiu $sp,$sp,-32 -/* f052810: afbf0014 */ sw $ra,0x14($sp) -/* f052814: 01cf3821 */ addu $a3,$t6,$t7 -/* f052818: 90e50002 */ lbu $a1,0x2($a3) -/* f05281c: afa7001c */ sw $a3,0x1c($sp) -/* f052820: 0fc1299d */ jal func0f04a674 -/* f052824: 8c640424 */ lw $a0,0x424($v1) -/* f052828: 3c03800a */ lui $v1,%hi(g_Vars) -/* f05282c: 24639fc0 */ addiu $v1,$v1,%lo(g_Vars) -/* f052830: 10400009 */ beqz $v0,.L0f052858 -/* f052834: 8fa7001c */ lw $a3,0x1c($sp) -/* f052838: 8c640434 */ lw $a0,0x434($v1) -/* f05283c: 8c650438 */ lw $a1,0x438($v1) -/* f052840: 0fc13583 */ jal chraiGoToLabel -/* f052844: 90e60003 */ lbu $a2,0x3($a3) -/* f052848: 3c03800a */ lui $v1,%hi(g_Vars) -/* f05284c: 24639fc0 */ addiu $v1,$v1,%lo(g_Vars) -/* f052850: 10000004 */ beqz $zero,.L0f052864 -/* f052854: ac620438 */ sw $v0,0x438($v1) -.L0f052858: -/* f052858: 8c780438 */ lw $t8,0x438($v1) -/* f05285c: 27190004 */ addiu $t9,$t8,0x4 -/* f052860: ac790438 */ sw $t9,0x438($v1) -.L0f052864: -/* f052864: 8fbf0014 */ lw $ra,0x14($sp) -/* f052868: 27bd0020 */ addiu $sp,$sp,0x20 -/* f05286c: 00001025 */ or $v0,$zero,$zero -/* f052870: 03e00008 */ jr $ra -/* f052874: 00000000 */ sll $zero,$zero,0x0 -); +bool ai0076(void) +{ + u8 *cmd = g_Vars.ailist + g_Vars.aioffset; + + if (func0f04a674(g_Vars.chrdata, cmd[2])) { + g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[3]); + } else { + g_Vars.aioffset += 4; + } + + return false; +} /** * @cmd 007d diff --git a/src/include/game/chr/chr.h b/src/include/game/chr/chr.h index f2348c199..60bcadc1d 100644 --- a/src/include/game/chr/chr.h +++ b/src/include/game/chr/chr.h @@ -3,445 +3,6 @@ #include #include "types.h" -bool ai0007(void); -bool ai000b(void); -bool ai000d(void); -bool ai000e(void); -bool ai0019(void); -bool ai001a(void); -bool ai001c(void); -bool ai0027(void); -bool ai002a(void); -bool ai002b(void); -bool ai002c(void); -bool ai002d(void); -bool ai002e(void); -bool ai003c(void); -bool ai003d(void); -bool ai0040(void); -bool ai0041(void); -bool ai0043(void); -bool ai0045(void); -bool ai0047(void); -bool ai0048(void); -bool ai0049(void); -bool ai004a(void); -bool ai004b(void); -bool ai004c(void); -bool ai004d(void); -bool ai004e(void); -bool ai004f(void); -bool ai0050(void); -bool ai0051(void); -bool ai0058(void); -bool ai005b(void); -bool ai0060(void); -bool ai0061(void); -bool ai0063(void); -bool ai0065(void); -bool ai0066(void); -bool ai0067(void); -bool ai0068(void); -bool ai0069(void); -bool ai006a(void); -bool ai006b(void); -bool ai0070(void); -bool ai0071(void); -bool ai0072(void); -bool ai0073(void); -bool ai0074(void); -bool ai0075(void); -bool ai0076(void); -bool ai007d(void); -bool ai007e(void); -bool ai007f(void); -bool ai0080(void); -bool ai0081(void); -bool ai0082(void); -bool ai0083(void); -bool ai0091(void); -bool ai0096(void); -bool ai0097(void); -bool ai009d(void); -bool ai00b5(void); -bool ai00bc(void); -bool ai00bd(void); -bool ai00c6(void); -bool ai00c7(void); -bool ai00c8(void); -bool ai00c9(void); -bool ai00ca(void); -bool ai00cd(void); -bool ai00ce(void); -bool ai00cf(void); -bool ai00d0(void); -bool ai00d1(void); -bool ai00d2(void); -bool ai00d4(void); -bool ai00d5(void); -bool ai00d6(void); -bool ai00d7(void); -bool ai00d8(void); -bool ai00d9(void); -bool ai00db(void); -bool ai00dc(void); -bool ai00dd(void); -bool ai00de(void); -bool ai00df(void); -bool ai00e2(void); -bool ai00e3(void); -bool ai00e4(void); -bool ai00e5(void); -bool ai00e9(void); -bool ai00ea(void); -bool ai00ee(void); -bool ai00f0(void); -bool ai00f1(void); -bool ai00f2(void); -bool ai00f4(void); -bool ai00f5(void); -bool ai00f6(void); -bool ai00f8(void); -bool ai00fd(void); -bool ai00fe(void); -bool ai00ff(void); -bool ai0100(void); -bool ai0101(void); -bool ai0102(void); -bool ai0103(void); -bool ai0104(void); -bool ai0105(void); -bool ai0106(void); -bool ai0108(void); -bool ai0109(void); -bool ai010a(void); -bool ai010c(void); -bool ai010d(void); -bool ai010e(void); -bool ai010f(void); -bool ai0110(void); -bool ai0111(void); -bool ai0112(void); -bool ai011e(void); -bool ai011f(void); -bool ai0120(void); -bool ai0121(void); -bool ai0122(void); -bool ai0123(void); -bool ai0124(void); -bool ai0125(void); -bool ai0126(void); -bool ai0127(void); -bool ai0128(void); -bool ai0129(void); -bool ai012a(void); -bool ai012b(void); -bool ai012c(void); -bool ai012f(void); -bool ai0130(void); -bool ai0131(void); -bool ai0133(void); -bool ai0134(void); -bool ai0136(void); -bool ai0137(void); -bool ai0139(void); -bool ai013a(void); -bool ai013c(void); -bool ai013d(void); -bool ai013e(void); -bool ai013f(void); -bool ai0140(void); -bool ai0142(void); -bool ai0143(void); -bool ai0144(void); -bool ai0147(void); -bool ai0149(void); -bool ai014a(void); -bool ai0152(void); -bool ai0168(void); -bool ai016b(void); -bool ai016c(void); -bool ai016e(void); -bool ai0170(void); -bool ai0171(void); -bool ai0172(void); -bool ai0175(void); -bool ai0177(void); -bool ai0178(void); -bool ai0179(void); -bool ai017a(void); -bool ai017c(void); -bool ai0181(void); -bool ai0183(void); -bool ai0184(void); -bool ai0187(void); -bool ai0189(void); -bool ai018a(void); -bool ai018e(void); -bool ai018f(void); -bool ai01a2(void); -bool ai01a3(void); -bool ai01a5(void); -bool ai01a6(void); -bool ai01aa(void); -bool ai01ae(void); -bool ai01b1(void); -bool ai01b2(void); -bool ai01b3(void); -bool ai01b4(void); -bool ai01b5(void); -bool ai01b7(void); -bool ai01b9(void); -bool ai01ba(void); -bool ai01bb(void); -bool ai01bc(void); -bool ai01bd(void); -bool ai01bf(void); -bool ai01c0(void); -bool ai01c5(void); -bool ai01c8(void); -bool ai01c9(void); -bool ai01ca(void); -bool ai01cc(void); -bool ai01cd(void); -bool ai01ce(void); -bool ai01cf(void); -bool ai01d0(void); -bool ai01d3(void); -bool ai01d4(void); -bool ai01d6(void); -bool ai01d7(void); -bool ai01d8(void); -bool ai01d9(void); -bool ai01da(void); -bool ai01dd(void); -bool ai01de(void); -bool ai01e0(void); -bool aiActivateAlarm(void); -bool aiActivateLift(void); -bool aiAddAlertness(void); -bool aiAddMorale(void); -bool aiAimAndFire1(void); -bool aiAimAndFire2(void); -bool aiAudioMuteChannel(void); -bool aiAudioPlayMusic(void); -bool aiAudioPlayXMusic(void); -bool aiAudioRestartDefaultMusic(void); -bool aiAudioRestartMusic(void); -bool aiAudioRestartSfx(void); -bool aiAudioSetMusicTrack(void); -bool aiAudioSetSfxTrack(void); -bool aiAudioStopChannel(void); -bool aiChrAddAlertness(void); -bool aiChrAddMorale(void); -bool aiChrAdjustMotionBlur(void); -bool aiChrCopyPadPreset(void); -bool aiChrCopyProperties(void); -bool aiChrDrawWeapon(void); -bool aiChrDrawWeaponInCutscene(void); -bool aiChrEmitSparks(void); -bool aiChrExplosions(void); -bool aiChrGrabObject(void); -bool aiChrKill(void); -bool aiChrSetChrflag(void); -bool aiChrSetFlag(void); -bool aiChrSetHiddenFlag(void); -bool aiChrSetInvincible(void); -bool aiChrSetListening(void); -bool aiChrSetPadPreset(void); -bool aiChrSetTeam(void); -bool aiChrToggleProp(void); -bool aiChrUnsetChrflag(void); -bool aiChrUnsetFlag(void); -bool aiChrUnsetHiddenFlag(void); -bool aiCloseDoor(void); -bool aiConfigureRain(void); -bool aiConfigureSnow(void); -bool aiConsiderGrenadeThrow(void); -bool aiDeactivateAlarm(void); -bool aiEepromSet(void); -bool aiEepromUnset(void); -bool aiEndList(void); -bool aiFaceEntity(void); -bool aiFadeOut(void); -bool aiFadeScreen(void); -bool aiGoToFirst(void); -bool aiGoToNext(void); -bool aiGoToPadPreset(void); -bool aiGrantControl(void); -bool aiHideChr(void); -bool aiHideCountdownTimer(void); -bool aiHideObj(void); -bool aiHopSideways(void); -bool aiHovercopterFireRocket(void); -bool aiIfAction(void); -bool aiIfAlarmActive(void); -bool aiIfAlarmInactive(void); -bool aiIfAlertness(void); -bool aiIfAlertnessLessThanRandom(void); -bool aiIfAllObjectivesComplete(void); -bool aiIfChannelIdle(void); -bool aiIfChrAlarmActivate(void); -bool aiIfChrAlertnessLessThan(void); -bool aiIfChrAmmoQuantityLessThan(void); -bool aiIfChrDeathAnimationFinished(void); -bool aiIfChrDistanceToPadGreaterThan(void); -bool aiIfChrDistanceToPadLessThan(void); -bool aiIfChrDying(void); -bool aiIfChrHasChrflag(void); -bool aiIfChrHasFlag(void); -bool aiIfChrHasGun(void); -bool aiIfChrHasHiddenFlag(void); -bool aiIfChrHasObject(void); -bool aiIfChrInjured(void); -bool aiIfChrPropsoundcountZero(void); -bool aiIfChrSameFloorDistanceToPadLessThan(void); -bool aiIfChrUnloaded(void); -bool aiIfChrWeaponEquipped(void); -bool aiIfCountdownTimerGreaterThan(void); -bool aiIfCountdownTimerLessThan(void); -bool aiIfCountdownTimerStopped(void); -bool aiIfCutsceneButtonPressed(void); -bool aiIfDifficultyGreaterThan(void); -bool aiIfDifficultyLessThan(void); -bool aiIfDistanceFromTargetToPadGreaterThan(void); -bool aiIfDistanceFromTargetToPadLessThan(void); -bool aiIfDistanceToChrGreaterThan(void); -bool aiIfDistanceToChrLessThan(void); -bool aiIfDistanceToTargetGreaterThan(void); -bool aiIfDistanceToTargetLessThan(void); -bool aiIfDoorState(void); -bool aiIfEepromSet(void); -bool aiIfEepromUnset(void); -bool aiIfHasChrflag(void); -bool aiIfHasOrders(void); -bool aiIfIdle(void); -bool aiIfInCutscene(void); -bool aiIfInLoadedRoom(void); -bool aiIfKillCountGreaterThan(void); -bool aiIfLiftStationary(void); -bool aiIfMoraleLessThan(void); -bool aiIfMoraleLessThanRandom(void); -bool aiIfNaturalAnim(void); -bool aiIfNeverBeenOnScreen(void); -bool aiIfNotListening(void); -bool aiIfNumKnockedOutChrs(void); -bool aiIfObjHasFlag(void); -bool aiIfObjHasFlag2(void); -bool aiIfObjHasFlag3(void); -bool aiIfObjHealthLessThan(void); -bool aiIfObjInRoom(void); -bool aiIfObjectHealthy(void); -bool aiIfObjectIsDoor(void); -bool aiIfPathStarted(void); -bool aiIfPlayerInSight(void); -bool aiIfPresetsTargetIsNotMyTarget(void); -bool aiIfRandomGreaterThan(void); -bool aiIfRandomLessThan(void); -bool aiIfSawDeath(void); -bool aiIfSeesPlayer(void); -bool aiIfShotAtCloseRange(void); -bool aiIfSoundTimer(void); -bool aiIfStageFlagEq(void); -bool aiIfStageIdGreaterThan(void); -bool aiIfStageIdLessThan(void); -bool aiIfStopped(void); -bool aiIfTargetInRoom(void); -bool aiIfTimerGreaterThanRandom(void); -bool aiIfTimerStopped(void); -bool aiIfUptimeGreaterThan(void); -bool aiIfUptimeLessThan(void); -bool aiIfWeaponThrown(void); -bool aiIfWeaponThrownOnObject(void); -bool aiIfY(void); -bool aiJogToChr(void); -bool aiJogToPad(void); -bool aiKneel(void); -bool aiKneelAndFire(void); -bool aiLabel(void); -bool aiMessage(void); -bool aiOpenDoor(void); -bool aiPauseTimer(void); -bool aiPunchOrKick(void); -bool aiRandom(void); -bool aiRebuildSquadrons(void); -bool aiRebuildTeams(void); -bool aiReleaseObject(void); -bool aiRemoveChr(void); -bool aiRemoveWeaponFromInventory(void); -bool aiResetTimer(void); -bool aiRestartTimer(void); -bool aiResumeTimer(void); -bool aiReturn(void); -bool aiRevokeControl(void); -bool aiRollAndFire(void); -bool aiRunAndFire(void); -bool aiRunSideways(void); -bool aiRunToChr(void); -bool aiRunToPad(void); -bool aiSetAccuracy(void); -bool aiSetAction(void); -bool aiSetAlertness(void); -bool aiSetAutogunType(void); -bool aiSetChrNum(void); -bool aiSetChrPreset(void); -bool aiSetChrSpecialDeathAnimation(void); -bool aiSetChrTarget(void); -bool aiSetChrflag(void); -bool aiSetCountdownTimerValue(void); -bool aiSetDarkRoomList(void); -bool aiSetDodgeRating(void); -bool aiSetDoorClosed(void); -bool aiSetFlag(void); -bool aiSetGrenadeProbability(void); -bool aiSetHearDistance(void); -bool aiSetList(void); -bool aiSetMorale(void); -bool aiSetObjFlag(void); -bool aiSetObjFlag2(void); -bool aiSetObjFlag3(void); -bool aiSetObjHealth(void); -bool aiSetObjImage(void); -bool aiSetObjPartVisible(void); -bool aiSetPadPreset(void); -bool aiSetPath(void); -bool aiSetPlayerDeadList(void); -bool aiSetPunchDodgeList(void); -bool aiSetReactionSpeed(void); -bool aiSetRecoverySpeed(void); -bool aiSetReturnList(void); -bool aiSetRoomToSearch(void); -bool aiSetShootingAtMeList(void); -bool aiSetSquadron(void); -bool aiSetStageFlag(void); -bool aiSetTintedGlassEnabled(void); -bool aiSetUnarmedDodgeRating(void); -bool aiSetViewDistance(void); -bool aiShowChr(void); -bool aiShowCountdownTimer(void); -bool aiShowCutsceneChrs(void); -bool aiShowObj(void); -bool aiShowText(void); -bool aiShowText2(void); -bool aiShuffleInvestigationTerminals(void); -bool aiStartCountdownTimer(void); -bool aiStartPath(void); -bool aiStepSideways(void); -bool aiStop(void); -bool aiStopCountdownTimer(void); -bool aiSubtractAlertness(void); -bool aiSubtractMorale(void); -bool aiSurrender(void); -bool aiUnsetChrflag(void); -bool aiUnsetFlag(void); -bool aiUnsetObjFlag(void); -bool aiUnsetObjFlag2(void); -bool aiUnsetObjFlag3(void); -bool aiUnsetStageFlag(void); -bool aiWalkAndFire(void); -bool aiWalkToChr(void); -bool aiWalkToPad(void); -bool aiYield(void); struct chrdata *chrFindById(struct chrdata *data, u32 chrnum); struct chrdata *chrFindByLiteralId(u8 chrnum); float chrGetDistanceFromTargetToPad(struct chrdata *chr, s32 pad_id); @@ -811,8 +372,8 @@ u32 func0f04a1ac(struct chrdata *chr, u32 arg1); bool func0f04a2b4(struct chrdata *chr); u32 func0f04a2d4(void); u32 func0f04a37c(void); -u32 func0f04a4ec(void); -u32 func0f04a674(void); +u32 func0f04a4ec(struct chrdata *chr, s32 arg1); +u32 func0f04a674(struct chrdata *chr, s32 arg1); bool func0f04a76c(struct chrdata *chr, float distance); bool func0f04a79c(u8 chrnum, struct chrdata *chr, float distance); u32 func0f04a7dc(void);