Mipsync documentation

Build a PS1 game without leaving a modern editor.

Mipsync combines a scene editor, Animator Controller, Mips# component scripting, a PSn00bSDK export pipeline, and a bundled PCSX-Redux test runtime.

Runtime model The PC application is the editor and preview. Shipping builds are generated for PlayStation 1 hardware or a compatible emulator.

Quick start

  1. 1
    Install the Hub

    Download Mipsync Hub, launch it, and install the latest editor release from the Installs page.

  2. 2
    Create or open a project

    The Hub keeps projects and installed editor versions together. A project can select which editor release it launches with.

  3. 3
    Build a scene

    Create entities in the Hierarchy, edit components in the Inspector, and assign models, textures, materials, scripts, and Animator Controllers from the asset browser.

  4. 4
    Test in Play Mode

    Use the transport controls to run the scene in the Game View. Stop returns to the editing snapshot.

  5. 5
    Export for PS1

    Open Build → Build Settings, add scenes, then choose Build PS1 or Build && Run in Emulator.

Editor workflow

Hierarchy & Inspector

Select an entity in the Hierarchy to edit its Transform and components. The selected entity and Inspector state are restored on the next launch.

Scene & Game views

The Scene View is for editing and selection. The Game View renders through the active game camera and is the correct view for Play Mode testing.

Asset browser

Drop project assets into Inspector fields. Asset references display compact filenames and previews while storing project-relative paths.

Animator Controller

Select an object with an Animator component to show its controller automatically. Build states and transitions in the graph, then edit details in the side inspector.

MMBPan the Animator graph
WheelZoom the Animator graph
AFrame all states
FFrame selected state
DeleteDelete selected graph item

Mips# scripting

Mips# v0.4 uses Unity-style component syntax. Scripts use the .mips extension and derive from MipsBehaviour. Public fields appear in the Inspector and are serialized with the scene.

class Rotator : MipsBehaviour
{
    public float degreesPerSecond = 90.0;

    void Update()
    {
        transform.rotation.y = transform.rotation.y
            + degreesPerSecond * Time.deltaTime;
    }
}

Lifecycle methods

AwakeStartUpdateLateUpdateOnDestroyOnCollisionEnterOnCollisionExitOnTriggerEnterOnTriggerExit

Supported value types include bool, int, float, string, Vector3, Entity, Transform, and engine component references.

Input and movement

Physics.Move supplies desired velocity in metres per second to the character controller. Normalize diagonal input before multiplying by speed.

class PlayerMove : MipsBehaviour
{
    public float moveSpeed = 3.0;

    void Update()
    {
        var x = 0.0;
        var z = 0.0;
        if (Input.GetKey("D")) x = x + 1.0;
        if (Input.GetKey("A")) x = x - 1.0;
        if (Input.GetKey("W")) z = z - 1.0;
        if (Input.GetKey("S")) z = z + 1.0;

        var length = Mathf.Sqrt(x * x + z * z);
        if (length > 0.0)
            Physics.Move(x / length * moveSpeed, 0.0, z / length * moveSpeed);
    }
}

Use Input.GetKeyDown("Space") for a one-frame press, and Input.GetKey("W") for a held key.

Animator Controller

Animator Controllers contain parameters, animation states, and transitions. Parameters can be Float, Bool, Int, or Trigger. Transitions support exit time, blend duration, and one or more conditions.

Float / Int

Conditions: greater, less, equals, and not equals.

Bool

Conditions: true or false.

Trigger

Set from script for one-shot transition intent.

Any State

Create a transition that may begin regardless of the active state.

class CharacterAnimation : MipsBehaviour
{
    void Update()
    {
        var animator = GetComponent<Animator>();
        var moving = Input.GetKey("W");
        var speed = 0.0;
        if (moving) speed = 1.0;
        animator.SetFloat("Speed", speed);
        animator.SetBool("Moving", moving);

        if (Input.GetKeyDown("Space"))
            animator.SetTrigger("Jump");
    }
}

Physics, saves, and scene flow

class ExitTrigger : MipsBehaviour
{
    public string nextScene = "scenes/level2.nscene";
    public string saveFile = "slot1.json";

    void OnTriggerEnter()
    {
        var other = Physics.otherEntityId;
        if (other == 0) return;

        Save.SetInt("lastTrigger", other);
        Save.Write(saveFile);
        Scene.Load(nextScene);
    }
}

Save data is JSON under the project’s saves/ directory. Scene loads are deferred safely until the current update has completed.

Common API reference

transform.position / rotation / scaleRead or write entity transform vectors and components.
gameObject.id / nameRead the current entity identity.
Time.deltaTimeSeconds elapsed since the previous frame.
Input.GetKey(name)Returns whether a named key is held.
Input.GetKeyDown(name)Returns true on the frame a key is pressed.
Physics.Raycast(...)Returns the hit entity ID, or 0 when nothing is hit.
Physics.Move(x, y, z)Moves through the character controller using desired velocity.
Physics.IsGrounded()Returns 1 while the character controller is grounded.
Animator.SetFloat / Bool / IntUpdates an Animator Controller parameter.
Animator.SetTrigger(name)Sets a trigger parameter.
Scene.Load(path)Loads a project-relative scene path.
Scene.LoadBuildIndex(index)Loads a scene from the Build Settings list.
Save.Get* / Set*Reads and writes int, float, bool, and string values.
Save.Read / Write(path)Loads or writes a JSON save file.
Application.Quit()Requests application shutdown.
Log.Info(...)Writes values to the Console.

Build for PlayStation 1

The engine release includes PCSX-Redux, OpenBIOS, PS1 starter templates, and Ninja. Install PSn00bSDK and expose its root through the PSN00BSDK environment variable for native compilation.

PS> $env:PSN00BSDK = "C:\path\to\psn00bsdk"
  1. Open Build → Build Settings.
  2. Add the startup scene and any additional scenes to Scenes In Build.
  3. Choose Build PS1, or Build && Run in Emulator.
  4. Find generated files under Builds/PS1/<Product>/.
Builds/PS1/MyGame/
├─ build.ps1
├─ mipsync_export/
├─ ps1_src/
└─ out/
   ├─ PSX.EXE
   ├─ game.cue
   └─ SYSTEM.CNF
No retail BIOS required for editor testing The bundled PCSX-Redux uses OpenBIOS. A personal retail BIOS dump can still be selected as an optional compatibility override.

Hardware notes

  • PSX.EXE is the native PlayStation executable produced by the PSn00bSDK pipeline.
  • game.cue is the emulator and CD-mastering entry point.
  • PS2 POPStarter workflows require a valid regional licensea.dat, licensee.dat, or licensej.dat.
  • The Scene View is an OpenGL authoring preview, not a bit-accurate PS1 GPU preview. Always test the generated build.

Current language limits

Mips# v0.4 intentionally keeps the runtime compact. Structs, arrays, coroutines/yield, and custom property bodies are not implemented yet. Prefer small component scripts, public Inspector fields, and the built-in engine APIs above.

Need help or want to show what you built?

Join the Mipsync Discord for questions, feedback, and project discussion.

Join Discord