Top-down RPG bundle
The Top-down RPG bundle is a 60-second gameplay slice. An apprentice walks around a tilemapped hub, talks to three NPCs (Halden, Wren, Iolen), fetches Master Halden’s hammer from beside the well, and delivers it to complete a fetch quest. About 800 lines of TypeScript across 17 files plus 8 system components, a Yarn-style dialogue node graph, and a 3-state fetch-quest FSM.
This is the most complete bundle. It demonstrates roughly every tool surface Forge has. If you’re building an adventure, RPG, or anything top-down, start here.
What ships
Section titled “What ships”- Hub map and forest map with collision layers, painted tilesets, and signpost transitions between them.
- Three NPCs with portraits, dialogue trees, and per-NPC schedules (Halden walks from smithy to signpost at midday, Wren paces between hut and well, Iolen drifts the south path).
- A fetch quest FSM wired through EventBus: pick up the hammer, return it to Halden, quest complete banner.
- In-world combat with melee swings, contact damage, iframes, XP and leveling, loot tables.
- Day/night shader that tints the camera based on time-of-day. 90-second day cycle.
- Full game shell: main menu, pause, settings (4 audio sliders + screen shake), credits, game-over.
- Per-map music with AudioManager crossfade on transition.
- Inventory overlay with collected items, save toast on autosave.
- Voice-over slot wired on the Dialog bus, drop MP3s into
public/audio/vo/and key them inmanifest.jsonto layer real lines on top of the per-NPC blip SFX.
Systems wired in
Section titled “Systems wired in”The Top-down RPG bundle ships with 8 systems registered:
- ProjectConfig holds walk speed, interact range, day length.
- EventBus carries quest, combat, and pickup events.
- StateMachine drives the menu / hub / forest / combat / complete flow.
- SaveSystem persists quest state.
- AudioManager owns the 7-bus tree with Dialog ducking Music and SFXLoop.
- InputManager maps WASD plus interact.
- SettingsManager renders the audio sliders and screen-shake toggle.
- ThemeManager drives the palette via CSS vars.
Controls
Section titled “Controls”| Input | Action |
|---|---|
WASD or arrow keys | Walk in 8 directions (diagonals normalized) |
E / Space (near NPC or item) | Talk or pick up |
E / Space (during dialogue) | Advance text or skip typewriter |
| Click a choice button | Pick that branch |
J / Space (in combat) | Swing |
Esc (combat-stub scene) | Return to hub |
R (after quest complete) | Reload from a fresh start |
A 10-minute tour of Forge tools
Section titled “A 10-minute tour of Forge tools”The bundle’s main purpose is to teach the harness. Each of these takes a minute and exercises a different Forge tab:
- Theme palette: open
src/data/theme.palette.jsonin the Palette tab. Shift the accent hue. Save. The dialogue overlay and quest banner repaint immediately. - Tileset and tilemap: open
public/data/overworld.tilemap.jsonin the Tilemap tab. Paint a tree-base tile in thecollisionlayer; save. Walk into that tile in the preview, the player stops. - Player animation: open
src/data/player.animation.jsonin the Animation tab. Drop theidle_downclip’s fps from 4 to 2. The apprentice’s idle breath slows. - Sprite sheet: open
public/character/player.jsonin the Sprite Sheet tab. The atlas is an 8x4 grid; replaceplayer.pngwith your own art and animations keep working as long as frame names match. - Hub map: open
src/data/hub.topdown-scene.jsonin the Top-down Scene tab. Drag Halden five tiles east. Save. He teleports there on next load. - Dialogue: open
src/data/quests.dialog.jsonin the Dialog tab. Edit Halden’s first line. Save. Talk to him in-game. - Audio bus: Inspector → Systems → AudioManager. The Dialog bus ducks Music by 8 dB and SFXLoop by 6 dB whenever a dialogue node plays. Pull Music down 6 dB to verify changes are live.
- Combat: walk to the training arena past the hut, press
E. Three slimes, 3 HP shown as hearts. Clear them to “win” and auto-return. - Multi-map transition: walk to the signpost in the middle of the hub, press
E. The scene rebuilds with the forest map (pond, dirt path, dense trees, two pickups, three wandering spores). Music crossfades. - NPC schedules: watch the hub for 30 seconds. Each NPC walks their assigned waypoints over the 90-second day cycle.
- Day/night shader: open
src/shaders/daynight.glslin the Shader tab. Shift the sunset color. Save. Wait for sunset (cycle is 90s).
The bundle’s README inside the project root walks through 16 sections including emotion portraits, voice-over wiring, the loot table, and the XP curve.
Extending
Section titled “Extending”- Add an NPC: drop a portrait at
public/portraits/<id>/idle.png, add dialogue nodes todata/quests.dialog.json, register insrc/entities/npcs.ts, place inhub.topdown-scene.json. - Add a tile category: add 8 tiles to a strip of
public/tiles/overworld.png, bumptilecountand width in the tileset JSON, paint with the Tilemap tab. - Add a hub area: copy
hub.topdown-scene.json, edit placement, import + register insrc/data/maps.ts, wire a signpost inhub-scene.tryInteract(). - Branching dialogue: change a node’s
nexttochoices: [{label, target}]. The choice rack auto-renders.
What’s intentionally not here yet
Section titled “What’s intentionally not here yet”- No bundled voice-over. The playback path is wired and the Dialog bus ducks Music + SFXLoop when a voice line starts. Drop MP3s into
public/audio/vo/and write the manifest to enable. - No multi-slot save. Single autosave slot. XP and level live on Phaser’s cross-scene registry, not the save file, so closing the tab resets progression.
- No inventory UI beyond the overlay. Picked-up items go into a Set on the scene but there’s no equip system. Extend
collectItem()inhub-sceneto mint a real entry.
The bundle’s README inside the project covers the multi-map transition recipe, the loot table format, the XP-to-next-level curve in hub-scene.xpForNextLevel, and the emotion-portrait fallback rules.