Skip to main content

Author novel custom field maps for Final Fantasy IX (Memoria engine) from a declarative TOML project file.

Project description

FF9 Map Kit (ff9mapkit)

Author novel custom field maps for Final Fantasy IX (Steam, via the Memoria engine) from a single declarative field.toml, compiled into a drop-in Memoria mod.

Part of the Dream World IX project — ff9mapkit is the toolkit/package name (unchanged), pip installed and imported as ff9mapkit.

Feature-complete and in-game-verified. The productized form of a proven pipeline for minting brand-new playable FF9 fields, end to end. A novel field runs on a stock, unmodified Memoria install; a forked field needs the small bundled engine patch set for fork fidelity (see docs/ENGINE.md).

Headline capabilities: author any camera angle from scratch (single / scrolling / multi-camera) with a pixel-accurate paint guide · fork any of ~674 real fields — camera, walkmesh, art, and its exits/encounters/music · NPCs, dialogue, gateways, encounters, events, story branching, and cutscenes from one field.toml. Author it in TOML, a form-based editor, or a Blender add-on.

Full capability list & command reference → docs/FEATURES.md (with a before/now comparison) and SETUP.md (the 59-command CLI reference). docs/gallery/ collects screenshots/GIFs as they're captured.

What it does

Given a field.toml describing one field — its camera, painted background layers, walkmesh, NPCs, dialogue, gateways, encounter, and music — ff9mapkit build emits everything a custom field needs:

  • the background scene (.bgx camera + overlay PNGs) and walkmesh (.bgi),
  • the field event script (.eb) for all seven languages,
  • dialogue text (.mes),
  • and the DictionaryPatch / BattlePatch registration + ModDescription.xml.

What stays a human task — the way the originals were made

FF9's backgrounds are pre-rendered: the original artists built each room as a 3D scene, shot it through a fixed camera to bake a 2D plate, and the game projects the live 3D characters back onto that plate through the same camera. ff9mapkit deliberately follows that pipeline instead of hiding it. You place the camera; the kit hands you a pixel-accurate paint guide — the floor and walls projected onto the canvas, the modern stand-in for the layout render the original artists painted over — and you paint the background to match. Your hand-modeled .obj walkmesh is converted to the engine's .bgi and projected through that identical camera, so characters stand exactly where the art says they should. Painting the art and (optionally) modeling the geometry stay yours; everything in between is the kit.

Quickstart

pip install -e .                                 # from the ff9mapkit\ package dir
py -m ff9mapkit doctor                           # verify it found your FF9 install
py -m ff9mapkit import <field> --out myroom --verbatim   # fork a real field — or `new` for original art

Full setup → SETUP.md: extras (gui/save/dev), game-path resolution, the one-time extract-templates (the kit ships no game data — see Provenance), doctor, the dev loop, and a guided first-field walkthrough.

Prefer not to touch TOML? Author the logic (dialogue, events, story flags, encounters, music, cutscenes) in the form-based editor — ff9mapkit edit <field.toml>. The visual side has a front-end too: the Blender add-on poses the camera, models the walkmesh, places markers, and writes a scene.toml. So the suite splits cleanly — Blender = where things are, the editor = what they do — and build compiles both. There's also a one-window PySide6 Workspace GUI.

Commands

59 subcommands — run ff9mapkit -h (or py -m ff9mapkit -h) for the full list. A taste of the families:

  • Authornew (scaffold) · guide (paint guide for your camera) · walkmesh · edit (form editor)
  • Build & shipbuild · lint · pack · export-art
  • Fork a real fieldimport (--editable/--native/--verbatim) · import-chain · fork-report
  • Campaigns & journeysnew-campaign / build-all · gen-hub / assemble-journey
  • Battle maps & tuningbattle-import / battle-build · battle-scene / battle-ai
  • Dialogue, catalogs & savesdialogue · catalog / models / archetypes · flags-inspect · items-inspect

The full grouped command reference (all 59, with flags) is in SETUP.md §7.

Docs

  • SETUP.mdstart here: install, configure, the dev loop, and your first field (setup + quickstart).
  • docs/TUTORIAL.md — the focused ~10-minute first-field walkthrough.
  • docs/FEATURES.mdthe full capability list (+ before/now comparison).
  • docs/gallery/ — collects screenshots/GIFs as they're captured.
  • docs/FORMAT.md — the field.toml schema.
  • docs/PIPELINE.md — the full authoring workflow.
  • docs/ENGINE.md — engine requirements (stock Memoria) + provenance notes.
  • docs/PROVENANCE.mdthe kit ships no game data: how the base assets are regenerated from your own FF9 install (extract-templates), and why that's legally clean.
  • docs/TECHNICAL.md — the hard problems solved (camera math, .eb format, import).
  • docs/GLOSSARY.md — terms used across the docs (walkmesh, gateway, fork, GLOB flag…).
  • docs/TROUBLESHOOTING.md — common first-run failures → fixes.
  • docs/KNOWN_ISSUES.md — beta limitations + the Workspace GUI gaps.
  • examples/vivi-hut/ — a complete worked example.
  • blender/ — the Blender add-on: visually author the camera + walkmesh, then export a field.toml for build (Blender 4.2+/5.x).

How it's built / trusted

The library is split into eb (the event-script codec + content injectors), scene (camera math, .bgx, .bgi walkmesh, paint guides), build (the field.toml compiler), and pack. Correctness is proven by an offline golden-master test suite: every codec round-trips your install's field assets byte-for-byte (regenerated locally via extract-templates — the kit ships none), and compiling the example reproduces an in-game-verified field's script exactly.

pip install -e ".[dev]" && pytest      # the full suite

About

I make games — including an FFIX-inspired RPG of my own — so this started as the tool I wanted while learning how FF9's fields actually work, not a drive-by experiment. The aim was to build a new room the way the game's creators did: paint a background against a 3D-derived guide, then walk on geometry projected through the same camera — so authoring a field feels like level design rather than blind byte-hacking. Months of reverse-engineering the field format, the projection math, and the event bytecode went into making that the easy path. If you're poking at FF9's internals too, I hope it saves you the same dig.

Built on (and grateful for) the Memoria engine — none of this is possible without it.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ff9mapkit-1.0.0b10.tar.gz (1.7 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ff9mapkit-1.0.0b10-py3-none-any.whl (1.4 MB view details)

Uploaded Python 3

File details

Details for the file ff9mapkit-1.0.0b10.tar.gz.

File metadata

  • Download URL: ff9mapkit-1.0.0b10.tar.gz
  • Upload date:
  • Size: 1.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ff9mapkit-1.0.0b10.tar.gz
Algorithm Hash digest
SHA256 4c067680ead832f289a2ce4159b1e92a6803f72a34dd6d1faeb9d22488561691
MD5 e8b229b130302d4415ebaf06167f2f40
BLAKE2b-256 e538c34c8b0e24e660bcac119e3a514d40e740735e1c11baa68b02df44cd245a

See more details on using hashes here.

Provenance

The following attestation bundles were made for ff9mapkit-1.0.0b10.tar.gz:

Publisher: release.yml on GameJawnsInc/Dream-World-IX

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ff9mapkit-1.0.0b10-py3-none-any.whl.

File metadata

  • Download URL: ff9mapkit-1.0.0b10-py3-none-any.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ff9mapkit-1.0.0b10-py3-none-any.whl
Algorithm Hash digest
SHA256 8f195bb09bc8443f634c2c00106b19e54fb53cbb3f7e548aa68aa3106e132cea
MD5 269e969adb55b84d998ceffa3c1144ca
BLAKE2b-256 25ee52eefb35d9932f9bdd89b93200f6e60744b3c305f81770a7f3a12c234c88

See more details on using hashes here.

Provenance

The following attestation bundles were made for ff9mapkit-1.0.0b10-py3-none-any.whl:

Publisher: release.yml on GameJawnsInc/Dream-World-IX

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page