# PSXSplash Test Scene This Unity project is a complete test scene for PSXSplash's Lua scripting API. Open it in Unity with the SplashEdit package installed. ## What's In the Scene ### Game Objects - **PSXPlayer** - Player controller at (0, 0, -10) - **Floor** - Walkable ground plane - **Wall1-4** - Boundary walls - **Collectible1-3** - Pickup items (onCollideWithPlayer) - **NPC** - Interactable NPC with multi-line dialogue - **Door** - Interactable door with cutscene animation - **DoorBlocker** - Invisible wall removed when door opens - **Switch** - Toggle switch controlling SwitchTarget - **SwitchTarget** - Object toggled by the switch - **Spinner** - Object with looping cutscene rotation (onInteract to toggle) - **Movable** - Object selected via onInteract, moved via D-pad button presses - **Scanner** - Entity scanner terminal (onInteract) ### Trigger Boxes (PSXTriggerBox) Each trigger has its own Lua script - no trigger index routing. - **CutsceneTrigger** at (-8, 0, 5) - Plays camera_flyover cutscene - **DamageTrigger** at (8, 0, 5) - Damages player on entry - **PortalTrigger** at (0, 0, 12) - Scene transition - **HealTrigger** at (-8, 0, -5) - Heals player on entry ### UI Canvases (PSXCanvas) - **HUD** (always visible, sort order 10): - ScoreText - shows "Score: 0" - StatusText - shows status messages - HealthBar - progress bar 0-100 - **Dialogue** (hidden by default, sort order 20): - DialogueText - shows NPC dialogue lines ## Still Needed ### Cutscenes Create PSXCutsceneClip assets with these names and add to SceneExporter: - `ambient_spin` - Looping background animation - `camera_flyover` - One-shot camera pan (Camera Position + Rotation tracks) - `door_open` - Door opening animation (Object Position track) - `spin_loop` - Full 360 rotation for Spinner (Object Rotation track) ### Audio Clips - `collect` - pickup sound - `door_open` - door opening - `switch_on` / `switch_off` - switch toggle - `heal` - healing sound ### Navigation Bake nav regions from the floor geometry via PlayStation 1 > Nav Region Builder. ## Design Notes - **Zero onUpdate.** All logic is event-driven. - **Zero float literals.** Uses `1/2` instead of `0.5` etc. - **Each trigger has its own script.** No index-based routing. - **Scene globals.** scene.lua defines: setStatus(), addScore(), applyDamage(), applyHeal(), startDialogue(), advanceDialogue(), isInDialogue(), endDialogue(). ## API Coverage | Script | Callbacks | Namespaces | |--------|-----------|------------| | scene.lua | onSceneCreationStart/End | Scene, Persist, UI, Audio, Controls, Cutscene, Timer, Debug, PSXMath, Vec3 | | collectible.lua | onCreate, onDestroy, onEnable, onDisable, onCollideWithPlayer | Entity, Audio, Persist | | door.lua | onCreate, onInteract | Entity, Audio, Controls, Cutscene | | npc.lua | onCreate, onInteract, onButtonPress | Input, Controls, UI | | switch.lua | onCreate, onInteract | Entity, Audio | | spinner.lua | onCreate, onInteract, onCollideWithPlayer | Cutscene, Entity, Timer | | movable.lua | onCreate, onInteract, onButtonPress | Entity, Vec3, Camera, Input | | entity_scanner.lua | onInteract | Entity, Vec3 | | cutscene_trigger.lua | onTriggerEnter | Controls, Cutscene | | damage_trigger.lua | onTriggerEnter, onTriggerExit | Debug | | portal_trigger.lua | onTriggerEnter | Persist, Scene | | heal_trigger.lua | onTriggerEnter, onTriggerExit | Audio, Debug |