A LuaBackend script that brings Kingdom Hearts II's lock-on camera to Kingdom Hearts 1 (KH1 Final Mix, PC ports in KINGDOM HEARTS HD 1.5+2.5 ReMIX).
Kingdom Hearts 1's lock-on camera is a relic of 2002: the moment you lock on, the game takes the camera away from you completely. Kingdom Hearts 2 fixed this — you keep full camera control while locked on, and the game only steps in to keep the target framed. This mod brings that KH2 behavior to KH1.
While locked on, the right stick works exactly as if you weren't locked on at all. As long as your target is in frame, the mod does nothing and the camera is fully yours. When the target drifts toward the edge, an elastic pull gently swings the camera back — stronger the further it strays, with a hard limit so it can never fully leave the frame. On lock-on or target switch, the camera does a smooth snap to bring the target into view. The field of view also widens with target distance to keep Sora and the enemy on screen, and eases back in as you close.
Everything runs as data writes through LuaBackend — no game code is patched, and unlocking returns everything to normal.
- Full right-stick control during lock-on, exactly like KH2.
- Elastic target tracking — free control while the target is in frame, a proportional pull only when it drifts out, and a hard limit so it can never escape the screen.
- Smooth camera snap on lock-on and on target switch.
- Dynamic field of view that widens with target distance and eases back in. This includes everything a standalone FoV mod does.
- Configurable pitch tracking with its own, looser deadband.
- Automatic version detection with a built-in sanity check — on unverified versions the mod validates the memory values before writing anything and safely does nothing if they don't match, so it can never corrupt memory on an unsupported build.
- Pure data writes, safe to hot-reload, self-contained in one
.luafile.
Recommended: install through the OpenKH Mods Manager. This repo ships a mod.yml, so the manager treats it as a proper OpenKH Lua mod. See docs/INSTALL.md for the full walkthrough (including manual install). In short:
- In the OpenKH Mods Manager, run the setup wizard once to install Panacea and Lua Backend for KH1 (game extraction can be skipped for Lua-only mods).
- Select Kingdom Hearts 1 in the game dropdown, click the
Add a new mod(+) button, choose the GitHub option, and enterCamochase/KH2-Style-Camera. - Enable the mod in the KH1 list, then Mod Loader → Build and Run.
- Once in game, load a save and press F2 for the LuaBackend console — you should see
KH2 Tracking Camera - installed. Press F1 to hot-reload after editing settings.
Manual install (no Mods Manager): drop
KH2_Tracking_Camera.luaintoDocuments\KINGDOM HEARTS HD 1.5+2.5 ReMIX\scripts\kh1\and make sure thekh1section of yourLuaBackend.tomlhas nobaseline (orbase = 0) — this script uses module-relative addresses. Full steps in docs/INSTALL.md.
Remove any standalone Field of View script, and don't run another lock-on camera script alongside this one — they'll fight over the same memory every frame. This mod already includes full FoV control.
Heads up: before a save is loaded, the console may report
waiting for a save to load before activating. That's expected — the camera data isn't in memory yet, and the mod activates itself automatically once you load a save. No manual reload needed.
All tunables live in the USER SETTINGS block at the top of the script. You can edit them there directly and press F1 in the console to hot-reload — but the recommended way is a config file, so mod updates never overwrite your tuning:
Create KH2_Camera_Config.lua in the same folder as the installed script (for manual installs that's Documents\KINGDOM HEARTS HD 1.5+2.5 ReMIX\scripts\kh1\), returning a table with only the settings you want to change:
return {
BaseFoV = 500,
DeadbandDeg = 30,
}The mod loads it on startup and on every F1 hot-reload, and the console confirms how many overrides were applied. The file is never shipped with the mod, so updating the mod never touches it.
| Setting | Default | Meaning |
|---|---|---|
SnapFrames |
25 |
Length (frames) of the initial swing on lock / target switch. |
DeadbandDeg |
35 |
Free-control half-angle (deg) around the target direction. Inside this, the stick is fully yours. |
SpringGain |
0.10 |
Elastic pull strength once the target drifts outside the deadband (0–1). |
HardLimitDeg |
70 |
The target can never be further off-center than this (deg). |
TrackPitch |
true |
Also track vertically, not just horizontally. |
PitchDeadbandDeg |
45 |
Free-control half-angle (deg) for pitch. Usually looser than yaw. |
ResnapOnSwitch |
true |
Re-run the smooth swing when you switch to a new target. |
| Setting | Default | Meaning |
|---|---|---|
BaseFoV |
450 |
Base field of view (vanilla is 400). |
DynamicFoV |
true |
Widen the view as the target gets farther, to keep both in frame. |
ZoomStartDist |
350 |
Sora↔target distance where widening begins. |
ZoomEndDist |
1200 |
Distance where widening reaches its maximum. |
ZoomExtraFoV |
120 |
Max FoV added on top of BaseFoV. |
FoVSmoothing |
0.08 |
Per-frame ease toward the desired FoV (0–1). |
Version is detected automatically at runtime via an in-memory fingerprint, then the matching address set is used. On an unverified version the mod checks the memory values before writing and safely does nothing if they don't match.
| Version | Status | Notes |
|---|---|---|
| Steam (Global) | ✅ Verified | Primary, tested. |
| Steam (JP) | Shares Steam Global's data addresses; unverified. | |
| Epic (Global) | Camera-block delta and FoV set inferred; unverified. |
If the mod detects an unverified build and the sanity check fails, it prints a console message and does nothing. Reports from Steam JP / Epic users are welcome — please open an issue with the console output.
- Nexus Mods: https://www.nexusmods.com/kingdomheartsfinalmix/mods/223
- LuaBackend: https://github.com/Sirius902/LuaBackend
- OpenKH: https://openkh.dev
- camochase — camera logic and this mod.
- KSX — their Camera Fixes and Field of View mods laid the groundwork for camera modding in these games. The version-detection technique comes from studying their scripts, and the FoV memory addresses used here are taken directly from their Field of View script.
- Sirius902 — LuaBackend, the runtime this script targets.
- The OpenKH project and KH modding community.
The reverse engineering of the camera system (mode variable, target pointer, camera angles, snap timers) was done by hand with Cheat Engine. This mod was created with the help of AI (Anthropic's Claude), which assisted with interpreting disassembly, designing the tracking behavior, and writing the script.
MIT.
