Files
sampleproj/Assets/SETUP_GUIDE.md
2026-03-29 13:18:13 +02:00

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 |