Skip to main content

What It Takes to Ship a PS1 Project from an Editor

Creator of Polygon Engine

The goal of Polygon Engine is not only to render a PS1 scene. The goal is for a user to create a game from the editor, validate it, build it, test it, and understand why something fails when it fails.

That is a much harder target than a one-off demo.

The Minimum Product Bar

A shippable PS1 editor workflow needs all of these pieces to cooperate:

  • project creation and loading,
  • asset import,
  • stable GUID references,
  • scene editing,
  • component authoring,
  • Level Builder mesh creation,
  • Lua gameplay scripts,
  • UI canvas authoring,
  • build settings,
  • validation,
  • runtime selection (or compilation in a private source build),
  • asset staging,
  • disc packaging,
  • emulator testing,
  • hardware-oriented release guidance.

If any one of those is vague, the user ends up debugging engine internals instead of making a game.

Build Output Has to Be Inspectable

Polygon Engine separates staged disc data from final package output:

Build/ps1/disc_root/
SYSTEM.CNF
POLYGON.EXE
DATA/
MANIFEST.JSN
S/ scenes
L/ Lua scripts
M/ meshes
R/ materials
T/ textures
A/ resident audio
X/ XA music

Build/ps1/package/
*.bin
*.cue
*.iso
polygon.xml
README_BURN_PS1.txt

This makes build failures easier to reason about. If the runtime says it cannot load a script, the staged DATA/L folder and manifest are visible. If packaging fails, the package folder and mkpsxiso log are visible.

Failure Modes the Editor Prevents

The engine has already run into the kinds of problems a real user would hit:

  • missing binary assets,
  • scenes not included in the build,
  • script load errors,
  • runtime out-of-memory errors,
  • input mapping confusion,
  • colliders missing from visible meshes,
  • near-plane face dropout,
  • polygon overlap from large surfaces,
  • performance drops from too much scene work,
  • SPU/VRAM pressure from assets.

Those failures become validation, documentation, and safer defaults instead of project-specific knowledge.

Validation as a Product Feature

The Problems panel is one of the most important parts of the editor. It turns runtime pain into editor feedback.

Good validation says:

This Level Builder mesh has no Collider and can be walked through.
This startup scene is not included in Scenes In Build.
This Lua heap exceeds the PS1 runtime cap.
This material is transparent and needs careful PS1 ordering.
This primitive cell size is too coarse for stable PS1 depth ordering.

That is more valuable than a generic build failure. The user can act on it.

Emulator Testing Is Necessary but Not Sufficient

DuckStation is the right fast loop for day-to-day work. It catches:

  • boot errors,
  • missing files,
  • script errors,
  • input problems,
  • performance regressions,
  • obvious rendering artifacts.

But emulator success is not the same thing as a hardware claim. Real hardware remains the final confidence gate, especially for timing, disc behavior, audio, and edge-case rendering.

DuckStation is the fast test loop; real hardware is the release-quality check.

Supported Boundaries

Polygon Engine keeps the supported path explicit. It does not claim to provide:

  • arbitrary mesh boolean optimization,
  • general-purpose world streaming,
  • unlimited Lua,
  • arbitrary simultaneous audio streaming beyond the single CD-XA music path,
  • modern lighting,
  • order-independent transparency,
  • automatic perfect conversion for every primitive,
  • hardware certification without real hardware testing.

Clear limits make the supported path stronger.

Production Checklist

Before calling a project release-ready, the workflow should pass this checklist:

AreaRequirement
ScenesStartup scene and all loadable scenes included in build
AssetsNo missing mesh, material, texture, audio, or script references
GeometryLarge floors/walls chunked or baked into safer pieces
CollisionBlocking objects have Colliders; triggers are intentional
LuaScript counts, heap, properties, and instruction budget validated
UIAuthored UI stays within element budget
AudioResident clips fit SPU RAM; XA tracks stay within the streaming limit
Save dataCard errors are surfaced and each game uses a unique save-file ID
PerformanceScene runs acceptably in emulator with debug overlays off
Package.cue and .bin generated and inspected
HardwareFinal build tested on the real target before public claims

Why the Complete Path Matters

PS1 homebrew tooling is still a small space. A visual editor, Lua scripting, binary asset pipeline, and PSn00bSDK runtime in one workflow is unusual enough that the technical details matter.

The editor does not replace the target architecture. It moves expensive conversion and descriptive validation to Windows, then sends compact, bounded data to the console.

That end-to-end contract is what turns an editor demonstration into a repeatable PS1 production workflow.

Continue Reading

Updated for Polygon Engine 0.1.0-ea.2.