RPG Reactor is an open-source, cross-platform RPG game editor and runtime for RPG Maker MV/MZ-compatible projects. RPG Reactor provides its own modern runtime, PixiJS 8 for 2D and Three.js for HD-2D/3D maps, while preserving compatibility with RPG Maker project data and targeting backwards compatibility with both RPG Maker MZ and MV plugins, including mixing plugins from both engines within a single project through complementary MZ and MV compatibility layers.
Use RPG Reactor to create, edit, playtest, and package 2D RPGs with familiar RPG Maker-style maps, events, database records, plugins, and deployment workflows, without depending on the original RPG Maker runtime or editor.
Pre-built download binaries are available at https://psychronic.itch.io/rpg-reactor. The current development version is 0.98.6 and is not published yet; the latest tagged source release is 0.98.5.
- Battle Rooms and visual Action Sequences: use a map as the battle arena, place 2D/3D battlers, build attacks from editable steps, and stage cinematic cameras. Start with the reusable unarmed punch sequence.
- Native lighting and media surfaces: place animated lights, images, and videos directly on maps or model parts, with visual position, rotation, size, and corner controls.
- Expanded 3D authoring: sharper model previews, model optimization tools, facial markers, and audio-driven lip motion for spoken voices.
- Quests, interfaces, and audio: author quests and custom interface panels, arrange map music sequences, and choose sound variants with shared audio pickers.
- Compatibility and reliability: MV/MZ and 2D regression fixes, safer event/map saving, clearer tool selection, and more consistent themes and translations.
Read the 0.98.5 release notes for details and current limitations. Battle Rooms and Action Sequences are opt-in; existing battles keep their configured behavior. Earlier updates remain in the changelog and devlog archive.
RPGReactor/
├── editor/ # RPG Reactor editor app source
├── runtime/ # Game runtime corescript copied into new projects
├── template/Demo/ # Bundled Reactor One starter project
├── docs/ # Maintainer workflows and project notes
├── RPGReactor.sh / .bat / .command
├── CHANGELOG.md
├── LICENSE
└── README.md
- Editor README: detailed feature list, source launch steps, project structure, shortcuts, and technical notes.
- Latest release notes: features, fixes, and compatibility limits for 0.98.5.
- Changelog: upcoming development and previous releases.
- Battle authoring guide: Battle Rooms, formations, action steps, and supported plugin behavior.
- Media surface guide: image/video placement, transforms, proportions, and legacy command support.
- Current status: verified development state, runtime defaults, test results, and open work.
- Handoff notes: dated engineering history, open threads, and manual release gates.
- Custom user interfaces design: the User Interfaces database section, its runtime, how it stays invisible to RPG Maker, seven opt-in stock-scene replacements, and the workflows intentionally left stock.
- 3D objects on the map: how painted object groupings and tileset 3D classes build the HD-2D world.
- Maintainer docs: workflows that are useful for project maintenance but are not required for normal editor use.
- Release checklist: exact maintainer commands for source publication, signed release candidates, GitHub attachments, and optional itch.io publication.
- Full RPG Maker-style editor: map editing with four tile layers, autotiles, shadow pen, and region painting; a visual event editor with 100+ commands, multi-page events, every MZ Conditional Branch form in RPG Maker's own four-tab layout (plus a Reactor tab for keyboard, mouse, wheel and pointer conditions), collapsible block structures with persisted fold state, Show Text edited as a whole run of message boxes with RPG Maker's text-code menu and a windowskin-accurate preview, and optional advanced expressions, loops, input conditions, event calls, and picture controls beyond the stock MV/MZ editors; a database where any entry can list what references it, descriptions and battle messages carry the text codes their windows honour, enemies have their own Max TP and can require states the user or target lacks, Add State can set its own duration, and Grow reaches Max TP or a random range; complete database editors with dense Types and Terms workspaces; a multi-channel audio player; and multi-instance editing with a cross-window typed clipboard. Drawing, layer, Undo/Redo, Audio, Database, Plugin, Resource Manager, and Forge actions share a high-contrast blue/cyan/gold SVG toolbar language; the Fill action is a pouring paint bucket and the Shadow Pen visibly lays a dark stroke.
- Project-wide Resource Manager: browse locale-sorted nested MZ/Reactor image, audio, effect, movie, font, icon, and 3D assets; preview media and orbit/zoom models through Reactor3D; batch-import safely on desktop; multi-select nested exports with Ctrl/Cmd or Shift; export decrypted bytes from encrypted projects; and delete only after path, project-lock, and symlink checks. The 3D category does not delete or merge existing models, but desktop users can import one validated GLB/OBJ/FBX/STL/USDZ/3MF/DXF into a new user-named
3d/<folder>/containingsource/and an emptytextures/;.blendmust first be exported. Publication is staged, destination-reserved, ownership-checked, and rolled back on failure. Web mutation is intentionally disabled. - Native Media Surfaces: place images and videos through the map toolbar or Show, Transform, and Stop Media Surface event commands. Attach them to the screen, map, player, events, or model parts; edit position, elevation, rotation, scale, corners, opacity, scanlines, and playback settings. Visual arrows, rings, sliders, and source-proportion controls support placement in 2D and 3D. Existing Video Surface commands remain supported. See the media surface guide for rendering and preview behavior.
- Modern PIXI 8 + Three.js runtime: the game runtime (
runtime/) is a fully migrated PIXI v8 corescript. Tilemaps, UltraMode7, Effekseer particle effects, video, and shaders all run on current PixiJS instead of the legacy renderer RPG Maker ships, and 3D maps, models, rooms, cameras and in-scene effects are drawn by Three.js (r185) sharing the same canvas. - Authorable HD-2D maps: maps can opt into a perspective 3D presentation while retaining RPG Maker's grid, passability, events, and data format. Map Properties carries the 3D switch and a room: a parallax floor, walls, and ceiling at an authored height, faces inward, stored beside the map in
Map###.r3d.json. Model props from the palette's 3D-M tab stand 3D models on any map, colliding where their geometry actually is. Models carry named effects — an animation, video/image surface, or light anchored to a part, sized relative to the model, played on demand, always, or while moving, dashing, or idle — fired by the Play 3D Effect command and animation timelines, and drawn inside the 3D world in both the editor and the game, so a wall, a strut or a character in front of the anchor hides them. A map with models is drawn under one depth buffer everywhere: what stands behind something stays behind it as the view turns. Each 3D map picks a Default Camera from Fixed Angle (HD-2D), Top-Down, Isometric, Third Person, or First Person, and the Change 3D Camera event command switches modes and angles during play; third and first person use mouse look with camera-relative WASD. The player start has a facing (right-click → Player Facing; the Reactor extensionSystem.json.startDirection, which MZ ignores) and is drawn in the 3D view. Tileset classes and map-painted object groupings stand walls, roofs, panels, foliage, events, lights, and parallax-backed ground in the editor and runtime. Events, actors, enemies, weapons, armor, and items can carry GLB/OBJ/FBX models with in-editor rigging, carved parts, and authored animations, stored in.r3d.jsonsidecars beside the MZ data. Height is a real coordinate: events and props carry a Z in tiles (editable X/Y/Z in the Event Editor, drag arrows in the 3D view), move routes gain Rise/Descend/Set Height and Face Ceiling/Face Ground/Stand Up/Rotate steps, and collision respects vertical separation — a scaffold overhead blocks nobody, and a long vehicle turns through the arc its body actually sweeps. Model animations queue and never freeze the world: Play Model Animation chains plays with an optional Wait for Completion, and the Scoped Wait command (under the new Game Flow category) holds a script in the background — on a target's last actions, a duration, a switch, or a variable — while the player keeps moving and a second interaction parks the waiting script onto its own runner. Maps carry their own lights, placed with the Lighting tool and stored in the map sidecar: in 3D every surface — tiles, walls, ceilings, models, characters — is lit per pixel by its distance from each point light's sphere or spotlight's cone (yaw and pitch), and each source glows as a body in the world that walls hide, and selected lights cast shadows through cached static and dynamic depth atlases, refreshed when casters or lights move within GPU-specific budgets. Full quality supports eight casting lights and three dynamic rows; weak quality supports four and two, prioritized by light incident on the player; on 2D maps the same lights composite flat. Plugin lights from MV Nova Lighting and RaveLighting feed the same field. - Model optimization: GLB import can cap textures at 2K, pack skin weights, reduce geometry, and reorder triangles for the GPU vertex cache. The 3D database also offers Optimize for existing models and reports geometry, materials, textures, and rig costs. Both presets can change geometry; aggressive reduction targets fewer triangles. Separate distance-level file generation is disabled in both presets, while the runtime still supports existing authored LOD files. World rendering defaults to game resolution with nearest enlargement and no MSAA; adaptive resolution is opt-in.
- Quests and BGM sequences: author quests in the database, import VisuStella/Yanfly/GS definitions, and manage objectives through events. Quest progress saves with the game; rewards are descriptive and the on-map tracker remains planned. Map BGM sequences repeat ordered track, silence, and palette entries; palette layers choose tracks from random pools with timing and fade controls. Native track loop points are ignored inside a sequence.
- Custom user interfaces: a User Interfaces database section lays out menus, dialogs, panels, and HUDs with Box, Image, Text, Button, Gauge, and typed List nodes. The canvas-first editor uses explicit Back -> Front Layers with subtree reorder/reparent, a compact searchable Use As control, responsive Inspector placement, and an optional Game Reference tray whose imports are always explicit. Named List contexts and actor bindings drive actor identity, profile, resources, EXP, parameters, equipment, states, inventory, Options, and save data. Seven stable generated baselines remain Custom/unbound until a project opts into an exact role-safe replacement; invalid records fall back to stock. Item, Skill, Equip, Shop, Formation, Name Input/message inputs, and Battle remain stock until dedicated workflow adapters exist. A standalone RPG Maker MZ plugin is not shipped and is explicitly deferred; custom interfaces currently run through RPG Reactor. See the design for behavior and boundaries.
- MZ + MV plugin compatibility: complementary MZ and MV compatibility layers let existing RPG Maker plugins run unmodified on the new runtime, including mixing plugins from both engines in a single project. Stock MV/YEP LZString saves, MOG interfaces, video parallaxes, and custom local/browser save keys are supported. Validated against a large commercial MV game running a 168-plugin stack (Yanfly, Victor Engine, MOG, SRD, and the LeTBS tactical battle system), and against a commercial MZ project running 143 active plugins including 41 VisuStella ones, an event-driven title scene, and third-party tilemap and billboard plugins that add layers of their own.
- Resilient resource loading: the runtime watchdogs every database, image, and audio load from its own frame tick. Silently-dying requests (slow disks, cloud-synced folders) retry automatically, and genuinely missing files degrade gracefully with a clear console error instead of hanging the game on a black screen. Converted image consumers can load PNG/APNG, JPG/JPEG, WebP, safe SVG, or GIF; explicit modern extensions are preserved, extensionless RPG Maker names still resolve as PNG, legacy
<name>.<ext>.pngfallbacks remain readable, encrypted MIME types stay correct, and animated GIF textures refresh while visible. Format-sensitive tilesets, plugin-parameter image fields, database actor/list thumbnails, Reactor UI character/face/party-face/System/Title/Icon sources, balloon sheets, and other fixed system sheets such as IconSet retain their PNG-oriented contracts. - The Forge, in-editor asset generators:
- Animation Generator: 76 procedural 2D animations across four categories, including Portal, with layered composition, per-layer keyframe timelines, a 3D shape pipeline, custom textures, and export to bake-ready sprite sheets or animated GIFs.
- Effekseer Animation Generator: create native Effekseer particle effects (
.efkefc) from 106 recipes across nine categories without the external Effekseer editor: 21 sci-fi interface instruments with user-typed text, physical battle hits, 15 energy recipes, elements, a custom-effect Composer, and more; wireframe or solid-textured rendering with custom texture upload; layers, keyframes with texture cross-fades, live in-editor preview through the game's own Effekseer runtime, and one-click export. The tracked suite validates generated format/model round trips, every recipe at default/extreme/swept values, composition, and real-WASM playback. - Character Generator: bundled Psychronic and Looseleaf styles plus procedural Outfit Forge and Hair Forge tools that generate RPG Maker-style walking-sheet parts, with live 4-direction walk previews, multiple hair styles, palette systems, and save-to-library output. Psychronic remains the default style.
- Sound Effect Generator: procedural sfxr-style sound design on Web Audio, baked to 16-bit WAV in the project's
audio/se/. 29 archetypes across RPG SFX and tuned instruments, six waveforms including a physically modelled Karplus-Strong pluck, 27 parameters, live waveform/envelope/pitch visualizers, and a 16-step sequencer for jingles and stingers.
- Build & deploy: one-click isolated playtests; cross-platform game packaging for Windows, macOS, Linux, and Web; optional Linux AppImages for games and the editor; configurable NW.js releases and runtime locales; optional staged PNG/audio optimization; and an editor distribution builder with SHA-256 checksums. Eligible full desktop packages default to an exact-NW.js-version H.264/AAC codec overlay verified by a trusted archive hash plus extracted-binary validation; users can disable it, and Web/Minimal packages never include it. Every overlay carries machine-readable provenance, recorded archive/binary hashes, the complete LGPL text, corresponding-source/build references, and a patent notice.
- Source-audited 18-language localization across editor-generated interface text, with locale-key and placeholder validation, Arabic right-to-left direction, and project-authored game content deliberately left untouched; plus a theme system with multiple color palettes in light and dark modes.
The root launcher scripts are for opening RPG Reactor from a source checkout while developing or testing the app. They are not the final packaged game/editor executables; they start the editor through a local NW.js runtime that you download separately.
| File | Platform | Purpose |
|---|---|---|
RPGReactor.sh |
Linux | Opens the editor with nwjs-linux/nw |
RPGReactor.bat |
Windows | Opens the editor with nwjs-win/nw.exe |
RPGReactor.command |
macOS | Opens the editor with nwjs-mac/nwjs.app |
Each script looks for the matching nwjs-* folder at the repository root or inside editor/, then launches the app from editor/.
RPG Reactor runs as an NW.js desktop app. Source development and release tooling require Node.js 22 or newer. Source checkouts include the bundled Reactor One Demo, but do not include NW.js platform binaries, node_modules/, build output, saves, or other local project templates.
- Clone the repository:
git clone https://github.com/Psychronic-Games/RPGReactor.git
cd RPGReactor- Install the editor dependency:
cd editor
npm ci
cd ..-
Download NW.js for your platform from https://dl.nwjs.io/. Use the normal or SDK build for your OS and CPU architecture.
-
Extract NW.js and rename/place the extracted folder at the repository root:
RPGReactor/
├── editor/
├── runtime/
├── nwjs-linux/ # Linux: contains the nw executable
├── nwjs-win/ # Windows: contains nw.exe
└── nwjs-mac/ # macOS: contains nwjs.app
You can also place the same nwjs-* folder inside editor/; the launchers check both locations.
- Launch RPG Reactor:
# Linux
chmod +x RPGReactor.sh
./RPGReactor.sh
# Windows
RPGReactor.bat
# macOS
chmod +x RPGReactor.command
./RPGReactor.commandFor direct NW.js launch during development:
cd editor
../nwjs-linux/nw .cd editor
npm testGitHub Actions runs syntax checks, the full Node suite, dependency audit, patch hygiene, and clean-checkout checks. The suite covers editor data round trips, runtime compatibility, rendering contracts, save safety, localization, generators, deployment, and release infrastructure. On 2026-09-04, local working-tree validation completed with 2932 passing tests, zero failures or skips. This was not a clean release run. Separate CI GUI smokes cover Web persistence and NW.js saves; the UI-layout smoke is an additional local gate. See current status for verification limits and the release checklist for checks still required on release hardware.
Treat an RPG project like source code. Project plugins and project-local Character Generator JavaScript execute inside the Node-enabled desktop editor/runtime and can access the local machine. Only open or run projects and plugins from sources you trust; inspect downloaded project code before using it. The browser editor has a narrower host, but projects may still execute game/plugin JavaScript during playtest and interface capture.
Reactor One is a starter and compatibility showcase, not a content-complete game. Original replacement art is still being authored for several actors and battlers, and 121 sound-effect names referenced by imported animations are intentionally absent. The maintained inventory is in docs/demo-missing-se.md; these gaps do not indicate missing editor/runtime files.
The runtime/ folder contains the player-facing corescript (reactor_*.js) and runtime libraries. The editor copies this folder into newly created game projects under js/.
RPG Reactor-owned code is licensed under the MIT License in LICENSE. Bundled third-party components remain under their respective licenses; see THIRD_PARTY_NOTICES.md. No single license is asserted for third-party files or user/project content.
cut-release.cjs is the canonical source-release path. Run it from a clean
main worktree after all 0.98.6 changes have been committed:
node editor/build-scripts/cut-release.cjs 0.98.6 --dry-run
node editor/build-scripts/cut-release.cjs 0.98.6The command runs the complete editor test suite, finalizes both changelog
headings with the release date, updates editor/package.json, the root README
release link and its recognized validation-count sentence, creates a release
commit when those surfaces changed, creates an annotated v0.98.6 tag, and pushes the branch and tag. The tag push starts
publish-release.yml, which creates or updates the GitHub source release using
that version's root changelog section. --no-push stops after creating the tag.
Other version prose, validation dates, the editor README, and the status summary
need a separate review; the script does not refresh them.
The push uses the repository's configured GitHub authentication. Setting
GITHUB_TOKEN or GH_TOKEN also lets the script create the release directly;
without one, the tag-triggered workflow remains the publication mechanism. To
retry source publication for an existing tag, dispatch Publish Release in
GitHub Actions with the version. Do not move or force-push a published tag.
Signed binaries are a separate, gated process. release-candidate.yml builds
and signs the four platform candidates, then release.yml verifies and attaches
those exact bytes to the existing source release and can publish the same bytes
to itch.io. Follow the release checklist for that
process.