7.0 KiB
name, description
| name | description |
|---|---|
| kq4-exit-checker | Validates that all transition pieces in a KQ4 room are correctly configured. Checks that target UIDs are valid and appear_at_node values exist in destination scenes. |
KQ4 Exit Checker
Overview
This skill validates that all transition pieces in a room are correctly configured. A transition is valid if:
- The
targetfield contains the correct UID of the destination scene - The
appear_at_nodefield matches a node name in the destination scene - Node names follow the naming convention (destination room name, not generic)
- A return transition exists in the destination room (bidirectional)
When to Use
Use this skill when you need to verify that room transitions are properly wired up. Most commonly used after creating new rooms or modifying existing ones.
How to Use
Step 1: Run the Skill
When you invoke this skill, specify the room number (e.g., "9", "009", or "kq4_009_shady_wooded_area"). Begin by running python ./scripts/check_transitions.py, which will show each room's transitions
The skill will:
- Load the specified room's .tscn file
- Parse all TransitionPiece nodes
- For each transition, verify:
- The
targetUID exists and points to the correct scene - The
appear_at_nodevalue matches a node in the target scene - The node name follows the naming convention
- A return transition exists in the destination room
- The room actually goes to the correct room specified in the room's spec (./kq4-sierra-decompile/rooms/)
- The
Step 2: Review Results
The skill outputs:
- Valid transitions: Confirmed working connections
- Invalid transitions: Issues found with target UIDs or appear_at_node names
- Naming violations: Generic names like
north_exit,south_exit, etc. - Missing destinations: Transitions pointing to non-existent rooms
- Missing return transitions: Destination room lacks transition back to source
- Duplicate nodes: Multiple transitions with the same name
Validation Rules
Node Naming Convention (CRITICAL)
Transition node names MUST follow this convention:
- CORRECT: Name the node after the destination room (e.g.,
kq4_001_beach,kq4_025_beach_at_river_delta) - WRONG: Generic directional names (e.g.,
north_exit,south_exit,east_exit,west_exit,exit_1)
This makes the scene self-documenting and ensures consistent appear_at_node references.
Target UID Check
- The
targetfield must contain a valid UID that matches an existing scene's UID - The UID is found in the scene's
.tscnfile header:[gd_scene format=3 uid="uid://XXXXX"]
appear_at_node Check
- The
appear_at_nodefield must match a node name in the destination scene - Following the naming convention, this is typically the name of the CURRENT room
- Example: If Room 001 has
kq4_025_beach_at_river_delta→ Room 025, thenappear_at_node = "kq4_001_beach"(because Room 025 should have a node namedkq4_001_beachthat leads back)
Bidirectional Check (CRITICAL)
Every transition MUST have a corresponding return transition in the destination room.
The Problem: If Room A has a transition to Room B, but Room B doesn't have a transition back to Room A, the game will crash with:
Node not found: "kq4_A_name/exit" (relative to "background")
How to Check:
-
For each transition in the current room, note:
- Source room name (e.g.,
kq4_003_fountain_pool) - Transition node name (e.g.,
kq4_010_forest_path) - Destination scene UID
- Source room name (e.g.,
-
Load the destination scene and search for a node with name = source room name:
# In destination room, look for: [node name="kq4_003_fountain_pool" parent="." instance=ExtResource("...")] -
If NOT FOUND, this is a CRITICAL ERROR - the transition will crash the game.
Example Failure:
Room 003 (Fountain Pool):
Transition: kq4_010_forest_path
appear_at_node = "kq4_003_fountain_pool"
target = "uid://3ujj97iw54vo5" (room 010)
Checking Room 010 (Forest Path)...
ERROR: Missing return transition!
Room 010 does NOT have a node named "kq4_003_fountain_pool"
This will cause: Node not found: "kq4_003_fountain_pool/exit"
Required Fix: Add the missing transition to Room 010:
[node name="kq4_003_fountain_pool" parent="." instance=ExtResource("4_abc")]
appear_at_node = "kq4_010_forest_path"
target = "uid://151dbn9bybiwx"
label = "Fountain Pool"
Script Check
- Make sure that the signals are wired up to real functions for the transition pieces
- Make sure that the script references nodes that are actually in the scene tree
Example Output
Checking exits for Room 3 (Fountain Pool)...
Transition: kq4_002_meadow
target: uid://1489d4oh9twtu ✓
appear_at_node: kq4_003_fountain_pool
Checking destination scene (Room 2)...
Node kq4_003_fountain_pool found ✓
Transition: kq4_010_forest_path
target: uid://3ujj97iw54vo5 ✓
appear_at_node: kq4_003_fountain_pool
Checking destination scene (Room 10)...
ERROR: Node "kq4_003_fountain_pool" NOT FOUND in destination!
This will cause crash: Node not found: "kq4_003_fountain_pool/exit"
FIX: Add transition node "kq4_003_fountain_pool" to Room 10
ERROR: Duplicate node "kq4_010_forest_path" found at lines 54 and 67!
ERROR: Generic node name "west_exit" should be renamed to destination room name!
Summary: 5 transitions checked, 3 errors found
Technical Details
Finding Scene UIDs
Scene UIDs are stored in .uid files or in the .tscn file header:
# Method 1: Read .uid file
cat scenes/kq4_009_shady_wooded_area/kq4_009_shady_wooded_area.tscn.uid
# Method 2: Parse .tscn header
head -1 scenes/kq4_009_shady_wooded_area/kq4_009_shady_wooded_area.tscn
# Output: [gd_scene format=3 uid="uid://1hkplw2a78b1y"]
Finding Node Names in Scene
Node names are the name= attributes in the .tscn file:
[node name="kq4_003_fountain_pool" parent="." instance=ExtResource("4_abc")]
Finding a Specific Node in a Scene
grep '\[node name="kq4_003_fountain_pool"' scenes/kq4_010_forest_path/kq4_010_forest_path.tscn
Common Issues
- Missing return transition: Destination room lacks a transition back to source room - CAUSES CRASH
- Generic node names: Using
north_exit,south_exit, etc. instead of destination room names - appear_at_node mismatch: The node name doesn't exist in the destination scene
- Missing target UID: The target UID doesn't match any existing scene
- Duplicate node names: Multiple transitions with the same name in one scene
- Bad scripts: Transition script referencing non-existent nodes
Checklist for Each Transition
For each transition in Room A going to Room B:
- Node name =
kq4_B_name(destination room name) target= valid UID of Room B's sceneappear_at_node=kq4_A_name(current room name)- Room B has a node named
kq4_A_name - That node in Room B has
appear_at_node = "kq4_B_name" - Signal connection exists in .tscn
- Handler function exists in .gd file