17 Commits

Author SHA1 Message Date
1fa1c3abf8 changes 2026-06-04 22:41:58 -07:00
586dc8860c wiring up 2026-05-06 23:25:39 -04:00
cc051a1e15 mcp fixes 2026-04-29 17:21:11 -07:00
80957641bd Merge pull request 'Stealth Cymbal' (#3) from stealth-cymbal into master
Reviewed-on: #3
2026-04-29 16:56:44 -07:00
0b560b94ca docs: add code review for PR 3
Comprehensive code review findings:
- 23 total findings (2 P1, 9 P2, 12 P3)
- Key issues: UID mismatch in kq4_004_ogres_cottage, missing tests
- Verdict: Ready with fixes
2026-04-29 16:54:01 -07:00
c24709d02d docs: update room navigator skill with correct get_current_room_name method
Replace raw eval JSON with godot_game_call_method for checking current room,
matching the actual Godot MCP tool interface used in practice.
2026-04-29 16:18:02 -07:00
8929c4fc09 Add UID repair tool
Python script to fix stale scene UIDs by matching transition targets
to the current .uid files.
2026-04-29 15:55:21 -07:00
b2c243a819 Remove stale root-level MCP server files and navigation test
The MCP interaction server lives in scripts/mcp_interaction_server.gd;
the root-level copies and test file are obsolete.
2026-04-29 15:55:15 -07:00
971e830c6a Add Godot MCP server config to opencode.json
Register the local Godot MCP server and fix playwright indentation.
2026-04-29 15:55:06 -07:00
2479e4c784 Update scene UIDs to match regenerated .uid files
Transition target UIDs in .tscn files updated to match the current .uid
files for each room, fixing broken scene transitions caused by stale UIDs.
2026-04-29 15:55:00 -07:00
868b25299a Update room navigator skill with mock_interact and room verification
Replaces click-based navigation with mock_interact(0) on TransitionPiece
nodes, adds get_current_room_name() verification pattern, and documents
the MCP busy protocol for walk animation timeouts.
2026-04-29 15:54:41 -07:00
7a7d9e78db Prevent eval-induced debugger breaks from hanging the game
When eval receives invalid GDScript, script.reload() triggers a debugger
break that halts the game loop permanently (especially with LocalDebugger
which doesn't respect skip_breakpoints). Two-layer defense:

1. On startup, attempt to disable debugger breaks via
   EngineDebugger.send_message (works for RemoteDebugger)
2. When debugger is unsafe (LocalDebugger), validate eval code in an
   external headless Godot process before executing it in-process
2026-04-29 15:54:32 -07:00
9b5a7040c2 Add get_current_room_name() helper to MainGame
Provides a convenient way to identify the current room at runtime by
extracting the room name from the scene script's resource path, rather
than relying on node names (which are always 'background').
2026-04-29 15:54:24 -07:00
ec4fc8e756 changes for stuff 2026-04-29 13:35:31 -07:00
784867833d adds opencode gitea skill 2026-04-28 22:10:45 -07:00
aa79040dcb fixes to agents 2026-04-28 22:08:07 -07:00
b8b3c79e99 stuff and stuff 2026-04-28 22:06:56 -07:00
115 changed files with 2200 additions and 738 deletions

51
.beads/.gitignore vendored
View File

@@ -1,51 +0,0 @@
# Dolt database (managed by Dolt, not git)
dolt/
dolt-access.lock
# Runtime files
bd.sock
bd.sock.startlock
sync-state.json
last-touched
# Local version tracking (prevents upgrade notification spam after git ops)
.local_version
# Worktree redirect file (contains relative path to main repo's .beads/)
# Must not be committed as paths would be wrong in other clones
redirect
# Sync state (local-only, per-machine)
# These files are machine-specific and should not be shared across clones
.sync.lock
export-state/
# Ephemeral store (SQLite - wisps/molecules, intentionally not versioned)
ephemeral.sqlite3
ephemeral.sqlite3-journal
ephemeral.sqlite3-wal
ephemeral.sqlite3-shm
# Dolt server management (auto-started by bd)
dolt-server.pid
dolt-server.log
dolt-server.lock
dolt-server.port
dolt-server.activity
dolt-monitor.pid
# Backup data (auto-exported JSONL, local-only)
backup/
# Legacy files (from pre-Dolt versions)
*.db
*.db?*
*.db-journal
*.db-wal
*.db-shm
db.sqlite
bd.db
# NOTE: Do NOT add negation patterns here.
# They would override fork protection in .git/info/exclude.
# Config files (metadata.json, config.yaml) are tracked by git by default
# since no pattern above ignores them.

View File

@@ -1,81 +0,0 @@
# Beads - AI-Native Issue Tracking
Welcome to Beads! This repository uses **Beads** for issue tracking - a modern, AI-native tool designed to live directly in your codebase alongside your code.
## What is Beads?
Beads is issue tracking that lives in your repo, making it perfect for AI coding agents and developers who want their issues close to their code. No web UI required - everything works through the CLI and integrates seamlessly with git.
**Learn more:** [github.com/steveyegge/beads](https://github.com/steveyegge/beads)
## Quick Start
### Essential Commands
```bash
# Create new issues
bd create "Add user authentication"
# View all issues
bd list
# View issue details
bd show <issue-id>
# Update issue status
bd update <issue-id> --claim
bd update <issue-id> --status done
# Sync with Dolt remote
bd dolt push
```
### Working with Issues
Issues in Beads are:
- **Git-native**: Stored in Dolt database with version control and branching
- **AI-friendly**: CLI-first design works perfectly with AI coding agents
- **Branch-aware**: Issues can follow your branch workflow
- **Always in sync**: Auto-syncs with your commits
## Why Beads?
**AI-Native Design**
- Built specifically for AI-assisted development workflows
- CLI-first interface works seamlessly with AI coding agents
- No context switching to web UIs
🚀 **Developer Focused**
- Issues live in your repo, right next to your code
- Works offline, syncs when you push
- Fast, lightweight, and stays out of your way
🔧 **Git Integration**
- Automatic sync with git commits
- Branch-aware issue tracking
- Dolt-native three-way merge resolution
## Get Started with Beads
Try Beads in your own projects:
```bash
# Install Beads
curl -sSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash
# Initialize in your repo
bd init
# Create your first issue
bd create "Try out Beads"
```
## Learn More
- **Documentation**: [github.com/steveyegge/beads/docs](https://github.com/steveyegge/beads/tree/main/docs)
- **Quick Start Guide**: Run `bd quickstart`
- **Examples**: [github.com/steveyegge/beads/examples](https://github.com/steveyegge/beads/tree/main/examples)
---
*Beads: Issue tracking that moves at the speed of thought*

View File

@@ -1,54 +0,0 @@
# Beads Configuration File
# This file configures default behavior for all bd commands in this repository
# All settings can also be set via environment variables (BD_* prefix)
# or overridden with command-line flags
# Issue prefix for this repository (used by bd init)
# If not set, bd init will auto-detect from directory name
# Example: issue-prefix: "myproject" creates issues like "myproject-1", "myproject-2", etc.
# issue-prefix: ""
# Use no-db mode: JSONL-only, no Dolt database
# When true, bd will use .beads/issues.jsonl as the source of truth
# no-db: false
# Enable JSON output by default
# json: false
# Feedback title formatting for mutating commands (create/update/close/dep/edit)
# 0 = hide titles, N > 0 = truncate to N characters
# output:
# title-length: 255
# Default actor for audit trails (overridden by BD_ACTOR or --actor)
# actor: ""
# Export events (audit trail) to .beads/events.jsonl on each flush/sync
# When enabled, new events are appended incrementally using a high-water mark.
# Use 'bd export --events' to trigger manually regardless of this setting.
# events-export: false
# Multi-repo configuration (experimental - bd-307)
# Allows hydrating from multiple repositories and routing writes to the correct database
# repos:
# primary: "." # Primary repo (where this database lives)
# additional: # Additional repos to hydrate from (read-only)
# - ~/beads-planning # Personal planning repo
# - ~/work-planning # Work planning repo
# JSONL backup (periodic export for off-machine recovery)
# Auto-enabled when a git remote exists. Override explicitly:
# backup:
# enabled: false # Disable auto-backup entirely
# interval: 15m # Minimum time between auto-exports
# git-push: false # Disable git push (export locally only)
# git-repo: "" # Separate git repo for backups (default: project repo)
# Integration settings (access with 'bd config get/set')
# These are stored in the database, not in this file:
# - jira.url
# - jira.project
# - linear.url
# - linear.api-key
# - github.org
# - github.repo

View File

@@ -1,9 +0,0 @@
#!/usr/bin/env sh
# --- BEGIN BEADS INTEGRATION v0.59.0 ---
# This section is managed by beads. Do not remove these markers.
if command -v bd >/dev/null 2>&1; then
export BD_GIT_HOOK=1
bd hooks run post-checkout "$@"
_bd_exit=$?; if [ $_bd_exit -ne 0 ]; then exit $_bd_exit; fi
fi
# --- END BEADS INTEGRATION v0.59.0 ---

View File

@@ -1,9 +0,0 @@
#!/usr/bin/env sh
# --- BEGIN BEADS INTEGRATION v0.59.0 ---
# This section is managed by beads. Do not remove these markers.
if command -v bd >/dev/null 2>&1; then
export BD_GIT_HOOK=1
bd hooks run post-merge "$@"
_bd_exit=$?; if [ $_bd_exit -ne 0 ]; then exit $_bd_exit; fi
fi
# --- END BEADS INTEGRATION v0.59.0 ---

View File

@@ -1,9 +0,0 @@
#!/usr/bin/env sh
# --- BEGIN BEADS INTEGRATION v0.59.0 ---
# This section is managed by beads. Do not remove these markers.
if command -v bd >/dev/null 2>&1; then
export BD_GIT_HOOK=1
bd hooks run pre-commit "$@"
_bd_exit=$?; if [ $_bd_exit -ne 0 ]; then exit $_bd_exit; fi
fi
# --- END BEADS INTEGRATION v0.59.0 ---

View File

@@ -1,9 +0,0 @@
#!/usr/bin/env sh
# --- BEGIN BEADS INTEGRATION v0.59.0 ---
# This section is managed by beads. Do not remove these markers.
if command -v bd >/dev/null 2>&1; then
export BD_GIT_HOOK=1
bd hooks run pre-push "$@"
_bd_exit=$?; if [ $_bd_exit -ne 0 ]; then exit $_bd_exit; fi
fi
# --- END BEADS INTEGRATION v0.59.0 ---

View File

@@ -1,9 +0,0 @@
#!/usr/bin/env sh
# --- BEGIN BEADS INTEGRATION v0.59.0 ---
# This section is managed by beads. Do not remove these markers.
if command -v bd >/dev/null 2>&1; then
export BD_GIT_HOOK=1
bd hooks run prepare-commit-msg "$@"
_bd_exit=$?; if [ $_bd_exit -ne 0 ]; then exit $_bd_exit; fi
fi
# --- END BEADS INTEGRATION v0.59.0 ---

View File

@@ -1,7 +0,0 @@
{
"database": "dolt",
"backend": "dolt",
"dolt_mode": "server",
"dolt_database": "ai_game_2",
"project_id": "16f0248d-5833-44e9-91cc-42afea26fd77"
}

1
.gitignore vendored
View File

@@ -14,3 +14,4 @@ tmp/**
tools/ora_editor/node_modules/* tools/ora_editor/node_modules/*
node_modules/* node_modules/*
**/*.log **/*.log
kq4-sierra-decompile/**

View File

@@ -5,7 +5,7 @@
"packages": { "packages": {
"": { "": {
"dependencies": { "dependencies": {
"@opencode-ai/plugin": "1.14.27" "@opencode-ai/plugin": "1.14.29"
} }
}, },
"node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": {
@@ -87,13 +87,13 @@
] ]
}, },
"node_modules/@opencode-ai/plugin": { "node_modules/@opencode-ai/plugin": {
"version": "1.14.27", "version": "1.14.29",
"resolved": "https://registry.npmjs.org/@opencode-ai/plugin/-/plugin-1.14.27.tgz", "resolved": "https://registry.npmjs.org/@opencode-ai/plugin/-/plugin-1.14.29.tgz",
"integrity": "sha512-8J8JkrInF5oWaR2rsLuwQktdF9Yq3xoyA8B42/B8Te74/q4rqOt7YzWK2I/ZSxvKA/Ct+iQ8f2OeUrpQ2INgSw==", "integrity": "sha512-GwmBg7dajawma/6tzpoK/JMbcRcUTg27XHlnxZOFWG85WDz4M67hxFYnvE+BnJj9k7tTLXTfSR+pgfcdqbUDAg==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@opencode-ai/sdk": "1.14.27", "@opencode-ai/sdk": "1.14.29",
"effect": "4.0.0-beta.48", "effect": "4.0.0-beta.57",
"zod": "4.1.8" "zod": "4.1.8"
}, },
"peerDependencies": { "peerDependencies": {
@@ -110,9 +110,9 @@
} }
}, },
"node_modules/@opencode-ai/sdk": { "node_modules/@opencode-ai/sdk": {
"version": "1.14.27", "version": "1.14.29",
"resolved": "https://registry.npmjs.org/@opencode-ai/sdk/-/sdk-1.14.27.tgz", "resolved": "https://registry.npmjs.org/@opencode-ai/sdk/-/sdk-1.14.29.tgz",
"integrity": "sha512-mpzDFDAGi+8wKEcm4aP0HVtS56rN/q2hVs8Ai6JziPu7NuTMddfFoEvddArYsgkRWUfHL5ypZc1mDmAMEiO1vg==", "integrity": "sha512-y6wNTlHhgfwLdp01EwdnMFVxUS1FLgz7MZh7H3+jROG2v02GqGDy/gPH3ME0kI+sqQ4qSlk/9AJ+YbKAruPaZw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"cross-spawn": "7.0.6" "cross-spawn": "7.0.6"
@@ -149,9 +149,9 @@
} }
}, },
"node_modules/effect": { "node_modules/effect": {
"version": "4.0.0-beta.48", "version": "4.0.0-beta.57",
"resolved": "https://registry.npmjs.org/effect/-/effect-4.0.0-beta.48.tgz", "resolved": "https://registry.npmjs.org/effect/-/effect-4.0.0-beta.57.tgz",
"integrity": "sha512-MMAM/ZabuNdNmgXiin+BAanQXK7qM8mlt7nfXDoJ/Gn9V8i89JlCq+2N0AiWmqFLXjGLA0u3FjiOjSOYQk5uMw==", "integrity": "sha512-rg32VgXnLKaPRs9tbRDaZ5jxmzNY7ojXt85gSHGUTwdlbWH5Ik+OCUY2q14TXliygPGoHwCAvNWS4bQJOqf00g==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@standard-schema/spec": "^1.1.0", "@standard-schema/spec": "^1.1.0",

View File

@@ -0,0 +1,202 @@
---
model: "auto"
kill: ["alpha-mask-creator"]
date_introduced: 2026-04-28
---
# Plan: kq4-room-navigator Skill (AI Agent Room Pathfinding via Godot MCP)
## Context
The game has ~96 rooms connected by TransitionPiece nodes. Each room's `.tscn` file defines its exits: node name (destination room), target UID, appear_at_node, label, and polygon coordinates. Room scripts connect the `interacted` signal to handlers that call `default_script()` on the transition piece, triggering a 3-step animated sequence (walk to exit → fade/swap scenes → walk to entrance in new room).
The custom MCP server (`scripts/mcp_interaction_server.gd`) runs as an autoload at TCP port 9090 with ~80 commands including `eval` (arbitrary GDScript execution), `click`, `screenshot`, `get_scene_tree`, `get_property`, and `wait`. No Python client exists yet.
**Key constraint**: Full runtime discovery via `eval` is fragile — instantiating .tscn files for graph discovery triggers script execution (`_ready()`) which references autoload singletons (ActionState, GameScript), causing errors when rooms aren't fully set up. **Solution**: Use targeted `find_nodes_by_class` MCP command for the currently-loaded room, and file parsing for global graph construction (leveraging existing `scripts/check_transitions.py`).
## Approach
Build a Python tool (`tools/kq4_room_navigator.py`) that:
1. Parses `.tscn` files to build complete room adjacency graph (reuse logic from `check_transitions.py`)
2. Runs BFS pathfinding between start and destination rooms
3. Connects to the MCP server on port 9090 for live navigation
4. Uses `eval` to compute click coordinates within TransitionPiece polygons in the running game
5. Executes step-by-step clicks with screenshot verification after each transition
The SKILL.md guides an AI agent through: starting Godot, invoking the tool, and optionally verifying steps manually with MCP commands.
## Implementation Plan
### 1. Extend room graph parser (`scripts/build_room_graph.py`)
**Purpose**: Parse all `.tscn` files to produce a queryable room adjacency graph with BFS pathfinding. Extends/extracts logic from existing `scripts/check_transitions.py`.
**What it does**:
1. Scan `scenes/kq4_*/kq4_*.tscn` (exclude placeholder_template)
2. Parse each file to extract:
- Scene UID (from header `[gd_scene format=3 uid="uid://XXX"]`)
- Room name/directory stem (e.g., `kq4_004_ogres_cottage`)
- All TransitionPiece nodes → build adjacency list
3. Build bidirectional graph: `{room_name: [(exit_node_name, target_uid, appear_at_node, label, polygon), ...]}`
**Output**: Returns a structure that supports BFS queries between any two rooms.
**Interface** (callable from Python or CLI):
```python
def build_graph(scenes_dir: Path) -> dict[str, list[TransitionInfo]]:
"""Parse all room .tscn files and return adjacency graph."""
def find_path(graph: dict, start_room: str, end_room: str) -> list[NavigationStep]:
"""BFS from start to end. Returns ordered list of steps or None."""
@dataclass
class NavigationStep:
from_room: str # Current room name (e.g., "kq4_004_ogres_cottage")
exit_node_name: str # TransitionPiece node name (e.g., "kq4_010_forest_path")
to_room: str # Destination room name
label: str # Human-readable label (e.g., "Forest Path")
polygon: list[tuple] # Polygon vertices for click coordinate computation
```
**File**: `scripts/build_room_graph.py`
### 3. Create the main navigator tool (`tools/kq4_room_navigator.py`)
**Purpose**: End-to-end CLI tool that connects to MCP, builds graph, finds path, and navigates.
**Workflow**:
```bash
python tools/kq4_room_navigator.py --from kq4_004_ogres_cottage --to kq4_092_lolottes_throne_room
```
**Implementation flow**:
1. **Build graph** (offline): Calls `build_graph()` to parse all rooms
2. **BFS pathfinding**: Finds shortest path from start → destination
3. **No path found**: Reports unreachable, lists connected components
4. **Path found**: Prints the step-by-step plan with click coordinates
5. **Connect to MCP** (runtime): Opens TCP connection to port 9090
6. **For each navigation step**:
a. Verify starting room: `eval("return get_node('/root/Node2D').get_current_room_name()")` returns the current room's node name (e.g., `"kq4_003_fountain_pool"`). This convenience function on MainGame simplifies verification compared to traversing the scene tree.
b. `find_nodes_by_class(class_name="TransitionPiece")` — discover all transition pieces in current scene
c. Match the exit node name from our path → get runtime position + polygon
d. Compute click coordinate: centroid of the TransitionPiece's `polygon`, transformed to viewport coordinates
e. `click(x, y)` — trigger the transition
f. Wait for transition animation (2-3s via `wait` command or poll-loop)
g. **Verify arrival**: `eval("return get_node('/root/Node2D').get_current_room_name()")` to confirm we've entered the expected room. Compare against the `to_room` from our BFS path. Returns empty string if no scene loaded.
h. If verification fails, retry up to 2 times with adjusted coordinates
h. Optionally take a screenshot via `screenshot()` for visual confirmation
7. **Complete**: Print summary of navigation path taken
**GDScript eval code used at runtime**:
Find clickable position within TransitionPiece polygon:
```gdscript
# Returns {node_name, centroid_x, centroid_y} for matching transition piece
var bg = get_tree().root.get_node_or_null("Node2D/SceneViewport/background")
if not bg: return null
for child in bg.get_children():
if child.has_method("is_class") and child.is_class("TransitionPiece"):
var p = child.position + child.polygon.reduce(func(p, a): return p + a, Vector2(0,0)) / child.polygon.size()
return {"node": child.name, "x": p.x, "y": p.y, "polygon_size": child.polygon.size()}
```
Verify current room:
```gdscript
var bg = get_tree().root.get_node_or_null("Node2D/SceneViewport/background")
return bg ? bg.name : null
```
**File**: `tools/kq4_room_navigator.py`
### 4. Write SKILL.md (`.opencode/skills/kq4-room-navigator/SKILL.md`)
The skill guide documents:
- **When to use**: Planning navigation between rooms, verifying room connectivity, debugging transitions
- **Pre-requisites**: Godot game running with MCP server active on port 9090
- **Quick start**: `python tools/kq4_room_navigator.py --from kq4_XXX --to kq4_YYY`
- **Room verification helper** (`MainGame.get_current_room_name()`):
The root node (`/root/Node2D`, script: `MainGame.gd`) provides a convenience function for testing:
```gdscript
# Via MCP eval — returns node name like "kq4_003_fountain_pool", or "" if no scene loaded
return get_node("/root/Node2D").get_current_room_name()
```
Use this after each transition click to verify you arrived at the expected room. Compare against the `to_room` field from your BFS path.
- **Manual MCP workflow** (for step-by-step agent control):
- Start Godot: `godot --path .` or run exported binary
- Check current room: `{"command": "eval", "params": {"code": "return get_node('/root/Node2D').get_current_room_name()"}}` → returns `"kq4_003_fountain_pool"` style string
- Verify connectivity: `{"command": "get_scene_tree"}` returns the current scene tree
- Discover exits in current room: `{"command": "find_nodes_by_class", "params": {"class_name": "TransitionPiece"}}`
- Click a transition: compute centroid from polygon data, then `{"command": "click", "params": {"x": px, "y": py}}`
- Verify current room: `{"command": "eval", "params": {"code": "return get_node('/root/Node2D').get_current_room_name()"}}` (returns node name like `"kq4_010_forest_path"`). Alternatively use screenshot for visual confirmation.
- **Coordinate computation math**: How to convert TransitionPiece polygon (local-space) to viewport click coordinates: `viewport_x = transition_node.position.x + polygon_centroid.x`, accounting for any node scale transforms
- **Troubleshooting**: Common failures (server busy, node not found mid-transition, wrong room), escape hatches
**File**: `.opencode/skills/kq4-room-navigator/SKILL.md`
## Task Dependency Graph
```
[1. build_room_graph.py] ────────┐
├── [2. kq4_room_navigator.py] ─── [3. SKILL.md]
### Using MainGame.get_current_room_name() for Room Verification
The `MainGame.gd` script (attached to `/root/Node2D`) provides a convenience function:
```gdscript
# Returns the node name of the current scene, e.g., "kq4_003_fountain_pool"
func get_current_room_name() -> String:
var scene = get_scene()
if scene:
return scene.name
return ""
```
**Via MCP eval for runtime verification**:
```bash
curl http://localhost:9090 -d '{"command": "eval", "params": {"code": "return get_node(\"/root/Node2D\").get_current_room_name()"}}'
```
Returns the room node name string (e.g., `"kq4_003_fountain_pool"`), or empty string if no scene is loaded. This is more reliable than traversing the scene tree manually since it uses the same `$SceneViewport/background` reference that MainGame's own logic uses.
**When to use**:
- After clicking a transition, call to confirm arrival at expected room in `to_room`
- Before navigation starts, verify you're actually in the intended `from_room`
- Compare against BFS path nodes during automated step-by-step execution
```
Tasks run sequentially. Task 3 documents the completed system.
## Verification
- Run `python scripts/build_room_graph.py` → should produce a graph with all rooms and their exits
- Test BFS: path from kq4_001_beach to an adjacent room should be 1 step; path to a far room tests multi-hop correctly
- Connect to running Godot instance via `tools/kq4_room_navigator.py` → verify it can navigate at least one transition end-to-end (from current room to an adjacent room)
- Verify failure handling: requesting a path between disconnected rooms returns "no path found"
- Test `_busy` retry logic by sending rapid commands
## Risks & Mitigations
| Risk | Impact | Mitigation |
|------|--------|------------|
| Room not fully set up — `TransitionPiece._ready()` crashes on eval-instantiation | Can't discover transitions from unloaded rooms via MCP | File parsing for graph discovery is the primary approach; MCP runtime only queries currently-loaded scene |
| Transition animation timing varies | Click at wrong time → missed transition | Poll current room name via eval every 0.5s until it changes, with 10s timeout |
| Polygon coordinates are local to node — need transform to viewport | Click lands outside polygon | Account for node `position` AND `scale` when computing centroid; use `get_node_info` runtime to get actual global polygon positions |
| MCP server `_busy` state blocks commands | Navigation stalls | Retry with exponential backoff (0.1s, 0.2s, 0.4s, ...) and 3-second max wait |
## Out of Scope
- Path optimization beyond BFS shortest path
- Inventory/item-based transitions (e.g., needing a key to enter a room)
- Cutscene-triggered room changes (non-interaction transitions)
- Multiplayer considerations
- Auto-starting Godot from the tool (user starts game manually)

View File

@@ -0,0 +1,127 @@
---
name: gitea-tea
description: Use tea CLI to create, manage, and checkout Gitea pull requests. Use this when opening a PR, managing PRs, or checking out PRs on the gitea remote (gitea.story-basking.ts.net).
---
# Gitea Tea CLI Skill
This skill covers using `tea` (Gitea's official CLI) for pull request workflows in this project.
## When to Use This Skill
Use this skill when you need to:
- Create a PR from a working branch to master on the gitea remote
- Open, list, or view PRs
- Checkout a PR locally for review or iteration
- Manage PR state (close, reopen, merge)
## Project Setup
The gitea remote is `gitea.story-basking.ts.net` with repo slug `notid/integreat`. The default push remote is **gitea**, NOT origin and NOT deploy.
In this project's environment:
- Gitea login is pre-configured for `gitea.story-basking.ts.net`
- Repo slug: `notid/integreat`
- Target branch for PRs: `master`
- The git remote named `gitea` points to this instance
## Creating a PR
Use `tea pulls create` to open a PR from the current branch to master. Always specify `-r notid/integreat -b master`:
```bash
tea pulls create -r notid/integreat -b master --title "Title" --description "Body"
```
Common flags:
- `-t, --title` - PR title
- `-d, --description` - PR body/description (use heredoc or file for long descriptions)
- `-a, --assignees` - Comma-separated usernames to assign
- `-L, --labels` - Comma-separated labels to apply
- `-m, --milestone` - Milestone to assign
**Writing a multiline description:**
```bash
tea pulls create -r notid/integreat -b master \
-t "feat: add feature" \
-d "$(cat <<'EOF'
## Summary
- Bullet point one
- Bullet point two
EOF
)"
```
Or write the body to a temp file first and reference it.
## Listing PRs
```bash
tea pulls list -r notid/integreat # List open PRs
tea pulls list -r notid/integreat --state all # All PRs
tea pulls list -r notid/integreat --limit 10 -o simple # Limit output, simple format
```
## Opening a PR in Browser
```bash
tea open pr <number> -r notid/integreat
tea open pr create -r notid/integreat # Open web UI to create a PR
```
## Checking Out a PR Locally
```bash
tea pulls checkout <number> -r notid/integreat
```
This fetches and checks out the PR branch locally.
## Managing PR State
**Close a PR:**
```bash
tea pulls close <number> -r notid/integreat --confirm
```
**Reopen a closed PR:**
```bash
tea pulls reopen <number> -r notid/integreat --confirm
```
**Merge a PR:**
```bash
tea pulls merge <number> -r notid/integreat --confirm
```
**Edit a PR (title, description, etc.):**
```bash
tea pulls edit <number> -r notid/integreat --title "New title" --description "New body"
```
## Full PR Creation Workflow
1. Ensure the branch is pushed to gitea:
```bash
git push gitea <branch-name>
```
2. Create the PR with tea:
```bash
tea pulls create -r notid/integreat -b master \
--title "feat: description of change" \
--description "Detailed PR body here"
```
3. Open the PR in browser to verify:
```bash
tea open pr <number> -r notid/integreat
```
## Tips
- Always use `-r notid/integreat` to specify the repo explicitly
- Use `-b master` to set the target branch (default may differ)
- The `--confirm` flag is required for destructive actions (close, merge)
- Use `-o simple`, `-o json`, `-o table`, etc. to control output format

View File

@@ -0,0 +1,85 @@
---
name: kq4-room-documenter
description: [TODO: Complete and informative explanation of what the skill does and when to use it. Include WHEN to use this skill - specific scenarios, file types, or tasks that trigger it.]
---
# Kq4 Room Documenter
## Overview
[TODO: 1-2 sentences explaining what this skill enables]
## Structuring This Skill
[TODO: Choose the structure that best fits this skill's purpose. Common patterns:
**1. Workflow-Based** (best for sequential processes)
- Works well when there are clear step-by-step procedures
- Example: DOCX skill with "Workflow Decision Tree" → "Reading" → "Creating" → "Editing"
- Structure: ## Overview → ## Workflow Decision Tree → ## Step 1 → ## Step 2...
**2. Task-Based** (best for tool collections)
- Works well when the skill offers different operations/capabilities
- Example: PDF skill with "Quick Start" → "Merge PDFs" → "Split PDFs" → "Extract Text"
- Structure: ## Overview → ## Quick Start → ## Task Category 1 → ## Task Category 2...
**3. Reference/Guidelines** (best for standards or specifications)
- Works well for brand guidelines, coding standards, or requirements
- Example: Brand styling with "Brand Guidelines" → "Colors" → "Typography" → "Features"
- Structure: ## Overview → ## Guidelines → ## Specifications → ## Usage...
**4. Capabilities-Based** (best for integrated systems)
- Works well when the skill provides multiple interrelated features
- Example: Product Management with "Core Capabilities" → numbered capability list
- Structure: ## Overview → ## Core Capabilities → ### 1. Feature → ### 2. Feature...
Patterns can be mixed and matched as needed. Most skills combine patterns (e.g., start with task-based, add workflow for complex operations).
Delete this entire "Structuring This Skill" section when done - it's just guidance.]
## [TODO: Replace with the first main section based on chosen structure]
[TODO: Add content here. See examples in existing skills:
- Code samples for technical skills
- Decision trees for complex workflows
- Concrete examples with realistic user requests
- References to scripts/templates/references as needed]
## Resources
This skill includes example resource directories that demonstrate how to organize different types of bundled resources:
### scripts/
Executable code (Python/Bash/etc.) that can be run directly to perform specific operations.
**Examples from other skills:**
- PDF skill: `fill_fillable_fields.py`, `extract_form_field_info.py` - utilities for PDF manipulation
- DOCX skill: `document.py`, `utilities.py` - Python modules for document processing
**Appropriate for:** Python scripts, shell scripts, or any executable code that performs automation, data processing, or specific operations.
**Note:** Scripts may be executed without loading into context, but can still be read by Claude for patching or environment adjustments.
### references/
Documentation and reference material intended to be loaded into context to inform Claude's process and thinking.
**Examples from other skills:**
- Product management: `communication.md`, `context_building.md` - detailed workflow guides
- BigQuery: API reference documentation and query examples
- Finance: Schema documentation, company policies
**Appropriate for:** In-depth documentation, API references, database schemas, comprehensive guides, or any detailed information that Claude should reference while working.
### assets/
Files not intended to be loaded into context, but rather used within the output Claude produces.
**Examples from other skills:**
- Brand styling: PowerPoint template files (.pptx), logo files
- Frontend builder: HTML/React boilerplate project directories
- Typography: Font files (.ttf, .woff2)
**Appropriate for:** Templates, boilerplate code, document templates, images, icons, fonts, or any files meant to be copied or used in the final output.
---
**Any unneeded directories can be deleted.** Not every skill requires all three types of resources.

View File

@@ -0,0 +1,24 @@
# Example Asset File
This placeholder represents where asset files would be stored.
Replace with actual asset files (templates, images, fonts, etc.) or delete if not needed.
Asset files are NOT intended to be loaded into context, but rather used within
the output Claude produces.
Example asset files from other skills:
- Brand guidelines: logo.png, slides_template.pptx
- Frontend builder: hello-world/ directory with HTML/React boilerplate
- Typography: custom-font.ttf, font-family.woff2
- Data: sample_data.csv, test_dataset.json
## Common Asset Types
- Templates: .pptx, .docx, boilerplate directories
- Images: .png, .jpg, .svg, .gif
- Fonts: .ttf, .otf, .woff, .woff2
- Boilerplate code: Project directories, starter files
- Icons: .ico, .svg
- Data files: .csv, .json, .xml, .yaml
Note: This is a text placeholder. Actual assets can be any file type.

View File

@@ -0,0 +1,34 @@
# Reference Documentation for Kq4 Room Documenter
This is a placeholder for detailed reference documentation.
Replace with actual reference content or delete if not needed.
Example real reference docs from other skills:
- product-management/references/communication.md - Comprehensive guide for status updates
- product-management/references/context_building.md - Deep-dive on gathering context
- bigquery/references/ - API references and query examples
## When Reference Docs Are Useful
Reference docs are ideal for:
- Comprehensive API documentation
- Detailed workflow guides
- Complex multi-step processes
- Information too lengthy for main SKILL.md
- Content that's only needed for specific use cases
## Structure Suggestions
### API Reference Example
- Overview
- Authentication
- Endpoints with examples
- Error codes
- Rate limits
### Workflow Guide Example
- Prerequisites
- Step-by-step instructions
- Common patterns
- Troubleshooting
- Best practices

View File

@@ -0,0 +1,19 @@
#!/usr/bin/env python3
"""
Example helper script for kq4-room-documenter
This is a placeholder script that can be executed directly.
Replace with actual implementation or delete if not needed.
Example real scripts from other skills:
- pdf/scripts/fill_fillable_fields.py - Fills PDF form fields
- pdf/scripts/convert_pdf_to_images.py - Converts PDF pages to images
"""
def main():
print("This is an example script for kq4-room-documenter")
# TODO: Add actual script logic here
# This could be data processing, file conversion, API calls, etc.
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,194 @@
---
name: kq4-room-navigator
description: Navigate between KQ4 rooms using the Godot MCP server. BFS pathfinds through room transition graph, then the agent navigates McpInteractionServer (port 9090). Use when planning navigation between any two rooms or simulating player movement through the game world at runtime. Trigger phrases: "navigate from", "go to room", "path from X to Y", "walk to", "how do I get to room", "room navigation".
---
# KQ4 Room Navigator
## Overview
This skill finds shortest paths between rooms and can execute them through the running game using Godot's MCP server. It combines offline `.tscn` file parsing for graph construction with runtime interaction via McpInteractionServer (TCP port 9090).
The room transition system uses TransitionPiece nodes: each has an `exit_node_name` (destination), a polygon, and connects rooms typically bidirectionally. Clicking a TransitionPiece triggers a 3-step animation (walk → fade/swap scenes → walk to entrance in new room).
## When to Use
- Planning multi-room navigation paths
- Verifying room connectivity
- Debugging why a path can't be traversed
- Automating room transitions during testing
## How It Works
```
.scenes/*.tscn files → adjacency graph (96 rooms, 233 exits) → BFS pathfinding → use MCP for execution
```
Room identification at runtime:
- Game node tree: `/root/Node2D/SceneViewport/background` (always named "background")
- Room identity comes from `background.get_script().resource_path` (e.g., `res://scenes/kq4_010_forest_path/kq4_010_forest_path.gd`)
- TransitionPiece children have `.target` UIDs and `.label` strings for cross-referencing
### Getting the current room name at runtime
The canonical way is via `MainGame.get_current_room_name()`:
Use `godot_game_call_method` to call it directly on the node path:
```json
Call method get_current_room_name on /root/Node2D
```
Returns a string like `"kq4_010_forest_path"`. The implementation extracts the filename from the scene script's resource path (`script_path.trim_suffix(".gd").get_file()`), NOT the node name (which is always `"background"`).
## Quick Start
### Step 1 — Make a plan:
```bash
python tools/kq4_room_navigator.py --from kq4_003_fountain_pool --to kq4_011_enchanted_grove
```
Output:
```
Path: kq4_003_fountain_pool → kq4_011_enchanted_grove (3 steps)
1. Click 'kq4_004_ogres_cottage' in kq4_003_fountain_pool → kq4_004_ogres_cottage [Ogre's Cottage] (click at: 1874, 714)
2. Click 'kq4_010_forest_path' in kq4_004_ogres_cottage → kq4_010_forest_path [Forest Path] (click at: 1042, 1078)
3. Click 'kq4_011_enchanted_grove' in kq4_010_forest_path → kq4_011_enchanted_grove [Enchanted Grove] (click at: 1898, 610)
```
The click coordinates are not used — the `exit_node_name` is what matters.
### Step 2 — Launch and navigate
1. Use the Godot MCP to start the game (`godot_run_project`)
2. Poll room name to verify starting room:
```
get_tree().root.get_node('Node2D').get_current_room_name()
```
3. For each step, call **`mock_interact(0)`** on the TransitionPiece node (see exact method name below)
4. Wait and poll until `get_current_room_name()` returns the expected destination
5. Repeat for next step
## Detailed Navigation Protocol
### Identify current room
```json
{"command": "eval", "params": {"code": "get_tree().root.get_node('Node2D').get_current_room_name()"}}
```
Returns `"kq4_0xx_room_name"`, confirming both MCP connectivity and which room you're in.
### Discover available exits from current room
Use the `set-piece` group to find all interactive polygons (TransitionPieces are automatically added):
```json
{"command": "get_nodes_in_group", "params": {"group": "set-piece"}}
```
Filter results for node names starting with `kq4_0` — these are transition exits.
### Trigger a room transition
**Critical: The method name is `mock_interact`, NOT `mock_interaction`.**
Use `godot_game_call_method` to call it directly on the node path:
```
Call method mock_interact(0) on /root/Node2D/SceneViewport/background/<exit_node_name>
```
Argument `0` = ActionState.Action.WALK (1=LOOK, 2=TOUCH, 3=TALK).
### Waiting — MCP busy protocol
**IMPORTANT**: Walk animations block the McpInteractionServer for ~30 seconds. During this time:
- `eval`, `wait`, `call_method` all fail with "timed out after 30s"
- The server has a built-in `_busy` flag auto-reset after ~30s ("_busy flag stuck for 30.Xs, force-resetting")
**Robust polling pattern**:
1. Call `mock_interact(0)` on the target node (returns immediately, animation starts)
2. Try `wait(frames=30)` then poll room name
3. If both timeout (~30s elapsed), retry the room name poll once more
4. The server will auto-reset and the next poll will succeed
Expected timing per transition: **~45-75 seconds total** (walk ~15s, MCP block ~30s, fade-in ~5s, confirm ~2s)
### Finding transitions by script handler
In room `.gd` files, handlers like `_on_ogres_cottage_interacted()` reference the TransitionPiece node (`$kq4_004_ogres_cottage.default_script(self)`). The handler's parameter name matches the node name you need to call `mock_interact(0)` on.
## Room Graph Structure
The graph currently has:
- **96 rooms** across 23 connected components
- Largest component: 36 rooms (starting from room 3 Fountain Pool)
- Second largest: 17 rooms (room 1 Beach area)
- Two additional 36-room components that are disconnected due to UID mismatches
Use `python scripts/build_room_graph.py --from A --to B` to find a path. If "no path" is returned but rooms feel like they should connect, the cause is likely a stale UID (see Common Issues).
### UID mismatch example
Room `kq4_018_cemetery` has UID `uid://b3fjmiaribbrl`, but nearby rooms point to it with stale UIDs (`uid://35amqvpjgpf2x`). Runtime navigation works fine (Transitions use file paths), but the graph can't find the connection.
## Common Issues
| Problem | Diagnosis | Fix |
| --- | --- | --- |
| `mock_interaction` method not found | Wrong method name | Use **`mock_interact(0)`** — no trailing "tion" |
| MCP commands time out during transition | Walk animation blocks server (~30s) | Wait and retry; server auto-resets after ~30s |
| "No path" between adjacent rooms at graph level | Target UID in source `.tscn` doesn't match destination room's `.uid` file | Runtime still works. Fix the target uid in the source tscn or update the destination room's .uid |
| `get_current_room_name()` returns `"background"` | Old implementation used `scene.name` | Updated to use `script_path.trim_suffix(".gd").get_file()` |
## Verified Navigation Example
Successfully tested navigating from kq4_003_fountain_pool to kq4_018_cemetery via 5 transitions:
```
kq4_003_fountain_pool → mock_interact(kq4_004_ogres_cottage) → kq4_004_ogres_cottage ✓
kq4_004_ogres_cottage → mock_interact(kq4_010_forest_path) → kq4_010_forest_path ✓
kq4_010_forest_path → mock_interact(kq4_011_enchanted_grove) → kq4_011_enchanted_grove ✓
kq4_011_enchanted_grove → mock_interact(kq4_017_spooky_house_exterior) → kq4_017_spooky_house_exterior ✓
kq4_017_spooky_house_exterior → mock_interact(kq4_018_cemetery) → kq4_018_cemetery ✓
```
## API Reference
### build_room_graph.py module
```python
from pathlib import Path
from scripts.build_room_graph import build_graph, find_path, NavigationStep
graph = build_graph(Path('scenes')) # RoomInfo dict keyed by room name
steps = find_path(graph, "kq4_003_fountain_pool", "kq4_018_cemetery") # List[NavigationStep] or None
step.from_room # Source room name
step.exit_node_name # TransitionPiece node to call mock_interact(0) on
step.to_room # Destination room name
step.label # Human-readable label (e.g., "Ogre's Cottage")
```
### kq4_room_navigator.py CLI
```bash
python tools/kq4_room_navigator.py --from ROOM --to ROOM
# For graph summary:
python tools/kq4_room_navigator.py summary
```
## Key Files
| File | Purpose |
| --- | --- |
| `MainGame.gd` | Root game node; `get_current_room_name()` returns room from script path |
| `tools/kq4_room_navigator.py` | CLI combining graph + BFS + MCP navigation |
| `scripts/build_room_graph.py` | Room adjacency graph builder + BFS pathfinding |
| `TransitionPiece.gd` | Exit nodes; `mock_interact(action)` triggers default_script() |
| `SetPiece_.gd` | Base interactive polygon class (class_name SetPiece) |
| `.opencode/skills/kq4-room-creator/SKILL.md` | Related: creating new rooms with transitions |

7
.superset/config.json Normal file
View File

@@ -0,0 +1,7 @@
{
"setup": [
"git submodule update\ncd godot-mcp\nnpm install\nnpm run build\ncd .."
],
"teardown": [],
"run": []
}

108
AGENTS.md
View File

@@ -299,116 +299,10 @@ func _on_exit_interacted() -> void:
Do all work in a branch. Squash the branch before merging into master. Do all work in a branch. Squash the branch before merging into master.
<!-- BEGIN BEADS INTEGRATION -->
## Issue Tracking with bd (beads)
**IMPORTANT**: This project uses **bd (beads)** for ALL issue tracking. Do NOT use markdown TODOs, task lists, or other tracking methods.
### Why bd?
- Dependency-aware: Track blockers and relationships between issues
- Git-friendly: Dolt-powered version control with native sync
- Agent-optimized: JSON output, ready work detection, discovered-from links
- Prevents duplicate tracking systems and confusion
### Quick Start
**Check for ready work:**
```bash
bd ready --json
```
**Create new issues:**
```bash
bd create "Issue title" --description="Detailed context" -t bug|feature|task -p 0-4 --json
bd create "Issue title" --description="What this issue is about" -p 1 --deps discovered-from:bd-123 --json
```
**Claim and update:**
```bash
bd update <id> --claim --json
bd update bd-42 --priority 1 --json
```
**Complete work:**
```bash
bd close bd-42 --reason "Completed" --json
```
### Issue Types
- `bug` - Something broken
- `feature` - New functionality
- `task` - Work item (tests, docs, refactoring)
- `epic` - Large feature with subtasks
- `chore` - Maintenance (dependencies, tooling)
### Priorities
- `0` - Critical (security, data loss, broken builds)
- `1` - High (major features, important bugs)
- `2` - Medium (default, nice-to-have)
- `3` - Low (polish, optimization)
- `4` - Backlog (future ideas)
### Workflow for AI Agents
1. **Check ready work**: `bd ready` shows unblocked issues
2. **Claim your task atomically**: `bd update <id> --claim`
3. **Work on it**: Implement, test, document
4. **Discover new work?** Create linked issue:
- `bd create "Found bug" --description="Details about what was found" -p 1 --deps discovered-from:<parent-id>`
5. **Complete**: `bd close <id> --reason "Done"`
### Auto-Sync
bd automatically syncs via Dolt:
- Each write auto-commits to Dolt history
- Use `bd dolt push`/`bd dolt pull` for remote sync
- No manual export/import needed!
### Important Rules
- ✅ Use bd for ALL task tracking
- ✅ Always use `--json` flag for programmatic use
- ✅ Link discovered work with `discovered-from` dependencies
- ✅ Check `bd ready` before asking "what should I work on?"
- ❌ Do NOT create markdown TODO lists
- ❌ Do NOT use external issue trackers
- ❌ Do NOT duplicate tracking systems
For more details, see README.md and docs/QUICKSTART.md.
## Landing the Plane (Session Completion)
**When ending a work session**, you MUST complete ALL steps below. Work is NOT complete until `git push` succeeds.
**MANDATORY WORKFLOW:**
1. **File issues for remaining work** - Create issues for anything that needs follow-up
2. **Run quality gates** (if code changed) - Tests, linters, builds
3. **Update issue status** - Close finished work, update in-progress items
4. **PUSH TO REMOTE** - This is MANDATORY:
```bash
git pull --rebase
bd sync
git push
git status # MUST show "up to date with origin"
```
5. **Clean up** - Clear stashes, prune remote branches
6. **Verify** - All changes committed AND pushed
7. **Hand off** - Provide context for next session
**CRITICAL RULES:** **CRITICAL RULES:**
- Work is NOT complete until `git push` succeeds - Work is NOT complete until `git push` succeeds
- NEVER stop before pushing - that leaves work stranded locally - NEVER stop before pushing - that leaves work stranded locally
- NEVER say "ready to push when you are" - YOU must push - NEVER say "ready to push when you are" - YOU must push
- If push fails, resolve and retry until it succeeds - If push fails, resolve and retry until it succeeds
<!-- END BEADS INTEGRATION -->

View File

@@ -10,6 +10,14 @@ var is_cursor_locked: bool = false # When true, hourglass is shown and cursor c
func get_scene() -> Scene: func get_scene() -> Scene:
return $SceneViewport/background return $SceneViewport/background
func get_current_room_name() -> String:
var scene = get_scene()
if scene and scene.get_script():
var script_path = scene.get_script().resource_path
if script_path.begins_with("res://scenes/"):
return script_path.trim_suffix(".gd").get_file()
return ""
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready(): func _ready():
# get_scene().connect("transitioned", Callable($SceneViewport/label, "_on_transitioned")) # get_scene().connect("transitioned", Callable($SceneViewport/label, "_on_transitioned"))

View File

@@ -41,6 +41,44 @@ signal exited(lab)
points_resource = value points_resource = value
_update_polygon_from_resource() _update_polygon_from_resource()
func sample_polygon_point() -> Vector2:
if polygon.is_empty():
return position
var sum_x = 0.0
var sum_y = 0.0
for p in polygon:
sum_x += p.x
sum_y += p.y
return to_global(Vector2(sum_x / polygon.size(), sum_y / polygon.size()))
func get_screen_click_point() -> Vector2i:
var world_pt = sample_polygon_point()
var vp = get_viewport()
var screen_pt = vp.get_canvas_transform() * world_pt
return Vector2i(int(screen_pt.x), int(screen_pt.y))
func mock_interact(action = 0) -> void:
action = int(action)
var script_builder = get_node_or_null("/root/Node2D/GameScript")
if script_builder and script_builder.current_script and not script_builder.current_script.can_interrupt:
return
if interacted.get_connections().size() > 0:
emit_signal("interacted")
return
match action:
ActionState.Action.WALK:
if walked.get_connections().size() > 0:
emit_signal("walked")
ActionState.Action.LOOK:
if looked.get_connections().size() > 0:
emit_signal("looked")
ActionState.Action.TOUCH:
if touched.get_connections().size() > 0:
emit_signal("touched")
ActionState.Action.TALK:
if talked.get_connections().size() > 0:
emit_signal("talked")
func _input(event): func _input(event):
if not Engine.is_editor_hint(): if not Engine.is_editor_hint():
if event is InputEventMouseButton and Input.is_action_just_released("interact"): if event is InputEventMouseButton and Input.is_action_just_released("interact"):

135
docs/code-review-pr3.md Normal file
View File

@@ -0,0 +1,135 @@
## Code Review: PR 3 - "Stealth Cymbal"
### Scope
- **Branch:** stealth-cymbal
- **Base:** master
- **Files Changed:** 86 files (~1576 insertions, ~230 deletions)
- **Key Changes:** KQ4 Room Navigator skill, UID repair tools, MCP interaction server, room scene updates
### Review Team
-**ce-correctness-reviewer** - Logic errors, edge cases, state bugs
-**ce-testing-reviewer** - Coverage gaps, weak assertions, brittle tests
-**ce-maintainability-reviewer** - Coupling, complexity, naming, dead code
-**ce-project-standards-reviewer** - CLAUDE.md and AGENTS.md compliance
-**ce-agent-native-reviewer** - Agent-accessible design patterns
-**ce-learnings-researcher** - Past issues in docs/solutions/
---
### P1 -- High
| # | File | Issue | Reviewer | Confidence | Route |
|---|------|------|----------|------------|-------|
| 1 | `scenes/kq4_004_ogres_cottage/kq4_004_ogres_cottage.tscn:46` | UID mismatch - target UID for kq4_028_mine_entrance points to non-existent room | correctness | 75% | manual → downstream-resolver |
| 2 | `scripts/mcp_interaction_server.gd` | No runtime tests for 80+ TCP command handlers (171KB script) | testing | 50% | manual → downstream-resolver |
---
### P2 -- Moderate
| # | File | Issue | Reviewer | Confidence | Route |
|---|------|------|----------|------------|-------|
| 3 | `scenes/kq4_098_transitional_room/kq4_098_transitional_room.tscn` | Missing .uid companion file | correctness | 75% | manual → review-fixer |
| 4 | `scripts/build_room_graph.py:184` | `_resolve_target_room` returns None without explicit handling in callers | correctness | 75% | safe_auto → review-fixer |
| 5 | `tools/repair_uids.py:322` | Code duplication in fix_stale_target with inconsistent error handling | correctness | 75% | safe_auto → review-fixer |
| 6 | `tools/repair_uids.py` | No tests for file mutation operations (UID sync, target replacement) | testing | 75% | manual → downstream-resolver |
| 7 | `scripts/build_room_graph.py` | No tests for BFS edge cases (disconnected components, malformed UIDs) | testing | 75% | manual → downstream-resolver |
| 8 | `MainGame.gd`, `SetPiece_.gd` | No tests for signal emission logic and cursor action routing | testing | 50% | manual → downstream-resolver |
| 9 | `SetPiece_.gd:mock_interact()` | Unnecessary indirection - duplicates `_input()` logic | maintainability | 75% | gated_auto → downstream-resolver |
| 10 | `SetPiece_.gd` | Unused `entered/exited` signals with unclear `lab` param | maintainability | 75% | gated_auto → downstream-resolver |
| 11 | `tools/kq4_room_navigator.py` | sys.path manipulation creates coupling | maintainability | 50% | gated_auto → downstream-resolver |
---
### P3 -- Low
| # | File | Issue | Reviewer | Confidence | Route |
|---|------|------|----------|------------|-------|
| 12 | `MainGame.gd:13` | `get_current_room_name()` returns empty string on failure - silent failure mode | correctness | 50% | advisory → downstream-resolver |
| 13 | `scripts/mcp_interaction_server.gd:42` | Fixed 30-second timeout could mask real hangs | correctness | 50% | advisory → downstream-resolver |
| 14 | `SetPiece_.gd:60` | `mock_interact()` doesn't validate target room exists | correctness | 50% | advisory → downstream-resolver |
| 15 | `tools/kq4_room_navigator.py` | No tests for CLI tool | testing | 75% | advisory → human |
| 16 | `MainGame.gd` | Placeholder comment in `_ready()` - dead code | maintainability | 100% | advisory → human |
| 17 | `MainGame.gd` | Commented-out code with typo - dead code | maintainability | 100% | advisory → human |
| 18 | `scripts/mcp_interaction_server.gd` | Potentially incomplete implementation | maintainability | 50% | advisory → human |
| 19 | `.opencode/skills/kq4-room-navigator/SKILL.md:38-41` | Code block formatting changed from JSON to plain text | project-standards | 75% | advisory → human |
| 20 | `tools/kq4_room_navigator.py` | Dataclass overhead for Mismatch in CLI tool | maintainability | 50% | advisory → human |
| 21 | `.opencode/skills/kq4-room-navigator/SKILL.md` | Missing explicit retry guidance for `_busy` protocol | agent-native | 75% | advisory → human |
| 22 | `.opencode/skills/kq4-room-navigator/SKILL.md` | `mock_interact` vs `mock_interaction` typo in error messages | agent-native | 75% | safe_auto → review-fixer |
| 23 | `.opencode/skills/kq4-room-navigator/SKILL.md` | `--navigate` flag documented but not implemented in CLI | agent-native | 50% | gated_auto → downstream-resolver |
---
### Requirements Completeness
**No plan document found** for this PR. The PR title "Stealth Cymbal" is ambiguous and doesn't reference a specific plan.
---
### Pre-existing Issues
None identified in this review.
---
### Learnings & Past Solutions
**No institutional learnings found.** The `docs/solutions/` directory does not exist in this repository. Consider using `/ce-compound` skill after significant work to document:
- UID generation patterns (make_uid.py + .uid files)
- Navigation/pathfinding setup (NavigationServer2D)
- MCP server integration learnings
- Room transition wiring patterns
---
### Agent-Native Gaps
1. **Offline-Only Graph Discovery** - Agents can't dynamically discover room connectivity at runtime
2. **Manual Verification** - Navigation completion requires polling instead of signals
3. **No Path Validation** - Agents can attempt invalid navigation without guardrails
4. **Incomplete CLI** - The `--navigate` flag is documented but not implemented
---
### Residual Risks
1. **UID mismatch risk** - Room graph connectivity depends on UID consistency across all .tscn and .uid files. If UIDs drift from manual edits, pathfinding will fail even though runtime transitions work.
- **Mitigation:** Run `tools/repair_uids.py --fix` before each significant room update. Consider integrating UID validation into CI pipeline.
2. **Timeout risk** - The MCP server's `_busy` flag uses a fixed 30-second timeout. If navigation animations or other operations take longer, commands may be prematurely reset.
- **Mitigation:** Monitor `_busy` timeout warnings in logs. Consider making configurable or implementing per-command timeout overrides.
3. **Arbitrary code execution** - MCP eval command allows arbitrary code execution without guardrails.
4. **Heuristic risk** - UID auto-resolution in repair_uids.py may produce incorrect fixes based on heuristics.
---
### Testing Gaps
1. **No automated tests for UID consistency** across room transitions
2. **No tests for pathfinding edge cases** (disconnected rooms, single-room graphs, self-loops)
3. **No tests for MCP server command timeout** behavior under load
4. **No validation** that all TransitionPiece targets point to existing rooms
5. **No unit tests** for UID mismatch detection in repair_uids.py
6. **No tests** for BFS pathfinding edge cases in build_room_graph.py
7. **No tests** for SetPiece signal emission logic
8. **No tests** for busy-state timeout recovery in MCP server
---
### Coverage
- **Findings:** 23 total (2 P1, 9 P2, 12 P3)
- **Safe-auto (fixable now):** 3 findings
- **Manual (needs handoff):** 4 findings
- **Gated-auto (needs review):** 4 findings
- **Advisory (report-only):** 12 findings
- **Failed reviewers:** 0 of 6
---
### Verdict
**Ready with fixes**
**Fix order:**
1. **Critical:** Fix UID mismatch in kq4_004_ogres_cottage.tscn (finding #1) - this breaks navigation
2. **High:** Add missing .uid file for kq4_098_transitional_room (finding #3)
3. **Medium:** Fix None handling in build_room_graph.py (finding #4)
4. **Medium:** Consolidate code duplication in repair_uids.py (finding #5)
5. **Low:** Address dead code and formatting issues (findings #12-23)
**Before merge:** Run `tools/repair_uids.py --fix` to synchronize all UIDs and verify the UID mismatch is resolved.

View File

@@ -1,6 +1,6 @@
{ [resource _type="ItemDefinition" uid="uid://dovkj7b9xqwpp"]
"item_id": "splash",
"name": "Splash", id = "splash"
"icon": "res://splash.png", name = "Splash"
"combination_category": "potion" combination_category = "potion"
} icon = null

View File

@@ -1,14 +1,11 @@
{ {
"$schema": "https://opencode.ai/config.json", "$schema": "https://opencode.ai/config.json",
"mcp": { "mcp": {
"playwright": { "godot": {
"type": "local", "type": "local",
"command": [ "command": [
"npx", "node",
"@playwright/mcp@latest", "./godot-mcp/build/index.js"
"--executable-path",
"/snap/bin/chromium",
"--isolated"
], ],
"enabled": true "enabled": true
} }

View File

@@ -6,9 +6,9 @@
[ext_resource type="PackedScene" uid="uid://c4vc1wx7k6cw" path="res://TransitionPiece.tscn" id="4_abc"] [ext_resource type="PackedScene" uid="uid://c4vc1wx7k6cw" path="res://TransitionPiece.tscn" id="4_abc"]
[sub_resource type="NavigationPolygon" id="NavigationPolygon_ppo6b"] [sub_resource type="NavigationPolygon" id="NavigationPolygon_ppo6b"]
vertices = PackedVector2Array(366.85156, 1243.1484, -140.97656, 1182.2422, -76.0625, 588.09375, -30.171875, 216.07031, 1221.4063, 226.97656, 1994.1406, 468.39844, 2011.7969, 1321.9766, 1052.7422, 1419.8672, -76.0625, 588.0781) vertices = PackedVector2Array(1221.4063, 226.97656, 1972.6406, 461.6797, 1494.5234, 634.3203, 1670.7422, 856.46094, 2096.0781, 905.6797, 2013.6172, 1321.7969, 1052.7422, 1419.8672, 366.85156, 1243.1484, -140.97656, 1182.2422, -76.0625, 588.09375, -76.0625, 588.0781, -30.171875, 216.07031)
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(3, 4, 5, 6, 7, 0), PackedInt32Array(3, 2, 8)]) polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2), PackedInt32Array(3, 4, 5, 6), PackedInt32Array(7, 8, 9), PackedInt32Array(2, 3, 6, 7), PackedInt32Array(10, 11, 0, 2, 7, 9)])
outlines = Array[PackedVector2Array]([PackedVector2Array(-39, 206, 1223, 217, 2004, 461, 2022, 1331, 1052, 1430, 365, 1253, -152, 1191, -86, 587)]) outlines = Array[PackedVector2Array]([PackedVector2Array(-39, 206, 1223, 217, 2004, 461, 1511, 639, 1676, 847, 2108, 897, 2022, 1331, 1052, 1430, 365, 1253, -152, 1191, -86, 587)])
[node name="background2" type="Node2D" unique_id=657573819] [node name="background2" type="Node2D" unique_id=657573819]
y_sort_enabled = true y_sort_enabled = true
@@ -39,6 +39,7 @@ position = Vector2(194, 819)
[node name="kq4_025_beach_at_river_delta" parent="." unique_id=484638394 instance=ExtResource("4_abc")] [node name="kq4_025_beach_at_river_delta" parent="." unique_id=484638394 instance=ExtResource("4_abc")]
position = Vector2(910, -213) position = Vector2(910, -213)
color = Color(1, 0.627451, 1, 0.4)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_001_beach" appear_at_node = "kq4_001_beach"
target = "uid://3vcewxyhbqica" target = "uid://3vcewxyhbqica"
@@ -51,10 +52,10 @@ position = Vector2(133, 643)
position = Vector2(174, 519) position = Vector2(174, 519)
[node name="kq4_002_meadow" parent="." unique_id=1916756563 instance=ExtResource("4_abc")] [node name="kq4_002_meadow" parent="." unique_id=1916756563 instance=ExtResource("4_abc")]
position = Vector2(1766, 74) position = Vector2(1760, 373)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_001_beach" appear_at_node = "kq4_001_beach"
target = "uid://1489d4oh9twtu" target = "uid://dxs1tr5yvmoba"
label = "Meadow" label = "Meadow"
[node name="entrance" parent="kq4_002_meadow" index="0"] [node name="entrance" parent="kq4_002_meadow" index="0"]
@@ -88,12 +89,6 @@ position = Vector2(506, 555)
[node name="exit" parent="kq4_031_open_ocean" index="1"] [node name="exit" parent="kq4_031_open_ocean" index="1"]
position = Vector2(-64, 534) position = Vector2(-64, 534)
[node name="grass" type="Polygon2D" parent="." unique_id=1234567890]
position = Vector2(2891, 1072)
rotation = -3.1415927
scale = Vector2(0.78, 0.78)
polygon = PackedVector2Array(1184.6155, -14.102417, 2534.6157, -17.948486, 2238.462, 328.20532, 1600, 378.20532, 1441.0256, 453.8463, 1639.7437, 551.2822, 1710.2566, 610.2566, 1426.9231, 850.0002, 2128.205, 1075.6412, 1869.2308, 1162.8208, 1230.7693, 1142.3079, 1184.6155, 297.43604)
[connection signal="interacted" from="kq4_025_beach_at_river_delta" to="." method="_on_beach_at_river_delta_interacted"] [connection signal="interacted" from="kq4_025_beach_at_river_delta" to="." method="_on_beach_at_river_delta_interacted"]
[connection signal="interacted" from="kq4_002_meadow" to="." method="_on_meadow_interacted"] [connection signal="interacted" from="kq4_002_meadow" to="." method="_on_meadow_interacted"]
[connection signal="interacted" from="kq4_007_fishermans_shack" to="." method="_on_fishermans_shack_interacted"] [connection signal="interacted" from="kq4_007_fishermans_shack" to="." method="_on_fishermans_shack_interacted"]

View File

@@ -1 +1 @@
uid://1rwfkejhz94hp uid://dlg6010ym2uw4

View File

@@ -58,7 +58,7 @@ position = Vector2(174, 519)
position = Vector2(1766, 74) position = Vector2(1766, 74)
polygon = PackedVector2Array(-79, 729, -86, 873, 261, 904, 249, 694) polygon = PackedVector2Array(-79, 729, -86, 873, 261, 904, 249, 694)
appear_at_node = "kq4_002_meadow" appear_at_node = "kq4_002_meadow"
target = "uid://151dbn9bybiwx" target = "uid://dyk4rcqsk3aed"
label = "Fountain Pool" label = "Fountain Pool"
[node name="entrance" parent="kq4_003_fountain_pool" index="0"] [node name="entrance" parent="kq4_003_fountain_pool" index="0"]
@@ -71,7 +71,7 @@ position = Vector2(227, 790)
position = Vector2(910, 542) position = Vector2(910, 542)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_002_meadow" appear_at_node = "kq4_002_meadow"
target = "uid://bncmzju9ibkv" target = "uid://bncm0jvaibkv"
label = "Back of Fisherman's Shack" label = "Back of Fisherman's Shack"
[node name="entrance" parent="kq4_008_back_of_fishermans_shack" index="0"] [node name="entrance" parent="kq4_008_back_of_fishermans_shack" index="0"]
@@ -83,7 +83,7 @@ position = Vector2(151, 615)
[node name="kq4_001_beach" parent="." unique_id=1117747814 instance=ExtResource("4_abc")] [node name="kq4_001_beach" parent="." unique_id=1117747814 instance=ExtResource("4_abc")]
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_002_meadow" appear_at_node = "kq4_002_meadow"
target = "uid://1rwfkejhz94hp" target = "uid://dlg6010ym2uw4"
label = "Beach" label = "Beach"
[node name="entrance" parent="kq4_001_beach" index="0"] [node name="entrance" parent="kq4_001_beach" index="0"]

View File

@@ -1 +1 @@
uid://1489d4oh9twtu uid://dxs1tr5yvmoba

View File

@@ -48,7 +48,7 @@ position = Vector2(194, 819)
position = Vector2(-150, 100) position = Vector2(-150, 100)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_003_fountain_pool" appear_at_node = "kq4_003_fountain_pool"
target = "uid://1489d4oh9twtu" target = "uid://dxs1tr5yvmoba"
label = "Meadow" label = "Meadow"
[node name="entrance" parent="kq4_002_meadow" index="0"] [node name="entrance" parent="kq4_002_meadow" index="0"]
@@ -75,7 +75,7 @@ position = Vector2(66, 71)
position = Vector2(910, 542) position = Vector2(910, 542)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_003_fountain_pool" appear_at_node = "kq4_003_fountain_pool"
target = "uid://1hkplw2a78b1y" target = "uid://da4h2ljrt02ie"
label = "Shady Wooded Forest" label = "Shady Wooded Forest"
[node name="entrance" parent="kq4_009_shady_wooded_area" index="0"] [node name="entrance" parent="kq4_009_shady_wooded_area" index="0"]
@@ -89,7 +89,7 @@ position = Vector2(500, 100)
color = Color(1, 1, 1, 1) color = Color(1, 1, 1, 1)
polygon = PackedVector2Array(349, 278, 398, 417, 593, 411, 650, 277) polygon = PackedVector2Array(349, 278, 398, 417, 593, 411, 650, 277)
appear_at_node = "kq4_003_fountain_pool" appear_at_node = "kq4_003_fountain_pool"
target = "uid://1fpyosj18xls7" target = "uid://c8aq5g1juqdam"
label = "Forest Path" label = "Forest Path"
[node name="entrance" parent="kq4_027_forest_path" index="0"] [node name="entrance" parent="kq4_027_forest_path" index="0"]

View File

@@ -1 +1 @@
uid://151dbn9bybiwx uid://dyk4rcqsk3aed

View File

@@ -43,7 +43,7 @@ position = Vector2(194, 819)
position = Vector2(910, -213) position = Vector2(910, -213)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_004_ogres_cottage" appear_at_node = "kq4_004_ogres_cottage"
target = "uid://qkcwifq2lb9m" target = "uid://qkcwifq2lcam"
label = "Mine Entrance" label = "Mine Entrance"
[node name="entrance" parent="kq4_028_mine_entrance" index="0"] [node name="entrance" parent="kq4_028_mine_entrance" index="0"]
@@ -57,7 +57,7 @@ position = Vector2(5, 888)
color = Color(1, 1, 1, 1) color = Color(1, 1, 1, 1)
polygon = PackedVector2Array(-85, -86, -65, 128, 264, 167, 260, -78) polygon = PackedVector2Array(-85, -86, -65, 128, 264, 167, 260, -78)
appear_at_node = "kq4_004_ogres_cottage" appear_at_node = "kq4_004_ogres_cottage"
target = "uid://151dbn9bybiwx" target = "uid://dyk4rcqsk3aed"
label = "Fountain Pool" label = "Fountain Pool"
[node name="entrance" parent="kq4_003_fountain_pool" index="0"] [node name="entrance" parent="kq4_003_fountain_pool" index="0"]

View File

@@ -1 +1 @@
uid://1nxmm3b1kcdm1 uid://dhie3qsi5333g

View File

@@ -46,7 +46,7 @@ position = Vector2(194, 819)
position = Vector2(910, -213) position = Vector2(910, -213)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_005_forest_grove" appear_at_node = "kq4_005_forest_grove"
target = "uid://1sfzaldfq5kn1" target = "uid://dlyrp8twdxb4g"
label = "Dense Forest" label = "Dense Forest"
[node name="entrance" parent="kq4_029_dense_forest" index="0"] [node name="entrance" parent="kq4_029_dense_forest" index="0"]
@@ -84,7 +84,7 @@ position = Vector2(151, 615)
[node name="kq4_004_ogres_cottage" parent="." unique_id=1117747814 instance=ExtResource("4_abc")] [node name="kq4_004_ogres_cottage" parent="." unique_id=1117747814 instance=ExtResource("4_abc")]
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_005_forest_grove" appear_at_node = "kq4_005_forest_grove"
target = "uid://1nxmm3b1kcdm1" target = "uid://dhie3qsi5333g"
label = "Ogre's Cottage" label = "Ogre's Cottage"
[node name="entrance" parent="kq4_004_ogres_cottage" index="0"] [node name="entrance" parent="kq4_004_ogres_cottage" index="0"]

View File

@@ -1,19 +1,18 @@
[gd_scene format=3 uid="uid://yj4t7thmkoct"] [gd_scene format=3 uid="uid://yj4t7thmkoct"]
[ext_resource type="Script" uid="uid://s050ktv31wgy" path="res://scenes/kq4_007_fishermans_shack/kq4_007_fishermans_shack.gd" id="1_abc"] [ext_resource type="Script" uid="uid://s050ktv31wgy" path="res://scenes/kq4_007_fishermans_shack/kq4_007_fishermans_shack.gd" id="1_abc"]
[ext_resource type="Texture2D" uid="uid://djbrg233lxgyy" path="res://scenes/kq4_007_fishermans_shack/caption_3_840023845_generated.png" id="2_86g5m"] [ext_resource type="Texture2D" uid="uid://cutwtrdheaqqf" path="res://scenes/kq4_007_fishermans_shack/007_caption_1_2900131323_generated.png" id="2_0fahy"]
[ext_resource type="Script" uid="uid://xmphq3i0wbg3" path="res://ScalePoint_.gd" id="3_abc"] [ext_resource type="Script" uid="uid://xmphq3i0wbg3" path="res://ScalePoint_.gd" id="3_abc"]
[ext_resource type="PackedScene" uid="uid://c4vc1wx7k6cw" path="res://TransitionPiece.tscn" id="4_abc"] [ext_resource type="PackedScene" uid="uid://c4vc1wx7k6cw" path="res://TransitionPiece.tscn" id="4_abc"]
[ext_resource type="Resource" uid="uid://bbepaofrwlurc" path="res://scenes/kq4_007_fishermans_shack/fishermans_house_polygon.tres" id="5_house"] [ext_resource type="Resource" uid="uid://bbepaofrwlurc" path="res://scenes/kq4_007_fishermans_shack/fishermans_house_polygon.tres" id="5_house"]
[ext_resource type="Resource" uid="uid://4ari7a2nudri" path="res://scenes/kq4_007_fishermans_shack/door_polygon.tres" id="7_door"]
[ext_resource type="Resource" uid="uid://2qf4mwncdwxwe" path="res://scenes/kq4_007_fishermans_shack/window_polygon.tres" id="8_window"]
[ext_resource type="Resource" uid="uid://3bpn8dhixs0k8" path="res://scenes/kq4_007_fishermans_shack/pier_polygon.tres" id="9_pier"]
[ext_resource type="Script" uid="uid://bounwnqg34t5k" path="res://SetPiece_.gd" id="6_setpiece"] [ext_resource type="Script" uid="uid://bounwnqg34t5k" path="res://SetPiece_.gd" id="6_setpiece"]
[ext_resource type="Resource" uid="uid://ok1ii7kfitl1" path="res://scenes/kq4_007_fishermans_shack/window_polygon.tres" id="8_window"]
[ext_resource type="Resource" uid="uid://8uk3x1q0evav" path="res://scenes/kq4_007_fishermans_shack/pier_polygon.tres" id="9_pier"]
[sub_resource type="NavigationPolygon" id="NavigationPolygon_ppo6b"] [sub_resource type="NavigationPolygon" id="NavigationPolygon_ppo6b"]
vertices = PackedVector2Array(366.85156, 1243.1484, -140.97656, 1182.2422, -76.0625, 588.09375, -30.171875, 216.07031, 1221.4063, 226.97656, 1994.1406, 468.39844, 2011.7969, 1321.9766, 1052.7422, 1419.8672, -76.0625, 588.0781) vertices = PackedVector2Array(939.6328, 723.3828, 1074.6484, 437.28125, 1103.3594, 518.8906, 1031.0625, 713.72656, 977.15625, 854.8125, -44.390625, 881.84375, -77.38281, 826.3594, 1830.6484, 1125.4375, 2002.5078, 857.1406, 1986.4922, 1168.1094, 1826.6094, 1139.9297, 1492.5703, 813.90625, 1369.3281, 841.0781, 1254.5234, 765.1094, 1069.3594, 785.6875, 1058.9766, 940.2578, 1022.7578, 992.7031, 1248.6719, 1145.0391, 932.02344, 1180.7969)
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(3, 4, 5, 6, 7, 0), PackedInt32Array(3, 2, 8)]) polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3, 4), PackedInt32Array(5, 6, 0, 4), PackedInt32Array(7, 8, 9, 10), PackedInt32Array(11, 8, 7, 12), PackedInt32Array(13, 11, 12), PackedInt32Array(14, 13, 12, 15, 4), PackedInt32Array(4, 3, 14), PackedInt32Array(16, 4, 15, 17), PackedInt32Array(18, 16, 17), PackedInt32Array(9, 18, 17, 10)])
outlines = Array[PackedVector2Array]([PackedVector2Array(-39, 206, 1223, 217, 2004, 461, 2022, 1331, 1052, 1430, 365, 1253, -152, 1191, -86, 587)]) outlines = Array[PackedVector2Array]([PackedVector2Array(1075, 775, 1255, 755, 1494, 804, 2013, 848, 1996, 1178, 916, 1191, 1012, 992, 970, 865, -50, 892, -94, 818, 933, 714, 1076, 411, 1114, 519, 1042, 713), PackedVector2Array(1368, 852, 1077, 945, 1253, 1135, 1819, 1130)])
[node name="background" type="Node2D" unique_id=657573819] [node name="background" type="Node2D" unique_id=657573819]
y_sort_enabled = true y_sort_enabled = true
@@ -21,7 +20,7 @@ script = ExtResource("1_abc")
[node name="bg" type="Sprite2D" parent="." unique_id=874052749] [node name="bg" type="Sprite2D" parent="." unique_id=874052749]
scale = Vector2(0.78, 0.78) scale = Vector2(0.78, 0.78)
texture = ExtResource("2_86g5m") texture = ExtResource("2_0fahy")
centered = false centered = false
[node name="StartScalePoint" type="Node2D" parent="." unique_id=1640687858] [node name="StartScalePoint" type="Node2D" parent="." unique_id=1640687858]
@@ -43,10 +42,10 @@ navigation_polygon = SubResource("NavigationPolygon_ppo6b")
position = Vector2(194, 819) position = Vector2(194, 819)
[node name="kq4_001_beach" parent="." unique_id=484638394 instance=ExtResource("4_abc")] [node name="kq4_001_beach" parent="." unique_id=484638394 instance=ExtResource("4_abc")]
position = Vector2(910, -213) position = Vector2(909, -37)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-284, 348, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_007_fishermans_shack" appear_at_node = "kq4_007_fishermans_shack"
target = "uid://1rwfkejhz94hp" target = "uid://dlg6010ym2uw4"
label = "Beach" label = "Beach"
[node name="entrance" parent="kq4_001_beach" index="0"] [node name="entrance" parent="kq4_001_beach" index="0"]
@@ -56,10 +55,10 @@ position = Vector2(133, 643)
position = Vector2(174, 519) position = Vector2(174, 519)
[node name="kq4_008_back_of_fishermans_shack" parent="." unique_id=1916756563 instance=ExtResource("4_abc")] [node name="kq4_008_back_of_fishermans_shack" parent="." unique_id=1916756563 instance=ExtResource("4_abc")]
position = Vector2(1766, 74) position = Vector2(1747, 367)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_007_fishermans_shack" appear_at_node = "kq4_007_fishermans_shack"
target = "uid://bncmzju9ibkv" target = "uid://bncm0jvaibkv"
label = "Back of Fisherman's Shack" label = "Back of Fisherman's Shack"
[node name="entrance" parent="kq4_008_back_of_fishermans_shack" index="0"] [node name="entrance" parent="kq4_008_back_of_fishermans_shack" index="0"]
@@ -72,7 +71,7 @@ position = Vector2(293, 554)
position = Vector2(910, 542) position = Vector2(910, 542)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_007_fishermans_shack" appear_at_node = "kq4_007_fishermans_shack"
target = "uid://2bqawc9w4uu59" target = "uid://d4a2d0rfqnmmo"
label = "Beach" label = "Beach"
[node name="entrance" parent="kq4_013_beach" index="0"] [node name="entrance" parent="kq4_013_beach" index="0"]
@@ -82,42 +81,36 @@ position = Vector2(118, 514)
position = Vector2(151, 615) position = Vector2(151, 615)
[node name="kq4_042_fishermans_shack_inside" parent="." unique_id=1117747814 instance=ExtResource("4_abc")] [node name="kq4_042_fishermans_shack_inside" parent="." unique_id=1117747814 instance=ExtResource("4_abc")]
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) position = Vector2(1199, 153)
polygon = PackedVector2Array(36, 345, 27, 614, 211, 636, 261, 284)
appear_at_node = "kq4_007_fishermans_shack" appear_at_node = "kq4_007_fishermans_shack"
target = "uid://2tduhvnjo0iko" target = "uid://2tduhvnjo0iko"
label = "Fisherman's Shack (Inside)" label = "Fisherman's Shack (Inside)"
[node name="entrance" parent="kq4_042_fishermans_shack_inside" index="0"] [node name="entrance" parent="kq4_042_fishermans_shack_inside" index="0"]
position = Vector2(506, 555) position = Vector2(103, 622)
[node name="exit" parent="kq4_042_fishermans_shack_inside" index="1"] [node name="exit" parent="kq4_042_fishermans_shack_inside" index="1"]
position = Vector2(-64, 534) position = Vector2(38, 682)
[node name="fishermans_house" type="Polygon2D" parent="." unique_id=1687430893 groups=["set-piece"]] [node name="fishermans_house" type="Polygon2D" parent="." unique_id=1687430893 groups=["set-piece"]]
scale = Vector2(0.78, 0.78) scale = Vector2(0.78, 0.78)
color = Color(0.5, 0.5, 0.5, 0.25) color = Color(0.5, 0.5, 0.5, 0.25)
polygon = PackedVector2Array(2269, 245, 2339, 677, 2243, 911, 1467.9487, 988.46155, 1102.5641, 748.71796, 1344.8718, 153.84616, 2052, 78) polygon = PackedVector2Array(2603.8462, 65.38462, 2705.1282, 530.7692, 2614.1025, 1020.5129, 1430.7693, 974.359, 1226.9231, 729.4872, 1472, 175, 2052, 78)
script = ExtResource("6_setpiece") script = ExtResource("6_setpiece")
label = "Fisherman's House" label = "Fisherman's House"
points_resource = ExtResource("5_house") points_resource = ExtResource("5_house")
[node name="door" type="Polygon2D" parent="." groups=["set-piece"]] [node name="window" type="Polygon2D" parent="." unique_id=1740759007 groups=["set-piece"]]
position = Vector2(104, 213)
scale = Vector2(0.78, 0.78) scale = Vector2(0.78, 0.78)
color = Color(0.5, 0.5, 0.5, 0.25) color = Color(0.5, 0.5, 0.5, 0.25)
polygon = PackedVector2Array(2495, 84, 2481, 1342, 2468, 1391, 0, 1391, 0, 0, 1675, 0, 2479, 57) polygon = PackedVector2Array(1332.0513, 387.1795, 1465.3846, 392.3077, 1438.4615, 561.53845, 1310.2565, 544.8718)
script = ExtResource("6_setpiece")
label = "Door"
points_resource = ExtResource("7_door")
[node name="window" type="Polygon2D" parent="." groups=["set-piece"]]
scale = Vector2(0.78, 0.78)
color = Color(0.5, 0.5, 0.5, 0.25)
polygon = PackedVector2Array(2495, 86, 2467, 1391, 36, 1391, 0, 1365, 0, 0, 1669, 0, 2463, 60)
script = ExtResource("6_setpiece") script = ExtResource("6_setpiece")
label = "Window" label = "Window"
points_resource = ExtResource("8_window") points_resource = ExtResource("8_window")
[node name="pier" type="Polygon2D" parent="." groups=["set-piece"]] [node name="pier" type="Polygon2D" parent="." unique_id=1756140652 groups=["set-piece"]]
scale = Vector2(0.78, 0.78) scale = Vector2(0.78, 0.78)
color = Color(0.5, 0.5, 0.5, 0.25) color = Color(0.5, 0.5, 0.5, 0.25)
polygon = PackedVector2Array(1011, 1020, 921, 1117, 552, 1143, 164, 1146, 140, 1051, 161, 1012, 251, 955, 889, 951, 983, 979) polygon = PackedVector2Array(1011, 1020, 921, 1117, 552, 1143, 164, 1146, 140, 1051, 161, 1012, 251, 955, 889, 951, 983, 979)
@@ -130,7 +123,6 @@ points_resource = ExtResource("9_pier")
[connection signal="interacted" from="kq4_013_beach" to="." method="_on_beach_2_interacted"] [connection signal="interacted" from="kq4_013_beach" to="." method="_on_beach_2_interacted"]
[connection signal="interacted" from="kq4_042_fishermans_shack_inside" to="." method="_on_fishermans_shack_inside_interacted"] [connection signal="interacted" from="kq4_042_fishermans_shack_inside" to="." method="_on_fishermans_shack_inside_interacted"]
[connection signal="looked" from="fishermans_house" to="." method="_on_fishermans_house_looked"] [connection signal="looked" from="fishermans_house" to="." method="_on_fishermans_house_looked"]
[connection signal="interacted" from="door" to="." method="_on_door_interacted"]
[connection signal="looked" from="window" to="." method="_on_window_looked"] [connection signal="looked" from="window" to="." method="_on_window_looked"]
[connection signal="looked" from="pier" to="." method="_on_pier_looked"] [connection signal="looked" from="pier" to="." method="_on_pier_looked"]

View File

@@ -45,7 +45,7 @@ z_index = 4
position = Vector2(1766, 74) position = Vector2(1766, 74)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_008_back_of_fishermans_shack" appear_at_node = "kq4_008_back_of_fishermans_shack"
target = "uid://1hkplw2a78b1y" target = "uid://da4h2ljrt02ie"
label = "Shady Wooded Area" label = "Shady Wooded Area"
[node name="entrance" parent="kq4_009_shady_wooded_area" index="0"] [node name="entrance" parent="kq4_009_shady_wooded_area" index="0"]
@@ -59,7 +59,7 @@ z_index = 2
position = Vector2(910, -213) position = Vector2(910, -213)
polygon = PackedVector2Array(-631, 454, -539, 610, 376, 658, 769, 610, 748, 475, 348, 381, -594, 362) polygon = PackedVector2Array(-631, 454, -539, 610, 376, 658, 769, 610, 748, 475, 348, 381, -594, 362)
appear_at_node = "kq4_008_back_of_fishermans_shack" appear_at_node = "kq4_008_back_of_fishermans_shack"
target = "uid://1489d4oh9twtu" target = "uid://dxs1tr5yvmoba"
label = "Meadow" label = "Meadow"
[node name="entrance" parent="kq4_002_meadow" index="0"] [node name="entrance" parent="kq4_002_meadow" index="0"]

View File

@@ -1 +1 @@
uid://bncmzju9ibkv uid://bncm0jvaibkv

View File

@@ -45,7 +45,7 @@ position = Vector2(194, 819)
position = Vector2(910, -213) position = Vector2(910, -213)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_009_shady_wooded_area" appear_at_node = "kq4_009_shady_wooded_area"
target = "uid://151dbn9bybiwx" target = "uid://dyk4rcqsk3aed"
label = "Fountain Pool" label = "Fountain Pool"
[node name="entrance" parent="kq4_003_fountain_pool" index="0"] [node name="entrance" parent="kq4_003_fountain_pool" index="0"]
@@ -58,7 +58,7 @@ position = Vector2(174, 519)
position = Vector2(1766, 74) position = Vector2(1766, 74)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_009_shady_wooded_area" appear_at_node = "kq4_009_shady_wooded_area"
target = "uid://3ujj97iw54vo5" target = "uid://bsog5s257pres"
label = "Forest Path" label = "Forest Path"
[node name="entrance" parent="kq4_010_forest_path" index="0"] [node name="entrance" parent="kq4_010_forest_path" index="0"]
@@ -71,7 +71,7 @@ position = Vector2(293, 554)
position = Vector2(-200, 100) position = Vector2(-200, 100)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_009_shady_wooded_area" appear_at_node = "kq4_009_shady_wooded_area"
target = "uid://bncmzju9ibkv" target = "uid://bncm0jvaibkv"
label = "Back of Fisherman's Shack" label = "Back of Fisherman's Shack"
[node name="entrance" parent="kq4_008_back_of_fishermans_shack" index="0"] [node name="entrance" parent="kq4_008_back_of_fishermans_shack" index="0"]
@@ -84,7 +84,7 @@ position = Vector2(100, 480)
position = Vector2(910, 542) position = Vector2(910, 542)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_009_shady_wooded_area" appear_at_node = "kq4_009_shady_wooded_area"
target = "uid://2zga29mwl2ced" target = "uid://xk6xu65nm620"
label = "Frog Pond" label = "Frog Pond"
[node name="entrance" parent="kq4_015_frog_pond" index="0"] [node name="entrance" parent="kq4_015_frog_pond" index="0"]

View File

@@ -1 +1 @@
uid://1hkplw2a78b1y uid://da4h2ljrt02ie

View File

@@ -44,7 +44,7 @@ position = Vector2(194, 819)
position = Vector2(910, -213) position = Vector2(910, -213)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_010_forest_path" appear_at_node = "kq4_010_forest_path"
target = "uid://151dbn9bybiwx" target = "uid://dyk4rcqsk3aed"
label = "Fountain Pool" label = "Fountain Pool"
[node name="entrance" parent="kq4_003_fountain_pool" index="0"] [node name="entrance" parent="kq4_003_fountain_pool" index="0"]
@@ -57,7 +57,7 @@ position = Vector2(174, 519)
position = Vector2(910, -213) position = Vector2(910, -213)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_010_forest_path" appear_at_node = "kq4_010_forest_path"
target = "uid://1nxmm3b1kcdm1" target = "uid://dhie3qsi5333g"
label = "Ogre's Cottage" label = "Ogre's Cottage"
[node name="entrance" parent="kq4_004_ogres_cottage" index="0"] [node name="entrance" parent="kq4_004_ogres_cottage" index="0"]
@@ -83,7 +83,7 @@ position = Vector2(293, 554)
position = Vector2(910, 542) position = Vector2(910, 542)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_010_forest_path" appear_at_node = "kq4_010_forest_path"
target = "uid://27b2k6gky3afg" target = "uid://5gygr0s1n433"
label = "Graveyard" label = "Graveyard"
[node name="entrance" parent="kq4_016_graveyard" index="0"] [node name="entrance" parent="kq4_016_graveyard" index="0"]
@@ -96,7 +96,7 @@ position = Vector2(151, 615)
position = Vector2(-150, 100) position = Vector2(-150, 100)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_010_forest_path" appear_at_node = "kq4_010_forest_path"
target = "uid://1hkplw2a78b1y" target = "uid://da4h2ljrt02ie"
label = "Shady Wooded Area" label = "Shady Wooded Area"
[node name="entrance" parent="kq4_009_shady_wooded_area" index="0"] [node name="entrance" parent="kq4_009_shady_wooded_area" index="0"]

View File

@@ -1 +1 @@
uid://3ujj97iw54vo5 uid://bsog5s257pres

View File

@@ -69,7 +69,7 @@ position = Vector2(293, 554)
position = Vector2(910, 542) position = Vector2(910, 542)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_011_enchanted_grove" appear_at_node = "kq4_011_enchanted_grove"
target = "uid://1kz9yo5f1tpc6" target = "uid://dek2gdmwnmgsl"
label = "Spooky House Exterior" label = "Spooky House Exterior"
[node name="entrance" parent="kq4_017_spooky_house_exterior" index="0"] [node name="entrance" parent="kq4_017_spooky_house_exterior" index="0"]
@@ -81,7 +81,7 @@ position = Vector2(151, 615)
[node name="kq4_010_forest_path" parent="." unique_id=1117747814 instance=ExtResource("4_abc")] [node name="kq4_010_forest_path" parent="." unique_id=1117747814 instance=ExtResource("4_abc")]
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_011_enchanted_grove" appear_at_node = "kq4_011_enchanted_grove"
target = "uid://3ujj97iw54vo5" target = "uid://bsog5s257pres"
label = "Forest Path" label = "Forest Path"
[node name="entrance" parent="kq4_010_forest_path" index="0"] [node name="entrance" parent="kq4_010_forest_path" index="0"]

View File

@@ -4,14 +4,12 @@
[ext_resource type="Texture2D" uid="uid://dbi8vjqvdpc3g" path="res://scenes/kq4_013_beach/caption_2_3376356057_generated.png" id="2_6hbuw"] [ext_resource type="Texture2D" uid="uid://dbi8vjqvdpc3g" path="res://scenes/kq4_013_beach/caption_2_3376356057_generated.png" id="2_6hbuw"]
[ext_resource type="Script" uid="uid://xmphq3i0wbg3" path="res://ScalePoint_.gd" id="3_abc"] [ext_resource type="Script" uid="uid://xmphq3i0wbg3" path="res://ScalePoint_.gd" id="3_abc"]
[ext_resource type="PackedScene" uid="uid://c4vc1wx7k6cw" path="res://TransitionPiece.tscn" id="4_abc"] [ext_resource type="PackedScene" uid="uid://c4vc1wx7k6cw" path="res://TransitionPiece.tscn" id="4_abc"]
[ext_resource type="Resource" uid="uid://qtlmw98rwpqa" path="res://scenes/kq4_013_beach/dock_polygon.tres" id="5_dock"] [ext_resource type="Script" uid="uid://bounwnqg34t5k" path="res://SetPiece_.gd" id="8_setpiece"]
[ext_resource type="Resource" uid="uid://316m70krnlnbx" path="res://scenes/kq4_013_beach/cottage_polygon.tres" id="6_cottage"]
[ext_resource type="Script" uid="uid://cxm4y5s6pwpm8" path="res://SetPiece_.gd" id="8_setpiece"]
[sub_resource type="NavigationPolygon" id="NavigationPolygon_ppo6b"] [sub_resource type="NavigationPolygon" id="NavigationPolygon_ppo6b"]
vertices = PackedVector2Array(366.85156, 1243.1484, -140.97656, 1182.2422, -76.0625, 588.09375, -30.171875, 216.07031, 1221.4063, 226.97656, 1994.1406, 468.39844, 2011.7969, 1321.9766, 1052.7422, 1419.8672, -76.0625, 588.0781) vertices = PackedVector2Array(1048.75, 1418.8438, 399.21094, 1251.4922, 947.15625, 1057.3594, 1348.4688, 1099.2109, 2089.6016, 938, 2080.0781, 1176.6719, 1953.6016, 1133.1719, 1946.5234, 964.28906, 2019.1328, 938, 1419.9688, 891.03906, 1946.8594, 887.02344, 1545.1484, 983.40625, 1161.7578, 751.46875, 1245.3984, 654.03906, 2017.6094, 1316.2969, 1655.7031, 1083.8516, 1786.7813, 1076.4688, 968.3672, 886.64844, 1543.0078, 1000.03125, 1786.7813, 1076.4609)
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(3, 4, 5, 6, 7, 0), PackedInt32Array(3, 2, 8)]) polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(4, 5, 6, 7, 8), PackedInt32Array(9, 10, 8, 7, 11), PackedInt32Array(12, 13, 9, 3), PackedInt32Array(6, 5, 14, 15, 16), PackedInt32Array(3, 2, 17, 12), PackedInt32Array(3, 9, 11, 18), PackedInt32Array(15, 3, 18, 19, 16)])
outlines = Array[PackedVector2Array]([PackedVector2Array(-39, 206, 1223, 217, 2004, 461, 2022, 1331, 1052, 1430, 365, 1253, -152, 1191, -86, 587)]) outlines = Array[PackedVector2Array]([PackedVector2Array(1155, 744, 1246, 638, 1425, 881, 1950, 877, 2079, 968, 1554, 993, 1790, 1067, 1943, 1119, 1935, 928, 2100, 928, 2090, 1179, 2022, 1331, 1653, 1094, 1353, 1109, 1052, 1430, 365, 1253, 938, 1050, 959, 881)])
[node name="background" type="Node2D" unique_id=657573819] [node name="background" type="Node2D" unique_id=657573819]
y_sort_enabled = true y_sort_enabled = true
@@ -34,14 +32,14 @@ script = ExtResource("3_abc")
target_scale = 0.35 target_scale = 0.35
[node name="pathfind" type="NavigationRegion2D" parent="." unique_id=1418661203] [node name="pathfind" type="NavigationRegion2D" parent="." unique_id=1418661203]
position = Vector2(-1, 0) position = Vector2(-1, -107)
navigation_polygon = SubResource("NavigationPolygon_ppo6b") navigation_polygon = SubResource("NavigationPolygon_ppo6b")
[node name="default-starting-point" type="Node2D" parent="." unique_id=1018141532] [node name="default-starting-point" type="Node2D" parent="." unique_id=1018141532]
position = Vector2(194, 819) position = Vector2(194, 819)
[node name="kq4_007_fishermans_shack" parent="." unique_id=484638394 instance=ExtResource("4_abc")] [node name="kq4_007_fishermans_shack" parent="." unique_id=484638394 instance=ExtResource("4_abc")]
position = Vector2(910, -213) position = Vector2(1180, 48)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_013_beach" appear_at_node = "kq4_013_beach"
target = "uid://yj4t7thmkoct" target = "uid://yj4t7thmkoct"
@@ -54,14 +52,14 @@ position = Vector2(133, 643)
position = Vector2(174, 519) position = Vector2(174, 519)
[node name="kq4_014_green_meadow" parent="." unique_id=1916756563 instance=ExtResource("4_abc")] [node name="kq4_014_green_meadow" parent="." unique_id=1916756563 instance=ExtResource("4_abc")]
position = Vector2(1766, 74) position = Vector2(1705, 327)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_013_beach" appear_at_node = "kq4_013_beach"
target = "uid://tkeyuep0ivo6" target = "uid://tkeyuep0ivo6"
label = "Green Meadow" label = "Green Meadow"
[node name="entrance" parent="kq4_014_green_meadow" index="0"] [node name="entrance" parent="kq4_014_green_meadow" index="0"]
position = Vector2(24, 565) position = Vector2(-91, 519)
[node name="exit" parent="kq4_014_green_meadow" index="1"] [node name="exit" parent="kq4_014_green_meadow" index="1"]
position = Vector2(293, 554) position = Vector2(293, 554)
@@ -93,17 +91,17 @@ position = Vector2(-64, 534)
[node name="dock" type="Polygon2D" parent="." unique_id=123456789] [node name="dock" type="Polygon2D" parent="." unique_id=123456789]
scale = Vector2(0.78, 0.78) scale = Vector2(0.78, 0.78)
color = Color(1, 1, 1, 0.25)
polygon = PackedVector2Array(0, 0, 100, 0, 100, 50, 0, 50) polygon = PackedVector2Array(0, 0, 100, 0, 100, 50, 0, 50)
script = ExtResource("8_setpiece") script = ExtResource("8_setpiece")
label = "Dock" label = "Dock"
polygon_resource = ExtResource("5_dock")
[node name="cottage" type="Polygon2D" parent="." unique_id=234567891] [node name="cottage" type="Polygon2D" parent="." unique_id=234567891]
scale = Vector2(0.78, 0.78) scale = Vector2(0.78, 0.78)
color = Color(1, 1, 1, 0.25)
polygon = PackedVector2Array(0, 0, 100, 0, 100, 50, 0, 50) polygon = PackedVector2Array(0, 0, 100, 0, 100, 50, 0, 50)
script = ExtResource("8_setpiece") script = ExtResource("8_setpiece")
label = "Cottage" label = "Cottage"
polygon_resource = ExtResource("6_cottage")
[connection signal="interacted" from="kq4_007_fishermans_shack" to="." method="_on_fishermans_shack_interacted"] [connection signal="interacted" from="kq4_007_fishermans_shack" to="." method="_on_fishermans_shack_interacted"]
[connection signal="interacted" from="kq4_014_green_meadow" to="." method="_on_green_meadow_interacted"] [connection signal="interacted" from="kq4_014_green_meadow" to="." method="_on_green_meadow_interacted"]

View File

@@ -1 +1 @@
uid://2bqawc9w4uu59 uid://d4a2d0rfqnmmo

View File

@@ -1,14 +1,10 @@
[gd_scene format=3 uid="uid://tkeyuep0ivo6"] [gd_scene format=3 uid="uid://tkeyuep0ivo6"]
[ext_resource type="Script" uid="uid://1k06wwatabzqa" path="res://scenes/kq4_014_green_meadow/kq4_014_green_meadow.gd" id="1_abc"] [ext_resource type="Script" uid="uid://dekyekrbu3q6o" path="res://scenes/kq4_014_green_meadow/kq4_014_green_meadow.gd" id="1_abc"]
[ext_resource type="Texture2D" uid="uid://dskmgchg6f4qm" path="res://scenes/kq4_014_green_meadow/014_caption_1_46619669_generated.png" id="2_abc"] [ext_resource type="Texture2D" uid="uid://boo0k5x33ep0c" path="res://scenes/kq4_014_green_meadow/014_caption_1_46619669_generated.png" id="2_7pjgx"]
[ext_resource type="Script" uid="uid://xmphq3i0wbg3" path="res://ScalePoint_.gd" id="3_abc"] [ext_resource type="Script" uid="uid://xmphq3i0wbg3" path="res://ScalePoint_.gd" id="3_abc"]
[ext_resource type="PackedScene" uid="uid://c4vc1wx7k6cw" path="res://TransitionPiece.tscn" id="4_abc"] [ext_resource type="PackedScene" uid="uid://c4vc1wx7k6cw" path="res://TransitionPiece.tscn" id="4_abc"]
[ext_resource type="Script" uid="uid://bounwnqg34t5k" path="res://SetPiece_.gd" id="5_setpiece"] [ext_resource type="Script" uid="uid://bounwnqg34t5k" path="res://SetPiece_.gd" id="5_setpiece"]
[ext_resource type="Resource" uid="uid://2pkuwanqqbcc8" path="res://scenes/kq4_014_green_meadow/stump_polygon.tres" id="6_stump"]
[ext_resource type="Resource" uid="uid://2iglz0lr1hm8x" path="res://scenes/kq4_014_green_meadow/bushes_polygon.tres" id="7_bushes"]
[ext_resource type="Resource" uid="uid://2xf4fwmakmnf9" path="res://scenes/kq4_014_green_meadow/rocks_polygon.tres" id="8_rocks"]
[sub_resource type="NavigationPolygon" id="NavigationPolygon_ppo6b"] [sub_resource type="NavigationPolygon" id="NavigationPolygon_ppo6b"]
vertices = PackedVector2Array(366.85156, 1243.1484, -140.97656, 1182.2422, -76.0625, 588.09375, -30.171875, 216.07031, 1221.4063, 226.97656, 1994.1406, 468.39844, 2011.7969, 1321.9766, 1052.7422, 1419.8672, -76.0625, 588.0781) vertices = PackedVector2Array(366.85156, 1243.1484, -140.97656, 1182.2422, -76.0625, 588.09375, -30.171875, 216.07031, 1221.4063, 226.97656, 1994.1406, 468.39844, 2011.7969, 1321.9766, 1052.7422, 1419.8672, -76.0625, 588.0781)
@@ -21,7 +17,7 @@ script = ExtResource("1_abc")
[node name="bg" type="Sprite2D" parent="." unique_id=874052749] [node name="bg" type="Sprite2D" parent="." unique_id=874052749]
scale = Vector2(0.78, 0.78) scale = Vector2(0.78, 0.78)
texture = ExtResource("2_abc") texture = ExtResource("2_7pjgx")
centered = false centered = false
[node name="StartScalePoint" type="Node2D" parent="." unique_id=1640687858] [node name="StartScalePoint" type="Node2D" parent="." unique_id=1640687858]
@@ -46,7 +42,7 @@ position = Vector2(194, 819)
position = Vector2(910, -213) position = Vector2(910, -213)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_014_green_meadow" appear_at_node = "kq4_014_green_meadow"
target = "uid://bncmzju9ibkv" target = "uid://bncm0jvaibkv"
label = "Back of Fisherman's Shack" label = "Back of Fisherman's Shack"
[node name="entrance" parent="kq4_008_back_of_fishermans_shack" index="0"] [node name="entrance" parent="kq4_008_back_of_fishermans_shack" index="0"]
@@ -59,7 +55,7 @@ position = Vector2(174, 519)
position = Vector2(1766, 74) position = Vector2(1766, 74)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_014_green_meadow" appear_at_node = "kq4_014_green_meadow"
target = "uid://2zga29mwl2ced" target = "uid://xk6xu65nm620"
label = "Frog Pond" label = "Frog Pond"
[node name="entrance" parent="kq4_015_frog_pond" index="0"] [node name="entrance" parent="kq4_015_frog_pond" index="0"]
@@ -72,7 +68,7 @@ position = Vector2(293, 554)
position = Vector2(910, 542) position = Vector2(910, 542)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_014_green_meadow" appear_at_node = "kq4_014_green_meadow"
target = "uid://2yy1t1lic39gp" target = "uid://w4xpm5qeo45d"
label = "Meadow" label = "Meadow"
[node name="entrance" parent="kq4_020_meadow" index="0"] [node name="entrance" parent="kq4_020_meadow" index="0"]
@@ -84,7 +80,7 @@ position = Vector2(151, 615)
[node name="kq4_013_beach" parent="." unique_id=1117747814 instance=ExtResource("4_abc")] [node name="kq4_013_beach" parent="." unique_id=1117747814 instance=ExtResource("4_abc")]
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_014_green_meadow" appear_at_node = "kq4_014_green_meadow"
target = "uid://2bqawc9w4uu59" target = "uid://d4a2d0rfqnmmo"
label = "Beach" label = "Beach"
[node name="entrance" parent="kq4_013_beach" index="0"] [node name="entrance" parent="kq4_013_beach" index="0"]
@@ -93,32 +89,31 @@ position = Vector2(506, 555)
[node name="exit" parent="kq4_013_beach" index="1"] [node name="exit" parent="kq4_013_beach" index="1"]
position = Vector2(-64, 534) position = Vector2(-64, 534)
[node name="stump" type="Polygon2D" parent="."] [node name="stump" type="Polygon2D" parent="." unique_id=119236984]
scale = Vector2(6, 6) scale = Vector2(6, 6)
color = Color(1, 1, 1, 0.25)
polygon = PackedVector2Array(0, 0, 100, 0, 100, 50, 0, 50) polygon = PackedVector2Array(0, 0, 100, 0, 100, 50, 0, 50)
script = ExtResource("5_setpiece") script = ExtResource("5_setpiece")
label = "Stump" label = "Stump"
polygon_resource = ExtResource("6_stump")
[node name="bushes" type="Polygon2D" parent="."] [node name="bushes" type="Polygon2D" parent="." unique_id=330527800]
scale = Vector2(6, 6) scale = Vector2(6, 6)
color = Color(1, 1, 1, 0.25)
polygon = PackedVector2Array(0, 0, 100, 0, 100, 50, 0, 50) polygon = PackedVector2Array(0, 0, 100, 0, 100, 50, 0, 50)
script = ExtResource("5_setpiece") script = ExtResource("5_setpiece")
label = "Bushes" label = "Bushes"
polygon_resource = ExtResource("7_bushes")
[node name="rocks" type="Polygon2D" parent="."] [node name="rocks" type="Polygon2D" parent="." unique_id=350147443]
scale = Vector2(6, 6) scale = Vector2(6, 6)
color = Color(1, 1, 1, 0.25)
polygon = PackedVector2Array(0, 0, 100, 0, 100, 50, 0, 50) polygon = PackedVector2Array(0, 0, 100, 0, 100, 50, 0, 50)
script = ExtResource("5_setpiece") script = ExtResource("5_setpiece")
label = "Rocks" label = "Rocks"
polygon_resource = ExtResource("8_rocks")
[connection signal="interacted" from="kq4_013_beach" to="." method="_on_beach_interacted"]
[connection signal="interacted" from="kq4_008_back_of_fishermans_shack" to="." method="_on_back_of_fishermans_shack_interacted"] [connection signal="interacted" from="kq4_008_back_of_fishermans_shack" to="." method="_on_back_of_fishermans_shack_interacted"]
[connection signal="interacted" from="kq4_015_frog_pond" to="." method="_on_frog_pond_interacted"] [connection signal="interacted" from="kq4_015_frog_pond" to="." method="_on_frog_pond_interacted"]
[connection signal="interacted" from="kq4_020_meadow" to="." method="_on_meadow_interacted"] [connection signal="interacted" from="kq4_020_meadow" to="." method="_on_meadow_interacted"]
[connection signal="interacted" from="kq4_013_beach" to="." method="_on_beach_interacted"]
[connection signal="looked" from="stump" to="." method="_on_stump_looked"] [connection signal="looked" from="stump" to="." method="_on_stump_looked"]
[connection signal="looked" from="bushes" to="." method="_on_bushes_looked"] [connection signal="looked" from="bushes" to="." method="_on_bushes_looked"]
[connection signal="looked" from="rocks" to="." method="_on_rocks_looked"] [connection signal="looked" from="rocks" to="." method="_on_rocks_looked"]
@@ -126,4 +121,4 @@ polygon_resource = ExtResource("8_rocks")
[editable path="kq4_008_back_of_fishermans_shack"] [editable path="kq4_008_back_of_fishermans_shack"]
[editable path="kq4_015_frog_pond"] [editable path="kq4_015_frog_pond"]
[editable path="kq4_020_meadow"] [editable path="kq4_020_meadow"]
[editable path="kq4_013_beach"] [editable path="kq4_013_beach"]

View File

@@ -4,10 +4,7 @@
[ext_resource type="Texture2D" uid="uid://bil34dk1pnd7b" path="res://scenes/kq4_015_frog_pond/caption_2_2697930471_generated.png" id="2_erond"] [ext_resource type="Texture2D" uid="uid://bil34dk1pnd7b" path="res://scenes/kq4_015_frog_pond/caption_2_2697930471_generated.png" id="2_erond"]
[ext_resource type="Script" uid="uid://xmphq3i0wbg3" path="res://ScalePoint_.gd" id="3_abc"] [ext_resource type="Script" uid="uid://xmphq3i0wbg3" path="res://ScalePoint_.gd" id="3_abc"]
[ext_resource type="PackedScene" uid="uid://c4vc1wx7k6cw" path="res://TransitionPiece.tscn" id="4_abc"] [ext_resource type="PackedScene" uid="uid://c4vc1wx7k6cw" path="res://TransitionPiece.tscn" id="4_abc"]
[ext_resource type="Resource" uid="uid://3v71oyr55gdir" path="res://scenes/kq4_015_frog_pond/lilypads_polygon.tres" id="5_abc"] [ext_resource type="Script" uid="uid://b0oojqlsdhp4s" path="res://TransitionPiece.gd" id="5_foh0c"]
[ext_resource type="Resource" uid="uid://3icunzb7gg3za" path="res://scenes/kq4_015_frog_pond/flowers_polygon.tres" id="6_abc"]
[ext_resource type="Resource" uid="uid://39q63aoolsg51" path="res://scenes/kq4_015_frog_pond/pond_polygon.tres" id="7_abc"]
[ext_resource type="Script" uid="uid://bv7oxo5y5u6xo" path="res://SetPiece_.gd" id="8_abc"]
[sub_resource type="NavigationPolygon" id="NavigationPolygon_ppo6b"] [sub_resource type="NavigationPolygon" id="NavigationPolygon_ppo6b"]
vertices = PackedVector2Array(366.85156, 1243.1484, -140.97656, 1182.2422, -76.0625, 588.09375, -30.171875, 216.07031, 1221.4063, 226.97656, 1994.1406, 468.39844, 2011.7969, 1321.9766, 1052.7422, 1419.8672, -76.0625, 588.0781) vertices = PackedVector2Array(366.85156, 1243.1484, -140.97656, 1182.2422, -76.0625, 588.09375, -30.171875, 216.07031, 1221.4063, 226.97656, 1994.1406, 468.39844, 2011.7969, 1321.9766, 1052.7422, 1419.8672, -76.0625, 588.0781)
@@ -41,11 +38,13 @@ navigation_polygon = SubResource("NavigationPolygon_ppo6b")
[node name="default-starting-point" type="Node2D" parent="." unique_id=1018141532] [node name="default-starting-point" type="Node2D" parent="." unique_id=1018141532]
position = Vector2(194, 819) position = Vector2(194, 819)
[node name="kq4_009_shady_wooded_area" parent="." unique_id=484638394 instance=ExtResource("4_abc")] [node name="kq4_009_shady_wooded_area" parent="." unique_id=484638394 groups=["set-piece", "transition-set-piece"] instance=ExtResource("4_abc")]
position = Vector2(910, -213) position = Vector2(910, -213)
color = Color(1, 1, 1, 0.25)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
script = ExtResource("5_foh0c")
appear_at_node = "kq4_015_frog_pond" appear_at_node = "kq4_015_frog_pond"
target = "uid://1hkplw2a78b1y" target = "uid://da4h2ljrt02ie"
label = "Shady Wooded Area" label = "Shady Wooded Area"
[node name="entrance" parent="kq4_009_shady_wooded_area" index="0"] [node name="entrance" parent="kq4_009_shady_wooded_area" index="0"]
@@ -54,11 +53,13 @@ position = Vector2(133, 643)
[node name="exit" parent="kq4_009_shady_wooded_area" index="1"] [node name="exit" parent="kq4_009_shady_wooded_area" index="1"]
position = Vector2(174, 519) position = Vector2(174, 519)
[node name="kq4_016_graveyard" parent="." unique_id=1916756563 instance=ExtResource("4_abc")] [node name="kq4_016_graveyard" parent="." unique_id=1916756563 groups=["set-piece", "transition-set-piece"] instance=ExtResource("4_abc")]
position = Vector2(1766, 74) position = Vector2(1766, 74)
color = Color(1, 1, 1, 0.25)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
script = ExtResource("5_foh0c")
appear_at_node = "kq4_015_frog_pond" appear_at_node = "kq4_015_frog_pond"
target = "uid://27b2k6gky3afg" target = "uid://5gygr0s1n433"
label = "Graveyard" label = "Graveyard"
[node name="entrance" parent="kq4_016_graveyard" index="0"] [node name="entrance" parent="kq4_016_graveyard" index="0"]
@@ -67,9 +68,11 @@ position = Vector2(24, 565)
[node name="exit" parent="kq4_016_graveyard" index="1"] [node name="exit" parent="kq4_016_graveyard" index="1"]
position = Vector2(293, 554) position = Vector2(293, 554)
[node name="kq4_014_green_meadow" parent="." unique_id=1117747815 instance=ExtResource("4_abc")] [node name="kq4_014_green_meadow" parent="." unique_id=1117747815 groups=["set-piece", "transition-set-piece"] instance=ExtResource("4_abc")]
position = Vector2(-200, 74) position = Vector2(-200, 74)
color = Color(1, 1, 1, 0.25)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
script = ExtResource("5_foh0c")
appear_at_node = "kq4_015_frog_pond" appear_at_node = "kq4_015_frog_pond"
target = "uid://tkeyuep0ivo6" target = "uid://tkeyuep0ivo6"
label = "Green Meadow" label = "Green Meadow"
@@ -80,11 +83,13 @@ position = Vector2(133, 643)
[node name="exit" parent="kq4_014_green_meadow" index="1"] [node name="exit" parent="kq4_014_green_meadow" index="1"]
position = Vector2(300, 554) position = Vector2(300, 554)
[node name="kq4_021_bridge_over_stream" parent="." unique_id=990092107 instance=ExtResource("4_abc")] [node name="kq4_021_bridge_over_stream" parent="." unique_id=990092107 groups=["set-piece", "transition-set-piece"] instance=ExtResource("4_abc")]
position = Vector2(910, 542) position = Vector2(910, 542)
color = Color(1, 1, 1, 0.25)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
script = ExtResource("5_foh0c")
appear_at_node = "kq4_015_frog_pond" appear_at_node = "kq4_015_frog_pond"
target = "uid://3uxipzjekijqc" target = "uid://bs3fll3ml3ffy"
label = "Bridge over Stream" label = "Bridge over Stream"
[node name="entrance" parent="kq4_021_bridge_over_stream" index="0"] [node name="entrance" parent="kq4_021_bridge_over_stream" index="0"]
@@ -93,28 +98,31 @@ position = Vector2(118, 514)
[node name="exit" parent="kq4_021_bridge_over_stream" index="1"] [node name="exit" parent="kq4_021_bridge_over_stream" index="1"]
position = Vector2(151, 615) position = Vector2(151, 615)
[node name="lilypads" type="Polygon2D" parent="." instance=ExtResource("8_abc")] [node name="lilypads" parent="." unique_id=811839254]
scale = Vector2(0.78, 0.78) scale = Vector2(0.78, 0.78)
polygon = PackedVector2Array(1132, 680, 1210, 700, 1237, 745, 1207, 795, 1127, 805, 1093, 760, 1103, 709) polygon = PackedVector2Array(1132, 680, 1210, 700, 1237, 745, 1207, 795, 1127, 805, 1093, 760, 1103, 709)
label = "Lily Pads" label = "Lily Pads"
[node name="flowers" type="Polygon2D" parent="." instance=ExtResource("8_abc")] [node name="flowers" parent="." unique_id=1447419940]
scale = Vector2(0.78, 0.78) scale = Vector2(0.78, 0.78)
polygon = PackedVector2Array(1527, 820, 1564, 814, 1584, 840, 1559, 866, 1527, 858) polygon = PackedVector2Array(1527, 820, 1564, 814, 1584, 840, 1559, 866, 1527, 858)
label = "Flowers" label = "Flowers"
[node name="pond" type="Polygon2D" parent="." instance=ExtResource("8_abc")] [node name="pond" parent="." unique_id=1857495818]
scale = Vector2(0.78, 0.78) scale = Vector2(0.78, 0.78)
polygon = PackedVector2Array(952, 596, 1180, 597, 1339, 664, 1417, 780, 1391, 918, 1180, 964, 940, 891, 876, 769, 888, 657) polygon = PackedVector2Array(952, 596, 1180, 597, 1339, 664, 1417, 780, 1391, 918, 1180, 964, 940, 891, 876, 769, 888, 657)
label = "Pond" label = "Pond"
[node name="kq4_015_frog_pond" type="Polygon2D" parent="." unique_id=629966276 groups=["set-piece", "transition-set-piece"] instance=ExtResource("4_abc")]
color = Color(1, 1, 1, 0.25)
script = ExtResource("5_foh0c")
appear_at_node = &"kq4_015_frog_pond"
target = "uid://bs3fll3ml3ffy"
[connection signal="interacted" from="kq4_009_shady_wooded_area" to="." method="_on_shady_wooded_area_interacted"] [connection signal="interacted" from="kq4_009_shady_wooded_area" to="." method="_on_shady_wooded_area_interacted"]
[connection signal="interacted" from="kq4_016_graveyard" to="." method="_on_graveyard_interacted"] [connection signal="interacted" from="kq4_016_graveyard" to="." method="_on_graveyard_interacted"]
[connection signal="interacted" from="kq4_014_green_meadow" to="." method="_on_green_meadow_interacted"] [connection signal="interacted" from="kq4_014_green_meadow" to="." method="_on_green_meadow_interacted"]
[connection signal="interacted" from="kq4_021_bridge_over_stream" to="." method="_on_bridge_over_stream_interacted"] [connection signal="interacted" from="kq4_021_bridge_over_stream" to="." method="_on_bridge_over_stream_interacted"]
[connection signal="looked" from="lilypads" to="." method="_on_lilypads_looked"]
[connection signal="looked" from="pond" to="." method="_on_pond_looked"]
[connection signal="looked" from="flowers" to="." method="_on_flowers_looked"]
[editable path="kq4_009_shady_wooded_area"] [editable path="kq4_009_shady_wooded_area"]
[editable path="kq4_016_graveyard"] [editable path="kq4_016_graveyard"]

View File

@@ -1 +1 @@
uid://2zga29mwl2ced uid://xk6xu65nm620

View File

@@ -44,7 +44,7 @@ position = Vector2(194, 819)
position = Vector2(-200, 100) position = Vector2(-200, 100)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_016_graveyard" appear_at_node = "kq4_016_graveyard"
target = "uid://2zga29mwl2ced" target = "uid://xk6xu65nm620"
label = "Frog Pond" label = "Frog Pond"
[node name="entrance" parent="kq4_015_frog_pond" index="0"] [node name="entrance" parent="kq4_015_frog_pond" index="0"]
@@ -57,7 +57,7 @@ position = Vector2(100, 480)
position = Vector2(910, -213) position = Vector2(910, -213)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_016_graveyard" appear_at_node = "kq4_016_graveyard"
target = "uid://3ujj97iw54vo5" target = "uid://bsog5s257pres"
label = "Forest Path" label = "Forest Path"
[node name="entrance" parent="kq4_010_forest_path" index="0"] [node name="entrance" parent="kq4_010_forest_path" index="0"]
@@ -70,7 +70,7 @@ position = Vector2(174, 519)
position = Vector2(910, 542) position = Vector2(910, 542)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_016_graveyard" appear_at_node = "kq4_016_graveyard"
target = "uid://3oq4x3exoimdb" target = "uid://bmv1tox6p3h1x"
label = "Gnomes Cottage" label = "Gnomes Cottage"
[node name="entrance" parent="kq4_022_gnomes_cottage" index="0"] [node name="entrance" parent="kq4_022_gnomes_cottage" index="0"]
@@ -83,7 +83,7 @@ position = Vector2(174, 519)
position = Vector2(1766, 74) position = Vector2(1766, 74)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_016_graveyard" appear_at_node = "kq4_016_graveyard"
target = "uid://1kz9yo5f1tpc6" target = "uid://dek2gdmwnmgsl"
label = "Spooky House Exterior" label = "Spooky House Exterior"
[node name="entrance" parent="kq4_017_spooky_house_exterior" index="0"] [node name="entrance" parent="kq4_017_spooky_house_exterior" index="0"]

View File

@@ -1 +1 @@
uid://27b2k6gky3afg uid://5gygr0s1n433

View File

@@ -56,7 +56,7 @@ position = Vector2(174, 519)
position = Vector2(1766, 74) position = Vector2(1766, 74)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_017_spooky_house_exterior" appear_at_node = "kq4_017_spooky_house_exterior"
target = "uid://35amqvpjgpf2x" target = "uid://b3fjmiaribbrl"
label = "Cemetery" label = "Cemetery"
[node name="entrance" parent="kq4_018_cemetery" index="0"] [node name="entrance" parent="kq4_018_cemetery" index="0"]
@@ -81,7 +81,7 @@ position = Vector2(151, 615)
[node name="kq4_016_graveyard" parent="." unique_id=1117747814 instance=ExtResource("4_abc")] [node name="kq4_016_graveyard" parent="." unique_id=1117747814 instance=ExtResource("4_abc")]
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_017_spooky_house_exterior" appear_at_node = "kq4_017_spooky_house_exterior"
target = "uid://27b2k6gky3afg" target = "uid://5gygr0s1n433"
label = "Graveyard" label = "Graveyard"
[node name="entrance" parent="kq4_016_graveyard" index="0"] [node name="entrance" parent="kq4_016_graveyard" index="0"]

View File

@@ -1 +1 @@
uid://1kz9yo5f1tpc6 uid://dek2gdmwnmgsl

View File

@@ -67,7 +67,7 @@ position = Vector2(151, 615)
[node name="kq4_017_spooky_house_exterior" parent="." unique_id=1117747814 instance=ExtResource("4_abc")] [node name="kq4_017_spooky_house_exterior" parent="." unique_id=1117747814 instance=ExtResource("4_abc")]
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_018_cemetery" appear_at_node = "kq4_018_cemetery"
target = "uid://1kz9yo5f1tpc6" target = "uid://dek2gdmwnmgsl"
label = "Spooky House Exterior" label = "Spooky House Exterior"
[node name="entrance" parent="kq4_017_spooky_house_exterior" index="0"] [node name="entrance" parent="kq4_017_spooky_house_exterior" index="0"]

View File

@@ -1 +1 @@
uid://35amqvpjgpf2x uid://b3fjmiaribbrl

View File

@@ -21,9 +21,3 @@ func _on_room_looked() -> void:
start_main_script(ScriptBuilder.init( start_main_script(ScriptBuilder.init(
ScriptBuilder.say(ego, "Wistfully, you stare out over the ocean, wishing you could go home and see your family again. Unfortunately, reality sets in, and you remember your difficult situation. Turning your head, you look eastward toward a meadowland covered with wildflowers, and heave a big sigh of sadness.") ScriptBuilder.say(ego, "Wistfully, you stare out over the ocean, wishing you could go home and see your family again. Unfortunately, reality sets in, and you remember your difficult situation. Turning your head, you look eastward toward a meadowland covered with wildflowers, and heave a big sigh of sadness.")
).build(self, "_on_script_complete")) ).build(self, "_on_script_complete"))
func _on_cliff_looked() -> void:
start_main_script(ScriptBuilder.init(
ScriptBuilder.say(ego, "The cliffs are high and jagged, looming over the turbulent ocean below. It's a dangerous place to stand too close to the edge.")
).build(self, "_on_script_complete"))

View File

@@ -1,17 +1,15 @@
[gd_scene load_steps=8 format=3 uid="uid://3eh8ys3v25m45"] [gd_scene format=3 uid="uid://bcm5ufn44qits"]
[ext_resource type="PackedScene" uid="uid://ctkmgtcvpnkm8" path="res://TemplateScene.tscn" id="1_fcvak"] [ext_resource type="PackedScene" uid="uid://ctkmgtcvpnkm8" path="res://TemplateScene.tscn" id="1_fcvak"]
[ext_resource type="Texture2D" uid="uid://blus266j2vw5o" path="res://scenes/kq4_019_coastal_cliffs/ComfyUI_10031_.png" id="2_xrxwv"] [ext_resource type="Texture2D" uid="uid://blus266j2vw5o" path="res://scenes/kq4_019_coastal_cliffs/ComfyUI_10031_.png" id="2_xrxwv"]
[ext_resource type="PackedScene" uid="uid://c4vc1wx7k6cw" path="res://TransitionPiece.tscn" id="4_8xjvi"] [ext_resource type="PackedScene" uid="uid://c4vc1wx7k6cw" path="res://TransitionPiece.tscn" id="4_8xjvi"]
[ext_resource type="Resource" uid="uid://375qvwehyok41" path="res://scenes/kq4_019_coastal_cliffs/cliff_polygon.tres" id="5_cliff"]
[ext_resource type="Script" uid="uid://bounwnqg34t5k" path="res://SetPiece_.gd" id="6_setpiece"]
[sub_resource type="NavigationPolygon" id="NavigationPolygon_mt6rs"] [sub_resource type="NavigationPolygon" id="NavigationPolygon_mt6rs"]
vertices = PackedVector2Array(1387.94, 489.133, 1327.95, 483.813, 1478.27, 476.344, 1461.59, 491.992, 1565.21, 865.289, 1517.97, 816.344, 1652.07, 798.773, 2241.42, 882.602, 1650.95, 650.203, 1559.25, 613.688, 1619.82, 572.758, 1745.49, 546.727, 1904.11, 1452.61, 1052.23, 1257.31, 1078.87, 1074.46, 1460.6, 1000.1, 1997.48, 640.609, 1617.97, 560.313, 1465.3, 503.938) vertices = PackedVector2Array(1387.94, 489.133, 1327.95, 483.813, 1478.27, 476.344, 1461.59, 491.992, 1565.21, 865.289, 1517.97, 816.344, 1652.07, 798.773, 2241.42, 882.602, 1650.95, 650.203, 1559.25, 613.688, 1619.82, 572.758, 1745.49, 546.727, 1904.11, 1452.61, 1052.23, 1257.31, 1078.87, 1074.46, 1460.6, 1000.1, 1997.48, 640.609, 1617.97, 560.313, 1465.3, 503.938)
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(4, 5, 6, 7), PackedInt32Array(8, 9, 10, 11), PackedInt32Array(12, 13, 14, 15, 7), PackedInt32Array(7, 15, 4), PackedInt32Array(11, 16, 7, 6, 8), PackedInt32Array(11, 10, 17), PackedInt32Array(18, 11, 17), PackedInt32Array(18, 17, 0), PackedInt32Array(0, 3, 18)]) polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(4, 5, 6, 7), PackedInt32Array(8, 9, 10, 11), PackedInt32Array(12, 13, 14, 15, 7), PackedInt32Array(7, 15, 4), PackedInt32Array(11, 16, 7, 6, 8), PackedInt32Array(11, 10, 17), PackedInt32Array(18, 11, 17), PackedInt32Array(18, 17, 0), PackedInt32Array(0, 3, 18)])
outlines = Array[PackedVector2Array]([PackedVector2Array(1183, 481, 1505, 465, 1473, 495, 1748, 537, 2003, 632, 2254, 881, 1909, 1464, 1041, 1265, 1070, 1066, 1455, 991, 1552, 866, 1497, 809, 1642, 790, 1641, 657, 1538, 616, 1609, 568, 1386, 499)]) outlines = Array[PackedVector2Array]([PackedVector2Array(1183, 481, 1505, 465, 1473, 495, 1748, 537, 2003, 632, 2254, 881, 1909, 1464, 1041, 1265, 1070, 1066, 1455, 991, 1552, 866, 1497, 809, 1642, 790, 1641, 657, 1538, 616, 1609, 568, 1386, 499)])
[node name="Scene" instance=ExtResource("1_fcvak")] [node name="Scene" unique_id=623100937 instance=ExtResource("1_fcvak")]
[node name="bg" parent="." index="0"] [node name="bg" parent="." index="0"]
texture = ExtResource("2_xrxwv") texture = ExtResource("2_xrxwv")
@@ -19,10 +17,10 @@ texture = ExtResource("2_xrxwv")
[node name="pathfind" parent="." index="3"] [node name="pathfind" parent="." index="3"]
navigation_polygon = SubResource("NavigationPolygon_mt6rs") navigation_polygon = SubResource("NavigationPolygon_mt6rs")
[node name="kq4_020_meadow" parent="." index="5" instance=ExtResource("4_8xjvi")] [node name="kq4_020_meadow" parent="." index="5" unique_id=1414663836 instance=ExtResource("4_8xjvi")]
polygon = PackedVector2Array(1821, 506, 1756, 1110, 2122, 1104, 2067, 511) polygon = PackedVector2Array(1821, 506, 1756, 1110, 2122, 1104, 2067, 511)
appear_at_node = "kq4_019_coastal_cliffs" appear_at_node = "kq4_019_coastal_cliffs"
target = "uid://2yy1t1lic39gp" target = "uid://w4xpm5qeo45d"
label = "Meadow" label = "Meadow"
[node name="entrance" parent="kq4_020_meadow" index="0"] [node name="entrance" parent="kq4_020_meadow" index="0"]
@@ -31,7 +29,7 @@ position = Vector2(1766, 715)
[node name="exit" parent="kq4_020_meadow" index="1"] [node name="exit" parent="kq4_020_meadow" index="1"]
position = Vector2(2048, 766) position = Vector2(2048, 766)
[node name="kq4_025_beach_at_river_delta" parent="." index="6" instance=ExtResource("4_8xjvi")] [node name="kq4_025_beach_at_river_delta" parent="." index="6" unique_id=1146574825 instance=ExtResource("4_8xjvi")]
polygon = PackedVector2Array(999, 905, 2014, 941, 1973, 1208, 938, 1204) polygon = PackedVector2Array(999, 905, 2014, 941, 1973, 1208, 938, 1204)
appear_at_node = "kq4_019_coastal_cliffs" appear_at_node = "kq4_019_coastal_cliffs"
target = "uid://3vcewxyhbqica" target = "uid://3vcewxyhbqica"
@@ -43,19 +41,19 @@ position = Vector2(1734, 906)
[node name="exit" parent="kq4_025_beach_at_river_delta" index="1"] [node name="exit" parent="kq4_025_beach_at_river_delta" index="1"]
position = Vector2(1538, 1274) position = Vector2(1538, 1274)
[node name="kq4_013_beach" parent="." index="7" instance=ExtResource("4_8xjvi")] [node name="kq4_013_beach" parent="." index="7" unique_id=1879394954 instance=ExtResource("4_8xjvi")]
polygon = PackedVector2Array(1200, 100, 1300, 200, 1500, 200, 1600, 100) polygon = PackedVector2Array(652, 272, 918, 455, 1155, 577, 1558, 434, 1600, 100)
appear_at_node = "kq4_019_coastal_cliffs" appear_at_node = "kq4_019_coastal_cliffs"
target = "uid://2bqawc9w4uu59" target = "uid://d4a2d0rfqnmmo"
label = "Beach" label = "Beach"
[node name="entrance" parent="kq4_013_beach" index="0"] [node name="entrance" parent="kq4_013_beach" index="0"]
position = Vector2(1400, 300) position = Vector2(1640, 549)
[node name="exit" parent="kq4_013_beach" index="1"] [node name="exit" parent="kq4_013_beach" index="1"]
position = Vector2(1400, 150) position = Vector2(1442, 490)
[node name="kq4_031_open_ocean" parent="." index="8" instance=ExtResource("4_8xjvi")] [node name="kq4_031_open_ocean" parent="." index="8" unique_id=1631567041 instance=ExtResource("4_8xjvi")]
polygon = PackedVector2Array(100, 400, 200, 500, 400, 500, 500, 400) polygon = PackedVector2Array(100, 400, 200, 500, 400, 500, 500, 400)
appear_at_node = "kq4_019_coastal_cliffs" appear_at_node = "kq4_019_coastal_cliffs"
target = "uid://2f7c49hpkducc" target = "uid://2f7c49hpkducc"
@@ -67,21 +65,11 @@ position = Vector2(300, 450)
[node name="exit" parent="kq4_031_open_ocean" index="1"] [node name="exit" parent="kq4_031_open_ocean" index="1"]
position = Vector2(150, 450) position = Vector2(150, 450)
[connection signal="interacted" from="kq4_013_beach" to="." method="_on_beach_interacted"]
[connection signal="interacted" from="kq4_020_meadow" to="." method="_on_meadow_interacted"] [connection signal="interacted" from="kq4_020_meadow" to="." method="_on_meadow_interacted"]
[connection signal="interacted" from="kq4_025_beach_at_river_delta" to="." method="_on_beach_at_river_delta_interacted"] [connection signal="interacted" from="kq4_025_beach_at_river_delta" to="." method="_on_beach_at_river_delta_interacted"]
[connection signal="interacted" from="kq4_013_beach" to="." method="_on_beach_interacted"]
[connection signal="interacted" from="kq4_031_open_ocean" to="." method="_on_open_ocean_interacted"] [connection signal="interacted" from="kq4_031_open_ocean" to="." method="_on_open_ocean_interacted"]
[node name="cliff" type="Polygon2D" parent="." groups=["set-piece"]]
scale = Vector2(0.467949, 0.467949)
color = Color(0.5, 0.5, 0.5, 0.25)
polygon = PackedVector2Array(4095, 2339, 1631, 2339, 1224, 2312, 300, 890, 3081, 0, 4064, 0, 4095, 549)
script = ExtResource("6_setpiece")
label = "Cliff"
points_resource = ExtResource("5_cliff")
[connection signal="looked" from="cliff" to="." method="_on_cliff_looked"]
[editable path="kq4_020_meadow"] [editable path="kq4_020_meadow"]
[editable path="kq4_025_beach_at_river_delta"] [editable path="kq4_025_beach_at_river_delta"]
[editable path="kq4_013_beach"] [editable path="kq4_013_beach"]

View File

@@ -59,7 +59,7 @@ position = Vector2(174, 519)
position = Vector2(1766, 74) position = Vector2(1766, 74)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_020_meadow" appear_at_node = "kq4_020_meadow"
target = "uid://3uxipzjekijqc" target = "uid://bs3fll3ml3ffy"
label = "Bridge over Stream" label = "Bridge over Stream"
[node name="entrance" parent="kq4_021_bridge_over_stream" index="0"] [node name="entrance" parent="kq4_021_bridge_over_stream" index="0"]
@@ -84,7 +84,7 @@ position = Vector2(-64, 534)
position = Vector2(910, 542) position = Vector2(910, 542)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_020_meadow" appear_at_node = "kq4_020_meadow"
target = "uid://10p7miv0a14l7" target = "uid://dtay26ehvtu2m"
label = "River Meadow" label = "River Meadow"
[node name="entrance" parent="kq4_026_river_meadow" index="0"] [node name="entrance" parent="kq4_026_river_meadow" index="0"]

View File

@@ -1 +1 @@
uid://2yy1t1lic39gp uid://w4xpm5qeo45d

View File

@@ -6,7 +6,7 @@
[ext_resource type="PackedScene" uid="uid://c4vc1wx7k6cw" path="res://TransitionPiece.tscn" id="4_abc"] [ext_resource type="PackedScene" uid="uid://c4vc1wx7k6cw" path="res://TransitionPiece.tscn" id="4_abc"]
[ext_resource type="Resource" uid="uid://ro84qhodvetr" path="res://scenes/kq4_021_bridge_over_stream/bridge_polygon_0.tres" id="5_bridge"] [ext_resource type="Resource" uid="uid://ro84qhodvetr" path="res://scenes/kq4_021_bridge_over_stream/bridge_polygon_0.tres" id="5_bridge"]
[ext_resource type="Script" uid="uid://bounwnqg34t5k" path="res://SetPiece_.gd" id="6_setpiece"] [ext_resource type="Script" uid="uid://bounwnqg34t5k" path="res://SetPiece_.gd" id="6_setpiece"]
[ext_resource type="Resource" uid="uid://c8k3m9xq2w5np" path="res://scenes/kq4_021_bridge_over_stream/golden_ball_polygon.tres" id="7_golden_ball"] [ext_resource type="Resource" uid="uid://c8k3naxq2w5np" path="res://scenes/kq4_021_bridge_over_stream/golden_ball_polygon.tres" id="7_golden_ball"]
[sub_resource type="NavigationPolygon" id="NavigationPolygon_ppo6b"] [sub_resource type="NavigationPolygon" id="NavigationPolygon_ppo6b"]
vertices = PackedVector2Array(366.85156, 1243.1484, -140.97656, 1182.2422, -76.0625, 588.09375, -30.171875, 216.07031, 1221.4063, 226.97656, 1994.1406, 468.39844, 2011.7969, 1321.9766, 1052.7422, 1419.8672, -76.0625, 588.0781) vertices = PackedVector2Array(366.85156, 1243.1484, -140.97656, 1182.2422, -76.0625, 588.09375, -30.171875, 216.07031, 1221.4063, 226.97656, 1994.1406, 468.39844, 2011.7969, 1321.9766, 1052.7422, 1419.8672, -76.0625, 588.0781)
@@ -43,8 +43,8 @@ position = Vector2(194, 819)
[node name="kq4_015_frog_pond" parent="." unique_id=484638394 instance=ExtResource("4_abc")] [node name="kq4_015_frog_pond" parent="." unique_id=484638394 instance=ExtResource("4_abc")]
position = Vector2(910, -213) position = Vector2(910, -213)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_021_bridge_over_stream" appear_at_node = &"kq4_021_bridge_over_stream"
target = "uid://2zga29mwl2ced" target = "uid://xk6xu65nm620"
label = "Frog Pond" label = "Frog Pond"
[node name="entrance" parent="kq4_015_frog_pond" index="0"] [node name="entrance" parent="kq4_015_frog_pond" index="0"]
@@ -57,7 +57,7 @@ position = Vector2(174, 519)
position = Vector2(1766, 74) position = Vector2(1766, 74)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_021_bridge_over_stream" appear_at_node = "kq4_021_bridge_over_stream"
target = "uid://3oq4x3exoimdb" target = "uid://bmv1tox6p3h1x"
label = "Gnome's Cottage" label = "Gnome's Cottage"
[node name="entrance" parent="kq4_022_gnomes_cottage" index="0"] [node name="entrance" parent="kq4_022_gnomes_cottage" index="0"]
@@ -70,7 +70,7 @@ position = Vector2(293, 554)
position = Vector2(910, 542) position = Vector2(910, 542)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_021_bridge_over_stream" appear_at_node = "kq4_021_bridge_over_stream"
target = "uid://1fpyosj18xls7" target = "uid://c8aq5g1juqdam"
label = "Forest Path" label = "Forest Path"
[node name="entrance" parent="kq4_027_forest_path" index="0"] [node name="entrance" parent="kq4_027_forest_path" index="0"]
@@ -83,7 +83,7 @@ position = Vector2(151, 615)
position = Vector2(-200, 74) position = Vector2(-200, 74)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_021_bridge_over_stream" appear_at_node = "kq4_021_bridge_over_stream"
target = "uid://2yy1t1lic39gp" target = "uid://w4xpm5qeo45d"
label = "Meadow" label = "Meadow"
[node name="entrance" parent="kq4_020_meadow" index="0"] [node name="entrance" parent="kq4_020_meadow" index="0"]
@@ -92,12 +92,7 @@ position = Vector2(133, 643)
[node name="exit" parent="kq4_020_meadow" index="1"] [node name="exit" parent="kq4_020_meadow" index="1"]
position = Vector2(300, 554) position = Vector2(300, 554)
[connection signal="interacted" from="kq4_015_frog_pond" to="." method="_on_frog_pond_interacted"] [node name="bridge" type="Polygon2D" parent="." unique_id=1448015966 groups=["set-piece"]]
[connection signal="interacted" from="kq4_022_gnomes_cottage" to="." method="_on_gnomes_cottage_interacted"]
[connection signal="interacted" from="kq4_027_forest_path" to="." method="_on_forest_path_interacted"]
[connection signal="interacted" from="kq4_020_meadow" to="." method="_on_meadow_interacted"]
[node name="bridge" type="Polygon2D" parent="." groups=["set-piece"]]
scale = Vector2(0.78, 0.78) scale = Vector2(0.78, 0.78)
color = Color(0.5, 0.5, 0.5, 0.25) color = Color(0.5, 0.5, 0.5, 0.25)
polygon = PackedVector2Array(1013, 512, 830, 707, 2080, 731, 2209, 917, 2054, 1115, 2495, 1224, 2495, 1391, 1319, 1147, 485, 687) polygon = PackedVector2Array(1013, 512, 830, 707, 2080, 731, 2209, 917, 2054, 1115, 2495, 1224, 2495, 1391, 1319, 1147, 485, 687)
@@ -105,12 +100,10 @@ script = ExtResource("6_setpiece")
label = "Bridge" label = "Bridge"
points_resource = ExtResource("5_bridge") points_resource = ExtResource("5_bridge")
[connection signal="looked" from="bridge" to="." method="_on_bridge_looked"] [node name="golden_ball_walk_target" type="Node2D" parent="." unique_id=-1447405373]
[node name="golden_ball_walk_target" type="Node2D" parent="." unique_id=2847561923]
position = Vector2(1400, 550) position = Vector2(1400, 550)
[node name="golden_ball" type="Polygon2D" parent="." groups=["set-piece"]] [node name="golden_ball" type="Polygon2D" parent="." unique_id=1577257382 groups=["set-piece"]]
scale = Vector2(0.78, 0.78) scale = Vector2(0.78, 0.78)
color = Color(0.5, 0.5, 0.5, 0.25) color = Color(0.5, 0.5, 0.5, 0.25)
polygon = PackedVector2Array(1350, 520, 1450, 520, 1450, 580, 1350, 580) polygon = PackedVector2Array(1350, 520, 1450, 520, 1450, 580, 1350, 580)
@@ -118,6 +111,11 @@ script = ExtResource("6_setpiece")
label = "Golden Ball" label = "Golden Ball"
points_resource = ExtResource("7_golden_ball") points_resource = ExtResource("7_golden_ball")
[connection signal="interacted" from="kq4_015_frog_pond" to="." method="_on_frog_pond_interacted"]
[connection signal="interacted" from="kq4_022_gnomes_cottage" to="." method="_on_gnomes_cottage_interacted"]
[connection signal="interacted" from="kq4_027_forest_path" to="." method="_on_forest_path_interacted"]
[connection signal="interacted" from="kq4_020_meadow" to="." method="_on_meadow_interacted"]
[connection signal="looked" from="bridge" to="." method="_on_bridge_looked"]
[connection signal="touched" from="golden_ball" to="." method="_on_golden_ball_touched"] [connection signal="touched" from="golden_ball" to="." method="_on_golden_ball_touched"]
[editable path="kq4_015_frog_pond"] [editable path="kq4_015_frog_pond"]

View File

@@ -1 +1 @@
uid://3uxipzjekijqc uid://bs3fll3ml3ffy

View File

@@ -43,7 +43,7 @@ position = Vector2(194, 819)
position = Vector2(910, -213) position = Vector2(910, -213)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_022_gnomes_cottage" appear_at_node = "kq4_022_gnomes_cottage"
target = "uid://27b2k6gky3afg" target = "uid://5gygr0s1n433"
label = "Graveyard" label = "Graveyard"
[node name="entrance" parent="kq4_016_graveyard" index="0"] [node name="entrance" parent="kq4_016_graveyard" index="0"]
@@ -56,7 +56,7 @@ position = Vector2(174, 519)
position = Vector2(910, 542) position = Vector2(910, 542)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_022_gnomes_cottage" appear_at_node = "kq4_022_gnomes_cottage"
target = "uid://qkcwifq2lb9m" target = "uid://qkcwifq2lcam"
label = "South Exit" label = "South Exit"
[node name="entrance" parent="kq4_028_mine_entrance" index="0"] [node name="entrance" parent="kq4_028_mine_entrance" index="0"]
@@ -81,7 +81,7 @@ position = Vector2(293, 554)
[node name="kq4_021_bridge_over_stream" parent="." unique_id=1117747814 instance=ExtResource("4_abc")] [node name="kq4_021_bridge_over_stream" parent="." unique_id=1117747814 instance=ExtResource("4_abc")]
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_022_gnomes_cottage" appear_at_node = "kq4_022_gnomes_cottage"
target = "uid://3uxipzjekijqc" target = "uid://bs3fll3ml3ffy"
label = "West Exit" label = "West Exit"
[node name="entrance" parent="kq4_021_bridge_over_stream" index="0"] [node name="entrance" parent="kq4_021_bridge_over_stream" index="0"]

View File

@@ -1 +1 @@
uid://3oq4x3exoimdb uid://bmv1tox6p3h1x

View File

@@ -2,16 +2,16 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://3vitc6ejvwys2" uid="uid://7laf4sg65ou4"
path="res://.godot/imported/pic_99_visual.png-PLACEHOLDER.ctex" path="res://.godot/imported/023_caption_1_1758099626_generated.png-8740dcbed14c1dcb2c6a3bb0002201f9.ctex"
metadata={ metadata={
"vram_texture": false "vram_texture": false
} }
[deps] [deps]
source_file="res://scenes/kq4_099_transitional_room/pic_99_visual.png" source_file="res://scenes/kq4_023_forest_path_with_cottage/023_caption_1_1758099626_generated.png"
dest_files=["res://.godot/imported/pic_99_visual.png-PLACEHOLDER.ctex"] dest_files=["res://.godot/imported/023_caption_1_1758099626_generated.png-8740dcbed14c1dcb2c6a3bb0002201f9.ctex"]
[params] [params]

View File

@@ -1,10 +1,10 @@
[gd_scene format=3 uid="uid://1mhkt47y9jjhc"] [gd_scene format=3 uid="uid://df1dbsphvcawq"]
[ext_resource type="Script" uid="uid://cjqj7aaixs44q" path="res://scenes/kq4_023_forest_path_with_cottage/kq4_023_forest_path_with_cottage.gd" id="1_abc"] [ext_resource type="Script" uid="uid://cjqj7aaixs44q" path="res://scenes/kq4_023_forest_path_with_cottage/kq4_023_forest_path_with_cottage.gd" id="1_abc"]
[ext_resource type="Texture2D" uid="uid://pic023visual" path="res://scenes/kq4_023_forest_path_with_cottage/023_caption_1_684441713_generated.png" id="2_abc"] [ext_resource type="Texture2D" uid="uid://7laf4sg65ou4" path="res://scenes/kq4_023_forest_path_with_cottage/023_caption_1_1758099626_generated.png" id="2_vj30v"]
[ext_resource type="Script" uid="uid://xmphq3i0wbg3" path="res://ScalePoint_.gd" id="3_abc"] [ext_resource type="Script" uid="uid://xmphq3i0wbg3" path="res://ScalePoint_.gd" id="3_abc"]
[ext_resource type="PackedScene" uid="uid://c4vc1wx7k6cw" path="res://TransitionPiece.tscn" id="4_abc"] [ext_resource type="PackedScene" uid="uid://c4vc1wx7k6cw" path="res://TransitionPiece.tscn" id="4_abc"]
[ext_resource type="Resource" uid="uid://2v2i1a5usi2uw" path="res://scenes/kq4_023_forest_path_with_cottage/cottage_polygon_0.tres" id="5_cottage"] [ext_resource type="Resource" uid="uid://t7fvvp3t3xkk" path="res://scenes/kq4_023_forest_path_with_cottage/cottage_polygon_0.tres" id="5_cottage"]
[ext_resource type="Script" uid="uid://bounwnqg34t5k" path="res://SetPiece_.gd" id="6_setpiece"] [ext_resource type="Script" uid="uid://bounwnqg34t5k" path="res://SetPiece_.gd" id="6_setpiece"]
[sub_resource type="NavigationPolygon" id="NavigationPolygon_ppo6b"] [sub_resource type="NavigationPolygon" id="NavigationPolygon_ppo6b"]
@@ -18,7 +18,7 @@ script = ExtResource("1_abc")
[node name="bg" type="Sprite2D" parent="." unique_id=874052749] [node name="bg" type="Sprite2D" parent="." unique_id=874052749]
scale = Vector2(0.78, 0.78) scale = Vector2(0.78, 0.78)
texture = ExtResource("2_abc") texture = ExtResource("2_vj30v")
centered = false centered = false
[node name="StartScalePoint" type="Node2D" parent="." unique_id=1640687858] [node name="StartScalePoint" type="Node2D" parent="." unique_id=1640687858]
@@ -41,9 +41,9 @@ position = Vector2(194, 819)
[node name="kq4_017_spooky_house_exterior" parent="." unique_id=484638394 instance=ExtResource("4_abc")] [node name="kq4_017_spooky_house_exterior" parent="." unique_id=484638394 instance=ExtResource("4_abc")]
position = Vector2(910, -213) position = Vector2(910, -213)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-516, 652, -550, 839, 437, 821, 306, 601)
appear_at_node = "kq4_023_forest_path_with_cottage" appear_at_node = "kq4_023_forest_path_with_cottage"
target = "uid://1kz9yo5f1tpc6" target = "uid://dek2gdmwnmgsl"
label = "Spooky House Exterior" label = "Spooky House Exterior"
[node name="entrance" parent="kq4_017_spooky_house_exterior" index="0"] [node name="entrance" parent="kq4_017_spooky_house_exterior" index="0"]
@@ -69,7 +69,7 @@ position = Vector2(293, 554)
position = Vector2(910, 542) position = Vector2(910, 542)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_023_forest_path_with_cottage" appear_at_node = "kq4_023_forest_path_with_cottage"
target = "uid://1sfzaldfq5kn1" target = "uid://dlyrp8twdxb4g"
label = "Dense Forest" label = "Dense Forest"
[node name="entrance" parent="kq4_029_dense_forest" index="0"] [node name="entrance" parent="kq4_029_dense_forest" index="0"]
@@ -81,7 +81,7 @@ position = Vector2(151, 615)
[node name="kq4_022_gnomes_cottage" parent="." unique_id=1117747814 instance=ExtResource("4_abc")] [node name="kq4_022_gnomes_cottage" parent="." unique_id=1117747814 instance=ExtResource("4_abc")]
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_023_forest_path_with_cottage" appear_at_node = "kq4_023_forest_path_with_cottage"
target = "uid://3oq4x3exoimdb" target = "uid://bmv1tox6p3h1x"
label = "Gnome's Cottage" label = "Gnome's Cottage"
[node name="entrance" parent="kq4_022_gnomes_cottage" index="0"] [node name="entrance" parent="kq4_022_gnomes_cottage" index="0"]
@@ -90,12 +90,7 @@ position = Vector2(506, 555)
[node name="exit" parent="kq4_022_gnomes_cottage" index="1"] [node name="exit" parent="kq4_022_gnomes_cottage" index="1"]
position = Vector2(-64, 534) position = Vector2(-64, 534)
[connection signal="interacted" from="kq4_017_spooky_house_exterior" to="." method="_on_spooky_house_exterior_interacted"] [node name="cottage" type="Polygon2D" parent="." unique_id=717369184 groups=["set-piece"]]
[connection signal="interacted" from="kq4_024_waterfall_and_pool" to="." method="_on_waterfall_and_pool_interacted"]
[connection signal="interacted" from="kq4_029_dense_forest" to="." method="_on_dense_forest_interacted"]
[connection signal="interacted" from="kq4_022_gnomes_cottage" to="." method="_on_gnomes_cottage_interacted"]
[node name="cottage" type="Polygon2D" parent="." groups=["set-piece"]]
scale = Vector2(6, 6) scale = Vector2(6, 6)
color = Color(0.5, 0.5, 0.5, 0.25) color = Color(0.5, 0.5, 0.5, 0.25)
polygon = PackedVector2Array(163, 0, 152, 66, 133, 75, 161, 87, 75, 88, 105, 82, 84, 59, 106, 3) polygon = PackedVector2Array(163, 0, 152, 66, 133, 75, 161, 87, 75, 88, 105, 82, 84, 59, 106, 3)
@@ -103,9 +98,13 @@ script = ExtResource("6_setpiece")
label = "Cottage" label = "Cottage"
points_resource = ExtResource("5_cottage") points_resource = ExtResource("5_cottage")
[connection signal="interacted" from="kq4_017_spooky_house_exterior" to="." method="_on_spooky_house_exterior_interacted"]
[connection signal="interacted" from="kq4_024_waterfall_and_pool" to="." method="_on_waterfall_and_pool_interacted"]
[connection signal="interacted" from="kq4_029_dense_forest" to="." method="_on_dense_forest_interacted"]
[connection signal="interacted" from="kq4_022_gnomes_cottage" to="." method="_on_gnomes_cottage_interacted"]
[connection signal="looked" from="cottage" to="." method="_on_cottage_looked"] [connection signal="looked" from="cottage" to="." method="_on_cottage_looked"]
[editable path="kq4_017_spooky_house_exterior"] [editable path="kq4_017_spooky_house_exterior"]
[editable path="kq4_024_waterfall_and_pool"] [editable path="kq4_024_waterfall_and_pool"]
[editable path="kq4_029_dense_forest"] [editable path="kq4_029_dense_forest"]
[editable path="kq4_022_gnomes_cottage"] [editable path="kq4_022_gnomes_cottage"]

View File

@@ -44,7 +44,7 @@ position = Vector2(194, 819)
position = Vector2(910, -213) position = Vector2(910, -213)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_024_waterfall_and_pool" appear_at_node = "kq4_024_waterfall_and_pool"
target = "uid://35amqvpjgpf2x" target = "uid://b3fjmiaribbrl"
label = "Cemetery" label = "Cemetery"
[node name="entrance" parent="kq4_018_cemetery" index="0"] [node name="entrance" parent="kq4_018_cemetery" index="0"]

View File

@@ -65,7 +65,7 @@ position = Vector2(1535, 302)
position = Vector2(1800, 400) position = Vector2(1800, 400)
polygon = PackedVector2Array(1700, 300, 1900, 300, 1900, 500, 1700, 500) polygon = PackedVector2Array(1700, 300, 1900, 300, 1900, 500, 1700, 500)
appear_at_node = "kq4_025_beach_at_river_delta" appear_at_node = "kq4_025_beach_at_river_delta"
target = "uid://10p7miv0a14l7" target = "uid://dtay26ehvtu2m"
label = "River Meadow" label = "River Meadow"
[node name="entrance" parent="kq4_026_river_meadow" index="0"] [node name="entrance" parent="kq4_026_river_meadow" index="0"]
@@ -91,7 +91,7 @@ position = Vector2(50, 350)
position = Vector2(910, 542) position = Vector2(910, 542)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_025_beach_at_river_delta" appear_at_node = "kq4_025_beach_at_river_delta"
target = "uid://1rwfkejhz94hp" target = "uid://dlg6010ym2uw4"
label = "Beach" label = "Beach"
[node name="entrance" parent="kq4_001_beach" index="0"] [node name="entrance" parent="kq4_001_beach" index="0"]

View File

@@ -41,7 +41,7 @@ position = Vector2(194, 819)
position = Vector2(910, -213) position = Vector2(910, -213)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_026_river_meadow" appear_at_node = "kq4_026_river_meadow"
target = "uid://2yy1t1lic39gp" target = "uid://w4xpm5qeo45d"
label = "Meadow" label = "Meadow"
priority = 1 priority = 1
@@ -55,7 +55,7 @@ position = Vector2(174, 519)
position = Vector2(1766, 74) position = Vector2(1766, 74)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_026_river_meadow" appear_at_node = "kq4_026_river_meadow"
target = "uid://1fpyosj18xls7" target = "uid://c8aq5g1juqdam"
label = "Forest Path" label = "Forest Path"
[node name="entrance" parent="kq4_027_forest_path" index="0"] [node name="entrance" parent="kq4_027_forest_path" index="0"]
@@ -68,7 +68,7 @@ position = Vector2(293, 554)
position = Vector2(910, 542) position = Vector2(910, 542)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_026_river_meadow" appear_at_node = "kq4_026_river_meadow"
target = "uid://1489d4oh9twtu" target = "uid://dxs1tr5yvmoba"
label = "Meadow" label = "Meadow"
[node name="entrance" parent="kq4_002_meadow" index="0"] [node name="entrance" parent="kq4_002_meadow" index="0"]

View File

@@ -1 +1 @@
uid://10p7miv0a14l7 uid://dtay26ehvtu2m

View File

@@ -43,7 +43,7 @@ position = Vector2(194, 819)
position = Vector2(910, -213) position = Vector2(910, -213)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_027_forest_path" appear_at_node = "kq4_027_forest_path"
target = "uid://3uxipzjekijqc" target = "uid://bs3fll3ml3ffy"
label = "Bridge over Stream" label = "Bridge over Stream"
[node name="entrance" parent="kq4_021_bridge_over_stream" index="0"] [node name="entrance" parent="kq4_021_bridge_over_stream" index="0"]
@@ -56,7 +56,7 @@ position = Vector2(174, 519)
position = Vector2(1766, 74) position = Vector2(1766, 74)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_027_forest_path" appear_at_node = "kq4_027_forest_path"
target = "uid://qkcwifq2lb9m" target = "uid://qkcwifq2lcam"
label = "Mine Entrance" label = "Mine Entrance"
[node name="entrance" parent="kq4_028_mine_entrance" index="0"] [node name="entrance" parent="kq4_028_mine_entrance" index="0"]
@@ -69,7 +69,7 @@ position = Vector2(293, 554)
position = Vector2(910, 542) position = Vector2(910, 542)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_027_forest_path" appear_at_node = "kq4_027_forest_path"
target = "uid://151dbn9bybiwx" target = "uid://dyk4rcqsk3aed"
label = "Fountain Pool" label = "Fountain Pool"
[node name="entrance" parent="kq4_003_fountain_pool" index="0"] [node name="entrance" parent="kq4_003_fountain_pool" index="0"]
@@ -81,7 +81,7 @@ position = Vector2(151, 615)
[node name="kq4_026_river_meadow" parent="." unique_id=1117747814 instance=ExtResource("4_abc")] [node name="kq4_026_river_meadow" parent="." unique_id=1117747814 instance=ExtResource("4_abc")]
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_027_forest_path" appear_at_node = "kq4_027_forest_path"
target = "uid://10p7miv0a14l7" target = "uid://dtay26ehvtu2m"
label = "River Meadow" label = "River Meadow"
[node name="entrance" parent="kq4_026_river_meadow" index="0"] [node name="entrance" parent="kq4_026_river_meadow" index="0"]

View File

@@ -1 +1 @@
uid://1fpyosj18xls7 uid://c8aq5g1juqdam

View File

@@ -43,7 +43,7 @@ position = Vector2(194, 819)
position = Vector2(910, -213) position = Vector2(910, -213)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_028_mine_entrance" appear_at_node = "kq4_028_mine_entrance"
target = "uid://3oq4x3exoimdb" target = "uid://bmv1tox6p3h1x"
label = "Gnome's Cottage" label = "Gnome's Cottage"
[node name="entrance" parent="kq4_022_gnomes_cottage" index="0"] [node name="entrance" parent="kq4_022_gnomes_cottage" index="0"]
@@ -56,7 +56,7 @@ position = Vector2(174, 519)
position = Vector2(1766, 74) position = Vector2(1766, 74)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_028_mine_entrance" appear_at_node = "kq4_028_mine_entrance"
target = "uid://1sfzaldfq5kn1" target = "uid://dlyrp8twdxb4g"
label = "Dense Forest" label = "Dense Forest"
[node name="entrance" parent="kq4_029_dense_forest" index="0"] [node name="entrance" parent="kq4_029_dense_forest" index="0"]
@@ -69,7 +69,7 @@ position = Vector2(293, 554)
position = Vector2(910, 542) position = Vector2(910, 542)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_028_mine_entrance" appear_at_node = "kq4_028_mine_entrance"
target = "uid://1nxmm3b1kcdm1" target = "uid://dhie3qsi5333g"
label = "Ogre's Cottage" label = "Ogre's Cottage"
[node name="entrance" parent="kq4_004_ogres_cottage" index="0"] [node name="entrance" parent="kq4_004_ogres_cottage" index="0"]
@@ -81,7 +81,7 @@ position = Vector2(151, 615)
[node name="kq4_027_forest_path" parent="." unique_id=1117747814 instance=ExtResource("4_abc")] [node name="kq4_027_forest_path" parent="." unique_id=1117747814 instance=ExtResource("4_abc")]
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_028_mine_entrance" appear_at_node = "kq4_028_mine_entrance"
target = "uid://1fpyosj18xls7" target = "uid://c8aq5g1juqdam"
label = "Forest Path" label = "Forest Path"
[node name="entrance" parent="kq4_027_forest_path" index="0"] [node name="entrance" parent="kq4_027_forest_path" index="0"]

View File

@@ -1 +1 @@
uid://qkcwifq2lb9m uid://qkcwifq2lcam

View File

@@ -81,7 +81,7 @@ position = Vector2(151, 615)
[node name="kq4_028_mine_entrance" parent="." unique_id=1117747814 instance=ExtResource("4_abc")] [node name="kq4_028_mine_entrance" parent="." unique_id=1117747814 instance=ExtResource("4_abc")]
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_029_dense_forest" appear_at_node = "kq4_029_dense_forest"
target = "uid://qkcwifq2lb9m" target = "uid://qkcwifq2lcam"
label = "Mine Entrance" label = "Mine Entrance"
[node name="entrance" parent="kq4_028_mine_entrance" index="0"] [node name="entrance" parent="kq4_028_mine_entrance" index="0"]

View File

@@ -1 +1 @@
uid://1sfzaldfq5kn1 uid://dlyrp8twdxb4g

View File

@@ -1,10 +1,10 @@
[gd_scene format=3 uid="uid://7dfmw11k58wd"] [gd_scene format=3 uid="uid://7dfmw11k58wd"]
[ext_resource type="Script" path="res://scenes/kq4_030_mountain_pass/kq4_030_mountain_pass.gd" id="1_abc"] [ext_resource type="Script" uid="uid://dis82jrbe2iny" path="res://scenes/kq4_030_mountain_pass/kq4_030_mountain_pass.gd" id="1_abc"]
[ext_resource type="Texture2D" path="res://scenes/kq4_030_mountain_pass/030_caption_1_251842984_generated.png" id="2_abc"] [ext_resource type="Texture2D" uid="uid://deu72w121ul6u" path="res://scenes/kq4_030_mountain_pass/030_caption_1_251842984_generated.png" id="2_abc"]
[ext_resource type="Script" uid="uid://xmphq3i0wbg3" path="res://ScalePoint_.gd" id="3_abc"] [ext_resource type="Script" uid="uid://xmphq3i0wbg3" path="res://ScalePoint_.gd" id="3_abc"]
[ext_resource type="PackedScene" uid="uid://c4vc1wx7k6cw" path="res://TransitionPiece.tscn" id="4_abc"] [ext_resource type="PackedScene" uid="uid://c4vc1wx7k6cw" path="res://TransitionPiece.tscn" id="4_abc"]
[ext_resource type="Resource" uid="uid://25ctyzv93nqd3" path="res://scenes/kq4_030_mountain_pass/mountain_polygon_0.tres" id="5_mountain"] [ext_resource type="Resource" uid="uid://3hqumhi48l2q" path="res://scenes/kq4_030_mountain_pass/mountain_polygon_0.tres" id="5_mountain"]
[ext_resource type="Script" uid="uid://bounwnqg34t5k" path="res://SetPiece_.gd" id="6_setpiece"] [ext_resource type="Script" uid="uid://bounwnqg34t5k" path="res://SetPiece_.gd" id="6_setpiece"]
[sub_resource type="NavigationPolygon" id="NavigationPolygon_ppo6b"] [sub_resource type="NavigationPolygon" id="NavigationPolygon_ppo6b"]
@@ -55,7 +55,7 @@ position = Vector2(174, 519)
[node name="kq4_079_mountain_path_to_dark_castle" parent="." unique_id=1916756563 instance=ExtResource("4_abc")] [node name="kq4_079_mountain_path_to_dark_castle" parent="." unique_id=1916756563 instance=ExtResource("4_abc")]
position = Vector2(1766, 74) position = Vector2(1766, 74)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_030_mountain_pass" target = "uid://1q1az2h3p2ebd"
label = "Mountain Path to Dark Castle" label = "Mountain Path to Dark Castle"
[node name="entrance" parent="kq4_079_mountain_path_to_dark_castle" index="0"] [node name="entrance" parent="kq4_079_mountain_path_to_dark_castle" index="0"]
@@ -67,7 +67,7 @@ position = Vector2(293, 554)
[node name="kq4_029_dense_forest" parent="." unique_id=1117747814 instance=ExtResource("4_abc")] [node name="kq4_029_dense_forest" parent="." unique_id=1117747814 instance=ExtResource("4_abc")]
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_030_mountain_pass" appear_at_node = "kq4_030_mountain_pass"
target = "uid://1sfzaldfq5kn1" target = "uid://dlyrp8twdxb4g"
label = "Dense Forest" label = "Dense Forest"
[node name="entrance" parent="kq4_029_dense_forest" index="0"] [node name="entrance" parent="kq4_029_dense_forest" index="0"]
@@ -76,11 +76,7 @@ position = Vector2(506, 555)
[node name="exit" parent="kq4_029_dense_forest" index="1"] [node name="exit" parent="kq4_029_dense_forest" index="1"]
position = Vector2(-64, 534) position = Vector2(-64, 534)
[connection signal="interacted" from="kq4_024_waterfall_and_pool" to="." method="_on_waterfall_and_pool_interacted"] [node name="mountain" type="Polygon2D" parent="." unique_id=883197230 groups=["set-piece"]]
[connection signal="interacted" from="kq4_079_mountain_path_to_dark_castle" to="." method="_on_mountain_path_to_dark_castle_interacted"]
[connection signal="interacted" from="kq4_029_dense_forest" to="." method="_on_dense_forest_interacted"]
[node name="mountain" type="Polygon2D" parent="." groups=["set-piece"]]
scale = Vector2(6, 6) scale = Vector2(6, 6)
color = Color(0.5, 0.5, 0.5, 0.25) color = Color(0.5, 0.5, 0.5, 0.25)
polygon = PackedVector2Array(52, 92, 203, 123, 316, 91, 157, 133, 231, 166, 98, 187, 148, 159, 47, 187) polygon = PackedVector2Array(52, 92, 203, 123, 316, 91, 157, 133, 231, 166, 98, 187, 148, 159, 47, 187)
@@ -88,8 +84,11 @@ script = ExtResource("6_setpiece")
label = "Mountain" label = "Mountain"
points_resource = ExtResource("5_mountain") points_resource = ExtResource("5_mountain")
[connection signal="interacted" from="kq4_024_waterfall_and_pool" to="." method="_on_waterfall_and_pool_interacted"]
[connection signal="interacted" from="kq4_079_mountain_path_to_dark_castle" to="." method="_on_mountain_path_to_dark_castle_interacted"]
[connection signal="interacted" from="kq4_029_dense_forest" to="." method="_on_dense_forest_interacted"]
[connection signal="looked" from="mountain" to="." method="_on_mountain_looked"] [connection signal="looked" from="mountain" to="." method="_on_mountain_looked"]
[editable path="kq4_024_waterfall_and_pool"] [editable path="kq4_024_waterfall_and_pool"]
[editable path="kq4_079_mountain_path_to_dark_castle"] [editable path="kq4_079_mountain_path_to_dark_castle"]
[editable path="kq4_029_dense_forest"] [editable path="kq4_029_dense_forest"]

View File

@@ -43,7 +43,7 @@ position = Vector2(194, 819)
position = Vector2(910, -213) position = Vector2(910, -213)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_031_open_ocean" appear_at_node = "kq4_031_open_ocean"
target = "uid://1rwfkejhz94hp" target = "uid://dlg6010ym2uw4"
label = "Beach" label = "Beach"
[node name="entrance" parent="kq4_001_beach" index="0"] [node name="entrance" parent="kq4_001_beach" index="0"]
@@ -82,7 +82,7 @@ position = Vector2(174, 519)
position = Vector2(1500, 200) position = Vector2(1500, 200)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_031_open_ocean" appear_at_node = "kq4_031_open_ocean"
target = "uid://2bqawc9w4uu59" target = "uid://d4a2d0rfqnmmo"
label = "Beach" label = "Beach"
[node name="entrance" parent="kq4_013_beach" index="0"] [node name="entrance" parent="kq4_013_beach" index="0"]

View File

@@ -0,0 +1 @@
uid://2f7c49hpkducc

View File

@@ -41,7 +41,7 @@ position = Vector2(194, 819)
position = Vector2(910, -213) position = Vector2(910, -213)
polygon = PackedVector2Array(-703, 472, -696, 1033, -462, 953, -471, 562) polygon = PackedVector2Array(-703, 472, -696, 1033, -462, 953, -471, 562)
appear_at_node = "kq4_049_ogres_cottage" appear_at_node = "kq4_049_ogres_cottage"
target = "uid://1nxmm3b1kcdm1" target = "uid://dhie3qsi5333g"
label = "Ogre's Cottage Exterior" label = "Ogre's Cottage Exterior"
[node name="entrance" parent="kq4_004_ogres_cottage_exterior" index="0"] [node name="entrance" parent="kq4_004_ogres_cottage_exterior" index="0"]

View File

@@ -1 +1 @@
uid://1cxd7kvarvjr5 uid://c5h5n8dreoa8k

View File

@@ -41,7 +41,7 @@ position = Vector2(194, 819)
position = Vector2(1766, 74) position = Vector2(1766, 74)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_051_ogres_closet" appear_at_node = "kq4_051_ogres_closet"
target = "uid://1cxd7kvarvjr5" target = "uid://c5h5n8dreoa8k"
label = "Ogre's Cottage" label = "Ogre's Cottage"
[node name="entrance" parent="kq4_049_ogres_cottage" index="0"] [node name="entrance" parent="kq4_049_ogres_cottage" index="0"]

View File

@@ -39,7 +39,7 @@ position = Vector2(200, 900)
position = Vector2(1766, 600) position = Vector2(1766, 600)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_053_seven_dwarfs_bedroom" appear_at_node = "kq4_053_seven_dwarfs_bedroom"
target = "uid://3opp6zygwkh7x" target = "uid://bmum2mjox5dwl"
label = "054 Seven Dwarfs Cottage" label = "054 Seven Dwarfs Cottage"
[node name="entrance" parent="kq4_054_seven_dwarfs_cottage" index="0"] [node name="entrance" parent="kq4_054_seven_dwarfs_cottage" index="0"]

View File

@@ -52,7 +52,7 @@ position = Vector2(188, 628)
position = Vector2(801, 597) position = Vector2(801, 597)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_054_seven_dwarfs_cottage" appear_at_node = "kq4_054_seven_dwarfs_cottage"
target = "uid://3oq4x3exoimdb" target = "uid://bmv1tox6p3h1x"
label = "022 Gnomes Cottage" label = "022 Gnomes Cottage"
[node name="entrance" parent="kq4_022_gnomes_cottage" index="0"] [node name="entrance" parent="kq4_022_gnomes_cottage" index="0"]

View File

@@ -1 +1 @@
uid://3opp6zygwkh7x uid://bmum2mjox5dwl

View File

@@ -52,7 +52,7 @@ position = Vector2(174, 519)
position = Vector2(50, 600) position = Vector2(50, 600)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_055_seven_dwarfs_diamond_mine" appear_at_node = "kq4_055_seven_dwarfs_diamond_mine"
target = "uid://qkcwifq2lb9m" target = "uid://qkcwifq2lcam"
label = "028 Mine Entrance" label = "028 Mine Entrance"
[node name="entrance" parent="kq4_028_mine_entrance" index="0"] [node name="entrance" parent="kq4_028_mine_entrance" index="0"]

View File

@@ -39,7 +39,7 @@ position = Vector2(200, 900)
position = Vector2(1452, 159) position = Vector2(1452, 159)
polygon = PackedVector2Array(62, 224, 50, 647, 277, 662, 295, 181) polygon = PackedVector2Array(62, 224, 50, 647, 277, 662, 295, 181)
appear_at_node = "kq4_059_baby_nursery" appear_at_node = "kq4_059_baby_nursery"
target = "uid://368r91sorjxs0" target = "uid://b5eo5ndws4tin"
label = "062 Bedroom" label = "062 Bedroom"
[node name="entrance" parent="kq4_062_bedroom" index="0"] [node name="entrance" parent="kq4_062_bedroom" index="0"]

View File

@@ -1 +1 @@
uid://15wiem5l9oi69 uid://dyhaubm3vhano

View File

@@ -39,7 +39,7 @@ position = Vector2(200, 900)
position = Vector2(967, 527) position = Vector2(967, 527)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_060_bedroom" appear_at_node = "kq4_060_bedroom"
target = "uid://3hb2kqpkpvmnj" target = "uid://bfgygdasrhic6"
label = "068 The Foyer" label = "068 The Foyer"
[node name="entrance" parent="kq4_068_the_foyer" index="0"] [node name="entrance" parent="kq4_068_the_foyer" index="0"]

View File

@@ -1 +1 @@
uid://abd2plmdre4f uid://bd2plmdre4f

View File

@@ -40,7 +40,7 @@ position = Vector2(200, 900)
position = Vector2(877, 491) position = Vector2(877, 491)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_062_bedroom" appear_at_node = "kq4_062_bedroom"
target = "uid://3hb2kqpkpvmnj" target = "uid://bfgygdasrhic6"
label = "068 The Foyer" label = "068 The Foyer"
[node name="entrance" parent="kq4_068_the_foyer" index="0"] [node name="entrance" parent="kq4_068_the_foyer" index="0"]
@@ -53,7 +53,7 @@ position = Vector2(130, 684)
position = Vector2(212, -39) position = Vector2(212, -39)
polygon = PackedVector2Array(46, 377, 108, 814, 214, 811, 221, 419) polygon = PackedVector2Array(46, 377, 108, 814, 214, 811, 221, 419)
appear_at_node = "kq4_062_bedroom" appear_at_node = "kq4_062_bedroom"
target = "uid://15wiem5l9oi69" target = "uid://dyhaubm3vhano"
label = "059 Baby Nursery" label = "059 Baby Nursery"
[node name="entrance" parent="kq4_059_baby_nursery" index="0"] [node name="entrance" parent="kq4_059_baby_nursery" index="0"]

View File

@@ -1 +1 @@
uid://368r91sorjxs0 uid://b5eo5ndws4tin

View File

@@ -41,7 +41,7 @@ position = Vector2(200, 900)
position = Vector2(351, -41) position = Vector2(351, -41)
polygon = PackedVector2Array(-108, 454, -102, 844, 78, 811, 108, 429) polygon = PackedVector2Array(-108, 454, -102, 844, 78, 811, 108, 429)
appear_at_node = "kq4_064_old_dining_room" appear_at_node = "kq4_064_old_dining_room"
target = "uid://3hb2kqpkpvmnj" target = "uid://bfgygdasrhic6"
label = "068 The Foyer" label = "068 The Foyer"
[node name="entrance" parent="kq4_068_the_foyer" index="0"] [node name="entrance" parent="kq4_068_the_foyer" index="0"]
@@ -54,7 +54,7 @@ position = Vector2(-97, 787)
position = Vector2(1217, -17) position = Vector2(1217, -17)
polygon = PackedVector2Array(-49, 358, -18, 700, 179, 703, 181, 351) polygon = PackedVector2Array(-49, 358, -18, 700, 179, 703, 181, 351)
appear_at_node = "kq4_064_old_dining_room" appear_at_node = "kq4_064_old_dining_room"
target = "uid://3am8ohkla4wr9" target = "uid://7r5j24tcpshw"
label = "065 Old Kitchen" label = "065 Old Kitchen"
[node name="entrance" parent="kq4_065_old_kitchen" index="0"] [node name="entrance" parent="kq4_065_old_kitchen" index="0"]

View File

@@ -1 +1 @@
uid://2y0sti59qypsl uid://w5po4qisklh8

View File

@@ -39,7 +39,7 @@ position = Vector2(200, 900)
position = Vector2(1103, 522) position = Vector2(1103, 522)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_065_old_kitchen" appear_at_node = "kq4_065_old_kitchen"
target = "uid://2y0sti59qypsl" target = "uid://w5po4qisklh8"
label = "064 Old Dining Room" label = "064 Old Dining Room"
[node name="entrance" parent="kq4_064_old_dining_room" index="0"] [node name="entrance" parent="kq4_064_old_dining_room" index="0"]

View File

@@ -1 +1 @@
uid://3am8ohkla4wr9 uid://7r5j24tcpshw

View File

@@ -39,7 +39,7 @@ position = Vector2(200, 900)
position = Vector2(50, 600) position = Vector2(50, 600)
polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381) polygon = PackedVector2Array(-108, 454, -87, 649, 376, 658, 348, 381)
appear_at_node = "kq4_067_the_parlor" appear_at_node = "kq4_067_the_parlor"
target = "uid://3hb2kqpkpvmnj" target = "uid://bfgygdasrhic6"
label = "068 The Foyer" label = "068 The Foyer"
[node name="entrance" parent="kq4_068_the_foyer" index="0"] [node name="entrance" parent="kq4_068_the_foyer" index="0"]

View File

@@ -68,7 +68,7 @@ position = Vector2(7, 747)
position = Vector2(910, 200) position = Vector2(910, 200)
polygon = PackedVector2Array(-396, -99, -479, 209, -147, 228, -161, -61) polygon = PackedVector2Array(-396, -99, -479, 209, -147, 228, -161, -61)
appear_at_node = "kq4_068_the_foyer" appear_at_node = "kq4_068_the_foyer"
target = "uid://abd2plmdre4f" target = "uid://bd2plmdre4f"
label = "060 Bedroom" label = "060 Bedroom"
[node name="entrance" parent="kq4_060_bedroom" index="0"] [node name="entrance" parent="kq4_060_bedroom" index="0"]
@@ -81,7 +81,7 @@ position = Vector2(-311, 176)
position = Vector2(973, -346) position = Vector2(973, -346)
polygon = PackedVector2Array(58, 451, 108, 830, 393, 832, 348, 381) polygon = PackedVector2Array(58, 451, 108, 830, 393, 832, 348, 381)
appear_at_node = "kq4_068_the_foyer" appear_at_node = "kq4_068_the_foyer"
target = "uid://368r91sorjxs0" target = "uid://b5eo5ndws4tin"
label = "062 Bedroom" label = "062 Bedroom"
metadata/_edit_lock_ = true metadata/_edit_lock_ = true
@@ -95,7 +95,7 @@ position = Vector2(207, 737)
position = Vector2(50, 600) position = Vector2(50, 600)
polygon = PackedVector2Array(1448, -51, 1404, 401, 1680, 390, 1668, 85) polygon = PackedVector2Array(1448, -51, 1404, 401, 1680, 390, 1668, 85)
appear_at_node = "kq4_068_the_foyer" appear_at_node = "kq4_068_the_foyer"
target = "uid://2y0sti59qypsl" target = "uid://w5po4qisklh8"
label = "064 Old Dining Room" label = "064 Old Dining Room"
[node name="entrance" parent="kq4_064_old_dining_room" index="0"] [node name="entrance" parent="kq4_064_old_dining_room" index="0"]

Some files were not shown because too many files have changed in this diff Show More