forked from Ports/goldeneye-pc-port
Park D309/D310/D311 session evidence logs + referenced diagnostics in scratch/
- Probe logs preserved as evidence: pre-fix standing-still guard lines, v1 Trevelyan regression (local-list embedded PRINT strings), clean post-fix Caverns run (global PRINTs size=1/global=1 hit once each incl. the D309 spin record; local PRINTs NUL-scanned with valid landings; zero LABEL-NOT-FOUND / D156 / watchdog lines), D311 freeze watchdog+stack dump. - D309/D310 diagnostic files referenced by findings.md: frozen thread stacks, live m_RunToBondPersistent byte dump, AI-list decoders (original NUL-scan + fixed global-only sizing), command name table.
This commit is contained in:
1 parent
c67479866c
commit
ce05ae7187
9 files changed
+5867
No files matched your search
@@ -0,0 +1,549 @@
|
||||
#include <stdio.h>
|
||||
#include "aicommands2.h"
|
||||
extern u8 m_RunToBondPersistent[];
|
||||
s32 chraiitemsize(u8 *AIList, s32 offset)
|
||||
{
|
||||
// matches only as u8* despite text evidence of ai->val structs
|
||||
switch (AIList[offset])
|
||||
{
|
||||
// Cant Use CMD Builder due to different order...
|
||||
#if defined(USECMDBUILDER)
|
||||
#ifndef _SYNHILITE
|
||||
#define _AI_CMD(CMD) /* \
|
||||
*/ \
|
||||
case CAT(AI_, CMDNAME): /* \
|
||||
*/ \
|
||||
return CAT(CAT(AI_, CMDNAME), _LENGTH);
|
||||
#define _AI_DEBUG()
|
||||
#define _AI_CMD_POLYMORPH(CMD, A, P, Q, D)
|
||||
#define DEFINE(x)
|
||||
#include <aicommands.def>
|
||||
#endif
|
||||
#endif
|
||||
case AI_GotoNext:
|
||||
return sizeof(AiGotoNextRecord);
|
||||
case AI_GotoFirst:
|
||||
return sizeof(AiGotoFirstRecord);
|
||||
case AI_Label:
|
||||
return sizeof(AiLabelRecord);
|
||||
case AI_Yield:
|
||||
return sizeof(AiYieldRecord);
|
||||
case AI_EndList:
|
||||
return sizeof(AiEndListRecord);
|
||||
case AI_SetChrAiList:
|
||||
return sizeof(AiSetChrAiListRecord);
|
||||
case AI_SetReturnAiList:
|
||||
return sizeof(AiSetReturnAiListRecord);
|
||||
case AI_Return:
|
||||
return sizeof(AiReturnRecord);
|
||||
case AI_Stop:
|
||||
return sizeof(AiStopRecord);
|
||||
case AI_Kneel:
|
||||
return sizeof(AiKneelRecord);
|
||||
case AI_PlayAnimation:
|
||||
return sizeof(AiPlayAnimationRecord);
|
||||
case AI_IFPlayingAnimation:
|
||||
return sizeof(AiIFPlayingAnimationRecord);
|
||||
case AI_PointAtBond:
|
||||
return sizeof(AiPointAtBondRecord);
|
||||
case AI_LookSurprised:
|
||||
return sizeof(AiLookSurprisedRecord);
|
||||
case AI_TRYSidestepping:
|
||||
return sizeof(AiTRYSidesteppingRecord);
|
||||
case AI_TRYSideHopping:
|
||||
return sizeof(AiTRYSideHoppingRecord);
|
||||
case AI_TRYSideRunning:
|
||||
return sizeof(AiTRYSideRunningRecord);
|
||||
case AI_TRYFiringWalk:
|
||||
return sizeof(AiTRYFiringWalkRecord);
|
||||
case AI_TRYFiringRun:
|
||||
return sizeof(AiTRYFiringRunRecord);
|
||||
case AI_TRYFiringRoll:
|
||||
return sizeof(AiTRYFiringRollRecord);
|
||||
case AI_TRYFireOrAimAtTarget:
|
||||
return sizeof(AiTRYFireOrAimAtTargetRecord);
|
||||
case AI_TRYFireOrAimAtTargetKneel:
|
||||
return sizeof(AiTRYFireOrAimAtTargetKneelRecord);
|
||||
case AI_IFImFiring: /* enum = 232 despite following enum = 21 in the list */
|
||||
return sizeof(AiIFImFiringRecord);
|
||||
case AI_IFImFiringAndLockedForward: /* enum = 231 despite being followed by enum = 22 in the list */
|
||||
return sizeof(AiIFImFiringAndLockedForwardRecord);
|
||||
case AI_TRYFireOrAimAtTargetUpdate:
|
||||
return sizeof(AiTRYFireOrAimAtTargetUpdateRecord);
|
||||
case AI_TRYFacingTarget:
|
||||
return sizeof(AiTRYFacingTargetRecord);
|
||||
case AI_HitChrWithItem:
|
||||
return sizeof(AiHitChrWithItemRecord);
|
||||
case AI_ChrHitChr:
|
||||
return sizeof(AiChrHitChrRecord);
|
||||
case AI_TRYThrowingGrenade:
|
||||
return sizeof(AiTRYThrowingGrenadeRecord);
|
||||
case AI_TRYDroppingItem:
|
||||
return sizeof(AiTRYDroppingItemRecord);
|
||||
case AI_RunToPad:
|
||||
return sizeof(AiRunToPadRecord);
|
||||
case AI_RunToPadPreset:
|
||||
return sizeof(AiRunToPadPresetRecord);
|
||||
case AI_WalkToPad:
|
||||
return sizeof(AiWalkToPadRecord);
|
||||
case AI_SprintToPad:
|
||||
return sizeof(AiSprintToPadRecord);
|
||||
case AI_StartPatrol:
|
||||
return sizeof(AiStartPatrolRecord);
|
||||
case AI_Surrender:
|
||||
return sizeof(AiSurrenderRecord);
|
||||
case AI_RemoveMe:
|
||||
return sizeof(AiRemoveMeRecord);
|
||||
case AI_ChrRemoveInstant:
|
||||
return sizeof(AiChrRemoveInstantRecord);
|
||||
case AI_TRYTriggeringAlarmAtPad:
|
||||
return sizeof(AiTRYTriggeringAlarmAtPadRecord);
|
||||
case AI_AlarmOn:
|
||||
return sizeof(AiAlarmOnRecord);
|
||||
case AI_AlarmOff:
|
||||
return sizeof(AiAlarmOffRecord);
|
||||
case AI_TRYRunFromBond:
|
||||
return sizeof(AiTRYRunFromBondRecord);
|
||||
case AI_TRYRunToBond:
|
||||
return sizeof(AiTRYRunToBondRecord);
|
||||
case AI_TRYWalkToBond:
|
||||
return sizeof(AiTRYWalkToBondRecord);
|
||||
case AI_TRYSprintToBond:
|
||||
return sizeof(AiTRYSprintToBondRecord);
|
||||
case AI_TRYFindCover:
|
||||
return sizeof(AiTRYFindCoverRecord);
|
||||
case AI_TRYRunToChr:
|
||||
return sizeof(AiTRYRunToChrRecord);
|
||||
case AI_TRYWalkToChr:
|
||||
return sizeof(AiTRYWalkToChrRecord);
|
||||
case AI_TRYSprintToChr:
|
||||
return sizeof(AiTRYSprintToChrRecord);
|
||||
case AI_IFImOnPatrolOrStopped:
|
||||
return sizeof(AiIFImOnPatrolOrStoppedRecord);
|
||||
case AI_IFChrDyingOrDead:
|
||||
return sizeof(AiIFChrDyingOrDeadRecord);
|
||||
case AI_IFChrDoesNotExist:
|
||||
return sizeof(AiIFChrDoesNotExistRecord);
|
||||
case AI_IFISeeBond:
|
||||
return sizeof(AiIFISeeBondRecord);
|
||||
case AI_SetNewRandom:
|
||||
return sizeof(AiSetNewRandomRecord);
|
||||
case AI_IFRandomLessThan:
|
||||
return sizeof(AiIFRandomLessThanRecord);
|
||||
case AI_IFRandomGreaterThan:
|
||||
return sizeof(AiIFRandomGreaterThanRecord);
|
||||
case AI_IFICanHearAlarm:
|
||||
return sizeof(AiIFICanHearAlarmRecord);
|
||||
case AI_IFAlarmIsOn:
|
||||
return sizeof(AiIFAlarmIsOnRecord);
|
||||
case AI_IFGasIsLeaking:
|
||||
return sizeof(AiIFGasIsLeakingRecord);
|
||||
case AI_IFIHeardBond:
|
||||
return sizeof(AiIFIHeardBondRecord);
|
||||
case AI_IFISeeSomeoneShot:
|
||||
return sizeof(AiIFISeeSomeoneShotRecord);
|
||||
case AI_IFISeeSomeoneDie:
|
||||
return sizeof(AiIFISeeSomeoneDieRecord);
|
||||
case AI_IFICouldSeeBond:
|
||||
return sizeof(AiIFICouldSeeBondRecord);
|
||||
case AI_IFICouldSeeBondsStan:
|
||||
return sizeof(AiIFICouldSeeBondsStanRecord);
|
||||
case AI_IFIWasShotRecently:
|
||||
return sizeof(AiIFIWasShotRecentlyRecord);
|
||||
case AI_IFIHeardBondRecently:
|
||||
return sizeof(AiIFIHeardBondRecentlyRecord);
|
||||
case AI_IFImInRoomWithChr:
|
||||
return sizeof(AiIFImInRoomWithChrRecord);
|
||||
case AI_IFIveNotBeenSeen:
|
||||
return sizeof(AiIFIveNotBeenSeenRecord);
|
||||
case AI_IFImOnScreen:
|
||||
return sizeof(AiIFImOnScreenRecord);
|
||||
case AI_IFMyRoomIsOnScreen:
|
||||
return sizeof(AiIFMyRoomIsOnScreenRecord);
|
||||
case AI_IFRoomWithPadIsOnScreen:
|
||||
return sizeof(AiIFRoomWithPadIsOnScreenRecord);
|
||||
case AI_IFImTargetedByBond:
|
||||
return sizeof(AiIFImTargetedByBondRecord);
|
||||
case AI_IFBondMissedMe:
|
||||
return sizeof(AiIFBondMissedMeRecord);
|
||||
case AI_IFMyAngleToBondLessThan:
|
||||
return sizeof(AiIFMyAngleToBondLessThanRecord);
|
||||
case AI_IFMyAngleToBondGreaterThan:
|
||||
return sizeof(AiIFMyAngleToBondGreaterThanRecord);
|
||||
case AI_IFMyAngleFromBondLessThan:
|
||||
return sizeof(AiIFMyAngleFromBondLessThanRecord);
|
||||
case AI_IFMyAngleFromBondGreaterThan:
|
||||
return sizeof(AiIFMyAngleFromBondGreaterThanRecord);
|
||||
case AI_IFMyDistanceToBondLessThanDecimeter:
|
||||
return sizeof(AiIFMyDistanceToBondLessThanDecimeterRecord);
|
||||
case AI_IFMyDistanceToBondGreaterThanDecimeter:
|
||||
return sizeof(AiIFMyDistanceToBondGreaterThanDecimeterRecord);
|
||||
case AI_IFChrDistanceToPadLessThanDecimeter:
|
||||
return sizeof(AiIFChrDistanceToPadLessThanDecimeterRecord);
|
||||
case AI_IFChrDistanceToPadGreaterThanDecimeter:
|
||||
return sizeof(AiIFChrDistanceToPadGreaterThanDecimeterRecord);
|
||||
case AI_IFMyDistanceToChrLessThanDecimeter:
|
||||
return sizeof(AiIFMyDistanceToChrLessThanDecimeterRecord);
|
||||
case AI_IFMyDistanceToChrGreaterThanDecimeter:
|
||||
return sizeof(AiIFMyDistanceToChrGreaterThanDecimeterRecord);
|
||||
case AI_TRYSettingMyPresetToChrWithinDistanceDecimeter:
|
||||
return sizeof(AiTRYSettingMyPresetToChrWithinDistanceDecimeterRecord);
|
||||
case AI_IFBondDistanceToPadLessThanDecimeter:
|
||||
return sizeof(AiIFBondDistanceToPadLessThanDecimeterRecord);
|
||||
case AI_IFBondDistanceToPadGreaterThanDecimeter:
|
||||
return sizeof(AiIFBondDistanceToPadGreaterThanDecimeterRecord);
|
||||
case AI_IFChrInRoomWithPad:
|
||||
return sizeof(AiIFChrInRoomWithPadRecord);
|
||||
case AI_IFBondInRoomWithPad:
|
||||
return sizeof(AiIFBondInRoomWithPadRecord);
|
||||
case AI_IFBondCollectedObject:
|
||||
return sizeof(AiIFBondCollectedObjectRecord);
|
||||
case AI_IFKeyDropped:
|
||||
return sizeof(AiIFKeyDroppedRecord);
|
||||
case AI_IFItemIsAttachedToObject:
|
||||
return sizeof(AiIFItemIsAttachedToObjectRecord);
|
||||
case AI_IFBondHasItemEquipped:
|
||||
return sizeof(AiIFBondHasItemEquippedRecord);
|
||||
case AI_IFObjectExists:
|
||||
return sizeof(AiIFObjectExistsRecord);
|
||||
case AI_IFObjectNotDestroyed:
|
||||
return sizeof(AiIFObjectNotDestroyedRecord);
|
||||
case AI_IFObjectWasActivated:
|
||||
return sizeof(AiIFObjectWasActivatedRecord);
|
||||
case AI_IFBondUsedGadgetOnObject:
|
||||
return sizeof(AiIFBondUsedGadgetOnObjectRecord);
|
||||
case AI_ActivateObject:
|
||||
return sizeof(AiActivateObjectRecord);
|
||||
case AI_DestroyObject:
|
||||
return sizeof(AiDestroyObjectRecord);
|
||||
case AI_DropObject:
|
||||
return sizeof(AiDropObjectRecord);
|
||||
case AI_ChrDropAllConcealedItems:
|
||||
return sizeof(AiChrDropAllConcealedItemsRecord);
|
||||
case AI_ChrDropAllHeldItems:
|
||||
return sizeof(AiChrDropAllHeldItemsRecord);
|
||||
case AI_BondCollectObject:
|
||||
return sizeof(AiBondCollectObjectRecord);
|
||||
case AI_ChrEquipObject:
|
||||
return sizeof(AiChrEquipObjectRecord);
|
||||
case AI_MoveObject:
|
||||
return sizeof(AiMoveObjectRecord);
|
||||
case AI_DoorOpen:
|
||||
return sizeof(AiDoorOpenRecord);
|
||||
case AI_DoorClose:
|
||||
return sizeof(AiDoorCloseRecord);
|
||||
case AI_IFDoorStateEqual:
|
||||
return sizeof(AiIFDoorStateEqualRecord);
|
||||
case AI_IFDoorHasBeenOpenedBefore:
|
||||
return sizeof(AiIFDoorHasBeenOpenedBeforeRecord);
|
||||
case AI_DoorSetLock:
|
||||
return sizeof(AiDoorSetLockRecord);
|
||||
case AI_DoorUnsetLock:
|
||||
return sizeof(AiDoorUnsetLockRecord);
|
||||
case AI_IFDoorLockEqual:
|
||||
return sizeof(AiIFDoorLockEqualRecord);
|
||||
case AI_IFObjectiveNumComplete:
|
||||
return sizeof(AiIFObjectiveNumCompleteRecord);
|
||||
case AI_TRYUnknown6e:
|
||||
return sizeof(AiTRYUnknown6eRecord);
|
||||
case AI_TRYUnknown6f:
|
||||
return sizeof(AiTRYUnknown6fRecord);
|
||||
case AI_IFGameDifficultyLessThan:
|
||||
return sizeof(AiIFGameDifficultyLessThanRecord);
|
||||
case AI_IFGameDifficultyGreaterThan:
|
||||
return sizeof(AiIFGameDifficultyGreaterThanRecord);
|
||||
case AI_IFMissionTimeLessThan:
|
||||
return sizeof(AiIFMissionTimeLessThanRecord);
|
||||
case AI_IFMissionTimeGreaterThan:
|
||||
return sizeof(AiIFMissionTimeGreaterThanRecord);
|
||||
case AI_IFSystemPowerTimeLessThan:
|
||||
return sizeof(AiIFSystemPowerTimeLessThanRecord);
|
||||
case AI_IFSystemPowerTimeGreaterThan:
|
||||
return sizeof(AiIFSystemPowerTimeGreaterThanRecord);
|
||||
case AI_IFLevelIdLessThan:
|
||||
return sizeof(AiIFLevelIdLessThanRecord);
|
||||
case AI_IFLevelIdGreaterThan:
|
||||
return sizeof(AiIFLevelIdGreaterThanRecord);
|
||||
case AI_IFMyNumArghsLessThan:
|
||||
return sizeof(AiIFMyNumArghsLessThanRecord);
|
||||
case AI_IFMyNumArghsGreaterThan:
|
||||
return sizeof(AiIFMyNumArghsGreaterThanRecord);
|
||||
case AI_IFMyNumCloseArghsLessThan:
|
||||
return sizeof(AiIFMyNumCloseArghsLessThanRecord);
|
||||
case AI_IFMyNumCloseArghsGreaterThan:
|
||||
return sizeof(AiIFMyNumCloseArghsGreaterThanRecord);
|
||||
case AI_IFChrHealthLessThan:
|
||||
return sizeof(AiIFChrHealthLessThanRecord);
|
||||
case AI_IFChrHealthGreaterThan:
|
||||
return sizeof(AiIFChrHealthGreaterThanRecord);
|
||||
case AI_IFChrWasDamagedSinceLastCheck:
|
||||
return sizeof(AiIFChrWasDamagedSinceLastCheckRecord);
|
||||
case AI_IFBondHealthLessThan:
|
||||
return sizeof(AiIFBondHealthLessThanRecord);
|
||||
case AI_IFBondHealthGreaterThan:
|
||||
return sizeof(AiIFBondHealthGreaterThanRecord);
|
||||
case AI_SetMyMorale:
|
||||
return sizeof(AiSetMyMoraleRecord);
|
||||
case AI_AddToMyMorale:
|
||||
return sizeof(AiAddToMyMoraleRecord);
|
||||
case AI_SubtractFromMyMorale:
|
||||
return sizeof(AiSubtractFromMyMoraleRecord);
|
||||
case AI_IFMyMoraleLessThan:
|
||||
return sizeof(AiIFMyMoraleLessThanRecord);
|
||||
case AI_IFMyMoraleLessThanRandom:
|
||||
return sizeof(AiIFMyMoraleLessThanRandomRecord);
|
||||
case AI_SetMyAlertness:
|
||||
return sizeof(AiSetMyAlertnessRecord);
|
||||
case AI_AddToMyAlertness:
|
||||
return sizeof(AiAddToMyAlertnessRecord);
|
||||
case AI_SubtractFromMyAlertness:
|
||||
return sizeof(AiSubtractFromMyAlertnessRecord);
|
||||
case AI_IFMyAlertnessLessThan:
|
||||
return sizeof(AiIFMyAlertnessLessThanRecord);
|
||||
case AI_IFMyAlertnessLessThanRandom:
|
||||
return sizeof(AiIFMyAlertnessLessThanRandomRecord);
|
||||
case AI_SetMyHearingScale:
|
||||
return sizeof(AiSetMyHearingScaleRecord);
|
||||
case AI_SetMyVisionRange:
|
||||
return sizeof(AiSetMyVisionRangeRecord);
|
||||
case AI_SetMyGrenadeProbability:
|
||||
return sizeof(AiSetMyGrenadeProbabilityRecord);
|
||||
case AI_SetMyChrNum:
|
||||
return sizeof(AiSetMyChrNumRecord);
|
||||
case AI_SetMyHealthTotal:
|
||||
return sizeof(AiSetMyHealthTotalRecord);
|
||||
case AI_SetMyArmour:
|
||||
return sizeof(AiSetMyArmourRecord);
|
||||
case AI_SetMySpeedRating:
|
||||
return sizeof(AiSetMySpeedRatingRecord);
|
||||
case AI_SetMyArghRating:
|
||||
return sizeof(AiSetMyArghRatingRecord);
|
||||
case AI_SetMyAccuracyRating:
|
||||
return sizeof(AiSetMyAccuracyRatingRecord);
|
||||
case AI_SetMyFlags2:
|
||||
return sizeof(AiSetMyFlags2Record);
|
||||
case AI_UnsetMyFlags2:
|
||||
return sizeof(AiUnsetMyFlags2Record);
|
||||
case AI_IFMyFlags2Has:
|
||||
return sizeof(AiIFMyFlags2HasRecord);
|
||||
case AI_SetChrBitfield:
|
||||
return sizeof(AiSetChrBitfieldRecord);
|
||||
case AI_UnsetChrBitfield:
|
||||
return sizeof(AiUnsetChrBitfieldRecord);
|
||||
case AI_IFChrBitfieldHas:
|
||||
return sizeof(AiIFChrBitfieldHasRecord);
|
||||
case AI_SetObjectiveBitfield:
|
||||
return sizeof(AiSetObjectiveBitfieldRecord);
|
||||
case AI_UnsetObjectiveBitfield:
|
||||
return sizeof(AiUnsetObjectiveBitfieldRecord);
|
||||
case AI_IFObjectiveBitfieldHas:
|
||||
return sizeof(AiIFObjectiveBitfieldHasRecord);
|
||||
case AI_SetMychrflags:
|
||||
return sizeof(AiSetMychrflagsRecord);
|
||||
case AI_UnsetMychrflags:
|
||||
return sizeof(AiUnsetMychrflagsRecord);
|
||||
case AI_IFMychrflagsHas:
|
||||
return sizeof(AiIFMychrflagsHasRecord);
|
||||
case AI_SetChrchrflags:
|
||||
return sizeof(AiSetChrchrflagsRecord);
|
||||
case AI_UnsetChrchrflags:
|
||||
return sizeof(AiUnsetChrchrflagsRecord);
|
||||
case AI_IFChrchrflagsHas:
|
||||
return sizeof(AiIFChrchrflagsHasRecord);
|
||||
case AI_SetObjectFlags:
|
||||
return sizeof(AiSetObjectFlagsRecord);
|
||||
case AI_UnsetObjectFlags:
|
||||
return sizeof(AiUnsetObjectFlagsRecord);
|
||||
case AI_IFObjectFlagsHas:
|
||||
return sizeof(AiIFObjectFlagsHasRecord);
|
||||
case AI_SetObjectFlags2:
|
||||
return sizeof(AiSetObjectFlags2Record);
|
||||
case AI_UnsetObjectFlags2:
|
||||
return sizeof(AiUnsetObjectFlags2Record);
|
||||
case AI_IFObjectFlags2Has:
|
||||
return sizeof(AiIFObjectFlags2HasRecord);
|
||||
case AI_SetMyChrPreset:
|
||||
return sizeof(AiSetMyChrPresetRecord);
|
||||
case AI_SetChrChrPreset:
|
||||
return sizeof(AiSetChrChrPresetRecord);
|
||||
case AI_SetMyPadPreset:
|
||||
return sizeof(AiSetMyPadPresetRecord);
|
||||
case AI_SetChrPadPreset:
|
||||
return sizeof(AiSetChrPadPresetRecord);
|
||||
case AI_MyTimerStart:
|
||||
return sizeof(AiMyTimerStartRecord);
|
||||
case AI_MyTimerReset:
|
||||
return sizeof(AiMyTimerResetRecord);
|
||||
case AI_MyTimerPause:
|
||||
return sizeof(AiMyTimerPauseRecord);
|
||||
case AI_MyTimerResume:
|
||||
return sizeof(AiMyTimerResumeRecord);
|
||||
case AI_IFMyTimerIsNotRunning:
|
||||
return sizeof(AiIFMyTimerIsNotRunningRecord);
|
||||
case AI_IFMyTimerLessThanTicks:
|
||||
return sizeof(AiIFMyTimerLessThanTicksRecord);
|
||||
case AI_IFMyTimerGreaterThanTicks:
|
||||
return sizeof(AiIFMyTimerGreaterThanTicksRecord);
|
||||
case AI_HudCountdownShow:
|
||||
return sizeof(AiHudCountdownShowRecord);
|
||||
case AI_HudCountdownHide:
|
||||
return sizeof(AiHudCountdownHideRecord);
|
||||
case AI_HudCountdownSet:
|
||||
return sizeof(AiHudCountdownSetRecord);
|
||||
case AI_HudCountdownStop:
|
||||
return sizeof(AiHudCountdownStopRecord);
|
||||
case AI_HudCountdownStart:
|
||||
return sizeof(AiHudCountdownStartRecord);
|
||||
case AI_IFHudCountdownIsNotRunning:
|
||||
return sizeof(AiIFHudCountdownIsNotRunningRecord);
|
||||
case AI_IFHudCountdownLessThan:
|
||||
return sizeof(AiIFHudCountdownLessThanRecord);
|
||||
case AI_IFHudCountdownGreaterThan:
|
||||
return sizeof(AiIFHudCountdownGreaterThanRecord);
|
||||
case AI_TRYSpawningChrAtPad:
|
||||
return sizeof(AiTRYSpawningChrAtPadRecord);
|
||||
case AI_TRYSpawningChrNextToChr:
|
||||
return sizeof(AiTRYSpawningChrNextToChrRecord);
|
||||
case AI_TRYGiveMeItem:
|
||||
return sizeof(AiTRYGiveMeItemRecord);
|
||||
case AI_TRYGiveMeHat:
|
||||
return sizeof(AiTRYGiveMeHatRecord);
|
||||
case AI_TRYCloningChr:
|
||||
return sizeof(AiTRYCloningChrRecord);
|
||||
case AI_TextPrintBottom:
|
||||
return sizeof(AiTextPrintBottomRecord);
|
||||
case AI_TextPrintTop:
|
||||
return sizeof(AiTextPrintTopRecord);
|
||||
case AI_SfxPlay:
|
||||
return sizeof(AiSfxPlayRecord);
|
||||
case AI_SfxEmitFromObject:
|
||||
return sizeof(AiSfxEmitFromObjectRecord);
|
||||
case AI_SfxEmitFromPad:
|
||||
return sizeof(AiSfxEmitFromPadRecord);
|
||||
case AI_SfxSetChannelVolume:
|
||||
return sizeof(AiSfxSetChannelVolumeRecord);
|
||||
case AI_SfxFadeChannelVolume:
|
||||
return sizeof(AiSfxFadeChannelVolumeRecord);
|
||||
case AI_SfxStopChannel:
|
||||
return sizeof(AiSfxStopChannelRecord);
|
||||
case AI_IFSfxChannelVolumeLessThan:
|
||||
return sizeof(AiIFSfxChannelVolumeLessThanRecord);
|
||||
case AI_VehicleStartPath:
|
||||
return sizeof(AiVehicleStartPathRecord);
|
||||
case AI_VehicleSpeed:
|
||||
return sizeof(AiVehicleSpeedRecord);
|
||||
case AI_AircraftRotorSpeed:
|
||||
return sizeof(AiAircraftRotorSpeedRecord);
|
||||
case AI_IFCameraIsInIntro:
|
||||
return sizeof(AiIFCameraIsInIntroRecord);
|
||||
case AI_IFCameraIsInBondSwirl:
|
||||
return sizeof(AiIFCameraIsInBondSwirlRecord);
|
||||
case AI_TvChangeScreenBank:
|
||||
return sizeof(AiTvChangeScreenBankRecord);
|
||||
case AI_IFBondInTank:
|
||||
return sizeof(AiIFBondInTankRecord);
|
||||
case AI_EndLevel:
|
||||
return sizeof(AiEndLevelRecord);
|
||||
case AI_CameraReturnToBond:
|
||||
return sizeof(AiCameraReturnToBondRecord);
|
||||
case AI_CameraLookAtBondFromPad:
|
||||
return sizeof(AiCameraLookAtBondFromPadRecord);
|
||||
case AI_CameraSwitch:
|
||||
return sizeof(AiCameraSwitchRecord);
|
||||
case AI_IFBondYPosLessThan:
|
||||
return sizeof(AiIFBondYPosLessThanRecord);
|
||||
case AI_BondDisableControl:
|
||||
return sizeof(AiBondDisableControlRecord);
|
||||
case AI_BondEnableControl:
|
||||
return sizeof(AiBondEnableControlRecord);
|
||||
case AI_TRYTeleportingChrToPad:
|
||||
return sizeof(AiTRYTeleportingChrToPadRecord);
|
||||
case AI_ScreenFadeToBlack:
|
||||
return sizeof(AiScreenFadeToBlackRecord);
|
||||
case AI_ScreenFadeFromBlack:
|
||||
return sizeof(AiScreenFadeFromBlackRecord);
|
||||
case AI_IFScreenFadeCompleted:
|
||||
return sizeof(AiIFScreenFadeCompletedRecord);
|
||||
case AI_HideAllChrs:
|
||||
return sizeof(AiHideAllChrsRecord);
|
||||
case AI_ShowAllChrs:
|
||||
return sizeof(AiShowAllChrsRecord);
|
||||
case AI_DoorOpenInstant:
|
||||
return sizeof(AiDoorOpenInstantRecord);
|
||||
case AI_ChrRemoveItemInHand:
|
||||
return sizeof(AiChrRemoveItemInHandRecord);
|
||||
case AI_IfNumberOfActivePlayersLessThan:
|
||||
return sizeof(AiIfNumberOfActivePlayersLessThanRecord);
|
||||
case AI_IFBondItemTotalAmmoLessThan:
|
||||
return sizeof(AiIFBondItemTotalAmmoLessThanRecord);
|
||||
case AI_BondEquipItem:
|
||||
return sizeof(AiBondEquipItemRecord);
|
||||
case AI_BondEquipItemCinema:
|
||||
return sizeof(AiBondEquipItemCinemaRecord);
|
||||
case AI_BondSetLockedVelocity:
|
||||
return sizeof(AiBondSetLockedVelocityRecord);
|
||||
case AI_IFObjectInRoomWithPad:
|
||||
return sizeof(AiIFObjectInRoomWithPadRecord);
|
||||
case AI_SwitchSky:
|
||||
return sizeof(AiSwitchSkyRecord);
|
||||
case AI_TriggerFadeAndExitLevelOnButtonPress:
|
||||
return sizeof(AiTriggerFadeAndExitLevelOnButtonPressRecord);
|
||||
case AI_IFBondIsDead:
|
||||
return sizeof(AiIFBondIsDeadRecord);
|
||||
case AI_BondDisableDamageAndPickups:
|
||||
return sizeof(AiBondDisableDamageAndPickupsRecord);
|
||||
case AI_BondHideWeapons:
|
||||
return sizeof(AiBondHideWeaponsRecord);
|
||||
case AI_CameraOrbitPad:
|
||||
return sizeof(AiCameraOrbitPadRecord);
|
||||
case AI_CreditsRoll:
|
||||
return sizeof(AiCreditsRollRecord);
|
||||
case AI_IFCreditsHasCompleted:
|
||||
return sizeof(AiIFCreditsHasCompletedRecord);
|
||||
case AI_IFObjectiveAllCompleted:
|
||||
return sizeof(AiIFObjectiveAllCompletedRecord);
|
||||
case AI_IFFolderActorIsEqual:
|
||||
return sizeof(AiIFFolderActorIsEqualRecord);
|
||||
case AI_IFBondDamageAndPickupsDisabled:
|
||||
return sizeof(AiIFBondDamageAndPickupsDisabledRecord);
|
||||
case AI_MusicPlaySlot:
|
||||
return sizeof(AiMusicPlaySlotRecord);
|
||||
case AI_MusicStopSlot:
|
||||
return sizeof(AiMusicStopSlotRecord);
|
||||
case AI_TriggerExplosionsAroundBond:
|
||||
return sizeof(AiTriggerExplosionsAroundBondRecord);
|
||||
case AI_IFKilledCiviliansGreaterThan:
|
||||
return sizeof(AiIFKilledCiviliansGreaterThanRecord);
|
||||
case AI_IFChrWasShotSinceLastCheck:
|
||||
return sizeof(AiIFChrWasShotSinceLastCheckRecord);
|
||||
case AI_BondKilledInAction:
|
||||
return sizeof(AiBondKilledInActionRecord);
|
||||
case AI_RaiseArms:
|
||||
return sizeof(AiRaiseArmsRecord);
|
||||
case AI_GasLeakAndFadeFog:
|
||||
return sizeof(AiGasLeakAndFadeFogRecord);
|
||||
case AI_ObjectRocketLaunch:
|
||||
return sizeof(AiObjectRocketLaunchRecord);
|
||||
case AI_PRINT:
|
||||
return 1; /* D309 candidate fix: PRINT is a 1-byte no-op record */
|
||||
default:
|
||||
#if defined(ENABLE_LOG)
|
||||
osSyncPrintf("chraiitemsize: unknown type %d!\n", *AIList);
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
int main(void){
|
||||
s32 off = 0;
|
||||
while (1) {
|
||||
s32 sz = chraiitemsize(m_RunToBondPersistent, off);
|
||||
if (sz <= 0 || off + sz > 512) { printf("!! bad size %d at +%d\n", sz, off); break; }
|
||||
unsigned cmd = m_RunToBondPersistent[off];
|
||||
if (cmd == AI_EndList) { printf("+%-4d ENDLIST (size %d)\n", off, sz); break; }
|
||||
printf("+%-4d cmd=%-3u ", off, cmd);
|
||||
for (int i=1;i<sz;i++) printf("%02x ", m_RunToBondPersistent[off+i]);
|
||||
printf("\n");
|
||||
off += sz;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Reference in new issue
Block a user