A real frame from the engine running examples/demo. Rust and wgpu: DS
orthographic camera, skeletal glTF, UV-scroll water, camera-facing billboards, shadows,
screen effects, OGG/WAV audio and a runtime-rasterized font.
A native engine and a desktop editor for 2.5D Pokémon games. Paint tiles on a grid, sculpt elevation into plateaus and cliffs, drop glTF models and character sprites, wire up RMXP-style events, and script the rest in JavaScript.
The editor and the game share one renderer, the same render.rs, compiled to WASM for the editor. What you build is what you play.
Both routes are genuinely good at things this project is not, and neither is a modern, 3D, Pokémon-specific tool you fully own. That is the one we are building.
| RPG Maker XPPokémon Essentials | ROM hackingBinary tools & decomps | TallgrassThis project | |
|---|---|---|---|
| Foundation | RPG Maker XP with Ruby/RGSS | A retail ROM, or a decompilation of one | An engine you compile yourself |
| World | ~Mature editor, but 2D tilemaps only | ~Authentic maps, locked to the original format | ✓3D grid with elevation, cliffs and ramps |
| Pokémon systems | ✓Comprehensive and community-maintained | ✓The real thing, exactly as shipped | ✓In editable JS; combat ported 1:1 from Essentials |
| Changing behaviour | ✓Ruby scripts you can edit | ✕C or assembly against a fixed binary | ✓Plain JavaScript in your project folder |
| Shipping it | ~Windows-first player | ✕A patch; players must supply the ROM | ✓Native builds for macOS, Windows, Linux |
Scroll the table sideways →
Everything the editor does, shown next to the screen that does it, with no round trip to another tool.

Map editor. The viewport is the engine itself, compiled to WASM and rendering through WebGL2, so the map you edit is drawn by the code that will run your game. Pencil, rectangle, fill and eraser with a ghost preview, tile rotate and flip, Ground/Overlay layers, undo/redo, and autosave. Raise and lower tiles into plateaus with vertical cliffs; the Ramp tool makes walkable slopes, and level height is configurable per tileset. Paint autotiles that auto-connect at their borders, drop 3D pieces (primitives you size on the map, or models painted like a tileset), and link maps for seamless edges.

Database. Schema-driven editors for species, moves, items, abilities, natures and berries, plus a clickable type chart, a trainers editor and a visual region-map editor. New projects arrive seeded with the full Pokédex.

Scripts. RMXP-style events with pages, conditions, autonomous movement and a full command list (dialogue, choices, battles, shops, PC, region map), plus common events. Every field is a typed selector and Transfer has a visual tile picker. The logic is editable JavaScript over scripts/*.js.

Game UI. A DS-style 512×384 kit drawn by the engine, not by the browser: menus, party, summary, Pokédex, bag, shop, PC boxes, region map, trainer card, save/load, name entry, evolution and the battle HUD. Every colour and metric comes from one theme.js.

Tilesets. Tag passage, the cliff-face texture and terrain behaviour per tile: ledge, water, waterfall, grass, ice, sand. Per-level collision then falls out of the elevation you paint: cliffs block, ramps connect, and the player follows height. Autotiles get their own section: import a template, then set its kind, terrain and animation.
Movement, encounters, evolution, weather and the whole battle scene live in a QuickJS layer that ships as plain source in your project. Here is how the real player controller decides what a single step costs, and every constant is yours to change.
Paint maps and place events visually. A basic game needs no programming at all.
Every system is an overridable JS module. Open it, change it, reload.
Behaviour modelled on the real Platinum systems: camera, grid, timings and feel.
A reproducible resource pack: models and tilesets extracted from Platinum, HeartGold and Black 2 with apicula; sprites, audio and the database from Essentials.
// Terrains that make you slide: keep momentum until you exit or bump. const SLIDE = { ice: true }; // Step-duration multiplier by destination terrain (>1 = slower). const SPEED = { sand: 1.4, deepsand: 1.7, marsh: 1.6 }; // Terrains that leave a fading ground decal. const FOOTPRINT = { snow: true, sand: true }; export class Player { tryStep(dir) { const next = this.cellAhead(dir); if (this.map.isLedge(next, dir)) return this.hop(next); if (!this.map.passable(next)) return this.bump(); const terrain = this.map.terrainAt(next); this.sliding = !!SLIDE[terrain]; this.beginStep(next, (SPEED[terrain] ?? 1) * this.stepDuration); if (FOOTPRINT[terrain]) engine.addDecal("footprint", next); } }
Combat is ported 1:1 from Pokémon Essentials, singles and doubles with the real AI. Since then the map-making tools filled in: autotiles, 3D terrain, buildings, skybox and connected maps.
Shipped: the Rust + wgpu engine and DS camera; elevation with cliffs, ramps and connected cliff corners; tile rotate and flip; autotiles (RMXP 48-blob and a simple grid, animated); the map, script and tileset editors with undo/redo; events, common events and typed selectors; the database plus a visual region-map editor; the overworld (surf, bike, fishing, field moves, weather, day/night); party, bag, PC and Pokédex; evolution and leveling; the 512×384 UI kit; title, save and load; and the battle scene.
Recently added: 3D primitives you size on the map (box, ramp, cylinder) with per-face textures; a 3D tile brush and a curated palette to paint models like a tileset; walkable objects (bridges, stairs, platforms); a per-map skybox with sensible defaults by map type; connected maps for seamless edges; and correct model shading and shadows.
New projects are scaffolded with a full playable script tree and the default database. Audio plays in the windowed engine; headless render modes are silent.
$ cd editor $ npm install $ npm run tauri dev # hot reload $ npm run tauri build # bundle
$ cd engine $ cargo build --release $ cargo run -- --window \ ../examples/demo
Full contracts live in docs/:
FORMAT (project format),
SCRIPTING (JS API and runtime), and
ARCHITECTURE.
The editor, the engine and the content are all here. Bring the region.