79 lines
3.3 KiB
Markdown
79 lines
3.3 KiB
Markdown
# 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 |
|