Effect sources and native camera parameters
An effect ID identifies native dispatch, not one storage format. Choreography, camera, geometry, skeletal animation, textures and sound can have different sources within the same effect. FF8UltimateEditor’s Fujin now groups these components around one effect selection; its MAG/cinematic implementation is provided by the former Laguna components.
Resource ownership and evidence
| Case | Verified example | Consequence |
|---|---|---|
| Native initializer starts a MAG interpreter | Disease Breath (231), Ifrit (201) | Native dispatch and file scripts coexist |
| Native timeline loads external models | Shiva (185): mag184_e.dat | File storage does not imply script-driven choreography |
| Embedded model uses external textures | Carbuncle (278): model 0x10B6F94, second TIM in mag277.tim | A component editor must support mixed sources |
| Existing battle actors reused | Griever (69), battle instances in slots 1/2 | No dedicated mag068 summon model; Griever is c0m122.dat |
| Separate copies contain identical data | Angelo and Boko effect variants | Editing one address must not silently edit siblings |
| Several effect IDs share a resource | Gilgamesh weapon effects 327–330: mag326_g.dat | Filename arithmetic alone cannot establish ownership |
Fujin distinguishes loader references, verified runtime resource bindings and filename-family hints. Partial string extraction does not enumerate all streamed files. A missing magNNN group or empty loader callback does not establish that an effect is unused.
Camera sources are similarly independent: a static executable track, a track embedded in MAG data, cinematic camera-bone commands, native coordinate writes, or the action’s opening camera. Battle Cameras describes the handoff. Disease Breath’s normal track begins at MAG230_B.00 + 0x870; a cinematic opcode 0x39, modifier 8, selects it. Presence of an unused camera handler alone does not prove a script invokes it.
Audited executable resource spans
The editor’s effect_resources.json records 24 standard creature model containers, 26 complete TIM images and six procedural-camera immediate operands. Addresses are for the audited English 2013 Steam executable (SHA-256 064d466b5fe2ba901fd44abf19f37c0fd6a2db40aabd95c9e5959195b6589570). In this image, the listed IDA VA maps to file offset VA - 0x400000. Each resource has its own length and fingerprint; each camera operand also has an instruction guard. Other executable languages require separately verified native resource addresses. The pre-existing static-track editor has independent per-language camera addresses.
Model sources and IDA names are listed in Summon Creature Models. Consecutive TIM packs must be walked by their complete block lengths: the first image’s end does not necessarily mean the file’s end. Carbuncle’s body TIM begins at file offset 172064 inside mag277.tim.
Carbuncle’s procedural camera
Decompilation of GF_278Carbuncle_CreatureTask (0x681630) shows direct writes to camera globals and calls to MAG_278_CameraSwingAboutLookAt (0x683D10). These are not a camera VM track. The following operand locations were also checked against the x86 instructions in the extracted executable. All numbers below are signed.
| Meaning | Tick window | Operand VA | Width | Original |
|---|---|---|---|---|
| Initial Y offset from floor | 1 | 0x681D35 | 32 bits | 3000 |
| Initial camera Z | 1 | 0x681D5E | 16 bits | -4000 |
| Opening orbit radius | 1–36 | 0x681D93 | 32 bits | 4010 |
| Middle orbit radius | 86–109 | 0x681DE2 | 32 bits | 4000 |
| Middle orbit angle step | 86–109 | 0x681DE7 | 8 bits | -32 |
| Late orbit radius | from 247 while the task runs | 0x681F67 | 32 bits | 4150 |
The 8-bit immediate is the sign-extended operand of push imm8 (6A E0), so widening the stored value would overwrite the next instruction. The bindings own only operand bytes; the surrounding opcodes and destination addresses are not part of the editable span. Other camera writes and timing/branch logic in this function remain native research.
Editing and validation boundaries
Fujin shares one byte image per imported file/native resource across component views. MAG edits preserve section sizes and write back to imported paths. Executable changes export as a cumulative Hext patch; resized static tracks export as FFNx .cam files. Native code is never recompiled from its pseudocode. The selected camera-track preview does not reproduce additional procedural writes, and whole-effect scene playback remains limited to seven verified cinematic GFs. Unknown sections retain bounded byte editing rather than invented semantics. See the MAG format census for file coverage and VM profiles.