Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a9c0886348 | ||
|
|
87a33b0abc | ||
|
|
35eb0e2503 | ||
|
|
0cc882ef4b | ||
|
|
e96ca22ef3 | ||
|
|
e75a4944bf | ||
|
|
44afaa3133 | ||
|
|
ce46b5d97e | ||
|
|
ddb298f631 | ||
|
|
0a5ef0a61e | ||
|
|
c6f3930dcb | ||
|
|
59f1817063 | ||
|
|
db677dc194 | ||
|
|
0b1dda2e2f | ||
|
|
c1758efd3b | ||
|
|
80ba83b703 | ||
|
|
26dd9c64e1 | ||
|
|
a0510e6405 |
@@ -13,6 +13,10 @@ You are the Lead Systems Architect specializing in Godot 4 and idiomatic GDScrip
|
|||||||
3. **Design:** Define API payload shapes, static GDScript type hints, node hierarchies, and signal flows.
|
3. **Design:** Define API payload shapes, static GDScript type hints, node hierarchies, and signal flows.
|
||||||
4. **Log:** Append trade-offs to `docs/architecture/tech_debt_and_optimizations.md`.
|
4. **Log:** Append trade-offs to `docs/architecture/tech_debt_and_optimizations.md`.
|
||||||
|
|
||||||
|
## Feature worktree
|
||||||
|
|
||||||
|
Before writing a feature document, confirm that the orchestrator has asked the user whether this task should use a Git worktree and supplied the selected project path and branch. If the user has not chosen yet, ask the orchestrator to get that preference before writing. Use the supplied path whether it is a worktree or the current checkout; do not create a worktree or switch branches yourself. Follow `AGENTS.md`.
|
||||||
|
|
||||||
### Shared Stage inspector UI
|
### Shared Stage inspector UI
|
||||||
For an in-stage selected-object inspector, first read `docs/specs/stage_panel_ui_system.md`
|
For an in-stage selected-object inspector, first read `docs/specs/stage_panel_ui_system.md`
|
||||||
and inspect `scripts/shared/stage_ui/` plus the `stage_panels` theme tokens. Use the existing
|
and inspect `scripts/shared/stage_ui/` plus the `stage_panels` theme tokens. Use the existing
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ You are the art and animation specialist for Stickman Studio, a kid-friendly God
|
|||||||
- Create native `.prop` and `.stk` line-art assets from a prompt, supplied reference image, or approved feature specification.
|
- Create native `.prop` and `.stk` line-art assets from a prompt, supplied reference image, or approved feature specification.
|
||||||
- Create bitmap PNG assets when raster output is requested or is technically appropriate. Use the available `imagegen` skill for generation or editing rather than substituting hand-built placeholder graphics.
|
- Create bitmap PNG assets when raster output is requested or is technically appropriate. Use the available `imagegen` skill for generation or editing rather than substituting hand-built placeholder graphics.
|
||||||
- Author stickman pose/keyframe animation data against the current rig and animation tools. Create prop animation assets only when an approved feature already defines their runtime representation.
|
- Author stickman pose/keyframe animation data against the current rig and animation tools. Create prop animation assets only when an approved feature already defines their runtime representation.
|
||||||
|
- For Stage-usable `.prop` artwork, infer a sensible everyday size from the named subject and intended use, using the current standard stickman guide as the ruler. For example, an ordinary refrigerator is roughly 0.85–1 standard stickman height; a toy, giant, or distant version is an intentional exception. Author the geometry at its intended Stage size so a new instance reads correctly at scale 1; do not treat the Prop Editor's fixed 96-unit Normalize Size target as a general Stage size. Ask about scale only when the intent is ambiguous or deliberately unusual.
|
||||||
- Suggest useful silhouette, palette, layering, pose, timing, or variant improvements without silently changing the user's request.
|
- Suggest useful silhouette, palette, layering, pose, timing, or variant improvements without silently changing the user's request.
|
||||||
- Browse for additional visual references when useful. Record source URLs and known licensing notes; use third-party images as inspiration and do not copy or redistribute them as project assets without compatible rights.
|
- Browse for additional visual references when useful. Record source URLs and known licensing notes; use third-party images as inspiration and do not copy or redistribute them as project assets without compatible rights.
|
||||||
|
|
||||||
@@ -31,6 +32,8 @@ Clothing currently has no standalone format. Author clothing as layered shapes i
|
|||||||
|
|
||||||
## Review workflow
|
## Review workflow
|
||||||
|
|
||||||
|
Before creating an asset review bundle, confirm that the orchestrator has asked the user whether this task should use a Git worktree and supplied the selected project path and branch. If the preference is missing, ask the orchestrator to get it before writing. Use the selected path whether it is a worktree or the current checkout; do not create a worktree or switch branches yourself. Follow `AGENTS.md`.
|
||||||
|
|
||||||
Create every unapproved deliverable under `content/review/artist/<request-slug>/`. Use descriptive, versioned filenames and never overwrite an existing production asset unless the user explicitly requests replacement.
|
Create every unapproved deliverable under `content/review/artist/<request-slug>/`. Use descriptive, versioned filenames and never overwrite an existing production asset unless the user explicitly requests replacement.
|
||||||
|
|
||||||
Each review bundle must contain:
|
Each review bundle must contain:
|
||||||
@@ -40,6 +43,8 @@ Each review bundle must contain:
|
|||||||
- `review.md` with the request, creative choices, optional suggestions, reference links, validation performed, known limitations, and intended production destination;
|
- `review.md` with the request, creative choices, optional suggestions, reference links, validation performed, known limitations, and intended production destination;
|
||||||
- for animation, key-pose captures plus duration, loop, facing, and contact notes.
|
- for animation, key-pose captures plus duration, loop, facing, and contact notes.
|
||||||
|
|
||||||
|
For Stage-usable `.prop` artwork, the representative preview must include a scale check against the current standard stickman guide, composited visibly in front of the art, plus a ground/contact reference where relevant. Record the inferred intended size in `review.md` as an approximate fraction of standard stickman height, along with any assumptions or intentional perspective/oversize choices. Check outline and detail readability at normal Stage zoom after sizing; geometry scaling alone may leave line weights too thin or too heavy.
|
||||||
|
|
||||||
Do not delete rejected variants automatically. Do not promote a candidate out of the review folder until the user explicitly approves it. On approval, promote `.prop` to `content/props/`, `.stk` to `content/stickmen/`, PNGs to the fitting `resources/` category, and animation data to the location named by the approved specification. Use a new filename unless replacement was explicitly approved.
|
Do not delete rejected variants automatically. Do not promote a candidate out of the review folder until the user explicitly approves it. On approval, promote `.prop` to `content/props/`, `.stk` to `content/stickmen/`, PNGs to the fitting `resources/` category, and animation data to the location named by the approved specification. Use a new filename unless replacement was explicitly approved.
|
||||||
|
|
||||||
## Boundaries and validation
|
## Boundaries and validation
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ Wait for the user to answer before analyzing or proposing feature work.
|
|||||||
|
|
||||||
## Editing limits
|
## Editing limits
|
||||||
|
|
||||||
|
- **Worktree choice:** Before preparing an accepted phase brief or updating the backlog, confirm that the orchestrator has asked the user whether this task should use a Git worktree and supplied the selected project path and branch. If the preference is missing, ask the orchestrator to get it before writing. Use the supplied path whether it is a worktree or the current checkout. Do not create a worktree, switch branches, or write into another checkout yourself. Follow `AGENTS.md`.
|
||||||
- You may edit only `docs/ideas/feature_backlog.md` and accepted phase briefs under `docs/plans/` during normal use. Never edit application code, scenes, project settings, or unrelated documents.
|
- You may edit only `docs/ideas/feature_backlog.md` and accepted phase briefs under `docs/plans/` during normal use. Never edit application code, scenes, project settings, or unrelated documents.
|
||||||
- Do not create a phase brief before both design acceptance and receipt of the user's phase number.
|
- Do not create a phase brief before both design acceptance and receipt of the user's phase number.
|
||||||
- Keep idea discussion conversational and concise. When writing a document, summarize the resulting file and link it in your response.
|
- Keep idea discussion conversational and concise. When writing a document, summarize the resulting file and link it in your response.
|
||||||
|
|||||||
@@ -9,10 +9,12 @@ You are a Godot 4 / GDScript 2.0 implementation developer. Adhere to coding stan
|
|||||||
|
|
||||||
## Rules
|
## Rules
|
||||||
|
|
||||||
|
- **Worktree choice:** Before persistent edits, confirm that the orchestrator has asked the user whether this task should use a Git worktree and supplied the selected project path and branch. If the preference is missing, ask the orchestrator to get it before editing. Use the supplied path whether it is a worktree or the current checkout. Do not create a worktree, switch branches, merge, or edit another checkout yourself. Follow `AGENTS.md` for the selected path.
|
||||||
- **Targeted Edits Only:** Do NOT output full unchanged files. Output only modified functions, concise diffs, or specific node configurations.
|
- **Targeted Edits Only:** Do NOT output full unchanged files. Output only modified functions, concise diffs, or specific node configurations.
|
||||||
- **Static Typing:** Enforce explicit type hints for all signatures and variables.
|
- **Static Typing:** Enforce explicit type hints for all signatures and variables.
|
||||||
- **Decoupling:** Follow "call down, signal up".
|
- **Decoupling:** Follow "call down, signal up".
|
||||||
- **Validation:** Resolve the Godot 4.7.1 binary for the current platform using `AGENTS.md`. Run syntax/import checks, relevant existing suites, and focused automated tests of the feature's observable outcomes. For runtime interactions, exercise a minimal scene or fixture through the real production path, advance frames or physics ticks, and assert the result. Fix failures and rerun the affected checks. Inspect rendered output when available; state clearly when visual behavior could not be checked.
|
- **Validation:** Resolve the Godot 4.7.1 binary for the current platform using `AGENTS.md`. Run syntax/import checks, relevant existing suites, and focused automated tests of the feature's observable outcomes. For runtime interactions, exercise a minimal scene or fixture through the real production path, advance frames or physics ticks, and assert the result. Fix failures and rerun the affected checks. Inspect rendered output when available; state clearly when visual behavior could not be checked.
|
||||||
|
- **Windows visual verification:** The Windows screenshot service repeatedly times out on Project Manager/Godot windows. Do not retry it; use a focused Godot GUI run or harness that saves a viewport PNG, inspect the saved image locally, and assert the relevant interactions in the same focused verification workflow.
|
||||||
|
|
||||||
## Output Format
|
## Output Format
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,23 @@ model_reasoning_effort = "high"
|
|||||||
sandbox_mode = "read-only"
|
sandbox_mode = "read-only"
|
||||||
|
|
||||||
developer_instructions = """
|
developer_instructions = """
|
||||||
|
## Windows UI visual checks
|
||||||
|
|
||||||
|
The Windows screenshot service repeatedly times out when capturing Project Manager/Godot windows. Do not rely on or retry its live-window feed. When a visual implementation check is needed, direct the developer to run a focused Godot scene or harness that saves a viewport PNG and inspect that local image; pair it with interaction checks for the relevant controls.
|
||||||
|
|
||||||
|
## Worktree choice
|
||||||
|
|
||||||
|
You are read-only and must not create worktrees or write project files. For any handoff that will create project files, confirm that the orchestrator has asked the user whether to use a worktree and supplied the selected project path and branch. Do not require a worktree when the user chooses the current checkout.
|
||||||
|
|
||||||
|
## 0. Editor Visual Style Guide
|
||||||
|
|
||||||
|
Before making, mocking, reviewing, or suggesting any Prop Editor or Stickman Editor UI/UX
|
||||||
|
change, read `docs/guides/editor_visual_style_guide.md`. Use its documented implemented
|
||||||
|
patterns and shared theme ownership as the starting point, then check relevant feature specs
|
||||||
|
and current controls for workflow-specific behavior. Clearly distinguish current behavior
|
||||||
|
from recommendations. If a proposal intentionally departs from the guide, explain why and
|
||||||
|
identify the departure in the proposal or spec. Follow explicit user direction when it differs.
|
||||||
|
|
||||||
## 1. Kid-Friendly UI Guardrails (10-Year-Old Persona)
|
## 1. Kid-Friendly UI Guardrails (10-Year-Old Persona)
|
||||||
|
|
||||||
* **Shared Stage Inspector UI:** Before proposing an in-stage selected-object inspector, read
|
* **Shared Stage Inspector UI:** Before proposing an in-stage selected-object inspector, read
|
||||||
@@ -15,6 +32,19 @@ developer_instructions = """
|
|||||||
for dialogs or other editor workflows, reuse its visual principles only when their layout
|
for dialogs or other editor workflows, reuse its visual principles only when their layout
|
||||||
and interaction model fit, and call out any exception.
|
and interaction model fit, and call out any exception.
|
||||||
|
|
||||||
|
* **Dialogs & Popups:** Before designing a child-facing dialog, read
|
||||||
|
`docs/specs/dialog_design_principles.md`. Carry its rounded controls, thicker borders, blue
|
||||||
|
primary actions with bold white labels, comfortable button spacing, and large readable type
|
||||||
|
into the proposed UI. Prefer visible, labeled dismissal actions such as Cancel, Done, or Back;
|
||||||
|
do not default to a small corner × as the only way to close a dialog. Use the Choose Scenery
|
||||||
|
dialog and its theme tokens as the current implementation reference.
|
||||||
|
|
||||||
|
* **Stable Dialog Anchoring:** When tabs, filters, or other in-place choices change a dialog's
|
||||||
|
size, keep its current anchor so the clicked control stays under the pointer. Grow from a
|
||||||
|
stable edge while space allows; when the safe viewport is reached, cap the dialog and scroll
|
||||||
|
its content. Nudge it only as much as needed to keep essential controls visible. Do not
|
||||||
|
recenter after every content change.
|
||||||
|
|
||||||
* **Touch & Click Target Rules:**
|
* **Touch & Click Target Rules:**
|
||||||
* Minimum pointer hit-target: **44×44 logical pixels** (never build tiny 16px/24px buttons).
|
* Minimum pointer hit-target: **44×44 logical pixels** (never build tiny 16px/24px buttons).
|
||||||
* Control heights (buttons, dropdowns, rows) must obey `button_min_height` tokens from the theme.
|
* Control heights (buttons, dropdowns, rows) must obey `button_min_height` tokens from the theme.
|
||||||
@@ -48,15 +78,17 @@ developer_instructions = """
|
|||||||
|
|
||||||
* **Accessible Inputs:**
|
* **Accessible Inputs:**
|
||||||
* Prefer simple explicit buttons (e.g., ⬆️ / ⬇️ Move Up/Down) over drag-and-drop reordering inside popups for accessibility and ease of testing.
|
* Prefer simple explicit buttons (e.g., ⬆️ / ⬇️ Move Up/Down) over drag-and-drop reordering inside popups for accessibility and ease of testing.
|
||||||
* Always provide prominent, clickable `[X Cancel]` buttons on active workflows so users don't need to know the `Esc` key.
|
* Provide a prominent, clickable, visibly labeled action such as **Cancel** on active workflows so users do not need to know the `Esc` key. Do not rely on a corner × as the sole dismissal control.
|
||||||
|
|
||||||
## 3. Pipeline Output Protocol
|
## 3. Pipeline Output Protocol
|
||||||
|
|
||||||
When invoked during Phase 0a (UI/UX Proposal & Alternatives):
|
When invoked during Phase 0a (UI/UX Proposal & Alternatives):
|
||||||
1. Analyze the initial proposal for usability hurdles, tiny click targets, or hidden menus.
|
1. Analyze the initial proposal for usability hurdles, tiny click targets, or hidden menus.
|
||||||
2. Pitch 1 to 3 alternate visual/interaction approaches (e.g., compare floating cursor badges vs. top notification bars).
|
2. Present about three distinct UI concepts by default (usually exactly three). Apply the same default when the user directly asks you for UI ideas or mockups outside a formal spec-pipeline run.
|
||||||
3. Mark your recommended choice with [Recommended] and ask up to 3 simple clarification questions.
|
3. Give each concept a visual mockup, not only a prose description. Use one comparison board when all three remain legible; otherwise create a separate mockup for each. Use supplied screenshots and the established product style as visual references when available. Make the concepts differ in interaction or information hierarchy, not only colors or decoration. If visual mockup generation is unavailable, provide annotated wireframes and say so.
|
||||||
4. STOP and wait for user feedback.
|
4. Pair each mockup with a short title and concise tradeoff. Mark the recommended option with [Recommended] and explain why. Ask up to 3 focused clarification questions after presenting the concepts.
|
||||||
|
5. Do not require alternatives or mockups for implementation-only requests, narrow bug fixes, or critique-only questions unless the user asks. Follow any user-specified number or format.
|
||||||
|
6. STOP and wait for user feedback before writing the UI spec.
|
||||||
|
|
||||||
When invoked during Phase 0b (UI Spec Generation):
|
When invoked during Phase 0b (UI Spec Generation):
|
||||||
Output a structured spec covering:
|
Output a structured spec covering:
|
||||||
|
|||||||
@@ -16,4 +16,5 @@ You are a technical writer for Godot 4 / GDScript projects. You document game ar
|
|||||||
|
|
||||||
1. **Targeted Edits Only:** Touch only the specific markdown sections affected by recent changes. Never output full unchanged files.
|
1. **Targeted Edits Only:** Touch only the specific markdown sections affected by recent changes. Never output full unchanged files.
|
||||||
2. **Scannable & Technical:** Lead directly with code blocks, tables, and structured lists. Eliminate marketing fluff or generic introductions.
|
2. **Scannable & Technical:** Lead directly with code blocks, tables, and structured lists. Eliminate marketing fluff or generic introductions.
|
||||||
"""
|
3. **Worktree Choice:** Before any persistent documentation work, confirm that the orchestrator has asked the user whether this task should use a Git worktree and supplied the selected project path and branch. If the preference is missing, ask the orchestrator to get it first. Use the selected path whether it is a worktree or the current checkout; do not create a worktree yourself.
|
||||||
|
"""
|
||||||
|
|||||||
@@ -7,11 +7,15 @@ description: "Create or revise Stickman Studio props, stickmen, embedded clothin
|
|||||||
|
|
||||||
Use the `artist` subagent for project graphical-asset and animation work. This skill manages delegation, review, approval, and handoff; it does not replace the Artist's visual judgment.
|
Use the `artist` subagent for project graphical-asset and animation work. This skill manages delegation, review, approval, and handoff; it does not replace the Artist's visual judgment.
|
||||||
|
|
||||||
|
## Choose a worktree before creating files
|
||||||
|
|
||||||
|
Before creating an asset review bundle or other project files, ask whether the user wants this task to use a Git worktree unless they have already stated a preference. For small, self-contained asset changes, offer the current checkout as the default. Wait for the answer before creating a worktree. Follow `AGENTS.md`, and pass Artist the absolute path and branch the user selected, whether that is a worktree or the current checkout. Do not require a worktree when the user declines one.
|
||||||
|
|
||||||
## Delegate to Artist
|
## Delegate to Artist
|
||||||
|
|
||||||
Spawn `artist` with `agent_type: "artist"`. Reuse the same Artist for revisions while it is available. Tell it that other agents may share the workspace and that it must preserve unrelated changes.
|
Spawn `artist` with `agent_type: "artist"`. Reuse the same Artist for revisions while it is available. Tell it that other agents may share the workspace and that it must preserve unrelated changes.
|
||||||
|
|
||||||
Pass the user's request, intended use, supplied image roles (reference versus edit target), relevant approved specification, requested format, and any style or technical constraints. Do not require the user to repeat information already available in the conversation or repository.
|
Pass the user's request, intended use, supplied image roles (reference versus edit target), relevant approved specification, requested format, and any style or technical constraints. For Stage-usable `.prop` art, include a requested scale when one is specified; otherwise have Artist infer a conventional size from the named subject and intended use against the standard stickman guide, and record that estimate in the review bundle. Do not require the user to repeat ordinary size information or clarify unless the requested scale is ambiguous or intentionally unusual.
|
||||||
|
|
||||||
Before delegating, read [references/project-formats.md](references/project-formats.md) for routing and source-of-truth locations. For production or revision work, also read [references/review-workflow.md](references/review-workflow.md).
|
Before delegating, read [references/project-formats.md](references/project-formats.md) for routing and source-of-truth locations. For production or revision work, also read [references/review-workflow.md](references/review-workflow.md).
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,8 @@ Treat the user's clear statement that they are ready to work on the discussed, s
|
|||||||
|
|
||||||
## Stage 3: Write and hand off the brief
|
## Stage 3: Write and hand off the brief
|
||||||
|
|
||||||
Once the user is ready and the phase number is known, have Designer create the accepted product/design brief at `docs/plans/phase_<number>_<feature_slug>.md`, following `docs/plans/README.md`. The brief should cover the goal and audience, desired child outcome, behavior/flow and feedback, story or directing value where relevant, success criteria, included and excluded scope, known risks/dependencies, project references, and remaining questions for the spec-pipeline. Keep architecture/API decisions for the architect's later technical specification in `docs/specs/`.
|
Once the user is ready and the phase number is known, ask whether the brief and later feature work should use a Git worktree unless the user has already stated a preference for this task. Follow the choice and the `Feature branches and worktrees` rules in `AGENTS.md`; do not create a worktree before the user answers. Use the selected checkout consistently for the brief, later specs, implementation, and verification. Pass its absolute path and current branch to Designer. Do not switch branches or write outside the selected checkout.
|
||||||
|
|
||||||
|
Have Designer create the accepted product/design brief at `docs/plans/phase_<number>_<feature_slug>.md`, following `docs/plans/README.md`. The brief should cover the goal and audience, desired child outcome, behavior/flow and feedback, story or directing value where relevant, success criteria, included and excluded scope, known risks/dependencies, project references, and remaining questions for the spec-pipeline. Keep architecture/API decisions for the architect's later technical specification in `docs/specs/`.
|
||||||
|
|
||||||
Do not overwrite an existing phase brief without the user's direction. Confirm the resulting file exists, update the matching backlog entry to `Planned` with a link to the brief, then tell the user where the plan is using a clickable local file link. Stop there; this skill creates the design handoff, not the technical spec or implementation.
|
Do not overwrite an existing phase brief without the user's direction. Confirm the resulting file exists, update the matching backlog entry to `Planned` with a link to the brief, then tell the user where the plan is using a clickable local file link. Stop there; this skill creates the design handoff, not the technical spec or implementation.
|
||||||
|
|||||||
@@ -5,17 +5,26 @@ description: "Stickman Studio feature workflow: UI/UX and architecture specs, im
|
|||||||
|
|
||||||
## Execution Logic
|
## Execution Logic
|
||||||
|
|
||||||
|
### Feature branch and worktree setup
|
||||||
|
|
||||||
|
Before creating a worktree for a task, ask the user whether they want one and wait for the answer. For small, self-contained fixes or documentation changes, offer the current checkout as the default; for larger feature phases, explain the benefit of a dedicated worktree. Do not create a worktree before the user chooses. Keep the user's choice for the task from the first persistent artifact through implementation and verification.
|
||||||
|
|
||||||
|
Follow the `Feature branches and worktrees` rules in `AGENTS.md`: inspect `git status --short`, the current branch, and worktree list before the first persistent change. If the user chooses the current checkout, stay on its branch. If they choose a worktree, reuse a matching one or create `.worktrees/<feature-slug>` on `feature/<feature-slug>` from the integration branch, including the phase number when known. Do not switch branches, transfer uncommitted changes without direction, or merge automatically.
|
||||||
|
|
||||||
|
Pass every delegated agent the absolute selected project path and its branch, whether that path is a worktree or the current checkout. Tell each agent to use it for all repository reads, writes, Godot runs, and visual checks. Do not stop file-writing work solely because the user chose not to use a worktree.
|
||||||
|
|
||||||
1. **Phase 0a: UI/UX Proposal & Alternative Ideas (User-Facing Features Only)**
|
1. **Phase 0a: UI/UX Proposal & Alternative Ideas (User-Facing Features Only)**
|
||||||
- `@uiux` analyzes the user's initial idea for cognitive friction, accessibility, and kid-friendliness.
|
- `@uiux` analyzes the user's initial idea for cognitive friction, accessibility, and kid-friendliness.
|
||||||
|
- Before proposing, mocking, reviewing, or suggesting UI/UX changes, `@uiux` reads `docs/guides/editor_visual_style_guide.md` and checks the relevant implemented controls/specs. Treat the guide as the current visual baseline; distinguish implemented behavior from recommendations and explain intentional departures. This also applies to direct `@uiux` requests outside the pipeline.
|
||||||
- For an in-stage selected-object inspector, `@uiux` first reviews `docs/specs/stage_panel_ui_system.md` and the current shared controls under `scripts/shared/stage_ui/`; proposals should build on that system unless the interaction needs justify a specific exception.
|
- For an in-stage selected-object inspector, `@uiux` first reviews `docs/specs/stage_panel_ui_system.md` and the current shared controls under `scripts/shared/stage_ui/`; proposals should build on that system unless the interaction needs justify a specific exception.
|
||||||
- `@uiux` pitches **1–3 alternative interaction approaches** (e.g., comparing floating tooltips vs. top-center banners, custom cursor reticles, or streamlined dialogs).
|
- Follow the concept-count and visual-mockup protocol in `.codex/agents/uiux.toml`; it also applies when the user asks `@uiux` for ideas outside a formal pipeline run.
|
||||||
- `@uiux` highlights the most intuitive option with `[Recommended]` and asks up to 3 clarification questions.
|
|
||||||
- `@uiux` **STOP:** Waits for user feedback/selection before writing the UI spec.
|
- `@uiux` **STOP:** Waits for user feedback/selection before writing the UI spec.
|
||||||
- _Bypass Rule:_ If the feature is strictly internal engine/backend logic (e.g., physics, serialization, scanning), skip directly to Phase 1a.
|
- _Bypass Rule:_ If the feature is strictly internal engine/backend logic (e.g., physics, serialization, scanning), skip directly to Phase 1a.
|
||||||
|
|
||||||
2. **Phase 0b: UI Spec Generation**
|
2. **Phase 0b: UI Spec Generation**
|
||||||
- User approves an option or provides feedback.
|
- User approves an option or provides feedback.
|
||||||
- `@uiux` outputs the UI/UX specification (control layouts, widget behaviors, visual feedback states, and cursor logic).
|
- `@uiux` outputs the UI/UX specification (control layouts, widget behaviors, visual feedback states, and cursor logic).
|
||||||
|
- Carry forward the style guide's applicable patterns and token ownership. If the approved direction departs from them, record the reason and the specific difference in the spec.
|
||||||
- For Stage inspector work, name which shared components and theme tokens the design uses or proposes to extend. Treat dialogs and other editor panels as separate workflows unless their interaction model fits the inspector kit.
|
- For Stage inspector work, name which shared components and theme tokens the design uses or proposes to extend. Treat dialogs and other editor panels as separate workflows unless their interaction model fits the inspector kit.
|
||||||
|
|
||||||
3. **Phase 1a: Architecture Proposal & Clarification**
|
3. **Phase 1a: Architecture Proposal & Clarification**
|
||||||
|
|||||||
@@ -1,9 +1,20 @@
|
|||||||
# Godot 4+ specific ignores
|
# Godot 4+ specific ignores
|
||||||
.godot/
|
.godot/
|
||||||
|
.worktrees/
|
||||||
.images/
|
.images/
|
||||||
/android/
|
/android/
|
||||||
addons/
|
addons/
|
||||||
*.tmp
|
*.tmp
|
||||||
.opencode/skills/playwright-cli
|
.opencode/skills/playwright-cli
|
||||||
*.import
|
*.import
|
||||||
|
# Local scratch captures, logs, and temporary browser profiles
|
||||||
|
/tmp/
|
||||||
|
/work/
|
||||||
content/review/artist/
|
content/review/artist/
|
||||||
|
content/examples/
|
||||||
|
/tests/godot_test_user_data/
|
||||||
|
/tests/*_runtime.log
|
||||||
|
/tests/phase19_*.log
|
||||||
|
/tests/phase19_visual_*.png
|
||||||
|
/tests/phase19_selected_artwork_depth_inspector.png
|
||||||
|
/.codex-remote-attachments/
|
||||||
|
|||||||
@@ -6,6 +6,17 @@
|
|||||||
- Headless tests + command-line scene playback exist (see "Command-line testing & debug playback" below); the GUI editor runs via `run/main_scene`.
|
- Headless tests + command-line scene playback exist (see "Command-line testing & debug playback" below); the GUI editor runs via `run/main_scene`.
|
||||||
- **Main scene:** `res://scenes/main.tscn` (set as `run/main_scene` in `project.godot`; hosts the Stickman Editor)
|
- **Main scene:** `res://scenes/main.tscn` (set as `run/main_scene` in `project.godot`; hosts the Stickman Editor)
|
||||||
|
|
||||||
|
## Feature branches and worktrees
|
||||||
|
|
||||||
|
- Before creating a Git worktree for a task, ask the user whether they want this task to use one. Do not create a worktree until they answer. For small, self-contained fixes and documentation changes, offer the current checkout as the default; for larger feature phases, explain why a worktree may help and let the user choose.
|
||||||
|
- Read-only discussion and proposals do not need a worktree. Before the first persistent change, inspect `git status --short`, `git branch --show-current`, and `git worktree list`.
|
||||||
|
- If the user chooses the current checkout, keep working on its current branch. Do not switch branches, stash, reset, clean, move, or overwrite unrelated work.
|
||||||
|
- If the user chooses a worktree, reuse a matching one when present. Otherwise, create `.worktrees/<feature-slug>` with branch `feature/<feature-slug>`, based on the integration branch (usually `main`). Include the phase number in the slug when known, such as `phase-20-stage-search`. Example: `git worktree add .worktrees/phase-20-stage-search -b feature/phase-20-stage-search main`. Confirm the path and branch with `git worktree list` and `git branch --show-current`.
|
||||||
|
- If relevant uncommitted changes need to be carried into a chosen worktree, ask how to handle them before proceeding.
|
||||||
|
- Pass every subagent the absolute path and branch the user chose, whether that is a worktree or the current checkout. All project reads, writes, Godot commands, and visual checks must target that path. Do not require a worktree when the user chose the current checkout.
|
||||||
|
- Do not merge feature branches automatically. Keep each feature branch available for review and merge only when the user asks or the active workflow explicitly authorizes it.
|
||||||
|
- `.worktrees/` is a local worktree container and must remain gitignored.
|
||||||
|
|
||||||
## Repository layout
|
## Repository layout
|
||||||
|
|
||||||
- `scripts/` and `scenes/` stay as separate roots with matching feature groups. Editor controllers live in `scripts/editors/{stickman,prop,stage}`; stage, stickman runtime, props, terrain, and speech systems live in `scripts/{stage,characters/stickman,props,terrain,speech}`.
|
- `scripts/` and `scenes/` stay as separate roots with matching feature groups. Editor controllers live in `scripts/editors/{stickman,prop,stage}`; stage, stickman runtime, props, terrain, and speech systems live in `scripts/{stage,characters/stickman,props,terrain,speech}`.
|
||||||
@@ -35,6 +46,11 @@
|
|||||||
- A load failure shows a "Could Not Load Scene" dialog and falls back to a blank scene.
|
- A load failure shows a "Could Not Load Scene" dialog and falls back to a blank scene.
|
||||||
- **Richer debug logs:** append `--verbose` to the scene-playback (or headless) command to surface engine warnings/errors alongside your own `print()` lines.
|
- **Richer debug logs:** append `--verbose` to the scene-playback (or headless) command to surface engine warnings/errors alongside your own `print()` lines.
|
||||||
|
|
||||||
|
## Visual verification on Windows
|
||||||
|
|
||||||
|
- The Windows screenshot service repeatedly times out when capturing the Project Manager or Godot windows. Do not retry or depend on its live-window feed.
|
||||||
|
- For visual UI verification, run a focused Godot scene or test harness that exercises the relevant controls and saves a viewport PNG, then inspect that image locally. Keep interaction assertions in the focused run as well; use headless runs for behavior that does not need rendered output.
|
||||||
|
|
||||||
## Project overview
|
## Project overview
|
||||||
|
|
||||||
Stickman Studio is a kid-friendly 2D scene-building and directing project—not only a
|
Stickman Studio is a kid-friendly 2D scene-building and directing project—not only a
|
||||||
@@ -72,6 +88,29 @@ the configured `run/main_scene`.
|
|||||||
Keep the prompt and visible Cancel together, leave the mode pill unobstructed, and reuse or
|
Keep the prompt and visible Cancel together, leave the mode pill unobstructed, and reuse or
|
||||||
generalize `StageUseTargetCaptureBar` instead of copying its styling.
|
generalize `StageUseTargetCaptureBar` instead of copying its styling.
|
||||||
|
|
||||||
|
## Child-facing dialogs and popups
|
||||||
|
|
||||||
|
- When a user prefixes a UI/UX question or request with `uiux:` or `uiux,`, route it to the
|
||||||
|
custom UI/UX agent defined in `.codex/agents/uiux.toml`. Treat that prefix as an explicit
|
||||||
|
delegation request. The UI/UX agent is read-only; carry its design guidance into implementation
|
||||||
|
separately when implementation is requested.
|
||||||
|
- Before making, mocking, reviewing, or suggesting Prop or Stickman UI/UX changes, have `@uiux`
|
||||||
|
read `docs/guides/editor_visual_style_guide.md` and consult the relevant implemented patterns
|
||||||
|
and feature specs. Treat the guide as the current visual baseline; call out intentional
|
||||||
|
departures and distinguish current behavior from recommendations.
|
||||||
|
- For new or revised child-facing dialogs, popups, and short setup flows, follow the
|
||||||
|
[Dialog Design Principles](docs/specs/dialog_design_principles.md). Use rounded containers
|
||||||
|
and controls, clear borders, blue primary actions with bold white labels, comfortable button
|
||||||
|
spacing, and large readable type. Prefer a visible, labeled action such as Cancel, Done, or
|
||||||
|
Back; do not make a small corner × the default or only way to close a dialog.
|
||||||
|
- When a dialog resizes after a tab, filter, or other in-place choice, preserve its current
|
||||||
|
anchor so the clicked control does not jump away from the pointer. Keep the dialog within the
|
||||||
|
safe viewport by limiting its height and scrolling content; nudge it only as much as needed
|
||||||
|
to keep essential controls visible. Avoid recentering after every content change.
|
||||||
|
- Keep reusable values in `SandboxTheme` or `PropTheme`. The Choose Scenery dialog in
|
||||||
|
`scripts/shared/ui/asset_selector.gd` and the `popups.asset_selector` tokens are the current
|
||||||
|
implementation reference. Adapt its layout to each workflow.
|
||||||
|
|
||||||
## Required addon
|
## Required addon
|
||||||
|
|
||||||
- **Scalable Vector Shapes 2D** (v2.27.7) at `addons/curved_lines_2d/`
|
- **Scalable Vector Shapes 2D** (v2.27.7) at `addons/curved_lines_2d/`
|
||||||
|
|||||||
@@ -0,0 +1,715 @@
|
|||||||
|
{
|
||||||
|
"anchors": {
|
||||||
|
"origin": {
|
||||||
|
"allowed_hands": "both",
|
||||||
|
"role": "pivot",
|
||||||
|
"rotation_deg": 0.0,
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"z_index_offset": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"material_preset": "wood",
|
||||||
|
"metadata": {
|
||||||
|
"created_at": "2026-10-21T23:11:16",
|
||||||
|
"modified_at": "2026-10-21T23:11:16"
|
||||||
|
},
|
||||||
|
"prop_name": "Bookshelf",
|
||||||
|
"shapes": [
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#AB795E",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 12.553713506884,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -320.119689941406,
|
||||||
|
"y": -488.025634765625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 320.119689941406,
|
||||||
|
"y": -488.025634765625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 320.119689941406,
|
||||||
|
"y": 488.025604248047
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -320.119689941406,
|
||||||
|
"y": 488.025604248047
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#F5D9AA",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 12.553713506884,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -273.043273925781,
|
||||||
|
"y": -431.533935546875
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 273.043273925781,
|
||||||
|
"y": -431.533935546875
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 273.043273925781,
|
||||||
|
"y": 412.703308105469
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -273.043273925781,
|
||||||
|
"y": 412.703308105469
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#AB795E",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 12.553713506884,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -273.043273925781,
|
||||||
|
"y": -171.044372558594
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 273.043273925781,
|
||||||
|
"y": -171.044372558594
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 273.043273925781,
|
||||||
|
"y": -133.383239746094
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -273.043273925781,
|
||||||
|
"y": -133.383239746094
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#AB795E",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 12.553713506884,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -273.043273925781,
|
||||||
|
"y": 108.275756835938
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 273.043273925781,
|
||||||
|
"y": 108.275756835938
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 273.043273925781,
|
||||||
|
"y": 145.936904907227
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -273.043273925781,
|
||||||
|
"y": 145.936904907227
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#C87375",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 12.553713506884,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -238.520568847656,
|
||||||
|
"y": -409.56494140625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -182.028854370117,
|
||||||
|
"y": -409.56494140625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -182.028854370117,
|
||||||
|
"y": -183.598083496094
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -238.520568847656,
|
||||||
|
"y": -183.598083496094
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#77A7B2",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 12.553713506884,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -169.475143432617,
|
||||||
|
"y": -409.56494140625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -112.983421325684,
|
||||||
|
"y": -409.56494140625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -112.983421325684,
|
||||||
|
"y": -183.598083496094
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -169.475143432617,
|
||||||
|
"y": -183.598083496094
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#E3B765",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 12.553713506884,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -100.429710388184,
|
||||||
|
"y": -409.56494140625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -43.9379997253418,
|
||||||
|
"y": -409.56494140625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -43.9379997253418,
|
||||||
|
"y": -183.598083496094
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -100.429710388184,
|
||||||
|
"y": -183.598083496094
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#82B38D",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 12.553713506884,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -28.2458553314209,
|
||||||
|
"y": -409.56494140625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 28.2458553314209,
|
||||||
|
"y": -409.56494140625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 28.2458553314209,
|
||||||
|
"y": -183.598083496094
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -28.2458553314209,
|
||||||
|
"y": -183.598083496094
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#C87375",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 12.553713506884,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 53.3532829284668,
|
||||||
|
"y": -409.56494140625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 109.844993591309,
|
||||||
|
"y": -409.56494140625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 109.844993591309,
|
||||||
|
"y": -183.598083496094
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 53.3532829284668,
|
||||||
|
"y": -183.598083496094
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#77A7B2",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 12.553713506884,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 134.952423095703,
|
||||||
|
"y": -409.56494140625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 191.444137573242,
|
||||||
|
"y": -409.56494140625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 191.444137573242,
|
||||||
|
"y": -183.598083496094
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 134.952423095703,
|
||||||
|
"y": -183.598083496094
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#78A7B2",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 12.553713506884,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -232.243698120117,
|
||||||
|
"y": -114.552658081055
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -178.890426635742,
|
||||||
|
"y": -114.552658081055
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -178.890426635742,
|
||||||
|
"y": 86.3067626953125
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -232.243698120117,
|
||||||
|
"y": 86.3067626953125
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#E5B869",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 12.553713506884,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -166.336700439453,
|
||||||
|
"y": -114.552658081055
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -112.983421325684,
|
||||||
|
"y": -114.552658081055
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -112.983421325684,
|
||||||
|
"y": 86.3067626953125
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -166.336700439453,
|
||||||
|
"y": 86.3067626953125
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#C97375",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 12.553713506884,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -100.429710388184,
|
||||||
|
"y": -114.552658081055
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -47.0764274597168,
|
||||||
|
"y": -114.552658081055
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -47.0764274597168,
|
||||||
|
"y": 86.3067626953125
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -100.429710388184,
|
||||||
|
"y": 86.3067626953125
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#9BB586",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 12.553713506884,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 12.5537137985229,
|
||||||
|
"y": -114.552658081055
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 65.9069976806641,
|
||||||
|
"y": -114.552658081055
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 65.9069976806641,
|
||||||
|
"y": 86.3067626953125
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 12.5537137985229,
|
||||||
|
"y": 86.3067626953125
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#83AABB",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 12.553713506884,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 84.7375717163086,
|
||||||
|
"y": -114.552658081055
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 138.090850830078,
|
||||||
|
"y": -114.552658081055
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 138.090850830078,
|
||||||
|
"y": 86.3067626953125
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 84.7375717163086,
|
||||||
|
"y": 86.3067626953125
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#DEAA72",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 12.553713506884,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 150.644561767578,
|
||||||
|
"y": -114.552658081055
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 203.997848510742,
|
||||||
|
"y": -114.552658081055
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 203.997848510742,
|
||||||
|
"y": 86.3067626953125
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 150.644561767578,
|
||||||
|
"y": 86.3067626953125
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#8CB98E",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 12.553713506884,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -213.413131713867,
|
||||||
|
"y": 199.290191650391
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -37.6611404418945,
|
||||||
|
"y": 199.290191650391
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -37.6611404418945,
|
||||||
|
"y": 371.903747558594
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -213.413131713867,
|
||||||
|
"y": 371.903747558594
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#79AF81",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 12.553713506884,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -28.2458553314209,
|
||||||
|
"y": 211.843902587891
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -35.6525459289551,
|
||||||
|
"y": 240.654678344727
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -56.7427864074707,
|
||||||
|
"y": 265.10302734375
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -88.3153762817383,
|
||||||
|
"y": 281.4228515625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -125.537139892578,
|
||||||
|
"y": 287.166198730469
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -162.758895874023,
|
||||||
|
"y": 281.4228515625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -194.331481933594,
|
||||||
|
"y": 265.10302734375
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -215.421722412109,
|
||||||
|
"y": 240.654678344727
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -222.828414916992,
|
||||||
|
"y": 211.843902587891
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -215.421722412109,
|
||||||
|
"y": 183.033111572266
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -194.331481933594,
|
||||||
|
"y": 158.584777832031
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -162.758895874023,
|
||||||
|
"y": 142.264938354492
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -125.537139892578,
|
||||||
|
"y": 136.521606445313
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -88.3153762817383,
|
||||||
|
"y": 142.264938354492
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -56.7427864074707,
|
||||||
|
"y": 158.584777832031
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -35.6525459289551,
|
||||||
|
"y": 183.033111572266
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#C17476",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 12.553713506884,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 31.3842849731445,
|
||||||
|
"y": 252.643463134766
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 207.136276245117,
|
||||||
|
"y": 252.643463134766
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 207.136276245117,
|
||||||
|
"y": 393.872741699219
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 31.3842849731445,
|
||||||
|
"y": 393.872741699219
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": false,
|
||||||
|
"fill_color": "#00000000",
|
||||||
|
"outline_color": "#F4CE9E",
|
||||||
|
"outline_width": 9.41528513016301,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 31.3842849731445,
|
||||||
|
"y": 312.273620605469
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 207.136276245117,
|
||||||
|
"y": 312.273620605469
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "line",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"objects",
|
||||||
|
"walls"
|
||||||
|
],
|
||||||
|
"version": "1.1"
|
||||||
|
}
|
||||||
@@ -0,0 +1,368 @@
|
|||||||
|
{
|
||||||
|
"anchors": {
|
||||||
|
"origin": {
|
||||||
|
"allowed_hands": "both",
|
||||||
|
"role": "pivot",
|
||||||
|
"rotation_deg": 0.0,
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"z_index_offset": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"material_preset": "none",
|
||||||
|
"metadata": {
|
||||||
|
"created_at": "2026-10-21T21:43:32",
|
||||||
|
"modified_at": "2026-10-21T21:43:32"
|
||||||
|
},
|
||||||
|
"prop_name": "City Skyline",
|
||||||
|
"shapes": [
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#879DB0",
|
||||||
|
"outline_color": "#687F97",
|
||||||
|
"outline_width": 8.76671850699844,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -935.116638183594,
|
||||||
|
"y": 284.918365478516
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -935.116638183594,
|
||||||
|
"y": 7.30561065673828
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -812.382568359375,
|
||||||
|
"y": 7.30561065673828
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -812.382568359375,
|
||||||
|
"y": -138.806365966797
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -642.892700195313,
|
||||||
|
"y": -138.806365966797
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -642.892700195313,
|
||||||
|
"y": -7.30558013916016
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -537.692077636719,
|
||||||
|
"y": -7.30558013916016
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -537.692077636719,
|
||||||
|
"y": -246.929229736328
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -397.424591064453,
|
||||||
|
"y": -246.929229736328
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -397.424591064453,
|
||||||
|
"y": -80.361572265625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -251.312606811523,
|
||||||
|
"y": -80.361572265625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -251.312606811523,
|
||||||
|
"y": -176.795471191406
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -111.045104980469,
|
||||||
|
"y": -176.795471191406
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -111.045104980469,
|
||||||
|
"y": -21.9167785644531
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 43.8335914611816,
|
||||||
|
"y": -21.9167785644531
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 43.8335914611816,
|
||||||
|
"y": -284.918334960938
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 181.178848266602,
|
||||||
|
"y": -284.918334960938
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 181.178848266602,
|
||||||
|
"y": -71.5948486328125
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 321.446350097656,
|
||||||
|
"y": -71.5948486328125
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 321.446350097656,
|
||||||
|
"y": -188.484436035156
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 467.558319091797,
|
||||||
|
"y": -188.484436035156
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 467.558319091797,
|
||||||
|
"y": -18.9945449829102
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 604.903564453125,
|
||||||
|
"y": -18.9945449829102
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 604.903564453125,
|
||||||
|
"y": -124.195159912109
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 756.860046386719,
|
||||||
|
"y": -124.195159912109
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 756.860046386719,
|
||||||
|
"y": 21.9168128967285
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 935.116638183594,
|
||||||
|
"y": 21.9168128967285
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 935.116638183594,
|
||||||
|
"y": 284.918365478516
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#DDE7E8",
|
||||||
|
"outline_color": "#DDE7E8",
|
||||||
|
"outline_width": 0.0,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -195.827392578125,
|
||||||
|
"y": -154.283813476563
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -160.760498046875,
|
||||||
|
"y": -154.283813476563
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -160.760498046875,
|
||||||
|
"y": -98.7612609863281
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -195.827392578125,
|
||||||
|
"y": -98.7612609863281
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#DDE7E8",
|
||||||
|
"outline_color": "#DDE7E8",
|
||||||
|
"outline_width": 0.0,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -753.937805175781,
|
||||||
|
"y": -71.5948486328125
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -718.870910644531,
|
||||||
|
"y": -71.5948486328125
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -718.870910644531,
|
||||||
|
"y": -18.9945449829102
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -753.937805175781,
|
||||||
|
"y": -18.9945449829102
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#DDE7E8",
|
||||||
|
"outline_color": "#DDE7E8",
|
||||||
|
"outline_width": 0.0,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -470.480560302734,
|
||||||
|
"y": -191.406677246094
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -435.413696289063,
|
||||||
|
"y": -191.406677246094
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -435.413696289063,
|
||||||
|
"y": -138.806365966797
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -470.480560302734,
|
||||||
|
"y": -138.806365966797
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#DDE7E8",
|
||||||
|
"outline_color": "#DDE7E8",
|
||||||
|
"outline_width": 0.0,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 87.6671829223633,
|
||||||
|
"y": -232.318023681641
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 122.734062194824,
|
||||||
|
"y": -232.318023681641
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 122.734062194824,
|
||||||
|
"y": -173.873229980469
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 87.6671829223633,
|
||||||
|
"y": -173.873229980469
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#DDE7E8",
|
||||||
|
"outline_color": "#DDE7E8",
|
||||||
|
"outline_width": 0.0,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 371.124420166016,
|
||||||
|
"y": -135.884124755859
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 406.191284179688,
|
||||||
|
"y": -135.884124755859
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 406.191284179688,
|
||||||
|
"y": -83.2838134765625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 371.124420166016,
|
||||||
|
"y": -83.2838134765625
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#DDE7E8",
|
||||||
|
"outline_color": "#DDE7E8",
|
||||||
|
"outline_width": 0.0,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 660.426147460938,
|
||||||
|
"y": -77.4393310546875
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 695.492980957031,
|
||||||
|
"y": -77.4393310546875
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 695.492980957031,
|
||||||
|
"y": -27.7612609863281
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 660.426147460938,
|
||||||
|
"y": -27.7612609863281
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"buildings"
|
||||||
|
],
|
||||||
|
"version": "1.1"
|
||||||
|
}
|
||||||
@@ -0,0 +1,277 @@
|
|||||||
|
{
|
||||||
|
"anchors": {
|
||||||
|
"origin": {
|
||||||
|
"allowed_hands": "both",
|
||||||
|
"role": "pivot",
|
||||||
|
"rotation_deg": 0.0,
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"z_index_offset": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"material_preset": "none",
|
||||||
|
"metadata": {
|
||||||
|
"created_at": "2026-10-21T23:11:48",
|
||||||
|
"modified_at": "2026-10-21T23:11:48"
|
||||||
|
},
|
||||||
|
"prop_name": "Framed Picture",
|
||||||
|
"shapes": [
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#B68165",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 5.324,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -146.410003662109,
|
||||||
|
"y": -109.141998291016
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 146.410003662109,
|
||||||
|
"y": -109.141998291016
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 146.410003662109,
|
||||||
|
"y": 109.141998291016
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -146.410003662109,
|
||||||
|
"y": 109.141998291016
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#F4DEAF",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 5.324,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -121.120994567871,
|
||||||
|
"y": -85.1839981079102
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 121.120994567871,
|
||||||
|
"y": -85.1839981079102
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 121.120994567871,
|
||||||
|
"y": 85.1839981079102
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -121.120994567871,
|
||||||
|
"y": 85.1839981079102
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#A4CFCD",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 5.324,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -106.479995727539,
|
||||||
|
"y": -71.8740005493164
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 106.479995727539,
|
||||||
|
"y": -71.8740005493164
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 106.479995727539,
|
||||||
|
"y": 71.8740005493164
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -106.479995727539,
|
||||||
|
"y": 71.8740005493164
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#F3D68C",
|
||||||
|
"outline_color": "#F3D68C",
|
||||||
|
"outline_width": 0.0,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 77.197998046875,
|
||||||
|
"y": -39.9300003051758
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 75.6806564331055,
|
||||||
|
"y": -32.2900581359863
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 71.3549118041992,
|
||||||
|
"y": -25.8080883026123
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 64.8729400634766,
|
||||||
|
"y": -21.4823379516602
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 57.2329978942871,
|
||||||
|
"y": -19.9650001525879
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 49.5930557250977,
|
||||||
|
"y": -21.4823379516602
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 43.1110877990723,
|
||||||
|
"y": -25.8080883026123
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 38.7853393554688,
|
||||||
|
"y": -32.2900581359863
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 37.2679977416992,
|
||||||
|
"y": -39.9300003051758
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 38.7853393554688,
|
||||||
|
"y": -47.5699424743652
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 43.1110877990723,
|
||||||
|
"y": -54.0519104003906
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 49.5930557250977,
|
||||||
|
"y": -58.3776588439941
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 57.2329978942871,
|
||||||
|
"y": -59.8950004577637
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 64.8729400634766,
|
||||||
|
"y": -58.3776588439941
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 71.3549118041992,
|
||||||
|
"y": -54.0519104003906
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 75.6806564331055,
|
||||||
|
"y": -47.5699424743652
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#88B798",
|
||||||
|
"outline_color": "#88B798",
|
||||||
|
"outline_width": 0.0,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -106.479995727539,
|
||||||
|
"y": 71.8740005493164
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -26.6199989318848,
|
||||||
|
"y": -14.6409997940063
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 13.3099994659424,
|
||||||
|
"y": 30.6129989624023
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 53.2399978637695,
|
||||||
|
"y": -23.9580001831055
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 106.479995727539,
|
||||||
|
"y": 51.9090003967285
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 106.479995727539,
|
||||||
|
"y": 71.8740005493164
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": false,
|
||||||
|
"fill_color": "#00000000",
|
||||||
|
"outline_color": "#F0E1BC",
|
||||||
|
"outline_width": 5.324,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -85.1839981079102,
|
||||||
|
"y": 55.9020004272461
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -10.6479997634888,
|
||||||
|
"y": 55.9020004272461
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "line",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"objects",
|
||||||
|
"walls"
|
||||||
|
],
|
||||||
|
"version": "1.1"
|
||||||
|
}
|
||||||
@@ -0,0 +1,236 @@
|
|||||||
|
{
|
||||||
|
"version": "1.1",
|
||||||
|
"prop_name": "Potted Plant",
|
||||||
|
"material_preset": "none",
|
||||||
|
"tags": ["nature", "objects"],
|
||||||
|
"shapes": [
|
||||||
|
{
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -45,
|
||||||
|
"y": 16
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -55,
|
||||||
|
"y": -6
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -39,
|
||||||
|
"y": -74
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -4,
|
||||||
|
"y": -28
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 8,
|
||||||
|
"y": 11
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fill_color": "#70B481",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 4,
|
||||||
|
"closed": true,
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"reshaped": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 3,
|
||||||
|
"y": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"y": -31
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 38,
|
||||||
|
"y": -91
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 48,
|
||||||
|
"y": -48
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 36,
|
||||||
|
"y": 4
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fill_color": "#83C290",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 4,
|
||||||
|
"closed": true,
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"reshaped": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -18,
|
||||||
|
"y": 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -4,
|
||||||
|
"y": -112
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 18,
|
||||||
|
"y": -56
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 16,
|
||||||
|
"y": 15
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fill_color": "#9CCF90",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 4,
|
||||||
|
"closed": true,
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"reshaped": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"shape_type": "line",
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 0,
|
||||||
|
"y": 30
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0,
|
||||||
|
"y": -69
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fill_color": "#00000000",
|
||||||
|
"outline_color": "#5C946F",
|
||||||
|
"outline_width": 5,
|
||||||
|
"closed": false,
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"reshaped": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -55,
|
||||||
|
"y": 17
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 55,
|
||||||
|
"y": 17
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 43,
|
||||||
|
"y": 102
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -43,
|
||||||
|
"y": 102
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fill_color": "#C47761",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 4,
|
||||||
|
"closed": true,
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"reshaped": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -60,
|
||||||
|
"y": 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 60,
|
||||||
|
"y": 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 60,
|
||||||
|
"y": 31
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -60,
|
||||||
|
"y": 31
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fill_color": "#DC9670",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 4,
|
||||||
|
"closed": true,
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"reshaped": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"shape_type": "line",
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -21,
|
||||||
|
"y": 59
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 21,
|
||||||
|
"y": 59
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fill_color": "#00000000",
|
||||||
|
"outline_color": "#EFC09A",
|
||||||
|
"outline_width": 4,
|
||||||
|
"closed": false,
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"reshaped": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"anchors": {
|
||||||
|
"origin": {
|
||||||
|
"role": "pivot",
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"rotation_deg": 0,
|
||||||
|
"z_index_offset": 0,
|
||||||
|
"allowed_hands": "both"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"created_at": "2026-10-15T00:00:00",
|
||||||
|
"modified_at": "2026-10-15T00:00:00"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,306 @@
|
|||||||
|
{
|
||||||
|
"anchors": {
|
||||||
|
"origin": {
|
||||||
|
"allowed_hands": "both",
|
||||||
|
"role": "pivot",
|
||||||
|
"rotation_deg": 0.0,
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"z_index_offset": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"material_preset": "none",
|
||||||
|
"metadata": {
|
||||||
|
"created_at": "2026-10-21T23:12:17",
|
||||||
|
"modified_at": "2026-10-21T23:12:17"
|
||||||
|
},
|
||||||
|
"prop_name": "Patterned Rug",
|
||||||
|
"shapes": [
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#C77377",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 5.324,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -210.297988891602,
|
||||||
|
"y": -89.8424987792969
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 210.297988891602,
|
||||||
|
"y": -89.8424987792969
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 235.586990356445,
|
||||||
|
"y": 71.20849609375
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -235.586990356445,
|
||||||
|
"y": 71.20849609375
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#F0D29A",
|
||||||
|
"outline_color": "#F0D29A",
|
||||||
|
"outline_width": 2.662,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -175.692001342773,
|
||||||
|
"y": -63.2224998474121
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 175.692001342773,
|
||||||
|
"y": -63.2224998474121
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 195.656997680664,
|
||||||
|
"y": 44.5884971618652
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -195.656997680664,
|
||||||
|
"y": 44.5884971618652
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#7E9B9C",
|
||||||
|
"outline_color": "#7E9B9C",
|
||||||
|
"outline_width": 2.662,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -129.106994628906,
|
||||||
|
"y": -44.5885009765625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 129.106994628906,
|
||||||
|
"y": -44.5885009765625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 141.085998535156,
|
||||||
|
"y": 25.9544982910156
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -141.085998535156,
|
||||||
|
"y": 25.9544982910156
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#F6D69A",
|
||||||
|
"outline_color": "#F6D69A",
|
||||||
|
"outline_width": 1.331,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 0.0,
|
||||||
|
"y": -37.9335021972656
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 46.5849990844727,
|
||||||
|
"y": -8.6515007019043
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 19.2994995117188
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -46.5849990844727,
|
||||||
|
"y": -8.6515007019043
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": false,
|
||||||
|
"fill_color": "#00000000",
|
||||||
|
"outline_color": "#DBA389",
|
||||||
|
"outline_width": 3.993,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -183.677993774414,
|
||||||
|
"y": 72.5394973754883
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -183.677993774414,
|
||||||
|
"y": 89.8424987792969
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "line",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": false,
|
||||||
|
"fill_color": "#00000000",
|
||||||
|
"outline_color": "#DBA389",
|
||||||
|
"outline_width": 3.993,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -122.451995849609,
|
||||||
|
"y": 72.5394973754883
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -122.451995849609,
|
||||||
|
"y": 89.8424987792969
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "line",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": false,
|
||||||
|
"fill_color": "#00000000",
|
||||||
|
"outline_color": "#DBA389",
|
||||||
|
"outline_width": 3.993,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -61.2259979248047,
|
||||||
|
"y": 72.5394973754883
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -61.2259979248047,
|
||||||
|
"y": 89.8424987792969
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "line",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": false,
|
||||||
|
"fill_color": "#00000000",
|
||||||
|
"outline_color": "#DBA389",
|
||||||
|
"outline_width": 3.993,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 72.5394973754883
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 89.8424987792969
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "line",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": false,
|
||||||
|
"fill_color": "#00000000",
|
||||||
|
"outline_color": "#DBA389",
|
||||||
|
"outline_width": 3.993,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 61.2259979248047,
|
||||||
|
"y": 72.5394973754883
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 61.2259979248047,
|
||||||
|
"y": 89.8424987792969
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "line",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": false,
|
||||||
|
"fill_color": "#00000000",
|
||||||
|
"outline_color": "#DBA389",
|
||||||
|
"outline_width": 3.993,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 122.451995849609,
|
||||||
|
"y": 72.5394973754883
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 122.451995849609,
|
||||||
|
"y": 89.8424987792969
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "line",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": false,
|
||||||
|
"fill_color": "#00000000",
|
||||||
|
"outline_color": "#DBA389",
|
||||||
|
"outline_width": 3.993,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 183.677993774414,
|
||||||
|
"y": 72.5394973754883
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 183.677993774414,
|
||||||
|
"y": 89.8424987792969
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "line",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"objects"
|
||||||
|
],
|
||||||
|
"version": "1.1"
|
||||||
|
}
|
||||||
@@ -0,0 +1,548 @@
|
|||||||
|
{
|
||||||
|
"anchors": {
|
||||||
|
"origin": {
|
||||||
|
"allowed_hands": "both",
|
||||||
|
"role": "pivot",
|
||||||
|
"rotation_deg": 0.0,
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"z_index_offset": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"material_preset": "none",
|
||||||
|
"metadata": {
|
||||||
|
"created_at": "2026-10-21T21:40:26",
|
||||||
|
"modified_at": "2026-10-21T21:40:26"
|
||||||
|
},
|
||||||
|
"prop_name": "Sunny Storefront",
|
||||||
|
"shapes": [
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#E8B571",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 20.2178811399718,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -783.44287109375,
|
||||||
|
"y": -596.427490234375
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 783.44287109375,
|
||||||
|
"y": -596.427490234375
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 783.44287109375,
|
||||||
|
"y": 798.606262207031
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -783.44287109375,
|
||||||
|
"y": 798.606262207031
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#6C4E69",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 20.2178811399718,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -859.259887695313,
|
||||||
|
"y": -677.299011230469
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 859.259887695313,
|
||||||
|
"y": -677.299011230469
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 859.259887695313,
|
||||||
|
"y": -535.773864746094
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -859.259887695313,
|
||||||
|
"y": -535.773864746094
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#FAE6AF",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 20.2178811399718,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -581.264038085938,
|
||||||
|
"y": -813.769653320313
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 581.264038085938,
|
||||||
|
"y": -813.769653320313
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 581.264038085938,
|
||||||
|
"y": -682.353454589844
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -581.264038085938,
|
||||||
|
"y": -682.353454589844
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": false,
|
||||||
|
"fill_color": "#00000000",
|
||||||
|
"outline_color": "#B97768",
|
||||||
|
"outline_width": 25.2723514249647,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -252.723510742188,
|
||||||
|
"y": -743.007141113281
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 252.723510742188,
|
||||||
|
"y": -743.007141113281
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "line",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#F3D77A",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 20.2178811399718,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -717.734741210938,
|
||||||
|
"y": -520.610412597656
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 717.734741210938,
|
||||||
|
"y": -520.610412597656
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 717.734741210938,
|
||||||
|
"y": -313.377197265625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -717.734741210938,
|
||||||
|
"y": -313.377197265625
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#E37C70",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 20.2178811399718,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -717.734741210938,
|
||||||
|
"y": -520.610412597656
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -480.174652099609,
|
||||||
|
"y": -520.610412597656
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -520.610412597656,
|
||||||
|
"y": -318.431640625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -677.299011230469,
|
||||||
|
"y": -318.431640625
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#FFF2D4",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 20.2178811399718,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -480.174652099609,
|
||||||
|
"y": -520.610412597656
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -242.614562988281,
|
||||||
|
"y": -520.610412597656
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -283.050323486328,
|
||||||
|
"y": -318.431640625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -439.738891601563,
|
||||||
|
"y": -318.431640625
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#E37C70",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 20.2178811399718,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -242.614562988281,
|
||||||
|
"y": -520.610412597656
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -5.05447006225586,
|
||||||
|
"y": -520.610412597656
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -45.4902305603027,
|
||||||
|
"y": -318.431640625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -202.178802490234,
|
||||||
|
"y": -318.431640625
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#FFF2D4",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 20.2178811399718,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -5.05447006225586,
|
||||||
|
"y": -520.610412597656
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 232.505615234375,
|
||||||
|
"y": -520.610412597656
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 192.069854736328,
|
||||||
|
"y": -318.431640625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 35.381290435791,
|
||||||
|
"y": -318.431640625
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#E37C70",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 20.2178811399718,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 232.505615234375,
|
||||||
|
"y": -520.610412597656
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 470.065704345703,
|
||||||
|
"y": -520.610412597656
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 429.629943847656,
|
||||||
|
"y": -318.431640625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 272.941375732422,
|
||||||
|
"y": -318.431640625
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#FFF2D4",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 20.2178811399718,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 470.065704345703,
|
||||||
|
"y": -520.610412597656
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 707.625793457031,
|
||||||
|
"y": -520.610412597656
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 667.190063476563,
|
||||||
|
"y": -318.431640625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 510.50146484375,
|
||||||
|
"y": -318.431640625
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#81B5BD",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 20.2178811399718,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -636.863220214844,
|
||||||
|
"y": -247.669067382813
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -101.089401245117,
|
||||||
|
"y": -247.669067382813
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -101.089401245117,
|
||||||
|
"y": 722.789184570313
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -636.863220214844,
|
||||||
|
"y": 722.789184570313
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#D4F1E8",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 20.2178811399718,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -566.100646972656,
|
||||||
|
"y": -171.851989746094
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -171.851989746094,
|
||||||
|
"y": -171.851989746094
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -171.851989746094,
|
||||||
|
"y": 591.372985839844
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -566.100646972656,
|
||||||
|
"y": 591.372985839844
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#835B73",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 20.2178811399718,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 111.198341369629,
|
||||||
|
"y": -247.669067382813
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 611.590881347656,
|
||||||
|
"y": -247.669067382813
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 611.590881347656,
|
||||||
|
"y": 722.789184570313
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 111.198341369629,
|
||||||
|
"y": 722.789184570313
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#C4DCDD",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 20.2178811399718,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 171.851989746094,
|
||||||
|
"y": -181.9609375
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 545.882751464844,
|
||||||
|
"y": -181.9609375
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 545.882751464844,
|
||||||
|
"y": 596.427429199219
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 171.851989746094,
|
||||||
|
"y": 596.427429199219
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": false,
|
||||||
|
"fill_color": "#00000000",
|
||||||
|
"outline_color": "#835B73",
|
||||||
|
"outline_width": 25.2723514249647,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 358.867370605469,
|
||||||
|
"y": -181.9609375
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 358.867370605469,
|
||||||
|
"y": 596.427429199219
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "line",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#C99672",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 20.2178811399718,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -808.715209960938,
|
||||||
|
"y": 722.789184570313
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 808.715209960938,
|
||||||
|
"y": 722.789184570313
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 808.715209960938,
|
||||||
|
"y": 813.769653320313
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -808.715209960938,
|
||||||
|
"y": 813.769653320313
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"buildings"
|
||||||
|
],
|
||||||
|
"version": "1.1"
|
||||||
|
}
|
||||||
@@ -0,0 +1,475 @@
|
|||||||
|
{
|
||||||
|
"anchors": {
|
||||||
|
"origin": {
|
||||||
|
"allowed_hands": "both",
|
||||||
|
"role": "pivot",
|
||||||
|
"rotation_deg": 0.0,
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"z_index_offset": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"material_preset": "none",
|
||||||
|
"metadata": {
|
||||||
|
"created_at": "2026-10-21T21:40:03",
|
||||||
|
"modified_at": "2026-10-21T21:40:03"
|
||||||
|
},
|
||||||
|
"prop_name": "Town House",
|
||||||
|
"shapes": [
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#B3C99C",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 27.3735711442786,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -807.520385742188,
|
||||||
|
"y": -732.243041992188
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 807.520385742188,
|
||||||
|
"y": -732.243041992188
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 807.520385742188,
|
||||||
|
"y": 1307.08801269531
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -807.520385742188,
|
||||||
|
"y": 1307.08801269531
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#CF735F",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 27.3735711442786,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -944.38818359375,
|
||||||
|
"y": -663.80908203125
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0.0,
|
||||||
|
"y": -1361.83520507813
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 944.38818359375,
|
||||||
|
"y": -663.80908203125
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#F3E3B2",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 27.3735711442786,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -164.241424560547,
|
||||||
|
"y": -1197.59375
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 164.241424560547,
|
||||||
|
"y": -1197.59375
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 164.241424560547,
|
||||||
|
"y": -725.399658203125
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -164.241424560547,
|
||||||
|
"y": -725.399658203125
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#85ADBC",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 27.3735711442786,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -136.867858886719,
|
||||||
|
"y": -1170.22021484375
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 136.867858886719,
|
||||||
|
"y": -1170.22021484375
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 136.867858886719,
|
||||||
|
"y": -752.773193359375
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -136.867858886719,
|
||||||
|
"y": -752.773193359375
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#E9D6A9",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 27.3735711442786,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -602.218566894531,
|
||||||
|
"y": -362.699829101563
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -191.615005493164,
|
||||||
|
"y": -362.699829101563
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -191.615005493164,
|
||||||
|
"y": 225.831939697266
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -602.218566894531,
|
||||||
|
"y": 225.831939697266
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#E9D6A9",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 27.3735711442786,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 191.615005493164,
|
||||||
|
"y": -362.699829101563
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 602.218566894531,
|
||||||
|
"y": -362.699829101563
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 602.218566894531,
|
||||||
|
"y": 225.831939697266
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 191.615005493164,
|
||||||
|
"y": 225.831939697266
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#B9DFE3",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 27.3735711442786,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -533.78466796875,
|
||||||
|
"y": -287.422546386719
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -260.048919677734,
|
||||||
|
"y": -287.422546386719
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -260.048919677734,
|
||||||
|
"y": 150.554595947266
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -533.78466796875,
|
||||||
|
"y": 150.554595947266
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#B9DFE3",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 27.3735711442786,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 260.048919677734,
|
||||||
|
"y": -287.422546386719
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 533.78466796875,
|
||||||
|
"y": -287.422546386719
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 533.78466796875,
|
||||||
|
"y": 150.554595947266
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 260.048919677734,
|
||||||
|
"y": 150.554595947266
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": false,
|
||||||
|
"fill_color": "#00000000",
|
||||||
|
"outline_color": "#E9D6A9",
|
||||||
|
"outline_width": 27.3735711442786,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -396.916778564453,
|
||||||
|
"y": -287.422546386719
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -396.916778564453,
|
||||||
|
"y": 150.554595947266
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "line",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": false,
|
||||||
|
"fill_color": "#00000000",
|
||||||
|
"outline_color": "#E9D6A9",
|
||||||
|
"outline_width": 27.3735711442786,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 396.916778564453,
|
||||||
|
"y": -287.422546386719
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 396.916778564453,
|
||||||
|
"y": 150.554595947266
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "line",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#8A6273",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 27.3735711442786,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -246.36213684082,
|
||||||
|
"y": 417.446929931641
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 246.36213684082,
|
||||||
|
"y": 417.446929931641
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 246.36213684082,
|
||||||
|
"y": 1307.08801269531
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -246.36213684082,
|
||||||
|
"y": 1307.08801269531
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#F5D98B",
|
||||||
|
"outline_color": "#F5D98B",
|
||||||
|
"outline_width": 6.84339278606966,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 184.771606445313,
|
||||||
|
"y": 903.327819824219
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 182.171127319336,
|
||||||
|
"y": 916.398681640625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 174.780258178711,
|
||||||
|
"y": 927.553466796875
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 163.625518798828,
|
||||||
|
"y": 934.9443359375
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 150.554641723633,
|
||||||
|
"y": 937.544799804688
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 137.483764648438,
|
||||||
|
"y": 934.9443359375
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 126.329025268555,
|
||||||
|
"y": 927.553466796875
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 118.938163757324,
|
||||||
|
"y": 916.398681640625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 116.337677001953,
|
||||||
|
"y": 903.327819824219
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 118.938163757324,
|
||||||
|
"y": 890.256958007813
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 126.329025268555,
|
||||||
|
"y": 879.102172851563
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 137.483764648438,
|
||||||
|
"y": 871.711364746094
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 150.554641723633,
|
||||||
|
"y": 869.11083984375
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 163.625518798828,
|
||||||
|
"y": 871.711364746094
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 174.780258178711,
|
||||||
|
"y": 879.102172851563
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 182.171127319336,
|
||||||
|
"y": 890.256958007813
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#E8B38A",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 27.3735711442786,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -875.954284667969,
|
||||||
|
"y": 1231.81066894531
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 875.954284667969,
|
||||||
|
"y": 1231.81066894531
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 875.954284667969,
|
||||||
|
"y": 1361.83520507813
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -875.954284667969,
|
||||||
|
"y": 1361.83520507813
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"buildings"
|
||||||
|
],
|
||||||
|
"version": "1.1"
|
||||||
|
}
|
||||||
@@ -0,0 +1,433 @@
|
|||||||
|
{
|
||||||
|
"anchors": {
|
||||||
|
"origin": {
|
||||||
|
"allowed_hands": "both",
|
||||||
|
"role": "pivot",
|
||||||
|
"rotation_deg": 0.0,
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"z_index_offset": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"material_preset": "none",
|
||||||
|
"metadata": {
|
||||||
|
"created_at": "2026-10-21T23:12:39",
|
||||||
|
"modified_at": "2026-10-21T23:12:39"
|
||||||
|
},
|
||||||
|
"prop_name": "Wall Clock",
|
||||||
|
"shapes": [
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#DCA678",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 7.3205,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 102.486999511719,
|
||||||
|
"y": 0.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 94.6833419799805,
|
||||||
|
"y": 39.2232398986816
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 72.4729537963867,
|
||||||
|
"y": 72.4729537963867
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 39.2232398986816,
|
||||||
|
"y": 94.6833419799805
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 102.486999511719
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -39.2232398986816,
|
||||||
|
"y": 94.6833419799805
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -72.4729537963867,
|
||||||
|
"y": 72.4729537963867
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -94.6833419799805,
|
||||||
|
"y": 39.2232398986816
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -102.486999511719,
|
||||||
|
"y": 0.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -94.6833419799805,
|
||||||
|
"y": -39.2232398986816
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -72.4729537963867,
|
||||||
|
"y": -72.4729537963867
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -39.2232398986816,
|
||||||
|
"y": -94.6833419799805
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0.0,
|
||||||
|
"y": -102.486999511719
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 39.2232398986816,
|
||||||
|
"y": -94.6833419799805
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 72.4729537963867,
|
||||||
|
"y": -72.4729537963867
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 94.6833419799805,
|
||||||
|
"y": -39.2232398986816
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#FCF2D8",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 4.3923,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 79.0614013671875,
|
||||||
|
"y": 0.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 73.0439453125,
|
||||||
|
"y": 30.2483062744141
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 55.8993377685547,
|
||||||
|
"y": 55.8993377685547
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 30.2483062744141,
|
||||||
|
"y": 73.0439453125
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 79.0614013671875
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -30.2483062744141,
|
||||||
|
"y": 73.0439453125
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -55.8993377685547,
|
||||||
|
"y": 55.8993377685547
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -73.0439453125,
|
||||||
|
"y": 30.2483062744141
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -79.0614013671875,
|
||||||
|
"y": 0.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -73.0439453125,
|
||||||
|
"y": -30.2483062744141
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -55.8993377685547,
|
||||||
|
"y": -55.8993377685547
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -30.2483062744141,
|
||||||
|
"y": -73.0439453125
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0.0,
|
||||||
|
"y": -79.0614013671875
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 30.2483062744141,
|
||||||
|
"y": -73.0439453125
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 55.8993377685547,
|
||||||
|
"y": -55.8993377685547
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 73.0439453125,
|
||||||
|
"y": -30.2483062744141
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": false,
|
||||||
|
"fill_color": "#00000000",
|
||||||
|
"outline_color": "#75586C",
|
||||||
|
"outline_width": 5.8564,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 0.0,
|
||||||
|
"y": -65.8844985961914
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0.0,
|
||||||
|
"y": -45.3871002197266
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "line",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": false,
|
||||||
|
"fill_color": "#00000000",
|
||||||
|
"outline_color": "#75586C",
|
||||||
|
"outline_width": 5.8564,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 64.4204025268555,
|
||||||
|
"y": 0.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 43.9230003356934,
|
||||||
|
"y": 0.0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "line",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": false,
|
||||||
|
"fill_color": "#00000000",
|
||||||
|
"outline_color": "#75586C",
|
||||||
|
"outline_width": 5.8564,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 65.8844985961914
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 45.3871002197266
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "line",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": false,
|
||||||
|
"fill_color": "#00000000",
|
||||||
|
"outline_color": "#75586C",
|
||||||
|
"outline_width": 5.8564,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -64.4204025268555,
|
||||||
|
"y": 0.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -43.9230003356934,
|
||||||
|
"y": 0.0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "line",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": false,
|
||||||
|
"fill_color": "#00000000",
|
||||||
|
"outline_color": "#75586C",
|
||||||
|
"outline_width": 7.3205,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0.0,
|
||||||
|
"y": -35.1384010314941
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "line",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": false,
|
||||||
|
"fill_color": "#00000000",
|
||||||
|
"outline_color": "#75586C",
|
||||||
|
"outline_width": 7.3205,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 35.1384010314941,
|
||||||
|
"y": 21.9615001678467
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "line",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#75586C",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 1.4641,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 7.32049989700317,
|
||||||
|
"y": 0.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 6.76414203643799,
|
||||||
|
"y": 2.79643106460571
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 5.1829137802124,
|
||||||
|
"y": 5.1829137802124
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 2.79643106460571,
|
||||||
|
"y": 6.76414203643799
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 7.32049989700317
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -2.79643106460571,
|
||||||
|
"y": 6.76414203643799
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -5.1829137802124,
|
||||||
|
"y": 5.1829137802124
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -6.76414203643799,
|
||||||
|
"y": 2.79643106460571
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -7.32049989700317,
|
||||||
|
"y": 0.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -6.76414203643799,
|
||||||
|
"y": -2.79643106460571
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -5.1829137802124,
|
||||||
|
"y": -5.1829137802124
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -2.79643106460571,
|
||||||
|
"y": -6.76414203643799
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0.0,
|
||||||
|
"y": -7.32049989700317
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 2.79643106460571,
|
||||||
|
"y": -6.76414203643799
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 5.1829137802124,
|
||||||
|
"y": -5.1829137802124
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 6.76414203643799,
|
||||||
|
"y": -2.79643106460571
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"walls",
|
||||||
|
"objects"
|
||||||
|
],
|
||||||
|
"version": "1.1"
|
||||||
|
}
|
||||||
@@ -0,0 +1,687 @@
|
|||||||
|
{
|
||||||
|
"version": "1.1",
|
||||||
|
"prop_name": "Wall TV",
|
||||||
|
"material_preset": "none",
|
||||||
|
"tags": [
|
||||||
|
"objects",
|
||||||
|
"walls"
|
||||||
|
],
|
||||||
|
"shapes": [
|
||||||
|
{
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -335,
|
||||||
|
"y": -195
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 335,
|
||||||
|
"y": -195
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 340,
|
||||||
|
"y": -190
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 340,
|
||||||
|
"y": 190
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 335,
|
||||||
|
"y": 195
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -335,
|
||||||
|
"y": 195
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -340,
|
||||||
|
"y": 190
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -340,
|
||||||
|
"y": -190
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fill_color": "#1A202A",
|
||||||
|
"outline_color": "#090D13",
|
||||||
|
"outline_width": 3.8,
|
||||||
|
"closed": true,
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"reshaped": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -333,
|
||||||
|
"y": -188
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 333,
|
||||||
|
"y": -188
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 324,
|
||||||
|
"y": -178
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -324,
|
||||||
|
"y": -178
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fill_color": "#3C4652",
|
||||||
|
"outline_color": "#3C4652",
|
||||||
|
"outline_width": 0,
|
||||||
|
"closed": true,
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"reshaped": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -333,
|
||||||
|
"y": -187
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -324,
|
||||||
|
"y": -178
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -324,
|
||||||
|
"y": 168
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -333,
|
||||||
|
"y": 185
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fill_color": "#323C47",
|
||||||
|
"outline_color": "#323C47",
|
||||||
|
"outline_width": 0,
|
||||||
|
"closed": true,
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"reshaped": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 333,
|
||||||
|
"y": -187
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 333,
|
||||||
|
"y": 185
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 324,
|
||||||
|
"y": 168
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 324,
|
||||||
|
"y": -178
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fill_color": "#101720",
|
||||||
|
"outline_color": "#101720",
|
||||||
|
"outline_width": 0,
|
||||||
|
"closed": true,
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"reshaped": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -332,
|
||||||
|
"y": 168
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 332,
|
||||||
|
"y": 168
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 332,
|
||||||
|
"y": 188
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -332,
|
||||||
|
"y": 188
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fill_color": "#232B36",
|
||||||
|
"outline_color": "#232B36",
|
||||||
|
"outline_width": 0,
|
||||||
|
"closed": true,
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"reshaped": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -327,
|
||||||
|
"y": -177
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 327,
|
||||||
|
"y": -177
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 327,
|
||||||
|
"y": 169
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -327,
|
||||||
|
"y": 169
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fill_color": "#10151D",
|
||||||
|
"outline_color": "#080C12",
|
||||||
|
"outline_width": 2.3,
|
||||||
|
"closed": true,
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"reshaped": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -318,
|
||||||
|
"y": -167
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 318,
|
||||||
|
"y": -167
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 318,
|
||||||
|
"y": 158
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -318,
|
||||||
|
"y": 158
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fill_color": "#242932",
|
||||||
|
"outline_color": "#10141B",
|
||||||
|
"outline_width": 2.4,
|
||||||
|
"closed": true,
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"reshaped": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -309,
|
||||||
|
"y": -158
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -67,
|
||||||
|
"y": -158
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -151,
|
||||||
|
"y": 149
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -309,
|
||||||
|
"y": 149
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fill_color": "#36404A",
|
||||||
|
"outline_color": "#36404A",
|
||||||
|
"outline_width": 0,
|
||||||
|
"closed": true,
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"reshaped": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -309,
|
||||||
|
"y": -158
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -230,
|
||||||
|
"y": -158
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -299,
|
||||||
|
"y": 149
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -309,
|
||||||
|
"y": 149
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fill_color": "#3C4651",
|
||||||
|
"outline_color": "#3C4651",
|
||||||
|
"outline_width": 0,
|
||||||
|
"closed": true,
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"reshaped": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"shape_type": "line",
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -296,
|
||||||
|
"y": -154
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -90,
|
||||||
|
"y": -154
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fill_color": "#00000000",
|
||||||
|
"outline_color": "#66717B",
|
||||||
|
"outline_width": 1.4,
|
||||||
|
"closed": false,
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"reshaped": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"shape_type": "line",
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -309,
|
||||||
|
"y": 151
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 309,
|
||||||
|
"y": 151
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fill_color": "#00000000",
|
||||||
|
"outline_color": "#1A2029",
|
||||||
|
"outline_width": 4.0,
|
||||||
|
"closed": false,
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"reshaped": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"shape_type": "line",
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -320,
|
||||||
|
"y": 171
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 320,
|
||||||
|
"y": 171
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fill_color": "#00000000",
|
||||||
|
"outline_color": "#4A535F",
|
||||||
|
"outline_width": 1.2,
|
||||||
|
"closed": false,
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"reshaped": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -7.0,
|
||||||
|
"y": 183.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -7.94,
|
||||||
|
"y": 186.5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -10.5,
|
||||||
|
"y": 189.06
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -14.0,
|
||||||
|
"y": 190.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -17.5,
|
||||||
|
"y": 189.06
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -20.06,
|
||||||
|
"y": 186.5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -21.0,
|
||||||
|
"y": 183.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -20.06,
|
||||||
|
"y": 179.5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -17.5,
|
||||||
|
"y": 176.94
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -14.0,
|
||||||
|
"y": 176.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -10.5,
|
||||||
|
"y": 176.94
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -7.94,
|
||||||
|
"y": 179.5
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fill_color": "#39232A",
|
||||||
|
"outline_color": "#111720",
|
||||||
|
"outline_width": 1.0,
|
||||||
|
"closed": true,
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"reshaped": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -10.0,
|
||||||
|
"y": 183.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -10.54,
|
||||||
|
"y": 185.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -12.0,
|
||||||
|
"y": 186.46
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -14.0,
|
||||||
|
"y": 187.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -16.0,
|
||||||
|
"y": 186.46
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -17.46,
|
||||||
|
"y": 185.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -18.0,
|
||||||
|
"y": 183.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -17.46,
|
||||||
|
"y": 181.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -16.0,
|
||||||
|
"y": 179.54
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -14.0,
|
||||||
|
"y": 179.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -12.0,
|
||||||
|
"y": 179.54
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -10.54,
|
||||||
|
"y": 181.0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fill_color": "#E05A60",
|
||||||
|
"outline_color": "#E05A60",
|
||||||
|
"outline_width": 0,
|
||||||
|
"closed": true,
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"reshaped": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 21.0,
|
||||||
|
"y": 183.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 20.06,
|
||||||
|
"y": 186.5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 17.5,
|
||||||
|
"y": 189.06
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 14.0,
|
||||||
|
"y": 190.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 10.5,
|
||||||
|
"y": 189.06
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 7.94,
|
||||||
|
"y": 186.5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 7.0,
|
||||||
|
"y": 183.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 7.94,
|
||||||
|
"y": 179.5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 10.5,
|
||||||
|
"y": 176.94
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 14.0,
|
||||||
|
"y": 176.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 17.5,
|
||||||
|
"y": 176.94
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 20.06,
|
||||||
|
"y": 179.5
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fill_color": "#243A30",
|
||||||
|
"outline_color": "#111720",
|
||||||
|
"outline_width": 1.0,
|
||||||
|
"closed": true,
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"reshaped": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 18.0,
|
||||||
|
"y": 183.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 17.46,
|
||||||
|
"y": 185.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 16.0,
|
||||||
|
"y": 186.46
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 14.0,
|
||||||
|
"y": 187.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 12.0,
|
||||||
|
"y": 186.46
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 10.54,
|
||||||
|
"y": 185.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 10.0,
|
||||||
|
"y": 183.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 10.54,
|
||||||
|
"y": 181.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 12.0,
|
||||||
|
"y": 179.54
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 14.0,
|
||||||
|
"y": 179.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 16.0,
|
||||||
|
"y": 179.54
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 17.46,
|
||||||
|
"y": 181.0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fill_color": "#68CB8D",
|
||||||
|
"outline_color": "#68CB8D",
|
||||||
|
"outline_width": 0,
|
||||||
|
"closed": true,
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"reshaped": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"anchors": {
|
||||||
|
"origin": {
|
||||||
|
"role": "pivot",
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"rotation_deg": 0,
|
||||||
|
"z_index_offset": 0,
|
||||||
|
"allowed_hands": "both"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"created_at": "2026-10-21T20:07:34-04:00",
|
||||||
|
"modified_at": "2026-10-21T20:07:34-04:00"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,249 @@
|
|||||||
|
{
|
||||||
|
"anchors": {
|
||||||
|
"origin": {
|
||||||
|
"allowed_hands": "both",
|
||||||
|
"role": "pivot",
|
||||||
|
"rotation_deg": 0.0,
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"z_index_offset": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"material_preset": "wood",
|
||||||
|
"metadata": {
|
||||||
|
"created_at": "2026-10-21T23:13:10",
|
||||||
|
"modified_at": "2026-10-21T23:13:10"
|
||||||
|
},
|
||||||
|
"prop_name": "Open Window Frame",
|
||||||
|
"shapes": [
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#EBCF9E",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 5.324,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -171.698989868164,
|
||||||
|
"y": -186.339996337891
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -145.078994750977,
|
||||||
|
"y": -186.339996337891
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -145.078994750977,
|
||||||
|
"y": 165.043991088867
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -171.698989868164,
|
||||||
|
"y": 165.043991088867
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#EBCF9E",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 5.324,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 145.078994750977,
|
||||||
|
"y": -186.339996337891
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 171.698989868164,
|
||||||
|
"y": -186.339996337891
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 171.698989868164,
|
||||||
|
"y": 165.043991088867
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 145.078994750977,
|
||||||
|
"y": 165.043991088867
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#EBCF9E",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 5.324,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -171.698989868164,
|
||||||
|
"y": -186.339996337891
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 171.698989868164,
|
||||||
|
"y": -186.339996337891
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 171.698989868164,
|
||||||
|
"y": -159.720001220703
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -171.698989868164,
|
||||||
|
"y": -159.720001220703
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#EBCF9E",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 5.324,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -171.698989868164,
|
||||||
|
"y": 138.42399597168
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 171.698989868164,
|
||||||
|
"y": 138.42399597168
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 171.698989868164,
|
||||||
|
"y": 165.043991088867
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -171.698989868164,
|
||||||
|
"y": 165.043991088867
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#EBCF9E",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 5.324,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -13.3099994659424,
|
||||||
|
"y": -159.720001220703
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 13.3099994659424,
|
||||||
|
"y": -159.720001220703
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 13.3099994659424,
|
||||||
|
"y": 138.42399597168
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -13.3099994659424,
|
||||||
|
"y": 138.42399597168
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#EBCF9E",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 5.324,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -145.078994750977,
|
||||||
|
"y": -23.9580001831055
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 145.078994750977,
|
||||||
|
"y": -23.9580001831055
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 145.078994750977,
|
||||||
|
"y": 2.66199994087219
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -145.078994750977,
|
||||||
|
"y": 2.66199994087219
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#C89670",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 5.324,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -192.994995117188,
|
||||||
|
"y": 165.043991088867
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 192.994995117188,
|
||||||
|
"y": 165.043991088867
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 192.994995117188,
|
||||||
|
"y": 186.339996337891
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -192.994995117188,
|
||||||
|
"y": 186.339996337891
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"walls",
|
||||||
|
"buildings"
|
||||||
|
],
|
||||||
|
"version": "1.1"
|
||||||
|
}
|
||||||
@@ -0,0 +1,278 @@
|
|||||||
|
{
|
||||||
|
"anchors": {
|
||||||
|
"origin": {
|
||||||
|
"allowed_hands": "both",
|
||||||
|
"role": "pivot",
|
||||||
|
"rotation_deg": 0.0,
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"z_index_offset": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"material_preset": "wood",
|
||||||
|
"metadata": {
|
||||||
|
"created_at": "2026-10-21T23:15:32",
|
||||||
|
"modified_at": "2026-10-21T23:15:32"
|
||||||
|
},
|
||||||
|
"prop_name": "Cozy Armchair",
|
||||||
|
"shapes": [
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#80A9AF",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 10.3749698404,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -243.811782836914,
|
||||||
|
"y": 185.452575683594
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -243.811782836914,
|
||||||
|
"y": -208.796264648438
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -184.155700683594,
|
||||||
|
"y": -281.421051025391
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 184.155700683594,
|
||||||
|
"y": -281.421051025391
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 243.811782836914,
|
||||||
|
"y": -208.796264648438
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 243.811782836914,
|
||||||
|
"y": 185.452575683594
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 197.124420166016,
|
||||||
|
"y": 239.921173095703
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -197.124420166016,
|
||||||
|
"y": 239.921173095703
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#A8CED0",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 10.3749698404,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -168.59326171875,
|
||||||
|
"y": -213.983749389648
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 168.59326171875,
|
||||||
|
"y": -213.983749389648
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 168.59326171875,
|
||||||
|
"y": 60.9529457092285
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -168.59326171875,
|
||||||
|
"y": 60.9529457092285
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#C3DDCF",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 10.3749698404,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -189.343200683594,
|
||||||
|
"y": 50.5779762268066
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 189.343200683594,
|
||||||
|
"y": 50.5779762268066
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 212.686874389648,
|
||||||
|
"y": 182.858840942383
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -212.686874389648,
|
||||||
|
"y": 182.858840942383
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#80A9AF",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 10.3749698404,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -246.405517578125,
|
||||||
|
"y": -3.8906135559082
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -186.749450683594,
|
||||||
|
"y": -40.2030067443848
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -153.030792236328,
|
||||||
|
"y": 9.07809829711914
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -153.030792236328,
|
||||||
|
"y": 208.796264648438
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -246.405517578125,
|
||||||
|
"y": 208.796264648438
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#80A9AF",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 10.3749698404,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 246.405517578125,
|
||||||
|
"y": -3.8906135559082
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 186.749450683594,
|
||||||
|
"y": -40.2030067443848
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 153.030792236328,
|
||||||
|
"y": 9.07809829711914
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 153.030792236328,
|
||||||
|
"y": 208.796264648438
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 246.405517578125,
|
||||||
|
"y": 208.796264648438
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#755369",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 10.3749698404,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -184.155700683594,
|
||||||
|
"y": 224.35871887207
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -124.499633789063,
|
||||||
|
"y": 224.35871887207
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -124.499633789063,
|
||||||
|
"y": 281.421051025391
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -184.155700683594,
|
||||||
|
"y": 281.421051025391
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#755369",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 10.3749698404,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 124.499633789063,
|
||||||
|
"y": 224.35871887207
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 184.155700683594,
|
||||||
|
"y": 224.35871887207
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 184.155700683594,
|
||||||
|
"y": 281.421051025391
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 124.499633789063,
|
||||||
|
"y": 281.421051025391
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"objects"
|
||||||
|
],
|
||||||
|
"version": "1.1"
|
||||||
|
}
|
||||||
@@ -0,0 +1,206 @@
|
|||||||
|
{
|
||||||
|
"anchors": {
|
||||||
|
"origin": {
|
||||||
|
"allowed_hands": "both",
|
||||||
|
"role": "pivot",
|
||||||
|
"rotation_deg": 0.0,
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"z_index_offset": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"material_preset": "wood",
|
||||||
|
"metadata": {
|
||||||
|
"created_at": "2026-10-21T23:15:55",
|
||||||
|
"modified_at": "2026-10-21T23:15:55"
|
||||||
|
},
|
||||||
|
"prop_name": "Coffee Table",
|
||||||
|
"shapes": [
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#B9805D",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 6.44204,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -241.57649230957,
|
||||||
|
"y": -112.735702514648
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 241.57649230957,
|
||||||
|
"y": -112.735702514648
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 241.57649230957,
|
||||||
|
"y": -67.6414184570313
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -241.57649230957,
|
||||||
|
"y": -67.6414184570313
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#D69E70",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 6.44204,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -206.145278930664,
|
||||||
|
"y": -67.6414184570313
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 206.145278930664,
|
||||||
|
"y": -67.6414184570313
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 206.145278930664,
|
||||||
|
"y": -48.315299987793
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -206.145278930664,
|
||||||
|
"y": -48.315299987793
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#A66F58",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 6.44204,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -199.703231811523,
|
||||||
|
"y": -49.9258079528809
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -157.829986572266,
|
||||||
|
"y": -49.9258079528809
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -144.945892333984,
|
||||||
|
"y": 112.735702514648
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -186.819152832031,
|
||||||
|
"y": 112.735702514648
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#A66F58",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 6.44204,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 157.829986572266,
|
||||||
|
"y": -49.9258079528809
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 199.703231811523,
|
||||||
|
"y": -49.9258079528809
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 186.819152832031,
|
||||||
|
"y": 112.735702514648
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 144.945892333984,
|
||||||
|
"y": 112.735702514648
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#C38C68",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 6.44204,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -162.661514282227,
|
||||||
|
"y": 35.4312210083008
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 162.661514282227,
|
||||||
|
"y": 35.4312210083008
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 162.661514282227,
|
||||||
|
"y": 54.7573394775391
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -162.661514282227,
|
||||||
|
"y": 54.7573394775391
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": false,
|
||||||
|
"fill_color": "#00000000",
|
||||||
|
"outline_color": "#E8B98A",
|
||||||
|
"outline_width": 4.83153,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -185.208648681641,
|
||||||
|
"y": -99.8516159057617
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 185.208648681641,
|
||||||
|
"y": -99.8516159057617
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "line",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"objects"
|
||||||
|
],
|
||||||
|
"version": "1.1"
|
||||||
|
}
|
||||||
@@ -0,0 +1,300 @@
|
|||||||
|
{
|
||||||
|
"anchors": {
|
||||||
|
"origin": {
|
||||||
|
"allowed_hands": "both",
|
||||||
|
"role": "pivot",
|
||||||
|
"rotation_deg": 0.0,
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"z_index_offset": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"material_preset": "wood",
|
||||||
|
"metadata": {
|
||||||
|
"created_at": "2026-10-21T23:16:12",
|
||||||
|
"modified_at": "2026-10-21T23:16:12"
|
||||||
|
},
|
||||||
|
"prop_name": "Cozy Couch",
|
||||||
|
"shapes": [
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#B7767B",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 10.3749698404,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -435.748718261719,
|
||||||
|
"y": 165.99951171875
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -435.748718261719,
|
||||||
|
"y": -171.186996459961
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -376.092651367188,
|
||||||
|
"y": -261.967987060547
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 376.092651367188,
|
||||||
|
"y": -261.967987060547
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 435.748718261719,
|
||||||
|
"y": -171.186996459961
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 435.748718261719,
|
||||||
|
"y": 165.99951171875
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 378.686401367188,
|
||||||
|
"y": 217.874359130859
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -378.686401367188,
|
||||||
|
"y": 217.874359130859
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#D9908A",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 10.3749698404,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -355.342712402344,
|
||||||
|
"y": -186.749450683594
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 355.342712402344,
|
||||||
|
"y": -186.749450683594
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 355.342712402344,
|
||||||
|
"y": 41.4998779296875
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -355.342712402344,
|
||||||
|
"y": 41.4998779296875
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": false,
|
||||||
|
"fill_color": "#00000000",
|
||||||
|
"outline_color": "#985C71",
|
||||||
|
"outline_width": 10.3749698404,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 0.0,
|
||||||
|
"y": -184.155700683594
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 38.906135559082
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "line",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#EDB09A",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 10.3749698404,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -368.311401367188,
|
||||||
|
"y": 23.3436813354492
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 368.311401367188,
|
||||||
|
"y": 23.3436813354492
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 391.655090332031,
|
||||||
|
"y": 160.812026977539
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -391.655090332031,
|
||||||
|
"y": 160.812026977539
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#B7767B",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 10.3749698404,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -433.154968261719,
|
||||||
|
"y": -59.6560745239258
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -373.498901367188,
|
||||||
|
"y": -88.1872406005859
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -339.780242919922,
|
||||||
|
"y": -51.8748474121094
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -339.780242919922,
|
||||||
|
"y": 186.749450683594
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -435.748718261719,
|
||||||
|
"y": 186.749450683594
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#B7767B",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 10.3749698404,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 433.154968261719,
|
||||||
|
"y": -59.6560745239258
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 373.498901367188,
|
||||||
|
"y": -88.1872406005859
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 339.780242919922,
|
||||||
|
"y": -51.8748474121094
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 339.780242919922,
|
||||||
|
"y": 186.749450683594
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 435.748718261719,
|
||||||
|
"y": 186.749450683594
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#755369",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 10.3749698404,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": -360.530181884766,
|
||||||
|
"y": 202.311904907227
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -293.092895507813,
|
||||||
|
"y": 202.311904907227
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -293.092895507813,
|
||||||
|
"y": 261.967987060547
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -360.530181884766,
|
||||||
|
"y": 261.967987060547
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"closed": true,
|
||||||
|
"fill_color": "#755369",
|
||||||
|
"outline_color": "#332B45",
|
||||||
|
"outline_width": 10.3749698404,
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"x": 293.092895507813,
|
||||||
|
"y": 202.311904907227
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 360.530181884766,
|
||||||
|
"y": 202.311904907227
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 360.530181884766,
|
||||||
|
"y": 261.967987060547
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 293.092895507813,
|
||||||
|
"y": 261.967987060547
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reshaped": false,
|
||||||
|
"shape_type": "polygon",
|
||||||
|
"vertex_flags": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"objects"
|
||||||
|
],
|
||||||
|
"version": "1.1"
|
||||||
|
}
|
||||||
@@ -0,0 +1,372 @@
|
|||||||
|
{
|
||||||
|
"version": "1.6",
|
||||||
|
"scene_name": "Blank Scene",
|
||||||
|
"sky_id": "sky_neutral",
|
||||||
|
"camera": {
|
||||||
|
"position": {
|
||||||
|
"x": 1863.90759277344,
|
||||||
|
"y": -391.476318359375
|
||||||
|
},
|
||||||
|
"zoom": 0.665500044822693
|
||||||
|
},
|
||||||
|
"objects": [
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_1",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": 448.0,
|
||||||
|
"y": -320.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 5120.0,
|
||||||
|
"y": 2816.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_brick",
|
||||||
|
"color": "#b95f3dff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "stickman_1",
|
||||||
|
"type": "stickman",
|
||||||
|
"position": {
|
||||||
|
"x": -128.0,
|
||||||
|
"y": -129.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"stk_path": "res://content/stickmen/break.stk",
|
||||||
|
"facing_profile": "FORWARD",
|
||||||
|
"action_queue": [
|
||||||
|
{
|
||||||
|
"type": "move_to",
|
||||||
|
"target": {
|
||||||
|
"x": 2404.91528320313,
|
||||||
|
"y": 141.710083007813
|
||||||
|
},
|
||||||
|
"style": "walk"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_1",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -384.0,
|
||||||
|
"y": 256.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_asphalt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_2",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -384.0,
|
||||||
|
"y": 288.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_asphalt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_3",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 192.0,
|
||||||
|
"y": 256.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_asphalt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_4",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 384.0,
|
||||||
|
"y": 256.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_asphalt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_5",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 576.0,
|
||||||
|
"y": 256.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_asphalt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_6",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 768.0,
|
||||||
|
"y": 256.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_asphalt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_7",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 960.0,
|
||||||
|
"y": 256.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_asphalt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_8",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 1152.0,
|
||||||
|
"y": 224.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_asphalt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_9",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 1344.0,
|
||||||
|
"y": 224.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_asphalt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_10",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 1536.0,
|
||||||
|
"y": 224.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_asphalt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_11",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 1728.0,
|
||||||
|
"y": 224.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_asphalt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_12",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 1920.0,
|
||||||
|
"y": 224.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_asphalt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_13",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 2112.0,
|
||||||
|
"y": 224.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_asphalt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_14",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 2304.0,
|
||||||
|
"y": 224.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_asphalt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_15",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 2496.0,
|
||||||
|
"y": 224.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_asphalt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_16",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -192.0,
|
||||||
|
"y": 320.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_asphalt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_17",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 320.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_asphalt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_18",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 192.0,
|
||||||
|
"y": 288.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_asphalt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_19",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 384.0,
|
||||||
|
"y": 288.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_asphalt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_20",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 576.0,
|
||||||
|
"y": 288.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_asphalt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_2",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": 1152.0,
|
||||||
|
"y": -64.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 9984.0,
|
||||||
|
"y": 5504.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_brick",
|
||||||
|
"color": "#b95f3dff"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"event_rules": [],
|
||||||
|
"metadata": {
|
||||||
|
"created_unix": 1792022400,
|
||||||
|
"modified_unix": 1792470929.846,
|
||||||
|
"autosave": false,
|
||||||
|
"source_path": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,641 @@
|
|||||||
|
{
|
||||||
|
"version": "1.5",
|
||||||
|
"scene_name": "Living Room",
|
||||||
|
"sky_id": "sky_clear_day",
|
||||||
|
"camera": {
|
||||||
|
"position": {
|
||||||
|
"x": 194.703018188477,
|
||||||
|
"y": -486.092163085938
|
||||||
|
},
|
||||||
|
"zoom": 0.665500044822693
|
||||||
|
},
|
||||||
|
"objects": [
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_1",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": -820.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 1120.0,
|
||||||
|
"y": 170.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_2",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": -360.0,
|
||||||
|
"y": -535.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 440.0,
|
||||||
|
"y": 400.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_3",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": 360.0,
|
||||||
|
"y": -535.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 440.0,
|
||||||
|
"y": 400.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "scenery_artwork_1",
|
||||||
|
"type": "scenery_artwork",
|
||||||
|
"position": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": -530.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/art_window_frame-v1.prop",
|
||||||
|
"display_name": "Window frame",
|
||||||
|
"depth": "near",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"last_known_local_bounds": {
|
||||||
|
"position": {
|
||||||
|
"x": -147.0,
|
||||||
|
"y": -154.0
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"x": 294.0,
|
||||||
|
"y": 284.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "scenery_artwork_2",
|
||||||
|
"type": "scenery_artwork",
|
||||||
|
"position": {
|
||||||
|
"x": -430.0,
|
||||||
|
"y": -570.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/art_wall_clock-v1.prop",
|
||||||
|
"display_name": "Wall clock",
|
||||||
|
"depth": "near",
|
||||||
|
"scale": {
|
||||||
|
"x": 0.800000011920929,
|
||||||
|
"y": 0.800000011920929
|
||||||
|
},
|
||||||
|
"last_known_local_bounds": {
|
||||||
|
"position": {
|
||||||
|
"x": -72.5,
|
||||||
|
"y": -72.5
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"x": 145.0,
|
||||||
|
"y": 145.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "scenery_artwork_3",
|
||||||
|
"type": "scenery_artwork",
|
||||||
|
"position": {
|
||||||
|
"x": 365.0,
|
||||||
|
"y": -460.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/art_fireplace_mantel-v2.prop",
|
||||||
|
"display_name": "Fireplace",
|
||||||
|
"depth": "near",
|
||||||
|
"scale": {
|
||||||
|
"x": 0.819999992847443,
|
||||||
|
"y": 0.819999992847443
|
||||||
|
},
|
||||||
|
"last_known_local_bounds": {
|
||||||
|
"position": {
|
||||||
|
"x": -153.0,
|
||||||
|
"y": -116.0
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"x": 306.0,
|
||||||
|
"y": 244.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "scenery_artwork_4",
|
||||||
|
"type": "scenery_artwork",
|
||||||
|
"position": {
|
||||||
|
"x": -475.0,
|
||||||
|
"y": -310.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/art_bookshelf-v1.prop",
|
||||||
|
"display_name": "Bookshelf",
|
||||||
|
"depth": "near",
|
||||||
|
"scale": {
|
||||||
|
"x": 0.819999992847443,
|
||||||
|
"y": 0.819999992847443
|
||||||
|
},
|
||||||
|
"last_known_local_bounds": {
|
||||||
|
"position": {
|
||||||
|
"x": -104.0,
|
||||||
|
"y": -190.0
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"x": 208.0,
|
||||||
|
"y": 315.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "scenery_artwork_5",
|
||||||
|
"type": "scenery_artwork",
|
||||||
|
"position": {
|
||||||
|
"x": 185.0,
|
||||||
|
"y": -575.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/art_framed_picture-v1.prop",
|
||||||
|
"display_name": "Framed picture",
|
||||||
|
"depth": "near",
|
||||||
|
"scale": {
|
||||||
|
"x": 0.75,
|
||||||
|
"y": 0.75
|
||||||
|
},
|
||||||
|
"last_known_local_bounds": {
|
||||||
|
"position": {
|
||||||
|
"x": -112.0,
|
||||||
|
"y": -84.0
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"x": 224.0,
|
||||||
|
"y": 168.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_1",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -774.0,
|
||||||
|
"y": 832.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_2",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -588.0,
|
||||||
|
"y": 840.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_3",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -374.0,
|
||||||
|
"y": 832.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_4",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -174.0,
|
||||||
|
"y": 832.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_5",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 26.0,
|
||||||
|
"y": 832.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_6",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 226.0,
|
||||||
|
"y": 832.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_7",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 426.0,
|
||||||
|
"y": 832.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "scenery_artwork_6",
|
||||||
|
"type": "scenery_artwork",
|
||||||
|
"position": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 112.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/art_rug-v1.prop",
|
||||||
|
"display_name": "Floor rug",
|
||||||
|
"depth": "floor",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"last_known_local_bounds": {
|
||||||
|
"position": {
|
||||||
|
"x": -179.0,
|
||||||
|
"y": -60.0
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"x": 358.0,
|
||||||
|
"y": 139.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "scenery_artwork_7",
|
||||||
|
"type": "scenery_artwork",
|
||||||
|
"position": {
|
||||||
|
"x": 500.0,
|
||||||
|
"y": 84.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/art_potted_plant-v1.prop",
|
||||||
|
"display_name": "Potted plant",
|
||||||
|
"depth": "floor",
|
||||||
|
"scale": {
|
||||||
|
"x": 0.800000011920929,
|
||||||
|
"y": 0.800000011920929
|
||||||
|
},
|
||||||
|
"last_known_local_bounds": {
|
||||||
|
"position": {
|
||||||
|
"x": -62.5,
|
||||||
|
"y": -114.5
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"x": 125.0,
|
||||||
|
"y": 219.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "prop_1",
|
||||||
|
"type": "prop",
|
||||||
|
"position": {
|
||||||
|
"x": -364.0,
|
||||||
|
"y": 680.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/prop_couch-v1.prop",
|
||||||
|
"stage_object_id": "starter_couch",
|
||||||
|
"roles": {
|
||||||
|
"depth": "behind",
|
||||||
|
"start_motion": "still",
|
||||||
|
"holds_other_props": false,
|
||||||
|
"blocks_stickmen": false,
|
||||||
|
"can_pick_up": false,
|
||||||
|
"released_blocks_stickmen": true,
|
||||||
|
"released_bumps_other_props": true,
|
||||||
|
"legacy_draw_order": false
|
||||||
|
},
|
||||||
|
"use_spots": [],
|
||||||
|
"next_use_spot_number": 1,
|
||||||
|
"wobble_on_impact": false,
|
||||||
|
"scale": {
|
||||||
|
"x": 0.819999992847443,
|
||||||
|
"y": 0.819999992847443
|
||||||
|
},
|
||||||
|
"material_preset": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "prop_2",
|
||||||
|
"type": "prop",
|
||||||
|
"position": {
|
||||||
|
"x": 36.0,
|
||||||
|
"y": 684.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/prop_armchair-v1.prop",
|
||||||
|
"stage_object_id": "starter_armchair",
|
||||||
|
"roles": {
|
||||||
|
"depth": "behind",
|
||||||
|
"start_motion": "still",
|
||||||
|
"holds_other_props": false,
|
||||||
|
"blocks_stickmen": false,
|
||||||
|
"can_pick_up": false,
|
||||||
|
"released_blocks_stickmen": true,
|
||||||
|
"released_bumps_other_props": true,
|
||||||
|
"legacy_draw_order": false
|
||||||
|
},
|
||||||
|
"use_spots": [],
|
||||||
|
"next_use_spot_number": 1,
|
||||||
|
"wobble_on_impact": false,
|
||||||
|
"scale": {
|
||||||
|
"x": 0.779999971389771,
|
||||||
|
"y": 0.779999971389771
|
||||||
|
},
|
||||||
|
"material_preset": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "prop_3",
|
||||||
|
"type": "prop",
|
||||||
|
"position": {
|
||||||
|
"x": -159.0,
|
||||||
|
"y": 748.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/prop_coffee_table-v1.prop",
|
||||||
|
"stage_object_id": "starter_coffee_table",
|
||||||
|
"roles": {
|
||||||
|
"depth": "front",
|
||||||
|
"start_motion": "still",
|
||||||
|
"holds_other_props": true,
|
||||||
|
"blocks_stickmen": false,
|
||||||
|
"can_pick_up": false,
|
||||||
|
"released_blocks_stickmen": true,
|
||||||
|
"released_bumps_other_props": true,
|
||||||
|
"legacy_draw_order": false
|
||||||
|
},
|
||||||
|
"use_spots": [],
|
||||||
|
"next_use_spot_number": 1,
|
||||||
|
"wobble_on_impact": false,
|
||||||
|
"scale": {
|
||||||
|
"x": 0.75,
|
||||||
|
"y": 0.75
|
||||||
|
},
|
||||||
|
"material_preset": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "stickman_1",
|
||||||
|
"type": "stickman",
|
||||||
|
"position": {
|
||||||
|
"x": -690.0,
|
||||||
|
"y": 152.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"stk_path": "res://content/stickmen/break.stk",
|
||||||
|
"facing_profile": "FORWARD",
|
||||||
|
"action_queue": [
|
||||||
|
{
|
||||||
|
"type": "move_to",
|
||||||
|
"target": {
|
||||||
|
"x": 588.195678710938,
|
||||||
|
"y": 144.184204101563
|
||||||
|
},
|
||||||
|
"style": "walk"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_4",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": 206.112670898438,
|
||||||
|
"y": -758.285827636719
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 634.58154296875,
|
||||||
|
"y": 125.426147460938
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_5",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": 16.1107177734375,
|
||||||
|
"y": -777.534423828125
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 281.898193359375,
|
||||||
|
"y": 181.309020996094
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_6",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": -37.2885131835938,
|
||||||
|
"y": -739.658203125
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 276.930786132813,
|
||||||
|
"y": 100.589233398438
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_7",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": 218.531005859375,
|
||||||
|
"y": -634.1015625
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 180.067138671875,
|
||||||
|
"y": 257.061401367188
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_8",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": -193.760681152344,
|
||||||
|
"y": -507.433654785156
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 142.811889648438,
|
||||||
|
"y": 428.435668945313
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_9",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": -5.0006103515625,
|
||||||
|
"y": -762.63232421875
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 321.63720703125,
|
||||||
|
"y": 211.113220214844
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_10",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": 29.7709350585938,
|
||||||
|
"y": -198.21484375
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 736.412475585938,
|
||||||
|
"y": 403.598876953125
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_11",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": 458.206604003906,
|
||||||
|
"y": -332.954742431641
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 661.901977539063,
|
||||||
|
"y": 986.023010253906
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_12",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": -522.22802734375,
|
||||||
|
"y": -360.275299072266
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 789.811767578125,
|
||||||
|
"y": 1020.79449462891
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_13",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": 44.6731567382813,
|
||||||
|
"y": -16.9058227539063
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 1493.93664550781,
|
||||||
|
"y": 430.919311523438
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_14",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": -199.348937988281,
|
||||||
|
"y": 81.19970703125
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 1577.14001464844,
|
||||||
|
"y": 259.545166015625
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_15",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": 61.60986328125,
|
||||||
|
"y": 297.579467773438
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 1281.58154296875,
|
||||||
|
"y": 192.485595703125
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_wood",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"event_rules": [],
|
||||||
|
"metadata": {
|
||||||
|
"created_unix": 1792022400,
|
||||||
|
"modified_unix": 1792163812.927,
|
||||||
|
"autosave": false,
|
||||||
|
"source_path": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,659 @@
|
|||||||
|
{
|
||||||
|
"version": "1.5",
|
||||||
|
"scene_name": "Living Room",
|
||||||
|
"sky_id": "sky_clear_day",
|
||||||
|
"camera": {
|
||||||
|
"position": {
|
||||||
|
"x": -43.7599487304688,
|
||||||
|
"y": 247.024810791016
|
||||||
|
},
|
||||||
|
"zoom": 0.665500164031982
|
||||||
|
},
|
||||||
|
"objects": [
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_1",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": -820.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 1120.0,
|
||||||
|
"y": 170.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_2",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": -360.0,
|
||||||
|
"y": -535.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 440.0,
|
||||||
|
"y": 400.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_3",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": 360.0,
|
||||||
|
"y": -535.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 440.0,
|
||||||
|
"y": 400.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "scenery_artwork_1",
|
||||||
|
"type": "scenery_artwork",
|
||||||
|
"position": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": -530.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/art_window_frame-v1.prop",
|
||||||
|
"display_name": "Window frame",
|
||||||
|
"depth": "near",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"last_known_local_bounds": {
|
||||||
|
"position": {
|
||||||
|
"x": -147.0,
|
||||||
|
"y": -154.0
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"x": 294.0,
|
||||||
|
"y": 284.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "scenery_artwork_2",
|
||||||
|
"type": "scenery_artwork",
|
||||||
|
"position": {
|
||||||
|
"x": -430.0,
|
||||||
|
"y": -570.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/art_wall_clock-v1.prop",
|
||||||
|
"display_name": "Wall clock",
|
||||||
|
"depth": "near",
|
||||||
|
"scale": {
|
||||||
|
"x": 0.800000011920929,
|
||||||
|
"y": 0.800000011920929
|
||||||
|
},
|
||||||
|
"last_known_local_bounds": {
|
||||||
|
"position": {
|
||||||
|
"x": -72.5,
|
||||||
|
"y": -72.5
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"x": 145.0,
|
||||||
|
"y": 145.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "scenery_artwork_3",
|
||||||
|
"type": "scenery_artwork",
|
||||||
|
"position": {
|
||||||
|
"x": 365.0,
|
||||||
|
"y": -460.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/art_fireplace_mantel-v2.prop",
|
||||||
|
"display_name": "Fireplace",
|
||||||
|
"depth": "near",
|
||||||
|
"scale": {
|
||||||
|
"x": 0.819999992847443,
|
||||||
|
"y": 0.819999992847443
|
||||||
|
},
|
||||||
|
"last_known_local_bounds": {
|
||||||
|
"position": {
|
||||||
|
"x": -153.0,
|
||||||
|
"y": -116.0
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"x": 306.0,
|
||||||
|
"y": 244.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "scenery_artwork_4",
|
||||||
|
"type": "scenery_artwork",
|
||||||
|
"position": {
|
||||||
|
"x": -475.0,
|
||||||
|
"y": -310.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/art_bookshelf-v1.prop",
|
||||||
|
"display_name": "Bookshelf",
|
||||||
|
"depth": "near",
|
||||||
|
"scale": {
|
||||||
|
"x": 0.819999992847443,
|
||||||
|
"y": 0.819999992847443
|
||||||
|
},
|
||||||
|
"last_known_local_bounds": {
|
||||||
|
"position": {
|
||||||
|
"x": -104.0,
|
||||||
|
"y": -190.0
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"x": 208.0,
|
||||||
|
"y": 315.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "scenery_artwork_5",
|
||||||
|
"type": "scenery_artwork",
|
||||||
|
"position": {
|
||||||
|
"x": 185.0,
|
||||||
|
"y": -575.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/art_framed_picture-v1.prop",
|
||||||
|
"display_name": "Framed picture",
|
||||||
|
"depth": "near",
|
||||||
|
"scale": {
|
||||||
|
"x": 0.75,
|
||||||
|
"y": 0.75
|
||||||
|
},
|
||||||
|
"last_known_local_bounds": {
|
||||||
|
"position": {
|
||||||
|
"x": -112.0,
|
||||||
|
"y": -84.0
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"x": 224.0,
|
||||||
|
"y": 168.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "scenery_artwork_6",
|
||||||
|
"type": "scenery_artwork",
|
||||||
|
"position": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 112.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/art_rug-v1.prop",
|
||||||
|
"display_name": "Floor rug",
|
||||||
|
"depth": "floor",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"last_known_local_bounds": {
|
||||||
|
"position": {
|
||||||
|
"x": -179.0,
|
||||||
|
"y": -60.0
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"x": 358.0,
|
||||||
|
"y": 139.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "scenery_artwork_7",
|
||||||
|
"type": "scenery_artwork",
|
||||||
|
"position": {
|
||||||
|
"x": 500.0,
|
||||||
|
"y": 84.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/art_potted_plant-v1.prop",
|
||||||
|
"display_name": "Potted plant",
|
||||||
|
"depth": "floor",
|
||||||
|
"scale": {
|
||||||
|
"x": 0.800000011920929,
|
||||||
|
"y": 0.800000011920929
|
||||||
|
},
|
||||||
|
"last_known_local_bounds": {
|
||||||
|
"position": {
|
||||||
|
"x": -62.5,
|
||||||
|
"y": -114.5
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"x": 125.0,
|
||||||
|
"y": 219.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "stickman_1",
|
||||||
|
"type": "stickman",
|
||||||
|
"position": {
|
||||||
|
"x": -690.0,
|
||||||
|
"y": 152.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"stk_path": "res://content/stickmen/break.stk",
|
||||||
|
"facing_profile": "FORWARD",
|
||||||
|
"action_queue": [
|
||||||
|
{
|
||||||
|
"type": "move_to",
|
||||||
|
"target": {
|
||||||
|
"x": 588.195678710938,
|
||||||
|
"y": 144.184204101563
|
||||||
|
},
|
||||||
|
"style": "walk"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_4",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": 206.112670898438,
|
||||||
|
"y": -758.285827636719
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 634.58154296875,
|
||||||
|
"y": 125.426147460938
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_5",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": 16.1107177734375,
|
||||||
|
"y": -777.534423828125
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 281.898193359375,
|
||||||
|
"y": 181.309020996094
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_6",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": -37.2885131835938,
|
||||||
|
"y": -739.658203125
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 276.930786132813,
|
||||||
|
"y": 100.589233398438
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_7",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": 218.531005859375,
|
||||||
|
"y": -634.1015625
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 180.067138671875,
|
||||||
|
"y": 257.061401367188
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_8",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": -193.760681152344,
|
||||||
|
"y": -507.433654785156
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 142.811889648438,
|
||||||
|
"y": 428.435668945313
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_9",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": -5.0006103515625,
|
||||||
|
"y": -762.63232421875
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 321.63720703125,
|
||||||
|
"y": 211.113220214844
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_10",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": 29.7709350585938,
|
||||||
|
"y": -198.21484375
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 736.412475585938,
|
||||||
|
"y": 403.598876953125
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_11",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": 458.206604003906,
|
||||||
|
"y": -332.954742431641
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 661.901977539063,
|
||||||
|
"y": 986.023010253906
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_12",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": -522.22802734375,
|
||||||
|
"y": -360.275299072266
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 789.811767578125,
|
||||||
|
"y": 1020.79449462891
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_13",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": 44.6731567382813,
|
||||||
|
"y": -16.9058227539063
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 1493.93664550781,
|
||||||
|
"y": 430.919311523438
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_14",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": -199.348937988281,
|
||||||
|
"y": 81.19970703125
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 1577.14001464844,
|
||||||
|
"y": 259.545166015625
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_15",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": 61.60986328125,
|
||||||
|
"y": 297.579467773438
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 1281.58154296875,
|
||||||
|
"y": 192.485595703125
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_wood",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_16",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": -1040.0,
|
||||||
|
"y": -848.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 32.0,
|
||||||
|
"y": 32.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_17",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": -64.0,
|
||||||
|
"y": -176.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 2048.0,
|
||||||
|
"y": 1504.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_18",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": -64.0,
|
||||||
|
"y": 592.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 2048.0,
|
||||||
|
"y": 32.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_wood",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_1",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -960.0,
|
||||||
|
"y": 640.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_2",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -768.0,
|
||||||
|
"y": 640.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_3",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -576.0,
|
||||||
|
"y": 640.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_4",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -384.0,
|
||||||
|
"y": 640.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_5",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -192.0,
|
||||||
|
"y": 640.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_6",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 640.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_7",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 192.0,
|
||||||
|
"y": 640.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_8",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 384.0,
|
||||||
|
"y": 640.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_9",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 576.0,
|
||||||
|
"y": 640.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_10",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 768.0,
|
||||||
|
"y": 640.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_11",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 960.0,
|
||||||
|
"y": 640.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"event_rules": [],
|
||||||
|
"metadata": {
|
||||||
|
"created_unix": 1792022400,
|
||||||
|
"modified_unix": 1792165751.76,
|
||||||
|
"autosave": false,
|
||||||
|
"source_path": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,319 @@
|
|||||||
|
{
|
||||||
|
"version": "1.5",
|
||||||
|
"scene_name": "Untitled",
|
||||||
|
"sky_id": "sky_neutral",
|
||||||
|
"camera": {
|
||||||
|
"position": {
|
||||||
|
"x": 143.607360839844,
|
||||||
|
"y": -79.9739379882813
|
||||||
|
},
|
||||||
|
"zoom": 0.732050061225891
|
||||||
|
},
|
||||||
|
"objects": [
|
||||||
|
{
|
||||||
|
"file_id": "terrain_1",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -768.0,
|
||||||
|
"y": -32.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_2",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -576.0,
|
||||||
|
"y": -32.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_3",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -384.0,
|
||||||
|
"y": -32.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_4",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -192.0,
|
||||||
|
"y": -32.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_5",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": -32.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_6",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 192.0,
|
||||||
|
"y": -32.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_7",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 384.0,
|
||||||
|
"y": -32.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_8",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 576.0,
|
||||||
|
"y": -32.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_9",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 768.0,
|
||||||
|
"y": -32.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_10",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 960.0,
|
||||||
|
"y": -32.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "scenery_artwork_1",
|
||||||
|
"type": "scenery_artwork",
|
||||||
|
"position": {
|
||||||
|
"x": -93.5323791503906,
|
||||||
|
"y": -461.938385009766
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/art_fireplace_mantel-v2.prop",
|
||||||
|
"display_name": "Cozy Brick Fireplace Mantel",
|
||||||
|
"depth": "near",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"last_known_local_bounds": {
|
||||||
|
"position": {
|
||||||
|
"x": -386.467620849609,
|
||||||
|
"y": -306.061584472656
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"x": 772.935241699219,
|
||||||
|
"y": 612.123168945313
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "stickman_1",
|
||||||
|
"type": "stickman",
|
||||||
|
"position": {
|
||||||
|
"x": 600.0,
|
||||||
|
"y": -457.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"stk_path": "res://content/stickmen/break.stk",
|
||||||
|
"facing_profile": "FORWARD",
|
||||||
|
"action_queue": [
|
||||||
|
{
|
||||||
|
"type": "move_to",
|
||||||
|
"target": {
|
||||||
|
"x": -711.525268554688,
|
||||||
|
"y": -142.811157226563
|
||||||
|
},
|
||||||
|
"style": "run"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_1",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": 36.0,
|
||||||
|
"y": -612.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 1560.0,
|
||||||
|
"y": 840.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_2",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": -36.0,
|
||||||
|
"y": -528.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 1656.0,
|
||||||
|
"y": 960.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_paint",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_3",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": 120.0,
|
||||||
|
"y": -84.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 1728.0,
|
||||||
|
"y": 168.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_wood",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_4",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": -684.0,
|
||||||
|
"y": -156.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 360.0,
|
||||||
|
"y": 24.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_wood",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_5",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": -792.0,
|
||||||
|
"y": -84.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 144.0,
|
||||||
|
"y": 168.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_wood",
|
||||||
|
"color": "#5a9d70ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "scenery_artwork_2",
|
||||||
|
"type": "scenery_artwork",
|
||||||
|
"position": {
|
||||||
|
"x": -109.0,
|
||||||
|
"y": -108.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/art_rug-v1.prop",
|
||||||
|
"display_name": "Patterned Rug",
|
||||||
|
"depth": "near",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"last_known_local_bounds": {
|
||||||
|
"position": {
|
||||||
|
"x": -179.0,
|
||||||
|
"y": -60.0
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"x": 358.0,
|
||||||
|
"y": 139.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"event_rules": [],
|
||||||
|
"metadata": {
|
||||||
|
"created_unix": 1792178012.798,
|
||||||
|
"modified_unix": 1792178012.798,
|
||||||
|
"autosave": false,
|
||||||
|
"source_path": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,140 @@
|
|||||||
|
{
|
||||||
|
"version": "1.6",
|
||||||
|
"scene_name": "Untitled",
|
||||||
|
"sky_id": "sky_neutral",
|
||||||
|
"camera": {
|
||||||
|
"position": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": -400.0
|
||||||
|
},
|
||||||
|
"zoom": 0.5
|
||||||
|
},
|
||||||
|
"objects": [
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_1",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": -768.0,
|
||||||
|
"y": -608.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 1152.0,
|
||||||
|
"y": 832.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_brick",
|
||||||
|
"color": "#b95f3dff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "scenery_artwork_1",
|
||||||
|
"type": "scenery_artwork",
|
||||||
|
"position": {
|
||||||
|
"x": -64.0,
|
||||||
|
"y": -868.5
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/art_city_skyline-v1.prop",
|
||||||
|
"display_name": "City Skyline",
|
||||||
|
"depth": "far",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"last_known_local_bounds": {
|
||||||
|
"position": {
|
||||||
|
"x": -321.5,
|
||||||
|
"y": -126.5
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"x": 643.0,
|
||||||
|
"y": 198.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "scenery_artwork_2",
|
||||||
|
"type": "scenery_artwork",
|
||||||
|
"position": {
|
||||||
|
"x": 320.0,
|
||||||
|
"y": -804.5
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/art_city_skyline-v1.prop",
|
||||||
|
"display_name": "City Skyline",
|
||||||
|
"depth": "floor",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"last_known_local_bounds": {
|
||||||
|
"position": {
|
||||||
|
"x": -321.5,
|
||||||
|
"y": -126.5
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"x": 643.0,
|
||||||
|
"y": 198.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "scenery_artwork_3",
|
||||||
|
"type": "scenery_artwork",
|
||||||
|
"position": {
|
||||||
|
"x": 768.0,
|
||||||
|
"y": -804.5
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/art_city_skyline-v1.prop",
|
||||||
|
"display_name": "City Skyline",
|
||||||
|
"depth": "near",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"last_known_local_bounds": {
|
||||||
|
"position": {
|
||||||
|
"x": -321.5,
|
||||||
|
"y": -126.5
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"x": 643.0,
|
||||||
|
"y": 198.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "scenery_artwork_4",
|
||||||
|
"type": "scenery_artwork",
|
||||||
|
"position": {
|
||||||
|
"x": -448.0,
|
||||||
|
"y": -1600.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/baseball.prop",
|
||||||
|
"display_name": "Baseball",
|
||||||
|
"depth": "near",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"last_known_local_bounds": {
|
||||||
|
"position": {
|
||||||
|
"x": -26.1999988555908,
|
||||||
|
"y": -26.1999988555908
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"x": 52.4000015258789,
|
||||||
|
"y": 52.4000015258789
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"event_rules": [],
|
||||||
|
"metadata": {
|
||||||
|
"created_unix": 1792555445.055,
|
||||||
|
"modified_unix": 1792555445.055,
|
||||||
|
"autosave": false,
|
||||||
|
"source_path": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,419 @@
|
|||||||
|
{
|
||||||
|
"version": "1.7",
|
||||||
|
"scene_name": "Untitled",
|
||||||
|
"sky_id": "sky_sunset",
|
||||||
|
"background_kind": "plain",
|
||||||
|
"plain_color": "#FFFFFF",
|
||||||
|
"camera": {
|
||||||
|
"position": {
|
||||||
|
"x": 1676.29174804688,
|
||||||
|
"y": -39.946044921875
|
||||||
|
},
|
||||||
|
"zoom": 0.310460686683655
|
||||||
|
},
|
||||||
|
"objects": [
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_1",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": 288.0,
|
||||||
|
"y": -224.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 4160.0,
|
||||||
|
"y": 2368.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_brick",
|
||||||
|
"color": "#b95f3dff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_2",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": 288.0,
|
||||||
|
"y": -352.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 5568.0,
|
||||||
|
"y": 3136.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_wood",
|
||||||
|
"color": "#c87137ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "background_ground_1",
|
||||||
|
"type": "background_ground",
|
||||||
|
"position": {
|
||||||
|
"x": 256.0,
|
||||||
|
"y": -352.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 6144.0,
|
||||||
|
"y": 3392.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_background_concrete",
|
||||||
|
"color": "#a6aaa3ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "wall_panel_3",
|
||||||
|
"type": "wall_panel",
|
||||||
|
"position": {
|
||||||
|
"x": 128.0,
|
||||||
|
"y": -320.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 6016.0,
|
||||||
|
"y": 3456.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_wall_brick",
|
||||||
|
"color": "#22c6ffff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "stickman_1",
|
||||||
|
"type": "stickman",
|
||||||
|
"position": {
|
||||||
|
"x": -1088.0,
|
||||||
|
"y": -641.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"stk_path": "res://content/stickmen/break.stk",
|
||||||
|
"facing_profile": "FORWARD",
|
||||||
|
"action_queue": [
|
||||||
|
{
|
||||||
|
"type": "move_to",
|
||||||
|
"target": {
|
||||||
|
"x": 1562.8154296875,
|
||||||
|
"y": -145.01513671875
|
||||||
|
},
|
||||||
|
"style": "walk"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_1",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -2112.0,
|
||||||
|
"y": 0.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_2",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -1920.0,
|
||||||
|
"y": 0.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_3",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -1728.0,
|
||||||
|
"y": 0.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_4",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -1536.0,
|
||||||
|
"y": 0.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_5",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -1344.0,
|
||||||
|
"y": 0.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_6",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -1152.0,
|
||||||
|
"y": 0.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_7",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -960.0,
|
||||||
|
"y": 0.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_8",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -768.0,
|
||||||
|
"y": 0.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_9",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -576.0,
|
||||||
|
"y": 0.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_10",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -384.0,
|
||||||
|
"y": 0.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_11",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -192.0,
|
||||||
|
"y": -32.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_12",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": -32.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_13",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 192.0,
|
||||||
|
"y": -32.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_14",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 384.0,
|
||||||
|
"y": -32.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_15",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 576.0,
|
||||||
|
"y": -32.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_16",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 768.0,
|
||||||
|
"y": -32.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_17",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 960.0,
|
||||||
|
"y": -32.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_18",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 1152.0,
|
||||||
|
"y": -32.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_19",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 1344.0,
|
||||||
|
"y": -32.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_20",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 1536.0,
|
||||||
|
"y": -32.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_21",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 1728.0,
|
||||||
|
"y": -32.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"event_rules": [],
|
||||||
|
"metadata": {
|
||||||
|
"created_unix": 1792467978,
|
||||||
|
"modified_unix": 1792700708.001,
|
||||||
|
"autosave": false,
|
||||||
|
"source_path": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,857 @@
|
|||||||
|
{
|
||||||
|
"version": "1.7",
|
||||||
|
"scene_name": "Plain Background",
|
||||||
|
"sky_id": "sky_starry_night",
|
||||||
|
"background_kind": "sky",
|
||||||
|
"plain_color": "#F5EFE0",
|
||||||
|
"camera": {
|
||||||
|
"position": {
|
||||||
|
"x": -43.8016738891602,
|
||||||
|
"y": -691.851379394531
|
||||||
|
},
|
||||||
|
"zoom": 0.605000019073486
|
||||||
|
},
|
||||||
|
"objects": [
|
||||||
|
{
|
||||||
|
"file_id": "background_ground_1",
|
||||||
|
"type": "background_ground",
|
||||||
|
"position": {
|
||||||
|
"x": 96.0,
|
||||||
|
"y": 672.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 6592.0,
|
||||||
|
"y": 192.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_background_grass",
|
||||||
|
"color": "#72a84cff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "scenery_artwork_1",
|
||||||
|
"type": "scenery_artwork",
|
||||||
|
"position": {
|
||||||
|
"x": -1472.0,
|
||||||
|
"y": -320.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/art_storefront-v1.prop",
|
||||||
|
"display_name": "Sunny Storefront",
|
||||||
|
"depth": "near",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"last_known_local_bounds": {
|
||||||
|
"position": {
|
||||||
|
"x": -871.896057128906,
|
||||||
|
"y": -826.405822753906
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"x": 1743.79211425781,
|
||||||
|
"y": 1652.81164550781
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "scenery_artwork_2",
|
||||||
|
"type": "scenery_artwork",
|
||||||
|
"position": {
|
||||||
|
"x": -321.925048828125,
|
||||||
|
"y": -864.47802734375
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/art_town_house-v1.prop",
|
||||||
|
"display_name": "Town House",
|
||||||
|
"depth": "near",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"last_known_local_bounds": {
|
||||||
|
"position": {
|
||||||
|
"x": -958.074951171875,
|
||||||
|
"y": -1375.52197265625
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"x": 1916.14990234375,
|
||||||
|
"y": 2751.0439453125
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "scenery_artwork_3",
|
||||||
|
"type": "scenery_artwork",
|
||||||
|
"position": {
|
||||||
|
"x": 1408.0,
|
||||||
|
"y": -320.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/art_storefront-v1.prop",
|
||||||
|
"display_name": "Sunny Storefront",
|
||||||
|
"depth": "near",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"last_known_local_bounds": {
|
||||||
|
"position": {
|
||||||
|
"x": -871.896057128906,
|
||||||
|
"y": -826.405822753906
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"x": 1743.79211425781,
|
||||||
|
"y": 1652.81164550781
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "scenery_artwork_4",
|
||||||
|
"type": "scenery_artwork",
|
||||||
|
"position": {
|
||||||
|
"x": -2368.0,
|
||||||
|
"y": -256.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/art_city_skyline-v1.prop",
|
||||||
|
"display_name": "City Skyline",
|
||||||
|
"depth": "far",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"last_known_local_bounds": {
|
||||||
|
"position": {
|
||||||
|
"x": -939.5,
|
||||||
|
"y": -289.301696777344
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"x": 1879.0,
|
||||||
|
"y": 578.603393554688
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "scenery_artwork_5",
|
||||||
|
"type": "scenery_artwork",
|
||||||
|
"position": {
|
||||||
|
"x": 704.0,
|
||||||
|
"y": -256.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/art_city_skyline-v1.prop",
|
||||||
|
"display_name": "City Skyline",
|
||||||
|
"depth": "far",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"last_known_local_bounds": {
|
||||||
|
"position": {
|
||||||
|
"x": -939.5,
|
||||||
|
"y": -289.301696777344
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"x": 1879.0,
|
||||||
|
"y": 578.603393554688
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "scenery_artwork_6",
|
||||||
|
"type": "scenery_artwork",
|
||||||
|
"position": {
|
||||||
|
"x": 2304.0,
|
||||||
|
"y": -256.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/art_city_skyline-v1.prop",
|
||||||
|
"display_name": "City Skyline",
|
||||||
|
"depth": "far",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"last_known_local_bounds": {
|
||||||
|
"position": {
|
||||||
|
"x": -939.5,
|
||||||
|
"y": -289.301696777344
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"x": 1879.0,
|
||||||
|
"y": 578.603393554688
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "background_ground_2",
|
||||||
|
"type": "background_ground",
|
||||||
|
"position": {
|
||||||
|
"x": 96.0,
|
||||||
|
"y": 352.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 6848.0,
|
||||||
|
"y": 832.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_background_grass",
|
||||||
|
"color": "#72a84cff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_1",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -3264.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_2",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -3072.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_3",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -2880.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_4",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -2688.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_5",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -2496.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_6",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -2304.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_7",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -2112.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_8",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -1920.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_9",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -1728.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_10",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -1536.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_11",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -1344.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_12",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -1152.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_13",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -960.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_14",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -768.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_15",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -576.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_16",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -384.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_17",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -192.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_18",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_19",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 192.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_20",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 384.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_21",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 576.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_22",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 768.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_23",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 960.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_24",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 1152.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_25",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 1344.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_26",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 1536.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_27",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 1728.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_28",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 1920.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_29",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 2112.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_30",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 2304.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_31",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 2496.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_32",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 2688.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_33",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 2880.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_34",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 3072.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_35",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 3264.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_36",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 3456.0,
|
||||||
|
"y": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_sidewalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "background_ground_3",
|
||||||
|
"type": "background_ground",
|
||||||
|
"position": {
|
||||||
|
"x": 160.0,
|
||||||
|
"y": 864.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 6912.0,
|
||||||
|
"y": 192.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_background_concrete",
|
||||||
|
"color": "#a6aaa3ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "background_ground_4",
|
||||||
|
"type": "background_ground",
|
||||||
|
"position": {
|
||||||
|
"x": -2896.0,
|
||||||
|
"y": 848.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 800.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_background_concrete",
|
||||||
|
"color": "#a6aaa3ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "background_ground_5",
|
||||||
|
"type": "background_ground",
|
||||||
|
"position": {
|
||||||
|
"x": -3264.0,
|
||||||
|
"y": 864.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"size": {
|
||||||
|
"x": 320.0,
|
||||||
|
"y": 192.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_background_concrete",
|
||||||
|
"color": "#a6aaa3ff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "stickman_1",
|
||||||
|
"type": "stickman",
|
||||||
|
"position": {
|
||||||
|
"x": -2784.0,
|
||||||
|
"y": 351.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"stk_path": "res://content/stickmen/break.stk",
|
||||||
|
"facing_profile": "FORWARD",
|
||||||
|
"action_queue": [
|
||||||
|
{
|
||||||
|
"type": "move_to",
|
||||||
|
"target": {
|
||||||
|
"x": 2027.27270507813,
|
||||||
|
"y": 683.355224609375
|
||||||
|
},
|
||||||
|
"style": "walk"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "stickman_2",
|
||||||
|
"type": "stickman",
|
||||||
|
"position": {
|
||||||
|
"x": -672.0,
|
||||||
|
"y": 352.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"stk_path": "res://content/stickmen/break.stk",
|
||||||
|
"facing_profile": "FORWARD",
|
||||||
|
"action_queue": [
|
||||||
|
{
|
||||||
|
"type": "move_to",
|
||||||
|
"target": {
|
||||||
|
"x": -3161.15698242188,
|
||||||
|
"y": 701.537109375
|
||||||
|
},
|
||||||
|
"style": "walk"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "stickman_3",
|
||||||
|
"type": "stickman",
|
||||||
|
"position": {
|
||||||
|
"x": 3392.0,
|
||||||
|
"y": 351.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"stk_path": "res://content/stickmen/break.stk",
|
||||||
|
"facing_profile": "FORWARD",
|
||||||
|
"action_queue": [
|
||||||
|
{
|
||||||
|
"type": "move_to",
|
||||||
|
"target": {
|
||||||
|
"x": -3333.0576171875,
|
||||||
|
"y": 726.330444335938
|
||||||
|
},
|
||||||
|
"style": "run"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"event_rules": [],
|
||||||
|
"metadata": {
|
||||||
|
"created_unix": 1792022400,
|
||||||
|
"modified_unix": 1792732500.154,
|
||||||
|
"autosave": false,
|
||||||
|
"source_path": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,293 @@
|
|||||||
|
{
|
||||||
|
"version": "1.9",
|
||||||
|
"scene_name": "Phase 20b - Moving Prop Chase",
|
||||||
|
"sky_id": "sky_neutral",
|
||||||
|
"background_kind": "sky",
|
||||||
|
"plain_color": "#F5EFE0",
|
||||||
|
"camera": {
|
||||||
|
"position": {
|
||||||
|
"y": -240.0,
|
||||||
|
"x": -180.0
|
||||||
|
},
|
||||||
|
"zoom": 0.55
|
||||||
|
},
|
||||||
|
"objects": [
|
||||||
|
{
|
||||||
|
"file_id": "terrain_1",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": -960.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_2",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": -768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_3",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": -576.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_4",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": -384.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_5",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": -192.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_6",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 0.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_7",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 192.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_8",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 384.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_9",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 576.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_10",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 768.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_11",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 960.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "stickman_1",
|
||||||
|
"type": "stickman",
|
||||||
|
"position": {
|
||||||
|
"y": -225.0,
|
||||||
|
"x": -700.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"stk_path": "res://content/stickmen/break.stk",
|
||||||
|
"stage_object_id": "stage_phase20b_test2_chaser",
|
||||||
|
"stage_name": "Chaser",
|
||||||
|
"facing_profile": "FORWARD",
|
||||||
|
"action_plan": [
|
||||||
|
{
|
||||||
|
"actions": [
|
||||||
|
{
|
||||||
|
"type": "wait",
|
||||||
|
"action_id": "action_phase20b_test2_wait",
|
||||||
|
"duration": 1.0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"actions": [
|
||||||
|
{
|
||||||
|
"action_id": "action_phase20b_test2_pursue",
|
||||||
|
"type": "move_to",
|
||||||
|
"style": "run",
|
||||||
|
"destination": {
|
||||||
|
"kind": "prop",
|
||||||
|
"last_known_approach": {
|
||||||
|
"y": -215.0,
|
||||||
|
"x": -30.0
|
||||||
|
},
|
||||||
|
"target_prop_id": "stage_phase20b_test2_baseball",
|
||||||
|
"approach_offset": {
|
||||||
|
"y": 0.0,
|
||||||
|
"x": -80.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "prop_ramp",
|
||||||
|
"type": "prop",
|
||||||
|
"position": {
|
||||||
|
"y": -38.0,
|
||||||
|
"x": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 30.0,
|
||||||
|
"asset_id": "res://content/props/prop_coffee_table-v1.prop",
|
||||||
|
"stage_object_id": "stage_phase20b_test2_ramp",
|
||||||
|
"stage_name": "Tilted Ramp",
|
||||||
|
"roles": {
|
||||||
|
"depth": "behind",
|
||||||
|
"start_motion": "still",
|
||||||
|
"holds_other_props": true,
|
||||||
|
"blocks_stickmen": false,
|
||||||
|
"can_pick_up": false,
|
||||||
|
"released_blocks_stickmen": true,
|
||||||
|
"released_bumps_other_props": true,
|
||||||
|
"legacy_draw_order": false
|
||||||
|
},
|
||||||
|
"use_spots": [],
|
||||||
|
"next_use_spot_number": 1,
|
||||||
|
"wobble_on_impact": false,
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"material_preset": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "prop_rolling_baseball",
|
||||||
|
"type": "prop",
|
||||||
|
"position": {
|
||||||
|
"y": -215.0,
|
||||||
|
"x": 50.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/baseball.prop",
|
||||||
|
"stage_object_id": "stage_phase20b_test2_baseball",
|
||||||
|
"stage_name": "Rolling Baseball",
|
||||||
|
"roles": {
|
||||||
|
"depth": "behind",
|
||||||
|
"start_motion": "physics",
|
||||||
|
"holds_other_props": false,
|
||||||
|
"blocks_stickmen": false,
|
||||||
|
"can_pick_up": true,
|
||||||
|
"released_blocks_stickmen": true,
|
||||||
|
"released_bumps_other_props": true,
|
||||||
|
"legacy_draw_order": false
|
||||||
|
},
|
||||||
|
"use_spots": [],
|
||||||
|
"next_use_spot_number": 1,
|
||||||
|
"wobble_on_impact": false,
|
||||||
|
"scale": {
|
||||||
|
"x": 0.99999862909317,
|
||||||
|
"y": 0.99999862909317
|
||||||
|
},
|
||||||
|
"material_preset": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"event_rules": [],
|
||||||
|
"metadata": {
|
||||||
|
"created_unix": 1793685806,
|
||||||
|
"source_path": "",
|
||||||
|
"autosave": false,
|
||||||
|
"modified_unix": 1793686116
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,884 @@
|
|||||||
|
{
|
||||||
|
"version": "1.9",
|
||||||
|
"scene_name": "Phase 20b - Timeout and Missing Target",
|
||||||
|
"sky_id": "sky_neutral",
|
||||||
|
"background_kind": "sky",
|
||||||
|
"plain_color": "#F5EFE0",
|
||||||
|
"camera": {
|
||||||
|
"zoom": 0.15,
|
||||||
|
"position": {
|
||||||
|
"x": -2800.0,
|
||||||
|
"y": -240.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"objects": [
|
||||||
|
{
|
||||||
|
"file_id": "terrain_1",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -7680.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_2",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -7488.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_3",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -7296.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_4",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -7104.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_5",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -6912.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_6",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -6720.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_7",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -6528.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_8",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -6336.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_9",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -6144.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_10",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -5952.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_11",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -5760.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_12",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -5568.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_13",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -5376.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_14",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -5184.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_15",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -4992.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_16",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -4800.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_17",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -4608.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_18",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -4416.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_19",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -4224.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_20",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -4032.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_21",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -3840.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_22",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -3648.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_23",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -3456.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_24",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -3264.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_25",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -3072.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_26",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -2880.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_27",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -2688.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_28",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -2496.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_29",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -2304.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_30",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -2112.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_31",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -1920.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_32",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -1728.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_33",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -1536.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_34",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -1344.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_35",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -1152.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_36",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -960.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_37",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -768.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_38",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -576.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_39",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -384.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_40",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -192.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_41",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_42",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 192.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_43",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 384.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_44",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 576.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_45",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 768.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_46",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 960.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_47",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 1152.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_48",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 1344.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_49",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 1536.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_50",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 1728.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_51",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 1920.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "stickman_timeout_test",
|
||||||
|
"type": "stickman",
|
||||||
|
"position": {
|
||||||
|
"x": -6000.0,
|
||||||
|
"y": -225.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"stk_path": "res://content/stickmen/break.stk",
|
||||||
|
"stage_object_id": "stage_phase20b_test3_chaser",
|
||||||
|
"stage_name": "Chaser",
|
||||||
|
"facing_profile": "FORWARD",
|
||||||
|
"action_plan": [
|
||||||
|
{
|
||||||
|
"actions": [
|
||||||
|
{
|
||||||
|
"action_id": "action_phase20b_test3_chase",
|
||||||
|
"type": "move_to",
|
||||||
|
"destination": {
|
||||||
|
"target_prop_id": "stage_phase20b_test3_target",
|
||||||
|
"last_known_approach": {
|
||||||
|
"x": -30.0,
|
||||||
|
"y": -215.0
|
||||||
|
},
|
||||||
|
"kind": "prop",
|
||||||
|
"approach_offset": {
|
||||||
|
"x": -80.0,
|
||||||
|
"y": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"style": "run"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "prop_ramp",
|
||||||
|
"type": "prop",
|
||||||
|
"position": {
|
||||||
|
"x": 160.0,
|
||||||
|
"y": -38.0
|
||||||
|
},
|
||||||
|
"rotation": 30.0,
|
||||||
|
"asset_id": "res://content/props/prop_coffee_table-v1.prop",
|
||||||
|
"stage_object_id": "stage_phase20b_test3_ramp",
|
||||||
|
"stage_name": "Rolling Ramp",
|
||||||
|
"roles": {
|
||||||
|
"depth": "behind",
|
||||||
|
"start_motion": "still",
|
||||||
|
"holds_other_props": true,
|
||||||
|
"blocks_stickmen": false,
|
||||||
|
"can_pick_up": false,
|
||||||
|
"released_blocks_stickmen": true,
|
||||||
|
"released_bumps_other_props": true,
|
||||||
|
"legacy_draw_order": false
|
||||||
|
},
|
||||||
|
"use_spots": [],
|
||||||
|
"next_use_spot_number": 1,
|
||||||
|
"wobble_on_impact": false,
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"material_preset": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "prop_timeout_target",
|
||||||
|
"type": "prop",
|
||||||
|
"position": {
|
||||||
|
"x": 50.0,
|
||||||
|
"y": -215.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/baseball.prop",
|
||||||
|
"stage_object_id": "stage_phase20b_test3_target",
|
||||||
|
"stage_name": "Target Ball",
|
||||||
|
"roles": {
|
||||||
|
"depth": "behind",
|
||||||
|
"start_motion": "physics",
|
||||||
|
"holds_other_props": false,
|
||||||
|
"blocks_stickmen": false,
|
||||||
|
"can_pick_up": true,
|
||||||
|
"released_blocks_stickmen": true,
|
||||||
|
"released_bumps_other_props": true,
|
||||||
|
"legacy_draw_order": false
|
||||||
|
},
|
||||||
|
"use_spots": [],
|
||||||
|
"next_use_spot_number": 1,
|
||||||
|
"wobble_on_impact": false,
|
||||||
|
"scale": {
|
||||||
|
"x": 0.99999862909317,
|
||||||
|
"y": 0.99999862909317
|
||||||
|
},
|
||||||
|
"material_preset": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"event_rules": [],
|
||||||
|
"metadata": {
|
||||||
|
"autosave": false,
|
||||||
|
"source_path": "",
|
||||||
|
"modified_unix": 1793757248,
|
||||||
|
"created_unix": 1793757048
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,413 @@
|
|||||||
|
{
|
||||||
|
"version": "1.9",
|
||||||
|
"scene_name": "Phase 20b - Pause During Pursuit",
|
||||||
|
"sky_id": "sky_neutral",
|
||||||
|
"background_kind": "sky",
|
||||||
|
"plain_color": "#F5EFE0",
|
||||||
|
"camera": {
|
||||||
|
"position": {
|
||||||
|
"x": -650.0,
|
||||||
|
"y": -240.0
|
||||||
|
},
|
||||||
|
"zoom": 0.42
|
||||||
|
},
|
||||||
|
"objects": [
|
||||||
|
{
|
||||||
|
"file_id": "terrain_1",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": -1920
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_2",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": -1728
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_3",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": -1536
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_4",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": -1344
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_5",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": -1152
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_6",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": -960
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_7",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": -768
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_8",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": -576
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_9",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": -384
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_10",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": -192
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_11",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_12",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 192
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_13",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 384
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_14",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 576
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_15",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 768
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_16",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 960
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_17",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 1152
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_18",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 1344
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_19",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 1536
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "stickman_test4_walker",
|
||||||
|
"type": "stickman",
|
||||||
|
"position": {
|
||||||
|
"x": -1300.0,
|
||||||
|
"y": -225.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"stk_path": "res://content/stickmen/break.stk",
|
||||||
|
"stage_object_id": "stage_phase20b_test4_walker",
|
||||||
|
"stage_name": "Walker",
|
||||||
|
"facing_profile": "FORWARD",
|
||||||
|
"action_plan": [
|
||||||
|
{
|
||||||
|
"actions": [
|
||||||
|
{
|
||||||
|
"type": "wait",
|
||||||
|
"duration": 0.5,
|
||||||
|
"action_id": "action_phase20b_test4_wait"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"actions": [
|
||||||
|
{
|
||||||
|
"type": "move_to",
|
||||||
|
"style": "run",
|
||||||
|
"destination": {
|
||||||
|
"kind": "prop",
|
||||||
|
"target_prop_id": "stage_phase20b_test4_ball",
|
||||||
|
"approach_offset": {
|
||||||
|
"x": -80.0,
|
||||||
|
"y": 0.0
|
||||||
|
},
|
||||||
|
"last_known_approach": {
|
||||||
|
"x": -30.0,
|
||||||
|
"y": -215.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"action_id": "action_phase20b_test4_pursue"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "prop_test4_ramp",
|
||||||
|
"type": "prop",
|
||||||
|
"position": {
|
||||||
|
"x": 160.0,
|
||||||
|
"y": -38.0
|
||||||
|
},
|
||||||
|
"rotation": 30.0,
|
||||||
|
"asset_id": "res://content/props/prop_coffee_table-v1.prop",
|
||||||
|
"stage_object_id": "stage_phase20b_test4_ramp",
|
||||||
|
"stage_name": "Tilted Ramp",
|
||||||
|
"roles": {
|
||||||
|
"depth": "behind",
|
||||||
|
"start_motion": "still",
|
||||||
|
"holds_other_props": true,
|
||||||
|
"blocks_stickmen": false,
|
||||||
|
"can_pick_up": false,
|
||||||
|
"released_blocks_stickmen": true,
|
||||||
|
"released_bumps_other_props": true,
|
||||||
|
"legacy_draw_order": false
|
||||||
|
},
|
||||||
|
"use_spots": [],
|
||||||
|
"next_use_spot_number": 1,
|
||||||
|
"wobble_on_impact": false,
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"material_preset": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "prop_test4_ball",
|
||||||
|
"type": "prop",
|
||||||
|
"position": {
|
||||||
|
"x": 50.0,
|
||||||
|
"y": -215.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/baseball.prop",
|
||||||
|
"stage_object_id": "stage_phase20b_test4_ball",
|
||||||
|
"stage_name": "Rolling Ball",
|
||||||
|
"roles": {
|
||||||
|
"depth": "behind",
|
||||||
|
"start_motion": "physics",
|
||||||
|
"holds_other_props": false,
|
||||||
|
"blocks_stickmen": false,
|
||||||
|
"can_pick_up": true,
|
||||||
|
"released_blocks_stickmen": true,
|
||||||
|
"released_bumps_other_props": true,
|
||||||
|
"legacy_draw_order": false
|
||||||
|
},
|
||||||
|
"use_spots": [],
|
||||||
|
"next_use_spot_number": 1,
|
||||||
|
"wobble_on_impact": false,
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"material_preset": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"event_rules": [],
|
||||||
|
"metadata": {
|
||||||
|
"created_unix": 1793765197,
|
||||||
|
"source_path": "",
|
||||||
|
"autosave": false,
|
||||||
|
"modified_unix": 1793765197
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,270 @@
|
|||||||
|
{
|
||||||
|
"version": "1.9",
|
||||||
|
"scene_name": "Phase 20b - Target Identity and Repair",
|
||||||
|
"sky_id": "sky_neutral",
|
||||||
|
"background_kind": "sky",
|
||||||
|
"plain_color": "#F5EFE0",
|
||||||
|
"camera": {
|
||||||
|
"position": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": -240.0
|
||||||
|
},
|
||||||
|
"zoom": 0.519999980926514
|
||||||
|
},
|
||||||
|
"objects": [
|
||||||
|
{
|
||||||
|
"file_id": "terrain_1",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -960.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_2",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -768.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_3",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -576.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_4",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -384.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_5",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -192.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_6",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_7",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 192.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_8",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 384.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_9",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 576.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_10",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 768.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_11",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 960.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "stickman_1",
|
||||||
|
"type": "stickman",
|
||||||
|
"position": {
|
||||||
|
"x": -620.0,
|
||||||
|
"y": -225.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"stk_path": "res://content/stickmen/break.stk",
|
||||||
|
"stage_object_id": "stage_phase20b_test5_walker",
|
||||||
|
"stage_name": "Walker",
|
||||||
|
"facing_profile": "FORWARD",
|
||||||
|
"action_plan": [
|
||||||
|
{
|
||||||
|
"actions": [
|
||||||
|
{
|
||||||
|
"type": "move_to",
|
||||||
|
"style": "walk",
|
||||||
|
"destination": {
|
||||||
|
"kind": "prop",
|
||||||
|
"target_prop_id": "stage_phase20b_test5_briefcase",
|
||||||
|
"approach_offset": {
|
||||||
|
"x": -40.0,
|
||||||
|
"y": 0.0
|
||||||
|
},
|
||||||
|
"last_known_approach": {
|
||||||
|
"x": 220.0,
|
||||||
|
"y": -225.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"action_id": "action_phase20b_test5_move_to_prop"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"actions": [
|
||||||
|
{
|
||||||
|
"type": "move_to",
|
||||||
|
"style": "walk",
|
||||||
|
"destination": {
|
||||||
|
"kind": "place",
|
||||||
|
"position": {
|
||||||
|
"x": 360.0,
|
||||||
|
"y": -225.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"action_id": "action_phase20b_test5_free_place"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "prop_1",
|
||||||
|
"type": "prop",
|
||||||
|
"position": {
|
||||||
|
"x": 260.0,
|
||||||
|
"y": 64.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/briefcase.prop",
|
||||||
|
"stage_object_id": "stage_phase20b_test5_briefcase",
|
||||||
|
"stage_name": "Named Briefcase",
|
||||||
|
"roles": {
|
||||||
|
"depth": "behind",
|
||||||
|
"start_motion": "still",
|
||||||
|
"holds_other_props": false,
|
||||||
|
"blocks_stickmen": false,
|
||||||
|
"can_pick_up": true,
|
||||||
|
"released_blocks_stickmen": true,
|
||||||
|
"released_bumps_other_props": true,
|
||||||
|
"legacy_draw_order": false
|
||||||
|
},
|
||||||
|
"use_spots": [],
|
||||||
|
"next_use_spot_number": 1,
|
||||||
|
"wobble_on_impact": false,
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"material_preset": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"event_rules": [],
|
||||||
|
"metadata": {
|
||||||
|
"created_unix": 1793765197,
|
||||||
|
"modified_unix": 1793765903.57,
|
||||||
|
"autosave": false,
|
||||||
|
"source_path": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,262 @@
|
|||||||
|
{
|
||||||
|
"version": "1.9",
|
||||||
|
"scene_name": "Phase 20b - DIRECT Editing and Focus",
|
||||||
|
"sky_id": "sky_neutral",
|
||||||
|
"background_kind": "sky",
|
||||||
|
"plain_color": "#F5EFE0",
|
||||||
|
"camera": {
|
||||||
|
"position": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": -240.0
|
||||||
|
},
|
||||||
|
"zoom": 0.52
|
||||||
|
},
|
||||||
|
"objects": [
|
||||||
|
{
|
||||||
|
"file_id": "terrain_1",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": -960
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_2",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": -768
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_3",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": -576
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_4",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": -384
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_5",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": -192
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_6",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_7",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 192
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_8",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 384
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_9",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 576
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_10",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 768
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_11",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 960
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "stickman_test6_direct",
|
||||||
|
"type": "stickman",
|
||||||
|
"position": {
|
||||||
|
"x": -500.0,
|
||||||
|
"y": -225.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"stk_path": "res://content/stickmen/break.stk",
|
||||||
|
"stage_object_id": "stage_phase20b_test6_direct",
|
||||||
|
"stage_name": "Director",
|
||||||
|
"facing_profile": "FORWARD",
|
||||||
|
"action_plan": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "prop_test6_table",
|
||||||
|
"type": "prop",
|
||||||
|
"position": {
|
||||||
|
"x": 320.0,
|
||||||
|
"y": 32.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/prop_coffee_table-v1.prop",
|
||||||
|
"stage_object_id": "stage_phase20b_test6_table",
|
||||||
|
"stage_name": "Coffee Table",
|
||||||
|
"roles": {
|
||||||
|
"depth": "behind",
|
||||||
|
"start_motion": "still",
|
||||||
|
"holds_other_props": true,
|
||||||
|
"blocks_stickmen": false,
|
||||||
|
"can_pick_up": false,
|
||||||
|
"released_blocks_stickmen": true,
|
||||||
|
"released_bumps_other_props": true,
|
||||||
|
"legacy_draw_order": false
|
||||||
|
},
|
||||||
|
"use_spots": [],
|
||||||
|
"next_use_spot_number": 1,
|
||||||
|
"wobble_on_impact": false,
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"material_preset": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "prop_test6_case",
|
||||||
|
"type": "prop",
|
||||||
|
"position": {
|
||||||
|
"x": 560.0,
|
||||||
|
"y": 64.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/briefcase.prop",
|
||||||
|
"stage_object_id": "stage_phase20b_test6_case",
|
||||||
|
"stage_name": "Briefcase",
|
||||||
|
"roles": {
|
||||||
|
"depth": "behind",
|
||||||
|
"start_motion": "still",
|
||||||
|
"holds_other_props": false,
|
||||||
|
"blocks_stickmen": false,
|
||||||
|
"can_pick_up": true,
|
||||||
|
"released_blocks_stickmen": true,
|
||||||
|
"released_bumps_other_props": true,
|
||||||
|
"legacy_draw_order": false
|
||||||
|
},
|
||||||
|
"use_spots": [],
|
||||||
|
"next_use_spot_number": 1,
|
||||||
|
"wobble_on_impact": false,
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"material_preset": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"event_rules": [],
|
||||||
|
"metadata": {
|
||||||
|
"created_unix": 1793765197,
|
||||||
|
"source_path": "",
|
||||||
|
"autosave": false,
|
||||||
|
"modified_unix": 1793765197
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,285 @@
|
|||||||
|
{
|
||||||
|
"version": "1.9",
|
||||||
|
"scene_name": "Phase 20b - Target Picking and Cancel",
|
||||||
|
"sky_id": "sky_neutral",
|
||||||
|
"background_kind": "sky",
|
||||||
|
"plain_color": "#F5EFE0",
|
||||||
|
"camera": {
|
||||||
|
"position": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": -240.0
|
||||||
|
},
|
||||||
|
"zoom": 0.52
|
||||||
|
},
|
||||||
|
"objects": [
|
||||||
|
{
|
||||||
|
"file_id": "terrain_1",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": -960
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_2",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": -768
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_3",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": -576
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_4",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": -384
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_5",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": -192
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_6",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_7",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 192
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_8",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 384
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_9",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 576
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_10",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 768
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_11",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"y": 160.0,
|
||||||
|
"x": 960
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "stickman_test7_capture",
|
||||||
|
"type": "stickman",
|
||||||
|
"position": {
|
||||||
|
"x": -520.0,
|
||||||
|
"y": -225.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"stk_path": "res://content/stickmen/break.stk",
|
||||||
|
"stage_object_id": "stage_phase20b_test7_capture",
|
||||||
|
"stage_name": "Director",
|
||||||
|
"facing_profile": "FORWARD",
|
||||||
|
"action_plan": [
|
||||||
|
{
|
||||||
|
"actions": [
|
||||||
|
{
|
||||||
|
"type": "pick_up_prop",
|
||||||
|
"target_prop_id": "stage_phase20b_test7_case",
|
||||||
|
"hand": "auto",
|
||||||
|
"action_id": "action_phase20b_test7_pickup"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"actions": [
|
||||||
|
{
|
||||||
|
"type": "set_down_prop",
|
||||||
|
"target_position": {
|
||||||
|
"x": 320.0,
|
||||||
|
"y": -256.0
|
||||||
|
},
|
||||||
|
"action_id": "action_phase20b_test7_setdown"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "prop_test7_case",
|
||||||
|
"type": "prop",
|
||||||
|
"position": {
|
||||||
|
"x": -220.0,
|
||||||
|
"y": 64.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/briefcase.prop",
|
||||||
|
"stage_object_id": "stage_phase20b_test7_case",
|
||||||
|
"stage_name": "Briefcase",
|
||||||
|
"roles": {
|
||||||
|
"depth": "behind",
|
||||||
|
"start_motion": "still",
|
||||||
|
"holds_other_props": false,
|
||||||
|
"blocks_stickmen": false,
|
||||||
|
"can_pick_up": true,
|
||||||
|
"released_blocks_stickmen": true,
|
||||||
|
"released_bumps_other_props": true,
|
||||||
|
"legacy_draw_order": false
|
||||||
|
},
|
||||||
|
"use_spots": [],
|
||||||
|
"next_use_spot_number": 1,
|
||||||
|
"wobble_on_impact": false,
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"material_preset": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "prop_test7_table",
|
||||||
|
"type": "prop",
|
||||||
|
"position": {
|
||||||
|
"x": 320.0,
|
||||||
|
"y": 32.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "res://content/props/prop_coffee_table-v1.prop",
|
||||||
|
"stage_object_id": "stage_phase20b_test7_table",
|
||||||
|
"stage_name": "Coffee Table",
|
||||||
|
"roles": {
|
||||||
|
"depth": "behind",
|
||||||
|
"start_motion": "still",
|
||||||
|
"holds_other_props": true,
|
||||||
|
"blocks_stickmen": false,
|
||||||
|
"can_pick_up": false,
|
||||||
|
"released_blocks_stickmen": true,
|
||||||
|
"released_bumps_other_props": true,
|
||||||
|
"legacy_draw_order": false
|
||||||
|
},
|
||||||
|
"use_spots": [],
|
||||||
|
"next_use_spot_number": 1,
|
||||||
|
"wobble_on_impact": false,
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"material_preset": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"event_rules": [],
|
||||||
|
"metadata": {
|
||||||
|
"created_unix": 1793765197,
|
||||||
|
"source_path": "",
|
||||||
|
"autosave": false,
|
||||||
|
"modified_unix": 1793765197
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,206 @@
|
|||||||
|
{
|
||||||
|
"version": "1.9",
|
||||||
|
"scene_name": "Phase 20b - Together Timing",
|
||||||
|
"sky_id": "sky_neutral",
|
||||||
|
"background_kind": "sky",
|
||||||
|
"plain_color": "#F5EFE0",
|
||||||
|
"camera": {
|
||||||
|
"position": {
|
||||||
|
"x": -300.0,
|
||||||
|
"y": -240.0
|
||||||
|
},
|
||||||
|
"zoom": 0.55
|
||||||
|
},
|
||||||
|
"objects": [
|
||||||
|
{
|
||||||
|
"file_id": "terrain_1",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -768.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_2",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -576.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_3",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -384.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_4",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": -192.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_5",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_6",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 192.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_7",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 384.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_8",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 576.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "terrain_9",
|
||||||
|
"type": "terrain",
|
||||||
|
"position": {
|
||||||
|
"x": 768.0,
|
||||||
|
"y": 160.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"asset_id": "ground",
|
||||||
|
"scale": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 1.0
|
||||||
|
},
|
||||||
|
"finish_id": "finish_ground_grass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file_id": "stickman_timing_test",
|
||||||
|
"type": "stickman",
|
||||||
|
"position": {
|
||||||
|
"x": -400.0,
|
||||||
|
"y": -225.0
|
||||||
|
},
|
||||||
|
"rotation": 0.0,
|
||||||
|
"stk_path": "res://content/stickmen/break.stk",
|
||||||
|
"stage_object_id": "stage_phase20b_test3_walker",
|
||||||
|
"stage_name": "Walker",
|
||||||
|
"facing_profile": "FORWARD",
|
||||||
|
"action_plan": [
|
||||||
|
{
|
||||||
|
"actions": [
|
||||||
|
{
|
||||||
|
"destination": {
|
||||||
|
"kind": "place",
|
||||||
|
"position": {
|
||||||
|
"x": -220.0,
|
||||||
|
"y": -225.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"action_id": "action_phase20b_test3_walk",
|
||||||
|
"type": "move_to",
|
||||||
|
"style": "walk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "speak",
|
||||||
|
"text": "I am walking and talking!",
|
||||||
|
"stop_current": false,
|
||||||
|
"action_id": "action_phase20b_test3_say",
|
||||||
|
"duration": 3.0,
|
||||||
|
"keep_acting": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"actions": [
|
||||||
|
{
|
||||||
|
"action_id": "action_phase20b_test3_wait",
|
||||||
|
"type": "wait",
|
||||||
|
"duration": 0.5
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"event_rules": [],
|
||||||
|
"metadata": {
|
||||||
|
"source_path": "",
|
||||||
|
"created_unix": 1793745212,
|
||||||
|
"autosave": false,
|
||||||
|
"modified_unix": 1793745212
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"version": "1.7",
|
||||||
|
"scene_name": "Open Sky",
|
||||||
|
"sky_id": "sky_neutral",
|
||||||
|
"background_kind": "sky",
|
||||||
|
"plain_color": "#F5EFE0",
|
||||||
|
"camera": {"position": {"x": 0.0, "y": -400.0}, "zoom": 0.5},
|
||||||
|
"objects": [],
|
||||||
|
"event_rules": [],
|
||||||
|
"metadata": {"created_unix": 1792022400, "modified_unix": 1792022400, "autosave": false, "source_path": ""}
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
{
|
||||||
|
"version": "1.6",
|
||||||
|
"scene_name": "Living Room",
|
||||||
|
"sky_id": "sky_clear_day",
|
||||||
|
"camera": {"position": {"x": 118.0, "y": -432.0}, "zoom": 0.38},
|
||||||
|
"objects": [
|
||||||
|
{"file_id":"wall_top","type":"wall_panel","position":{"x":0.0,"y":-941.0},"rotation":0.0,"size":{"x":4760.0,"y":518.0},"finish_id":"finish_wall_paint","color":"#5A9D70"},
|
||||||
|
{"file_id":"wall_left","type":"wall_panel","position":{"x":-1262.5,"y":-256.0},"rotation":0.0,"size":{"x":2235.0,"y":852.0},"finish_id":"finish_wall_paint","color":"#5A9D70"},
|
||||||
|
{"file_id":"wall_right","type":"wall_panel","position":{"x":1262.5,"y":-256.0},"rotation":0.0,"size":{"x":2235.0,"y":852.0},"finish_id":"finish_wall_paint","color":"#5A9D70"},
|
||||||
|
{"file_id":"wall_under_window","type":"wall_panel","position":{"x":0.0,"y":-116.0},"rotation":0.0,"size":{"x":290.0,"y":572.0},"finish_id":"finish_wall_paint","color":"#5A9D70"},
|
||||||
|
{"file_id":"wall_baseboard","type":"wall_panel","position":{"x":0.0,"y":177.0},"rotation":0.0,"size":{"x":4760.0,"y":14.0},"finish_id":"finish_wall_paint","color":"#E4C496"},
|
||||||
|
{"file_id":"window_frame","type":"scenery_artwork","asset_id":"res://content/props/art_window_frame-v1.prop","display_name":"Window frame","depth":"near","position":{"x":0.0,"y":-530.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0}},
|
||||||
|
{"file_id":"wall_clock","type":"scenery_artwork","asset_id":"res://content/props/art_wall_clock-v1.prop","display_name":"Wall clock","depth":"near","position":{"x":-450.0,"y":-540.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0}},
|
||||||
|
{"file_id":"fireplace","type":"scenery_artwork","asset_id":"res://content/props/art_fireplace_mantel-v2.prop","display_name":"Fireplace","depth":"near","position":{"x":1280.0,"y":-126.5},"rotation":0.0,"scale":{"x":1.0,"y":1.0}},
|
||||||
|
{"file_id":"bookshelf","type":"scenery_artwork","asset_id":"res://content/props/art_bookshelf-v1.prop","display_name":"Bookshelf","depth":"near","position":{"x":-930.0,"y":-311.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0}},
|
||||||
|
{"file_id":"picture","type":"scenery_artwork","asset_id":"res://content/props/art_framed_picture-v1.prop","display_name":"Framed picture","depth":"near","position":{"x":1000.0,"y":-530.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0}},
|
||||||
|
{"file_id":"ground_wood_left_12","type":"terrain","asset_id":"ground","position":{"x":-2304.0,"y":200.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_wood"},
|
||||||
|
{"file_id":"ground_wood_left_11","type":"terrain","asset_id":"ground","position":{"x":-2112.0,"y":200.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_wood"},
|
||||||
|
{"file_id":"ground_wood_left_10","type":"terrain","asset_id":"ground","position":{"x":-1920.0,"y":200.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_wood"},
|
||||||
|
{"file_id":"ground_wood_left_09","type":"terrain","asset_id":"ground","position":{"x":-1728.0,"y":200.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_wood"},
|
||||||
|
{"file_id":"ground_wood_left_08","type":"terrain","asset_id":"ground","position":{"x":-1536.0,"y":200.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_wood"},
|
||||||
|
{"file_id":"ground_wood_left_07","type":"terrain","asset_id":"ground","position":{"x":-1344.0,"y":200.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_wood"},
|
||||||
|
{"file_id":"ground_wood_left_06","type":"terrain","asset_id":"ground","position":{"x":-1152.0,"y":200.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_wood"},
|
||||||
|
{"file_id":"ground_wood_left_05","type":"terrain","asset_id":"ground","position":{"x":-960.0,"y":200.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_wood"},
|
||||||
|
{"file_id":"ground_wood_left_04","type":"terrain","asset_id":"ground","position":{"x":-768.0,"y":200.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_wood"},
|
||||||
|
{"file_id":"ground_wood_left_03","type":"terrain","asset_id":"ground","position":{"x":-576.0,"y":200.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_wood"},
|
||||||
|
{"file_id":"ground_wood_left_02","type":"terrain","asset_id":"ground","position":{"x":-384.0,"y":200.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_wood"},
|
||||||
|
{"file_id":"ground_wood_left_01","type":"terrain","asset_id":"ground","position":{"x":-192.0,"y":200.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_wood"},
|
||||||
|
{"file_id":"ground_wood","type":"terrain","asset_id":"ground","position":{"x":0.0,"y":200.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_wood"},
|
||||||
|
{"file_id":"ground_wood_right_01","type":"terrain","asset_id":"ground","position":{"x":192.0,"y":200.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_wood"},
|
||||||
|
{"file_id":"ground_wood_right_02","type":"terrain","asset_id":"ground","position":{"x":384.0,"y":200.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_wood"},
|
||||||
|
{"file_id":"ground_wood_right_03","type":"terrain","asset_id":"ground","position":{"x":576.0,"y":200.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_wood"},
|
||||||
|
{"file_id":"ground_wood_right_04","type":"terrain","asset_id":"ground","position":{"x":768.0,"y":200.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_wood"},
|
||||||
|
{"file_id":"ground_wood_right_05","type":"terrain","asset_id":"ground","position":{"x":960.0,"y":200.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_wood"},
|
||||||
|
{"file_id":"ground_wood_right_06","type":"terrain","asset_id":"ground","position":{"x":1152.0,"y":200.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_wood"},
|
||||||
|
{"file_id":"ground_wood_right_07","type":"terrain","asset_id":"ground","position":{"x":1344.0,"y":200.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_wood"},
|
||||||
|
{"file_id":"ground_wood_right_08","type":"terrain","asset_id":"ground","position":{"x":1536.0,"y":200.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_wood"},
|
||||||
|
{"file_id":"ground_wood_right_09","type":"terrain","asset_id":"ground","position":{"x":1728.0,"y":200.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_wood"},
|
||||||
|
{"file_id":"ground_wood_right_10","type":"terrain","asset_id":"ground","position":{"x":1920.0,"y":200.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_wood"},
|
||||||
|
{"file_id":"ground_wood_right_11","type":"terrain","asset_id":"ground","position":{"x":2112.0,"y":200.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_wood"},
|
||||||
|
{"file_id":"ground_wood_right_12","type":"terrain","asset_id":"ground","position":{"x":2304.0,"y":200.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_wood"},
|
||||||
|
{"file_id":"rug","type":"scenery_artwork","asset_id":"res://content/props/art_rug-v1.prop","display_name":"Floor rug","depth":"floor","position":{"x":0.0,"y":87.2},"rotation":0.0,"scale":{"x":1.0,"y":1.0}},
|
||||||
|
{"file_id":"plant","type":"scenery_artwork","asset_id":"res://content/props/art_potted_plant-v1.prop","display_name":"Potted plant","depth":"floor","position":{"x":1715.0,"y":75.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0}},
|
||||||
|
{"file_id":"couch","type":"prop","asset_id":"res://content/props/prop_couch-v1.prop","position":{"x":-690.0,"y":-85.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"stage_object_id":"starter_couch","roles":{"depth":"behind","start_motion":"still","holds_other_props":false,"blocks_stickmen":true,"can_pick_up":false,"released_blocks_stickmen":true,"released_bumps_other_props":true,"legacy_draw_order":false},"use_spots":[],"next_use_spot_number":1,"wobble_on_impact":false,"material_preset":"WOOD"},
|
||||||
|
{"file_id":"armchair","type":"prop","asset_id":"res://content/props/prop_armchair-v1.prop","position":{"x":620.0,"y":-104.4},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"stage_object_id":"starter_armchair","roles":{"depth":"behind","start_motion":"still","holds_other_props":false,"blocks_stickmen":true,"can_pick_up":false,"released_blocks_stickmen":true,"released_bumps_other_props":true,"legacy_draw_order":false},"use_spots":[],"next_use_spot_number":1,"wobble_on_impact":false,"material_preset":"WOOD"},
|
||||||
|
{"file_id":"coffee_table","type":"prop","asset_id":"res://content/props/prop_coffee_table-v1.prop","position":{"x":-515.0,"y":64.3},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"stage_object_id":"starter_coffee_table","roles":{"depth":"front","start_motion":"still","holds_other_props":true,"blocks_stickmen":true,"can_pick_up":false,"released_blocks_stickmen":true,"released_bumps_other_props":true,"legacy_draw_order":false},"use_spots":[],"next_use_spot_number":1,"wobble_on_impact":false,"material_preset":"WOOD"}
|
||||||
|
],
|
||||||
|
"event_rules": [],
|
||||||
|
"metadata": {"created_unix": 1792022400, "modified_unix": 1792022400, "autosave": false, "source_path": ""}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"version": "1.7",
|
||||||
|
"scene_name": "Plain Background",
|
||||||
|
"sky_id": "sky_neutral",
|
||||||
|
"background_kind": "plain",
|
||||||
|
"plain_color": "#F5EFE0",
|
||||||
|
"camera": {"position": {"x": 0.0, "y": -400.0}, "zoom": 0.5},
|
||||||
|
"objects": [],
|
||||||
|
"event_rules": [],
|
||||||
|
"metadata": {"created_unix": 1792022400, "modified_unix": 1792022400, "autosave": false, "source_path": ""}
|
||||||
|
}
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
{
|
||||||
|
"version": "1.6",
|
||||||
|
"scene_name": "Town Street",
|
||||||
|
"sky_id": "sky_cloudy_day",
|
||||||
|
"camera": {"position": {"x": 0.0, "y": -1200.0}, "zoom": 0.16},
|
||||||
|
"objects": [
|
||||||
|
{"file_id":"town_landscape_ground","type":"background_ground","position":{"x":0.0,"y":660.0},"size":{"x":8400.0,"y":2000.0},"finish_id":"finish_background_grass","color":"#72A84C"},
|
||||||
|
{"file_id":"scenery_skyline_left_outer","type":"scenery_artwork","asset_id":"res://content/props/art_city_skyline-v1.prop","display_name":"City skyline","depth":"far","position":{"x":-3700.0,"y":-604.918},"rotation":0.0,"scale":{"x":1.0,"y":1.0}},
|
||||||
|
{"file_id":"scenery_skyline_left","type":"scenery_artwork","asset_id":"res://content/props/art_city_skyline-v1.prop","display_name":"City skyline","depth":"far","position":{"x":-1850.0,"y":-604.918},"rotation":0.0,"scale":{"x":1.0,"y":1.0}},
|
||||||
|
{"file_id":"scenery_skyline","type":"scenery_artwork","asset_id":"res://content/props/art_city_skyline-v1.prop","display_name":"City skyline","depth":"far","position":{"x":0.0,"y":-604.918},"rotation":0.0,"scale":{"x":1.0,"y":1.0}},
|
||||||
|
{"file_id":"scenery_skyline_right","type":"scenery_artwork","asset_id":"res://content/props/art_city_skyline-v1.prop","display_name":"City skyline","depth":"far","position":{"x":1850.0,"y":-604.918},"rotation":0.0,"scale":{"x":1.0,"y":1.0}},
|
||||||
|
{"file_id":"scenery_skyline_right_outer","type":"scenery_artwork","asset_id":"res://content/props/art_city_skyline-v1.prop","display_name":"City skyline","depth":"far","position":{"x":3700.0,"y":-604.918},"rotation":0.0,"scale":{"x":1.0,"y":1.0}},
|
||||||
|
{"file_id":"scenery_tree_left","type":"scenery_artwork","asset_id":"res://content/props/art_tree-v2.prop","display_name":"Tree","depth":"near","position":{"x":-2600.0,"y":-1271.498},"rotation":0.0,"scale":{"x":1.0,"y":1.0}},
|
||||||
|
{"file_id":"scenery_town_house","type":"scenery_artwork","asset_id":"res://content/props/art_town_house-v1.prop","display_name":"Town house","depth":"near","position":{"x":-1400.0,"y":-1361.835},"rotation":0.0,"scale":{"x":1.0,"y":1.0}},
|
||||||
|
{"file_id":"scenery_storefront","type":"scenery_artwork","asset_id":"res://content/props/art_storefront-v1.prop","display_name":"Storefront","depth":"near","position":{"x":1400.0,"y":-813.77},"rotation":0.0,"scale":{"x":1.0,"y":1.0}},
|
||||||
|
{"file_id":"scenery_tree_right","type":"scenery_artwork","asset_id":"res://content/props/art_tree-v2.prop","display_name":"Tree","depth":"near","position":{"x":2600.0,"y":-1271.498},"rotation":0.0,"scale":{"x":1.0,"y":1.0}},
|
||||||
|
{"file_id":"ground_sidewalk_left_12","type":"terrain","asset_id":"ground","position":{"x":-2304.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_left_11","type":"terrain","asset_id":"ground","position":{"x":-2112.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_left_10","type":"terrain","asset_id":"ground","position":{"x":-1920.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_left_09","type":"terrain","asset_id":"ground","position":{"x":-1728.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_left_08","type":"terrain","asset_id":"ground","position":{"x":-1536.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_left_07","type":"terrain","asset_id":"ground","position":{"x":-1344.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_left_06","type":"terrain","asset_id":"ground","position":{"x":-1152.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_left_05","type":"terrain","asset_id":"ground","position":{"x":-960.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_left_04","type":"terrain","asset_id":"ground","position":{"x":-768.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_left_03","type":"terrain","asset_id":"ground","position":{"x":-576.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_left_02","type":"terrain","asset_id":"ground","position":{"x":-384.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_left_01","type":"terrain","asset_id":"ground","position":{"x":-192.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk","type":"terrain","asset_id":"ground","position":{"x":0.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_right_01","type":"terrain","asset_id":"ground","position":{"x":192.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_right_02","type":"terrain","asset_id":"ground","position":{"x":384.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_right_03","type":"terrain","asset_id":"ground","position":{"x":576.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_right_04","type":"terrain","asset_id":"ground","position":{"x":768.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_right_05","type":"terrain","asset_id":"ground","position":{"x":960.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_right_06","type":"terrain","asset_id":"ground","position":{"x":1152.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_right_07","type":"terrain","asset_id":"ground","position":{"x":1344.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_right_08","type":"terrain","asset_id":"ground","position":{"x":1536.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_right_09","type":"terrain","asset_id":"ground","position":{"x":1728.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_right_10","type":"terrain","asset_id":"ground","position":{"x":1920.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_right_11","type":"terrain","asset_id":"ground","position":{"x":2112.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_right_12","type":"terrain","asset_id":"ground","position":{"x":2304.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_left_13","type":"terrain","asset_id":"ground","position":{"x":-2496.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_left_14","type":"terrain","asset_id":"ground","position":{"x":-2688.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_left_15","type":"terrain","asset_id":"ground","position":{"x":-2880.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_left_16","type":"terrain","asset_id":"ground","position":{"x":-3072.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_left_17","type":"terrain","asset_id":"ground","position":{"x":-3264.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_left_18","type":"terrain","asset_id":"ground","position":{"x":-3456.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_left_19","type":"terrain","asset_id":"ground","position":{"x":-3648.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_left_20","type":"terrain","asset_id":"ground","position":{"x":-3840.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_right_13","type":"terrain","asset_id":"ground","position":{"x":2496.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_right_14","type":"terrain","asset_id":"ground","position":{"x":2688.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_right_15","type":"terrain","asset_id":"ground","position":{"x":2880.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_right_16","type":"terrain","asset_id":"ground","position":{"x":3072.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_right_17","type":"terrain","asset_id":"ground","position":{"x":3264.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_right_18","type":"terrain","asset_id":"ground","position":{"x":3456.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_right_19","type":"terrain","asset_id":"ground","position":{"x":3648.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_sidewalk_right_20","type":"terrain","asset_id":"ground","position":{"x":3840.0,"y":0.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_sidewalk"},
|
||||||
|
{"file_id":"ground_asphalt_left_12","type":"terrain","asset_id":"ground","position":{"x":-2304.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_left_11","type":"terrain","asset_id":"ground","position":{"x":-2112.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_left_10","type":"terrain","asset_id":"ground","position":{"x":-1920.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_left_09","type":"terrain","asset_id":"ground","position":{"x":-1728.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_left_08","type":"terrain","asset_id":"ground","position":{"x":-1536.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_left_07","type":"terrain","asset_id":"ground","position":{"x":-1344.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_left_06","type":"terrain","asset_id":"ground","position":{"x":-1152.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_left_05","type":"terrain","asset_id":"ground","position":{"x":-960.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_left_04","type":"terrain","asset_id":"ground","position":{"x":-768.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_left_03","type":"terrain","asset_id":"ground","position":{"x":-576.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_left_02","type":"terrain","asset_id":"ground","position":{"x":-384.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_left_01","type":"terrain","asset_id":"ground","position":{"x":-192.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt","type":"terrain","asset_id":"ground","position":{"x":0.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_right_01","type":"terrain","asset_id":"ground","position":{"x":192.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_right_02","type":"terrain","asset_id":"ground","position":{"x":384.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_right_03","type":"terrain","asset_id":"ground","position":{"x":576.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_right_04","type":"terrain","asset_id":"ground","position":{"x":768.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_right_05","type":"terrain","asset_id":"ground","position":{"x":960.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_right_06","type":"terrain","asset_id":"ground","position":{"x":1152.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_right_07","type":"terrain","asset_id":"ground","position":{"x":1344.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_right_08","type":"terrain","asset_id":"ground","position":{"x":1536.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_right_09","type":"terrain","asset_id":"ground","position":{"x":1728.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_right_10","type":"terrain","asset_id":"ground","position":{"x":1920.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_right_11","type":"terrain","asset_id":"ground","position":{"x":2112.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_right_12","type":"terrain","asset_id":"ground","position":{"x":2304.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_left_extension","type":"terrain","asset_id":"ground","position":{"x":-2496.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_right_extension","type":"terrain","asset_id":"ground","position":{"x":2496.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_left_14","type":"terrain","asset_id":"ground","position":{"x":-2688.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_left_15","type":"terrain","asset_id":"ground","position":{"x":-2880.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_left_16","type":"terrain","asset_id":"ground","position":{"x":-3072.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_left_17","type":"terrain","asset_id":"ground","position":{"x":-3264.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_left_18","type":"terrain","asset_id":"ground","position":{"x":-3456.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_left_19","type":"terrain","asset_id":"ground","position":{"x":-3648.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_left_20","type":"terrain","asset_id":"ground","position":{"x":-3840.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_right_14","type":"terrain","asset_id":"ground","position":{"x":2688.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_right_15","type":"terrain","asset_id":"ground","position":{"x":2880.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_right_16","type":"terrain","asset_id":"ground","position":{"x":3072.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_right_17","type":"terrain","asset_id":"ground","position":{"x":3264.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_right_18","type":"terrain","asset_id":"ground","position":{"x":3456.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_right_19","type":"terrain","asset_id":"ground","position":{"x":3648.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"},
|
||||||
|
{"file_id":"ground_asphalt_right_20","type":"terrain","asset_id":"ground","position":{"x":3840.0,"y":32.0},"rotation":0.0,"scale":{"x":1.0,"y":1.0},"finish_id":"finish_ground_asphalt"}
|
||||||
|
],
|
||||||
|
"event_rules": [],
|
||||||
|
"metadata": {"created_unix": 1792022400, "modified_unix": 1792022400, "autosave": false, "source_path": ""}
|
||||||
|
}
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
# Patterned scenery rendering
|
||||||
|
|
||||||
|
A patterned wall or background uses one small repeating image for each finish and tint. The camera samples that same image wherever the surface appears. A pan or zoom changes the visible rectangle and sampling scale; it does not create a new image for each camera position.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Render pipeline
|
||||||
|
|
||||||
|
1. A visible, committed patterned surface requests its style from the scene's `StageSurfaceBakePool`.
|
||||||
|
2. The cache checks the style key. A ready entry is reused; a missing entry is queued for the shared baker.
|
||||||
|
3. At most one queued style is baked per process frame. The baker draws a four-world-unit overscan around the material period so edge details can be cropped without gaps.
|
||||||
|
4. After the submitted drawing reaches `frame_post_draw`, the pool captures the image, crops the period, generates mipmaps, and publishes an `ImageTexture`.
|
||||||
|
5. The temporary vector commands are cleared. The surface draws one camera-clipped quad using the shared image, repeat sampling, and mipmapped filtering.
|
||||||
|
|
||||||
|
The GPU still renders the textured rectangle every frame. When the view changes, the CPU also updates that rectangle and its texture coordinates. This is a small drawing command; it does not rebuild brick faces, grain, pores, or other vector details. The cache counters distinguish image builds and readbacks from ordinary redraws.
|
||||||
|
|
||||||
|
## Shared style images
|
||||||
|
|
||||||
|
The cache is owned by a scene-scoped pool. Its key includes finish, tint, wall/background kind, material version, repeat period, pixel density, and mipmap configuration. It excludes surface position, camera position, zoom, rectangle size, and erase fragment. Thus same-style surfaces and fragments share one image, while a tint change correctly requests a different image.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
The current periods are finite, seamless repeat units baked at two bitmap pixels per world unit:
|
||||||
|
|
||||||
|
| Finish | Repeat period in world units | Bitmap size |
|
||||||
|
| --- | ---: | ---: |
|
||||||
|
| Brick | 800 × 304 | 1600 × 608 |
|
||||||
|
| Wood | 960 × 384 | 1920 × 768 |
|
||||||
|
| Grass | 704 × 576 | 1408 × 1152 |
|
||||||
|
| Carpet | 544 × 416 | 1088 × 832 |
|
||||||
|
| Concrete | 1120 × 760 | 2240 × 1520 |
|
||||||
|
|
||||||
|
For example, a 100-world-unit brick remains 100 world units wide. At 0.4× zoom it covers about 40 screen pixels; zoom changes how the GPU samples the image, not the brick geometry. The finite repeat unit makes detail bounded, so landmarks can become noticeable on very large surfaces.
|
||||||
|
|
||||||
|
## Zoom and mipmaps
|
||||||
|
|
||||||
|
The renderer captures the material once at fixed density, then builds smaller mip levels from that image. During zoom-out the GPU samples a smaller level to reduce shimmer; during zoom-in it samples a larger level. This replaces separately drawing the material at several CPU-selected zoom levels. At the Stage's maximum 6× zoom, the source image is magnified three times and can look softer. The current quality/performance tradeoff is fixed in the cache configuration.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Erasing and pattern alignment
|
||||||
|
|
||||||
|
The eraser still cuts a rectangle into up to four rectangular fragments. Each fragment draws only its own bounds, but requests the same style image; it does not bake a fragment-specific copy. Cancel restores the original geometry, and Commit retains the new fragments. Both use the existing material sampling rules.
|
||||||
|
|
||||||
|
The sampling origin is significant: walls use `global_position`; background ground uses `global_position + motif_origin_offset`. Each surface computes its source UV from its local visible position plus that draw origin, wrapped by the material period. This preserves the current alignment convention across cuts. Avoid changing the origin rule as a generic transform correction: unusual transformed fragments need separate verification before making a broader alignment claim.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Memory and rebuild boundaries
|
||||||
|
|
||||||
|
The scene cache has a 64 MiB resident texture budget. Accounting includes mip levels, textures waiting for safe retirement, and reserved space for a capture. Unused entries are evicted by least-recent use when needed. A style held by active surfaces can prevent admission of another style; the pool reports this as budget pressure rather than exceeding the cap. Under ordinary use, returning to a recently used style should reuse its warm image. Many tint variants can force eviction and a later rebuild.
|
||||||
|
|
||||||
|
A style's first capture still costs CPU/GPU work and can briefly affect a frame. Once ready, moving the camera across a large wall does not enqueue position tiles or read back new images. The shared baker also clears its vector command list after capture, preventing the native drawing resources that previously accumulated in many per-tile viewports.
|
||||||
|
|
||||||
|
These images are temporary runtime data. A saved `.scene` keeps surface settings and geometry; the cache recreates its images when needed in a new Stage session. Closing the scene releases its pool.
|
||||||
|
|
||||||
|
## What causes another bake?
|
||||||
|
|
||||||
|
| Action | New image work? |
|
||||||
|
| --- | --- |
|
||||||
|
| Pan left, then return right | No, while the style remains cached. |
|
||||||
|
| Zoom in or out | No. The GPU samples existing mipmaps. |
|
||||||
|
| Resize a wall | No. Change the rectangle and texture coordinates. |
|
||||||
|
| Erase, Cancel, or Commit | No, if the style is ready. Change geometry and clipping. |
|
||||||
|
| Use the same finish and tint on another wall | No, if the style is ready. Share its image. |
|
||||||
|
| Choose a new finish or tint | Bake once if that style is missing. |
|
||||||
|
| Return to an evicted style, or open a fresh session | Recreate the missing image. |
|
||||||
|
|
||||||
|
## Terms used here
|
||||||
|
|
||||||
|
- **Bake:** render the vector artwork once to make an image.
|
||||||
|
- **Texture:** the image the GPU samples when drawing.
|
||||||
|
- **Quad:** one rectangle, represented by two triangles.
|
||||||
|
- **UVs:** coordinates that select which part of a texture to sample.
|
||||||
|
- **Mipmaps:** smaller copies of an image, prepared in advance for zooming out.
|
||||||
|
- **Readback:** copy the rendered image from the GPU so the cache can keep an independent texture.
|
||||||
|
|
||||||
|
## Scope and code map
|
||||||
|
|
||||||
|
The bitmap cache is for committed patterned walls and backgrounds in render-capable runs. Plain paint surfaces, interactive placement previews, and headless runs retain the direct renderer path. Fully opaque scenery can suppress a fully hidden surface's texture request; partial coverage remains conservative.
|
||||||
|
|
||||||
|
- [StageSurfaceCache](../../scripts/stage/scenery/stage_surface_cache.gd) owns style handles, the scene pool, bake queue, image capture, mipmaps, cache keys, and budget statistics.
|
||||||
|
- [StageRectSurface](../../scripts/stage/scenery/stage_rect_surface.gd) requests the style, clips the surface to the visible camera area, and draws the repeated texture.
|
||||||
|
- [StageSurfaceRenderer](../../scripts/stage/scenery/stage_surface_renderer.gd) defines patterned artwork, material periods, and the direct-drawing path.
|
||||||
|
- [Repeating scenery material cache spec](../specs/scenery_bitmap_tile_cache.md) records implementation constraints and acceptance checks.
|
||||||
|
|
||||||
|
In one observed warm run of `fps.scene`, four style entries used 36,399,144 bytes (about 34.71 MiB); 720 warm camera frames recorded zero builds, readbacks, or evictions. This is a run snapshot, not a guarantee for other scenes, tint combinations, or hardware.
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="640" viewBox="0 0 1200 640" role="img" aria-labelledby="title desc">
|
||||||
|
<title id="title">Erasing changes rectangles while sharing the same background texture</title>
|
||||||
|
<desc id="desc">A rectangular cut turns one wall into top, bottom, left and right fragments. All fragments sample the existing image using their pattern coordinates. The image itself is not painted over or copied.</desc>
|
||||||
|
<defs>
|
||||||
|
<pattern id="brick" width="80" height="48" patternUnits="userSpaceOnUse"><rect width="80" height="48" fill="#d2cbaf"/><rect x="2" y="2" width="36" height="19" fill="#25b8df"/><rect x="42" y="2" width="36" height="19" fill="#39c7ee"/><rect x="-18" y="26" width="36" height="19" fill="#32c2e8"/><rect x="22" y="26" width="36" height="19" fill="#21b4da"/><rect x="62" y="26" width="36" height="19" fill="#32c2e8"/></pattern>
|
||||||
|
<marker id="arrow" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto"><path d="M0 0L10 5L0 10Z" fill="#475569"/></marker>
|
||||||
|
<style>text{font-family:Segoe UI,Arial,sans-serif;fill:#172033}.title{font-size:30px;font-weight:700}.heading{font-size:22px;font-weight:700}.body{font-size:18px}.small{font-size:16px}.arrow{fill:none;stroke:#475569;stroke-width:3;marker-end:url(#arrow)}</style>
|
||||||
|
</defs>
|
||||||
|
<rect width="1200" height="640" rx="16" fill="#f8fafc"/>
|
||||||
|
<text x="40" y="53" class="title">Erase the wall geometry. Keep the shared image.</text>
|
||||||
|
<text x="40" y="86" class="body">Fragments crop their own rectangles and use the existing pattern coordinates.</text>
|
||||||
|
<text x="50" y="136" class="heading">Before: one wall rectangle</text>
|
||||||
|
<g transform="translate(50 160)">
|
||||||
|
<rect width="460" height="300" fill="url(#brick)" stroke="#94a3b8" stroke-width="2"/>
|
||||||
|
<rect x="155" y="90" width="150" height="120" fill="#fff" fill-opacity=".3" stroke="#b45309" stroke-width="4" stroke-dasharray="10 6"/>
|
||||||
|
<rect x="174" y="131" width="112" height="36" rx="6" fill="#fff7ed"/>
|
||||||
|
<text x="230" y="155" class="body" text-anchor="middle">Cut here</text>
|
||||||
|
</g>
|
||||||
|
<path d="M532 310H648" class="arrow"/>
|
||||||
|
<text x="590" y="283" class="small" text-anchor="middle">Erase area</text>
|
||||||
|
|
||||||
|
<text x="680" y="136" class="heading">After: up to four fragments</text>
|
||||||
|
<g transform="translate(680 160)">
|
||||||
|
<rect width="460" height="300" fill="#dbeafe"/>
|
||||||
|
<g fill="url(#brick)" stroke="#0f766e" stroke-width="3">
|
||||||
|
<rect width="460" height="90"/>
|
||||||
|
<rect x="0" y="210" width="460" height="90"/>
|
||||||
|
<rect x="0" y="90" width="155" height="120"/>
|
||||||
|
<rect x="305" y="90" width="155" height="120"/>
|
||||||
|
</g>
|
||||||
|
<g fill="#fff"><rect x="195" y="26" width="70" height="36" rx="6"/><rect x="182" y="242" width="96" height="36" rx="6"/><rect x="43" y="131" width="70" height="36" rx="6"/><rect x="342" y="131" width="78" height="36" rx="6"/></g>
|
||||||
|
<text x="230" y="51" class="body" text-anchor="middle">Top</text>
|
||||||
|
<text x="230" y="267" class="body" text-anchor="middle">Bottom</text>
|
||||||
|
<text x="78" y="155" class="body" text-anchor="middle">Left</text>
|
||||||
|
<text x="381" y="155" class="body" text-anchor="middle">Right</text>
|
||||||
|
<text x="230" y="143" class="body" text-anchor="middle">Empty area</text>
|
||||||
|
<text x="230" y="173" class="small" text-anchor="middle">Scene behind</text>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<rect x="40" y="510" width="1120" height="95" rx="12" fill="#eff6ff" stroke="#2563eb" stroke-width="2"/>
|
||||||
|
<text x="62" y="546" class="heading">All remaining pieces still use the same cached texture.</text>
|
||||||
|
<text x="62" y="580" class="body">Cancel restores the original geometry. Commit keeps the fragments. Neither paints into the image.</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.6 KiB |
@@ -0,0 +1,39 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1200" height="630" viewBox="0 0 1200 630" role="img" aria-labelledby="title desc">
|
||||||
|
<title id="title">Zoom uses smaller copies already stored in the material texture</title>
|
||||||
|
<desc id="desc">The brick material starts at 1600 by 608 bitmap pixels. Its mip chain includes 800 by 304, 400 by 152 and 200 by 76, continuing down to one pixel. These copies are prepared once. Brick world dimensions stay fixed.</desc>
|
||||||
|
<defs>
|
||||||
|
<pattern id="brick" width="100" height="38" patternUnits="userSpaceOnUse"><rect width="100" height="38" fill="#d2cbaf"/><rect x="2" y="2" width="46" height="15" fill="#26b8df"/><rect x="52" y="2" width="46" height="15" fill="#39c7ee"/><rect x="-23" y="21" width="46" height="15" fill="#32c2e8"/><rect x="27" y="21" width="46" height="15" fill="#21b4da"/><rect x="77" y="21" width="46" height="15" fill="#32c2e8"/></pattern>
|
||||||
|
<pattern id="half" xlink:href="#brick" patternTransform="scale(.5)"/>
|
||||||
|
<pattern id="quarter" xlink:href="#brick" patternTransform="scale(.25)"/>
|
||||||
|
<pattern id="eighth" xlink:href="#brick" patternTransform="scale(.125)"/>
|
||||||
|
<marker id="arrow" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto"><path d="M0 0L10 5L0 10Z" fill="#7c3aed"/></marker>
|
||||||
|
<style>text{font-family:Segoe UI,Arial,sans-serif;fill:#172033}.title{font-size:30px;font-weight:700}.heading{font-size:22px;font-weight:700}.body{font-size:18px}.small{font-size:16px}.arrow{fill:none;stroke:#7c3aed;stroke-width:3;marker-end:url(#arrow)}</style>
|
||||||
|
</defs>
|
||||||
|
<rect width="1200" height="630" rx="16" fill="#f8fafc"/>
|
||||||
|
<text x="40" y="53" class="title">Zoom samples ready-made sizes of the same image.</text>
|
||||||
|
<text x="40" y="86" class="body">Mipmaps are generated once with the material. The GPU selects and blends them during rendering.</text>
|
||||||
|
|
||||||
|
<rect x="60" y="150" width="400" height="152" fill="url(#brick)" stroke="#94a3b8"/>
|
||||||
|
<path d="M471 228H508" class="arrow"/>
|
||||||
|
<rect x="530" y="188" width="200" height="76" fill="url(#half)" stroke="#94a3b8"/>
|
||||||
|
<path d="M741 228H778" class="arrow"/>
|
||||||
|
<rect x="800" y="207" width="100" height="38" fill="url(#quarter)" stroke="#94a3b8"/>
|
||||||
|
<path d="M911 228H948" class="arrow"/>
|
||||||
|
<rect x="970" y="217" width="50" height="19" fill="url(#eighth)" stroke="#94a3b8"/>
|
||||||
|
<text x="1043" y="234" class="heading">…</text>
|
||||||
|
|
||||||
|
<text x="260" y="342" class="heading" text-anchor="middle">1600 × 608</text>
|
||||||
|
<text x="260" y="373" class="small" text-anchor="middle">Base image: 2 pixels / world unit</text>
|
||||||
|
<text x="630" y="342" class="heading" text-anchor="middle">800 × 304</text>
|
||||||
|
<text x="630" y="373" class="small" text-anchor="middle">Half size</text>
|
||||||
|
<text x="850" y="342" class="heading" text-anchor="middle">400 × 152</text>
|
||||||
|
<text x="850" y="373" class="small" text-anchor="middle">Quarter size</text>
|
||||||
|
<text x="1000" y="342" class="heading" text-anchor="middle">200 × 76</text>
|
||||||
|
<text x="1000" y="373" class="small" text-anchor="middle">Eighth size</text>
|
||||||
|
<text x="60" y="414" class="small">The actual chain continues down to 1 × 1. Diagram sizes are scaled for illustration.</text>
|
||||||
|
|
||||||
|
<rect x="40" y="450" width="1120" height="143" rx="12" fill="#ecfdf5" stroke="#0f766e" stroke-width="2"/>
|
||||||
|
<text x="62" y="486" class="heading">World size, image size and screen size are different things.</text>
|
||||||
|
<text x="62" y="521" class="body">A brick stays 100 world units wide. At 40% zoom, it covers about 40 screen pixels.</text>
|
||||||
|
<text x="62" y="556" class="body">Camera zoom changes sampling detail; it does not bake another image or resize the brick geometry.</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.6 KiB |
@@ -0,0 +1,51 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="640" viewBox="0 0 1200 640" role="img" aria-labelledby="title desc">
|
||||||
|
<title id="title">Background rendering: prepare a style once, reuse it while moving the camera</title>
|
||||||
|
<desc id="desc">A visible surface requests its finish and tint from the scene cache. A cache hit goes directly to the GPU repeat sampler. A cache miss uses one temporary baker, captures an image and mipmaps, and releases vector commands.</desc>
|
||||||
|
<defs>
|
||||||
|
<marker id="arrow" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto"><path d="M0 0L10 5L0 10Z" fill="#475569"/></marker>
|
||||||
|
<style>text{font-family:Segoe UI,Arial,sans-serif;fill:#172033}.title{font-size:30px;font-weight:700}.heading{font-size:22px;font-weight:700}.body{font-size:18px}.small{font-size:16px}.arrow{fill:none;stroke:#475569;stroke-width:3;marker-end:url(#arrow)}</style>
|
||||||
|
</defs>
|
||||||
|
<rect width="1200" height="640" rx="16" fill="#f8fafc"/>
|
||||||
|
<text x="40" y="53" class="title">Prepare a material once. Reuse it as the camera moves.</text>
|
||||||
|
<text x="40" y="86" class="body">Only visible, committed patterned scenery requests a cached material.</text>
|
||||||
|
|
||||||
|
<rect x="40" y="140" width="250" height="126" rx="12" fill="#eff6ff" stroke="#2563eb" stroke-width="2"/>
|
||||||
|
<text x="60" y="177" class="heading">Visible surface</text>
|
||||||
|
<text x="60" y="210" class="body">Finish + tint</text>
|
||||||
|
<text x="60" y="239" class="small">Example: blue brick</text>
|
||||||
|
<path d="M292 203H370" class="arrow"/>
|
||||||
|
|
||||||
|
<rect x="390" y="140" width="260" height="126" rx="12" fill="#eff6ff" stroke="#2563eb" stroke-width="2"/>
|
||||||
|
<text x="410" y="177" class="heading">Scene style cache</text>
|
||||||
|
<text x="410" y="210" class="body">Already have this image?</text>
|
||||||
|
<text x="410" y="239" class="small">Shared by all matching surfaces</text>
|
||||||
|
<path d="M652 203H740" class="arrow"/>
|
||||||
|
<text x="674" y="182" class="small">Hit</text>
|
||||||
|
|
||||||
|
<rect x="760" y="140" width="400" height="126" rx="12" fill="#ecfdf5" stroke="#0f766e" stroke-width="2"/>
|
||||||
|
<text x="782" y="177" class="heading">GPU draws the visible rectangle</text>
|
||||||
|
<text x="782" y="210" class="body">Repeat texture + sample its mipmaps</text>
|
||||||
|
<text x="782" y="239" class="small">Pan / zoom updates sampling coordinates</text>
|
||||||
|
|
||||||
|
<path d="M520 268V324" class="arrow"/>
|
||||||
|
<text x="540" y="304" class="small">Miss: prepare this style</text>
|
||||||
|
<rect x="390" y="344" width="260" height="158" rx="12" fill="#f5f3ff" stroke="#7c3aed" stroke-width="2"/>
|
||||||
|
<text x="410" y="379" class="heading">One temporary baker</text>
|
||||||
|
<text x="410" y="412" class="body">Draw one pattern period</text>
|
||||||
|
<text x="410" y="441" class="body">Wait for GPU; capture image</text>
|
||||||
|
<text x="410" y="476" class="small">Then clear vector commands</text>
|
||||||
|
<path d="M652 423H740" class="arrow"/>
|
||||||
|
|
||||||
|
<rect x="760" y="344" width="400" height="158" rx="12" fill="#f5f3ff" stroke="#7c3aed" stroke-width="2"/>
|
||||||
|
<text x="782" y="379" class="heading">Store the reusable texture</text>
|
||||||
|
<text x="782" y="412" class="body">Crop overscan; generate mipmaps</text>
|
||||||
|
<text x="782" y="441" class="body">Keep the image, not the vector artwork</text>
|
||||||
|
<text x="782" y="476" class="small">Ready styles stay warm within the cache budget</text>
|
||||||
|
<path d="M960 342V282" class="arrow"/>
|
||||||
|
<text x="980" y="309" class="small">Ready</text>
|
||||||
|
|
||||||
|
<rect x="40" y="548" width="540" height="56" rx="10" fill="#dbeafe"/>
|
||||||
|
<text x="59" y="582" class="body">Blue route: reuse during ordinary pan and zoom</text>
|
||||||
|
<rect x="604" y="548" width="556" height="56" rx="10" fill="#ede9fe"/>
|
||||||
|
<text x="623" y="582" class="body">Purple route: bake only when a style is missing</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.6 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="650" viewBox="0 0 1200 650" role="img" aria-labelledby="title desc">
|
||||||
|
<title id="title">Many wall rectangles share one material image</title>
|
||||||
|
<desc id="desc">One blue-brick image supplies Wall A, Wall B, and an erased fragment. Different sizes, positions, and camera views do not create more images. A different tint or finish is a different cached style.</desc>
|
||||||
|
<defs>
|
||||||
|
<pattern id="brick" width="64" height="40" patternUnits="userSpaceOnUse">
|
||||||
|
<rect width="64" height="40" fill="#d2cbaf"/>
|
||||||
|
<g><rect x="2" y="2" width="28" height="15" fill="#25b8df"/><rect x="34" y="2" width="28" height="15" fill="#39c7ee"/><rect x="-14" y="22" width="28" height="15" fill="#32c2e8"/><rect x="18" y="22" width="28" height="15" fill="#21b4da"/><rect x="50" y="22" width="28" height="15" fill="#32c2e8"/></g>
|
||||||
|
</pattern>
|
||||||
|
<marker id="arrow" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto"><path d="M0 0L10 5L0 10Z" fill="#2563eb"/></marker>
|
||||||
|
<style>text{font-family:Segoe UI,Arial,sans-serif;fill:#172033}.title{font-size:30px;font-weight:700}.heading{font-size:22px;font-weight:700}.body{font-size:18px}.small{font-size:16px}.arrow{fill:none;stroke:#2563eb;stroke-width:3;marker-end:url(#arrow)}</style>
|
||||||
|
</defs>
|
||||||
|
<rect width="1200" height="650" rx="16" fill="#f8fafc"/>
|
||||||
|
<text x="40" y="53" class="title">Wall area can grow. The number of style images stays the same.</text>
|
||||||
|
<text x="40" y="86" class="body">Position, wall size, camera position and zoom are not part of the style key.</text>
|
||||||
|
|
||||||
|
<rect x="400" y="117" width="400" height="163" rx="12" fill="#eff6ff" stroke="#2563eb" stroke-width="2"/>
|
||||||
|
<rect x="420" y="140" width="160" height="112" fill="url(#brick)" stroke="#94a3b8"/>
|
||||||
|
<text x="602" y="162" class="heading">One shared image</text>
|
||||||
|
<text x="602" y="194" class="body">Blue brick</text>
|
||||||
|
<text x="602" y="224" class="small">Varied brick faces</text>
|
||||||
|
<text x="602" y="250" class="small">Repeats both ways</text>
|
||||||
|
<path d="M600 282V311H210V341" class="arrow"/>
|
||||||
|
<path d="M600 311V341" class="arrow"/>
|
||||||
|
<path d="M600 311H990V341" class="arrow"/>
|
||||||
|
|
||||||
|
<rect x="40" y="360" width="340" height="192" rx="12" fill="#fff" stroke="#cbd5e1" stroke-width="2"/>
|
||||||
|
<text x="62" y="396" class="heading">Wall A</text>
|
||||||
|
<rect x="62" y="416" width="296" height="103" fill="url(#brick)"/>
|
||||||
|
|
||||||
|
<rect x="430" y="360" width="340" height="192" rx="12" fill="#fff" stroke="#cbd5e1" stroke-width="2"/>
|
||||||
|
<text x="452" y="396" class="heading">Wall B</text>
|
||||||
|
<rect x="452" y="416" width="190" height="103" fill="url(#brick)"/>
|
||||||
|
<text x="659" y="455" class="small">Same</text>
|
||||||
|
<text x="659" y="480" class="small">style</text>
|
||||||
|
|
||||||
|
<rect x="820" y="360" width="340" height="192" rx="12" fill="#fff" stroke="#cbd5e1" stroke-width="2"/>
|
||||||
|
<text x="842" y="396" class="heading">Erased fragment</text>
|
||||||
|
<rect x="842" y="416" width="90" height="103" fill="url(#brick)"/>
|
||||||
|
<text x="952" y="455" class="small">Only the visible</text>
|
||||||
|
<text x="952" y="480" class="small">rectangle changes</text>
|
||||||
|
|
||||||
|
<text x="40" y="591" class="body">A different finish or tint is a separate style. A matching warm style reuses the existing image.</text>
|
||||||
|
<text x="40" y="621" class="small" fill="#64748b">Patterns shown here are schematic; the actual brick image contains 8 columns × 8 rows of varied artwork.</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.3 KiB |
@@ -0,0 +1,42 @@
|
|||||||
|
# Scenery surface caching
|
||||||
|
|
||||||
|
`StageRectSurface` renders committed patterned scenery through reusable texture tiles.
|
||||||
|
Drawing previews use the adaptive lightweight renderer. Paint remains a single rectangle.
|
||||||
|
|
||||||
|
## Camera movement
|
||||||
|
|
||||||
|
Tiles use a fixed grid in the surface's local coordinates. Texture resolution changes in
|
||||||
|
powers of two, so adjacent wheel steps reuse existing tiles. Panning requests only newly
|
||||||
|
exposed tiles. Existing textures stay visible while missing tiles are prepared, with a
|
||||||
|
lightweight surface motif beneath them to prevent blank areas.
|
||||||
|
|
||||||
|
`StageSurfaceCache` keeps queued tiles as metadata. A shared queue creates and renders at
|
||||||
|
most one tile per process frame across all surfaces. It also retires at most two obsolete
|
||||||
|
render targets per frame. This avoids large allocations, vector rebuilds, and batches of
|
||||||
|
GPU resource releases during camera input.
|
||||||
|
|
||||||
|
Each tile has a 256 × 128 pixel core and a four pixel gutter. The gutter is cropped during
|
||||||
|
compositing to prevent seams. Each surface requests at most 192 visible tiles and retains
|
||||||
|
at most 224 tiles, evicting older unused entries. Half-resolution tiles retain full brick
|
||||||
|
texture and wood grain. Only quarter-resolution tiles and below omit fine texture, for
|
||||||
|
distant views. Brick and plank positions remain fixed. Detail can fill in progressively
|
||||||
|
after movement, including when returning from a distant view to a normal zoom level.
|
||||||
|
|
||||||
|
## Invalidation and coverage
|
||||||
|
|
||||||
|
Geometry, finish, tint, and motif-origin changes invalidate that surface's tiles. Camera
|
||||||
|
movement selects tiles without invalidating their artwork. Render targets belong to the
|
||||||
|
surface node; queued references are weak so deleted surfaces cannot keep jobs alive.
|
||||||
|
|
||||||
|
Fully opaque rectangular sibling surfaces can suppress artwork entirely hidden behind
|
||||||
|
them. Coverage checks account for transforms, draw order, and visibility. Transparent
|
||||||
|
surfaces, custom materials, differing relative-Z conventions, and Y-sorted parents disable
|
||||||
|
this optimization conservatively. Revealing a surface resumes its pending tiles.
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
`tests/test_scenery_surface_cache.gd` checks rendered appearance against the direct vector
|
||||||
|
renderer, tile reuse and invalidation, the shared build limit, allocation and retention
|
||||||
|
bounds, and covered-surface behavior. Run it with a graphical Godot renderer for pixel
|
||||||
|
comparisons. The adaptive preview regressions remain in
|
||||||
|
`tests/test_scenery_surface_preview.gd` and `tests/test_scenery_brick_preview.gd`.
|
||||||
@@ -21,7 +21,7 @@ This document tracks known technical debt, optimization opportunities, and minor
|
|||||||
| 9 | **Animation Generation DRY** — `create_walk.gd` is a standalone script. It should be merged into a unified `create_animations.gd` that also generates `stand_up` and idle animations. | Medium | ✅ Resolved | Phase 11: `create_walk.gd` deleted; new `scripts/tools/create_animations.gd` (`@tool extends EditorScript`) bakes `walk_left`/`walk_right` (same keyframes) and a one‑shot `stand_up` into the scene's `AnimationLibrary` (the baked `stand_up` is an authored reference only — runtime recovery tweens the IK targets directly). (2026‑08‑27) |
|
| 9 | **Animation Generation DRY** — `create_walk.gd` is a standalone script. It should be merged into a unified `create_animations.gd` that also generates `stand_up` and idle animations. | Medium | ✅ Resolved | Phase 11: `create_walk.gd` deleted; new `scripts/tools/create_animations.gd` (`@tool extends EditorScript`) bakes `walk_left`/`walk_right` (same keyframes) and a one‑shot `stand_up` into the scene's `AnimationLibrary` (the baked `stand_up` is an authored reference only — runtime recovery tweens the IK targets directly). (2026‑08‑27) |
|
||||||
| 10 | **Rig Collision Proxy Re‑addition** — The proxy is re‑added on ragdoll exit, but may cause a brief visual pop if it appears while the kinematic rig is visible. | Low | Open | Phase 11 still re‑adds the proxy as soon as `RECOVERING` begins (`state_changed` handler), while `Body/*` is already visible — the static box can pop in around the standing figure before the stand‑up completes. Consider delaying re‑addition until after recovery finishes (`ANIMATED`). (2026‑08‑27) |
|
| 10 | **Rig Collision Proxy Re‑addition** — The proxy is re‑added on ragdoll exit, but may cause a brief visual pop if it appears while the kinematic rig is visible. | Low | Open | Phase 11 still re‑adds the proxy as soon as `RECOVERING` begins (`state_changed` handler), while `Body/*` is already visible — the static box can pop in around the standing figure before the stand‑up completes. Consider delaying re‑addition until after recovery finishes (`ANIMATED`). (2026‑08‑27) |
|
||||||
| 11 | **Stage Freeze Abstraction** — Sandbox Stage EDIT‑mode freezing is type‑specific: `RigidBody2D.freeze_mode = FREEZE_MODE_KINEMATIC` for props, `StickmanRig.set_ragdoll(false)` for stickmen, nothing for `StaticBody2D` terrain. There is no unified "freeze" abstraction over the mixed physics population. | Low | Open | A future physics type (e.g. `Area2D`‑based sensors) will need another case in `scripts/editors/stage/sandbox_stage.gd` `_enter_edit_mode()` / `_enter_play_mode()`. Consider a duck‑typed `set_simulating(bool)` interface once more physical object kinds appear. (2026‑08‑27) |
|
| 11 | **Stage Freeze Abstraction** — Sandbox Stage EDIT‑mode freezing is type‑specific: `RigidBody2D.freeze_mode = FREEZE_MODE_KINEMATIC` for props, `StickmanRig.set_ragdoll(false)` for stickmen, nothing for `StaticBody2D` terrain. There is no unified "freeze" abstraction over the mixed physics population. | Low | Open | A future physics type (e.g. `Area2D`‑based sensors) will need another case in `scripts/editors/stage/sandbox_stage.gd` `_enter_edit_mode()` / `_enter_play_mode()`. Consider a duck‑typed `set_simulating(bool)` interface once more physical object kinds appear. (2026‑08‑27) |
|
||||||
| 12 | **Stage AABB Selection Precision** — `StageSelection.get_world_aabb` uses conservative world‑space AABBs (polygon point union / fixed rig rect), not point‑in‑polygon. | Low | Open | Clicks in the bounding‑box corners of large or rotated terrain may select a block even outside its polygon, and overlapping blocks can mis‑select. Refine with `Geometry2D.is_point_in_polygon()` for `TerrainBlock`/`PropBlock` polygons (and circle distance for ball props) once selection precision matters. (2026‑08‑27) |
|
| 12 | **Stage AABB Selection Precision** — `StageSelection.get_world_aabb` uses conservative world‑space AABBs (polygon point union / fixed rig rect), not point‑in‑polygon. | Low | Open | Clicks in the bounding‑box corners of large or rotated terrain may select a block even outside its polygon, and overlapping blocks can mis‑select. Phase 20a specifies AABB broad phase plus visible-geometry narrow phase for characters and props, with a small screen-space line tolerance, to make overlapping-object choices match the clicked art. Terrain, scenery, and areas retain AABB selection in that bounded phase; keep this debt open until implementation and the remaining object types are reviewed. See `docs/specs/phase_20a_stage_identities_and_names.md`. (2026‑08‑27; spec update 2026-10-25) |
|
||||||
| 13 | **Slope-aware walking physics & dynamic obstacle avoidance (deferred)** — Phase 3a bakes a real navigation mesh (per-`TerrainBlock` polygon decomposition into a code-built `NavigationRegion2D`) and `walk_to` follows `NavigationAgent2D` paths, but the figure walks the path with an upright pose (no tilt to the slope, no physics sliding) and `avoidance_enabled = false`, so it can path through props and other stickmen. | Medium | Open | A stickman crossing a ramp/stair follows the sloped footprint but looks flat-footed, and does not avoid moving props or each other. Future: tilt/rotate the figure to the path slope and enable RVO avoidance (`avoidance_enabled`, avoidance layers, `velocity` handling) once content/props/other stickmen are registered as obstacles. (2026‑08‑29) |
|
| 13 | **Slope-aware walking physics & dynamic obstacle avoidance (deferred)** — Phase 3a bakes a real navigation mesh (per-`TerrainBlock` polygon decomposition into a code-built `NavigationRegion2D`) and `walk_to` follows `NavigationAgent2D` paths, but the figure walks the path with an upright pose (no tilt to the slope, no physics sliding) and `avoidance_enabled = false`, so it can path through props and other stickmen. | Medium | Open | A stickman crossing a ramp/stair follows the sloped footprint but looks flat-footed, and does not avoid moving props or each other. Future: tilt/rotate the figure to the path slope and enable RVO avoidance (`avoidance_enabled`, avoidance layers, `velocity` handling) once content/props/other stickmen are registered as obstacles. (2026‑08‑29) |
|
||||||
| 14 | **Phase 4 event engine is O(rigs×props + areas×movables) per physics frame** — `sandbox_stage.gd` `_update_area_entry()` / `_update_stickman_prop_collision()` run all-pairs geometric tests every physics frame in PLAY. | Low | Open | Fine at sandbox scale, but degrades quadratically with dozens of dynamic objects. A cell-keyed spatial broadphase (e.g. `_grid_cells`) can cull candidate pairs before the visible-AABB/feet-point tests. Phase 4b implemented that index (see #16, now Resolved) but the event engine does **not yet query it** — #14 remains Open until `_update_area_entry()` / `_update_stickman_prop_collision()` use it. (2026‑08‑30 / note updated 2026‑09‑02) |
|
| 14 | **Phase 4 event engine is O(rigs×props + areas×movables) per physics frame** — `sandbox_stage.gd` `_update_area_entry()` / `_update_stickman_prop_collision()` run all-pairs geometric tests every physics frame in PLAY. | Low | Open | Fine at sandbox scale, but degrades quadratically with dozens of dynamic objects. A cell-keyed spatial broadphase (e.g. `_grid_cells`) can cull candidate pairs before the visible-AABB/feet-point tests. Phase 4b implemented that index (see #16, now Resolved) but the event engine does **not yet query it** — #14 remains Open until `_update_area_entry()` / `_update_stickman_prop_collision()` use it. (2026‑08‑30 / note updated 2026‑09‑02) |
|
||||||
| 15 | **Walk arrival jitter (mode re-evaluated per frame + arrival-radius mismatch)** — `StickmanRig._update_walking()` re-computes `_walk_mode` from `is_target_reachable()` every physics frame, and finishes via `is_navigation_finished()` (`NAV_TARGET_DESIRED_DISTANCE` 12 px, feet-space) *or* the `ARRIVE_DISTANCE` 8 px root-space guard. Near the nav-mesh boundary (clicked waypoints often sit just off placed terrain) `is_target_reachable()` can flip, swapping `root_target` between the nav path point and the raw waypoint — two points with a small vertical offset → up/down jitter. | Medium | ✅ Resolved | Phase 4b: `StickmanRig._update_walking()` now **latches `_walk_mode` once per walk** (probes up to `LATCH_PROBE_MAX_FRAMES` = 6 after the map syncs, latching `"nav"` when reachable or `"direct"` on the bound) so it can never flip between frames, unifies arrival on the **final target** at `ARRIVE_DISTANCE` 8 px (snap-on-arrive), steers straight at the final target when within `2 × ARRIVE_DISTANCE`, and re-asserts the standing markers one extra physics frame after stop (`_settle_walk_markers()`) to clear any residual body-bob. Exactly one `arrive` fires; `global_position` is unchanged after arrival. See `docs/archive/plans/PHASE_4b_SPEC.md` §3. (2026-09-02) |
|
| 15 | **Walk arrival jitter (mode re-evaluated per frame + arrival-radius mismatch)** — `StickmanRig._update_walking()` re-computes `_walk_mode` from `is_target_reachable()` every physics frame, and finishes via `is_navigation_finished()` (`NAV_TARGET_DESIRED_DISTANCE` 12 px, feet-space) *or* the `ARRIVE_DISTANCE` 8 px root-space guard. Near the nav-mesh boundary (clicked waypoints often sit just off placed terrain) `is_target_reachable()` can flip, swapping `root_target` between the nav path point and the raw waypoint — two points with a small vertical offset → up/down jitter. | Medium | ✅ Resolved | Phase 4b: `StickmanRig._update_walking()` now **latches `_walk_mode` once per walk** (probes up to `LATCH_PROBE_MAX_FRAMES` = 6 after the map syncs, latching `"nav"` when reachable or `"direct"` on the bound) so it can never flip between frames, unifies arrival on the **final target** at `ARRIVE_DISTANCE` 8 px (snap-on-arrive), steers straight at the final target when within `2 × ARRIVE_DISTANCE`, and re-asserts the standing markers one extra physics frame after stop (`_settle_walk_markers()`) to clear any residual body-bob. Exactly one `arrive` fires; `global_position` is unchanged after arrival. See `docs/archive/plans/PHASE_4b_SPEC.md` §3. (2026-09-02) |
|
||||||
@@ -81,6 +81,21 @@ This document tracks known technical debt, optimization opportunities, and minor
|
|||||||
| 69 | **Contact entry alone can miss a stickman hitting a fixed prop** — grounded locomotion stops at a shape-sweep safe fraction, sometimes before `body_entered` fires; resting contacts can also chatter after pause or quick separation. | Medium | Implemented; user-verified; automated result undocumented | Phase 17c routes identified blocking-prop sweep hits and actual body contacts through one relative approach-speed scorer and pair gate. Multiple stickman limbs collapse into one rig/prop pair; separation/rearm and cooldown gates suppress repeat hits. The user has verified Phase 17c; no automated behavior verification result is documented. Keep existing collision-rule dispatch independent. See `docs/specs/phase_17c_impact_wobble.md`. (2026-10-14) |
|
| 69 | **Contact entry alone can miss a stickman hitting a fixed prop** — grounded locomotion stops at a shape-sweep safe fraction, sometimes before `body_entered` fires; resting contacts can also chatter after pause or quick separation. | Medium | Implemented; user-verified; automated result undocumented | Phase 17c routes identified blocking-prop sweep hits and actual body contacts through one relative approach-speed scorer and pair gate. Multiple stickman limbs collapse into one rig/prop pair; separation/rearm and cooldown gates suppress repeat hits. The user has verified Phase 17c; no automated behavior verification result is documented. Keep existing collision-rule dispatch independent. See `docs/specs/phase_17c_impact_wobble.md`. (2026-10-14) |
|
||||||
| 70 | **Impact strength is initially speed based while prop mass is preset based** — material presets set `RigidBody2D.mass`, but fixed props are frozen and mass is not a child-facing setting. | Low | Implemented; future design | Phase 17c keeps the Wobble boolean and visual-only response independent of mass. Impact scoring is centralized in `StageImpactResolver` so a future editable-mass or impulse design can be evaluated without altering the Stage switch or migrating old scene choices. Do not infer a physical impulse from a frozen prop's preset mass; verify any future mass effect separately. See `docs/specs/phase_17c_impact_wobble.md`. (2026-10-14) |
|
| 70 | **Impact strength is initially speed based while prop mass is preset based** — material presets set `RigidBody2D.mass`, but fixed props are frozen and mass is not a child-facing setting. | Low | Implemented; future design | Phase 17c keeps the Wobble boolean and visual-only response independent of mass. Impact scoring is centralized in `StageImpactResolver` so a future editable-mass or impulse design can be evaluated without altering the Stage switch or migrating old scene choices. Do not infer a physical impulse from a frozen prop's preset mass; verify any future mass effect separately. See `docs/specs/phase_17c_impact_wobble.md`. (2026-10-14) |
|
||||||
| 71 | **Palette art is supplied at much higher resolution than its display size** — six 1254 × 1254 PNGs appear in 64 × 64 card image areas. | Low | ✅ Resolved | Phase 18 is implemented and user-verified. The original source PNGs remain 1254 × 1254, Godot imports are capped at 256 px, and `StageChrome` maps the six images by placement ID. The focused palette suite passed; the headless Sandbox Stage loaded, and `git diff --check` passed. Keep the map local to the fixed Stage palette; revisit a data-driven icon descriptor only if tools or themed art become extensible. See `docs/specs/phase_18_palette_icons.md`. (2026-10-14) |
|
| 71 | **Palette art is supplied at much higher resolution than its display size** — six 1254 × 1254 PNGs appear in 64 × 64 card image areas. | Low | ✅ Resolved | Phase 18 is implemented and user-verified. The original source PNGs remain 1254 × 1254, Godot imports are capped at 256 px, and `StageChrome` maps the six images by placement ID. The focused palette suite passed; the headless Sandbox Stage loaded, and `git diff --check` passed. Keep the map local to the fixed Stage palette; revisit a data-driven icon descriptor only if tools or themed art become extensible. See `docs/specs/phase_18_palette_icons.md`. (2026-10-14) |
|
||||||
|
| 72 | **Stage-wide Undo/Redo needs its own phase** — Phase 19 placement, erase, style, repair, selected-artwork depth, direct single-piece moves/resizes, and group Keep actions change the document without an integrated command history. | Medium | Deferred to separate phase | Design one Stage-level history with coherent commands across Scenery, Ground, Props, terrain, characters, scene naming, and directed content, with safe boundaries around PLAY/paused edits and save/recovery. The Phase 19 sizing amendment keeps single-piece gestures commit-on-release with cancellable active snapshots and retains group Keep/Cancel; neither is an Undo implementation or shortcut. Selected-artwork depth choices also commit immediately. User explicitly deferred Stage Undo/Redo to its own phase. See `docs/specs/phase_19_scenery_backgrounds_surface_finishes.md` and `docs/specs/phase_19_selected_artwork_depth_inspector.md`. (2026-10-17) |
|
||||||
|
| 73 | **Whole-set transform requires cross-system invariants** — Phase 19's temporary group transform covers only inert Scenery pieces: wall panels, artwork, and the planned Background ground. | Medium | Future feature | Moving/scaling walkable Ground, characters, interactive Props, Sky, camera composition, waypoints, and rules together needs separate physics, navigation, event-target, and save contracts. Do not expand the Scenery group tool into a whole-set transform without that design. See `docs/specs/phase_19_scenery_backgrounds_surface_finishes.md` and `docs/specs/phase_19_background_ground_and_wall_color.md`. (2026-10-17) |
|
||||||
|
| 74 | **Background surface motifs need a shared zoom-consistent draw budget** — a pattern detail scale derived from each panel's size can shift seams or texture density where adjacent pieces meet, while uncapped large rectangles can issue excessive draw calls. | Medium | Planned | Phase 19 follow-up uses world-cell coordinates, visible-region culling, and any level-of-detail choice derived from camera zoom for all pieces in the same view. Keep Grass/Concrete/Carpet detail deterministic and bounded; consider a texture cache only if measured scenes remain expensive. See `docs/specs/phase_19_background_ground_and_wall_color.md`. (2026-10-17) |
|
||||||
|
| 75 | **Old Brick/Wood wall colors were saved but not rendered** — v1.5 walls can carry the old default green while their brick and wood palettes were hard-coded. | Low | Planned migration | Scene v1.6 migration replaces only the old green placeholder on pre-v1.6 Brick/Wood entries with natural finish defaults; Paint and non-placeholder colors remain. The exact placeholder could have been intentionally authored in an older file, which cannot be distinguished retrospectively. New v1.6 colors are authoritative, including green Brick/Wood. See `docs/specs/phase_19_background_ground_and_wall_color.md`. (2026-10-17) |
|
||||||
|
| 76 | **Camera-aware Sky redraws vector motifs while framing changes** — the former static Sky drew motifs only when the preset or viewport changed. | Low | Planned | The Phase 19 Sky addition keeps one screen-space `StageSkyView`, redraws only when a bound camera's effective framing changes, and caches reusable cloud/moon curve samples where practical. Measure sustained pan/zoom cost in a rendered Stage before adding a raster or shader path. The fixed reference frame and bounded response can saturate at distant camera positions; that is an accepted composition trade-off, not scene state to persist. See `docs/specs/phase_19_scenery_backgrounds_surface_finishes.md#phase-19-addition-camera-aware-sky-details`. (2026-10-21) |
|
||||||
|
| 77 | **Starter surfaces guarantee a finite pan envelope, not arbitrary camera framing** — the two bundled sets use a fixed authored width to keep their scene data simple. | Low | Implemented; visual review pending | The authored envelope is a 1,280-logical-pixel viewport at zoom 0.5, ±1,000 world units of travel, and 100 units of margin per side. User review prompted an opaque Town Grass Background ground and separate scale-1 tile rows. Twenty-five 192-unit tiles cover the 4,760-unit minimum; Asphalt has 27 tiles (5,184 units) so the road extends one tile beyond the sidewalk at both ends. Navigation merges contiguous tile tops and routes the 32-unit curb step at the exposed ends without merging Ground objects or colliders. The focused suite passes 515 assertions, including the curb step and PLAY landing. The camera remains unrestricted, so wider viewports, farther pans, and zoomed-out shots can reveal finite ends. Rendered seam review remains pending. See docs/specs/phase_19_starter_scene_composition.md. (2026-10-21)
|
||||||
|
| 78 | **Plain Background adds a second backdrop kind while Sky remains a separate renderer** — live Stage, starter previews, and chooser cards must agree on kind and remembered color. | Medium | Spec prepared; implementation pending | Phase 19 composes one shared `StageBackgroundView` from the existing Sky view and an opaque fill. Scene v1.7 stores active kind, last Sky ID, and confirmed plain color; all older scenes migrate as Sky. `SandboxStage` owns the transient custom-picker draft, which must never enter Save or autosave. The existing chooser's four-Sky layout and 42 px compact swatches need targeted extension, and grid/gizmo contrast needs theme-backed treatment for light and dark fills. Rendered pan/zoom/resize, legacy migration, and every draft-cancel exit remain verification gates. See `docs/specs/phase_19_plain_background.md`. (2026-10-22) |
|
||||||
|
| 79 | **Editor chrome has two existing token sources and scene-level literals** — PropTheme owns current Prop UI values while Stickman scenes hardcode bars, labels, and borders. | Medium | Spec prepared; implementation pending | Add one validated `EditorVisualTheme` source for shared semantic chrome and editor-local `Theme` instances. Retain PropTheme for prop material/primitive/canvas values and keep Stickman canvas drawing tokens in a separate namespace. Migrate legacy Prop `ui` accessors deliberately so a chrome role has one final authority; use SandboxTheme values as a visual reference without a runtime dependency or Stage inspector component reuse. See `docs/specs/editor_visual_harmonization.md`. (2026-10-23) |
|
||||||
|
| 80 | **Stickman panel nodes currently own both document shapes and local view state** — rebuilding a panel for a focused layout would reset selection, zoom, and pan and risk save/preview drift. | Medium | Spec prepared; implementation pending | Move the same ten BodyPartPanel instances between Overview and Focus hosts, retain one permanent WholeStickmanPreview sibling, and defer switching while a drag or popup is active. The controller owns session-only view choice and active part; manually chosen views survive resize, and narrow Overview remains scrollable. A future document-model extraction is warranted only if new editor features make live-node ownership limiting. See `docs/specs/editor_visual_harmonization.md`. (2026-10-23) |
|
||||||
|
| 81 | **Stickman authored transforms lack a complete dirty-state boundary** — preview translation emits `part_moved`, while rotation and scale currently have no commit signal; Save/Load/Clear do not track unsaved work. | Medium | Spec prepared; implementation pending | Add a controller-observable transform commit path for position, rotation, and scale, plus `_dirty`/`_current_path` and Save/Discard Changes/Cancel transactions for replacement and close. Keep Overview/Focus, guide, grid, selection, and zoom/pan as session UI state that never marks dirty. Preserve the `.stk` format. See `docs/specs/editor_visual_harmonization.md`. (2026-10-23) |
|
||||||
|
| 82 | **Phase 20a introduces persistent stage identity alongside temporary save IDs** — props already use persistent `stage_object_id`, while stickmen currently depend on runtime instance IDs and each save regenerates `file_id` by World order. | Medium | Spec prepared; implementation pending | Keep `file_id` for the current rule remap, retain existing prop IDs, and add a persistent character ID plus scene-unique display names independent of assets. Migrate legacy character IDs deterministically from their pre-migration `file_id`; preserve IDs and names through missing-asset placeholders. A scene-scoped World scan for name allocation is simpler than a mutable registry at current scene sizes. Phase 20b–20e may consume these IDs for authored links; this spec does not implement those links. See `docs/specs/phase_20a_stage_identities_and_names.md`. (2026-10-25) |
|
||||||
|
| 83 | **Phase 20b needs persistent action identity and a plan migration across flat queue callers** — current integer IDs regenerate at load/PLAY, and flat encoders strip unknown action fields. | High | Spec prepared; implementation pending | Save v1.9 nested steps and scene-unique string action IDs; derive deterministic IDs from actor ID and flat index for older scenes. Keep IDs across edit/reorder/regroup/retarget, regenerate on actor duplication, and validate current-format collisions before World apply. Adapt queue/editor/visual/rule callers through typed plan APIs and a derived flat compatibility view; never persist session integer IDs or use stage names as keys. The v1.8 `speak.keep_acting` overlap may require a narrow legacy-only execution flag when it cannot become a compatible Move/Wait+Say step. See `docs/specs/phase_20b_action_plans_and_direct_authoring.md`. (2026-10-26) |
|
||||||
|
| 84 | **Live named-prop pursuit can churn navigation or finish at a stale point** — a rigid prop can translate and spin while an authored Move runs. | Medium | Spec prepared; tuning pending | Store a world-aligned offset from the stable prop ID, retarget only for meaningful translation without restarting gait, and cap unpaused pursuit time. Check both current approach arrival and live prop reach before success; a missing target, blocked route, invalid projection, or timeout fails and emits no reached-endpoint event. Initial 16-unit/0.1-second retarget and 12-second budget values are tuning candidates for repeatable behavior and rendered checks, not permanent schema fields. Future Follow has a separate continuing stop contract. See `docs/specs/phase_20b_action_plans_and_direct_authoring.md`. (2026-10-26) |
|
||||||
|
| 85 | **A just-set-down prop can be bumped by the releasing stickman during the next queued move** — the actor may still be beside the new placement when the following action begins. | Low | Implemented; 57 focused runtime checks pass | Set Down alone adds a temporary collision exception for the releasing rig, and that rig's movement sweep skips the prop until its collision shapes remain clear by 24 px for two physics frames. Keep the authored released flags, support contact, and all other actors' contacts unchanged; Drop, Throw, and ragdoll release receive no grace. This deliberately revises Phase 17a's earlier no-owner-grace rule to protect the immediate Set Down → Move sequence. See `docs/specs/phase_17a_prop_roles.md`. (2026-11-02) |
|
||||||
|
| 86 | **A stickman can bump a reserved pickup target while approaching it** — normal collision handling can move the prop before the reach completes. | Low | Implemented; 68 focused runtime checks pass | Keep a pair-specific exception for the reserving actor and target throughout approach/reach. Successful pickup clears it through the HELD collision profile; cancel/failure changes it to clearance grace. The target retains support and contact with every other actor and prop. See `docs/specs/phase_17a_prop_roles.md`. (2026-11-02) |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -169,5 +184,27 @@ This document tracks known technical debt, optimization opportunities, and minor
|
|||||||
| 2026-10-14 | Phase 17c Impact wobble implementation is present against the approved UI and architecture contracts. The prop card has a per-placement switch and EDIT sample; PLAY routes contacts and identified blocking sweeps through the approach-speed resolver, including ragdoll and prop pairs, while wobbling artwork only. Scene v1.4 stores the setting and migrates older scenes to Off; STOP/reset clears transient motion. Automated behavior verification and in-editor user verification have not been completed. Updated #69–#70; mass-aware scoring remains a future design seam. |
|
| 2026-10-14 | Phase 17c Impact wobble implementation is present against the approved UI and architecture contracts. The prop card has a per-placement switch and EDIT sample; PLAY routes contacts and identified blocking sweeps through the approach-speed resolver, including ragdoll and prop pairs, while wobbling artwork only. Scene v1.4 stores the setting and migrates older scenes to Off; STOP/reset clears transient motion. Automated behavior verification and in-editor user verification have not been completed. Updated #69–#70; mass-aware scoring remains a future design seam. |
|
||||||
| 2026-10-14 | User verified Phase 17c Impact wobble. Updated #69 and the Phase 17 plan; no automated behavior verification result was supplied. |
|
| 2026-10-14 | User verified Phase 17c Impact wobble. Updated #69 and the Phase 17 plan; no automated behavior verification result was supplied. |
|
||||||
| 2026-10-14 | Phase 18 palette image icons implemented and user-verified (`docs/specs/phase_18_palette_icons.md`). `StageChrome` maps the six palette placement IDs to preloaded images; the three plural filenames are now singular, original 1254 × 1254 PNGs are preserved, and Godot imports are capped at 256 px for display in the existing 64 × 64 card areas. The focused palette suite passed, the headless Sandbox Stage loaded, and `git diff --check` passed. Godot import exited 0 with Windows certificate-store and global editor-settings warnings. User verified the palette appearance and placement behavior in the Editor; #71 is resolved. |
|
| 2026-10-14 | Phase 18 palette image icons implemented and user-verified (`docs/specs/phase_18_palette_icons.md`). `StageChrome` maps the six palette placement IDs to preloaded images; the three plural filenames are now singular, original 1254 × 1254 PNGs are preserved, and Godot imports are capped at 256 px for display in the existing 64 × 64 card areas. The focused palette suite passed, the headless Sandbox Stage loaded, and `git diff --check` passed. Godot import exited 0 with Windows certificate-store and global editor-settings warnings. User verified the palette appearance and placement behavior in the Editor; #71 is resolved. |
|
||||||
|
| 2026-10-15 | Phase 19 architecture specification drafted for final user sign-off (`docs/specs/phase_19_scenery_backgrounds_surface_finishes.md`) after approval of live `.prop` references with a repairable missing-art placement, adaptive viewport Sky, and a Stage-hosted Prop Editor route. The design adds inert wall/artwork nodes, vector finishes, scene v1.5 migration, `.prop` v1.1 tags, Scenery-only selection and snapshot group transforms, shared Stage UI generalizations, and ordinary editable starter scenes. Logged #72 for a separate Stage Undo/Redo phase and #73 for a separately designed whole-set transform. No runtime code or assets changed. |
|
||||||
|
| 2026-10-16 | Added the Phase 19 Stage-relative sizing architecture amendment to `docs/specs/phase_19_scenery_backgrounds_surface_finishes.md` for final sign-off. Prop Editor Size for Stage uses a reversible snapshot, longest-edge presets of 0.35/1/2 standing-stickman heights, origin-based uniform geometry/stroke/editable-anchor scaling, and an editor-only foreground figure/floor comparison. A selected Scenery piece uses its own snapshot transaction and commits on release; a group still uses Keep/Cancel. Existing `.scene` v1.5 placement scale and `.prop` v1.1 geometry need no schema change or load-time normalization. Explicit Save at an existing `.prop` path retains live-reference updates for all users of that source; no asset-version enforcement or new save prompt was requested. Updated #72 for the deferred Stage Undo boundary. The amendment needs no new art and Phase 19 user/editor verification remains pending. No runtime code changed by this specification entry. |
|
||||||
|
| 2026-10-17 | Wrote the Phase 19 selected-artwork depth inspector specification (`docs/specs/phase_19_selected_artwork_depth_inspector.md`) for final sign-off. It reuses the existing `StageInspectorPanel` and `StagePanelChoiceGroup`, applies Far/Near/On the floor immediately to one live or missing Scenery placement through `StageSceneryArtwork.set_depth()`, and follows the Stage's existing dirty/save path. The current `.scene` depth field, `StageDrawOrder`, and `stage_panels` tokens need no changes. Updated #72 to include immediate depth edits in a future Stage-wide Undo phase. No runtime code changed by this specification entry. |
|
||||||
|
| 2026-10-17 | Wrote the Phase 19 Background ground and wall color architecture specification (`docs/specs/phase_19_background_ground_and_wall_color.md`) for final sign-off. It defines distinct inert wall/backdrop scene types over a small shared rectangle contract, world-aligned bounded vector materials, selected-piece color preview without mutating saved tint, one eight-color Stage settings list, scene v1.6 migration of old Brick/Wood placeholder green, shared Stage inspector controls, and confirmed single-piece backdrop erasure. Logged #74 for zoom-consistent motif budgets and #75 for the old unused wall-color ambiguity. No runtime code changed. |
|
||||||
|
|
||||||
|
| 2026-10-20 | Approved the scenery bitmap tile cache architecture (`docs/specs/scenery_bitmap_tile_cache.md`). Lightweight `StageSurfaceCache` handles share immutable bitmap tiles through one `StageSurfaceBakePool` under the current scene, with a 64 MiB resident bitmap budget and one reusable offscreen baker. Camera-visible tiles use four fixed zoom levels (0.125, 0.5, 1, 2); the coarsest tile bakes first and refined detail overlays it. At maximum 6× zoom, the 2× bitmap may look softer because it is magnified threefold. Erased fragments clip shared tiles only when their complete pattern sampling phase matches. The previous per-surface viewport cache retained vector commands and had no scene-wide resource limit, a likely contributor to `Element limit reached`; the exact RID pool remains unconfirmed. GPU readback during bitmap capture and regeneration after budget eviction are accepted costs to measure during implementation. |
|
||||||
|
|
||||||
|
| 2026-10-20 | Replaced the positional scenery tile design after the user observed continuous buffering when panning after zoom. The accepted revision in `docs/specs/scenery_bitmap_tile_cache.md` bakes one seamless, 2× bitmap per finish/tint period and uses GPU repeat plus generated mipmaps for all camera positions and zooms. Erased fragments share the style texture and crop it using their existing sample coordinate. The scene-wide 64 MiB limit includes mipmaps; inactive style variants may be evicted, while recently used styles stay warm when space allows. This trades unique random detail across an unlimited wall for finite repeated variation and keeps the existing possible 3× bitmap enlargement at maximum zoom. A style change can bake once; repeated camera movement must not increment build or readback counts after styles are ready. |
|
||||||
|
| 2026-10-21 | Drafted the camera-aware Sky architecture addendum in `docs/specs/phase_19_scenery_backgrounds_surface_finishes.md` for user sign-off. Accepted a fixed built-in camera reference, one bounded response profile per preset, and normalized motif anchors with uniform scaling. The gradient remains a full-screen `CanvasLayer` draw; motifs derive deterministic bounded pan/zoom response from absolute `Camera2D` framing. Chooser and starter previews stay unbound and still; existing Sky/camera scene fields suffice. The trade-offs are response saturation far from the reference and more frequent vector redraws during camera movement; logged #76 for measured performance follow-up. No runtime code or tests changed. |
|
||||||
|
| 2026-10-21 | Wrote the Phase 19 starter-scene composition UI/UX and architecture specifications (`docs/specs/phase_19_starter_scene_composition_ui_ux.md`, `docs/specs/phase_19_starter_scene_composition.md`) after approval of the Everyday Storybook brief and the 1,280-pixel / ±1,000-world-unit pan defaults. The edited starter snapshots use current scene v1.6 and existing Ground, wall, Background ground, Scenery, and Prop types, and keep the camera unrestricted; the starter card derives a central opening preview without new scene metadata. No code or art changed. Added #77 for the finite authored-envelope and broad-selection trade-off; the architecture spec is approved and implementation/agent verification are underway.
|
||||||
|
| 2026-10-21 | Implemented the approved starter-scene composition spec. Town Street and Living Room now use continuous 4,760-unit support surfaces, aligned bases, and camera-derived starter-card framing; both edited scene files use current v1.6. The focused production-load/save-reopen/PLAY composition test passed 177 assertions, with measured visible-contact geometry within 0.225 logical pixels. The broader scenery suite exits 1 on nine other background-card and wall-erasure/capture-bar assertions, while the new surface assertions pass. GUI capture exited 134 and headless capture produced no image, so rendered-pixel checks, pan-endpoint seam inspection, narrow viewport/zoom-in framing, and user/editor verification remain pending. Updated #77 from planned to implemented with the finite-camera limitation accepted. See `docs/specs/phase_19_starter_scene_composition.md`.
|
||||||
|
| 2026-10-21 | Revised the starters after the user's Town Street screenshot exposed Sky clouds below the skyline and the user rejected oversized scaled Ground blocks. Added an opaque Grass Background ground, replaced the sidewalk and both starter floors with scale-1 tile rows, and extended Asphalt by one tile at each end so the road is accessible. The focused production-path test passed 515 assertions, including navigation across tile seams, sidewalk-to-road routing, and a PLAY actor landing grounded on Asphalt. The broader scenery suite still exits 1 on the same nine Sky-preview/gallery and Scenery-edit UI assertions observed before this revision; its new surface assertions pass. A bounded GUI capture exited 134 without an image, so rendered pixels, pan endpoints, card previews, narrow viewport/zoom-in states, and user/editor review remain pending. See `docs/specs/phase_19_starter_scene_composition.md`.
|
||||||
|
|
||||||
|
| 2026-10-22 | Prepared and revised the Phase 19 Plain Background architecture specification (`docs/specs/phase_19_plain_background.md`) for final user sign-off. The accepted composed Stage backdrop view serves live Stage and previews; scene v1.7 persists active kind, last Sky ID, and confirmed plain color while migrating all older scenes as Sky. Color drafts stay out of Save/autosave, and theme-backed grid and two-tone gizmo overlays address light fills without changing art. Per user feedback, the current-color chip is the sole custom-picker entry, the separate More colors button is removed, and the custom picker uses a simple Preview label without a temporary-state helper message. Logged #78 for the chooser extension and rendered verification gates. No runtime code or tests changed. |
|
||||||
|
|
||||||
|
| 2026-10-25 | Prepared the Phase 20a identities, names, and overlap-selection architecture specification (`docs/specs/phase_20a_stage_identities_and_names.md`) for user sign-off. It specifies persistent character/prop IDs and scene-unique names alongside the existing temporary rule `file_id`, deterministic legacy migration to scene v1.8, shared EDIT name inspectors, and a visible-geometry click check with a transient overlap preview. Updated open #12 for the bounded character/prop precision plan and added #82 for the identity and migration trade-off. No runtime code or tests changed. |
|
||||||
|
|
||||||
|
| 2026-10-26 | Prepared the Phase 20b Step Stack UI/architecture specification (`docs/specs/phase_20b_action_plans_and_direct_authoring.md`) for final user sign-off. It records the approved Move/Wait+Say compatibility, explicit free-place versus named-prop links, finite world-aligned moving-prop pursuit, future-only paused regroup/reorder, scene v1.9 plan/action-ID migration, runtime group barrier, and three verification gates. Added #83–#84 for the flat-queue compatibility and pursuit tuning trade-offs. No implementation code or tests changed. |
|
||||||
|
|
||||||
|
| 2026-11-02 | Revised Phase 17a's Set Down release rule for the reported Set Down → Move collision: only the releasing rig receives a contact exception, held until its collision shapes clear the prop by 24 px for two physics frames. The exception also applies to that rig's movement sweep, and the prop retains its authored collision role with supports and other actors. Added #85; `test_phase17a_prop_roles.gd` passes 57 runtime checks. |
|
||||||
|
|
||||||
|
| 2026-11-02 | Added reserved-pickup collision protection: the pickup target remains exempt only for its reserving rig through approach and reach, then returns to normal contact on pickup or clearance after cancellation/failure. The existing locomotion sweep honors the same target-specific exemption. Added #86; `test_phase17a_prop_roles.gd` passes 68 focused runtime checks. |
|
||||||
|
|
||||||
_End of Log_
|
_End of Log_
|
||||||
|
|||||||
@@ -0,0 +1,422 @@
|
|||||||
|
# Editor Visual Style Guide
|
||||||
|
|
||||||
|
**Scope:** Establish a practical visual and interaction direction for the Prop Editor and Stickman Editor, using the Sandbox Stage UI as a product reference.
|
||||||
|
**Status:** Guidance for current and future editor UI. Prop and Stickman share `EditorVisualTheme` for editor chrome and selected reusable controls; Stage-only layouts and components remain Stage-specific unless explicitly generalized.
|
||||||
|
|
||||||
|
## 1. Product direction
|
||||||
|
|
||||||
|
Both editors should feel like approachable creative workspaces in the same Stickman Studio product:
|
||||||
|
|
||||||
|
- Keep the canvas or preview as the main work surface. Put tools and settings around it, not on top of the artwork unless a temporary task requires an overlay.
|
||||||
|
- Make the current task and mode easy to recognize. Use direct labels such as **Arrange**, **Reshape**, **Attach**, **Save**, and **Cancel**.
|
||||||
|
- Prefer visible feedback on the object over abstract state: selection outlines, vertex handles, previews, mode coloring, and status text.
|
||||||
|
- Preserve a stable layout while the child works. Opening an inspector section, showing help, or changing a mode should not make the active control jump away from the pointer.
|
||||||
|
- Make recovery and destructive actions predictable. Show what is about to happen and keep a visible way to cancel.
|
||||||
|
- Share a visual language, not necessarily identical panel layouts. A vector canvas, a modal dialog, an in-stage inspector card, and a stickman-part panel have different jobs.
|
||||||
|
|
||||||
|
The Sandbox Stage establishes a useful baseline for hierarchy, contrast, child-facing language, control states, safe viewport behavior, and theme tokens. Its in-stage inspector and capture bar are Stage patterns; they should be adapted only when an editor workflow has the same interaction needs.
|
||||||
|
|
||||||
|
## 2. Current implementation map
|
||||||
|
|
||||||
|
| Surface | Current implementation | Reuse implication |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Sandbox Stage | SandboxTheme loads validated tokens from [sandbox_theme.json](../../sandbox_theme.json). Stage inspector controls live under [scripts/shared/stage_ui](../../scripts/shared/stage_ui/). | Use as the product reference for semantic colors, readable type, focus, action roles, and reusable theme access. |
|
||||||
|
| Stage inspector | The approved [Stage panel UI system](../specs/stage_panel_ui_system.md) targets in-stage selected-object cards. | Do not insert StageInspectorPanel into editor inspectors by default. Borrow fitting rules and state behavior; use its components only if the layout and ownership match. |
|
||||||
|
| Stage action plans | [Phase 20b](../specs/phase_20b_action_plans_and_direct_authoring.md) defines the DIRECT Step Stack, action markers, target capture, and action picker. | Use these as Stage-specific references. Reuse their general feedback principles in editor workflows only when the interaction fits. |
|
||||||
|
| Stage object names and overlap chooser | [Phase 20a](../specs/phase_20a_stage_identities_and_names_ui_ux.md) defines the name-and-Rename inspector header and the anchored **Objects here** chooser. | Reuse the rename interaction for other renameable objects; reuse the chooser shell and state tokens for similar non-modal object pickers. Follow the click-versus-drag and transform-handle priority in §4.6. Keep object-specific naming rules with the owning feature. |
|
||||||
|
| Stage and editor dialogs | [StageDialogStyler](../../scripts/shared/stage_ui/stage_dialog_styler.gd) draws the shared confirmation card over the active scene while retaining native dialog signals. The style reads `popups.confirmation` from SandboxTheme. | Use this shared card for Prop and Stickman confirmation, recovery, and short action dialogs. Native file picker content remains native. |
|
||||||
|
| Shared editor chrome | [EditorVisualTheme](../../scripts/shared/editor_ui/editor_visual_theme.gd) loads validated tokens from [editor_visual_theme.json](../../editor_visual_theme.json) and builds each editor's local control Theme. `EditorSelectionDropdown` and `EditorContextMenu` supply shared selection and canvas-menu styling. | Use shared semantic tokens and controls for matching editor workflows. Keep editor-specific document behavior in its owner. |
|
||||||
|
| Prop Editor | [PropTheme](../../scripts/editors/prop/prop_theme.gd) reads [prop_theme.json](../../prop_theme.json) for material, geometry, and canvas defaults; editor chrome comes from `EditorVisualTheme`. The main scene uses split containers, a scrollable inspector, modes, and a nested Attach preview. | Keep Prop artwork/material values and canvas contrast in `PropTheme`; use shared editor tokens for chrome, inspector states, and selection dropdown styling. |
|
||||||
|
| Stickman Editor | [stickman_editor.gd](../../scripts/editors/stickman/stickman_editor.gd) uses `EditorVisualTheme` for chrome and coordinates ten BodyPartPanels in a two-column Overview beside the Whole Stickman preview, plus a Focus view for one large panel. | Overview columns and panels expand to the workspace size, retaining a 230 × 160 px minimum and scrolling when space is short. Keep the splitter draggable, preserve panel state, and show the part title inside its panel in both views. |
|
||||||
|
| Child-facing dialogs | [Dialog Design Principles](../specs/dialog_design_principles.md) documents the rounded, labeled-action pattern and stable resizing behavior. | Apply these rules to editor dialogs, adapting ownership and host behavior to each editor. |
|
||||||
|
|
||||||
|
The Prop Editor user guide at [prop_editor_user_guide.md](prop_editor_user_guide.md) describes its current controls and layout. Use it to avoid documenting proposed changes as existing behavior.
|
||||||
|
|
||||||
|
## 3. Shared visual system
|
||||||
|
|
||||||
|
### 3.1 Semantic color roles
|
||||||
|
|
||||||
|
Use color to reinforce meaning consistently. Keep labels, shapes, icons, or state text alongside color so meaning survives grayscale, low contrast, and color-vision differences.
|
||||||
|
|
||||||
|
| Role | Sandbox Stage reference | Editor guidance |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Main background | global.bg_color #171B24F2 | Use a dark neutral around the work area; avoid competing with authored art. |
|
||||||
|
| Raised surface | global.surface_color #252B38FA | Use for toolbars, inspector shells, and cards. Distinguish adjacent surfaces by value, border, or spacing. |
|
||||||
|
| Primary text | global.text_color #F5F7FA | Use for titles, control names, and important values. |
|
||||||
|
| Secondary text | global.muted_text_color #AAB2C0 | Use for helper text and secondary status; keep readable at the chosen size. |
|
||||||
|
| EDIT accent | mode_colors.edit #22C6FF | Shared editor accent for active modes, selection accents, and editor guidance through `EditorVisualTheme`. |
|
||||||
|
| DIRECT accent | mode_colors.direct #FFB300 | Reserved for the Stage's directing mode. Do not use as a generic warning color in editors. |
|
||||||
|
| PLAY accent | mode_colors.play #33DD77 | Reserved for Stage playback state. |
|
||||||
|
| Primary action | Stage dialog/action blue #087DBA | Use for the single most important forward action in a dialog. |
|
||||||
|
| Destructive action | Stage danger #E66B75 with dark red surfaces | Use only for destructive actions; pair with explicit wording and a cancel path. |
|
||||||
|
| Focus | Stage dialog focus #8BD9FF | Give keyboard focus an outline that remains visible over selected, hovered, and dark states. |
|
||||||
|
| Canvas grid | Stage tokens vary with canvas treatment; Prop canvas currently uses #FFFFFF26. | Keep grid lines subtle. The work, selection, and handles must dominate the grid. |
|
||||||
|
|
||||||
|
These values are current Stage reference values, not a mandate to paste literal hex values into editor controls. Resolve colors through validated theme accessors. If an editor needs a warmer or quieter local accent, define a semantic editor token and document its mapping to Stage meaning.
|
||||||
|
|
||||||
|
### 3.2 Shared chrome and intentional editor differences
|
||||||
|
|
||||||
|
Both standalone editors now use `EditorVisualTheme` for shared chrome roles, sizing, and local control Themes. Keep these domain-specific values in their existing owner:
|
||||||
|
|
||||||
|
- `PropTheme` retains material tints, primitive defaults, outline widths, and the Prop canvas surface/grid. Keep its neutral charcoal canvas distinct from the blue-tinted editor panels. Stickman canvas grid and selection colors remain in `EditorVisualTheme.stickman_canvas` tokens.
|
||||||
|
- `EditorVisualTheme` owns common editor surfaces, text, EDIT accent, focus, action roles, menu sizes, and minimum targets. `SandboxTheme` continues to own Stage-specific panels and dialog tokens.
|
||||||
|
|
||||||
|
Preserve these boundaries when extending the UI: share semantic chrome roles where workflows match, and keep canvas, material, and runtime-domain colors local to their owner.
|
||||||
|
|
||||||
|
### 3.3 Type, spacing, and shape
|
||||||
|
|
||||||
|
Use these Stage examples as starting points, then tune them for the denser editor workspace:
|
||||||
|
|
||||||
|
- Stage inspector hierarchy: title **24 px**, section **20 px**, body **20 px**, helper **16 px**.
|
||||||
|
- Stage inspector shell: **12 px** padding, **8 px** header gap, **12 px** section gap, **10 px** corner radius.
|
||||||
|
- Stage choice row: **56 px** minimum height; Stage toggle row: **64 px** minimum, increasing when helper text is visible.
|
||||||
|
- Large child-facing dialogs: title about **28–30 px**, body about **20 px**, button about **20 px**, **2 px** borders, **12–18 px** corner radii, and generous footer spacing.
|
||||||
|
- For short numeric settings such as a wait duration, keep the value directly editable, show its unit, and offer a large touch-size stepper. Optional quick picks should update the same value. Keep typed input, stepping, quick picks, and bounds synchronized; choose an increment that suits the setting.
|
||||||
|
- Stage generally uses dark surfaces with a restrained border. The dialog guide's stronger borders and rounder controls are for modal emphasis, not a requirement to put every editor widget inside a thick outline.
|
||||||
|
|
||||||
|
For compact inspectors, shorten the hierarchy only after checking it at the intended window size. Prefer a clear label and value over shrinking type until it becomes difficult to read. Use container spacing and alignment rather than per-control position nudges.
|
||||||
|
|
||||||
|
### 3.4 State styling contract
|
||||||
|
|
||||||
|
Every interactive control should have distinct, inspectable states:
|
||||||
|
|
||||||
|
| State | Expected feedback |
|
||||||
|
| --- | --- |
|
||||||
|
| Neutral | Stable surface and legible label; no implied selection. |
|
||||||
|
| Hover | Small surface or border change. Must not resemble selected or focused. |
|
||||||
|
| Selected / active | Persistent fill, border, pressed state, or explicit status. Keep the label unchanged when possible. |
|
||||||
|
| Keyboard focus | High-contrast focus ring or border that is visible even over selected fill. |
|
||||||
|
| Disabled | Control cannot activate, remains readable, and explains why when the reason is not obvious. |
|
||||||
|
| Dragging / live preview | Immediate object feedback; indicate the active handle or preview and make cancellation discoverable. |
|
||||||
|
| Error / invalid | Explain the problem near the affected task and offer a concrete next step. Do not rely on red alone. |
|
||||||
|
| Saved / dirty | Show a concise, persistent status such as **Saved** / **Unsaved changes** where it helps prevent lost work. |
|
||||||
|
|
||||||
|
For drawing handles, keep a contrasting backing/halo where the canvas can contain arbitrary colors. The Prop canvas's two-tone selection halo and the Stage gizmo backing are useful precedents. Selection should be readable at all zoom levels; keep handle sizes in screen space when scaling the canvas.
|
||||||
|
|
||||||
|
## 4. Layout and reuse rules
|
||||||
|
|
||||||
|
### 4.1 Use the right pattern for the job
|
||||||
|
|
||||||
|
- **In-stage selected-object inspector:** follow StageInspectorPanel, choice groups, and toggle rows in the [Stage UI spec](../specs/stage_panel_ui_system.md). Its title/Close header, fixed header with scrolling body, and safe-rect fitting are specific to a floating selection card.
|
||||||
|
- **Editor inspector:** favor a persistent column beside the canvas, with labeled groups and vertical scrolling. The Prop Editor already uses a split container and scrollable inspector. Separate sections with rounded cards, readable headings, colorful section icons, and concise helper copy; keep related values grouped in compact tiles. Reuse Stage's hierarchy and state clarity, but do not force the floating Stage card structure into this column.
|
||||||
|
- **Temporary targeting step:** the Stage capture bar is for a short-lived click-on-stage task. An editor can borrow the prompt-plus-visible-Cancel contract when it has a similar temporary canvas capture step, but should not copy the bar just because it is visible in Stage.
|
||||||
|
- **Modal dialog:** follow [Dialog Design Principles](../specs/dialog_design_principles.md). Keep a labeled **Cancel**, **Done**, or **Back** action; use one visually clear primary action; preserve the clicked control's anchor when content grows; cap height and scroll content on short viewports.
|
||||||
|
- **Anchored object chooser:** use the non-modal chooser pattern in section 4.6 for resolving overlapping canvas targets. Keep it visually distinct from a centered dialog and from a persistent inspector.
|
||||||
|
- **Canvas tools:** keep mode and document controls outside the draw area where possible. Put contextual handles and temporary prompts near the object only if they do not obscure the task.
|
||||||
|
|
||||||
|
### 4.2 Reuse through tokens and small components
|
||||||
|
|
||||||
|
1. Put repeated colors, font sizes, minimum sizes, spacing, radii, border widths, and state colors in a validated theme source.
|
||||||
|
2. Use typed accessors with sensible fallbacks. Avoid repeating raw values across script-built controls and .tscn files.
|
||||||
|
3. Apply per-control StyleBox overrides. Do not mutate a cached/shared Theme to style one editor or one accent variant.
|
||||||
|
4. Extract a reusable control only after the behavior or presentation appears in at least two appropriate contexts. Keep domain rules and document mutations in the editor controller.
|
||||||
|
5. Prefer native Button, ButtonGroup, CheckBox, OptionButton, and LineEdit semantics. Custom-drawn controls should separate visual drawing from input and expose a clear typed API.
|
||||||
|
6. Keep canvas-specific rendering tokens separate from chrome tokens. Grid, artwork, shape fill, selection halo, vertex handles, and preview ghosts have different contrast jobs.
|
||||||
|
7. Do not serialize UI state unless it is part of the authored document. Tool preference, document content, preview-only state, and persistence should be deliberately separated.
|
||||||
|
|
||||||
|
Both standalone editors build their chrome Theme from `EditorVisualTheme`; Prop also uses `PropTheme` for prop-specific art and material defaults. Stage remains the reference for fitting, dialog hierarchy, and child-facing language, but its in-stage inspector layout is not a default editor-inspector component.
|
||||||
|
|
||||||
|
### 4.3 Responsive workspace behavior
|
||||||
|
|
||||||
|
- Preserve canvas priority. When space is constrained, inspector content scrolls before drawing tools or essential canvas controls are clipped.
|
||||||
|
- Keep splitters draggable and give both sides a useful minimum. Prop Editor has the outer canvas/inspector split and an Attach preview split; these are good workspace patterns to retain.
|
||||||
|
- Use container-driven rows (FlowContainer, HBoxContainer, VBoxContainer) instead of fixed offsets for control groups that can wrap or grow with theme fonts.
|
||||||
|
- Keep top actions and mode controls reachable at smaller window sizes. Wrap or stack controls only when necessary, and preserve their order and mode meaning.
|
||||||
|
- Keep toolbars, status bars, and dialogs inside safe margins. A dynamic dialog should grow from a stable anchor and scroll rather than jump or recenter after each choice.
|
||||||
|
- Stickman Overview uses two equal, flexible columns of five body-part drawing panels beside the Whole Stickman preview. Let both columns fill the Overview pane and share extra width; let the five rows share extra height while preserving a 230 × 160 px minimum panel size. Scroll the Overview when the viewport is shorter than its minimum content size.
|
||||||
|
- Keep the Overview/preview splitter draggable. On narrow windows, use the existing Focus view to give one body-part panel the available space; keep Whole Stickman access available through its dedicated control. Switching views must preserve each panel instance, authored geometry, selection, and view transform. In Focus, use the title inside the active panel as the only canvas heading; do not repeat it above the panel.
|
||||||
|
- Validate the layout at wide and narrow windows, with raised fonts and resized panels, before claiming responsive behavior.
|
||||||
|
|
||||||
|
### 4.4 Shared confirmation dialog style
|
||||||
|
|
||||||
|
Use the Sandbox Stage confirmation card for child-facing confirmation, recovery, and short action dialogs in both standalone editors. The shared implementation is `StageDialogStyler`, with color, sizing, and spacing values from `SandboxTheme.popups.confirmation`.
|
||||||
|
|
||||||
|
- Draw a dim backdrop and a centered, rounded dark card. Use the themed card width (560 px target), 22 px inset, 18 px corners, and 2 px border; fit the card inside the safe viewport.
|
||||||
|
- Put a contextual icon badge and a left-aligned 28 px title in the header. Put the message in a left-aligned 20 px body. Wrap longer copy and scroll the body if the viewport is short.
|
||||||
|
- Order actions as primary, destructive, then **Cancel**. Use Stage blue for Save, Restore, and other forward actions; use the danger treatment for Discard, Start Over, and other destructive choices; use the neutral surface for Cancel. Make action labels at least 52 px high and 112 px wide, with 12 px gaps.
|
||||||
|
- Keep the visible **Cancel** action even when Escape is supported. Do not show a native title-bar **×**. Focus the primary action when present; for a destructive-only prompt, focus Cancel.
|
||||||
|
- Keep the native `AcceptDialog` or `ConfirmationDialog` as the signal source and open its shared overlay through `StageDialogStyler`. This keeps confirmation, custom-action, cancellation, keyboard, and safe-viewport behavior consistent.
|
||||||
|
- Apply this pattern to Prop recovery, unsaved changes before New/Close/Stage return, off-origin save choices, anchor rename, and error acknowledgement; apply it to Stickman Start Over, unsaved changes, grid setup, and error acknowledgement. File pickers keep their native file-selection interface.
|
||||||
|
|
||||||
|
Treat the card as one shared product pattern. Do not create editor-local confirmation palettes or button-role variants.
|
||||||
|
|
||||||
|
### 4.5 Renameable object inspector header
|
||||||
|
|
||||||
|
When a selected object has a user-editable name, show that name once in the inspector header beside the object's type icon. Put a clearly labeled **Rename** button beside it; the title itself should not be an undisclosed rename hotspot. Truncate a long title with an ellipsis and expose the full value as a tooltip. Keep the header and Rename action visible when the inspector body is collapsed.
|
||||||
|
|
||||||
|
Activating **Rename** reveals a prefilled, single-line field anchored directly below the header. Provide a prominent **Done** action and a neutral **Cancel** action, both with child-sized targets. Enter commits and Escape cancels. Keep validation beside the field, explain the problem in plain language, and offer a concrete suggestion when possible. A failed rename keeps the draft visible. Cancel restores the inspector's previous expanded or collapsed state; a successful rename updates the header and any visible object labels.
|
||||||
|
|
||||||
|
Use this interaction for other renameable objects when their inspector can support the same compact header and inline edit. Keep validation, uniqueness, and persistence rules in the owning feature; this visual pattern does not prescribe domain rules. Store shared header, edit, button, focus, and spacing values in the owning UI theme rather than inventing local styling for each object type.
|
||||||
|
|
||||||
|
### 4.6 Anchored object chooser
|
||||||
|
|
||||||
|
Use an anchored chooser when a click lands on multiple real canvas targets and the child must choose which one to act on. The Stage's **Objects here** popup is the implementation reference. It is a temporary, non-modal popup near the click, not an inspector or a centered confirmation dialog.
|
||||||
|
|
||||||
|
- Resolve selection clicks and movement gestures together. When the already-selected object is one of the overlapping targets, check its rotate and resize handles first on pointer press; a handle gesture starts that transform immediately. A press on the selected object's visible body becomes a drag after movement exceeds the screen-space threshold (8 logical pixels in Stage). If released before the threshold, open the chooser and preserve the prior selection. Measure movement in screen space so zoom does not change the gesture; other canvas workflows can tune the threshold while keeping this ordering.
|
||||||
|
|
||||||
|
- Give the popup a dark raised shell with a clear 2 px border, a 12–16 px corner radius, a restrained local shadow, and 12–16 px of inner space. Keep the stage visible; do not dim the canvas behind this short selection task.
|
||||||
|
- Use full-width rows at least 44 px high, preferably around 56 px, with about 8 px between them. Keep the candidate's icon and name together. The selected candidate keeps a teal fill, cyan outline, and a visible **Selected** label; hover and keyboard focus each remain easy to distinguish from selection.
|
||||||
|
- Keep a rounded, neutral **Cancel** button in a separate footer, at least 48 px high. Escape may also cancel. An outside click closes the chooser and is consumed so it cannot select the stage underneath.
|
||||||
|
- Keep the clicked art visible where possible, fit the popup to safe viewport margins, and cap the list height so longer candidate lists scroll. Keep pointer hover and keyboard focus behavior equivalent when they preview a candidate.
|
||||||
|
- Define shell, row, selected, hover, focus, badge, spacing, and Cancel values as theme tokens. The Stage implementation uses `SandboxTheme.popups.anchored_chooser`; other workflows should reuse the visual contract through their own appropriate theme owner.
|
||||||
|
|
||||||
|
### 4.7 Stage action planning and target capture
|
||||||
|
|
||||||
|
These are Stage-specific references, not a new inspector layout for the standalone editors. The [Phase 20b spec](../specs/phase_20b_action_plans_and_direct_authoring.md) owns the exact action behavior and component placement.
|
||||||
|
|
||||||
|
**Temporary target capture:** Keep one short, action-specific prompt and a visible **Cancel** together in a stable capture bar. Dim and block the underlying inspector while the stage is waiting for a target. Escape and right-click may act as shortcuts, but the visible Cancel remains available. Cancel discards the draft, restores the prior selection and focus, and leaves the plan and dirty state unchanged. Show a cursor marker and action-specific feedback: highlight only valid Set Down surfaces, keep Move feedback grounded at the actor's walking level, and preserve Throw's ballistic preview. Do not show a movement-looking trajectory while choosing a Pick Up prop.
|
||||||
|
|
||||||
|
**Action markers:** Use one readable icon-and-verb pill for each action. When actions run together, keep their pills separate and stack them so each remains identifiable. Anchor **Pick Up** at its prop, **Say** and **Wait** by the actor, and **Move** at its destination. Let pill color reinforce the action type while the label remains the source of meaning. Do not repeat the step number in the pill when its route flag already carries that number.
|
||||||
|
|
||||||
|
## 5. Editor flows and state maps
|
||||||
|
|
||||||
|
The following maps describe the current interaction architecture at a level useful for future visual work. They are not proposed additions to file formats.
|
||||||
|
|
||||||
|
### 5.1 Prop Editor flow
|
||||||
|
|
||||||
|
Current primary flow, based on [prop_editor.gd](../../scripts/editors/prop/prop_editor.gd) and [prop_canvas.gd](../../scripts/editors/prop/prop_canvas.gd):
|
||||||
|
|
||||||
|
~~~mermaid
|
||||||
|
flowchart TD
|
||||||
|
Open[Open Prop Editor] --> Recovery{Recover autosave?}
|
||||||
|
Recovery -->|Restore| Dirty[Restore document as dirty]
|
||||||
|
Recovery -->|Discard / none| New[New or loaded document]
|
||||||
|
Dirty --> Arrange[Arrange shapes]
|
||||||
|
New --> Arrange
|
||||||
|
Arrange --> Reshape[Reshape vertices]
|
||||||
|
Arrange --> Attach[Attach anchors and preview]
|
||||||
|
Reshape --> Arrange
|
||||||
|
Attach --> Arrange
|
||||||
|
Attach --> Reshape
|
||||||
|
Arrange --> Save[Save / Save As]
|
||||||
|
Reshape --> Save
|
||||||
|
Attach --> Save
|
||||||
|
Save --> Clean[Saved status; autosave cleared]
|
||||||
|
Arrange --> Exit{New / close with changes?}
|
||||||
|
Reshape --> Exit
|
||||||
|
Attach --> Exit
|
||||||
|
Exit -->|Save| Save
|
||||||
|
Exit -->|Discard| Close[Close or start new]
|
||||||
|
Exit -->|Cancel| CurrentMode[Return to current mode]
|
||||||
|
~~~
|
||||||
|
|
||||||
|
Presentation rules for this flow:
|
||||||
|
|
||||||
|
- Arrange, Reshape, and Attach are persistent tool modes. Keep the active mode visually selected and keep mode labels stable.
|
||||||
|
- Mode changes may change available controls and inspector sections. Explain missing controls through a short label or helper only when the reason is not obvious from the mode.
|
||||||
|
- Shape/anchor edits change the document and should visibly change dirty status. Preview motion, visibility toggles, and other session-only controls should not imply the document was edited.
|
||||||
|
- Saving should confirm completion in the status area or title state. Errors should identify the failed file action and retain the child's work.
|
||||||
|
- New and close with unsaved changes offer explicit **Save**, **Discard**, and **Cancel** outcomes. For actions that could replace work, name the consequence in the prompt.
|
||||||
|
- In Attach mode, show the selected anchor and its editable handles clearly on the canvas, and keep the private stickman/prop preview visually separate from the authoring surface.
|
||||||
|
|
||||||
|
### 5.2 Stickman Editor flow
|
||||||
|
|
||||||
|
Current primary flow, based on [stickman_editor.gd](../../scripts/editors/stickman/stickman_editor.gd), [body_part_panel.gd](../../scripts/editors/stickman/body_part_panel.gd), and [whole_stickman_preview.gd](../../scripts/editors/stickman/whole_stickman_preview.gd):
|
||||||
|
|
||||||
|
~~~mermaid
|
||||||
|
flowchart LR
|
||||||
|
LoadOrStart[Load or start stickman] --> Parts[Choose a body-part drawing panel]
|
||||||
|
Parts --> Draw[Draw and color one or more shapes]
|
||||||
|
Draw --> Select[Select shape or vertex]
|
||||||
|
Select --> Preview[Inspect whole-stickman assembly]
|
||||||
|
Preview --> Guide[Toggle pose guide / reset views]
|
||||||
|
Guide --> Parts
|
||||||
|
Parts --> Save[Save stickman]
|
||||||
|
Save --> Continue[Continue editing]
|
||||||
|
LoadOrStart --> Clear[Clear with confirmation]
|
||||||
|
Clear --> Parts
|
||||||
|
~~~
|
||||||
|
|
||||||
|
Presentation rules for this flow:
|
||||||
|
|
||||||
|
- Make the active body-part panel and active shape unambiguous. Selecting a shape in one panel clears selection in the others.
|
||||||
|
- Keep local drawing context and the assembled Whole Stickman preview distinct but visually related. A change in one body part should have a prompt, visible effect in the assembly preview.
|
||||||
|
- Use the pose guide as quiet construction help beneath selection gizmos. Guide colors distinguish left/right limbs; the guide must not capture pointer input or obscure active edits.
|
||||||
|
- Keep color editing and recent colors close to the relevant part, and confirm a color only through the explicit dialog action.
|
||||||
|
- Keep grid/snap and guide visibility available as tool preferences, visually separated from authored shape color and geometry.
|
||||||
|
|
||||||
|
### 5.3 Reusable dialog transaction
|
||||||
|
|
||||||
|
For either editor, the expected child-facing sequence is:
|
||||||
|
|
||||||
|
1. State the action in the title and one short sentence.
|
||||||
|
2. Show the effect or consequence when it may be surprising.
|
||||||
|
3. Present one primary action, any needed destructive action, and a visible **Cancel**. If the only forward-looking choice is destructive (such as Start Over), keep it in the danger role and focus Cancel initially.
|
||||||
|
4. Keep focus in the dialog, preserve the current anchor during resize, and return focus to the invoking control after close where practical.
|
||||||
|
5. On success, close the dialog and update the affected editor state once. On cancel, leave the document unchanged.
|
||||||
|
|
||||||
|
This is a target interaction contract for editor dialogs. Existing controls should be checked individually before being treated as compliant.
|
||||||
|
|
||||||
|
## 6. Interaction, feedback, and child-facing language
|
||||||
|
|
||||||
|
### 6.1 Input and feedback
|
||||||
|
|
||||||
|
- Support mouse and touch-size targets; target at least **44 × 44 logical pixels** for child-facing actions. Prefer Stage's **48 px** action target where the layout allows.
|
||||||
|
- Keep keyboard navigation visible and complete: Tab reaches meaningful controls, Enter/Space activates them, Escape cancels temporary tasks, and focus does not disappear behind a selected style.
|
||||||
|
- Keep right-click and keyboard shortcuts as optional accelerators. A visible menu item or button should remain available for important operations.
|
||||||
|
- Keep the top-level File/Edit/View menu titles plain and use familiar emoji beside readable action labels inside their dropdowns. Match the Sandbox Stage menu scale: 22 px menu-bar labels and 26 px popup labels. Group file actions as New/Open/Recent, then Save/Save As, with separators before a distinct Rename or Start Over action where present. Use the restrained charcoal popup surface for menu-bar dropdowns; reserve the raised Studio List surface for canvas right-click menus.
|
||||||
|
- Style single-choice editor pickers as a dark field with the chosen label and chevron. Popup rows keep readable text and may include a meaningful domain icon, as in Prop material and shape choices; do not show radio/check glyphs or an empty indicator lane. The current choice gets a full teal surface and cyan outline. Keep hover and keyboard focus visible, and give the field and rows at least 44 logical pixels of height. Use the shared `EditorSelectionDropdown` control for Prop and Stickman editor pickers.
|
||||||
|
- Standardize Prop and Stickman canvas context menus on the **Studio List** pattern: a compact vertical list on a raised editor surface, with a subtle border, rounded corners, readable 20 px labels, and 48 px rows. Resolve surface, border, text, hover, EDIT accent, focus, and destructive colors through `EditorVisualTheme` tokens rather than local color literals.
|
||||||
|
- Group related actions with spacing and separators, and keep each menu's actions specific to the current mode and hit target. Hover uses a lighter surface with a slim EDIT-cyan cue; keyboard focus has a distinct, high-contrast focus outline. Open with no focused row so mouse users do not mistake an action for a selection; show the focus outline after Up/Down navigation, and clear it when the pointer takes over. Give destructive actions explicit labels, separate them from regular actions, and place them last when practical; do not use color as their only cue.
|
||||||
|
- Keep labels as the source of meaning and use icons sparingly and consistently. Open the menu near the pointer, keep the clicked point or shape edge visible, and clamp the menu within the viewport.
|
||||||
|
- For dragging, preview changes continuously, show which handle is active, commit on release, and provide a clear cancel path when the operation is consequential or multi-step.
|
||||||
|
- Avoid hit-test surprises: decorative labels/icons ignore mouse input; a large row toggle has one activation target; a canvas guide is visual only.
|
||||||
|
- Preserve the world point under the cursor during zoom. Keep selected gizmos and handles visible above artwork and grid.
|
||||||
|
- Use both visual and textual feedback for snap, mode, selected state, disabled reason, save state, and errors.
|
||||||
|
|
||||||
|
The Stage panel's full-row toggle and stable help layout are useful behaviors when a row switch is appropriate. In an editor inspector, apply the same principles without copying the Stage card's floating shell.
|
||||||
|
|
||||||
|
### 6.2 Copy and labels
|
||||||
|
|
||||||
|
Prefer concise, concrete verbs and familiar terms:
|
||||||
|
|
||||||
|
| Prefer | Avoid |
|
||||||
|
| --- | --- |
|
||||||
|
| **Arrange**, **Reshape**, **Attach** | Technical labels such as “Transform mode” or “Edit points mode” as the main child-facing label |
|
||||||
|
| **Add Shape**, **Erase Shape**, **Create Point**, **Remove Point** | Ambiguous labels such as “Apply” when the result can be named |
|
||||||
|
| **Save**, **Save As…**, **Load**, **Cancel** | Icon-only actions with no tooltip or accessible label |
|
||||||
|
| “This shape was reshaped.” | A disabled Radius field with no explanation |
|
||||||
|
| “Choose where this prop attaches.” | Internal terms such as “anchor payload” |
|
||||||
|
| “Unsaved changes. Save before starting a new prop?” | Generic “Are you sure?” without naming the consequence |
|
||||||
|
|
||||||
|
Emoji can help distinguish common actions, as used by both editor menus, but should be an optional cue rather than the only meaning. Keep the text label understandable if an emoji font is unavailable. Use the same wording for the same action in menu, dialog, toolbar, tooltip, and user guide.
|
||||||
|
|
||||||
|
### 6.3 Icons and emoji
|
||||||
|
|
||||||
|
- Use one icon or emoji to help scan a familiar action; do not put emoji on every label by default.
|
||||||
|
- Keep the text label as the source of meaning. Provide a tooltip or accessible name for icon-only canvas tools.
|
||||||
|
- Use icons consistently for the same action across menus, toolbars, empty states, and dialogs. Avoid changing icon meaning between editors.
|
||||||
|
- Avoid using an emoji's color as the only state cue; fonts and platforms may render it differently.
|
||||||
|
- Both editors use icons beside readable menu action labels, with separators between distinct groups. Keep top-level File/Edit/View titles plain; place icons on actions and use the same symbol for the same operation across editors.
|
||||||
|
- In the Prop inspector, use colorful, flat icons for section headings, material choices, 2D shape choices, and artwork tags. Keep text labels authoritative. Show tag selection with the selected surface and border; do not add a separate check badge. Shape icons must depict planar 2D geometry.
|
||||||
|
|
||||||
|
### 6.4 Empty, loading, and error states
|
||||||
|
|
||||||
|
The current editors have different levels of state guidance. The following table separates known behavior from recommended presentation:
|
||||||
|
|
||||||
|
| State | Current reference | Recommended presentation |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| New/empty Prop canvas | Arrange has an add-shape context menu and an Arrange-only empty-canvas hint; Reshape does not offer adding a shape. | Keep the canvas mostly clear. Show a short Arrange hint only when it helps discover the next action; hide it as soon as artwork exists. Do not show a dead-end hint in Reshape or Attach. |
|
||||||
|
| Empty Prop inspector selection | Inspector sections depend on mode and selected shape/anchor. | State what to select or create when the empty inspector would otherwise look broken. Keep the message short and do not add a second competing empty-canvas prompt. |
|
||||||
|
| Prop load/recovery | Load failures use an error dialog; autosave recovery offers Restore or Discard. | Name the file/action in the message, preserve the current artwork on failure, and keep Restore/Discard outcomes distinct. Loading feedback should not imply that the document is already saved. |
|
||||||
|
| Stickman panel before drawing | The ten body-part panels are the main workspace; the panel script owns drawing and selection behavior. | Give each blank panel a concise, low-contrast drawing cue if discovery testing shows it is needed. Remove it on first shape so it does not compete with artwork. |
|
||||||
|
| Stickman load/clear | Load and save use file dialogs; Clear has a confirmation dialog; error dialogs report failures. | Keep the current document intact on a failed load. State the consequence in Clear confirmation and offer a visible cancel path. |
|
||||||
|
| Save / dirty state | Prop Editor has status/title and autosave behavior; Stickman Editor's status bar reports cursor coordinates, snap state, and save state. | Keep save status easy to find in both editors. Do not treat autosave as a user-visible successful save unless the file was actually saved to the chosen destination. |
|
||||||
|
|
||||||
|
Do not add spinners or blocking overlays for synchronous work without evidence that the operation takes long enough to need them. If an operation becomes asynchronous, keep progress near the task and preserve access to cancellation where safe.
|
||||||
|
|
||||||
|
### 6.5 Motion and reduced motion
|
||||||
|
|
||||||
|
- Use motion to show cause and effect: a brief selection flash, a panel entering, or a successful action cue. Keep it short and do not delay the next input.
|
||||||
|
- Do not animate every hover or value change. Motion should help the child understand an edit, not decorate idle controls.
|
||||||
|
- Keep persistent mode and selection state visible after any transition ends.
|
||||||
|
- For a secondary chooser that slides out beside an inspector, align the panel tops and briefly dim the parent to show that the chooser is temporary. Keep a visible **Cancel**; Escape and an outside click should reverse the same transition. On close, restore the parent and return focus to the control that opened the chooser.
|
||||||
|
- For card reordering, keep bold up/down buttons stationary and animate the affected cards exchanging places after activation. Keep the selected card selected and visually in front, preserve scroll and focus, and ignore repeat input until the swap finishes.
|
||||||
|
- Respect a reduced-motion preference for nonessential transitions and flashes. Provide an equally clear static state.
|
||||||
|
- When reduced motion is requested, show the chooser or reordered cards directly in their final state without the transition.
|
||||||
|
- The current code has short visual effects such as the Prop canvas's new-point flash and Stage completion effects. A unified reduced-motion preference is not established by the referenced theme/specs; treat it as a future product-level decision.
|
||||||
|
|
||||||
|
## 7. Theme and implementation checklist
|
||||||
|
|
||||||
|
Before adding or revising an editor control:
|
||||||
|
|
||||||
|
### Design
|
||||||
|
|
||||||
|
- [ ] Is the control's job clear and is it in the correct workspace area?
|
||||||
|
- [ ] Does it follow the correct pattern: persistent inspector, modal dialog, canvas tool, or temporary capture?
|
||||||
|
- [ ] Are neutral, hover, selected, focused, disabled, dragging, and error states defined?
|
||||||
|
- [ ] Does selected state remain distinct from hover and focus?
|
||||||
|
- [ ] Are colors backed by labels, icons, position, or shape cues where appropriate?
|
||||||
|
- [ ] Are labels child-readable and consistent with the existing action vocabulary?
|
||||||
|
- [ ] Can the layout handle smaller windows, longer names, and larger font presets?
|
||||||
|
|
||||||
|
### Theme
|
||||||
|
|
||||||
|
- [ ] Are colors, type sizes, spacing, radii, borders, and target sizes tokens rather than repeated literals?
|
||||||
|
- [ ] Does the token use a semantic name rather than a control-specific unexplained hex?
|
||||||
|
- [ ] Does it have a validated accessor, fallback, and range clamp where applicable?
|
||||||
|
- [ ] Are per-control style changes local and isolated from a shared cached Theme?
|
||||||
|
- [ ] Is the difference from Stage tokens intentional and documented?
|
||||||
|
|
||||||
|
### Interaction
|
||||||
|
|
||||||
|
- [ ] Can pointer, touch, and keyboard users reach and activate the control?
|
||||||
|
- [ ] Does a disabled control explain why, if not self-evident?
|
||||||
|
- [ ] Does temporary work have an obvious Cancel/undo path?
|
||||||
|
- [ ] Does a control's position remain stable while help, validation, or mode content changes?
|
||||||
|
- [ ] Does changing a tool preference avoid marking the document dirty unless that is intentional?
|
||||||
|
- [ ] Does success/failure produce visible feedback without hiding the canvas or losing authored work?
|
||||||
|
|
||||||
|
### Architecture
|
||||||
|
|
||||||
|
- [ ] Does the editor controller own document mutation, persistence, and dirty state?
|
||||||
|
- [ ] Does a reusable control emit a typed intent and display a supplied value?
|
||||||
|
- [ ] Is new reuse actually shared by more than one appropriate UI context?
|
||||||
|
- [ ] Are UI preferences, preview-only state, and document data kept separate?
|
||||||
|
- [ ] Are new theme values represented in both default config and committed JSON?
|
||||||
|
- [ ] Are existing user guides/specs updated only after the behavior is verified?
|
||||||
|
|
||||||
|
### Implementation recipe
|
||||||
|
|
||||||
|
For a new editor UI element, use this sequence:
|
||||||
|
|
||||||
|
1. Name its job and state owner. Decide whether the editor controller, canvas, or reusable view owns the value and mutation.
|
||||||
|
2. Identify the closest reference pattern: Stage inspector, Stage dialog, Prop Editor mode control, Prop canvas selection, or Stickman body-part panel. Record what should carry over and what should not.
|
||||||
|
3. Define the semantic tokens and states before styling. Reuse existing token names where their meaning matches; add new names to the theme defaults and JSON with validation/fallback behavior.
|
||||||
|
4. Build with Godot containers and native controls first. Add a custom control only when it provides repeated behavior or custom canvas drawing.
|
||||||
|
5. Wire typed intent signals to the owning controller. Refresh controls from document state without emitting a second mutation.
|
||||||
|
6. Check the smallest supported window, larger type, long labels, all modes, selected/disabled/focused states, and save/error/cancel paths.
|
||||||
|
7. Capture before/after screenshots or a short manual checklist. Update the user guide after the behavior is accepted.
|
||||||
|
|
||||||
|
This is recommended implementation order, not a claim that every current editor control follows it.
|
||||||
|
|
||||||
|
### Recommended harmonization order
|
||||||
|
|
||||||
|
1. **Maintain token ownership.** `EditorVisualTheme` owns shared standalone-editor chrome; `PropTheme` owns prop-domain and canvas defaults; `SandboxTheme` owns Stage-specific UI. Document any intentional override at the token or component that owns it.
|
||||||
|
2. **Audit remaining overrides.** Check for editor chrome values that still bypass `EditorVisualTheme`; preserve the Prop canvas surface/material palette and Stickman canvas drawing tokens where they serve artwork contrast.
|
||||||
|
3. **Document responsive limits.** Record minimum usable widths, toolbar wrapping, how the two Stickman Overview columns share space beside the preview, and when Focus or scrolling takes over.
|
||||||
|
4. **Audit remaining state gaps.** Verify focus, disabled reasons, save/error status, destructive confirmation, and cancel behavior. Both editors use the shared `StageDialogStyler` card for confirmation, recovery, and short action dialogs.
|
||||||
|
5. **Validate visually at agreed sizes.** Compare the editor screenshots with the Stage reference and adjust intentional differences explicitly.
|
||||||
|
|
||||||
|
This order is a maintenance checklist for the current shared chrome and editor-specific drawing patterns; it does not propose replacing the established theme architecture.
|
||||||
|
|
||||||
|
### Visual QA checklist
|
||||||
|
|
||||||
|
- [ ] Compare Prop and Stickman editor startup screens side by side with the Stage's dark surface and EDIT accent references.
|
||||||
|
- [ ] Check every mode with no selection, with a selected object, during drag, and after release/cancel.
|
||||||
|
- [ ] Check primary action, destructive action, disabled control, hover, keyboard focus, and persistent selected states.
|
||||||
|
- [ ] Check prop autosave recovery, load failure, unsaved New/Close, and successful save feedback.
|
||||||
|
- [ ] Check Stickman Clear confirmation, load failure, snap status, pose guide, and cross-panel selection.
|
||||||
|
- [ ] Resize to the smallest supported viewport and increase font size. Confirm canvas access, scroll access, and nonoverlapping controls.
|
||||||
|
- [ ] Verify visible keyboard order and Return/Space/Escape behavior; confirm focus returns to the invoking control where appropriate.
|
||||||
|
- [ ] Check grid, artwork, selection halo, vertex handles, pose guide, anchor markers, and preview ghosts against light and dark artwork.
|
||||||
|
- [ ] Check text contrast and state distinction with a contrast measurement and color-vision simulation; the current specs do not provide measured results.
|
||||||
|
- [ ] Repeat the checks with emoji rendering unavailable or replaced; action meaning must remain clear from text.
|
||||||
|
|
||||||
|
## 8. Recommended additional coverage
|
||||||
|
|
||||||
|
To make this guide a stronger long-term design reference, add these pieces as the editor UI evolves:
|
||||||
|
|
||||||
|
1. **Annotated screenshots at canonical window sizes.** Include each editor's initial screen, every mode, selection/reshape states, Attach preview, and one modal. Mark which visuals are current and which are target.
|
||||||
|
2. **A theme ownership map.** Document how `SandboxTheme`, `EditorVisualTheme`, and `PropTheme` divide Stage UI, shared editor chrome, and Prop domain/canvas values. Note intentional overrides and identify any remaining editor chrome that bypasses its shared token.
|
||||||
|
3. **Responsive breakpoints and minimum workspace sizes.** Record minimum usable canvas/inspector widths, when controls wrap, how the Attach preview stacks, and how the two Stickman body-panel columns share space with the Whole Stickman preview.
|
||||||
|
4. **Accessibility and contrast acceptance checks.** Specify contrast targets, keyboard tab order, focus visibility, touch target checks, color-vision-safe cues, and high-font-size behavior. The current references provide useful states and target sizes but do not establish a measured accessibility audit.
|
||||||
|
5. **Motion and sound rules.** Define when transitions, selection flashes, save feedback, and error feedback animate or use sound; keep them brief, informative, and respectful of reduced-motion preferences.
|
||||||
|
6. **Content and localization rules.** Include label length budgets, wrapping/truncation behavior, tooltip standards, pluralization, and translation expansion checks.
|
||||||
|
7. **Editor-specific control patterns.** Document mode bars, drawing canvases, color pickers, anchor lists, selection gizmos, empty states, and destructive file flows as reusable examples with their owning state and signals.
|
||||||
|
8. **Verification matrix.** Link each visual contract to a scene/test/manual check so future changes can distinguish an implemented pattern from a recommendation.
|
||||||
|
|
||||||
|
## 9. Reference files
|
||||||
|
|
||||||
|
- [AGENTS.md](../../AGENTS.md) — repository layout, editor architecture, shared Stage UI, and child-facing dialog guardrails.
|
||||||
|
- [Stage panel UI system](../specs/stage_panel_ui_system.md) — Stage inspector card, transient capture bar, component contracts, fitting, and acceptance criteria.
|
||||||
|
- [Dialog Design Principles](../specs/dialog_design_principles.md) — child-facing modal shell, action hierarchy, and stable resize behavior.
|
||||||
|
- [SandboxTheme implementation](../../scripts/stage/sandbox_theme.gd) and [SandboxTheme config](../../sandbox_theme.json).
|
||||||
|
- [PropTheme implementation](../../scripts/editors/prop/prop_theme.gd) and [PropTheme config](../../prop_theme.json).
|
||||||
|
- [Prop Editor controller](../../scripts/editors/prop/prop_editor.gd), [Prop Editor scene](../../scenes/editors/prop/prop_editor.tscn), and [Prop Editor guide](prop_editor_user_guide.md).
|
||||||
|
- [Prop canvas](../../scripts/editors/prop/prop_canvas.gd) — mode behavior, canvas gestures, selection handles, and context menus.
|
||||||
|
- [Stickman Editor controller](../../scripts/editors/stickman/stickman_editor.gd), [Stickman Editor scene](../../scenes/editors/stickman/stickman_editor.tscn), [BodyPartPanel](../../scripts/editors/stickman/body_part_panel.gd), and [Whole Stickman preview](../../scripts/editors/stickman/whole_stickman_preview.gd).
|
||||||
|
- [Stage dialog style helper](../../scripts/shared/stage_ui/stage_dialog_styler.gd) and [Stage capture bar](../../scripts/editors/stage/stage_use_target_capture_bar.gd).
|
||||||
|
- [Phase 20b action plans and DIRECT authoring](../specs/phase_20b_action_plans_and_direct_authoring.md) — Stage-specific action pills, capture feedback, and plan editing.
|
||||||
|
- [Prop Editor UX specification](../specs/phase_9c_prop_editor_ux.md) — current approved Prop Editor mode, Attach preview, marker, and layout behavior.
|
||||||
|
|
||||||
@@ -0,0 +1,108 @@
|
|||||||
|
# Action Reactions — Product Design Brief
|
||||||
|
|
||||||
|
> **Status:** Accepted product decisions captured from the design conversation; not a final architecture or implementation specification.
|
||||||
|
> **Audience:** UI/UX, architecture, and implementation.
|
||||||
|
> **Purpose:** Preserve the agreed child-facing behavior and identify the remaining product and technical questions before implementation.
|
||||||
|
|
||||||
|
## Goal
|
||||||
|
|
||||||
|
Let a child connect a specific moment in an authored action to a purposeful response from one or more characters. A reaction can contain ordered steps, combine compatible actions such as walking and speaking, and itself become the source of another reaction. The same scene events can also be observed by stage-level handlers such as sound or lighting cues.
|
||||||
|
|
||||||
|
The child is directing a planned scene. Reaction links are intentional links to authored action instances, not broad reusable rules such as “whenever Milo walks.”
|
||||||
|
|
||||||
|
## Accepted child flow
|
||||||
|
|
||||||
|
1. In **DIRECT**, the child selects a character. The Director inspector appears only while a character is selected. Clicking outside dismisses it; there is no close button. This is an intentional departure from the shared Stage inspector shell’s fixed Close control. The Phase 20a **EDIT** naming inspector is a separate workflow and retains the shared shell's labeled Close control.
|
||||||
|
2. The inspector keeps the three quick actions **Move**, **Say**, and **Wait** visible.
|
||||||
|
3. An authored action card can be opened to reveal its management choices. From a specific action, the child chooses **Make someone react to this…**.
|
||||||
|
4. The **When** choice is contextual to that action. The child does not browse one long list of generic events.
|
||||||
|
5. The child chooses who responds from a visual, searchable character roster, with on-stage picking available where useful. Each additional responder has a separate **Then** lane.
|
||||||
|
6. **Then** is an ordered set of numbered steps. Actions placed together in one step start together; the next step waits until the current step’s actions finish.
|
||||||
|
7. Reactions to reactions use the same flow. They appear as separate linked cards, not as a nested graph. The source action shows that it starts reactions; browsing all reactions supports search and grouping by their **When** event.
|
||||||
|
|
||||||
|
Numbered steps and paired actions should fit the shared Stage inspector visual system, not introduce a parallel popup style. The shell should retain its safe placement and accessible, clearly labeled controls. The agreed outside-click dismissal is a deliberate exception to the shell’s usual Close button.
|
||||||
|
|
||||||
|
## Stage character names
|
||||||
|
|
||||||
|
- A placed character can be renamed from its inspector when selected in **Edit** mode. This is a new stickman inspector; the current Edit-mode inspector UI is for props and scenery.
|
||||||
|
- The name belongs to that character instance in the scene. Renaming it does not rename or modify the reusable stickman asset.
|
||||||
|
- Character and prop instance names share one scene-wide, case-insensitive uniqueness rule. Placing or duplicating characters that share an asset default name assigns a distinct suffix, such as **Milo**, **Milo 2**, and **Milo 3**.
|
||||||
|
- Action and reaction cards, event descriptions, and responder choices use the current stage-character name.
|
||||||
|
- A character’s saved identity is independent of its display name, so renaming it does not retarget its actions or reactions.
|
||||||
|
|
||||||
|
## Stage prop names
|
||||||
|
|
||||||
|
- A placed prop can be renamed from its selected-prop inspector in **Edit** mode using a **Name on stage** field. The name belongs to the scene instance and does not modify the reusable prop asset.
|
||||||
|
- Duplicate props receive a distinct default name, such as **Blue Door** and **Blue Door 2**. Renaming an instance does not change its saved identity or retarget existing links.
|
||||||
|
- Target choices and action/reaction descriptions show the instance name so a child can distinguish props of the same asset. Where helpful, target pickers should also show a thumbnail or highlight the exact prop on stage.
|
||||||
|
- A Move To action can be described as **Walk to Blue Door** only when it is linked to that specific prop instance. A free-position target remains a place, optionally described as **Place 2 · by Blue Door**. Do not infer prop identity from coordinate proximity.
|
||||||
|
|
||||||
|
## Choosing overlapping stage objects
|
||||||
|
|
||||||
|
- A normal click on one object selects it immediately. A click that hits multiple objects opens **Objects here** and lists only objects whose visible geometry is actually under the click; an object merely nearby or inside another object's bounding-box corner is not a candidate.
|
||||||
|
- Keep the previous selection and inspector as-is while the chooser is open. Hovering or keyboard-focusing a row previews that exact candidate on the stage without committing selection.
|
||||||
|
- Choosing a row commits that object and opens its inspector. Cancel, Escape, or outside dismissal closes the chooser and keeps the previous selection. The click that dismisses the popup must not also select an object behind it.
|
||||||
|
- Rows use the current scene instance name and a clear character/prop icon. The accompanying approved mockup is [Objects here overlap picker](action_reactions_mockups/06_edit_overlap_picker.png).
|
||||||
|
|
||||||
|
## DIRECT mode action previews
|
||||||
|
|
||||||
|
- A selected character’s route is labeled with its authored movement type, such as **Walk** or **Run**. The destination marker identifies the named target, such as **Blue Door**. Do not use a generic “planned walk” label; show only movement types the editor supports.
|
||||||
|
- A standalone **Say** step uses a compact speech-bubble marker in the plan overview. In Step Spotlight, show a yellow-bordered pill containing the speech glyph and **Say**, without a step number or leader. Place it just above the Say step’s predicted ground start point, with a small gap; when Say follows a Move, align it above that Move’s endpoint flag. Keep the dialogue text in the inspector. A focused **Wait** step uses a purple-bordered pill containing the hourglass glyph and **Wait**, without a step number or leader, just above its predicted ground start point. A focused Wait+Say step stacks Wait above Say. For a concurrent Move+Say step, show stacked Move and **Say** action pills near the first third of the grounded route, using the same small action glyphs and cyan/yellow colors as the inspector; do not also draw a separate speech marker for that Say. Say may accompany every other registered action type, while Say+Say, primary+primary, and any third action remain unavailable. In Step Spotlight, show each Together action that can share the actor’s space as two stacked, icon-bearing pills with its primary action above plain **Say**, using each action’s color; fit the pair as one group against the character name, inspector, and viewport. Keep Move+Say near the route’s first third, Wait and other physical actions near their predicted start, and Throw Prop beside the hands or upper torso. Keep Pick Up over its target prop and Say by the character so the target stays clear. The normal plan overview remains compact. These cues signal actions without displaying bubble counts or multiple dialogue bubbles.
|
||||||
|
- Tapping a numbered movement flag selects its existing plan step and reveals the stacked **Edit action** and **Erase action** controls; selecting alone never moves the destination, and flags are not draggable by default. **Edit action** opens the destination editor, where choosing a new place or exact named prop enters capture with a clear prompt and visible **Cancel**. The old flag stays faintly visible while the candidate route and flag follow the cursor. Choosing a new point or exact named prop commits the change; **Cancel** or **Esc** restores the original destination.
|
||||||
|
## Action moments
|
||||||
|
|
||||||
|
Only moments relevant to the selected authored action are shown. “Starts” is omitted from Drop and Set Down labels because the start timing is implied.
|
||||||
|
|
||||||
|
| Authored action or event | Reaction moment |
|
||||||
|
| --- | --- |
|
||||||
|
| **Move To** | When the character begins walking, or when they reach that action’s named endpoint. The endpoint is specific to that Move To action; there is no generic “walk finishes” choice. |
|
||||||
|
| **Say** | When that exact line begins (default), or after that line finishes. The line-start event occurs when the bubble/line appears, so a reaction can start while the speaker is still walking. |
|
||||||
|
| **Wait** | When that exact wait finishes (default), or when it begins. A “finished waiting” reaction only fires if the wait completes. |
|
||||||
|
| **Pick Up** | When the prop is successfully picked up and reaches the character’s hand. |
|
||||||
|
| **Use** | When the character successfully uses the selected prop/use spot. |
|
||||||
|
| **Drop** | When the character begins the authored Drop action. |
|
||||||
|
| **Set Down** | When the character begins the authored Set Down action. |
|
||||||
|
| **Throw action** | A separate event for when a character throws a prop. This is distinct from a prop touching a character. The event fires when the character begins the authored Throw action. |
|
||||||
|
| **Moving prop touches character** | A separate scene event for a moving prop touching a character, such as “When a prop touches Ava.” It is not tied back to, or tracked as, the authored Throw action that may have launched it. Fire once when contact begins, not every physics frame; if contact ends and a new touch occurs, that is a new event. |
|
||||||
|
| **Ragdoll** | **When Milo falls.** No separate settled/lying-still moment for now. Landing, bouncing, and prop contact are distinct physical events. |
|
||||||
|
| **Recover** | When Milo is back on his feet, after the Recover action completes. |
|
||||||
|
|
||||||
|
## Reaction priority and action flow
|
||||||
|
|
||||||
|
- A reaction begins as soon as its selected source moment occurs. It does not wait for the source character’s other action in the same step to finish. For example, Milo can **Walk to Red Door + Say “Help!”** together; Ava’s reaction starts when that exact Say line appears, while Milo keeps walking.
|
||||||
|
- A reaction takes priority for its responder. If Ava is doing an incompatible action, that action pauses. Compatible actions may continue together, such as adding speech while a walk continues.
|
||||||
|
- Ava completes all numbered steps in the reaction before returning to her paused authored plan. Actions grouped in one step start together; the step ends when all its actions finish. Ava resumes her paused action and then continues her original queue.
|
||||||
|
- A **Follow Milo** action tracks Milo’s live position. In the agreed example, Ava follows while Milo walks, and the follow ends when Milo reaches the door and Ava catches up.
|
||||||
|
- If a new reaction for Ava triggers while she is already reacting, the new reaction takes over and cancels the unfinished steps of the current reaction. Completed actions are not undone. The original authored plan remains paused and resumes after the new reaction finishes. The saved earlier reaction remains available for later plays; there is no queue of superseded reactions.
|
||||||
|
- The user does not want extra explanatory UI copy for the basic priority/resume behavior.
|
||||||
|
- Do not show loop warnings for ordinary authored reaction chains. Links refer to specific authored actions, so a finite chain remains finite unless the child deliberately authors more links. The moving-prop contact event is independently repeatable per distinct contact, as described above.
|
||||||
|
|
||||||
|
## Event listeners beyond characters
|
||||||
|
|
||||||
|
One scene event can start a linked character reaction and notify external handlers from the same occurrence. Handlers are not limited to characters: they may drive stage-wide effects such as a sound or lighting cue. For example, Milo’s specific “Help!” line can start Ava’s reaction and notify a stage handler.
|
||||||
|
|
||||||
|
## Editing and deletion
|
||||||
|
|
||||||
|
- Editing the destination of an existing Move To action keeps reactions attached to that authored action and updates the displayed trigger location.
|
||||||
|
- Deleting an action with dependent reactions warns that reactions will also be removed. Do not enumerate all affected reactions. Deleting it removes dangling reactions, including follow-up reactions downstream. If there are no dependent reactions, use a normal confirmation to delete the action.
|
||||||
|
- If editing an action removes the moment a reaction depends on (for example, changing a Walk to a Say), use the same confirmation style as deleting an action with reactions. Explain that reactions will also be removed; on confirmation, delete the dangling reactions and downstream reactions. Canceling keeps the original action and reactions. Never silently retarget a reaction to an unrelated moment.
|
||||||
|
|
||||||
|
## Existing visual guidance and intentional departures
|
||||||
|
|
||||||
|
- Use the established Stage inspector visual system and its shared theme tokens for the inspector shell and controls.
|
||||||
|
- The no-close-button, outside-click dismissal behavior is an intentional departure from the Stage panel system’s fixed Close button, chosen by the user for this inspector.
|
||||||
|
- The user chose a sparse reaction flow and simple delete warning. Do not add an itemized dependent-reaction list to the delete confirmation.
|
||||||
|
- A persistent actor-specific inspector context and actor-named reopen affordance were proposed during UI/UX review; their final layout is not part of the decisions captured here.
|
||||||
|
|
||||||
|
## Architecture follow-up before implementation
|
||||||
|
|
||||||
|
The product decisions require an architecture specification for:
|
||||||
|
|
||||||
|
- Stable authored action identity across save/load, so links remain attached to the exact action rather than row position or action type.
|
||||||
|
- Stable stage-character and prop-instance identities independent of display names, so renames do not retarget actions or reactions and duplicate instances remain distinct.
|
||||||
|
- A Move To target linked to a prop instance must retain that identity separately from its approach position; free-position targets remain distinct from prop-linked targets.
|
||||||
|
- Event routing that can notify both reactions and external/stage handlers from one event, including the moving-prop contact event.
|
||||||
|
- Grouped concurrent actions, multi-step Then execution, reaction priority, interruption and resumption, replacement of an active reaction, and live actor following.
|
||||||
|
- Distinguishing authored Drop and Set Down events from incidental prop release during ragdoll or other runtime behavior.
|
||||||
|
|
||||||
|
These are implementation constraints to carry into the architecture phase; this brief does not claim the current runtime already supports them.
|
||||||
|
After Width: | Height: | Size: 112 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 121 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 119 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 119 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 117 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 1.5 MiB |
|
After Width: | Height: | Size: 1.1 MiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 1.2 MiB |
|
After Width: | Height: | Size: 1.2 MiB |
|
After Width: | Height: | Size: 1.2 MiB |
@@ -0,0 +1,191 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="1800" height="1260" viewBox="0 0 1800 1260" role="img" aria-labelledby="title desc">
|
||||||
|
<title id="title">Editor visual harmonization: three design directions</title>
|
||||||
|
<desc id="desc">A comparison board showing Familiar Studio, Adaptive Studio, and Focused Maker concepts for the Prop and Stickman Editors.</desc>
|
||||||
|
<defs>
|
||||||
|
<style>
|
||||||
|
.bg { fill: #171b24; }
|
||||||
|
.card { fill: #202633; stroke: #465064; stroke-width: 2; }
|
||||||
|
.card-rec { fill: #202b39; stroke: #22c6ff; stroke-width: 3; }
|
||||||
|
.surface { fill: #252b38; stroke: #596477; stroke-width: 1.5; }
|
||||||
|
.work { fill: #171d28; stroke: #657184; stroke-width: 1.5; }
|
||||||
|
.canvas { fill: #20232b; stroke: #7f8ca0; stroke-width: 1.5; }
|
||||||
|
.cyan { fill: #22c6ff; }
|
||||||
|
.cyan-stroke { stroke: #22c6ff; }
|
||||||
|
.blue { fill: #087dba; }
|
||||||
|
.muted { fill: #aab2c0; }
|
||||||
|
.text { fill: #f5f7fa; font-family: Arial, sans-serif; }
|
||||||
|
.small { font-size: 17px; }
|
||||||
|
.body { font-size: 20px; }
|
||||||
|
.label { font-size: 18px; font-weight: 700; }
|
||||||
|
.h2 { font-size: 30px; font-weight: 700; }
|
||||||
|
.title { font-size: 40px; font-weight: 700; }
|
||||||
|
.chip { fill: #2d3748; stroke: #596477; stroke-width: 1; }
|
||||||
|
.active-chip { fill: #103b4c; stroke: #22c6ff; stroke-width: 2; }
|
||||||
|
.line { stroke: #667286; stroke-width: 1.5; }
|
||||||
|
.accent-line { stroke: #22c6ff; stroke-width: 3; }
|
||||||
|
.selected { fill: none; stroke: #22c6ff; stroke-width: 3; }
|
||||||
|
.outline { fill: none; stroke: #f5f7fa; stroke-width: 2; }
|
||||||
|
.figure { fill: none; stroke: #aab2c0; stroke-width: 4; stroke-linecap: round; }
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<rect class="bg" width="1800" height="1260"/>
|
||||||
|
<text class="text title" x="48" y="62">Two editors, one visual language</text>
|
||||||
|
<text class="text body muted" x="48" y="98">Phase 0a · Three layout directions · Shared tokens and accessible states in every option</text>
|
||||||
|
|
||||||
|
<!-- Concept A -->
|
||||||
|
<g transform="translate(42,132)">
|
||||||
|
<rect class="card" width="556" height="1080" rx="20"/>
|
||||||
|
<text class="text h2" x="26" y="46">A. Familiar Studio</text>
|
||||||
|
<text class="text small muted" x="26" y="76">Keep today’s workspace arrangement</text>
|
||||||
|
<rect class="chip" x="26" y="94" width="176" height="34" rx="17"/>
|
||||||
|
<text class="text label small" x="42" y="117">LOWEST CHANGE</text>
|
||||||
|
|
||||||
|
<text class="text label" x="26" y="166">PROP EDITOR · WIDE</text>
|
||||||
|
<rect class="surface" x="26" y="180" width="504" height="260" rx="12"/>
|
||||||
|
<rect class="surface" x="36" y="190" width="484" height="38" rx="8"/>
|
||||||
|
<text class="text small" x="48" y="215">File Save <tspan fill="#aab2c0">Unsaved changes</tspan></text>
|
||||||
|
<rect class="active-chip" x="319" y="197" width="82" height="26" rx="13"/>
|
||||||
|
<text class="text small" x="330" y="216">Arrange</text>
|
||||||
|
<rect class="chip" x="405" y="197" width="68" height="26" rx="13"/>
|
||||||
|
<text class="text small" x="415" y="216">Reshape</text>
|
||||||
|
<rect class="chip" x="477" y="197" width="36" height="26" rx="13"/>
|
||||||
|
<text class="text small" x="484" y="216">…</text>
|
||||||
|
<rect class="canvas" x="36" y="237" width="322" height="192" rx="8"/>
|
||||||
|
<path class="figure" d="M196 278 L196 363 M196 297 L151 337 M196 297 L242 337 M196 363 L163 406 M196 363 L230 406"/>
|
||||||
|
<circle class="selected" cx="196" cy="278" r="16"/>
|
||||||
|
<rect class="surface" x="368" y="237" width="152" height="192" rx="8"/>
|
||||||
|
<text class="text small" x="381" y="263">Inspector</text>
|
||||||
|
<rect class="chip" x="380" y="275" width="128" height="34" rx="7"/>
|
||||||
|
<text class="text small" x="393" y="298">Fill color</text>
|
||||||
|
<rect class="chip" x="380" y="317" width="128" height="34" rx="7"/>
|
||||||
|
<text class="text small" x="393" y="340">Outline</text>
|
||||||
|
<rect class="blue" x="380" y="365" width="128" height="42" rx="9"/>
|
||||||
|
<text class="text small" x="403" y="392">Add Shape</text>
|
||||||
|
|
||||||
|
<text class="text label" x="26" y="484">STICKMAN EDITOR · WIDE</text>
|
||||||
|
<rect class="surface" x="26" y="498" width="504" height="330" rx="12"/>
|
||||||
|
<rect class="surface" x="36" y="508" width="484" height="35" rx="8"/>
|
||||||
|
<text class="text small" x="48" y="532">File Save View <tspan fill="#aab2c0">Saved</tspan></text>
|
||||||
|
<rect class="work" x="36" y="552" width="148" height="264" rx="8"/>
|
||||||
|
<rect class="work" x="194" y="552" width="148" height="264" rx="8"/>
|
||||||
|
<rect class="work" x="352" y="552" width="158" height="264" rx="8"/>
|
||||||
|
<text class="text small" x="48" y="577">Head · Torso</text>
|
||||||
|
<text class="text small" x="206" y="577">Arms · Legs</text>
|
||||||
|
<text class="text small" x="364" y="577">Whole Stickman</text>
|
||||||
|
<g fill="#252b38" stroke="#586477">
|
||||||
|
<rect x="46" y="591" width="58" height="62" rx="6"/><rect x="113" y="591" width="58" height="62" rx="6"/>
|
||||||
|
<rect x="46" y="662" width="58" height="62" rx="6"/><rect x="113" y="662" width="58" height="62" rx="6"/>
|
||||||
|
<rect x="46" y="733" width="58" height="62" rx="6"/><rect x="113" y="733" width="58" height="62" rx="6"/>
|
||||||
|
<rect x="204" y="591" width="58" height="62" rx="6"/><rect x="271" y="591" width="58" height="62" rx="6"/>
|
||||||
|
<rect x="204" y="662" width="58" height="62" rx="6"/><rect x="271" y="662" width="58" height="62" rx="6"/>
|
||||||
|
</g>
|
||||||
|
<rect class="selected" x="45" y="590" width="60" height="64" rx="7"/>
|
||||||
|
<path class="figure" d="M431 603 L431 708 M431 623 L405 651 M431 623 L457 651 M431 708 L411 760 M431 708 L451 760"/>
|
||||||
|
<text class="text small muted" x="26" y="858">Update styling, targets, focus, and dialogs;</text>
|
||||||
|
<text class="text small muted" x="26" y="882">keep all ten drawing panels visible.</text>
|
||||||
|
|
||||||
|
<line class="line" x1="26" y1="918" x2="530" y2="918"/>
|
||||||
|
<text class="text label" x="26" y="955">Tradeoff</text>
|
||||||
|
<text class="text body" x="26" y="986">Least workflow change. The ten small canvases</text>
|
||||||
|
<text class="text body" x="26" y="1014">stay dense; narrow windows may hide the preview.</text>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<!-- Concept B -->
|
||||||
|
<g transform="translate(622,132)">
|
||||||
|
<rect class="card-rec" width="556" height="1080" rx="20"/>
|
||||||
|
<text class="text h2" x="26" y="46">B. Adaptive Studio</text>
|
||||||
|
<text class="text small muted" x="26" y="76">Keep overview; add a workspace that can grow</text>
|
||||||
|
<rect class="active-chip" x="26" y="94" width="198" height="34" rx="17"/>
|
||||||
|
<text class="text label small" x="42" y="117">RECOMMENDED</text>
|
||||||
|
|
||||||
|
<text class="text label" x="26" y="166">PROP EDITOR · WIDE</text>
|
||||||
|
<rect class="surface" x="26" y="180" width="504" height="220" rx="12"/>
|
||||||
|
<rect class="surface" x="36" y="190" width="484" height="38" rx="8"/>
|
||||||
|
<text class="text small" x="48" y="215">File Save <tspan fill="#aab2c0">Saved</tspan></text>
|
||||||
|
<rect class="active-chip" x="312" y="197" width="82" height="26" rx="13"/>
|
||||||
|
<text class="text small" x="323" y="216">Arrange</text>
|
||||||
|
<rect class="chip" x="398" y="197" width="68" height="26" rx="13"/>
|
||||||
|
<text class="text small" x="408" y="216">Reshape</text>
|
||||||
|
<rect class="chip" x="470" y="197" width="42" height="26" rx="13"/>
|
||||||
|
<text class="text small" x="478" y="216">Attach</text>
|
||||||
|
<rect class="canvas" x="36" y="237" width="318" height="152" rx="8"/>
|
||||||
|
<path class="figure" d="M192 265 L192 337 M192 281 L154 312 M192 281 L230 312 M192 337 L164 375 M192 337 L221 375"/>
|
||||||
|
<circle class="selected" cx="192" cy="265" r="14"/>
|
||||||
|
<rect class="surface" x="364" y="237" width="156" height="152" rx="8"/>
|
||||||
|
<text class="text small" x="376" y="263">Scroll settings</text>
|
||||||
|
<rect class="chip" x="376" y="276" width="132" height="30" rx="7"/>
|
||||||
|
<rect class="chip" x="376" y="314" width="132" height="30" rx="7"/>
|
||||||
|
<rect class="blue" x="376" y="352" width="132" height="28" rx="7"/>
|
||||||
|
<text class="text small" x="399" y="372">Add Shape</text>
|
||||||
|
|
||||||
|
<text class="text label" x="26" y="446">STICKMAN · FOCUS ON PART</text>
|
||||||
|
<rect class="surface" x="26" y="460" width="504" height="354" rx="12"/>
|
||||||
|
<rect class="surface" x="36" y="470" width="484" height="36" rx="8"/>
|
||||||
|
<text class="text small" x="48" y="495">File Save <tspan fill="#aab2c0">Unsaved changes</tspan></text>
|
||||||
|
<rect class="chip" x="36" y="514" width="224" height="34" rx="8"/>
|
||||||
|
<text class="text small" x="95" y="537">Overview · 10 parts</text>
|
||||||
|
<rect class="active-chip" x="268" y="514" width="252" height="34" rx="8"/>
|
||||||
|
<text class="text small" x="330" y="537">Focus on Part</text>
|
||||||
|
<rect class="active-chip" x="36" y="556" width="484" height="38" rx="8"/>
|
||||||
|
<text class="text label" x="51" y="581">Body part: Head ▾</text>
|
||||||
|
<rect class="canvas" x="36" y="602" width="294" height="170" rx="8"/>
|
||||||
|
<text class="text small muted" x="50" y="625">Head drawing canvas</text>
|
||||||
|
<circle class="outline" cx="181" cy="688" r="43"/>
|
||||||
|
<circle class="selected" cx="181" cy="688" r="48"/>
|
||||||
|
<rect class="surface" x="340" y="602" width="180" height="170" rx="8"/>
|
||||||
|
<text class="text small" x="354" y="627">Whole Stickman</text>
|
||||||
|
<path class="figure" d="M430 643 L430 707 M430 656 L410 674 M430 656 L450 674 M430 707 L414 750 M430 707 L446 750"/>
|
||||||
|
<rect class="surface" x="36" y="780" width="484" height="26" rx="8"/>
|
||||||
|
<text class="text small" x="48" y="800">Add Shape Arrange Reshape Color + Future tools</text>
|
||||||
|
|
||||||
|
<text class="text small muted" x="26" y="848">Overview keeps all ten panels available; Focus makes</text>
|
||||||
|
<text class="text small muted" x="26" y="874">room for new tools and is useful at any window size.</text>
|
||||||
|
<line class="line" x1="26" y1="918" x2="530" y2="918"/>
|
||||||
|
<text class="text label" x="26" y="955">Tradeoff</text>
|
||||||
|
<text class="text body" x="26" y="986">More workspace and state work; switching views</text>
|
||||||
|
<text class="text body" x="26" y="1014">must preserve selection and drawing context.</text>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<!-- Concept C -->
|
||||||
|
<g transform="translate(1202,132)">
|
||||||
|
<rect class="card" width="556" height="1080" rx="20"/>
|
||||||
|
<text class="text h2" x="26" y="46">C. Focused Maker</text>
|
||||||
|
<text class="text small muted" x="26" y="76">Make one task and canvas the center of both editors</text>
|
||||||
|
<rect class="chip" x="26" y="94" width="205" height="34" rx="17"/>
|
||||||
|
<text class="text label small" x="42" y="117">LARGEST REDESIGN</text>
|
||||||
|
|
||||||
|
<text class="text label" x="26" y="166">ONE SHARED WORKSPACE PATTERN</text>
|
||||||
|
<rect class="surface" x="26" y="180" width="504" height="552" rx="12"/>
|
||||||
|
<rect class="surface" x="36" y="190" width="484" height="38" rx="8"/>
|
||||||
|
<text class="text small" x="48" y="215">File Save <tspan fill="#aab2c0">Saved</tspan></text>
|
||||||
|
<rect class="surface" x="36" y="238" width="484" height="50" rx="8"/>
|
||||||
|
<text class="text label" x="52" y="270">Choose task or body part ▾</text>
|
||||||
|
<rect class="canvas" x="36" y="298" width="318" height="338" rx="8"/>
|
||||||
|
<text class="text small muted" x="51" y="324">Large active canvas</text>
|
||||||
|
<path class="figure" d="M195 382 L195 500 M195 405 L151 444 M195 405 L239 444 M195 500 L160 570 M195 500 L230 570"/>
|
||||||
|
<circle class="selected" cx="195" cy="382" r="26"/>
|
||||||
|
<rect class="surface" x="364" y="298" width="156" height="338" rx="8"/>
|
||||||
|
<text class="text small" x="377" y="325">For this task</text>
|
||||||
|
<rect class="chip" x="376" y="340" width="132" height="39" rx="7"/>
|
||||||
|
<text class="text small" x="389" y="366">Color</text>
|
||||||
|
<rect class="chip" x="376" y="388" width="132" height="39" rx="7"/>
|
||||||
|
<text class="text small" x="389" y="414">Shape</text>
|
||||||
|
<rect class="blue" x="376" y="440" width="132" height="42" rx="8"/>
|
||||||
|
<text class="text small" x="392" y="467">Add Shape</text>
|
||||||
|
<rect class="chip" x="376" y="492" width="132" height="39" rx="7"/>
|
||||||
|
<text class="text small" x="389" y="518">Erase Shape</text>
|
||||||
|
<rect class="active-chip" x="36" y="646" width="484" height="72" rx="9"/>
|
||||||
|
<text class="text label" x="53" y="675">Preview drawer</text>
|
||||||
|
<text class="text small" x="53" y="702">Whole Stickman · Attach preview · Open</text>
|
||||||
|
|
||||||
|
<text class="text small muted" x="26" y="770">The same task-first frame in Prop and Stickman.</text>
|
||||||
|
<text class="text small muted" x="26" y="796">The preview opens only when needed.</text>
|
||||||
|
<line class="line" x1="26" y1="918" x2="530" y2="918"/>
|
||||||
|
<text class="text label" x="26" y="955">Tradeoff</text>
|
||||||
|
<text class="text body" x="26" y="986">Strongest focus and consistency, but most users</text>
|
||||||
|
<text class="text body" x="26" y="1014">must relearn navigation; all ten parts are no</text>
|
||||||
|
<text class="text body" x="26" y="1042">longer visible at once.</text>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<text class="text small muted" x="48" y="1240">For discussion only · Palette and labels follow the Editor Visual Style Guide; this is not final UI styling.</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 1.5 MiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 1.5 MiB |
|
After Width: | Height: | Size: 74 KiB |
@@ -0,0 +1,78 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="1000" viewBox="0 0 1600 1000">
|
||||||
|
<defs>
|
||||||
|
<pattern id="grid" width="64" height="64" patternUnits="userSpaceOnUse">
|
||||||
|
<path d="M64 0H0V64" fill="none" stroke="#FFFFFF" stroke-opacity=".055" stroke-width="1"/>
|
||||||
|
</pattern>
|
||||||
|
<linearGradient id="sky" x2="0" y2="1"><stop stop-color="#626E7E"/><stop offset="1" stop-color="#D3DEE5"/></linearGradient>
|
||||||
|
<linearGradient id="day" x2="0" y2="1"><stop stop-color="#52ADE8"/><stop offset="1" stop-color="#DFF5FF"/></linearGradient>
|
||||||
|
<linearGradient id="room" x2="0" y2="1"><stop stop-color="#DAD0B7"/><stop offset="1" stop-color="#F4E8CF"/></linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1600" height="1000" fill="#2A313B"/>
|
||||||
|
<rect width="1600" height="1000" fill="url(#grid)"/>
|
||||||
|
<rect x="84" y="54" width="1432" height="892" rx="30" fill="#202735" stroke="#566173" stroke-width="2"/>
|
||||||
|
<text x="136" y="123" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="42" font-weight="700">Choose a starter scene</text>
|
||||||
|
<text x="137" y="160" fill="#AEB8C8" font-family="Arial, sans-serif" font-size="21">Pick a place to begin. You can change the background later.</text>
|
||||||
|
|
||||||
|
<!-- Plain Background card -->
|
||||||
|
<g>
|
||||||
|
<rect x="134" y="190" width="638" height="302" rx="16" fill="#171C25" stroke="#22C6FF" stroke-width="4"/>
|
||||||
|
<rect x="146" y="202" width="614" height="170" rx="10" fill="#F5EFE0"/>
|
||||||
|
<rect x="146" y="202" width="614" height="170" rx="10" fill="none" stroke="#FFFFFF" stroke-opacity=".35" stroke-width="2"/>
|
||||||
|
<text x="453" y="416" text-anchor="middle" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="28" font-weight="700">Plain Background</text>
|
||||||
|
<text x="453" y="449" text-anchor="middle" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="20">An empty stage with one color.</text>
|
||||||
|
<text x="453" y="476" text-anchor="middle" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="20">Choose a new color whenever you like.</text>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<!-- Open Sky card -->
|
||||||
|
<g>
|
||||||
|
<rect x="798" y="190" width="638" height="302" rx="16" fill="#171C25" stroke="#465061" stroke-width="2"/>
|
||||||
|
<rect x="810" y="202" width="614" height="170" rx="10" fill="url(#sky)"/>
|
||||||
|
<circle cx="1286" cy="250" r="22" fill="#FFF0A2" stroke="#FFE27A" stroke-width="6"/>
|
||||||
|
<g fill="#F7FBFF" stroke="#DCE7F0" stroke-width="3">
|
||||||
|
<ellipse cx="921" cy="275" rx="37" ry="15"/><circle cx="902" cy="268" r="15"/><circle cx="925" cy="261" r="19"/><circle cx="946" cy="271" r="14"/>
|
||||||
|
<ellipse cx="1115" cy="316" rx="39" ry="14"/><circle cx="1094" cy="309" r="14"/><circle cx="1117" cy="302" r="18"/><circle cx="1140" cy="313" r="13"/>
|
||||||
|
</g>
|
||||||
|
<text x="1117" y="416" text-anchor="middle" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="28" font-weight="700">Open Sky</text>
|
||||||
|
<text x="1117" y="449" text-anchor="middle" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="20">An empty stage with a soft sky.</text>
|
||||||
|
<text x="1117" y="476" text-anchor="middle" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="20">Sun and clouds, ready for your story.</text>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<!-- Town Street card -->
|
||||||
|
<g>
|
||||||
|
<rect x="134" y="522" width="638" height="302" rx="16" fill="#171C25" stroke="#465061" stroke-width="2"/>
|
||||||
|
<rect x="146" y="534" width="614" height="170" rx="10" fill="url(#day)"/>
|
||||||
|
<circle cx="695" cy="566" r="17" fill="#FFE99A"/>
|
||||||
|
<g fill="#FFFFFF" stroke="#DCE7F0" stroke-width="2">
|
||||||
|
<ellipse cx="228" cy="574" rx="29" ry="11"/><circle cx="215" cy="568" r="11"/><circle cx="231" cy="563" r="14"/><circle cx="247" cy="572" r="10"/>
|
||||||
|
<ellipse cx="430" cy="600" rx="32" ry="11"/><circle cx="414" cy="594" r="11"/><circle cx="432" cy="588" r="14"/><circle cx="450" cy="598" r="10"/>
|
||||||
|
</g>
|
||||||
|
<rect x="146" y="643" width="614" height="39" fill="#58996B"/>
|
||||||
|
<rect x="146" y="682" width="614" height="22" fill="#5C626A"/>
|
||||||
|
<path d="M322 642L393 586L466 642Z" fill="#D86F58" stroke="#282D35" stroke-width="4"/>
|
||||||
|
<rect x="338" y="642" width="108" height="40" fill="#EAD6AE" stroke="#282D35" stroke-width="4"/>
|
||||||
|
<rect x="373" y="650" width="28" height="32" fill="#55A6D0" stroke="#282D35" stroke-width="3"/>
|
||||||
|
<rect x="394" y="612" width="24" height="27" fill="#68B9E2" stroke="#282D35" stroke-width="3"/>
|
||||||
|
<text x="453" y="752" text-anchor="middle" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="28" font-weight="700">Town Street</text>
|
||||||
|
<text x="453" y="785" text-anchor="middle" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="20">Cloudy sky, shops, trees,</text>
|
||||||
|
<text x="453" y="812" text-anchor="middle" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="20">sidewalk, and road.</text>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<!-- Living Room card -->
|
||||||
|
<g>
|
||||||
|
<rect x="798" y="522" width="638" height="302" rx="16" fill="#171C25" stroke="#465061" stroke-width="2"/>
|
||||||
|
<rect x="810" y="534" width="614" height="170" rx="10" fill="url(#room)"/>
|
||||||
|
<rect x="810" y="534" width="614" height="67" fill="url(#day)"/>
|
||||||
|
<circle cx="1306" cy="567" r="17" fill="#FFE99A"/>
|
||||||
|
<rect x="1038" y="570" width="103" height="98" fill="#91C5E3" stroke="#704E3D" stroke-width="8"/>
|
||||||
|
<path d="M1089 574V664M1042 620H1137" stroke="#FFF8E9" stroke-width="7"/>
|
||||||
|
<rect x="810" y="676" width="614" height="28" fill="#926545"/>
|
||||||
|
<rect x="876" y="630" width="135" height="54" rx="14" fill="#6D8E67" stroke="#4E5E49" stroke-width="4"/>
|
||||||
|
<rect x="890" y="614" width="107" height="36" rx="12" fill="#7FA17A" stroke="#4E5E49" stroke-width="4"/>
|
||||||
|
<text x="1117" y="752" text-anchor="middle" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="28" font-weight="700">Living Room</text>
|
||||||
|
<text x="1117" y="785" text-anchor="middle" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="20">A cozy room with a window,</text>
|
||||||
|
<text x="1117" y="812" text-anchor="middle" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="20">rug, and furniture.</text>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<rect x="692" y="864" width="216" height="58" rx="18" fill="#171C25" stroke="#586273" stroke-width="2"/>
|
||||||
|
<text x="800" y="902" text-anchor="middle" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="24" font-weight="700">Close</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 6.1 KiB |
|
After Width: | Height: | Size: 72 KiB |
@@ -0,0 +1,74 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="1000" viewBox="0 0 1600 1000">
|
||||||
|
<defs>
|
||||||
|
<pattern id="grid" width="64" height="64" patternUnits="userSpaceOnUse"><path d="M64 0H0V64" fill="none" stroke="#FFFFFF" stroke-opacity=".055" stroke-width="1"/></pattern>
|
||||||
|
<linearGradient id="clear" x2="0" y2="1"><stop stop-color="#52ADE8"/><stop offset="1" stop-color="#DFF5FF"/></linearGradient>
|
||||||
|
<linearGradient id="cloudy" x2="0" y2="1"><stop stop-color="#72839A"/><stop offset="1" stop-color="#D4E0E4"/></linearGradient>
|
||||||
|
<linearGradient id="sunset" x2="0" y2="1"><stop stop-color="#765A91"/><stop offset=".55" stop-color="#DF8E9A"/><stop offset="1" stop-color="#FFC980"/></linearGradient>
|
||||||
|
<linearGradient id="night" x2="0" y2="1"><stop stop-color="#101A3B"/><stop offset="1" stop-color="#536F97"/></linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1600" height="1000" fill="#2A313B"/><rect width="1600" height="1000" fill="url(#grid)"/>
|
||||||
|
<rect x="72" y="38" width="1456" height="924" rx="30" fill="#202735" stroke="#566173" stroke-width="2"/>
|
||||||
|
<text x="120" y="102" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="38" font-weight="700">Scenery</text>
|
||||||
|
<rect x="120" y="124" width="230" height="54" rx="16" fill="#12394A" stroke="#22C6FF" stroke-width="3"/>
|
||||||
|
<text x="235" y="160" text-anchor="middle" fill="#F6FAFF" font-family="Arial, sans-serif" font-size="22" font-weight="700">Backgrounds</text>
|
||||||
|
<rect x="365" y="124" width="190" height="54" rx="16" fill="#171C25" stroke="#566173" stroke-width="2"/>
|
||||||
|
<text x="460" y="160" text-anchor="middle" fill="#DCE3EC" font-family="Arial, sans-serif" font-size="22">Artwork</text>
|
||||||
|
<text x="120" y="224" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="25" font-weight="700">Choose the scene background</text>
|
||||||
|
|
||||||
|
<!-- Plain Background -->
|
||||||
|
<g>
|
||||||
|
<rect x="120" y="250" width="420" height="246" rx="16" fill="#171C25" stroke="#22C6FF" stroke-width="4"/>
|
||||||
|
<rect x="132" y="262" width="396" height="157" rx="10" fill="#F5EFE0"/>
|
||||||
|
<rect x="145" y="274" width="165" height="32" rx="12" fill="#12394A" stroke="#22C6FF" stroke-width="2"/>
|
||||||
|
<text x="227" y="297" text-anchor="middle" fill="#F7FBFF" font-family="Arial, sans-serif" font-size="16" font-weight="700">Current background</text>
|
||||||
|
<text x="330" y="458" text-anchor="middle" fill="#F6F8FC" font-family="Arial, sans-serif" font-size="23" font-weight="700">Plain Background</text>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<!-- Clear Day -->
|
||||||
|
<g>
|
||||||
|
<rect x="590" y="250" width="420" height="246" rx="16" fill="#171C25" stroke="#465061" stroke-width="2"/>
|
||||||
|
<rect x="602" y="262" width="396" height="157" rx="10" fill="url(#clear)"/>
|
||||||
|
<circle cx="910" cy="304" r="23" fill="#FFE99A" stroke="#FFF3BD" stroke-width="5"/>
|
||||||
|
<g fill="#FFFFFF" stroke="#DFEAF1" stroke-width="2"><ellipse cx="714" cy="354" rx="43" ry="14"/><circle cx="694" cy="348" r="13"/><circle cx="717" cy="341" r="18"/><circle cx="741" cy="352" r="12"/></g>
|
||||||
|
<text x="800" y="458" text-anchor="middle" fill="#F6F8FC" font-family="Arial, sans-serif" font-size="23" font-weight="700">Clear Day</text>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<!-- Cloudy Day -->
|
||||||
|
<g>
|
||||||
|
<rect x="1060" y="250" width="420" height="246" rx="16" fill="#171C25" stroke="#465061" stroke-width="2"/>
|
||||||
|
<rect x="1072" y="262" width="396" height="157" rx="10" fill="url(#cloudy)"/>
|
||||||
|
<g fill="#F8FBFE" stroke="#E2EBF1" stroke-width="2"><ellipse cx="1190" cy="326" rx="42" ry="14"/><circle cx="1170" cy="320" r="14"/><circle cx="1194" cy="312" r="18"/><circle cx="1216" cy="324" r="12"/><ellipse cx="1360" cy="372" rx="42" ry="13"/><circle cx="1342" cy="366" r="12"/><circle cx="1362" cy="358" r="17"/><circle cx="1384" cy="369" r="12"/></g>
|
||||||
|
<text x="1270" y="458" text-anchor="middle" fill="#F6F8FC" font-family="Arial, sans-serif" font-size="23" font-weight="700">Cloudy Day</text>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<!-- Sunset -->
|
||||||
|
<g>
|
||||||
|
<rect x="120" y="520" width="420" height="220" rx="16" fill="#171C25" stroke="#465061" stroke-width="2"/>
|
||||||
|
<rect x="132" y="532" width="396" height="135" rx="10" fill="url(#sunset)"/>
|
||||||
|
<circle cx="330" cy="623" r="23" fill="#FFE09B"/><path d="M132 640Q330 600 528 640V667H132Z" fill="#5C6D76" opacity=".7"/>
|
||||||
|
<text x="330" y="713" text-anchor="middle" fill="#F6F8FC" font-family="Arial, sans-serif" font-size="23" font-weight="700">Sunset</text>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<!-- Starry Night -->
|
||||||
|
<g>
|
||||||
|
<rect x="590" y="520" width="420" height="220" rx="16" fill="#171C25" stroke="#465061" stroke-width="2"/>
|
||||||
|
<rect x="602" y="532" width="396" height="135" rx="10" fill="url(#night)"/>
|
||||||
|
<g fill="#FFE8A5"><circle cx="664" cy="563" r="3"/><circle cx="740" cy="604" r="3"/><circle cx="806" cy="555" r="4"/><circle cx="927" cy="580" r="3"/><circle cx="889" cy="635" r="3"/></g>
|
||||||
|
<path d="M875 560a28 28 0 1 0 26 46a22 22 0 1 1-26-46" fill="#FFF0BE"/>
|
||||||
|
<text x="800" y="713" text-anchor="middle" fill="#F6F8FC" font-family="Arial, sans-serif" font-size="23" font-weight="700">Starry Night</text>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<text x="1060" y="558" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="22" font-weight="700">More backgrounds</text>
|
||||||
|
<rect x="1060" y="578" width="195" height="100" rx="15" fill="#171C25" stroke="#566173" stroke-width="2"/>
|
||||||
|
<rect x="1077" y="596" width="52" height="56" rx="8" fill="#C6A36C" stroke="#E7D0A6" stroke-width="2"/>
|
||||||
|
<path d="M1083 606h40M1083 618h40M1083 630h40M1083 642h40" stroke="#896644" stroke-width="3"/>
|
||||||
|
<text x="1183" y="635" text-anchor="middle" fill="#F6F8FC" font-family="Arial, sans-serif" font-size="19" font-weight="700">Wall panel</text>
|
||||||
|
<rect x="1274" y="578" width="206" height="100" rx="15" fill="#171C25" stroke="#566173" stroke-width="2"/>
|
||||||
|
<rect x="1290" y="596" width="52" height="56" rx="8" fill="#7AA474" stroke="#A5C39C" stroke-width="2"/>
|
||||||
|
<path d="M1297 609h38M1297 622h38M1297 635h38" stroke="#D7E6C5" stroke-width="2" opacity=".7"/>
|
||||||
|
<text x="1402" y="622" text-anchor="middle" fill="#F6F8FC" font-family="Arial, sans-serif" font-size="16" font-weight="700">Background</text>
|
||||||
|
<text x="1402" y="644" text-anchor="middle" fill="#F6F8FC" font-family="Arial, sans-serif" font-size="16" font-weight="700">ground</text>
|
||||||
|
|
||||||
|
<rect x="692" y="874" width="216" height="58" rx="18" fill="#171C25" stroke="#586273" stroke-width="2"/>
|
||||||
|
<text x="800" y="912" text-anchor="middle" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="24" font-weight="700">Close</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 6.3 KiB |
|
After Width: | Height: | Size: 50 KiB |
@@ -0,0 +1,45 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="1000" viewBox="0 0 1600 1000">
|
||||||
|
<defs>
|
||||||
|
<pattern id="grid" width="64" height="64" patternUnits="userSpaceOnUse"><path d="M64 0H0V64" fill="none" stroke="#FFFFFF" stroke-opacity=".055" stroke-width="1"/></pattern>
|
||||||
|
</defs>
|
||||||
|
<rect width="1600" height="1000" fill="#2A313B"/><rect width="1600" height="1000" fill="url(#grid)"/>
|
||||||
|
<rect x="76" y="46" width="1448" height="908" rx="30" fill="#202735" stroke="#566173" stroke-width="2"/>
|
||||||
|
<rect x="116" y="82" width="250" height="54" rx="16" fill="#171C25" stroke="#566173" stroke-width="2"/>
|
||||||
|
<text x="241" y="117" text-anchor="middle" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="21" font-weight="700">‹ Backgrounds</text>
|
||||||
|
<text x="116" y="194" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="38" font-weight="700">Plain Background</text>
|
||||||
|
<text x="118" y="231" fill="#B8C2D0" font-family="Arial, sans-serif" font-size="21">Tap a color to use it on the Stage.</text>
|
||||||
|
|
||||||
|
<text x="120" y="279" fill="#EAF0F8" font-family="Arial, sans-serif" font-size="22" font-weight="700">Preview</text>
|
||||||
|
<rect x="120" y="296" width="1360" height="190" rx="22" fill="#F5EFE0" stroke="#F4F7FB" stroke-width="4"/>
|
||||||
|
|
||||||
|
<rect x="120" y="520" width="310" height="280" rx="18" fill="#171C25" stroke="#3C4656" stroke-width="2"/>
|
||||||
|
<text x="150" y="564" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="22" font-weight="700">Color</text>
|
||||||
|
<rect x="150" y="584" width="68" height="68" rx="12" fill="#F5EFE0" stroke="#22C6FF" stroke-width="4"/>
|
||||||
|
<circle cx="212" cy="646" r="16" fill="#087DBA" stroke="#44CCFF" stroke-width="2"/>
|
||||||
|
<path d="M205 652 L207 646 L215 638 L220 643 L212 651 Z M213 640 L218 645 M205 652 L211 650" fill="none" stroke="#FFFFFF" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<text x="234" y="625" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="23" font-weight="700">#F5EFE0</text>
|
||||||
|
<text x="150" y="696" fill="#AEB8C8" font-family="Arial, sans-serif" font-size="18">Tap swatch to pick a custom color</text>
|
||||||
|
|
||||||
|
<rect x="454" y="520" width="470" height="280" rx="18" fill="#171C25" stroke="#3C4656" stroke-width="2"/>
|
||||||
|
<text x="484" y="564" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="22" font-weight="700">Recently used</text>
|
||||||
|
<g stroke="#DCE3EC" stroke-width="3">
|
||||||
|
<rect x="484" y="590" width="64" height="64" rx="12" fill="#FFB703"/><rect x="560" y="590" width="64" height="64" rx="12" fill="#24B9E8"/>
|
||||||
|
<rect x="636" y="590" width="64" height="64" rx="12" fill="#00A542"/><rect x="712" y="590" width="64" height="64" rx="12" fill="#0798EA"/>
|
||||||
|
<rect x="788" y="590" width="64" height="64" rx="12" fill="#F5EFE0" stroke="#22C6FF" stroke-width="5"/>
|
||||||
|
</g>
|
||||||
|
<g stroke="#DCE3EC" stroke-width="3">
|
||||||
|
<rect x="484" y="682" width="64" height="64" rx="12" fill="#F04C53"/>
|
||||||
|
<rect x="560" y="682" width="64" height="64" rx="12" fill="#A855F7"/>
|
||||||
|
<rect x="636" y="682" width="64" height="64" rx="12" fill="#FFFFFF"/>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<rect x="948" y="520" width="532" height="280" rx="18" fill="#171C25" stroke="#3C4656" stroke-width="2"/>
|
||||||
|
<text x="978" y="564" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="22" font-weight="700">Colors</text>
|
||||||
|
<g stroke="#DCE3EC" stroke-width="3">
|
||||||
|
<rect x="978" y="590" width="64" height="64" rx="12" fill="#FFFFFF"/><rect x="1054" y="590" width="64" height="64" rx="12" fill="#171717"/>
|
||||||
|
<rect x="1130" y="590" width="64" height="64" rx="12" fill="#22B8E6"/><rect x="1206" y="590" width="64" height="64" rx="12" fill="#FFB703"/>
|
||||||
|
<rect x="1282" y="590" width="64" height="64" rx="12" fill="#2AD67B"/><rect x="1358" y="590" width="64" height="64" rx="12" fill="#F04C53"/>
|
||||||
|
</g>
|
||||||
|
<rect x="670" y="858" width="260" height="62" rx="18" fill="#171C25" stroke="#586273" stroke-width="2"/>
|
||||||
|
<text x="800" y="898" text-anchor="middle" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="22" font-weight="700">Back to Backgrounds</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 72 KiB |
@@ -0,0 +1,49 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="1000" viewBox="0 0 1600 1000">
|
||||||
|
<defs>
|
||||||
|
<pattern id="grid" width="64" height="64" patternUnits="userSpaceOnUse"><path d="M64 0H0V64" fill="none" stroke="#FFFFFF" stroke-opacity=".055" stroke-width="1"/></pattern>
|
||||||
|
<linearGradient id="fieldBase" x1="0" x2="1"><stop stop-color="#F2BF48"/><stop offset="1" stop-color="#F2BF48"/></linearGradient>
|
||||||
|
<linearGradient id="whiteFade" x1="0" x2="1"><stop stop-color="#FFFFFF"/><stop offset="1" stop-color="#FFFFFF" stop-opacity="0"/></linearGradient>
|
||||||
|
<linearGradient id="blackFade" x1="0" y1="0" x2="0" y2="1"><stop stop-color="#000000" stop-opacity="0"/><stop offset="1" stop-color="#000000"/></linearGradient>
|
||||||
|
<linearGradient id="hues" x1="0" y1="0" x2="0" y2="1"><stop stop-color="#FF0000"/><stop offset=".17" stop-color="#FFFF00"/><stop offset=".34" stop-color="#00FF00"/><stop offset=".51" stop-color="#00FFFF"/><stop offset=".68" stop-color="#0000FF"/><stop offset=".84" stop-color="#FF00FF"/><stop offset="1" stop-color="#FF0000"/></linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1600" height="1000" fill="#2A313B"/><rect width="1600" height="1000" fill="url(#grid)"/>
|
||||||
|
<rect x="175" y="56" width="1250" height="888" rx="30" fill="#202735" stroke="#566173" stroke-width="2"/>
|
||||||
|
<text x="800" y="119" text-anchor="middle" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="40" font-weight="700">Choose background color</text>
|
||||||
|
<text x="230" y="165" fill="#EAF0F8" font-family="Arial, sans-serif" font-size="22" font-weight="700">Preview</text>
|
||||||
|
<rect x="230" y="184" width="1140" height="145" rx="22" fill="#F5EFE0" stroke="#F4F7FB" stroke-width="4"/>
|
||||||
|
|
||||||
|
<!-- saturation and value field -->
|
||||||
|
<rect x="230" y="356" width="890" height="365" rx="10" fill="url(#fieldBase)"/>
|
||||||
|
<rect x="230" y="356" width="890" height="365" rx="10" fill="url(#whiteFade)"/>
|
||||||
|
<rect x="230" y="356" width="890" height="365" rx="10" fill="url(#blackFade)"/>
|
||||||
|
<rect x="230" y="356" width="890" height="365" rx="10" fill="none" stroke="#AEB8C8" stroke-width="2"/>
|
||||||
|
<circle cx="328" cy="412" r="12" fill="none" stroke="#111827" stroke-width="5"/><circle cx="328" cy="412" r="8" fill="none" stroke="#FFFFFF" stroke-width="3"/>
|
||||||
|
|
||||||
|
<!-- hue bar -->
|
||||||
|
<rect x="1144" y="356" width="76" height="365" rx="12" fill="url(#hues)" stroke="#AEB8C8" stroke-width="2"/>
|
||||||
|
<path d="M1136 397H1228" stroke="#10151E" stroke-width="8"/><path d="M1136 397H1228" stroke="#FFFFFF" stroke-width="4"/>
|
||||||
|
|
||||||
|
<!-- mode tabs -->
|
||||||
|
<rect x="230" y="744" width="990" height="56" rx="14" fill="#171C25" stroke="#566173" stroke-width="2"/>
|
||||||
|
<rect x="232" y="746" width="326" height="52" rx="12" fill="#2D3543" stroke="#22C6FF" stroke-width="2"/>
|
||||||
|
<text x="395" y="781" text-anchor="middle" fill="#FFFFFF" font-family="Arial, sans-serif" font-size="21" font-weight="700">RGB</text>
|
||||||
|
<path d="M560 750V795M890 750V795" stroke="#566173" stroke-width="2"/>
|
||||||
|
<text x="725" y="781" text-anchor="middle" fill="#DAE1EA" font-family="Arial, sans-serif" font-size="21">HSV</text>
|
||||||
|
<text x="1055" y="781" text-anchor="middle" fill="#DAE1EA" font-family="Arial, sans-serif" font-size="21">Linear</text>
|
||||||
|
|
||||||
|
<!-- selected value -->
|
||||||
|
<rect x="1245" y="356" width="125" height="365" rx="16" fill="#171C25" stroke="#3C4656" stroke-width="2"/>
|
||||||
|
<text x="1307" y="391" text-anchor="middle" fill="#AEB8C8" font-family="Arial, sans-serif" font-size="16">COLOR</text>
|
||||||
|
<rect x="1268" y="416" width="79" height="79" rx="14" fill="#F5EFE0" stroke="#22C6FF" stroke-width="3"/>
|
||||||
|
<text x="1307" y="531" text-anchor="middle" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="16">Hex</text>
|
||||||
|
<rect x="1260" y="546" width="94" height="44" rx="9" fill="#252D3A" stroke="#657184" stroke-width="2"/>
|
||||||
|
<text x="1307" y="575" text-anchor="middle" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="18">F5EFE0</text>
|
||||||
|
<text x="1307" y="634" text-anchor="middle" fill="#AEB8C8" font-family="Arial, sans-serif" font-size="15">R 245</text>
|
||||||
|
<text x="1307" y="662" text-anchor="middle" fill="#AEB8C8" font-family="Arial, sans-serif" font-size="15">G 239</text>
|
||||||
|
<text x="1307" y="690" text-anchor="middle" fill="#AEB8C8" font-family="Arial, sans-serif" font-size="15">B 224</text>
|
||||||
|
|
||||||
|
<rect x="835" y="850" width="230" height="62" rx="18" fill="#171C25" stroke="#586273" stroke-width="2"/>
|
||||||
|
<text x="950" y="890" text-anchor="middle" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="22" font-weight="700">Back</text>
|
||||||
|
<rect x="1085" y="850" width="285" height="62" rx="18" fill="#087DBA" stroke="#44CCFF" stroke-width="3"/>
|
||||||
|
<text x="1227" y="890" text-anchor="middle" fill="#FFFFFF" font-family="Arial, sans-serif" font-size="22" font-weight="700">Use color</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.6 KiB |
|
After Width: | Height: | Size: 137 KiB |
@@ -0,0 +1,92 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="1800" height="1200" viewBox="0 0 1800 1200">
|
||||||
|
<defs>
|
||||||
|
<pattern id="grid" width="64" height="64" patternUnits="userSpaceOnUse">
|
||||||
|
<path d="M64 0H0V64" fill="none" stroke="#FFFFFF" stroke-opacity=".055" stroke-width="1"/>
|
||||||
|
</pattern>
|
||||||
|
<linearGradient id="open-sky" x2="0" y2="1"><stop stop-color="#626E7E"/><stop offset="1" stop-color="#D3DEE5"/></linearGradient>
|
||||||
|
<linearGradient id="town-sky" x2="0" y2="1"><stop stop-color="#52ADE8"/><stop offset="1" stop-color="#DFF5FF"/></linearGradient>
|
||||||
|
<linearGradient id="room-wall" x2="0" y2="1"><stop stop-color="#E6DABD"/><stop offset="1" stop-color="#F4E8CF"/></linearGradient>
|
||||||
|
<clipPath id="plain-clip"><rect x="134" y="198" width="742" height="276" rx="12"/></clipPath>
|
||||||
|
<clipPath id="sky-clip"><rect x="924" y="198" width="742" height="276" rx="12"/></clipPath>
|
||||||
|
<clipPath id="town-clip"><rect x="134" y="638" width="742" height="276" rx="12"/></clipPath>
|
||||||
|
<clipPath id="room-clip"><rect x="924" y="638" width="742" height="276" rx="12"/></clipPath>
|
||||||
|
</defs>
|
||||||
|
|
||||||
|
<rect width="1800" height="1200" fill="#2A313B"/>
|
||||||
|
<rect width="1800" height="1200" fill="url(#grid)"/>
|
||||||
|
<rect x="65" y="35" width="1670" height="1130" rx="30" fill="#202735" stroke="#566173" stroke-width="2"/>
|
||||||
|
<text x="122" y="111" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="46" font-weight="700">Choose a starter scene</text>
|
||||||
|
<text x="124" y="151" fill="#AEB8C8" font-family="Arial, sans-serif" font-size="23">Pick a place to begin. You can change the background later.</text>
|
||||||
|
|
||||||
|
<!-- The larger cards devote almost twice the original area to the scene preview. -->
|
||||||
|
<rect x="120" y="184" width="770" height="418" rx="20" fill="#171C25" stroke="#22C6FF" stroke-width="4"/>
|
||||||
|
<rect x="910" y="184" width="770" height="418" rx="20" fill="#171C25" stroke="#596474" stroke-width="2"/>
|
||||||
|
<rect x="120" y="624" width="770" height="418" rx="20" fill="#171C25" stroke="#596474" stroke-width="2"/>
|
||||||
|
<rect x="910" y="624" width="770" height="418" rx="20" fill="#171C25" stroke="#596474" stroke-width="2"/>
|
||||||
|
|
||||||
|
<g clip-path="url(#plain-clip)">
|
||||||
|
<rect x="134" y="198" width="742" height="276" fill="#F5EFE0"/>
|
||||||
|
</g>
|
||||||
|
<rect x="134" y="198" width="742" height="276" rx="12" fill="none" stroke="#FFFFFF" stroke-opacity=".38" stroke-width="2"/>
|
||||||
|
|
||||||
|
<g clip-path="url(#sky-clip)">
|
||||||
|
<rect x="924" y="198" width="742" height="276" fill="url(#open-sky)"/>
|
||||||
|
<circle cx="1525" cy="267" r="26" fill="#FFF1A8" stroke="#FFE27A" stroke-width="7"/>
|
||||||
|
<g fill="#F7FBFF" stroke="#DBE6EF" stroke-width="3">
|
||||||
|
<ellipse cx="1042" cy="297" rx="49" ry="19"/><circle cx="1014" cy="287" r="20"/><circle cx="1043" cy="278" r="25"/><circle cx="1077" cy="291" r="20"/>
|
||||||
|
<ellipse cx="1342" cy="365" rx="53" ry="18"/><circle cx="1312" cy="355" r="20"/><circle cx="1343" cy="345" r="25"/><circle cx="1378" cy="358" r="19"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<g clip-path="url(#town-clip)">
|
||||||
|
<rect x="134" y="638" width="742" height="276" fill="url(#town-sky)"/>
|
||||||
|
<circle cx="781" cy="699" r="24" fill="#FFE99A"/>
|
||||||
|
<g fill="#FFFFFF" stroke="#DCE7F0" stroke-width="3">
|
||||||
|
<ellipse cx="245" cy="707" rx="43" ry="16"/><circle cx="222" cy="699" r="17"/><circle cx="249" cy="690" r="21"/><circle cx="277" cy="704" r="15"/>
|
||||||
|
<ellipse cx="532" cy="737" rx="39" ry="14"/><circle cx="511" cy="730" r="15"/><circle cx="534" cy="721" r="19"/><circle cx="558" cy="733" r="14"/>
|
||||||
|
</g>
|
||||||
|
<rect x="134" y="823" width="742" height="47" fill="#5D9D70"/>
|
||||||
|
<rect x="134" y="870" width="742" height="44" fill="#575F68"/>
|
||||||
|
<path d="M329 820L432 728L534 820Z" fill="#D8705A" stroke="#28313A" stroke-width="5"/>
|
||||||
|
<rect x="349" y="820" width="166" height="51" fill="#E8D4AC" stroke="#28313A" stroke-width="5"/>
|
||||||
|
<rect x="415" y="834" width="39" height="37" fill="#58A7D4" stroke="#28313A" stroke-width="4"/>
|
||||||
|
<rect x="461" y="769" width="33" height="40" fill="#71BBDC" stroke="#28313A" stroke-width="4"/>
|
||||||
|
<path d="M647 821V746" stroke="#594D3B" stroke-width="12"/>
|
||||||
|
<circle cx="647" cy="738" r="48" fill="#4F9B67" stroke="#336D4C" stroke-width="5"/>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<g clip-path="url(#room-clip)">
|
||||||
|
<rect x="924" y="638" width="742" height="276" fill="url(#room-wall)"/>
|
||||||
|
<rect x="924" y="638" width="742" height="74" fill="url(#town-sky)"/>
|
||||||
|
<circle cx="1576" cy="680" r="23" fill="#FFE99A"/>
|
||||||
|
<rect x="1232" y="677" width="150" height="141" fill="#91C5E3" stroke="#704E3D" stroke-width="10"/>
|
||||||
|
<path d="M1307 683V812M1238 747H1376" stroke="#FFF8E9" stroke-width="8"/>
|
||||||
|
<rect x="924" y="866" width="742" height="48" fill="#926545"/>
|
||||||
|
<ellipse cx="1149" cy="865" rx="143" ry="26" fill="#BA7F5B"/>
|
||||||
|
<rect x="1041" y="792" width="226" height="81" rx="18" fill="#6D8E67" stroke="#4E5E49" stroke-width="6"/>
|
||||||
|
<rect x="1061" y="769" width="186" height="57" rx="18" fill="#80A17A" stroke="#4E5E49" stroke-width="6"/>
|
||||||
|
<rect x="1481" y="826" width="88" height="43" rx="6" fill="#C49371" stroke="#654C3E" stroke-width="5"/>
|
||||||
|
<path d="M1524 826V779" stroke="#755A43" stroke-width="6"/>
|
||||||
|
<circle cx="1524" cy="764" r="25" fill="#FFF5DF" stroke="#755A43" stroke-width="5"/>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<g fill="#F8FAFC" font-family="Arial, sans-serif" text-anchor="middle" font-weight="700" font-size="32">
|
||||||
|
<text x="505" y="521">Plain Background</text>
|
||||||
|
<text x="1295" y="521">Open Sky</text>
|
||||||
|
<text x="505" y="961">Town Street</text>
|
||||||
|
<text x="1295" y="961">Living Room</text>
|
||||||
|
</g>
|
||||||
|
<g fill="#F5F7FA" font-family="Arial, sans-serif" text-anchor="middle" font-size="22">
|
||||||
|
<text x="505" y="558">An empty stage with one color.</text>
|
||||||
|
<text x="505" y="589">Choose a new color whenever you like.</text>
|
||||||
|
<text x="1295" y="558">An empty stage with a soft sky.</text>
|
||||||
|
<text x="1295" y="589">Sun and clouds, ready for your story.</text>
|
||||||
|
<text x="505" y="998">Cloudy sky, shops, trees,</text>
|
||||||
|
<text x="505" y="1029">sidewalk, and road.</text>
|
||||||
|
<text x="1295" y="998">A cozy room with a window,</text>
|
||||||
|
<text x="1295" y="1029">rug, and furniture.</text>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<rect x="790" y="1077" width="220" height="64" rx="18" fill="#171C25" stroke="#667386" stroke-width="2"/>
|
||||||
|
<text x="900" y="1118" text-anchor="middle" fill="#F5F7FA" font-family="Arial, sans-serif" font-size="26" font-weight="700">Close</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 6.2 KiB |
|
After Width: | Height: | Size: 1.3 MiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 1.3 MiB |
|
After Width: | Height: | Size: 94 KiB |
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 86 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 79 KiB |
|
After Width: | Height: | Size: 83 KiB |
@@ -0,0 +1,74 @@
|
|||||||
|
# Phase 19 — Background Ground and Wall Color
|
||||||
|
|
||||||
|
> **Status (2026-10-22):** Implemented and user/editor verified as part of Phase 19. The scenery suite passes **706 checks with 0 failures**. This brief remains the product-level record; runtime contracts are in the linked architecture specification.
|
||||||
|
|
||||||
|
## Goal and audience
|
||||||
|
|
||||||
|
Help a child make a Stage feel like a coherent place. Wall panels need a working color choice, and broad ground visible behind buildings or furniture needs its own decorative surface. A child should be able to make the grassy town backdrop in the reference scene, or an indoor carpeted backdrop, without changing where stickmen can walk.
|
||||||
|
|
||||||
|
The audience is a child arranging scenes in the Sandbox Stage's EDIT mode and then directing or playing them. The distinction remains simple: **Background ground looks like ground; walkable Ground is where stickmen walk.**
|
||||||
|
|
||||||
|
## Desired outcome and story value
|
||||||
|
|
||||||
|
- Make a town green behind its buildings and trees while the ordinary Ground tiles still define the walking route.
|
||||||
|
- Give a room a carpeted background area in a chosen color, or give an outdoor set a concrete backdrop.
|
||||||
|
- Change a painted wall's color and choose a brick or wood color that still looks textured.
|
||||||
|
- Reuse favorite colors across walls and carpet without reconstructing a color in every scene.
|
||||||
|
- Save, reopen, resize, and rearrange these pieces without losing their look or making decorative areas solid.
|
||||||
|
|
||||||
|
## Child flow and behavior
|
||||||
|
|
||||||
|
### Choose and edit wall color
|
||||||
|
|
||||||
|
In **Scenery → Backgrounds → Wall panel**, the child chooses **Paint**, **Brick**, or **Wood**, then chooses a color. Eight recently used colors appear first, newest first, followed by useful preset colors. **More colors…** opens a color dialog with **Use color** and **Cancel**. A confirmed color updates the small finish preview and the Stage placement ghost before the child draws the panel. Cancel restores the prior choice.
|
||||||
|
|
||||||
|
Dragging a rectangle places one wall panel with the chosen finish and color. In **Edit Scenery**, selecting a wall panel exposes **Look** and **Color** in its inspector. A change affects only that panel. The existing move, resize, wall-area erase, and erase-piece behaviors continue to apply.
|
||||||
|
|
||||||
|
Paint uses the chosen color as its main surface. Brick and Wood use it to shift their material palettes while retaining recognizable mortar, grain, shading, and variation. Their default choices should look like believable brick and wood; custom colors remain available for imaginative sets. Preview and placed panel must agree about the result.
|
||||||
|
|
||||||
|
### Draw Background ground
|
||||||
|
|
||||||
|
The **Scenery → Backgrounds** chooser gains **Background ground** immediately after **Wall panel**, with large **Grass**, **Concrete**, and **Carpet** cards. The cards and placement prompt say **“Decorative only · Stickmen don’t walk here.”** The choice is separate from the existing **Ground** palette tool. Carpet has the same recent and preset color choices and **More colors…** flow; confirmed color changes the carpet hue while its fabric detail remains visible.
|
||||||
|
|
||||||
|
The child chooses a look, sees a patterned ghost, drags a rectangle, and releases to place a finite decorative surface. In **Edit Scenery**, that piece can be selected, moved, resized, restyled, recolored where applicable, or erased using the same child-facing model as a wall panel. Broad surfaces must remain easy to select in Edit Scenery without taking ordinary EDIT clicks intended for Ground, Props, or characters.
|
||||||
|
|
||||||
|
Background ground sits above the Sky and behind wall panels, Far and Near scenery artwork, buildings, trees, and walkable Ground. It is fixed scenery in EDIT, DIRECT, and PLAY. It provides no collision, support, navigation, pickup, Use action, or event target. Walkable Ground keeps its existing physics and terrain tools.
|
||||||
|
|
||||||
|
Grass has restrained detail throughout the filled area, so a large green panel reads as grass at normal Stage zoom. Concrete has a distinct surface treatment, and Carpet retains a fabric-like look at chosen colors. Motifs use a stable world scale: resizing reveals or hides more pattern rather than stretching it, and adjoining panels of one look align visibly. Their previews should show the same character as the Stage rendering.
|
||||||
|
|
||||||
|
### Reuse colors
|
||||||
|
|
||||||
|
Wall Paint, Brick, Wood, and Background ground Carpet share one list of **eight recently used colors**, newest first. Choosing a preset or confirming **Use color** puts that color first and removes any duplicate; the list persists in user settings across scenes. Canceling a custom color dialog or its tentative preview does not add a color. The color history is a convenience for choosing future looks; changing it does not recolor existing pieces.
|
||||||
|
|
||||||
|
## Success criteria
|
||||||
|
|
||||||
|
- A child can color a new Paint wall and recolor one selected wall without changing another wall. Brick and Wood respond visibly to color while their material details remain legible.
|
||||||
|
- A child can place a broad Grass backdrop behind a town's buildings, then place ordinary Ground in front. A stickman follows only the walkable Ground during PLAY.
|
||||||
|
- Grass texture remains visible inside a large backdrop at common camera views; Concrete and Carpet are distinguishable in chooser cards and on Stage. A colored Carpet still looks like fabric.
|
||||||
|
- Background ground remains finite and editable. Moving or resizing a piece preserves its motif scale; adjoining matching pieces have aligned motifs.
|
||||||
|
- The eight-color history is shared across the four colorable looks, persists across scenes and restarts, and ignores canceled choices.
|
||||||
|
- Chooser and inspector controls remain reachable on smaller displays, and the visual-only role is clear in words as well as appearance. Save and reopen preserve the pieces, finishes, colors, positions, and visual order.
|
||||||
|
|
||||||
|
## Scope and exclusions
|
||||||
|
|
||||||
|
Included: the missing wall color controls and textured tint behavior; one decorative rectangular Background ground type with Grass, Concrete, and Carpet; Carpet color; shared eight-color history; responsive chooser and selected-piece editing; visual previews; scene persistence and compatibility with existing scenes.
|
||||||
|
|
||||||
|
Excluded: new walkable Ground, Ramp, or Step behavior; changes to navigation or collision; parallax or animated scenery; freehand terrain shapes; user-authored repeatable patterns; automatic horizon blending or edge generation; a general color library beyond the recent list; and a new Scenery file/editor format. The separate [backdrop horizon and edge treatment idea](../ideas/feature_backlog.md) can address deliberate transitions later.
|
||||||
|
|
||||||
|
## Current project fit and references
|
||||||
|
|
||||||
|
The accepted [Phase 19 product plan](phase_19_scenery_backgrounds_surface_finishes.md) and [UI/UX specification](../specs/phase_19_scenery_backgrounds_ui_ux.md) already call for a wall Color choice and for recoloring a selected panel. The present wall data stores a color, but Brick and Wood rendering uses fixed palettes, and the current chooser and selected-wall card do not expose color. This brief closes that visible Phase 19 gap.
|
||||||
|
|
||||||
|
Existing walkable Ground is a `TerrainBlock` with collision and finish drawing. Its Grass motif emphasizes the top edge of the block; it is not the broad interior treatment needed for a distant field. The current semantic draw order places Sky, walls, Far and Near scenery, walkable Ground, floor scenery, and action elements in separate bands. Background ground adds a visual band behind those scene pieces while keeping the Stage's established Scenery selection model.
|
||||||
|
|
||||||
|
Relevant implementation locations for the spec-pipeline to inspect are `scripts/stage/scenery/stage_wall_panel.gd`, `scripts/stage/scenery/stage_surface_renderer.gd`, `scripts/stage/stage_draw_order.gd`, `scripts/terrain/terrain_block.gd`, `scripts/stage/stage_scene_io.gd`, `scripts/editors/stage/stage_scenery_controller.gd`, `scripts/editors/stage/sandbox_stage.gd`, `scripts/editors/stage/stage_asset_browser.gd`, `scripts/shared/ui/asset_selector.gd`, and the shared Stage panel system in `docs/specs/stage_panel_ui_system.md`.
|
||||||
|
|
||||||
|
## Dependencies, risks, and specification questions
|
||||||
|
|
||||||
|
- **Material color:** UI/UX and architecture should define a predictable relationship between the selected hue and each finish's multiple tones. Brick mortar and wood grain must keep enough contrast across very light, dark, or saturated custom colors.
|
||||||
|
- **Layering and overlap:** The recommended order is Sky → Background ground → wall panels → Far art → Near art → walkable Ground → floor art → action. The spec should confirm how a large decorative surface is selected when other scenery covers it and how it behaves in existing multi-piece scenery edits.
|
||||||
|
- **Large areas and zoom:** Repeatable vector detail needs to stay crisp and coherent without becoming visually noisy or costly across a large rectangle. The spec should settle how it previews at card size and at normal and zoomed Stage views.
|
||||||
|
- **Persistence:** Architecture should settle saved identifiers, old-scene defaults, and user-setting storage for the recent colors. The visible history is per user, while each placed piece saves its own color.
|
||||||
|
- **Copy and terminology:** UI/UX should settle the final short label for **Background ground**, the helper wording in chooser and capture bar, and the selected-piece inspector wording. The role distinction from walkable **Ground** must survive narrow screens and keyboard/touch use.
|
||||||
|
|
||||||
|
These are specification questions; the approved child behavior above should remain intact.
|
||||||