Files
llamamod/notes/editor-design.md
T

49 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Llama Level Editor – design brief
Goal (from the project owner): a fully fledged, graphical **3D level editor** for "Ein Königreich für ein Lama"
(Emperor's New Groove PC) – "everything the Argonaut developers probably had available. Support everything that
is possible. Nicely organised, easy to use, well designed." Results are shared as LlamaMod mods.
## Scope
- Create new levels from scratch (primitive building blocks like levels/testwelt, tile painting, objects).
- Open and modify ORIGINAL levels (move/add/delete objects, tiles, waypoints, zones, lights …).
- Import own 3D models (OBJ, glTF) as level geometry incl. textures and collision.
- Import/edit textures.
- Everything the format allows: tiles (TRAK models on the MAP grid, height, rotation, alt models), strats/objects
with parameters and flags, waypoint chains / paths / camera nodes, environment+teleport/respawn zones (the 90-byte
records), fog per zone, lights (LGHT), visibility regions (region grid + masks), vertex colours / lighting bake,
collision polygons and materials (e.g. 16 = exit floor, 30 = death/no floor), level name, music, kill plane.
- Play-test button: build + launch the game straight into the level.
## Architecture
- Same Gradle project (`~/projects/llamamod`), packages under `com.eliasmueller.llamamod.editor`:
- `editor.model` – scene model (pure data, no UI): Scene, nodes for tiles/brushes/meshes, objects (strats),
waypoints, zones, lights, regions, materials, assets. Undoable commands (`editor.model.cmd`).
- `editor.io` – project file format, original-level import (WAD → Scene), build (Scene → WAD) on top of
`format` and `levelbuild`.
- `editor.render` – OpenGL viewport (LWJGL 3 via lwjgl3-awt `AWTGLCanvas` inside Swing), textured +
vertex-coloured rendering, wireframe/collision overlays, picking, gizmos.
- `editor.ui` – Swing shell (FlatLaf, same look as LlamaMod): menu/toolbar, viewport, outliner (tree),
inspector (properties), asset browser (models, object types, textures), status bar.
- Launch: from LlamaMod ("Level Editor" button/tab) and standalone `--editor [file]`.
- Natives: LWJGL natives for linux-x64 and windows-x64 must be packaged (both packages).
## Project format (`.llamalevel`)
- A zip: `level.json` (scene) + `assets/` (imported meshes, PNG textures) + `thumbnail.png`.
- Contains NO original game data. Original-level edits store only a reference (`base: "t1l1m001"`) plus edits
(diff); new levels reference a base level for its object code (STPC) and textures (default `t1l1m001`).
- Deterministic build: same project + same CD → byte-identical WAD.
- Versioned schema (`formatVersion`), forward-compatible loading (unknown fields kept).
## LlamaMod integration
- Every `.llamalevel` in `<data>/levels/` (plus "Import level…") appears as a mod in category `levels`.
- New levels occupy TestLevel (world 9) chapters 1..49; the user picks a free slot (default: next free).
Edited original levels replace that level's WAD.
- Conflicts (two mods writing the same WAD) are reported clearly.
## Conventions
- English everywhere, only necessary comments, no commits, `./gradlew spotlessApply build` green.
- Reuse `format`, `levelbuild`, `mods.debug` (collision/marker knowledge), `mods.mirror` (env-zone/light layouts).
- Test in game with `tools/apptest.py` (private silent PulseAudio, own Xvfb display; user watches :5).
- UI screenshots on Xvfb (llvmpipe OpenGL works there) – look at them, iterate on design.