Epok Engine

ORIGINAL PLAYSTATION DEVELOPMENT

Build worlds.
Make them PSX.

A standalone visual editor.
Gameplay in C++20, Blueprints or Lua.
A native PlayStation runtime.

Windows x64 + macOS Apple Silicon + Linux x86_64 · Open source · Experimental

SMALL CONSOLE. A LOT OF POSSIBILITIES.

Explore the engine.
Every little superpower.

World building to the last byte.
Find a capability. See how it works.

Feature explorer211 capabilities
Full reference ↗

211 of 211 features

EXPAND TO EXPLORE
Blueprints & codeNEWLua classes in the reflected Actor model

Author one code-declared class per .lua file, extend eligible C++, Blueprint or Lua parents, and use the same Inspector, defaults, attachment and spawning contracts.

Blueprints & codeNEWThree Lua execution modes

Choose project-wide Native C++, VM bytecode or VM source execution. The same statically checked script and generated C++ subclass work in every mode.

Editor & projectsNEWStable Lua identity outside source

ProjectSettings/LuaClasses.epoksettings keeps editor-assigned class UUIDs stable across managed file moves and renames; member IDs derive predictably and may be pinned.

Blueprints & codeNEWLua Inspector properties and typed callables

Plain literals and explicit Epok constructors declare editable properties; Lua Language Server annotations declare callable parameters and results shared with other providers.

Gameplay & ActorsNEWIntrinsic transforms and engine builtins for Lua

Move 3D/2D Actors or UI layouts and call input, scene, spawn, ownership, audio, texture and effect operations without project-specific C++ helper classes.

Automation & toolsNEWGenerated Lua API definitions

Registry refresh writes .epok/lua/epok.d.lua and creates .luarc.json, covering native, Blueprint and Lua inheritance, properties, events, records, enums and builtins.

Performance & memoryNEWBounded PSX Lua VM arenas

Bytecode and source modes reserve fixed 96 KiB and 128 KiB arenas by default, with measured peaks, explicit exhaustion and a generated project override.

Build & deployNEWVerified 32-bit Lua bytecode ABI

A host cooker emits target-format chunks and checks its header byte-for-byte against the pinned 32-bit runtime instead of assuming host and PSX layouts match.

Blueprints & codeNEWInherited Blueprint events until connected

Lifecycle events begin disconnected and dimmed, preserve parent behavior until implemented, and offer an explicit event-specific Call Parent action.

Blueprints & codeNEWDescriptive reflected Blueprint pins

Reflected parameters require meaningful names, overrides inherit base labels and saved pin identities survive later SDK naming improvements.

Rendering & animationNEWRigid GTE skeletal playback

Group rigid vertices by bone and submit visible ranges directly through the GTE after conservative animation-envelope culling; this is the default import mode.

Rendering & animationNEWCompressed baked skeletal frames

Compile 30 Hz clips into independent compressed vertex frames to avoid runtime bone evaluation, trading target archive space within a 512 KiB per-model budget.

Gameplay & ActorsNEWDomain-aware Actor component creation

Add Component and new C++/Blueprint component dialogs filter parents by the selected Actor domain and compatibility rules before authoring begins.

Assets & importsNEWShared mesh selection without asset mutation

Switch an instance among the engine cube, editable meshes and skeletal meshes while preserving Actor identity and leaving shared project assets untouched.

Rendering & animationNEWPersistent baked-lighting edit preview

Keep the last valid shadows and AO visible while editing, show an amber stale-cache warning and rebuild explicitly from the top-level Build menu.

Assets & importsNEWExternal OBJ dependency import

Read MTL and texture dependencies beside an external OBJ, copy them into project-owned destinations and reject paths that escape the allowed source boundary.

Blueprints & codeNEWUTF-8 BOM-safe Lua source

Skip an optional byte order mark at the start of a script and explain how to replace the retired metadata-table declaration when encountered.

World buildingNEWPlayable Third Person controller

Camera-relative digital movement, directional turning, acceleration, braking and normalized diagonals in editable native C++.

World buildingNEWJumping and air control

Grounded Cross-button jumps, gravity, weaker airborne steering and bounded step-up for ledges.

World buildingNEWFollow and orbit camera

Shoulder-button orbit and elevation, a following camera boom and gradual alignment behind forward travel. No camera-obstacle avoidance.

Gameplay & ActorsNEWWalkable ramp surfaces

Slope rise and X/Z axis settings let movement follow a ramp's standing height. Height-field behavior, not general inclined-plane physics.

World buildingNEWLighter editable arena geometry

Reduced unnecessary subdivision keeps the generated greybox cheaper to draw while its seven mesh packages remain editable.

Editor & projectsNEWThree Scene editing modes

Separate 3D, world 2D and UI modes with domain-aware hierarchy filtering and context-preserving ancestors.

Editor & projectsNEWSigned-axis orientation control

Choose positive or negative X, Y or Z views while preserving the Scene View pivot and distance.

Gameplay & ActorsNEWPlaceable Actor class menu

Create reflected native or Blueprint Actor classes from domain-grouped Hierarchy menus, with compatible roots and defaults.

Gameplay & ActorsNEWActor hierarchy editing

Rename, duplicate, delete and logically reparent Actors. Branch operations include children; cross-domain conversion is not offered.

Gameplay & ActorsNEWCompatible component authoring

Add/remove instance components through Inspector with root, inheritance, cardinality and required/excluded-component checks.

Gameplay & ActorsNEWActor and component property overrides

Edit reflected instance values and distinguish authored overrides from class defaults in Inspector.

Gameplay & ActorsNEWLogical parenting and spatial attachment

Actor ownership/activation and component transform attachment have separate validated contracts and cycle checks.

Blueprints & codeNEWActor and Component Blueprint lifecycles

Begin Play, Tick and End Play for the new class families, alongside the existing Behaviour graph lifecycle.

Blueprints & codeNEWTyped object references and Spawn Actor

ActorRef, ComponentRef, ObjectRef, Get Owner and bounded Actor spawning connect reflected class identity to visual gameplay.

Blueprints & codeNEWMap Settings and Scene Blueprint editing

Edit the map-owned SceneScriptActor graph from Map Settings; validate class changes and compile with the project.

Blueprints & codeNEWSame-map identity references

Scene graphs can target local Actors, Components and entities with checked identity, type and map ownership.

Gameplay & ActorsNEWCooked Actor tables and Level integration

Per-bank Actor/component/override/scene-script tables and bounded runtime instances. Dedicated console acceptance remains incomplete.

Performance & memoryNEWActor runtime telemetry

Inspect alive, peak, rejected, spawned and deferred counts plus component, scene-script and loaded-bank counters.

World buildingNEWWorld2D placement editor

Grid, pan, cursor-centered zoom, topmost picking and drag movement of labeled Actor footprints, with one undo step per drag.

World buildingNEWQ12 2D transforms and Camera2D

Native parent-relative transforms, deterministic degree-based math and independent world/screen projection at 32 pixels per unit.

World buildingNEWStable 2D draw order and picking

Native layer, draw-order and creation-index sorting plus bounded picking helpers. The editor currently displays placement footprints.

Gameplay & ActorsNEWBounded 2D collision toolkit

Box/circle overlap, raycasts, sliding movement, masks and triggers. Sweeps are conservative; no rigid-body solver.

UI & HUDNEWAutomatic procedural UI construction preview

A native editor_preview hook shows code-created menus in UI mode without a MIPS build or gameplay lifecycle execution.

UI & HUDNEWInteractive native UI preview

Optional navigation with Pause, Resume, Step and Restart in an isolated desktop process; cards are temporary and audio silent.

UI & HUDNEWShared desktop and PSX HUD compiler

The same bounded Q12 layout, clipping, text and nine-slice primitive compiler serves desktop preview and target rendering.

Audio & musicNEWPortable audio roles and load modes

Sfx, Music, Ambience and Dialogue roles are independent of Auto, Resident and Stream residency; target incompatibility is explicit.

Audio & musicNEWMIDI MusicSequence import

Import SMF 0/1 MIDI, retain original bytes and identity, inspect programs, tempo, note activity, loops and logical polyphony.

Audio & musicNEWEditable portable SoundBanks

Map imported AudioClips to programs/key/velocity zones with tuning, pan, gain, envelopes and source-frame sample loops.

Audio & musicNEWRetro Starter SoundBank

Generate an original MIT-provenance triangle sample and program-0 bank for a minimal music test. No hidden GM fallback.

Audio & musicNEWProject default instrument bank

Explicit per-sequence bank selection or a project default, with dependency-aware invalidation when either changes.

Audio & musicNEWSF2 and SF3 instrument libraries

Import compatible complete SoundFont libraries as one source-preserving bank; inspect required instruments, coverage and layers.

Audio & musicNEWBundled reference instrument library

Install the checksum-identified FluidR3Mono GM 2.315 library with its MIT notice from the sequence settings.

Audio & musicNEWMusical v2 MIDI interpretation

Bank selection, RPN bend/fine/coarse tuning and supported controller semantics; old assets keep Legacy v1 until explicitly upgraded.

Audio & musicNEWPSX music quality recipes

Compact/Balanced/High and Custom settings for rate, ADPCM effort, loops, release, filters, effects, headroom and budgets.

Audio & musicNEWCancellable conversion analysis

Analyze exact draft cook costs asynchronously, with contextual parameter help and no publication of a failed candidate.

Audio & musicNEWOpt-in music budget optimizer

A bounded sample-rate search proposes a recipe. Adopt it into the draft explicitly, then save; required layers are not silently removed.

Audio & musicNEWSource versus PSX Target audition

Compare original samples with actual cooked sequence/bank payloads after saving. Host Target Preview omits wet reverb and hardware latency.

Audio & musicNEWSequenced SPU music and SFX sharing

Four sequence instances, configurable music voice limits and priority/age allocation across the PSX's 24 physical voices.

Performance & memoryNEWSequence memory and conversion reports

Separate sequence RAM, bank metadata/sample copies and SPU sample costs, with build-bound identities and adaptation diagnostics.

Audio & musicNEWAcknowledged SPU DMA and batched note starts

Batched chord/layer key-ons, bounded transfer acknowledgements and reduced library modulation cadence address real-console playback costs.

Audio & musicNEWSony sequence and bank source inspection

Recognize supported SEQ/SEP and VAB layouts and preserve source parameters/companions. VAB instrument playback remains unavailable.

Build & deployNEWManual PSX compilation

Edit without launching a MIPS build on every source change. Observation still refreshes resources and invalidates stale output.

Build & deployNEWVerified Play build reuse

PlayBuild.epokcache receipts allow executable/disc reuse only for matching scenes, profiles, resources, scripts and tracked inputs.

Build & deployNEWSelected scenes and initial bank

Build a chosen set of maps with inclusion checkboxes and an initial-scene choice, within the 16-bank total limit.

Performance & memoryNEWBuild reports and artifact-size status

Memory reports enabled by default, open-last-report workflow and provenance-aware executable/external-data sizes with stale warnings.

Performance & memoryNEWConfigurable runtime Debug HUD

Independent FPS, CPU, GTE, GPU command DMA and SPU sample-memory displays; metric definitions explicitly avoid utilization claims.

Performance & memoryNEWPosition interpolation

Smooth supported entity/camera translations between fixed simulation steps; does not raise FPS or interpolate every visual system.

Performance & memoryNEWScratchpad projected-vertex staging

Stage a chunk's projected vertices in the PSX scratchpad to reuse projection work without promising a universal speedup.

Build & deployNEWPersistent serial developer control

Owned resident/host sessions with acknowledged Pause, Continue and Reset, bounded timeouts and explicit resynchronization.

Editor & projectsNEWBundled dependency Install / Repair

Guarded host setup verifies and restores bundled tools with progress, cancellation and installation locking.

Editor & projectsNEWmacOS development shortcuts and tooling

Host-aware setup/profile scripts and optional Desktop shortcuts for the development editor; not a packaged app or a new reflection toolchain.

Automation & toolsNEWMCP Actor operations

scene_actors, scene_add_actor, scene_remove_actor and scene_set_actor extend the local authenticated editor interface to 24 tools.

Automation & toolsNEWNamespaced Actor CLI placement

--add-actor resolves native class names including namespaces and validates the destination map and Actor contract.

Editor & projectsProject Hub

Start without --project to create, find, open and remove projects from the recent list. Projects are independent folders rather than content stored inside the editor repository.

Editor & projectsProject descriptors

A root .epokproject YAML document stores the game name, startup scene, Play profile and transition settings. Paths passed to the editor can be either the folder or descriptor. Canonical path resolution and a per-project lock prevent the same project being edited twice.

Editor & projectsTemplates

New-project choices are Basic, Sample game and Third Person. Creation claims a new directory and never merges into existing content.

Editor & projectsLegacy migration and recovery

Legacy manifests and JSON documents remain readable. Migration is explicit, keeps backups and has recovery choices for an interrupted migration. See Projects and formats.

Editor & projectsRecent projects and optional file association

The editor keeps a per-user recent list. Windows can register .epokproject for the current user with the supplied script without replacing an unrelated default silently.

Editor & projectsBranded asynchronous startup

Project preparation happens behind a compact splash/loading presentation. Previous docking layouts are restored only when their panels remain valid. Long build, installation, analysis and transfer operations use a modal progress surface and block conflicting edits.

Editor & projectsPortable configuration

Project settings travel with the game; editor, MCP, emulator, serial-adapter and Content Browser preferences remain local. The editor installation owns its pinned tools independently of the current working directory. See Settings.

Editor & projectsDockable workspace

Scene, Game, Hierarchy, Inspector, Project/Content Browser, Console and specialized asset editors can be docked and restored.

Editor & projectsScene View

A GPU preview supports perspective and orthographic/2D modes, orbit, pan, fly navigation, framing, grid and wireframe display. Picking selects scene objects without changing authored data.

Editor & projectsHierarchy and transforms

Create, duplicate, delete, rename and parent entities. Position, rotation and scale are local to the parent; transform gizmos edit the selected object. Scene changes have dirty-state prompts and normal save shortcuts.

Editor & projectsComponent Inspector

Edit materials, scripts and typed script properties, cameras, meshes, collision, lighting, shadows, sprites, particle emitters, skeletal animation, audio, timelines, effects and HUD components.

Editor & projectsNumeric editing

Numeric properties accept direct text entry and click-drag adjustment with the appropriate cursor feedback.

Editor & projectsConsole

Build, import, emulator and serial output is available in a read-only selectable text view. Every displayed line carries a local timestamp with millisecond precision; native command-echo noise is filtered while real compiler/transport output remains visible. Auto-scroll follows new output, pauses when scrolling up, resumes at the bottom, and is forced during builds.

Editor & projectsArtifact dependencies

A read-only dependency view traces generated artifacts to authored scenes, assets, reflection data and native inputs. It retains stale reasons and supports cycle-safe transitive paths instead of certifying old output.

Editor & projectsResponsive source observation

Source and external-tool inputs are polled in the background with bounded caches. Relevant changes invalidate stale builds without automatically invoking the PSX compiler; unrelated damaged assets do not stop an independent document preview or build.

Assets & importsNative project browser

Browse the real assets/ tree in tiles or a Name/Type/Path table, including empty folders. Use Back/Forward, breadcrumbs, parent navigation, recursive search, type filters, sorting, resizable source tree and adjustable thumbnail size.

Assets & importsFavorites and Collections

Save folder shortcuts and named sets of asset paths per project. Collections reference content without moving it and follow in-editor moves.

Assets & importsNative type presentation

Blueprint, Scene, Texture, Mesh, Skeleton, Audio, Animation, Material, Timeline and Particle Effect files use distinct icons. Presentation names hide compound Epok suffixes without renaming files.

Assets & importsFile Inspector

Single selection shows path, size, type and available package/import metadata. A file selection never replaces the selected scene object or assigns a component accidentally.

Assets & importsImage preview

Raw and imported textures show aspect-correct thumbnails and a larger checkerboard preview. The Inspector preview supports fit/reset and wheel zoom.

Assets & importsAudio preview

WAV, MP3, FLAC and OGG sources and imported clips show a waveform, duration and Play/Stop. Imported auditions apply the saved trim, channel, rate and normalization settings before PSX compression.

Assets & importsModel preview

Editable meshes, model packages and raw FBX/OBJ files have a GPU preview with orbit, zoom and frame/reset. Skeleton and animation assets use the associated model bind pose.

Assets & importsBounded background cache

Visible previews decode off the UI thread, refresh after file/reimport changes and release GPU/audio resources on eviction or project close. A bad preview does not disable ordinary file operations.

Assets & importsProcessed-source visibility

Importable source media is hidden by default once processed and can be shown for comparison. C++ source stays visible.

Assets & importsSafe file operations

Create folders, rename, move, copy, duplicate, copy a path and reveal content in the OS file manager. Multi-item drag/drop preflights collisions, self-nesting and project boundaries. Session Undo reverses the last move.

Assets & importsRecoverable deletion

Delete moves content to a project trash directory with a restore manifest. The last session batch can be restored without overwriting existing paths.

Assets & importsIdentity-aware duplication

Supported imported packages, Timeline assets and Particle Effects receive new UUIDs. Operations that would duplicate a C++ or Blueprint class identity are rejected in favor of their creation/import workflows.

Assets & importsReference safety and reconciliation

Asset UUIDs survive moves and reimports. Missing sources can be relinked; external moves are reconciled by identity; referenced assets cannot be trashed through guarded asset operations.

World buildingYAML scenes

.epokmap files describe the environment and an ordered entity hierarchy. Empty entities are valid transform/group nodes and every component is validated before native staging.

World buildingEditableMesh / Blockout

Create Box, Plane, Ramp and Stairs primitives or a custom mesh document. Edit vertices, faces and material slots; extrude, inset, bevel, subdivide and build ramps. Geometry editing has local Undo/Redo and preserves stable asset UUIDs. See Blockout.

World buildingSpatial compilation

Editable faces are converted to bounded PSX chunks with UV/material data, visibility bounds and optional external page locations.

World buildingStatic OBJ/MTL import

Import triangular or quad OBJ geometry and material colors into editable assets with configurable scale. See Static OBJ import.

World buildingScene banks

Register up to 15 maps in addition to startup bank zero. Banks share immutable textures/audio and one reusable object pool while keeping independently validated VRAM layouts. See Runtime services.

World buildingLinked scene and template data

Asset/template links refresh through the same typed component applicator used at authoring time, preserving explicit instance overrides.

Gameplay & ActorsObject / Actor / Component classes

A reflected class tree with four families (Object, Actor, Component, Level/World) alongside the original Behaviour family. Actor3D, Actor2D and UIActor are the placeable actors; SceneScriptActor is the per-map script the level loader creates.

Gameplay & ActorsDomains

Each actor and component belongs to the 3D world, the 2D world, the UI or none. The domain comes from the class, drives the editor's 3D/2D/UI hierarchy filtering and gates which components an actor may own.

Gameplay & ActorsComponents with contracts

A component declares its owner domains, whether it can be an actor's root, its cardinality, its required/excluded companions and the target capability it needs. AudioComponent is shared by all three domains.

Gameplay & ActorsC++ and Blueprint chains

EPOK_CLASS(Blueprintable, Placeable, Spawnable, Domain=World3D, Id="…") and EPOK_COMPONENT(Root, Name="…") declare actors and their default components; Blueprints derive from them with Begin Play / Tick / End Play, typed actor/component references and a Spawn Actor node.

Gameplay & ActorsScene Blueprint per map

Each map owns one SceneScriptActor class, edited from Map Settings, compiled with the project, and able to name actors, components and entities of its own map by identity.

Gameplay & ActorsLegacy compatibility

Existing entities and Behaviours are unchanged and are additionally presented as a derived actor view; a Behaviour on an actor runs through a compatibility component, and an entity carrying both 3D and UI data is reported as a pending conversion rather than split.

Gameplay & ActorsCooked tables and counters

Actors, components, overrides and the scene script are cooked into per-bank tables with a bounded slot registry, and actor_stats reports alive/peak/rejected/spawned/deferred counts.

Rendering & animationPNG import

Convert source PNGs into portable .epokasset packages with a source snapshot, 8-bit indexed pixels and a 256-color CLUT. Reimport keeps the UUID. See Textures.

Rendering & animationVRAM packing and validation

The editor places texture pixels and palettes alongside framebuffers and reserved HUD/loading regions, validating each scene bank against the 1 MiB address space.

Rendering & animationMaterials

Per-object/face tint, unlit mode, texture assignment, UV region, depth bias, UV scrolling and Cutout/Average/Add/Subtract/AddQuarter blend modes compile to native GPU packets.

Rendering & animationDisplay configuration

Project resolution and progressive/interlaced NTSC frame clear/display behavior are generated into the runtime. PAL output is not exposed by the current runtime.

Rendering & animationPSX raster path

The native renderer uses Q12 transforms, GTE projection, Gouraud triangles, ordering tables, near/far clipping, backface/frustum tests and optional retained packet caches for unchanged geometry.

Rendering & animationLight components

Directional and point lights support Baked, Realtime and Mixed modes, color, intensity, range and priority.

Rendering & animationVertex-light bake

Bake static mesh lighting in the editor, fingerprint the result and reject stale bakes. Meshes choose baked or realtime reception and expose subdivision/shadow controls.

Rendering & animationNative realtime lighting

A bounded renderer selects local light sources and shades geometry through the GTE-aware runtime path.

Rendering & animationShadows

Static bake occlusion and moving blob shadows are implemented with explicit triangle/resource counters. See Lighting.

Rendering & animationFog and screen fade

Per-scene depth fog affects supported geometry; the runtime also exposes a full-screen fade used directly and by transitions.

Rendering & animationAnimated surfaces

Material UV scrolling supports water-like motion, and palette animators cycle imported CLUT entries. See Environment effects and Palette animation.

Rendering & animationCameras

The first active camera is the default; gameplay can select another active camera. FOV and world-to-framebuffer projection are available natively.

Rendering & animationWorld sprites

Fixed, upright and spherical billboards support texture regions, tint, blend/depth settings and clipping/culling statistics.

Rendering & animationSprite animation

Flipbook clips have per-frame duration, looping, pause/resume, completion and a bounded event queue.

Rendering & animationParticle emitters

Scene emitters and effect-owned emitters share a global 256-particle pool, bounded per-emitter creation, deterministic seeds, bursts and dropped/peak counters. See Sprites and particles.

Rendering & animationParticle Effect assets

A .particle-effect.json contains up to eight editable layers and an embedded Timeline. Presets, bursts, typed overrides, scene components, transient playback handles and a native-kernel editor preview are implemented. See Using the VFX editor.

Rendering & animationFBX skeletal import

Import a mesh, armature and clips as a UUID-linked ModelSource package, inspect the skeleton, preview clips and place a character. The PSX profile supports up to 64 bones, 512 vertices and 1,024 triangles with one rigid bone per vertex and quantized 30 Hz clips. Each model can compile to bone-grouped direct GTE skinning or compressed baked vertex frames; conservative animation envelopes cull characters before pose/decode work. See Skeletal characters.

Timelines & VFXTimeline assets and scene directors

Create reusable typed sequences or attach an automatic Timeline component to an entity. Assets have stable UUIDs, configurable timebase/loop/restore behavior, slots, tracks, markers and events.

Timelines & VFXProperty tracks

Q12 curves support Linear, Step, Smoothstep, Ease In and Ease Out interpolation. Typed adapters read/apply native or Blueprint component properties and validate required component availability.

Timelines & VFXEvent tracks

Invoke reflected functions with cooked typed arguments. Marker/event dispatch handles multiple crossings and bounded diagnostics.

Timelines & VFXPlayback control

Play, stop, pause, resume, seek and query bounded handles. Scene and transient effect directors each have measured capacity.

Timelines & VFXBlueprint integration

Blueprint nodes play Timeline/Effect assets, bind slots, wait for a marker or completion/cancellation, subscribe to repeated markers and control/burst active playback.

Timelines & VFXDependency-safe cooking

Precise source, reflection, member, resource and generated-header footprints prevent changed or ambiguous content from certifying stale output. Unsaved open documents participate in Play using the documented save/discard rules.

UI & HUDCanvas hierarchy

Canvas and RectTransform provide anchored parent-relative layout in the editor's UI mode and native HUD renderer.

UI & HUDWidgets

Solid rectangles, atlas images, nine-slice borders, text and progress bars support color and bounded ordering.

UI & HUDText

The bundled bitmap font covers printable ASCII plus documented Spanish characters, wrapping and fixed rows/columns. Generated C++ exposes mutable text.

UI & HUDRetained rendering

Static HUD packets can be retained between frames while dynamic text/value changes invalidate the appropriate output.

UI & HUDNavigation utilities

Focus<N> and layout_list provide allocation-free selection and list layout for game-owned menus.

Audio & musicSource formats

WAV, MP3, FLAC, OGG/Vorbis and PCM sources can be decoded on the host. Imported metadata includes usage, channels, rate, trim, normalization and looping.

Audio & musicResident SFX

Convert to PSX SPU ADPCM, stage a shared bank and play through AudioSource with clip, volume, pitch, looping, autoplay and runtime controls. The bank observes typed clip selections rather than unrelated transform/data changes.

Audio & musicXA background music

Encode/interleave disc XA, generate the disc manifest and drive asynchronous ISO/CD playback with loop/end/error state.

Audio & musicTransition audio

Scene transitions multiply authored audio gain during fade-out/fade-in and stop outgoing sources safely after pending callbacks.

Audio & musicResident SPU sample capacity

Resident audio is validated against the 512 KiB SPU budget with a runtime reserve. See Assets, import and audio.

Blueprints & codeC++20 Actors and components

Create project classes, derive from eligible native or generated classes and implement reflected lifecycle/event methods. Exported classes compile directly into the MIPS executable.

Blueprints & codeSemantic reflection

A pinned libclang extractor records stable class IDs, inheritance, editable properties, functions, parameter directions and Timeline metadata. Versioned manifests and caches are validated against source/tool inputs.

Blueprints & codeInspector values

Bool, signed/unsigned integer, fixed point, vectors, transforms, strings, entity/class references and typed asset references have checked defaults and instance overrides where supported.

Blueprints & codeLifecycle

All bindings and properties exist before start; active scripts receive on_enable, then fixed-step update, and later on_disable / on_destroy. Default-constructible, assignable Behaviour state is restored on bank reload.

Blueprints & codeRuntime utilities

Allocation-free Tween easing, bounded EventQueue, timed Sequence, UI Focus and list-layout helpers are included.

Blueprints & codeReflected Lua classes

Author assets/scripts/*.lua classes by extending eligible C++, Blueprint or Lua parents. The shared class registry exposes them to the Inspector, parent pickers, defaults, attachment, spawning and Blueprint inheritance instead of maintaining a separate Lua-only object model.

Blueprints & codeCode-first declarations and stable identity

A class is declared with code such as local Guard = epok.Actor3D:extend(). Plain assignments define typed Inspector properties, Lua Language Server annotations describe new callables, and ProjectSettings/LuaClasses.epoksettings preserves class UUIDs across source-file renames.

Blueprints & codeThree project-wide execution modes

Native C++ lowers the typed script IR to C++ and links no interpreter. Lua VM bytecode cooks a verified 32-bit chunk on the host and links the no-parser archive; Lua VM source packages normalized text and links the parser archive. Play, Build and export use exactly the saved mode and invalidate incompatible artifacts.

Blueprints & codeShared engine operations

Intrinsic spatial/UI fields and typed builtins cover input, scene requests, validity/casts, spawning, ownership, audio, textures and component sequence/effect playback. Actor and ActorComponent operations are reflected once for C++, Blueprint and Lua callers.

Blueprints & codeBounded target runtime

VM modes use fixed arenas (96 KiB for bytecode and 128 KiB for source by default), keep 64-bit identities outside the VM's int32 boundary and route numeric operations through the Blueprint runtime contract.

Blueprints & codeEditor definitions and diagnostics

Registry refresh writes .epok/lua/epok.d.lua and creates .luarc.json when absent, exposing native, Blueprint and Lua inheritance, properties, events, records, enums and builtins to Lua Language Server tooling.

Blueprints & codeNative compiled graphs

.epokbp classes compile ahead of time to generated C++ and then native MIPS code. No graph interpreter runs on the console.

Blueprints & codeCreation and inheritance

Create a class with a native or Blueprint parent, persistent class identity, inherited variables/functions/components and defaults, event overrides and explicit Call Parent.

Blueprints & codeGraph authoring

Components, My Blueprint, canvas and contextual Details panes support typed execution/data wires, contextual creation by right-dragging from a compatible pin, a categorized action menu, node search, reroutes and graph navigation.

Blueprints & codeTyped values and pins

Literal and connected bool, integer, unsigned, fixed-point, vector, transform, string, entity, class and asset values are validated. Composite pins can split and recombine; inline values are edited generically by type.

Blueprints & codeFlow and expressions

Events, function entry/return, Branch, Delay, variables, casts, arithmetic/comparison, reflected calls, Blueprint calls, transform/input/entity/audio/scene helpers and Timeline/VFX playback are lowered through a typed IR with saturating console arithmetic where documented.

Blueprints & codeFunctions and cross-instance calls

Define Blueprint functions with typed inputs/outputs, call them on self or compatible instances and validate execution connectivity, cycles, missing returns and class assignability.

Blueprints & codeEntity templates

Capture component hierarchies as reusable class templates, inherit/override them, refresh linked instances, place classes and spawn a class dynamically from a bounded 32-slot runtime pool.

Blueprints & codeDebugging

Instrumented Play provides per-node breakpoints, continue, pause, step and typed value snapshots/traces. Release builds omit the instrumentation.

Blueprints & codeEditor history and safety

Graph/template Undo/Redo, atomic writes, dependency invalidation and compile diagnostics prevent a stale graph from being treated as current native output.

Gameplay & ActorsController input

Two ports expose connected, held, pressed, released and frame-edge state for the standard PSX buttons. The embedded Game view owns focus and releases buttons when focus is lost.

Gameplay & ActorsMeasured fixed step

Host frame time feeds a fixed 60 Hz simulation with bounded catch-up, pause, single-step, tick counters and interpolation data.

Gameplay & ActorsAABB collision

Collider layers/masks, solid and trigger modes, overlap, swept movement and trigger Enter/Stay/Exit events run in bounded storage. Collision is conservative and not a rigid-body solver.

Gameplay & ActorsEntity handles

Slot-plus-generation handles detect destroyed/reused objects. Runtime creation, subtree destruction, activation and lookup are bounded.

Gameplay & ActorsScene lifetime

Deactivation affects descendants and rendering/audio/ collision participation without deleting authored data. Destruction invalidates handles, particles and dynamic bindings.

Build & deployPersistent Play profile

Choose destination (embedded PCSX-Redux, separate emulator window or PSX through serial), content (current open scene including unsaved edits or whole game from startup) and data source (in executable, CD on demand or PCDrv host on demand). Choices are saved in .epokproject.

Build & deployIntegrated Game view

Epok launches its own PCSX-Redux process, receives the actual 16/24-bit framebuffer through an authenticated loopback adapter, forwards controller state and supports Play, Stop, Pause and Step.

Build & deployOwned external emulator

Windowed mode uses the same built output while the editor tracks and cleans up only the process/session it launched.

Build & deployPSX over NOTPSXSerial

Enumerate/select a serial adapter, install a pinned hash-verified nops package and keep a resident debug/TTY session for executable and PC-on-demand builds. Pause, Continue and Reset use the owned monitor; PC-on-demand also serves PCDrv. Play verifies the handler after runtime startup. Adapter identity and speed are user settings.

Build & deploySafe installation and transfer

Downloads are cancellable, installed packages are replaced transactionally, an installation lock prevents competing repairs and offline serial bundles are supported. Epok does not install Unirom.

Build & deployCritical-operation locking

Builds, tool preparation, checks and uploads preserve unsaved work while blocking project mutations, external drops and shutdown until their worker reaches a safe terminal state.

Build & deployGenerated native project

Validate the selected scenes/assets, generate C++ tables and explicit source lists, stage embedded runtime/scripts and invoke pinned Make/GCC/Nugget tools. Unchanged staged files preserve timestamps for incremental compilation.

Build & deployInput provenance

Scene snapshots, settings, assets, Blueprints, timelines, generated headers, native sources/includes, compiler/linker flags, tools and SDK inputs are captured before/after work. Changes during a job prevent launch or publication of stale output.

Build & deployPrivate SDK builds

The editor and standalone launchers build certified private Nugget objects/archives without overwriting shared SDK outputs; a host lock rejects conflicting builds.

Build & deployMemory Analyzer

Builds generate reports by default. Open the last report, build first when needed, or analyze an existing compilation without launching it. The status bar shows current EXE and external-data sizes; stale reports retain a warning. Inspect Main RAM, VRAM, SPU/audio, scratchpad and generated files. The UI provides capacity bars, a clickable treemap, allocation table, breadcrumbs, symbol/source attribution, stale detection and asset location. JSON is written beside the build.

Build & deployScene transitions

Requests fade picture and audio, display a resident black loading frame with configurable text/64x64 RGB555 image, retire the old bank, warm streamed geometry, load the new bank and fade in. Failed reads stay muted and allow retry. C++ can override transition options per request.

Build & deployExecutable and disc packaging

Produce a PS-X EXE; package ISO or BIN/CUE with XA/external geometry and a user-supplied system-area license when required.

Build & deployStandalone export

Generate a relocatable C++/PsyQo project with runtime, scripts, assets, Make launchers, manifests, guides, licenses and notices. It can rebuild without the Rust editor, libclang extractor or original authoring tree.

Build & deployVersion/release policy

develop carries the next version, release carries the released version and tag workflows verify the repository VERSION, Cargo metadata, version progression and bounded job timeouts. See Release process.

Performance & memoryOptional geometry archive

External EditableMesh chunks are packed into checked 64 KiB GEOMETRY.BIN pages with a configured bounded RAM pool.

Performance & memoryCD or PCDrv backend

Runtime page lookup, reservation, pin/unpin, prefetch, synchronous fallback and scene warmup share the same pool contract. Required reads can stall and CD geometry can interact with XA playback.

Performance & memoryVisibility

Precomputed chunk bounds, frustum outcodes, cached basis/bounds tests and spatial chunks reduce submitted geometry.

Performance & memoryRetained geometry/HUD

Optional retained GPU packets reuse unchanged static work while preserving per-frame visibility and resource bounds.

Performance & memoryCounters

Runtime structures expose frame timing, dropped fixed steps, geometry/clip/lighting/sprite/particle/HUD/streaming counts, retained rebuilds, resource use and scene/spawn/playback capacity failures.

Performance & memoryProfiling tools

Headless CPU/GPU scene profiles, deterministic routes, runtime capture comparison, VRAM comparison and visibility benchmarks are included for maintainers.

Gameplay & ActorsMemory Card: Asynchronous service

Probe, read, write and list operations are serialized through a process-owned service with status, cancellation/owner safety and a PsyQo filesystem backend.

Gameplay & ActorsMemory Card: Save format

Validate names and capacities, write title/icon metadata and use interrupted-write recovery so a failed replacement does not silently lose the previous save.

Gameplay & ActorsMemory Card: Scene independence

Pending operations survive scene transitions and their callbacks are protected from destroyed game objects.

Automation & toolsOptional local server

Authenticated Streamable HTTP binds only to IPv4 loopback; a stdio bridge connects clients to the already-running editor. The feature is disabled by default and requires no specific AI provider.

Automation & toolsTwenty-four tools

editor_state, logs_read, scene_read, scene_schema, scene_apply, scene_actors, scene_add_actor, scene_remove_actor, scene_set_actor, scene_history, scene_save, scene_open, entity_select, editor_view, viewer_screenshot, editor_control, game_input, project_settings, project_files, asset_list, asset_import, mesh_create, asset_document and asset_manage cover inspection, guarded scene/actor/file edits, screenshots, imports, build/play and serial preparation.

Automation & toolsTransactional guards

Scene batches are atomic and revision-checked; project-file writes require SHA-256 revisions and keep backups; queues and responses have limits/timeouts; cancelled queued calls cannot mutate later.

Automation & toolsReal captures and runtime control

Return full Scene, HUD, Game or editor PNGs, move the editor camera, inject bounded controller input and operate the editor/emulator asynchronously.

Automation & toolsRead-only resources

Clients can read the embedded guide, state, scene, schema and settings resources in addition to tool calls.

Automation & toolsBuild and run CLI

--build-psx, --play-psx, --use-play-profile, --blueprint-debug, --analyze-memory, --export-psx

Automation & toolsProjects CLI

--create-project, --template, --migrate-project, --recover-project

Automation & toolsAssets CLI

--scan-assets, --import-texture, --import-obj, --import-fbx, --import-audio, --reimport-asset, --inspect-asset

Automation & toolsNative gameplay CLI

--reflect, --new-script, --parent, --new-blueprint, --compile-blueprints, --add-actor, --scene

Automation & toolsTimeline and VFX CLI

--new-timeline, --compile-timelines, --install-timeline-adapters, --new-particle-effect, --preset, --validate-particle-effects, --preview-particle-effect

Automation & toolsEditor/runtime QA CLI

--bake-lighting, --profile-scene, --profile-scene-cpu, --profile-editor, screenshot commands and bounded --steps / --stop-after execution

Automation & toolsIntegration CLI

--mcp-stdio, --prepare-serial-tools, --list-serial-ports

Automation & toolsRust unit tests

Rust unit tests cover serialization, UI interaction harnesses, asset safety, Blueprint connectivity/split pins/action menus, Timeline compilation and the editor's pure logic.

Automation & toolsC++ host tests

C++ host tests exercise fixed-point/runtime helpers, visibility, clipping, transforms, collision, lifecycle, transitions, streaming pools, particles, Timeline directors, Blueprint runtime/spawn/playback and Memory Card behavior.

Automation & toolsPython integration checks

Python integration checks exercise project creation/migration, imports, reflection, staging, PSX builds, emulator captures, display/HUD/lighting, streaming/XA, Blueprint and VFX workflows, memory reports and Play profiles.

Automation & toolsVisual fixtures and curated captures

Visual fixtures and curated captures cover the Content Browser, file Inspector, Blueprints, asset dialogs and branded startup. Performance scripts compare measured routes, runtime captures and VRAM output.

Automation & toolsDependency manifests

Dependency manifests pin downloadable tools and validate hashes; setup scripts keep portable tools under .tools/ and avoid changing global PATH.

Editor & projectsWindows, macOS and Linux editor hosts

Windows x64, macOS Apple Silicon and Linux x86_64. Linux remains experimental; Blueprint reflection is provisioned on Windows/Linux, not macOS.

Editor & projectsOpen-source editor and native runtime

Original Epok code is MIT licensed. Bundled tools, SDKs and third-party assets retain their own notices; proprietary console BIOS/firmware are not distributed.

Implemented does not mean unlimited or production-ready. Each guide explains its limits and validation status. Read the boundaries ↗

UNDER THE HOOD / BEYOND THE FRAME

Built in layers.
Made to go further.

A visual workspace on your computer.
A native game on original hardware.

EPOK / SYSTEM MAP
Available today A future direction
  1. 01 AUTHOR / DESKTOP

    Epok Editor

    Rust · wgpu · dockable workspace

    Your project owns the source.
    The editor owns the workspace.

  2. 02 PREPARE / HOST TOOLS

    Reflect. Cook. Build.

    Typed contracts · target conversion

    Build-time work stays on the host.
    Only prepared code and data ship.

  3. 03 EXECUTE / ORIGINAL HARDWARE

    Epok Runtime

    C++20 · fixed point · bounded pools

    Scenes & lifetimeInput & collisionRendering & HUDAudio & effects
    Original PlayStationPsyQo / native MIPS

    PS-X EXE / disc · emulator or console
    See target requirements ↗

THE SOURCE STAYS. THE HORIZON MOVES.

Some familiar hardware is still just a silhouette.

NEXT SIGNAL / UNDISCLOSEDAnother era is calling.More retro horizons. Stay tuned.
The editor validates project data, generates native code and cooks target assets. The PSX runtime uses PsyQo to reach the hardware. PSX is the supported game target today; the next signal is a glimpse ahead, not an available export option.
Epok Scene View displaying the courtyard with textured geometry, characters and particles
Scene View captured directly from the Epok renderer.

SCENE VIEW

See your world
take shape.

Arrange objects, adjust lighting, and preview your world as you build.

Explore the editor

C++ / BLUEPRINTS / LUA

Write it. Wire it.
Run it on PSX.

Three authoring paths, one reflected Actor model.
Choose native code, typed graphs or statically checked Lua.

Epok Engine / Blueprint EditorREAL EDITOR CAPTURE
Epok Blueprint editor showing components, inherited variables, typed connections, branches and a Delay node
Blueprint authoring shown here. C++20, Blueprints and Lua classes share reflected parents, properties, events and the same native PlayStation runtime.
Start the Lua tutorial

Blueprint reflection and authoring are available on Windows x64 and Linux x86_64. Lua uses the same reflected registry and can compile ahead of time or run in one of two bounded VM modes.

MEMORY ANALYZER / HARDWARE BUDGETS

Know where every
byte went.

A black screen is not a memory profiler.
Epok gives you the report before the surprise.

Epok Memory Analyzer showing the Main RAM capacity bar, proportional allocation treemap and byte-level resource table
Real editor capture: 1.92 MiB of the PlayStation's 2 MiB main RAM attributed across runtime pools, scene geometry, code, textures and other linked allocations.
01 / FIVE VIEWS

Every PSX memory space

Inspect 2 MiB Main RAM, per-scene VRAM, 512 KiB SPU audio, the 1 KiB scratchpad and the files that actually ship.

02 / DRILL DOWN

From rectangle to resource

Click through the treemap and allocation table to linked symbols, byte counts, scene references and supported source assets.

03 / BUILD-BOUND

Numbers you can trace

Reports come from the linked ELF and selected staged assets. Source or profile changes mark old results as stale instead of quietly lying.

Explore the Memory Analyzer

Measures static build-time allocations. Runtime heap, stack and scene-transition peaks are not measured.

Native PSX output with a sprite character in a textured forest and portrait dialogue HUD
Demo under development. It will be included soon.

MADE WITH EPOK

Your world.
Your rules.

Bring your ideas to life with Epok Engine. Shape the world, define how it plays, and make every detail your own.

YOUR FIRST GAME

Clone. Create. Play.

Install the tools, open the Sample game template and bring your first scene to life.

Installation guide
PowerShellWindows x64
git clone https://github.com/epokengine/epok-engine.git Epok
cd Epok
powershell -ExecutionPolicy Bypass -File tools/setup.ps1
cargo run --locked

Windows commands shown; macOS and Linux setup are documented too.
Use a checkout path without spaces.

Built in the open. Still evolving.

Epok is experimental. Builds and emulator execution are validated; broader physical-console validation is ongoing. Original code is MIT licensed. Read the current limits →