Commit Graph

878 Commits

Author SHA1 Message Date
Léo Lam 38905c8c07 AutoPlacement is game code: move it to Game/
It is created only from game code, no engine code calls it, and it
hardcodes game actor names.

(AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-06 03:19:38 +02:00
Léo Lam 4a6239bbbf ksys: small declaration fixes
setCamera's only caller passes the camera actor, a ksys::act::Actor;
ksys::act::Camera is only forward-declared.

(AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-06 03:19:38 +02:00
Léo Lam d8da4fc5f2 Actor: PlayerInfo/PlayerBase are game, GameConfig ksys
Every decomp user of PlayerInfo is game code, and PlayerBase sits right
above Player. GameConfig.h models the engine base that
links at GameConfig's slot in KingSystem/System.

(AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-06 03:19:38 +02:00
Léo Lam 34e57daf61 AI: merge the duplicate DummyAction into ksys
The action factory uses the single ksys ctor for both entries and
DummyDropTable's ctor calls it too; deriving from it makes
DummyDropTable's five functions match.

(AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-06 03:19:38 +02:00
Léo Lam a168b93bbc snd: move sound actions and AIs to KingSystem/Sound
They link with KingSystem/Sound (0x7100fe8b54-0x7101060ed4) as sorted
Action/AI passes of their own. The three area tag actions keep their
game base AreaTagAction, which links in the Game/Actor/Area block.

(AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-06 03:19:38 +02:00
Léo Lam 7bc225838a Name placeholder declarations after the IDB
Keeps source and CSV from drifting from the IDB. Names are read from the
bodies, e.g. ActionBase::applyParams is what all 13 non-stub overrides
of that slot do.

(AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-06 03:19:37 +02:00
Léo Lam 891c0a8494 Merge pull request #216 from leoetlino/stack/03a-ai-base-renames
AI: rename misordered base classes
2026-10-06 01:57:14 +01:00
Flatener 9595c31c7f world: implement Manager::isRaining (#214)
* world: implement Manager::isRaining

Implement the position-based rain check for Rain, HeavyRain, ThunderRain,
and BlueskyRain. Declare the climate weather lookup dependency and name
both functions in the function table.

The rain check matches the original function at 0x71010f33a4.

* world: keep rainfall queries const

Restore const on Manager::isRaining and make its climate weather helper
const. Both queries only read Manager state. Update their function-table
symbols; the rain check still matches the original.
2026-10-05 11:09:41 -07:00
Léo Lam b12306210c AI: rename misordered base classes
AI and Action TUs link in case-insensitive file-name order, so a guessed
base name that breaks it is wrong. Each new name sorts into the slot
where the class's TU sits (neighbouring TUs and an address in the TU
below) and comes from the class's params, child states and derived
classes.

ai::

| Old | New | Links between | In TU |
|---|---|---|---|
| AddViewTargetPosBase | AddViewTarget | AddSwarmMove – AddViewTargetPos | 0x71002f9c68 |
| AncientNecklaceBallBase | PlayASSwitch | PipeDrawing – PlayerSetTarget | 0x71004f6a78 |
| AnimalRoamBase | AnimalRndMove | AnimalRangeKeepMoveWithLOS – AnimalRoam | 0x710030a6c0 |
| AppearNearTarget | AppearFromTarget | AnimalTimelineAI – AppearFromTargetFrontAfterChase | 0x710030d868 |
| AssassinFieldShooterBattleBase | AssassinShooterBattle | AssassinRoot – AssassinShooterJuniorAzitoRoot | 0x7100321dc4 |
| AssassinMagicTgtSelect | TargetHeightAreaSelect | TargetExistSelect – TargetHomeDir | 0x71005bef5c |
| AssassinNormal | GuardHomePosNormal | GuardFrequencySelect – GuardianAI | 0x710040cd68 |
| BeamExplodeBase | SimpleBeamExplode | SimpleASBridge – SimpleEnemyNormal | 0x710056c5fc |
| ChildFavoriteSelectorBase | ChildSelector | ChildHaveSelect – ChmCheck | 0x710034aad0 |
| DragonRootBase | ControlRailRoot | ConditionMoveActionSelect – CookPotRoot | 0x7100356664 |
| EnemyChemTargetActionBase | EnemyTargetAction | EnemySyncAttack – EnemyTargetGearSelect | 0x71003bf75c |
| FlyingEnemyKeepMove | FlyingEnemyDistanceKeepMove | FlyingEnemyDiagonallyKeepMove – FlyingEnemyFindPlayer | 0x71003d1694 |
| GoronCannonBase | BigCannon | BezierRailMove – BirdDead | 0x710032cd80 |
| GuardNearTarget | InvincibleNearTargetBase | InvincibleNearTarget – InvisibleKorokRailMove | 0x710044c6b8 |
| GuardianBeamAttackBase | GuardianCommonBeamAttack | GuardianCloseBattle – GuardianDown | 0x7100411da0 |
| HorseCheckLineOfSightSelectorBase | CheckLineOfSightSelector | ChaseSound – ChemicalEnemyFindPlayer | 0x7100346868 |
| LargeEnemyFindPlayer | GiantEnemyFindPlayer | GiantEarthReleaseAttack – GiantEscapeFromDamageWater | 0x71003f69c8 |
| MimicCliffStopEnemyNormalBase | CliffStopEnemyNormal | CliffDistanceSelectThreeAction – CloseSmallAttackBase | 0x71003522f4 |
| MiniBeamAttack | GuideBeamAttackEnemyBattle | GuardianWait – GyroActivateTerminal | 0x710042cae8 |
| MotorcycleRootBase | HorseRiddenStatusSelector | HorseRiddenByNPC – HorseRideChargeAttack | 0x710043ea88 |
| NPCTravelBase | NPCScheduleMove | NPCRunaway – NPCSearch | 0x71004df66c |
| NonPlayerHorseRide | RideHorseNonPlayer | RideHorseAI – WildHorseDefWanderAI (Horse) | 0x7100e60178 |
| OctarockEscape | OctarockHideEscapeBase | OctarockHideEscape – OctarockOptionRoot | 0x71004ec368 |
| OctarockRootBase | VacuumEnemyRoot | VacuumedBombDamageSelect – VehicleSelector | 0x71005e3348 |
| OneMemoryMagicBattleBase | MagicBattle | LynelWarp – MagneGearRoot | 0x710049d0d8 |
| PriestBossMode | PriestBoss | PreyStun – PriestBossActorCloneRoot | 0x7100505b7c |
| RailMove | BezierRailMove | BeeSwarmRoot – BigCannon | 0x710032bbf0 |
| RangeSelect | NewRangeSelect | NewMannequinRoot – NormalHumanEquipableShield | 0x71004bc0e8 |
| RegistedActorNumTwoSelectBase | RegistedActor | ReflectableThrown – RegistedActorNumTwoSelect | 0x710053dfcc |
| RemainElectricCannonRootBase | LargeCannonRoot | LargeCannonAttackRoot – LastAttackerSelect | 0x71004741e4 |
| SandwormNormalBase | AwnSeal | AwarenessScale – BackAttackEnemyBattle | 0x71003258b4 |
| SeqTwoLineReachableTargetActionBase | SeqTwoLineReachableTarget | SeqTwoAction – SeqTwoLineReachableTargetAction | 0x7100567460 |
| SimpleWildlifeRoot | CapturedActorRoot | CapturedActorReactionChemical – CarryBox | 0x7100342690 |
| SiteBossChemicalProjectile | GanonFlameBall | GanonFarAttackRootOnWall – GanonGrudgeNormal | 0x71003e996c |
| SiteBossRecognizeRootBase | LastBossRecognizeRoot | LastBossRailWarpRoot – LastBossRoot | 0x7100478930 |
| SpecialEnemySleep | SleepNormal | SleepBedRoot – SleepSelect | 0x710059a8c0 |
| TargetAttackAttitudeTgtSelectBase | TargetAttackAttitudeTgt | TargetAngerSelect – TargetAttackAttitudeTgtSelect | 0x71005bb3ac |
| TargetPosAI | TargetActorPos | TargetActorGrabAdapter – TargetAngerSelect | 0x71005bab4c |
| TargetPosDynParamRot | TargetPosDynParamRotFromMyPos | TargetPosDynParamRotFromCtrPos – TargetPosLostCheck | 0x71005c4f8c |
| TargetPosOffset | OffsetTargetPos | OctarockWaterWait – OnCliffEnemyBattle | 0x71004f16d8 |
| TimedGuardNearTarget | InvincibleNearTarget | InvincibleHiddenOctarock – InvincibleNearTargetBase | 0x710044c1a4 |
| UnarmedEnemySearch | NavMove | NavMeshTurnAwayFromHitPos – NavMoveNearTarget | 0x71004b5ec0 |
| UnarmedEnemySearchWeapon | EnemySearch | EnemyRoot – EnemySearchHorse | 0x71003b6460 |
| WholeDungeonRotateTag | DungeonRotateTagApp | DungeonRotateTag4WindApp – DungeonRotateTagCont | 0x7100379554 |

action::

| Old | New | Links between | In TU |
|---|---|---|---|
| AirOctaFloatBase | AirOctaMoveBase | AirOctaMgr – AirOctaNoticeTurn | 0x71000880f8 |
| AtkTackleMove | TackleAttack | SystemWarp – TackleMove | 0x71002910a4 |
| BasicSignalEnemy | BasicSignalEnemyNotice | BasicSignalEnemyForceNotice – BattleCloseDangerAvoidRun* | 0x71000ba65c |
| BattleCloseAction | AvoidingCloseMoveBase | AvoidingCloseMoveActionWithAcc – AwarenessShareOnePartsASPlay | 0x71000aed44 |
| BattleCloseActionWithAcc | AvoidingCloseMoveActionWithAcc | AttackPartBind – AvoidingCloseMoveBase* | 0x71000ae8ec |
| BattleCloseSlippedWalkBase | BattleCloseSlippedMoveBase | BattleCloseMoveAction – BattleCloseSlippedWalk | 0x71000becc8 |
| CameraLockOnBase | CameraTrackBase | CameraTail – CameraWakeboard (Camera) | 0x71007850e4 |
| ChargeAndShoot | ArrowChargeAndShoot | AreaRoot – ArrowShootHoming | 0x71000a17a4 |
| ChemicalAttack | EmitAttackBase | ElectricParalysis – EmitElectricWaterBall | 0x7100104f54 |
| ChemicalAttackBall | ChemicalAttack | CheckHorseCustomizeEdit – ChemicalElectricWaterBall | 0x71000db0e8 |
| FlyingCharacterReaction | FlyingCharacterFreeFallBase | FlyingCharacterFreeFall – FlyingCharacterFreeFallDie | 0x7100132590 |
| FollowChallenge | AppearFollowChallenge | AnimeDrivenTurn – AppearNumHeroSeal | 0x710004d0b4 |
| ForkASTrgEmitShockWave | ForkEmitShockWave | ForkEmitExpandFieldWithCreate – ForkEmitShockWaveByContact | 0x710014f188 |
| GolemThrowPartsToTargetBase | GolemThrowPartsBase | GolemRepairParts – GolemThrowPartsToTarget | 0x710018d678 |
| HorseRideMoveCommand | HorseRideSetGearCommand | HorseRideSearch – HorseRideShoot | 0x71001b0828 |
| OctarockBalloonBase | BalloonRopeBase | BalloonBase – BasicSignalBossAwakeSleep | 0x71000b8b9c |
| PlayerGlide | PlayerParashawlGlideBase | PlayerParashawlGlide – PlayerPickUp (Player) | 0x710080352c |
| PriestBossWarpOrVanish | PriestBossCloneFastWarp | PreJumpAttack – PriestBossClonesSpawn | 0x7100221304 |
| RotateTurnToTarget | ASPlayRotateTurnToTarget | AscendingCurrentFixedSize – ASPlaySimpleAnmDriven | 0x71000a7bec |
| SetGetFlagBase | SetFlag | SetExtraLifeOfPlayer – SetFrameASPlay | 0x7100247990 |
| SimpleMessageDialogCtrl | ForkBasicMessageDialogCtrl | ForkAttackWithWeaponOrWithout – ForkBattleNodeForAttackGround | 0x71001471cc |
| SiteBossBlowOff | LastBossBlowOff | LargeDamage – LastBossChemicalPillarAttack | 0x71001cf0ec |
| SiteBossLswordAtk | SiteBossLswordAttack | SiteBossLswordAtkWithChemical – SiteBossLswordFireBall | 0x710025c470 |
| WaitOnObjBase | StopOnObj | StopJump – StorePlayerPosAndRotate* | 0x710027f974 |
| WaterUpDownMoveBase | WaterDepthMoveBase | WarpToStaticAnchor – WaterEmitter | 0x71002b33cc |

Neighbours marked * are the nearest correctly placed TU; a TU that is
itself still misnamed sits in between.

(AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-04 23:40:26 +02:00
Léo Lam b9c6e58791 Remove the AI class status lists
Decompilation progress is tracked per function in uking_functions.csv
and on the kanban board. These per-class lists stopped being updated
long ago (20 of 1927 actions "done") and only cost upkeep on renames.

(AI assisted using Claude Opus 5.5)
2026-10-04 23:40:13 +02:00
Léo Lam 8b562cb791 gdt: rename IncreaseLogger to DeferredFlagWriter
It logs nothing: it queues flag increments per core and
GameDataMgr::calc0 applies them once per frame. The IDB already uses
this name.

(AI assisted using Claude Opus 5.5)
2026-10-04 06:50:36 +02:00
Léo Lam b0404a3630 data: fix O rows tools/check cannot tell apart
Each pair differs only in the vtable it installs or slot it fills, which
tools/check ignores. E.g. 0x7100b15bf4 installs FileDeviceReadStream's
vtable, and the ASAssetResource/ASAssetExResource D0 rows were swapped.

(AI assisted using Claude Opus 5.5)
2026-09-29 03:50:01 +02:00
Léo Lam a5fb0a1632 aoc: fix the HardMode flag name
The flag is "AoC_HardMode_Enabled", as 0x71008e3dbc returns; tools/check
ignores string literals, so the misspelling still matched.

(AI assisted using Claude Opus 5.5)
2026-09-29 03:50:00 +02:00
Pistonight 4eb51c96aa lib: update xlink2 2026-09-20 13:56:17 -07:00
Pistonight 21d20529a8 update libs 2026-09-20 13:03:47 -07:00
Michael Zhao 7c65472576 Merge pull request #185 from RobbyV2/phys-system-heap-accessors
Match phys::System heap accessors
2026-07-30 17:06:14 -07:00
Michael Zhao 4f1f92f132 Merge pull request #184 from RobbyV2/phys-system-contact-listeners
Match phys::System contact listener and group handler forwarders
2026-07-30 17:04:47 -07:00
Nitr4m12 31a894a4ff data: fix function sizes 2026-07-30 10:37:52 -04:00
RobbyV2 1e080b32eb phys: match System contact listener and group handler functions 2026-07-30 09:09:55 -04:00
RobbyV2 c6c8beaf58 phys: match System heap accessors 2026-07-30 09:07:17 -04:00
Michael Zhao cd3e7a9fbd Merge pull request #182 from RobbyV2/actor-get-character-controller
Match Actor::getCharacterController
2026-07-29 20:52:36 -07:00
Michael Zhao 4caa1241f3 Merge pull request #179 from Nitr4m12/symbols
data: add aal symbols
2026-07-29 20:49:22 -07:00
RobbyV2 ab0fe61df9 Match Actor::getCharacterController 2026-07-28 21:08:32 -04:00
Nitr4m12 7edfb11683 data: add aal symbols 2026-07-27 22:12:23 -04:00
mairokaizo c99e6cfe94 ksys::phys::System: implement isPaused and collision/handler helpers 2026-07-24 09:43:16 -03:00
Nitr4m12 5094381e62 lib: Add xlink2 decomp as submodule 2026-07-11 23:40:06 -04:00
root 003de4ab9f various: fix mismatches in some action stubs and ResourceMgrTask 2026-06-23 03:05:43 -06:00
Narr the Reg 9ee5f0e4c4 data: Fill symbols 2026-06-01 10:04:08 -06:00
Pistonight 3183601b59 fix new viking and update mismatches 2026-05-31 14:20:38 -07:00
Pistonight 2974a95d82 chore: update libs 2026-05-15 11:40:16 -07:00
Michael Zhao 5af715fc24 Merge pull request #163 from n8pjl/aiEnemyDefaultReaction__isChangeable
add function in aiEnemyDefaultReaction
2026-04-16 20:10:43 -07:00
Peter Lafreniere a50a58a759 add function in aiEnemyDefaultReaction 2026-04-16 12:02:45 -04:00
hgh32 276f32f366 match more ai::Query 2026-04-16 00:24:28 -04:00
auguste120 3a2c2b4e16 Implements gsys::MemBuffer 2026-04-03 21:25:25 +02:00
hgh32 007bdc90d6 Implement CheckE3Mode::doQuery 2026-03-04 23:01:47 -05:00
MonsterDruide1 d7d31865a2 lib: Update sead 2026-01-13 21:22:18 +01:00
Pistonight 7ed2356f34 chore: update libs 2025-09-29 18:59:24 -07:00
MonsterDruide1 f829734b79 lib: Update libraries 2025-07-27 21:30:15 +02:00
Pistonight 3d92031404 CreatePlayerEquipActorMgr 2025-06-19 12:18:30 -07:00
Pistonight 81feab300b merge BaseProcHandle and BaseProcUnit TU 2025-05-15 11:31:51 -07:00
Pistonight 316dc2d1a2 matched (thanks to TheGreatB3 :) 2025-05-04 16:45:33 -07:00
Pistonight cd19e8cd96 PauseMenuDataMgr createPlayerEquipment 2025-05-02 20:47:19 -07:00
Pistonight 56ef34dc6b match PMDM autoEquip and unequipAll 2025-05-02 20:26:00 -07:00
Pistonight c4d936d117 add gdt flag name constant getters 2025-05-02 20:21:28 -07:00
MonsterDruide1 9fc27d394a lib/sead: Update submodule 2025-03-30 22:58:28 +02:00
Pistonight 1f1fee5593 update data_symbols.csv 2025-03-06 17:51:01 -08:00
Pistonight 2363fbfe20 PlayerInfo stuff that doesn't require PlayerBase 2024-12-30 21:43:28 -08:00
Pistonight c4e0a55dd9 LayoutResourceMgr functions + update NintendoSDK. 2024-10-14 23:18:35 -07:00
ThePixelGamer 878f95dffb Update agl, nnSdk, sead 2024-08-28 07:41:29 -05:00
Léo Lam a196e0ca5a ksys/qst: match Manager::setQuestStep
I'm not a big fan of how the actual logic has to be inside the loop,
but unfortunately std::find_if doesn't match and it's clear that the
original version used iterators.
2024-04-23 22:30:20 +01:00