feat(simulation): D-252 — Facing is view-only; NPC gaze moves to path-follow intent (T-1093)
apply_move no longer writes Facing (was the only movement-facing coupling, player-only); the player's view changes solely via explicit SetFacing. NPC path-follow now sets Facing to the step direction — a strict improvement recorded as a D-252 correction: NPCs previously never received Facing from movement, their cones sat at spawn direction while walking. Bump-to-turn retired (blocked moves change nothing) with a regression test for each semantic. Wire schema unchanged; player_facing docs now say view/aim. Gauntlet fixtures regenerated (facing octants now reflect view-only semantics); client replay + live-roundtrip suites green against the new server. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1954,7 +1954,7 @@ Technical foundation decisions that constrain implementation: engine, client-ser
|
|||||||
|
|
||||||
### D-252: Facing is view-only — movement no longer writes Facing; NPC gaze is intent
|
### D-252: Facing is view-only — movement no longer writes Facing; NPC gaze is intent
|
||||||
|
|
||||||
- **Decision:** The `Facing` component (and the wire's `player_facing`/entity facing octants) is the **view direction only** — the vision-cone heading. Accepted moves **no longer overwrite Facing** (`facing_from_delta` is removed from the movement path): the player's Facing changes only via explicit `SetFacing` (the mouse octant, D-054's change-gated send). **Movement direction is not a wire concern** — the client derives body heading from position deltas (the 3D rig's per-leg velocity, [D-248](#d-248-3d-locomotion-presentation--per-leg-constant-velocity-interpolation-keyed-to-the-stance-throttle)). **NPC gaze becomes intent:** the NPC path-follow system sets Facing to the step direction explicitly (same observable behavior as the old physics coupling), which relocates look-where-you-walk from the movement system into AI intent — later behaviors (a patrolling guard glancing sideways, an NPC backing away while watching the player) become Facing writes by the AI, no special cases.
|
- **Decision:** The `Facing` component (and the wire's `player_facing`/entity facing octants) is the **view direction only** — the vision-cone heading. Accepted moves **no longer overwrite Facing** (`facing_from_delta` is removed from the movement path): the player's Facing changes only via explicit `SetFacing` (the mouse octant, D-054's change-gated send). **Movement direction is not a wire concern** — the client derives body heading from position deltas (the 3D rig's per-leg velocity, [D-248](#d-248-3d-locomotion-presentation--per-leg-constant-velocity-interpolation-keyed-to-the-stance-throttle)). **NPC gaze becomes intent:** the NPC path-follow system sets Facing to the step direction explicitly, relocating look-where-you-walk into AI intent — later behaviors (a patrolling guard glancing sideways, an NPC backing away while watching the player) become Facing writes by the AI, no special cases. *Implementation correction (2026-07-06): the old coupling was player-only — NPCs never received Facing from movement; their cones sat at spawn direction while walking. Path-follow gaze is therefore a strict improvement, not preservation.*
|
||||||
- **Motivation (play evidence, T-1088 live session 2026-07-06):** during client path-follows the vision cone flapped to path-forward on every accepted step and stuck there until the mouse crossed an octant boundary — the movement overwrite fought the explicit aim, and the best client-side mitigation (post-step re-assert, ~2-tick delay) still left a ~100 ms flap per step because movement wins within a tick. Splitting the semantics is the correct fix; the walk-one-way-look-another model this enables is exactly the split [Q-084] parked.
|
- **Motivation (play evidence, T-1088 live session 2026-07-06):** during client path-follows the vision cone flapped to path-forward on every accepted step and stuck there until the mouse crossed an octant boundary — the movement overwrite fought the explicit aim, and the best client-side mitigation (post-step re-assert, ~2-tick delay) still left a ~100 ms flap per step because movement wins within a tick. Splitting the semantics is the correct fix; the walk-one-way-look-another model this enables is exactly the split [Q-084] parked.
|
||||||
- **Consequences:** "bump-to-turn" (blocked moves updated facing) is retired — correct under a mouse-view model. The client's post-step `reassert_facing` mitigation is removed. [D-249](#d-249-3d-facing-presentation-authority--server-feet-client-eyes) is **amended by this record**: while moving, the body yaw source is the leg-velocity direction (wire facing while moving is now the *view*, which must never rotate the body); idle behavior is unchanged; the layered head/torso look-at ([T-1088] follow-facing) may run during any movement, not only path-follows. The 2D renderer's player sprite direction follows the view octant in all states (was: move direction while moving) — accepted drift on D-166-frozen code. **Amends [D-054](#d-054-tile-based-movement-with-same-tile-occupancy)** (its facing sentence: octant-only wire + explicit sends stand; the movement overwrite is struck).
|
- **Consequences:** "bump-to-turn" (blocked moves updated facing) is retired — correct under a mouse-view model. The client's post-step `reassert_facing` mitigation is removed. [D-249](#d-249-3d-facing-presentation-authority--server-feet-client-eyes) is **amended by this record**: while moving, the body yaw source is the leg-velocity direction (wire facing while moving is now the *view*, which must never rotate the body); idle behavior is unchanged; the layered head/torso look-at ([T-1088] follow-facing) may run during any movement, not only path-follows. The 2D renderer's player sprite direction follows the view octant in all states (was: move direction while moving) — accepted drift on D-166-frozen code. **Amends [D-054](#d-054-tile-based-movement-with-same-tile-occupancy)** (its facing sentence: octant-only wire + explicit sends stand; the movement overwrite is struck).
|
||||||
- **Cross-reference:** D-054, D-248, D-249, D-015 (vision cone), Q-084 (walk-vs-aim split — resolved by this record for semantics; camera rotation option stays parked). Tickets: T-1093 (implementation), T-1088.
|
- **Cross-reference:** D-054, D-248, D-249, D-015 (vision cone), Q-084 (walk-vs-aim split — resolved by this record for semantics; camera rotation option stays parked). Tickets: T-1093 (implementation), T-1088.
|
||||||
|
|||||||
@@ -86,7 +86,10 @@ pub struct ObserverSnapshot {
|
|||||||
pub tick: u64,
|
pub tick: u64,
|
||||||
/// Game time data for client HUD display (D-031)
|
/// Game time data for client HUD display (D-031)
|
||||||
pub game_time: GameTime,
|
pub game_time: GameTime,
|
||||||
/// Player character's facing direction for vision cone (D-015)
|
/// Player character's view direction — the vision-cone heading (D-015).
|
||||||
|
/// View-only since D-252: this is the aim (SetFacing / mouse octant), NOT
|
||||||
|
/// the movement direction. The client derives body heading from position
|
||||||
|
/// deltas (D-248); accepted moves no longer rotate this.
|
||||||
pub player_facing: FacingDirection,
|
pub player_facing: FacingDirection,
|
||||||
/// Player's current movement stance for HUD display (#449, D-053).
|
/// Player's current movement stance for HUD display (#449, D-053).
|
||||||
/// Defaults to Walk when stance component is absent.
|
/// Defaults to Walk when stance component is absent.
|
||||||
@@ -364,8 +367,9 @@ pub struct InventoryItem {
|
|||||||
pub slot: u8,
|
pub slot: u8,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 8-directional facing direction, matching movement system.
|
/// 8-directional facing direction — the view/aim heading, not movement.
|
||||||
/// Used for vision cone computation (D-015) and snapshot wire format.
|
/// Used for vision cone computation (D-015) and snapshot wire format.
|
||||||
|
/// View-only since D-252: set via SetFacing, never by accepted moves.
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]
|
||||||
pub enum FacingDirection {
|
pub enum FacingDirection {
|
||||||
#[default]
|
#[default]
|
||||||
|
|||||||
@@ -15,8 +15,10 @@ use crate::bridge::types::{FacingDirection, VisibilitySector};
|
|||||||
use crate::perception::shadowcast::VisibilityMap;
|
use crate::perception::shadowcast::VisibilityMap;
|
||||||
use bevy_ecs::prelude::*;
|
use bevy_ecs::prelude::*;
|
||||||
|
|
||||||
/// Component tracking which direction an entity faces.
|
/// Component tracking which direction an entity faces — the view/aim heading,
|
||||||
/// Updated by the input system when an entity moves.
|
/// not the movement direction (view-only since D-252). Set explicitly: the
|
||||||
|
/// player's via `handle_set_facing` (SetFacing input), an NPC's via the
|
||||||
|
/// path-follow system's step-direction intent (`simulation::path_follow`).
|
||||||
#[derive(Component, Debug, Clone, Copy, PartialEq, Eq)]
|
#[derive(Component, Debug, Clone, Copy, PartialEq, Eq)]
|
||||||
pub struct Facing(pub FacingDirection);
|
pub struct Facing(pub FacingDirection);
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ use std::collections::BTreeMap;
|
|||||||
|
|
||||||
use crate::bridge::types::MovementStance;
|
use crate::bridge::types::MovementStance;
|
||||||
use crate::knowledge::types::SoundRange;
|
use crate::knowledge::types::SoundRange;
|
||||||
use crate::perception::vision_cone::{facing_from_delta, Facing};
|
|
||||||
use crate::simulation::sound::{SoundEvent, SoundEventEmitter, SoundEventKind};
|
use crate::simulation::sound::{SoundEvent, SoundEventEmitter, SoundEventKind};
|
||||||
use crate::simulation::stance::Stance;
|
use crate::simulation::stance::Stance;
|
||||||
|
|
||||||
@@ -476,10 +475,9 @@ pub fn apply_move(
|
|||||||
commands.entity(entity).insert(MoveIntent {
|
commands.entity(entity).insert(MoveIntent {
|
||||||
target: TilePosition::new(pos.x + dx, pos.y + dy, pos.z),
|
target: TilePosition::new(pos.x + dx, pos.y + dy, pos.z),
|
||||||
});
|
});
|
||||||
// Update facing direction based on movement (D-015 vision cone)
|
// Facing is view-only (D-252): accepted moves no longer overwrite it. The
|
||||||
commands
|
// player's Facing changes only via the explicit SetFacing input path
|
||||||
.entity(entity)
|
// (perception::vision_cone::handle_set_facing).
|
||||||
.insert(Facing(facing_from_delta(dx, dy)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
@@ -1454,4 +1452,97 @@ mod tests {
|
|||||||
schedule.run(&mut world);
|
schedule.run(&mut world);
|
||||||
assert!(world.get::<MoveIntent>(player).is_some());
|
assert!(world.get::<MoveIntent>(player).is_some());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------
|
||||||
|
// Facing is view-only (D-252): movement never writes Facing
|
||||||
|
// -----------------------------------------------------------------------
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn accepted_move_does_not_change_explicit_facing() {
|
||||||
|
use crate::bridge::types::FacingDirection;
|
||||||
|
use crate::perception::vision_cone::Facing;
|
||||||
|
|
||||||
|
let mut world = bevy_ecs::world::World::new();
|
||||||
|
world.insert_resource(InputQueue::default());
|
||||||
|
world.insert_resource(SimulationTime::default());
|
||||||
|
world.init_resource::<crate::knowledge::EntityRegistry>();
|
||||||
|
|
||||||
|
// Player aims east via an explicit SetFacing (represented directly here).
|
||||||
|
let player = world
|
||||||
|
.spawn((
|
||||||
|
PlayerCharacter,
|
||||||
|
TilePosition::new(5, 5, 0),
|
||||||
|
Facing(FacingDirection::East),
|
||||||
|
))
|
||||||
|
.id();
|
||||||
|
|
||||||
|
let mut schedule = bevy_ecs::schedule::Schedule::default();
|
||||||
|
schedule.add_systems(process_player_input);
|
||||||
|
|
||||||
|
world.resource_mut::<InputQueue>().push(PlayerInput {
|
||||||
|
tick: 0,
|
||||||
|
action: PlayerAction::MoveNorth,
|
||||||
|
});
|
||||||
|
schedule.run(&mut world);
|
||||||
|
|
||||||
|
// The move is accepted…
|
||||||
|
assert!(
|
||||||
|
world.get::<MoveIntent>(player).is_some(),
|
||||||
|
"move should be accepted"
|
||||||
|
);
|
||||||
|
// …but the explicit aim is untouched — Facing is view-only (D-252).
|
||||||
|
assert_eq!(
|
||||||
|
world.get::<Facing>(player).unwrap().0,
|
||||||
|
FacingDirection::East,
|
||||||
|
"accepted move must not overwrite explicit Facing (D-252)"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn blocked_move_does_not_change_facing() {
|
||||||
|
// "Bump-to-turn" is retired (D-252): a move blocked by terrain leaves
|
||||||
|
// both position and Facing unchanged.
|
||||||
|
use crate::bridge::types::FacingDirection;
|
||||||
|
use crate::perception::vision_cone::Facing;
|
||||||
|
|
||||||
|
let mut world = bevy_ecs::world::World::new();
|
||||||
|
world.insert_resource(InputQueue::default());
|
||||||
|
world.insert_resource(SimulationTime::default());
|
||||||
|
world.init_resource::<crate::knowledge::EntityRegistry>();
|
||||||
|
|
||||||
|
// Wall the tile directly north of the player (y-down: north = y-1).
|
||||||
|
let mut map = WalkabilityMap::new(10, 10, 1);
|
||||||
|
map.set_walkable(&TilePosition::new(5, 4, 0), false);
|
||||||
|
world.insert_resource(map);
|
||||||
|
|
||||||
|
let player = world
|
||||||
|
.spawn((
|
||||||
|
PlayerCharacter,
|
||||||
|
TilePosition::new(5, 5, 0),
|
||||||
|
Facing(FacingDirection::East),
|
||||||
|
))
|
||||||
|
.id();
|
||||||
|
|
||||||
|
let mut schedule = bevy_ecs::schedule::Schedule::default();
|
||||||
|
schedule.add_systems((process_player_input, validate_movement).chain());
|
||||||
|
|
||||||
|
world.resource_mut::<InputQueue>().push(PlayerInput {
|
||||||
|
tick: 0,
|
||||||
|
action: PlayerAction::MoveNorth,
|
||||||
|
});
|
||||||
|
schedule.run(&mut world);
|
||||||
|
|
||||||
|
// Position held by the wall…
|
||||||
|
assert_eq!(
|
||||||
|
*world.get::<TilePosition>(player).unwrap(),
|
||||||
|
TilePosition::new(5, 5, 0),
|
||||||
|
"blocked move should not change position"
|
||||||
|
);
|
||||||
|
// …and Facing unchanged — no bump-to-turn (D-252).
|
||||||
|
assert_eq!(
|
||||||
|
world.get::<Facing>(player).unwrap().0,
|
||||||
|
FacingDirection::East,
|
||||||
|
"blocked move must not change Facing (D-252)"
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,8 @@
|
|||||||
use bevy_ecs::prelude::*;
|
use bevy_ecs::prelude::*;
|
||||||
|
|
||||||
use crate::npc::Npc;
|
use crate::npc::Npc;
|
||||||
use crate::simulation::movement::MoveIntent;
|
use crate::perception::vision_cone::{facing_from_delta, Facing};
|
||||||
|
use crate::simulation::movement::{MoveIntent, TilePosition};
|
||||||
use crate::simulation::pathfinding::{ComputedPath, PathBlocked};
|
use crate::simulation::pathfinding::{ComputedPath, PathBlocked};
|
||||||
use crate::simulation::tier::ActiveSim;
|
use crate::simulation::tier::ActiveSim;
|
||||||
|
|
||||||
@@ -57,21 +58,38 @@ impl MovementSpeed {
|
|||||||
pub fn follow_paths(
|
pub fn follow_paths(
|
||||||
mut commands: Commands,
|
mut commands: Commands,
|
||||||
mut query: Query<
|
mut query: Query<
|
||||||
(Entity, &mut ComputedPath, Option<&mut MovementSpeed>),
|
(
|
||||||
|
Entity,
|
||||||
|
&mut ComputedPath,
|
||||||
|
Option<&TilePosition>,
|
||||||
|
Option<&mut MovementSpeed>,
|
||||||
|
),
|
||||||
(With<Npc>, With<ActiveSim>),
|
(With<Npc>, With<ActiveSim>),
|
||||||
>,
|
>,
|
||||||
) {
|
) {
|
||||||
for (entity, mut path, speed_opt) in query.iter_mut() {
|
for (entity, mut path, pos_opt, speed_opt) in query.iter_mut() {
|
||||||
if let Some(mut speed) = speed_opt {
|
if let Some(mut speed) = speed_opt {
|
||||||
if !speed.should_step() {
|
if !speed.should_step() {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(next_pos) = path.next_step() {
|
if let Some(next_pos) = path.next_step().copied() {
|
||||||
|
// Look where you walk is now AI intent (D-252): the path-follow
|
||||||
|
// system sets Facing to the step direction explicitly, rather than
|
||||||
|
// relying on the movement system to couple facing to motion.
|
||||||
|
if let Some(pos) = pos_opt {
|
||||||
|
let dx = next_pos.x - pos.x;
|
||||||
|
let dy = next_pos.y - pos.y;
|
||||||
|
if dx != 0 || dy != 0 {
|
||||||
|
commands
|
||||||
|
.entity(entity)
|
||||||
|
.insert(Facing(facing_from_delta(dx, dy)));
|
||||||
|
}
|
||||||
|
}
|
||||||
commands
|
commands
|
||||||
.entity(entity)
|
.entity(entity)
|
||||||
.insert(MoveIntent { target: *next_pos });
|
.insert(MoveIntent { target: next_pos });
|
||||||
path.advance();
|
path.advance();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,6 +110,7 @@ pub fn cleanup_path_blocked(mut commands: Commands, query: Query<Entity, With<Pa
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
use crate::bridge::types::FacingDirection;
|
||||||
use crate::simulation::movement::TilePosition;
|
use crate::simulation::movement::TilePosition;
|
||||||
use crate::simulation::pathfinding::ComputedPath;
|
use crate::simulation::pathfinding::ComputedPath;
|
||||||
|
|
||||||
@@ -125,6 +144,11 @@ mod tests {
|
|||||||
// Path advanced to index 1
|
// Path advanced to index 1
|
||||||
let path = world.get::<ComputedPath>(entity).unwrap();
|
let path = world.get::<ComputedPath>(entity).unwrap();
|
||||||
assert_eq!(path.current_index, 1);
|
assert_eq!(path.current_index, 1);
|
||||||
|
// D-252: the step direction (east) is set as explicit gaze intent.
|
||||||
|
assert_eq!(
|
||||||
|
world.get::<Facing>(entity).unwrap().0,
|
||||||
|
FacingDirection::East
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@@ -151,6 +175,11 @@ mod tests {
|
|||||||
assert!(world.get::<ComputedPath>(entity).is_none());
|
assert!(world.get::<ComputedPath>(entity).is_none());
|
||||||
// But MoveIntent was still created
|
// But MoveIntent was still created
|
||||||
assert!(world.get::<MoveIntent>(entity).is_some());
|
assert!(world.get::<MoveIntent>(entity).is_some());
|
||||||
|
// D-252: the step direction (east) is set as explicit gaze intent.
|
||||||
|
assert_eq!(
|
||||||
|
world.get::<Facing>(entity).unwrap().0,
|
||||||
|
FacingDirection::East
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@@ -188,6 +217,11 @@ mod tests {
|
|||||||
world.get::<MoveIntent>(entity).unwrap().target,
|
world.get::<MoveIntent>(entity).unwrap().target,
|
||||||
TilePosition::new(1, 0, 0)
|
TilePosition::new(1, 0, 0)
|
||||||
);
|
);
|
||||||
|
// D-252: gaze intent set on the step tick, not the throttled ticks.
|
||||||
|
assert_eq!(
|
||||||
|
world.get::<Facing>(entity).unwrap().0,
|
||||||
|
FacingDirection::East
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
+379
-8
@@ -82,13 +82,7 @@
|
|||||||
"relationship": 0,
|
"relationship": 0,
|
||||||
"total": 0
|
"total": 0
|
||||||
},
|
},
|
||||||
"conversation_ended": [],
|
"current_monologue": null,
|
||||||
"conversation_events": [],
|
|
||||||
"current_monologue": {
|
|
||||||
"duration_seconds": 5.0,
|
|
||||||
"id": "recognition_02",
|
|
||||||
"text": "Those footsteps... I've heard that pattern before."
|
|
||||||
},
|
|
||||||
"dialogue_response": null,
|
"dialogue_response": null,
|
||||||
"entities": [
|
"entities": [
|
||||||
{
|
{
|
||||||
@@ -174,8 +168,15 @@
|
|||||||
"state_hash": 8686526522907766805,
|
"state_hash": 8686526522907766805,
|
||||||
"tick": 2,
|
"tick": 2,
|
||||||
"triangle_crisis_events": [],
|
"triangle_crisis_events": [],
|
||||||
"version": 17,
|
|
||||||
"visible_tiles": [
|
"visible_tiles": [
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 35,
|
||||||
|
"y": 32,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -200,6 +201,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 36,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -232,6 +241,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 37,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -264,6 +281,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 38,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -304,6 +329,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 39,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -344,6 +377,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 40,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -392,6 +433,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 41,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -440,6 +489,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 42,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -496,6 +553,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 43,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -560,6 +625,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 44,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -624,6 +697,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 45,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -696,6 +777,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 46,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -768,6 +857,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 47,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -848,6 +945,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 48,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -928,6 +1033,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 49,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -1016,6 +1129,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 50,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -1112,6 +1233,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 51,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -1208,6 +1337,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 52,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -1312,6 +1449,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 53,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -1416,6 +1561,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 54,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -1528,6 +1681,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 55,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -1648,6 +1809,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 56,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -1760,6 +1929,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 57,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -1864,6 +2041,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 58,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -1968,6 +2153,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 59,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -2064,6 +2257,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 60,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -2160,6 +2361,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 61,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -2248,6 +2457,28 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 1
|
"zone_id": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 62,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 62,
|
||||||
|
"y": 34,
|
||||||
|
"z": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 62,
|
||||||
|
"y": 35,
|
||||||
|
"z": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -2350,6 +2581,13 @@
|
|||||||
"y": 35,
|
"y": 35,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 63,
|
||||||
|
"y": 36,
|
||||||
|
"z": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -2452,6 +2690,13 @@
|
|||||||
"y": 35,
|
"y": 35,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 64,
|
||||||
|
"y": 36,
|
||||||
|
"z": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -2546,6 +2791,13 @@
|
|||||||
"y": 35,
|
"y": 35,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 65,
|
||||||
|
"y": 36,
|
||||||
|
"z": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -2640,6 +2892,13 @@
|
|||||||
"y": 35,
|
"y": 35,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 66,
|
||||||
|
"y": 36,
|
||||||
|
"z": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -2726,6 +2985,13 @@
|
|||||||
"y": 35,
|
"y": 35,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 67,
|
||||||
|
"y": 36,
|
||||||
|
"z": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -2812,6 +3078,13 @@
|
|||||||
"y": 35,
|
"y": 35,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 68,
|
||||||
|
"y": 36,
|
||||||
|
"z": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -2890,6 +3163,21 @@
|
|||||||
"y": 35,
|
"y": 35,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 69,
|
||||||
|
"y": 36,
|
||||||
|
"z": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 70,
|
||||||
|
"y": 26,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Wall",
|
"tile_kind": "Wall",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -2960,6 +3248,45 @@
|
|||||||
"y": 35,
|
"y": 35,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 70,
|
||||||
|
"y": 36,
|
||||||
|
"z": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 71,
|
||||||
|
"y": 27,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 71,
|
||||||
|
"y": 28,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 71,
|
||||||
|
"y": 29,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 71,
|
||||||
|
"y": 30,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -2990,6 +3317,13 @@
|
|||||||
"y": 35,
|
"y": 35,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 71,
|
||||||
|
"y": 36,
|
||||||
|
"z": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Floor",
|
"tile_kind": "Floor",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -3011,6 +3345,20 @@
|
|||||||
"y": 35,
|
"y": 35,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 72,
|
||||||
|
"y": 36,
|
||||||
|
"z": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 73,
|
||||||
|
"y": 33,
|
||||||
|
"z": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Wall",
|
"tile_kind": "Wall",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -3024,6 +3372,29 @@
|
|||||||
"x": 73,
|
"x": 73,
|
||||||
"y": 35,
|
"y": 35,
|
||||||
"z": 0
|
"z": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 73,
|
||||||
|
"y": 36,
|
||||||
|
"z": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 74,
|
||||||
|
"y": 34,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 9
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 74,
|
||||||
|
"y": 35,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 9
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
Binary file not shown.
+1512
-323
File diff suppressed because it is too large
Load Diff
Binary file not shown.
+280
-3
@@ -83,8 +83,6 @@
|
|||||||
"relationship": 0,
|
"relationship": 0,
|
||||||
"total": 0
|
"total": 0
|
||||||
},
|
},
|
||||||
"conversation_ended": [],
|
|
||||||
"conversation_events": [],
|
|
||||||
"current_monologue": null,
|
"current_monologue": null,
|
||||||
"dialogue_response": null,
|
"dialogue_response": null,
|
||||||
"entities": [
|
"entities": [
|
||||||
@@ -137,8 +135,55 @@
|
|||||||
"state_hash": 3925209675202732823,
|
"state_hash": 3925209675202732823,
|
||||||
"tick": 2,
|
"tick": 2,
|
||||||
"triangle_crisis_events": [],
|
"triangle_crisis_events": [],
|
||||||
"version": 17,
|
|
||||||
"visible_tiles": [
|
"visible_tiles": [
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 38,
|
||||||
|
"y": 47,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 38,
|
||||||
|
"y": 48,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 38,
|
||||||
|
"y": 49,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 38,
|
||||||
|
"y": 50,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 38,
|
||||||
|
"y": 51,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 39,
|
||||||
|
"y": 46,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Wall",
|
"tile_kind": "Wall",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -179,6 +224,22 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 0
|
"zone_id": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 39,
|
||||||
|
"y": 52,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 40,
|
||||||
|
"y": 46,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Wall",
|
"tile_kind": "Wall",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -227,6 +288,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 0
|
"zone_id": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 41,
|
||||||
|
"y": 46,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Wall",
|
"tile_kind": "Wall",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -275,6 +344,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 0
|
"zone_id": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 42,
|
||||||
|
"y": 46,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Wall",
|
"tile_kind": "Wall",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -331,6 +408,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 0
|
"zone_id": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 43,
|
||||||
|
"y": 46,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Wall",
|
"tile_kind": "Wall",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -387,6 +472,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 0
|
"zone_id": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 44,
|
||||||
|
"y": 46,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Wall",
|
"tile_kind": "Wall",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -451,6 +544,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 0
|
"zone_id": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 45,
|
||||||
|
"y": 46,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Wall",
|
"tile_kind": "Wall",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -523,6 +624,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 0
|
"zone_id": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 46,
|
||||||
|
"y": 46,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Wall",
|
"tile_kind": "Wall",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -595,6 +704,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 0
|
"zone_id": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 47,
|
||||||
|
"y": 46,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Wall",
|
"tile_kind": "Wall",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -675,6 +792,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 0
|
"zone_id": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 48,
|
||||||
|
"y": 46,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Wall",
|
"tile_kind": "Wall",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -755,6 +880,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 0
|
"zone_id": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 49,
|
||||||
|
"y": 46,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Wall",
|
"tile_kind": "Wall",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -843,6 +976,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 0
|
"zone_id": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 50,
|
||||||
|
"y": 46,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Wall",
|
"tile_kind": "Wall",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -939,6 +1080,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 0
|
"zone_id": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 51,
|
||||||
|
"y": 46,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Wall",
|
"tile_kind": "Wall",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -1027,6 +1176,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 0
|
"zone_id": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 52,
|
||||||
|
"y": 46,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Wall",
|
"tile_kind": "Wall",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -1107,6 +1264,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 0
|
"zone_id": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 53,
|
||||||
|
"y": 46,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Wall",
|
"tile_kind": "Wall",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -1187,6 +1352,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 0
|
"zone_id": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 54,
|
||||||
|
"y": 46,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Wall",
|
"tile_kind": "Wall",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -1259,6 +1432,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 0
|
"zone_id": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 55,
|
||||||
|
"y": 46,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Wall",
|
"tile_kind": "Wall",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -1331,6 +1512,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 0
|
"zone_id": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 56,
|
||||||
|
"y": 46,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Wall",
|
"tile_kind": "Wall",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -1395,6 +1584,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 0
|
"zone_id": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 57,
|
||||||
|
"y": 46,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Wall",
|
"tile_kind": "Wall",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -1451,6 +1648,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 0
|
"zone_id": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 58,
|
||||||
|
"y": 46,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Wall",
|
"tile_kind": "Wall",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -1507,6 +1712,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 0
|
"zone_id": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 59,
|
||||||
|
"y": 46,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Wall",
|
"tile_kind": "Wall",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -1555,6 +1768,14 @@
|
|||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 0
|
"zone_id": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 60,
|
||||||
|
"y": 46,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tile_kind": "Wall",
|
"tile_kind": "Wall",
|
||||||
"visibility": "Forward",
|
"visibility": "Forward",
|
||||||
@@ -1602,6 +1823,62 @@
|
|||||||
"y": 52,
|
"y": 52,
|
||||||
"z": 0,
|
"z": 0,
|
||||||
"zone_id": 0
|
"zone_id": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 60,
|
||||||
|
"y": 53,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 61,
|
||||||
|
"y": 47,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 61,
|
||||||
|
"y": 48,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 61,
|
||||||
|
"y": 49,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 61,
|
||||||
|
"y": 50,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 61,
|
||||||
|
"y": 51,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tile_kind": "Wall",
|
||||||
|
"visibility": "BoundaryWall",
|
||||||
|
"x": 61,
|
||||||
|
"y": 52,
|
||||||
|
"z": 0,
|
||||||
|
"zone_id": 0
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
Binary file not shown.
Reference in New Issue
Block a user