<feed xmlns='http://www.w3.org/2005/Atom'>
<title>botw/src/Game/Actor/Area/Action, branch master</title>
<subtitle>Decompilation of The Legend of Zelda: Breath of the Wild (Switch v1.5.0)</subtitle>
<link rel='alternate' type='text/html' href='https://git.dog6.net/botw/'/>
<entry>
<title>Move code to the TUs that match link order and rename files</title>
<updated>2026-10-12T23:53:08+00:00</updated>
<author>
<name>Léo Lam</name>
<email>leo@leolam.fr</email>
</author>
<published>2026-09-28T01:39:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/botw/commit/?id=fa2b8b7d4738e5ee098fc105adc60e10356dd410'/>
<id>fa2b8b7d4738e5ee098fc105adc60e10356dd410</id>
<content type='text'>
Rename classes and files so that they sort where their code is linked,
and move code that is linked inside another TU into that TU's file.

| Old | New | TU start |
|---|---|---|
| ActorAreaInOutSendMessage | AreaInOutSendMessage | 0x710009fa64 |
| AreaTagAction | AreaActionBase | 0x7100e21e64 |
| sndResource.{h,cpp} | sndSound.{h,cpp} | |

| Code | From | To |
|---|---|---|
| SoundMgr | sndMgr.h | sndSound.h |
| PlayReport | PlayReportMgr.cpp | PlayReport.cpp |
| PlayReport::addPlayTimes, addPosition | PlayReportMgr.cpp | ProductReporter.cpp |

(AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Rename classes and files so that they sort where their code is linked,
and move code that is linked inside another TU into that TU's file.

| Old | New | TU start |
|---|---|---|
| ActorAreaInOutSendMessage | AreaInOutSendMessage | 0x710009fa64 |
| AreaTagAction | AreaActionBase | 0x7100e21e64 |
| sndResource.{h,cpp} | sndSound.{h,cpp} | |

| Code | From | To |
|---|---|---|
| SoundMgr | sndMgr.h | sndSound.h |
| PlayReport | PlayReportMgr.cpp | PlayReport.cpp |
| PlayReport::addPlayTimes, addPosition | PlayReportMgr.cpp | ProductReporter.cpp |

(AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
</pre>
</div>
</content>
</entry>
<entry>
<title>Action: rename 56 base classes to fit link order</title>
<updated>2026-10-08T01:04:40+00:00</updated>
<author>
<name>Léo Lam</name>
<email>leo@leolam.fr</email>
</author>
<published>2026-09-28T01:39:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/botw/commit/?id=950e78e940c8a35001c70d8da60dd6c17fd2f2d8'/>
<id>950e78e940c8a35001c70d8da60dd6c17fd2f2d8</id>
<content type='text'>
Action TUs link in case-insensitive file-name order, so a guessed base
name that does not sort into the slot where the class's TU sits is wrong.
Each new name sorts between the neighbouring TUs below and is coined from
the class's params, derived classes and code.

| Old | New | Links between | TU start |
|---|---|---|---|
| GiantAttackWithAS | AttackWithAS | AttackPartBind – AvoidingCloseMoveActionBase | 0x71000adf4c |
| BattleCloseMoveActionBase | AvoidingCloseMoveActionBase | AttackWithAS – AvoidingCloseMoveBase | 0x71000ae354 |
| ForbidTag | BasicSignalForbidTag | BasicSignalEnemyNotice – BattleCloseDangerAvoidRun | 0x71000ba90c |
| NeckSpinBeam | BeamNeckSpin | BeamMove – NeckSpin | 0x71000c1eb8 |
| PlayerStoleOpenBase | BindPlayerNodeBase | BindParentAction – BindPlayerNodeEx | 0x71000c6300 |
| PlayerStoleOpenEx | BindPlayerNodeEx | BindPlayerNodeBase – BirdEscape | 0x71000c68a8 |
| KokkoCreateDropBase | CreateDropBase | CreateAndReplaceAssassin – CreateEpona | 0x71000e3500 |
| MoveToTargetCurveBase | CurveMoveToTargetBase | CreateObjectsOfOwnedHorse – DamagedTurn | 0x71000e4f8c |
| ApplyDamageForPlayer | DemoApplyDamageBase | DeletePorchItemIncludeEquip – DemoApplyDamageForPlayer | 0x71000e78fc |
| WarpPlayerBase | DestPlayerWarpBase | DemoVisibleOn – DestPointMoveBase | 0x71000ec7c8 |
| RailMoveBase | DestPointMoveBase | DestPlayerWarpBase – DgnObj_DLC_CogWheel_Rotate | 0x71000ecff8 |
| ChuchuDissappearEscapeBase | DisappearAndEscapeBase | DisableAutoSavePausing – DisappearDeathCounter | 0x71000f04b4 |
| AttackPowerExplode | EitherSideExplode | EatWithAS – ElectricAttack | 0x7100102b3c |
| EnemyFortressChatTurnBase | EnemyFortressChatLookBase | EnemyFortressChatCall – EnemyFortressChatSpeak | 0x7100107860 |
| HornUseBase | EquipHornUseBase | EquipedWithScale – Escape | 0x71001131f4 |
| EventHoverNullASPlayBase | EventNullASPlayBase | EventMiniGameTimerWrite – EventOpenGetDemo | 0x710011c8c8 |
| FireWoodBase | FireBurnBase | FallAttack – FireWood | 0x710012d258 |
| AreaFireObserveBase | FireObserveBase | AreaRecreateActorAction – OwnedHorseObserveAction (Area) | 0x7100e23d88 |
| FlyingCharacterDamageBase | FlyingActorDamageBase | FlowingDust – FlyingCharacterFreeFallBase | 0x7100130748 |
| ForkDynActorNoTargetSelfBase | ForkEndByConditionBase | ForkEmitShockWaveByContact – ForkEndByDistance | 0x71001503b0 |
| ForkSimpleGrabBase | ForkGrabBase | ForkGolemMaterialASPlay – ForkGravityScaleChange | 0x71001579b8 |
| ForkHoverKeepRotateTurnBase | ForkKeepRotateTurn | ForkJumpToTargetOnDownEnd – ForkKnockBackNoRot | 0x7100159c08 |
| ForkEmitChmField | ForkTrgEmitChmFieldBase | ForkTimerForceResetCondition – ForkTurnASHold | 0x7100167ea0 |
| ChuchuPreAttackBase | GelJumpBase | GelEnemySystemHideChase – GelJumpTackle | 0x71001806dc |
| GiantEnemyWalkWithVibration | GiantEnemyMoveWithVibration | GiantDownSwingAttack – GiantEnemyWalk | 0x71001892d4 |
| GiantNavMeshWalkWithVibration | GiantNavMeshMoveWithVibration | GiantHandClapToTarget – GiantNavMeshWalk | 0x7100189c64 |
| GuardianMoveTo | GuardianActionBase | GuardBreak – GuardianAimBeam | 0x71001926f4 |
| AnimalFollowBase | HorseFollowBase | HorseFollow – HorseFreeze | 0x71001a082c |
| HorseRide | HorseRideBase | HorseRideAttack – HorseRideCancelCommand | 0x71001ad7ac |
| HorseRideCommandBase | HorseRideOneTimeCommandBase | HorseRideOneTimeASPlay – HorseRideOneTimeViewASPlay | 0x71001aff3c |
| OctarockReloadWigBase | IgniteActorReloadBase | IceBroken – IgnitedThrown | 0x71001b5258 |
| TakeHitImpactForce | KnockBackHitImpactForce | Kick* – KokkoCreateDrop* | 0x71001c9268 |
| SiteBossSwordWhirlSlashChargeBase | LastBossSwordWhirlSlashChargeBase | LastBossStun – LastBossThunderAppear | 0x71001d8210 |
| Move2HomePosBase | MoveHomePosBase | MoveByAnimeDrivenToTarget – MoveKeyFramed | 0x71001ea488 |
| MultiVacuumRotScaleTimeByDistWithTgtBase | MultiVacuumBase | Msg2CameraResetNoConnect – MultiVacuumRotBase | 0x71001edb88 |
| MultiVacuumRotScaleTimeByDistWithTgt | MultiVacuumRotBase | MultiVacuumBase – MultiVacuumRotScaleTimeByDist | 0x71001eec0c |
| NavMeshAction | NavMeshMoveBase | NavMeshLiftWalk – NavMeshMoveWithAS | 0x71001f0518 |
| BackWalkEx | NormalBackWalk | NoDeleteCurrentActor – Notice | 0x71001f2f78 |
| GiantOneHandActionWithLegTurn | OneHandActionWithLegTurn | OnCorrect – OnEnterSwapActorBase | 0x7100211194 |
| ForkOnEnterSwapDropTableActorBase | OnEnterSwapActorBase | OneHandActionWithLegTurn – OnEnterSwapDropTable | 0x71002117ec |
| ForkOnEnterSwapDropTableActor | OnEnterSwapDropTable | OnEnterSwapActorBase – OnEnterSwapDropTableActor | 0x7100211d0c |
| RegistedActorDeadCheckBase | RegistedActorAllDeadCheckBase | ReflectThrown – RegistedActorBroadCastMessage | 0x7100229a34 |
| RegistedActorActionBase | RegistedActorSetActionBase | RegistedActorDeadCheck – ReloadArrow | 0x710022a3a8 |
| SendPlayerNoticeMessageBase | SendNoticeMessageBase | SendMessageBroadCast – SendPlayerNoticeMessage | 0x7100243cf0 |
| SendMessageToTargetActor | SendTargetActorMessageBase | SendSignalForSignalFlowAct – SendTargetActorRequestShareAwn | 0x710024487c |
| SideWalkBase | SideMoveBase | ShutterOpenWait – SideStep | 0x71002525a0 |
| SimpleGrabWithASBase | SimpleGrabBase | SilentKilled – SimpleGrabWithAS | 0x71002544d4 |
| KnockBackShock | SimpleKnockBackShock | SimpleGrabWithAS – SimpleLineBeam | 0x7100254ac8 |
| SlippedCircleWalkBase | SlippedCircleMoveBase | SlippedBackWalkBase – SlippedCircleWalk | 0x710026fe88 |
| SlippedWalkBase | SlippedMoveBase | SlippedCircleWalk – SlippedWalk | 0x7100270b68 |
| ActionWithPosAngReduce | StopBase | StopASPlay – StopCliffTongueAttack | 0x710027e328 |
| AttackBase | StoppingAttackBase | StopOnObj – StorePlayerPosAndRotate | 0x7100280554 |
| SwimEnemyAnmBackBlownOffBase | SwimEnemyBlownOffBase | SwimEnemyAnmBackBlownOffToPL – SwimGetUp | 0x71002890d0 |
| LookAtObjectBase | TurnAndLookToObjBase | TurnAndLookAtToObjectNow – TurnAndLookToObject | 0x710029e794 |
| GiantAttack | TurnGiantAttack | TurnBase – TurnIgnite | 0x71002a1738 |
| WillBallAction | WillBallBase | WillBallAvoidCenterDist – WillBallParabolaAttack | 0x71002bb4ec |

\* The nearest correctly placed neighbour; the TUs in between are still
misnamed.

(AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Action TUs link in case-insensitive file-name order, so a guessed base
name that does not sort into the slot where the class's TU sits is wrong.
Each new name sorts between the neighbouring TUs below and is coined from
the class's params, derived classes and code.

| Old | New | Links between | TU start |
|---|---|---|---|
| GiantAttackWithAS | AttackWithAS | AttackPartBind – AvoidingCloseMoveActionBase | 0x71000adf4c |
| BattleCloseMoveActionBase | AvoidingCloseMoveActionBase | AttackWithAS – AvoidingCloseMoveBase | 0x71000ae354 |
| ForbidTag | BasicSignalForbidTag | BasicSignalEnemyNotice – BattleCloseDangerAvoidRun | 0x71000ba90c |
| NeckSpinBeam | BeamNeckSpin | BeamMove – NeckSpin | 0x71000c1eb8 |
| PlayerStoleOpenBase | BindPlayerNodeBase | BindParentAction – BindPlayerNodeEx | 0x71000c6300 |
| PlayerStoleOpenEx | BindPlayerNodeEx | BindPlayerNodeBase – BirdEscape | 0x71000c68a8 |
| KokkoCreateDropBase | CreateDropBase | CreateAndReplaceAssassin – CreateEpona | 0x71000e3500 |
| MoveToTargetCurveBase | CurveMoveToTargetBase | CreateObjectsOfOwnedHorse – DamagedTurn | 0x71000e4f8c |
| ApplyDamageForPlayer | DemoApplyDamageBase | DeletePorchItemIncludeEquip – DemoApplyDamageForPlayer | 0x71000e78fc |
| WarpPlayerBase | DestPlayerWarpBase | DemoVisibleOn – DestPointMoveBase | 0x71000ec7c8 |
| RailMoveBase | DestPointMoveBase | DestPlayerWarpBase – DgnObj_DLC_CogWheel_Rotate | 0x71000ecff8 |
| ChuchuDissappearEscapeBase | DisappearAndEscapeBase | DisableAutoSavePausing – DisappearDeathCounter | 0x71000f04b4 |
| AttackPowerExplode | EitherSideExplode | EatWithAS – ElectricAttack | 0x7100102b3c |
| EnemyFortressChatTurnBase | EnemyFortressChatLookBase | EnemyFortressChatCall – EnemyFortressChatSpeak | 0x7100107860 |
| HornUseBase | EquipHornUseBase | EquipedWithScale – Escape | 0x71001131f4 |
| EventHoverNullASPlayBase | EventNullASPlayBase | EventMiniGameTimerWrite – EventOpenGetDemo | 0x710011c8c8 |
| FireWoodBase | FireBurnBase | FallAttack – FireWood | 0x710012d258 |
| AreaFireObserveBase | FireObserveBase | AreaRecreateActorAction – OwnedHorseObserveAction (Area) | 0x7100e23d88 |
| FlyingCharacterDamageBase | FlyingActorDamageBase | FlowingDust – FlyingCharacterFreeFallBase | 0x7100130748 |
| ForkDynActorNoTargetSelfBase | ForkEndByConditionBase | ForkEmitShockWaveByContact – ForkEndByDistance | 0x71001503b0 |
| ForkSimpleGrabBase | ForkGrabBase | ForkGolemMaterialASPlay – ForkGravityScaleChange | 0x71001579b8 |
| ForkHoverKeepRotateTurnBase | ForkKeepRotateTurn | ForkJumpToTargetOnDownEnd – ForkKnockBackNoRot | 0x7100159c08 |
| ForkEmitChmField | ForkTrgEmitChmFieldBase | ForkTimerForceResetCondition – ForkTurnASHold | 0x7100167ea0 |
| ChuchuPreAttackBase | GelJumpBase | GelEnemySystemHideChase – GelJumpTackle | 0x71001806dc |
| GiantEnemyWalkWithVibration | GiantEnemyMoveWithVibration | GiantDownSwingAttack – GiantEnemyWalk | 0x71001892d4 |
| GiantNavMeshWalkWithVibration | GiantNavMeshMoveWithVibration | GiantHandClapToTarget – GiantNavMeshWalk | 0x7100189c64 |
| GuardianMoveTo | GuardianActionBase | GuardBreak – GuardianAimBeam | 0x71001926f4 |
| AnimalFollowBase | HorseFollowBase | HorseFollow – HorseFreeze | 0x71001a082c |
| HorseRide | HorseRideBase | HorseRideAttack – HorseRideCancelCommand | 0x71001ad7ac |
| HorseRideCommandBase | HorseRideOneTimeCommandBase | HorseRideOneTimeASPlay – HorseRideOneTimeViewASPlay | 0x71001aff3c |
| OctarockReloadWigBase | IgniteActorReloadBase | IceBroken – IgnitedThrown | 0x71001b5258 |
| TakeHitImpactForce | KnockBackHitImpactForce | Kick* – KokkoCreateDrop* | 0x71001c9268 |
| SiteBossSwordWhirlSlashChargeBase | LastBossSwordWhirlSlashChargeBase | LastBossStun – LastBossThunderAppear | 0x71001d8210 |
| Move2HomePosBase | MoveHomePosBase | MoveByAnimeDrivenToTarget – MoveKeyFramed | 0x71001ea488 |
| MultiVacuumRotScaleTimeByDistWithTgtBase | MultiVacuumBase | Msg2CameraResetNoConnect – MultiVacuumRotBase | 0x71001edb88 |
| MultiVacuumRotScaleTimeByDistWithTgt | MultiVacuumRotBase | MultiVacuumBase – MultiVacuumRotScaleTimeByDist | 0x71001eec0c |
| NavMeshAction | NavMeshMoveBase | NavMeshLiftWalk – NavMeshMoveWithAS | 0x71001f0518 |
| BackWalkEx | NormalBackWalk | NoDeleteCurrentActor – Notice | 0x71001f2f78 |
| GiantOneHandActionWithLegTurn | OneHandActionWithLegTurn | OnCorrect – OnEnterSwapActorBase | 0x7100211194 |
| ForkOnEnterSwapDropTableActorBase | OnEnterSwapActorBase | OneHandActionWithLegTurn – OnEnterSwapDropTable | 0x71002117ec |
| ForkOnEnterSwapDropTableActor | OnEnterSwapDropTable | OnEnterSwapActorBase – OnEnterSwapDropTableActor | 0x7100211d0c |
| RegistedActorDeadCheckBase | RegistedActorAllDeadCheckBase | ReflectThrown – RegistedActorBroadCastMessage | 0x7100229a34 |
| RegistedActorActionBase | RegistedActorSetActionBase | RegistedActorDeadCheck – ReloadArrow | 0x710022a3a8 |
| SendPlayerNoticeMessageBase | SendNoticeMessageBase | SendMessageBroadCast – SendPlayerNoticeMessage | 0x7100243cf0 |
| SendMessageToTargetActor | SendTargetActorMessageBase | SendSignalForSignalFlowAct – SendTargetActorRequestShareAwn | 0x710024487c |
| SideWalkBase | SideMoveBase | ShutterOpenWait – SideStep | 0x71002525a0 |
| SimpleGrabWithASBase | SimpleGrabBase | SilentKilled – SimpleGrabWithAS | 0x71002544d4 |
| KnockBackShock | SimpleKnockBackShock | SimpleGrabWithAS – SimpleLineBeam | 0x7100254ac8 |
| SlippedCircleWalkBase | SlippedCircleMoveBase | SlippedBackWalkBase – SlippedCircleWalk | 0x710026fe88 |
| SlippedWalkBase | SlippedMoveBase | SlippedCircleWalk – SlippedWalk | 0x7100270b68 |
| ActionWithPosAngReduce | StopBase | StopASPlay – StopCliffTongueAttack | 0x710027e328 |
| AttackBase | StoppingAttackBase | StopOnObj – StorePlayerPosAndRotate | 0x7100280554 |
| SwimEnemyAnmBackBlownOffBase | SwimEnemyBlownOffBase | SwimEnemyAnmBackBlownOffToPL – SwimGetUp | 0x71002890d0 |
| LookAtObjectBase | TurnAndLookToObjBase | TurnAndLookAtToObjectNow – TurnAndLookToObject | 0x710029e794 |
| GiantAttack | TurnGiantAttack | TurnBase – TurnIgnite | 0x71002a1738 |
| WillBallAction | WillBallBase | WillBallAvoidCenterDist – WillBallParabolaAttack | 0x71002bb4ec |

\* The nearest correctly placed neighbour; the TUs in between are still
misnamed.

(AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
</pre>
</div>
</content>
</entry>
<entry>
<title>Actor: move all AI code under Game/Actor</title>
<updated>2026-09-13T22:02:22+00:00</updated>
<author>
<name>Léo Lam</name>
<email>leo@leolam.fr</email>
</author>
<published>2026-09-13T22:02:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/botw/commit/?id=f4cd38c43b436fe91def1a1b0b3dfe0134369870'/>
<id>f4cd38c43b436fe91def1a1b0b3dfe0134369870</id>
<content type='text'>
Link order shows one sorted actor tree, not a separate AI project: the
Action/AI/Query folders and per-feature folders (Camera, Player, Horse,
...) come out of the same archive rounds as the actor classes.

(AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Link order shows one sorted actor tree, not a separate AI project: the
Action/AI/Query folders and per-feature folders (Camera, Player, Horse,
...) come out of the same archive rounds as the actor classes.

(AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
</pre>
</div>
</content>
</entry>
</feed>
