From 6a76cac69f5f7498b964e164a728d6749b2cd664 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Sat, 7 Nov 2026 13:51:12 +0100 Subject: [PATCH] objects: snap to floor follows the engine's cell rule (cell tiles, swap models, then neighbours), alligator, alligator spawner and cow guard spawner schemas with box checks, every way of adding a box walker gives it a box, guard info names the objects that set its event bit, new and moved player starts carry their start camera node (no camera in the llama's head), edit and delete type in the object palettes' context menu --- docs/manual/09-objects.md | 28 +++- docs/manual/11-cameras-triggers.md | 24 ++- notes/editor-object-schemas.md | 52 +++++- notes/editor-tools-objects.md | 28 +++- notes/editor-ui.md | 2 +- notes/img/editor/obj_event_bit_info.jpg | Bin 0 -> 39079 bytes notes/img/editor/obj_game_alligator.jpg | Bin 0 -> 30505 bytes notes/img/editor/obj_game_startcam_v2.jpg | Bin 0 -> 45991 bytes .../editor/obj_game_village1_moved_start.jpg | Bin 0 -> 46626 bytes .../img/editor/obj_guard_event_inspector.jpg | Bin 0 -> 73341 bytes notes/img/editor/obj_palette_type_menu.jpg | Bin 0 -> 30719 bytes notes/img/editor/obj_type_menu.jpg | Bin 0 -> 35039 bytes .../llamamod/editor/model/WaypointBoxes.java | 46 ++++++ .../llamamod/editor/model/cmd/Edits.java | 30 +++- .../editor/model/cmd/PlayerStart.java | 151 ++++++++++++++++++ .../editor/tools/objects/EventBits.java | 82 ++++++++++ .../llamamod/editor/tools/objects/Ground.java | 108 ++++++++++--- .../llamamod/editor/tools/objects/Guards.java | 122 ++++++++++---- .../editor/tools/objects/ObjectChecks.java | 64 +++++++- .../editor/tools/objects/ObjectPalette.java | 41 +++-- .../tools/objects/ObjectsEditorPlugin.java | 18 +++ .../editor/tools/objects/ParamsSection.java | 20 ++- .../editor/tools/objects/PlaceTool.java | 23 ++- .../editor/tools/objects/Schemas.java | 61 ++++++- .../editor/tools/objects/Session.java | 12 +- .../llamamod/editor/tools/objects/Setups.java | 81 ++-------- .../editor/tools/strats/CustomTypes.java | 31 ++++ .../editor/ui/BuiltinEditorPlugin.java | 24 +-- .../llamamod/editor/ui/TypeMenus.java | 43 +++++ .../editor/ui/panels/AssetBrowserPanel.java | 34 ++++ .../editor/tools/objects/GroundTest.java | 71 ++++++++ .../editor/tools/objects/GuardsTest.java | 75 ++++++++- .../editor/tools/objects/ObjectsGameDemo.java | 123 ++++++++++++++ .../editor/tools/objects/PlayerStartTest.java | 111 +++++++++++++ 34 files changed, 1302 insertions(+), 203 deletions(-) create mode 100644 notes/img/editor/obj_event_bit_info.jpg create mode 100644 notes/img/editor/obj_game_alligator.jpg create mode 100644 notes/img/editor/obj_game_startcam_v2.jpg create mode 100644 notes/img/editor/obj_game_village1_moved_start.jpg create mode 100644 notes/img/editor/obj_guard_event_inspector.jpg create mode 100644 notes/img/editor/obj_palette_type_menu.jpg create mode 100644 notes/img/editor/obj_type_menu.jpg create mode 100644 src/main/java/com/eliasmueller/llamamod/editor/model/WaypointBoxes.java create mode 100644 src/main/java/com/eliasmueller/llamamod/editor/model/cmd/PlayerStart.java create mode 100644 src/main/java/com/eliasmueller/llamamod/editor/tools/objects/EventBits.java create mode 100644 src/main/java/com/eliasmueller/llamamod/editor/tools/strats/CustomTypes.java create mode 100644 src/main/java/com/eliasmueller/llamamod/editor/ui/TypeMenus.java create mode 100644 src/test/java/com/eliasmueller/llamamod/editor/tools/objects/GroundTest.java create mode 100644 src/test/java/com/eliasmueller/llamamod/editor/tools/objects/ObjectsGameDemo.java create mode 100644 src/test/java/com/eliasmueller/llamamod/editor/tools/objects/PlayerStartTest.java diff --git a/docs/manual/09-objects.md b/docs/manual/09-objects.md index 2ac659c..0b56b6f 100644 --- a/docs/manual/09-objects.md +++ b/docs/manual/09-objects.md @@ -56,8 +56,10 @@ The **Objects** panel sits in the left dock next to the Outliner – the tab wit * **Click** an entry to make it the current type and switch to the **Place objects** tool (**P**). Then click in the viewport to place it. * **Drag** an entry into the viewport to place one object exactly under the mouse pointer. -* **Right-click** an entry to add it to or remove it from your **favourites**. Favourites are - marked with ★, listed first and remembered between sessions. +* **Right-click** an entry for its menu: **Add to favourites ★** / **Remove from favourites** + (favourites are marked with ★, listed first and remembered between sessions) and, for your + own [custom types](22-strats.md), **Edit type…** and **Delete type…**. The same menu (with + **Place at view centre**) opens on the types in **Assets → Objects**. * Hover an entry for a tooltip with the description of the type. * **parameters decoded** means the editor knows the meaning of the type's parameters and shows named fields in the Inspector (see [Object parameters](#object-parameters)). @@ -89,7 +91,10 @@ ground. It is chosen automatically when you click a type in the Objects panel or 3. Click to place. The new object is selected, and the status bar shows its position. With **Snap to floor** on, the object is put onto the *collision* floor under the pointer, not -just onto the visible surface – so it ends up where the llama can actually reach it. With grid +just onto the visible surface – so it ends up where the llama can actually reach it. Like the +game, the editor only counts the tiles listed in the grid cell under the point: a floor polygon +that reaches into the cell from a neighbouring tile is ignored there (it is used only when the +cell has no floor at all). With grid snapping on (**G**), the position snaps to the move step first. ### Moving and turning objects @@ -139,11 +144,11 @@ create the complete set with one click in the viewport. The player start is the **Llama** object. A level has exactly one, so the setup **moves** the existing Llama to the clicked point (and turns it to the chosen yaw) instead of adding a second -one. If the level has no Llama yet, one is placed together with its waypoint chain. +one. If the level has no Llama yet, one is placed with a single waypoint 2 cells behind it. -The first node of the Llama's chain is the **start position of the camera**: the setup puts it -8 cells behind the llama, slightly lower; the remaining nodes stay on the llama. See -[The start camera](11-cameras-triggers.md#the-start-camera). +The Llama's waypoints are **start camera positions**: the game uses the first one within 2.5 +cells of the llama. Moving the start takes the nearby nodes and the village fly-by trigger along. +See [The start camera](11-cameras-triggers.md#the-start-camera). > **Tip:** **Level → Play from camera position** (**Shift+F5**) starts a play-test at another > point without moving the real start – see [Building and play-testing](15-build-play.md). @@ -305,6 +310,8 @@ The editor knows the parameters of these types (the rest show raw values): | **RubyIdolDoor** | Idols needed, Offset (sign distance) | – | | **PressurePadDoor** | Pad flags (bit field), Door z, Camera, Camera hold | – | | **CityGuard** (and CityGuardWithRubyIdol, CowGuard, GorillaGuard, LizardGuard, WarthogGuard) | View range, Chase range, Event bit (0 = active at once), Wall collision (CityGuard only) | Walking boxes: node pairs; the guard must **start inside one box** | +| **CowGuardSpawner** | View range and Chase range of its guards, Max guards, Interval (s) | Walking boxes handed to its guards; the spawner must stand inside one | +| **Alligator**, **AlligatorSpawner** | Spawner: Max alligators, Interval (s), Floor collision | Walking boxes: node pairs; an alligator outside every box is moved into the first one; a spawner's alligators walk straight ahead into the first box | | **JumpingBeetleBlue**, **JumpingBeetle** | Jump time, Wait, Jump height, Pause | Jump targets | | **Spider** | Range, Speed, Down time, Up time, Start down | Path | | **Bunny** | Flee range | – | @@ -314,7 +321,12 @@ The editor knows the parameters of these types (the rest show raw values): > game removes it when the level starts – it never appears. Placing a guard gives it one 4×4 box > around itself and Event bit 0; the Inspector shows a warning and a **Box around it** button > when the boxes are wrong. An **Event bit** above 0 keeps the guard hidden until another object -> with that event number (a talking character, a smash statue, a door pad …) sets the bit. +> with that event number sets the bit: TipoVillage / ChacaVillage (parameter 6), the smash +> statues (parameter 0), LabBigCutscene (1), LabWall (4), LabSlidingDoor (5), GoldIdol (1), +> CityWall (4), Condor (2), RiverCrocGame (1), RiverTriggerBox (0), KidOnCanoe (4), YzmaRiver +> (2, 6), EndGameTriggerBox (0). **Level → Check** notes a guard whose bit no object in the level +> sets. Guards and alligators get their one box however you add them (Place tool, drag from a +> panel, double-click in Assets). > **Tip:** For pickups, leave **Snap to floor** on: the game then drops the coin onto the floor > when the level starts, so a coin placed slightly too high still ends up in the right place. diff --git a/docs/manual/11-cameras-triggers.md b/docs/manual/11-cameras-triggers.md index c445f4c..1cad406 100644 --- a/docs/manual/11-cameras-triggers.md +++ b/docs/manual/11-cameras-triggers.md @@ -21,17 +21,27 @@ areas as boxes and their cameras as frusta (pyramids showing the view). ## The start camera -The **Llama** (the player start) owns a waypoint chain. Its **first node is the camera's start -position** when the level begins; the game then moves the camera to its normal place behind the -llama. Levels made with the editor put this node 8 cells behind the llama (the -[Player start](09-objects.md#player-start) setup keeps it there when you move the start). +The **Llama** (the player start) owns a waypoint chain of **camera start positions**. When the +level begins, the game takes the first node that lies within **2.5 cells** of the llama as the +camera position, looking at the llama. If that node's field *unk2* is not 0, its distance and +height to the llama also become the camera distance – until the llama first moves. In the +original levels there is one node per entry door; a node that sits on the llama would put the +camera into the llama's head. + +The [Player start](09-objects.md#player-start) setup gives a new Llama a single node 2 cells +behind it. Moving the start takes the nodes near the old start along (and turns them with the +llama), leaves the door nodes where they are, and adds a node if none is in range. The Place +tool's rotate knob turns the near nodes too. **Level → Check** warns when the start camera would +sit inside the llama. + +The villages also start with a **fly-by**: a *CutSceneTrigger* stands on the player start (radius +0.7). When you move the start, the setup moves this trigger along and sets its "end behind the +player" flag (parameter 6, bit 1), so the fly-by ends behind the llama at the new start instead +of at the old one. The Llama's *Camera mode* parameter switches between the normal and an alternative camera behaviour. -> **Note:** In the original levels the Llama's chain is often a longer list used by the level's -> scripts (for example the village's fly-by at the start). Edit it with care. - ## Camera zones A camera zone is an object with a **box**: two waypoints marking opposite corners on the ground. diff --git a/notes/editor-object-schemas.md b/notes/editor-object-schemas.md index f6cb608..6b73183 100644 --- a/notes/editor-object-schemas.md +++ b/notes/editor-object-schemas.md @@ -63,7 +63,7 @@ values only. | RubyIdol | p0 falls, p1 snap | – | | Secret (high) | p0 box mode (player inside the box of the 2 nodes, op 0x178) | box (2 nodes) | | CoinLine / CoinCircle (low) | count (counted down), spacing / radius | – | -| Llama | p0 spawns a helper, p1 unused, p2 camera mode (global 107) | first node = camera start | +| Llama | p0 spawns a helper, p1 unused, p2 camera mode (global 107) | camera starts: first node within 2.5 cells of the llama (see "Start camera") | | CheckPointPost (high) | p0 collision radius (+0xD2, 0.2) | 1 node = respawn position + yaw (98 of 102) | | LevelDoor (high) | tribe, world, chapter of the next level (7,7,7 = world finished); fires on material-16 floor of a tile in its cell (any height; often only in the swap model a RubyIdolDoor/other door object switches to when it opens) | – | | CameraSide | p0 height (g48), p1 distance (g47), p2 yaw mode (1 node yaw, 2 node yaw or ±180°), p3 only below node y, p4 flag 0x10000, p10 several boxes, p11 height offset, p12/p13 alt. height/distance | box pairs, node 0 yaw = camera yaw | @@ -100,7 +100,53 @@ info for p2 > 0; the Inspector shows the state plus a **Box around it** button ( `Setups.guardBox`). Verified in game: CityGuard with its box on a new level (base village 2) appears and attacks the llama; a second one with a 4-node "square path" next to it never appears. -The rest (~150 placed types) shows raw values with the original statistics. Next candidates: -Alligator (also box pairs: "Forcing alligator inside first WP box"), PressurePadDoor (bit field), TargetRopePlatform, CataSwingingBlade (speeds/angles), RiverLog. +### Other box walkers (2026-11-07, objs2) + +Same pair scan, kind-specific rules (`Guards`, model list `editor.model.WaypointBoxes`): +* **CowGuardSpawned** (spawned by CowGuardSpawner, same guard code): p0 view, p1 chase, p2 event + bit (spawner passes 0), p3 not read (overwritten by the box scan). Box rule as guards (unk2 = 0). +* **CowGuardSpawner** (6 params, t1l8m005 ×8): `spawn<4,…>(v0, v1, 0, v5, CowGuardSpawned)` at its + own position with its chain, then `wait(v3·30)` until the player is > 1.5 cells away and fewer + than v2 of its guards live (the guard does `parent.v6 −= 1` when it dies). So p0 = view range, + p1 = chase range, p2 = max guards, p3 = interval (s), p4 not read, p5 = guard p3 (unused). The + spawner must stand in a box with unk2 = 0 or each guard is removed at once – 1 of 8 originals + (t1l8m005 strat 82) stands 0.12 outside (warning, not verified in game). +* **Alligator** (no params; v0–v6 are locals), **SpawnedAlligator**: odd node count → "Odd number + of WPs!" + remove; outside every box → "Forcing alligator inside first WP box", clamped into the + first box. No unk2 rule. Bites only when `|player.floorHeight − y| < 0.2` and inside its boxes. +* **AlligatorSpawner** (t1l6m003 ×2): p0 max alive (`v3 < v0`, `parent.v3 −= 1` on death), p1 + interval s, p2 → spawned `collisionOn 0x8400` when set. The spawned alligator (spawner's chain) + walks straight ahead (`moveForwardQ`, spawner yaw) with a fade-in until it is inside the + *first* box – both originals stand outside it, facing it. Check: warning if the ray misses. +Placement (every path through `Edits.placeStrat`): one 4×4 box around the object, unk2 = 0, guards +event bit 0. In game (TestLevel 6 on t1l4m002): an Alligator added this way appears and snaps at +the llama (`img/editor/obj_game_alligator.jpg`). + +### Event bits (global 95) + +Setters found by a sweep over the strat code of all 31 levels (`g95 = g95 | (1 << (v − 1))`), +v = parameter: TipoVillage p6, ChacaVillage p6, SmashStatueSmall/Big/Door p0, RiverCrocGame p1, +RiverTriggerBox p0, KidOnCanoe p4, YzmaRiver p2 and p6, Condor p2 (also clears it), GoldIdol p1, +CityWall p4, NakedPeacock p0, LabSlidingDoor p5, LabSlidingDoorJamie p5, LabBigCutscene p1, LabWall +p4, EndGameTriggerBox p0 (`EventBits`). No native code touches global 95. Check: lab level +t1l8m001 – LizardGuardNoCoin bit 8 ← LabBigCutscene p1 = 8, GorillaGuard bit 30 ← LabWall p4 = 30; +CowGuard bit 20 and CowGuardNoCoin bit 1 have no setter in the level (they never appear in the +original either). `ObjectChecks` adds this to the guard info, naming the setter types of the base. + +### Start camera (Llama waypoints) + +Camera strat (spawned by the Llama with `self.hasWaypoints`), case g0 = 4 at level start, L_1330: +walks the Llama's chain; the first node with `playerDistToWp < 2.5` becomes the camera position, +yaw = angle to the player; if the node's wpParam (unk2) ≠ 0, also g47 = x/z distance and g48 = +height difference, and g43 = 3 blocks the approach to the normal distance until the llama moves. +The defaults are g47 = 1.0, g48 = 0.5 (Camera params from the Llama spawn). Originals: one node per +entry door (unk2 4096 on some), none within 2.5 of the village starts. The old editor setup (and +levelbuild) copied the prototype chain onto the llama: village 2's node 2 has unk2 = 4096 → camera +in the llama's head until it moves (seen in game). Fix: `PlayerStart` (one node 2 behind, unk2 0; +moving keeps door nodes). Village fly-by: CutSceneTrigger on the start, radius² 0.5; p6 bit 1 makes +it (L_0148) rewrite its last path node to a point behind the player – set when the start moves. + +The rest (~145 placed types) shows raw values with the original statistics. Next candidates: +PressurePadDoor (bit field), TargetRopePlatform, CataSwingingBlade (speeds/angles), RiverLog. Tooling used (not in the repo): Ghidra script decompiling the handler table, a Python sweep disassembler with an op-name table, "parameter use" context dumps per type. diff --git a/notes/editor-tools-objects.md b/notes/editor-tools-objects.md index bc0c6a3..885ab39 100644 --- a/notes/editor-tools-objects.md +++ b/notes/editor-tools-objects.md @@ -12,7 +12,7 @@ screenshot tour `ObjectsTour` (test classes). |---|---| | **Objects panel** (left dock) | every placeable type of the base with rendered thumbnail, category filter, search (name + schema summary), favourites (right-click, ★ filter), "parameters decoded" marker; drag into the viewport or click → Place tool. Quick setups: Player start, Checkpoint, Exit, Secret, Coin line, Coin arc | | **Place tool** (P) | click = place on the collision floor under the cursor (snap to floor, grid snap), yaw = camera direction / facing the camera / 0° / type default; click + drag an object = move along the ground (its waypoints move along); drag the yellow knob = rotate (angle snap; a checkpoint's respawn node turns with it). Modes for the setups | -| Setups | **Player start** moves the existing player (exactly one) or places a Llama with its chain (camera node 8 cells behind). **Checkpoint** = CheckPointPost + respawn node 0.4 ahead (floor height). **Exit** = LevelDoor in the cell centre + 1×1 FLOOR brush with collision material 16; target picked in the options bar (world/chapter names, "world finished 7,7,7"). **Secret** = Secret with a 3×3 box (2 nodes). Guards (any placement) get one 4×4 box and event bit 0 | +| Setups | **Player start** moves the existing player (exactly one) or places a Llama with one start camera node 2 cells behind (moving keeps door nodes, carries the near nodes and the village fly-by trigger). **Checkpoint** = CheckPointPost + respawn node 0.4 ahead (floor height). **Exit** = LevelDoor in the cell centre + 1×1 FLOOR brush with collision material 16; target picked in the options bar (world/chapter names, "world finished 7,7,7"). **Secret** = Secret with a 3×3 box (2 nodes). Guards, alligators and spawners get one 4×4 box (and guards event bit 0) on every way of adding an object (`Edits.placeStrat`: Place tool, drag from Objects panel / Assets, double-click) | | **Coin tool** (O) | Line: two clicks, coins every *spacing*; Arc: centre + point on the circle, *count* coins over *arc°*; Coin/Coin5, height above floor, follow floor; live preview | | **Waypoint tool** (N) | select an object (or node): click = add node after the selected node / at the chain end (creates the chain if missing), Ctrl+click = insert before, drag = move (keeps height above floor), Backspace/Del = remove and relink; Reverse; orient new nodes along the path | | **Zones & triggers** (J) | handles: 4 corners of box zones (node pairs: Secret, CameraSide/Lift, ObjectDontDropInBox, FallOffNoHurt …), radius knob for RADIUS parameters (CutSceneTrigger, guards, CameraFocusPoint) | @@ -20,7 +20,7 @@ screenshot tour `ObjectsTour` (test classes). | Inspector "Waypoint chain" | node i of n, owner and role, ◀ ▶, select object, delete node, look through | | Viewport layers | *Path directions* (arrows, dashed wrap segment for patrol paths, node yaw ticks), *Zone areas & trigger radii* (boxes for all zone objects, fills for the selection), *Camera frusta* (CameraSide/Lift: computed game camera from height/distance/node yaw; cut-scene cameras: a frustum per node from node yaw/pitch) | | Look through camera (Ctrl+Shift+L, View → Camera) | viewport takes the camera of the selected node / cut-scene camera / camera zone; while active, flying writes back node position + yaw/pitch, or for CameraSide the height/distance params and node yaw (one undo step per pilot session) | -| Problems (Level → Check, Build) | guards the game would remove (no start box / odd node count) and guards waiting for an event bit, chains not stored contiguously (error, Tools → Repair waypoint chains), param count, out-of-range values, missing required waypoints / odd box pairs, types whose originals always have a chain, LevelDoor without material-16 floor in its cell, impossible exit targets and (7,7,7) in TestLevel, far respawn nodes, several player starts | +| Problems (Level → Check, Build) | guards/alligators/spawners the game would remove (no start box / odd node count), alligators outside their boxes, spawners facing away from their first box, guards waiting for an event bit (and whether any object in the level sets it), a start camera inside the llama, chains not stored contiguously (error, Tools → Repair waypoint chains), param count, out-of-range values, missing required waypoints / odd box pairs, types whose originals always have a chain, LevelDoor without material-16 floor in its cell, impossible exit targets and (7,7,7) in TestLevel, far respawn nodes, several player starts | | Copy / paste between levels | Edit → Copy objects (Ctrl+Shift+C) puts JSON (objects + chains + brushes, relative to their centre) on the system clipboard; Paste objects (Ctrl+Shift+V) at the view centre in any level – types are matched by name/variant in the target base (unknown types skipped with a message) | | Prefabs | Tools → Save selection as prefab… / asset browser tab "Prefabs": `/editor/prefabs/.json` + thumbnail; double-click = place at view centre, drag = place under the cursor | | Delete | `edit.delete` is re-registered: a selection of waypoints is removed with the chain relinked | @@ -32,14 +32,17 @@ repair action guard it). ## Files `ObjectsEditorPlugin` (registration, actions, waypoint inspector), `Schemas`/`ParamSchema`/ -`TypeStats` (+ `type-stats.tsv`), `ParamsSection`, `ObjectChecks`, `PlaceTool`, `Setups`, +`TypeStats` (+ `type-stats.tsv`), `ParamsSection`, `ObjectChecks`, `Guards`, `EventBits`, `PlaceTool`, `Setups`, `ExitTarget`, `CoinTool`, `PathTool`, `ChainOps`, `ZoneTool`, `ObjectOverlays`, `CameraView` (zone camera + pilot), `ObjectPalette`, `ObjectClipboard`, `Prefabs`, `LinkDialog`, `Ground` (floor finder on the collision polygons of tiles + brush preview tiles), `Session`, `Roles`, `Draw` (all game↔render conversions in one place). -Shared change: `editor.ui.view.SceneRenderer.brushOutput()` getter (brush preview tiles for the -floor finder). Nothing else outside the package. +Shared changes: `editor.ui.view.SceneRenderer.brushOutput()` getter (brush preview tiles for the +floor finder); `editor.model.WaypointBoxes` + box setup in `Edits.placeStrat`; +`editor.model.cmd.PlayerStart` (also used by the shell's new-level templates); `editor.ui.TypeMenus` +(object type context menu, used by Assets → Objects and the Objects panel; the objects plugin adds +Edit type… / Delete type… for custom types through `editor.tools.strats.CustomTypes`). ## Verified @@ -65,6 +68,15 @@ JumpingBeetleBlue with a 4-node patrol path, CityGuard with two boxes): → tally "Dorf Kapitel 1" at once (`obj_game_village_door.jpg`); at the door's own position 42.5/3.5/49.8 or in the original (door closed) → nothing. +* (2026-11-07, objs2, display :25, TestLevel on village 2 / village 1 / t1l4m002): old player + setup on village 2 = camera in the llama's head until it moves, new setup = camera behind it + from the start (`obj_game_startcam_v2.jpg`); a CityGuard added through the Add-object path + walks in its box; an Alligator added the same way appears and snaps (`obj_game_alligator.jpg`); + original village 1 with the start moved and turned (240°): the fly-by plays at the new start and + ends behind the llama (`obj_game_village1_moved_start.jpg`). Editor: type menu in Assets → + Objects / Objects panel (`obj_type_menu.jpg`, `obj_palette_type_menu.jpg`), event-bit info + (`obj_event_bit_info.jpg`, `obj_guard_event_inspector.jpg`). + ## Known limits * Parameters are decoded for ~35 common types (confidence per type in the schema doc); the rest @@ -77,8 +89,10 @@ JumpingBeetleBlue with a 4-node patrol path, CityGuard with two boxes): loader exactly (`Tile.cellX/cellZ` = ftol(x − 0.5), −ftol(z + 0.5)); `ObjectChecks` tests the door cell like the engine (tiles listed in the cell, any height, swap models), same as `GeometryChecks`. Tests: `GuardsTest`, `OriginalExitsTest`, `OriginalStartsTest`. -* Snap-to-floor (`Ground`) is geometric: it finds polygons that reach into a cell from a - neighbouring tile, which the engine ignores (`FloorFinder` follows the engine for the player). +* Snap-to-floor (`Ground`) follows the engine's floor test (FUN_004036d0, used for strats too): + only tiles listed in the point's cell; then their swap models; a neighbour tile's polygon only + where the cell has no floor at all (`Hit.source`). `GroundTest` compares it with `FloorFinder` + on three originals. The Place tool drag moves only a player start's nodes within 2.5 cells. * Zone heights are estimated (+1.2 above the lower node); the engine tests x/z only. * Camera preview of CameraSide assumes the player in the box centre and default distance 2 / height 1 when the parameters are 0; the game's FOV is approximated by 60°. diff --git a/notes/editor-ui.md b/notes/editor-ui.md index 1026a8f..387e9fe 100644 --- a/notes/editor-ui.md +++ b/notes/editor-ui.md @@ -158,7 +158,7 @@ public; invisible tile instances are no longer baked into chunks; `History.undoL * **New level**: dialog (name, author, base level by name with its loading picture, TestLevel chapter = next free one, template Empty / Flat floor / Island). Templates add brushes, a Llama - (camera node 8 cells behind, as levelbuild) and a LevelDoor on a material-16 floor. + (one start camera node 2 cells behind, `PlayerStart`) and a LevelDoor on a material-16 floor. * **Open original level**: list "Village – Chapter 1" … "Lab – Chapter 5" (+ unused/front-end WADs) with the CD loading pictures (`OriginalLevels`, `Cor`). * **Save** (`.llamalevel`, default folder `/levels` = listed as mods in LlamaMod), Save as, Open diff --git a/notes/img/editor/obj_event_bit_info.jpg b/notes/img/editor/obj_event_bit_info.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8f25315ddb3df705be7c2857fd4f3adf414bae06 GIT binary patch literal 39079 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
    ~bt4&k7|c$W=%V^M_$ z0Fd{J1Beuf6q%LAmImZu+IXRTq(ni60ss~9hCuu`FQP$jAkg6#=5;7TwD@9%btpQ_ z0z6`)5Wx0=mOO<`g=9I9l*UAgoSP|b2s3||gDhczh*(~;yLDHeMOTZ{Ov3o9cz7f` zF`SoRd}JjSH~iNIzH;FecVU4}{%h=CLu!`@6t5Rp@^_JSn5R?Z0jczoc(SzP2v@Y@ zQZyVna8Mdj+;1Ym8T+gO>MAL|=>IAp{N{Q$6M$ngJoA#viTtW@h>D53 literal 0 HcmV?d00001 diff --git a/notes/img/editor/obj_game_startcam_v2.jpg b/notes/img/editor/obj_game_startcam_v2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cf7ffcf25d8247d0c1dbf6c41526ccf3b2c8c490 GIT binary patch literal 45991 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 A+5i9m literal 0 HcmV?d00001 diff --git a/notes/img/editor/obj_game_village1_moved_start.jpg b/notes/img/editor/obj_game_village1_moved_start.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e27a95b7d86fe5a3ebb1aacbeb66745ffc27b5f1 GIT binary patch literal 46626 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%0DE3Nzg^!l*=z({iP*dU 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 aI`SZnYL?gE_|5tJ2(taS8vIxyprXUZcqmR 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 literal 0 HcmV?d00001 diff --git a/notes/img/editor/obj_palette_type_menu.jpg b/notes/img/editor/obj_palette_type_menu.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d8873b2e97f14cf890f27642448fea114c049be3 GIT binary patch literal 30719 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 literal 0 HcmV?d00001 diff --git a/notes/img/editor/obj_type_menu.jpg b/notes/img/editor/obj_type_menu.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c39b682b52cf156e241ed56897a7652eca151f5b GIT binary patch literal 35039 zcmeEuWmH>T*I;V2&_WwZfuKc#O9@h(2MY~BiWh>k5F|i=;7$#fLeQYa9f}2q7I%s} z6ffH1S{VAy^E}`C}Lu8LA8TquZkx>KEYUY`X6ig7ESHn+bF!pcC`2~f9)tw?@O3MhD z1vHEuo!>{NmV6nUU-&8iE`0~gA}eQte0#-&=8F5ZTmK{i0C4--Zzk98T(v3!uUfCv zzki4D#?33TD>1J`xCOjP&Oku=h=NaA!vq{dH?GtL-T(rm00-?{zF2{#5`D3h4{`Hz-=%IxjEYJqK}AfB zhNNbJ=7XCXHgNVu)G?=PM^DcY{|4>GDuC=y8{G-%H|F`I743slfEZ=?Oh|QqCkqud zTtAB_44pY-(E9Wz-R<=UHeBH;u;efNZ%ZC(&Xd@3bEtvoKfaxiK-iwiGm8Jv8hI!T zUE&L>`|}C_M1k?Ca8KPZ1?Uo>aN$9uvN)57YIBL}>4jQK!487zdKNQo{Y4C--qUq5 zGVHhn6#Ja{vO3u(k@Z{xQda!<{uTjn+g|6ehT;;y|BGQkima4dY9RgOVmt1z{jW{{ z$cSG!#Y@0_(@Q{9C0S@|w`wc@s>vh7Uj)dP9f{02hl=MzzY=~)4XlwRwbzQAjjNo2 zA~Jee*O1E0l1sr(Ka zy39+!tky67Uu#~p`;ALtyyxZT1PWPF3;E>2q9C&Op_!Z&{pYPu$5`bbv~l47Y6NU6UX00H0#(`YJ9Mc5|NBjRld|HBYSVP=izhB7YGzys)he~m%O zZh$jdO;DvKZpQ2SD4OfMXkiD_NOzq5B|FVU;#=J%fa0zVlfQqcm=AK!>*9mLi;$w) zW)pPQ7^0}{$xO31YpCsQupNg1f;GD$HQS)jxt_(q+0a z3^dWQUz;^VQ=7MQpOLrxN3{@{q%_M*@z+i z{(f!V$i86FRkS$pX8P+o&VM+^f4ZanXX^7W{9mLvf)~gj6*Ut`ICTa;bGZcg{7Q?+ zYq)ZKZEwGlfDia>%zr5zfz`K}DPJrxt0d(@XwdE9UmlW)TP|pyIk_sN=ls*eCv{^V zJ4VJovScoDPv*$1DNUW>l-?|iJh>?Qm7;1iY#fnSz+%4cZZOi-;4e6=p)lpbcXd;1 zG0j}UP#qRYluIZ&-Rp$q5;}kIl`p|L#lH9cqW?SkjMV=lu!uGMZ$_5?%LD!|0-l4U zTrFPtLc@!|yfM(bzVX6moIS}Mb9yzC4YC@x>Cx-w3V*qd&hH@M^nVsR|37HB3qGF{ za!)w7VY~$VG*TG51Z-Ra9%nhNwf`Pr=lHXlIsAY9xtty$Rv6PU@(||kp4&*HA-dqR zw&r4({@o_e5o$1U{NXu?^wZaW-TnWwkCI;Y@goZPZgS=?W{tYU*oMB7ja0xt78f-r zo2V0xcOkmx1uh&<2B(6(iw91HxNVGVqjj~Eko$`dYtzYRw>o#l+&L5T>aE*W5~*}l zs-=;!qU;7a6p00U{3ER|%Kb3!I;i2QDgLQhQ=%8PePF)QP^q>#pA74G|556VnjXur zcBY!BxRC=jx&-cJcPi5is?qdc@1t;+fIo;Ic4}xuy(vB=ly3TI1 zQJ5P`gK2!)r${dg*L&7WsNMd_{7sh_y*8(LEV7EkA-Lsj3&ld(U@nnCs**!|P=G&Z z?D=AmsD(7d5}skh6i5gLzRp=U;sjOUi6dSNprFs&jKbwRA)r6$Hqg{oanyuPklvtnOL`2)L-jxaIG?g=hu8G z9vj`S>Mc?=;^A7aiQAzHM7&~n->II~j9%0gqz>qaZ8FQWPLY0KuvRTQI@ukm#;N4c z73{0t*_e}8@&=Tv6G8cHm5AZt3f3`nG+@F_Sy+GF1xCIieb=cgg{Jfiq$gVubEaQ0 zZTrBMRU<^GiLtzLN_`?|r)JMg6-@Xv$)avaC~{*_!{UYR6K-o;u$8Liu9D13&?P`3 zJ;A<5rwfws3MfvQB$%5$&B!XwomnntDS1Ou@)pINJFvPuKJsj>VU2IqgPGf6kEX-y6h&5RY_2@R=LKu^xYQWcYMKano@l3n%%6z{%D|T)1ku?*Z<=ppU zfm3B7x2WR;6Y6#%V3IFqSd`No9OJu9uFbYPtw(b7A{QK8p(Y#++$}v`JrQ{;W10z+ zb;vUgb^WJbVH#EnqImUzf-0Dq8N#n4rkcCet;3pOjSvkTvT}ICX*dHDwDx2+-{17` z`h)Y+Uff}+iME!GA31R9mkhUXQ%>bj%ahA2qrKJSZJDg2L$E{*mv(|}=?!&^ z#Xedq=(JptfJbWm7&Ee^JZ3ICAJXoY{>5GO?(`2W!LAJv2d({X)e-}>k}uzo5kHW+ z@HZs&M@hnk3L5OQR`(gewZU_~%;t^RIj^-pHK>>Fh;q7$>?eqyeAf%uzNKLMLA%su zTGXjC{vG0(9u+uMZr`-9K3qizihR2$aI5JO5KX`vRxk1J3C;W=W?ao|+1^+Oa`xhj zc$3jeR=goUBDB1`YQf~;IUz*t00i%P36(#v$yStRA47#WnVP!tmP$V z2Qt`-HVAO<=eBk@n02ngn7vV~?{99c)XBG282;L@TJCO2`xZr^HSn<&z70>3?6Nki z4!gM*R(NrzFqKAMEZ&)M2704bDw>5>78b5+I&Nd~;l(0nuE=oY$4}L(bZy4Q^4NhV zd!gb3HI_`@>_(H(NYugv3((o~)2DT9Uj3>eWqH4C@aIF7=IDFz-{-lR@hcqy4JeJf z3RJ;3jWD3VD(S<|FS)g;&gAJOlip~)()B&fUH-$@!AebkI>5*zRiNt+t|*rD1wZc z-WE)~i?0@mVfrGUy{AmmLk?5Y%2zzyMXpilyo4xDci6$IZDj3^%j!?6XR;3|Vv_=Tm`+^y2zOOBDGVZjp;G_&wsBcd?fv8o5?8Nn zrD~uXHuU0IJM*xten0~?hOxey#=4=R&`SM5rU2BFn^Y-aT0P1skB#V)r%bQ#sja4drpis9)P<~30)EcP~4cr-!lU{Ax4#8B70wha*O zLofdAaO_981`EDd{#3rFW?h)f(A{%ShbXcIroHy~$BZd(r?c>QEiF`g&r6%bXl2U7 z;e5)sG7gHc%XeUs81$gO|G+t?ka=2G>)l9ElWF_?FW8;U#gI*X9&T!H>z*SBY#WKN zEx~2HmHQvAM{dUpx;%GE=kM6Hwo=eR6XicBd-DPA91*u_Vs6WhH$<2+!gf*MWU!rU%6*<&=#Xs-L$$o>YY!pGl7;O1g4v6IAu6dUr743|ZB40PvrW1J~6s{KI zpRgcE0r6b>(OhY?<|P*Ab_r0amRyROWH-n@N{r-(jI@lG<4Yadr!OYQfC3CGDE`)imkHh~l5@xm@L*%;=1- zi?ui$a|rvf5z8;_)NWRzC!xYEQ||GjWF7mrMAqxDj!_Z(ENFNla50l;K`(rATCdkq zRT#!U&0w-C++EC9m-lvE@?ntXi?%%bO0t{?$mAPsJF}>?sD0EkG_k;s>y-M=YE5W% zM6MZZoMmdMHUd6$zKtbFv6xMnnB&tA$~g`-4j-r{RYdM6#VA1*127gcuB81d0U;gJ z{MXov+`)PAc&9@y6H%Mq_JAO2=e+WgK=aV?oM9_(vhTg%PNj%=Vy;5IBMlGSNgI~< z5+F}tY5?{!4Nb?ZFUX_(S8A||OI1;%n(F~I0mDd32yeknfgUP}0-TUDp0^fh1Ns~@ z;9yxKO&=EnF9^5q&|2}n4ZJAa!xbOveiKSKpd-@5FnsQ2+BA&})>GKRW5M*7~9T35gnF>v3nhxj~^iEM3 zg#?RkS&R+{^FgMl_0zi7H}jfl=O#4!3r>_Q`)-?O+FH;#(LPhYg?+B>Ey2ZYN4%fvd{b1i>6W7tLPUaSFz8q=E;|>h^TRa3X<2bh*Xi$ z;1z8QHe|4!!*N+BSH%Ii#oFZ+O+lqm8zA={!)imvj05J>^l(g?f5f#VjrVr43w-#4 zZ>oxn^zle%`#Qy=Db7bfe>Q^m+Y}cR_U;Gzb?!+@4ei10w!YEC+b7Gm zHAR0bv9u_O2#y)(t7J~6F04@?_7^6Or|wa!TQ7F0ur=o-P5t>h$&dR=~ODMv=m|l66aTH+z6(u^u4tvu1OuM})DbT#( z4CpJyH_&Tj*{+V-pPYLL70cUpRSrpTdd41w)qmXsB56mJvy*lzwWCln)8@XOhDjI*YP$c8^STzsR#^ z_Wf=Qyj+&1WC$Xs!PX`|Yxh+05SmhZQ|{p1uNssBSelS^%^@pBwfI1lSVAX|zxGq` zdBi51sqkI4sNkEP^3ry?U}|770w(lWj}Ib~0cYFd9ubZSNwB~%r^2{LJ)s%C&Cea5 za(69m3<-`35+~;@a6Q-9>lc-4c`qIHB@f!0LL|KO_(%b?sklC8{G`xQfz?Z~yX^Z3 zf#m3Y#WR}`8qcn{QGw(YC0fA8Gy>97^4o<_Pn<>?e)L~Dw;e+cPngPfie zvqve;_zIG?Mk*@Rfint~IRiSP27`+O%OiY;=mtQo1xn@<`T@TeJzN882O32GSo9F$ z1h<(Zt`0lu_lt4}gL9_zPRfdK|#U<8&oZb&v&2{cPn^hX9(pwZP8n2gG#)1e!`95gllTUVaFe zEjXYFx-$SdyvoXG@)} zxU0PHWe2-Zn;Xxgt>*Up6sk!-m_VkydP1S3kAE*5{v`;Ipo7=V5==oOhd2B>d-%K* zEHWl_bQDb!L=)5l0)nEN=-l2vGi}o~3B7ry0!D)}`akrN#KfXj%&`+|3&oD}q8{&1 zNN?w`&?8C_ypTB%qX8aGuRFuw(Ai5=&uv8)Vt$bJREdAvfAL!YBERf)FM`Og3LT|v z&ZH)=xPWJJEMF_I!@dO}omMb(ndPa=ba#%GEn>9odr7c|D=sim;8mEg(vKdu1dsTY z%0}*0*3K11W5GEO$`D55r)i#Bua>hj8$Nb5kU#Yn0R3>eP&~;!N#Yrc%_cPO*XeLW zt=Z;4ihV=p{5)nZ0oVphZxgHTq4#C0`Ag#E`<25Wou;-Q%@W&}fKDSpDZYy3wIh!AipxxZ< zVmuE#{bQ12PTz4HznD2Tub(^NT*+P$s;d`CbEPD0OcqO#H(U6+7Bg`OK3 z0(5o7$5Ec2|Bd^%4gTxFIH(^vf#s=o&@a2kWg4guJ2)2(`+q6+}eM zkn@>DzL;oFw#x_Y_iU730^%6zf(0taPIOwK+XMtigG)eigS)qOx3$>NyRw!1Rq?-D zZ$Nl10sTf2QtWuzwJ#HUT6@Xz@raG{{DpLvYd8v@)#Buos40^DZ<{B1C;g1Q+y@t0 zJ8HGBdx9JH#`;ye(Ejdr&YmNls}W`~r`vNLe2HUVv?2(4jpB1 zFP~^nO`C80j6co~_J(#7Ud<-brU)8|Ea_%8Gv~2W~&AVU!u7E{4GjvMD{qp zsD*s+*piEL^pDcYaryM`PHLeFK2d4 zNrfH{Br!aw=cq37B4MV)sg?WAp_f44Vglj zMNS7Cszq!Kd-;62Udh&GgQQXP3@UY4gB47La#w1@xC8o;xa1krv9mv5um2wQZIhD`^lLwvfTFr<>eE7NBJz*804NFFWLL%-?7~~4pAx}V`|77z# zw(ExUWHiU!nu#}zN<318rn<}!1kLTz3-NnvPoY_cobK@FHdCCvKOkS}w+HNH9;&!T%4|@dp;O_jc!h@<;luz3^#WA^5 zC|2&k@a1TsXslJbf^#f;X}*HculLT=i#AMK`1yG93~Wp^$aWYhz@3NdqSH9l4VyI) zHVs{JVMGzQIFL+gE0{yNxB|9y?5LQfz?S?A*i6!~mU0IRmf=ZP?8n%KWl%Dc#&*d$ z0vK(o8jAeHH(~dpg@*+e@2>{3H)HIKN@QzkGQ~LXkVci4rVCcKy(XVA9Hv!G>&yL_ z^i<`^WY$9E1PzV?gOr46-p>CzWdY}@9B#a)r_}FFFKF6GnEDFp+hrx5-iqF{9-~i< zCjKR2tH%CHo4TNy_U`&m5U*$jc!&p+a@h2IfMWHjtufP+?WNP@d{Gw+t16^wJQS~i zoFUCw9czsstDxB0e@HghXk z6`@LkB%+2Z9^ZS!ktKTO#FuCfW0#v?o{+7@a7}9@GQVWCJaEzeVJ`~zE1_oWp#1EB zySHe|&yy!Od@Ll${Uuy&nN;5*S*B;8FP0jGE#IL}G^3W16{Omb%Ew!QEApe!8tix^ zA61YOS6l`jTPhd8uUU!EKKJBgCG#hh%h>vUt?Unl#konM{^JCx?+=L4U1i*zpKMeo zyp;pS#f(fq0b8{1U`z&{E*a&+xT{JVCR2Y}$B@&2sp($;akzsrFKl_KdY15AR~xz{ zc73LG*RObtL&b#Q;A1SQIx)1eb0jAo;u6p^y`a)2hon0nyVta+T5cuWSF(a|?x$~G zoseY(w!L-BA}`NH@suel1w!RVklxK%3(K876RA$S zNLK_gS8r858Z)>u(1|}O!>~lout?`pj&31ZPq-EiMb64am_2J@ta^Xw(Iy6dk0nVW z70y;v!rCiHzST>_6um-MA(O%JfuE^m_M)_1N3*6E$BUSFx>7)$k4>;2O9G~qA_Ym( zAWJ>+k?g{l!1rAXD+XY8lquB8HWa}9f&f#X7ZnIX^T#3Y8Jb4-Dp3xmb=o(9n!V-B zGDS1$lsgu^McCB>xu_nbpYPQ-ZQ~<)a0&7)h}*gAt7Rx%l0LD4SxW?QgFjPkpFnvbbDBCu35L1j zh-ti%JA~k>5U=uQMc4q zJQp;PSV4BE{K%;J8lTPRXfT!2NP#IxIT;RZ7`5})cD|o=+|MS#TsyShW65ETe99N& zcmSMFP>!alpyoipm@q79GBu}_F#3#2s`IyPv%wx72)Iu{T5c#>Sk8)xxFhM@r}t2E z87HJ;ew7?fu^G+h7R8~psH+h^jGn;$Tru0F(YE`pyPuR^_y^uddLz(W3L-O#(KsX z_ER8=6vnY2^GuZdJoP}7xmP6HkX{Rp&Wpy>84%4^>Ny8>R#J&H=k^|Y z^e`o@$drL0dP6&>SPhBlyHEefQgQFFgl)HAp~LN7t2USOhFgo!E^)j1x>6vs1(*qW zlI1yn8@d{0_^~2a`}j~S=vjF|TdC-|y(3$dS4;Nl!<>+6e(Dlr7>#Br4w_~7 zg00PNIJ^dcBFI;6tgL*p3Nz24Y82D7OGMj)=OOEhYwlW(Iqfz>d((mJhm3m)^PznR z6(~PAJHfPEWLR62n?dt^8kD~Skav&ANdz=oUeoM5j9jz1-*vOC@4Y|7p0^g#{T9{bbTIpAj7}kgzf<9qBn;WD)F@p!gic#Oz>2 zvT>d%sFJT*nmD(bPKAa3z__G`4L0@2)T zA@?sR7Z-zY{u})1ZQma&e2iWMz z?DGm3^4Ok3;M19tqSJ2|AC>17MH1Gu_S@@OnO03l>QbvHtW!k&us(S4+lRE~9X zS`my9Ntj?nXK+pKULPLX7HuN!iIjQXFKm`I$z3;kBzawuwjbRiG!D4WbqOfF8)PGRO&5?bO72Co1Q=v0_AXlTm7G;|oIfP?uql{dWiUaK2gJWf3nw2BP{bL(Uh$ zVVihF%;L&g`5O1Q;=(I#2Ib7&-c~9y=!2@m-1X2y_K%{m$>XE4TwR^oyH=Rdj3)z4 z4rFC9YO||!M(^oGCutcW%$YE2ym|sF8IXO%%e$g{C}gc_SP0c^mvEjONtxqyoUyS? z#J}@O5o1$Wt$4nECq+?DQ8RNhG$iVVy@gr2f%$=RFA`s2Uzleq)Z@pbrji*+7Bi^* zEP}u?X2WvsgD-L+eBoJCQawP(;wnRKzafu^OO9t;gRv>(JU>~~5MM(tY}{Y)lJFq* z+EA%wDi5(6sHs3lOq%YiD4PmvX)l%ceOx zqn-v2+KqP?>mAr(Xd8_LGoaLf*np0Xj*$0n?gpX0U^BvNV)PtmJCYEdhrpj7ww#{43>n*DuwGCvXOC-N_FZqcx2dm zYgNCiOtJtqI=396)|vLrlu%8i#O{Hj+J;R**VpO0&mo*4jFk+-LNEK?kkW}+nOV2H z-+rGA9s ziNbItv%q0?g0+V2PP?9|1!-LV>#yIG7xbp$kh;Dk35^ENLqbE|Jr0Zl;|*38wZF0TQAJ#xjqxxbt`g2AZeja+k!*EY* zySiXJ0kwJFU}a-@Y!jz3&2eOhrf@|hv8=tUQe~Tla32}JY|+P|+b%K6R8Q?fPTv(~P3Gp4J=iGR z1?`Us*N^5PU4xY*=I>S_qg{-L%{>`x63nJ7(f6Y4t$P098V*Q`q+25)8=@tj(ueUJ zmXJF?brTOI%GQrz+DH5k`#` zR6}OZ4`rxsA#*a~Ut3{$%l#rpiXD7EEE>`GNAKK;tq<=x;uF*N9;+WKN_?4-r zwj(Y?&C|>N=zR~|Q=G-GCJ^`)DF^jae~$y&Rv&~UrgP%E^4dlVd@3QmVXEe@D0SQJ zj%o!xHygG!aTC8!Tok^@Q`IkuKaLv8aVlGo#s-_>->pm5<0U$J{2;r${DYem&$SqI zz3BZDYdC38KMuQlG1~n?DhT=nJ?BN?o|EO(?03EDE)vbTsB}FChgip1ue)94ngK&} zESsi+|x=WqoOn5Z`Ryv{S1`ehv+(g1?L}Yv#)j{(d46Z7X3;UWDdU-RooZ zqpA2*P5cuZ$l8)qKo5)s+PP)PSxz%9tkEU51k>GhttF8U4kKsuV-{WPrIiL!ye%YQ z8!X2$2MnhPf}B9fE7v(FSZA2u$=inQo1S2J5g|RRT-;{LSo~tn80Zf6EZ;4ov`nx( zW)zEpS}G78y#7KR>Gz?fIO$rVy&F%P2YD%L-r*N*j`(iqkiCY$oCuq1ym~|*xJfOe zm&FW!ij@5_i1>k4u4?n-v4^$Ce$G$%RvlNlVoHHZh?*4J-+~Z7I z_Y&~X{MYqsQ?aC6$Hme~pj=>vP*$?(FzMF?G6XvZ?5d0h6cKR%q9oP{wAWbr^$s~; zziF;w+*VR-H&e`N28*DpH?PLXhin9y@kM|lsGnV7T0arzo!wJ>)lrH=uNX?>7j2lM zqBFWpU{@Vo84i%TKy^1$7+mWTH~M4|lCEIS%zLLamOF2SqLTXgq}NC#kU&lj^@@!< zAQ)ZqTBE3%an0S1lZ*QL`#L9b0joA@Z#i6yMRBgj8%UgA_pUG#_vparg3wGK1-S|c zL}|n=V5MSXzn##Z>ZTnOL1of16OxtI8Ag%*$ZntdvIvO+O* z;>))ppK}g@;|igTC1Gf2xW&^nFuEa{Ov?fNgWB7?mysFxfH;ug9!C}5hE-YxIWsi8 z`JTXA87ee0Opz43&iEVlfq)IEUyZ(30}*+V0AL1KdUi)jCYx2GV^AF39QmbHD_T;m zPX`(K8QS9E&oIiV`r@9G)X*jQY6h{>+wnPBjjfc0lP@MFF9Eqqsy`^>Y+1a-n@T6A z2f1UkP^PN=9JfP@GvH=oVdYsd3kba`*OQ8>(4G&*diZ@`0S$%ukh@~kV!Zon0l(4- znz~99?@fko+OocxuNb5;9Rsau&ymJEk>EX_LDa1AU%eE@@a@&0@cpWg-tunZVel6p z);HYh`67dXkXwm)CrYVj;kJhPG*z{ei;&*>aHQm|8>cj+d*aY zk8Bx4)R{Li>BG8B?ZtR)1k`%tAZX*dbka(4;uc8WD|Ti)8H6kBv3X zA$pxl!o8}Qt({ZEeY?$)iGNXIY!$GnXEB;My*%?YMP|3~5u-qRU@b^lK9WW1{*$wv z=kp3)qsP?WFm1ybKbcH;NXMnv1vlwdvu{jX6p3mV-0Crl4``bARp0sG&fCf84fAq&(H z3wc7tC;r}zFH2s$eEtL^^+CW|Q&hM2h}OXjE1f2CY_pmDK2VIwcs$^0VHAT~GrXUE ze0JP$O_zh%5!XK<9w?-qExZ&P615TJ3=b1F%cKCFOxc)uNAf>u*Ub=hQ8muD-1NZ3 zlp6@yxFXhPga)T#Um~b_8b!~Piw9QhHp9qp5xyRhU+=-eL-1*8s*oA+>T!Vrk{XjR z@zYnIF_GwUDze5tQl)T@lw?majMM8MvP&l!&+~08HG(+gJXX@%aq}^dW#Jf;g6Xg! z64CWo5MJ91AKn!nGqU;^d$n~@FPlz<2`wr)tzqrcQm(BWSWzsE=1||H@mmt?@H$G= zz*2nc=T2MItdDHQPZQ4Hi`A3P#@*{)8zZ|LUYAt$y+XmSLsp%<{q~b1fmp&jUJa-s zimy>M$!Kb>DveK$`d`t!E;Qn=CK0zO#h9m$jkj0xda^T1Ei$6t)XyW=g!Jb?Vy$0R zY@3I#yWAX_mQq?XX#W}SL-B_@Vra&;iPm+DVFYuPa$Ju}SC3u=;SO-PQ>D)@J_Dpz z#wEcy$34?x!fBzl$}h1>0i|~i`4t0U>Y7kRnZYzL7ICW?HcF?jd}jQYC)p}L#nTfu})_qE{<4;0$DvUK|WDI zXyN(L=}gIbq&T%{R!X~0A|A=xq|sQd8dq%Ol>K9%E>Fx$H?K|WScWtaZ8aj0z>cC@ z@e%WAw!(rUIn3xO*l(JLQEHKOU%Na9jH%Q1e~@n}{~3`uD%Nz?_4DRc3f=MN4%cz7NAgMo z6L&wl@(GB+A_k|kywS&K5-gvV`7H5$;t5AUPvu}nBRI$JcZ?*hz|P8|F#1+A3N3|A zGL1@hmU(rMm|OIM_f-SS7eig)T|Y_XSYKurjGAo^q&PM9Q8mH?&KJNBw7%_{d_6rO z3hyJeVf}2TRY9km*a=K)ib|$fRCv{{Iqa;7@J3~1-b6y>porJy-%hRk*Cws+Q@rE5 zKUw3S4No!UXwvj$5WfTNh*}KGWmCPXlbeUxHpy4NE(ZX{^cGXc+Zv1yj`3;^ZkjU& z`8q)GP{R;}I(*6oZ(t*|pe)YI6%s1-dysMY)1a##^ zDn{AOR(UJS;p&e&<>KB5Qk6q23*;>s#JTcAH=l z3DeptZ-1A{-DNu5SjoS_>2g2hL*K%+lm`R9L_Q~GI{@1v^c^1*SZ%;a4fRagQ`mFW z6POFlpl~<8=us$YeqNPGsiTSF+TcV~O<}U-wk%a)uu{f?PK()%ZSk0It+34d!kMYm zk~>r)Et%r%EFc)WCk>SPDk*V0F5CXv5S;4NQkNTy2}&w5!_1cf6{4+GGyZa7<<D-lU;hc~b9V&7&EUZ1O+bk-Axl?SbCd%y5>95;^r|VXt zWNN*U8Xez83l!o0+5=AZ%5u>FQEE?EqA~etD z+=m#@kkp&e3^aYzuK7i>!E1OgBMc%_b*J+t>~Z)PM_ZNhS&vayU#6XmdSK0dk#baS zGBNOW4U+;p30L|js7ItSDR9`(Rt->d^~m-QXlD0E3O%#58VHGQq?UWf&zs+`7;O9f z6yW5k`?Oq$uEqQNjn+sH*;kti+pop{AE9nr(rABcHhu_AmvhDrDl3d4v5ef80NdyH zKL05;K-9r1OyAG+si>TeuFMoz;F-i=It&Nm=HOMlLm)-2yhZF^LSF;eLC$_1_W+)K zy#H_1zb)~9<`dT*U$4$3FUu+a!Csf|fx{WVMfF{Tn7%pT$usgz)+Is$+Q9QDtuUAs zN^YJ{S%bb#uB@n=gL`+1n)6v(e0~<|Aub@=GFV1{v6iT?p{JwvS7f}2{Dj(l_xJ`NY~ z8v>gc1z2%QYag+?asj7SG8-xxF}|q{%(*Oxh=_H(>FIm)_2RUNjIr`R^VU1GaNtM=CCUG7&8z27UJmkJ1#Or2AdA=^A&s)m^$Qc&x_@IR9J;bb)bD! zQ3+&85e{8`T;;6u@rd|Mtt%ye%;Eg{k+YDTq^fwzCL^CDL6XU!aVMG=vd6ZF9vwzx z!qn)xU{{*QszvyHo~gSB>h`cZ@TdiDeXnF$Ee)hJad%O20lpM8+w{5N7|54|Y5UsX zU~_|CLxqBnGXOu`5zx{5PfE8GM>_j@7qCloo;Sa=nI*WlTwmp0KjZ&z?El0LLA^pu zu&kQ#7Y&bSwW4%{yASO-sWFOSIO{IcQa3`ilxy*{5Qs{PC;N0Ig9*5^VE1m9HN=Zd zOKya(K12%`;#Ll4O}>)>k0RjHwz65gdqy-ySRI_}Z^UvWb1(8FXFER- z!PkHS|WH=PQrDaV7DT-=$JK~8v%+#)m}u5QsdXn)2bTH z)-Q+~!|(B1e5x6@9UmW3mk)fDDSq}t0YzLs`K%YN9)eeV7SPjk8W3=sZTyf{h+l(Y zU`UE~A3U05$*(9Ipk@;dmP1@^w}3!^&H;U+GAAE`xsDrucYRwP_g#2Tni$7=| zwVplI`H4P%Ey@{uXjA-c>IC4ZL$Nty^rdna@V$t4qNeek?b5aXDQl9yyJIR^+dwT= zm}n5jS;@ud=}}4x`I9aNT6e;D(x-y$rBrpcp3wY#3;*j@{y#oyI=wpv_cksq#~zpy z+*-S6n>yvV7@W|bRqwp|9>s?ss#Wzh&VeXYvQ^Hc6Dsj4MbZ+GO+?I8DX(iY4;9K1 zyOzP-9xyJu1s)bEvluSQi1bTq#QId0UBq4Vc-HX-y_ zB(OVoCETlgU-gh<4G9ggaH{HN{1&!}japZKJJH}8j*OgOVhHkIPJfG7=lO`LCwVe2 z7}1*5xy^UvGrN`QTBFG{_npTp=IRqM-{OPUt`&~p+Lv$T*BEt4Qu7EZCeG2f@*Tzw zqkkw%I>m>4IG!av;~V)tp|yf=0yN5Zm5r>+ibqAq8qt;;NV_mOf8C@L32qvcH+!FO zuD|wiS#;*r!2v#+)vM;Uo+G{B&@@%Lj-?ThW}ob|_X@I=1QsHd*>~^Bls3#v-qyF2EyeEpYbt`{ zjmujEB1u50G#A^Cj{^b(-*4%U(q!L}FYlFZ%r7tbyuYr}`FJ|9_@&Zm+yP;EH=*yy%z_v>|)z7Zt zV8w>!eLd0?jj_W%JG@r^$A37&t2pZ@g+6%OklbW-JE7S-8Rrd2#trV^wd-2zs2JOE z1^MPdYO6O2H;2P)n}Un`9Isx1QHmVZI%VsQ_9b+1mcpXml-ILo{ zI`h`SW1mVzLZlEk5;Z6838Cigzj%;_>MP@sk&OJ0^Ix8LU8rSwCagOM4>B&hn&pr) zgtuWc*jKW3hNhmFEhMOiX9`d1xj3@JBppLSIyych1d7?a?0gP|^Z2>wc;7FPxtlHf zns|CQ84g2mn^#IbQ5{V>xi7rl`w>f^%T+9n;?SLQZFtWc8a+~%R&j8F@j zz?&*gutl)9C`f+{<+fI2exjViKYvu+U?c_KuhcjwWcyfV&Kd<}UM5++Zxls_J;bowkf_HaI3dC5akHPyco*!PobiFd9Y0vEHjGt1I@CjpFUj0l)roCbim3pd~VLy={WYN8%+VNf7V`N&OEh3`i(>2VJoHA zJ=gwt?7l_>H!(I@hS)}UEtXV!r%HPIX+_BXVe@_MPbNh6LTPPp$n#jTyPezQAaDAg zrS9xS=!WC;R|X$=vaAY02NQV*AJ5gr?w+1E!iVk5OjWDl7!ze~5I9(fpQ*!GCeYf| zge9X3UEg`fakL_rS>I9+`x^b}w};bu+}QaEM^|%$IS?EW2sk4K8VQjs z1p{MsbSa6h^Bh1&P)%AYPR=1XSMRHgN)9Xaak0E&<$_mV=}HV#8N@cyhE)(I-z+;* zH1N6Dr8tQB?DS7_=s#xDzdq9uWXyBgPFfalvfdlwLYd2j%`WNNR5cAoZF|XA;~uos zajoM!xvjs4n4$8Rj^bjRCamQB5GGbAVGU)+o{IrK$om!%sKt`CUe=>NG)Y<$vyjPE zfdZ$QoO$?L#VI{9ECiwk@-i@x)y2-?ZV8cTpiqT*jEu&Zz`)S)B;qziZg*E*TFqub z#c)qg%Wvr8}rv3D0PZhB+YX37xv!v|><5Zoty>Z(-@#Nn*X zj4%2P>IC>4EDyhN964t)Z&b1p;=_ws%qeRRwQ}65G-wqy&yh7SR`n^r zj9tvxrgYhuEinPwaQc?v_OPdc=29xbBQI;}Ix2BR+_v85uwkL_X;}VKVtYLpli93V z-A+Q_1k|S3Vef`rYV zLq7>@T8i|38nF{ts{LKZi(&3C2{SCHJp>ZxFmw&q9GI z50)HzGb?iK5QAYY3+{1+N^mucSWXi#5ibEKV`Q!Hwy$42&V|)&wjGiPtnA$bBD;@< zRf$ywPWZLe2-k=4Q!AOO8XS|l4@w(sb+UDy?roXFAvOg4{8^+O5n_^(y$9>Hs&a`G zxe==Y?@6aqB@+VMXHz%%HxJcM2o95NqWIN5&kT0aD|IqX8`8rNs2-cOR5)8P3Xn_@bEjFxZGd#Gr<~B%e6FO zP6|DvpJl?R5!jX5;nf|Z-IW}|eJ8YZ5iW-^!4UPGzMn=Q^?j5US0{gd$OHNmH6XhS zU9ytj81TLz+2?+|g`r=hX<9|4o5NYv)7y^D`wSlC9}O4WVJuZH(1hhAxTy;%2?CY) z7iatB0^)f{iVaYG>Jn}FWmh0pR6%5cjhC$8JU{Lxe7u{QO|eZYn##^;Bt&5IKJvFd zi}0R>%F%?1v%hc(!hlvbW;JdX(N|UXbB!UBshh||ST~_v zV2htOvaD`0LH}06M`6TOn2}s?9!`*^rRq5<)0v*P@Ho;`aJ^a?d9q z88um0c2$nvv)c$9pj?>0ZMBP`jkQZhz1dSo8TyiV(!nGpcZ?sOw}LLeIW#S_4)179 zJJ6sn?A6UnTK`feL1M$1k7R+b>W3z2RoiWy$pHPM(`t9=bpoe7oQl)H$MV(cwq;%j zbg^V)!{c7s^pldXtHt8$A3}dFtI(sPYe7W0p4qttYJP0!29PS)+=$ydcO^+XCYk$v zJ|nm4gne6@!^d~Jp6)Odc^Wk3+Z>iPji~xBeaViu$;H8wijLIy?~_%+5){F?PWG_s zyz4uPKq`2wwh5ddM?;l#RAn$ZZ^yf2z0n~*d8>OXJo-Gdq#Y5tUP(%OBJ9JTjQaN= zPP^Mw)MH<&CcskNc6(S;^n8$u(TREMe8=7|A|<}OW_uQ1pQ-gElgduZ8-^Y|Pw&(B zot)daM>1&5A-U~%bo+lY`ky+&s?iR%&qd05tmdJ z(Oh%Mp&$=~_^FkN{-(49GxD~@OBAuxxx;>=+vmT^`VZd_Q1rN+-RqTxKfE|{8MG_x zCY>*BSI!%?N#u}pdXE^~e}oA7Q|7u1*3Ka;=8P0JY*5lcQOf5dkHa8m3gO{VsPYWN zRmLh2^HiRCX<6O(4WY-is-rouMs1hF>3Uu|J3 za^7V>#m>*5nDP1a$m1Bx_3Gv|o@rOvF};hTgL(x#7}J!X*@<}2Cgw}w3mMbGEgEoBbO}{C zZ|n~5Gz=5NSv@7$6eAsK?oVm%OC1~l1pw$|>sW38zL@7X04YrUSyJ`$l_)yUQvU7D z!Cn}q^t-ZSOh|9gZ*}m`UjjD3!5?%S7)$Q0;ZDhdQYMg3GYMCgM!Hei@z)0#(rset zzX>59j6mNHo{0dff!nHS+ot_lvM|3s+f>$)ew);LFdeXdW$ty&PwOO{aWWSpXjM>J zDKmFYU>fL}AA5Ge;D-qm-mA0Caia?wAFSUFO_uJ164tQ>D#e~;U^kv>F^p}FtE=441P>|Ml@^()`RP(v@rC>8oXa=cFj9RI} zY3LK-HJ8skh!*g>qU*J?9?cc61Q~Um2cHfKHB_SrlXU?Af6|qd>%Ftm ztILb6CG*izD2KmOWcK4iX)e%3^Igt*F*2@yz7_tI!*D7>I>@i`{9|*eJoQOIV;q)m zQ@cJ|&fB$h{EXf22JmF_9ri&Nm$r%zSa>$s@Nsm1t4IG{qDK4;pwqJy9X;>gb=0d^ zKsC-~|Fsc;0VUi3w0GSc2Q!(8iJH9cwyHF$<;OTDoZ=l9ZgQiyFwuh>#8^UcwVJfY z>2?M7@PhmftLo_jW%r8vNnoHsz}wy-tMa|8Y-8E6vC+WS$XqMA0&{A8$NWxhWe+*K z*^3j-YeoioxrL!3`&3U8d(mdW;^o%aW{A}~Tl2^I=4?&5i4RslH!KL?y>!uQdsY8l zMkC|a&!M5CI;sKwySJ8w^~!&`_`K5uVRgZElaQ;VRH4VU!1cLgujImJ+TN1np~x-^ z=P$-u@s^*g##3sN880jX&okU*I<|Bk5j+b5NJY7-VotC0F#gvb`@D8~-K0{;cFlWZ z8Ht?Nrte{MG!GO1Ma}beKr7>$l)+V(=|onHua1cVmME0nST0MV&TPw%L@F@c<2R2= zhMk-o78PboQv>++ON&v}u@ma39o@Lo9e2#=p4%>F()(j>NogPw%V=&{nNeqzby^sh z;x^1H<=NJeH}gTa*JXrzteh* z?1kAX6#H2ZXaTZ&CI?wzK&RrMA&VbFTu zSL>`qIq5CsjN0+{!f27-wbswVw7vmuKTYfrfB3F9fM}Du2=ksQC3Gugfh&vk1`xAj zilS<~j6)~c3cm7b@AsO(8d|Sw#%9_8cU78fd?ZrsLQ(AN)I5R4GSW^xbW^)(%&&ta zy(W!}Y+aVIBotYU+n3ruF19&_XPisY{n8+#k`ilq;I%S_Am-t)*YGZ6L!y4{e_hrj z$|maTXBYU=mKXnZ;W&K;UtHPl7)2;Xze!(Z>FV9GDn2M}>z;G%cgT!&+j!MEp|{TC zUUJTj9*`xh6()9KlDG0(qWYQr47<0{oIK?;YJVH=Nx7uIZDJ^0!9{*Z2pn7B2++5OI!?fsJ!lftZi|psZifI)@bN0nXQyQd(U| zS?PI4jPwma!Mb?(+fl(e(8E)s&(qxU6*Mkx=I-br;oqNu~`!?g2AMvVb+R-5)gn zg%94}j=8%dC20$$5~|f2`XWtVRolm?n15f8khYI-r_TQkXV4!tioa{@r}1T_k`WpK zQzkgVca8lmGX$D@teNSudc~v)=24HEAoBZ&s~f=nQ-AC(nZHL!y0jNw#yUBcCxEUO z@*tK{G1gFx`N7AMyCS78l^rWLuY=9y;jK#i#wjJ4ZEP!(#4-m|FR=tZn_9bYSkH9| zoVNXlFp%qH$$G?DnAngm>wq5*-RIhso2+XjnDg*Z4V0k~_?_`6Dz*6QiYy{AuEq zynaO!($K%ZT|&!6P+O}GKApS<2wD^O+>=fWd_QKF4%J=esiv>~bT?W~&9ncV;wz(; zSY|F+NUnA+rMIF$e8gNO7DxqK6o2m;i)#F!?Ch^FP+{bT>n2)a?#{ktKTf4l+`_n) z0%}~4u(Xz~*EE4{;&}E}6RRIx=f$qqjY~#XOAc5w>}*el!XJ5fN2e61Q`Yz9A*CvC zI@w44CB9RHunG_I&U&XXA3CR2SD7vOZDIj)*ab=m|&4u zA0MR$66Gb?_?2r(oR0*k`lYQ*HQzGJdB!6LDzqd}`(eh4FiG$2x%@^u#wi7TrTR;j z-Hdv&C|QKh0H0>-{TJ-77N!VfW^glK^=L4qm?jrP?rayEkBA7k@p;!H!sQVqsUB_| zG>wtr!?{F?@-&^Qe)rv>*%>(S=T?L}p3(B#ULvP+ye6-16}hqxGo%JfzZ4 z6&wn+8kdtV584h29+0jr`f#PkeXSX!`iJ|8zi(nHKU-hLGyNolj_9KA>-&qqY{fu% z9k~Wzu8lgD3-4k__6DFRFeb1vCi6Bruo*PP6)(J50_`2{jZmf2y#ZVv;fVn!7`jub z!W7+m>BkK=s++(YNvmdr@a!7a1k*M-%qKci)6Y>C_tAt;H-6nf-=qC1F7Qbso>oGe zSXJQt=1b)v({t=7L9m=1A@GKzOD~73m+>r7t_HO~xO@6A=qG@!{?ORW-8ArCIK$*{ix) zezEBwOkUWPTHq1J1iZ*6kbYnz@QMBm%}VvdN^YdP9Zp~QYz`mG4tTHYH1l0LfizQf z-uF+Ba0NecMz}JwWm0P3+VHoaI+1G$2^7pA=Q!A9&>;pGVnbnVn<}X;3se5pBTFdh z%BF~iEAqwjN8WeZNG)oosTp60d?of!=8QI)PEa%mI*tjQWLS_dXY`Dj&+lMod=Za3 zU%WwN=nd;eXx5l0=^%-8Dry!r9J1lrU3~(MAJ8%Opu+vK)C`*PsIUz!p}2D32xC6s zcF*v#wjj@9;=}ZNCQ9L1>R;5^VoP10p^{8s>q#NF1Rt$`RvQ-7SSM&(L_|T%${eja zl3KAI68N>1ZegsKBqU0D?TKjw2|5Gtc4?1`CP6BpB8>UIGQ2W z%pRYZ=#Q1GQuh?|POlBK#~%eTMz4*4c4f>0Rz4ukt4YRnZ1bMNc+%P!T2LGw-P`$< za1Ct)ETW&XS+$OqXdz>w&4Fz6mN0WsNW>;?*)OAx>gSKLxnCE(>HgwLKo-`Kh9kJ2 zmDz-5F&ZVZR^~IBI~I!0SSPa1;(L~9&yryIXnnfb7}hz49=m{SGi%GX^46!2kMlnG zD&cg;(>;%ytEt1(c9m$>A2y<_oX6)pZcR$_%W%U(iRYibOaE#xGh?jPX&$P4T;O9> z7*`%1@n$)nZEiK!@TqLS)A=Zz&=CaKwXPDiGguXltqWeMaNtjqQmL0;Ms@i|>x6&25LB3($yn#JZq0jVyvDL@?B8tk#-ibuL*}(ye?WBSN%B4 zWp(%~19g_BD&c~avTeKvZWU}Lq^=f>QLg0)z)2ehd9%vEm#P)cP+P@BJlts;Cu7|OtxvfP&X}e*$d$k(Q(6Pgwu? z7#7G!cD%8iKBfodY%+~Z)W{p;()U@otDdn$qmIq?(T;3?4*rThs^66(*n?;&0J`9x zAU~S9$%%C;@6c6*fmTS%!SOl*V^r96$3nU!@s}u=rGez4l@Nsvp$>nO^t|wrKW`4J zuyh}ySlRbk!Uu!63?9pF4}X~{(uE-*-RbP6ir7vkz5UYwYRU!z6{B-0%D!~?^|JB4 zd1$N%c534A4?B?>s|2jJJ)^a36(j?|Lf=wrbh?M?usBl9KovDy4e){*)`%k zJ|g2SYo@FaWBOW<8$hx@;bqCHw^is1tK%tI!)Y(+3<0_A!Av@N0o<>~a2+mwtENnw_45KYr0!$ZXi-$ft?WMG*kUa_(d)Qbx1! zG4L}ifcu)B0ex(WPQ~I`h(3Ms34!QLwg88Bb_YIZ7GtU1?pE3ENhoQsL6A;PMO}Ac zr?1g2S6k#LbexT-1&r5>fjF8Tx7QZC1&9{0&eWiY?_Qi@pY1xGLF2zG$yuIKnbfwS z?a9O#^LzDXSB2-Ybc7?dhk>JsL_{S5`7BTaIQSTlP~KZU4T(u1Dz8))I={s%3L+n> z6vc~4$X{k;SmYuyR3G452q^xh^4Hq--#HxyIQl;xodw}`6ctoZgeuh3h0fN__C~GS z!`ebE3*EDO`<2@)<0bpLY8Yuad%g87g-8r$)RziUE$~n(?HYPQ;xX#lWNKRPR-YP9 z%KykLVkI9oQWex{ZsrZ;jL<1?r%)Y`4mMXzw7*|!sYT;PNVDYntIl?tFeF->kb>Tc zQsq<;w#h(WThYYfTBt0M$l6ihai~T}j7hHmcDfA<`Up=`*{3fsR#f-$6#)wkNVak< zu8sY578}r!F0*N?QYfj`rBzXuRONbCT9J9NamHKI;w<|DdAs!OjoHsmwHzB0RgJ{q z(0DZEmQgcn?)(HpK@rDsoDGSLMQDw=wR7}jflKFOaeE8TRh^Y_QU9kF_Q&z|I{YFQ zB@y8e8&_KdKJP+=&%!SjZ4p^#qx!@sF@D}zFkBI=nsd^<3N>QNi%?`H?JS3_HtR!6 zrfstr%5x(+7?Pbcq{2~%fe3D&f|8%ef_jfi!7+&Aq8NG@@-|hH;610HY-2!=cK<_=tnV;jse`rgy^f6?8PICSGAJqT#6vq5H@00%q4m+s}7u*2QW8 zFAiRHxVNNe9NDmT@%H&JUt?mvsWKB-6ff`I_=jo-x&!{pI zX!&yq4w8n7)?d5yy&Fj^wwpp$1&>4!pHaA0r+eET8m-rj@qywFL$l;l->~iTV%IjX znmT%RswS!r$)W{0Yjk|?P6<`)xE8X?O^UkWzs}BxgO71b_(z&a?G%R(7ZOW*=Fn!T z5~q-}M!&C*Z(~C$VTaOF=ksMmvtR5a#PyD4#nSTiJDyuF|BSjFXBDnLJz_(G0YCNjWF0g(mRLw1{KK_D9 zz7C9FEbDM!q$`T_nA{lOKp69elJ7b#H#CmOnI@P~sI*J#2--Whcud=k%jz$O?h=Pm zG6s?>NoKvKe(|cfZ_7CKC^Bgub}E75suN;JR~Dx-lBv{t{9w?MNTn7_RUsQtm>v-g zCXEwR877S3B^K0*p-Ng_OY0N1W{y?8G*bII(qoHhcJ_;Gtkur z-=&pcZri0*jht`uYlV8%HOzfL#L2PEzO0qTa}7gokwvYc#p8SbJnqfVw*5B81I0E_ zT&e-jOm>!1*LW2oUz~Q6L0}scmsD;dYb>fhWm~{rNG)IyDt=+j=r&l}o%yq}km=G& zyI){2CY86k z`LjtZIYFrQ%7Rejy2t(eNInDa7qWgWoz(;#-cZ4bOfQQ)wP^BAfnIaS3D!Lsd*LXz zyVqoq_a8{g`0OriUNR|bB(n66C%pb#wOqpgfDZ)50|x_7@sZ4&a+danec@e9&JK@a z)ju0dyrzz~o8IiWke6EIxMFem)a4sy&KcjaRI9wf8Rd2qR37vv3IF! zDriW1pR+TRsKiJ1y|=wvp8(6Q+C1UTK6{cib3#Cy&tc!g)nLc5Owq!cY;H66C`!{? zHeJ0nArT^50ZecAX{)p97gSwrX=#JQ8;q=u_kq|~^i5ERn@$^w;i zQhV{vp+ZG05V)p2R>Pu(7xr7w9fxGJWyPzMuPZF)xvDM8GsV={ZY;hTk4|IPX3MhJ zCD$2Zn`{%PGE6Qf<~LLO=CE8yL{F{Wx!`&94x!Pq$lF6S#AWW#EKFm2-YEHmK{2Pm zM@5@C*QPipHJC5ad&Hp;Ll7Zn)!y3K;wJ&}c<2Tj(;-yVZtHVYOLgv~7Iwy9%S!&E zL3Ke@uwQ#ZTLzu%0^x1N_u`$M@5Fasj4GJdv+FP{>VI!lx0zhm0hQZv$+ym74emRA zv1?ThKc;P&wbD&krL&D~kCBSS9!JZ{SXsz?$*jNSJbvLWM~(d+@ip?m+q;gEH%h_o zxyHv8Sx$~BI{^W?%|2*4qo9My``NyW`o6&;RWGA<0|H2!*(q>%ZJ5@dJA*sfI;EE_ z*M|Cesmku)e3}?f%-hg*ik-K&s04Zne;SFM3L&ju4Y_P~>sF*d67t8YT9rI(U$BkH zWhvofPeMV?xN$2G*o3>LW_E#jduFp#`5Q?n!fvs#tne&Ri{FDyh|K^4sNwf*$7+-` zpP)aFwOE1*^IBblir!FuP|X`VsnL$hEgO^ENtZfTdP$U{@B!F02$W#g-ASI&$R4y1 zfIBKmWj?x&F^(Cvbf5eboos;YA_VqKc7(vYRNQmaDJaPBoS`EDF0jjE$6IgiNXaHz z)Fy9&x*SjhdN5UOJ?O`3w}V-w(a@-1EXzIErf%EVG6cX`VpXnfMe#;fVF`{knhItaW> zUfF7o8AlWIujh(Wv2#at^dx0MGHb)2t=2l|V&lo!Z!IJSyxVV-B(l-!!&SlMbusixhRo64Zfoc1FRhJSI5$1`s6l z=fpy;N7t$dq@L|L-H7^_BjXL=rQ8kR8x^6~&!@fuCsd+70lBD|!m7U#O%UF2_CPY( zmmsxCTFZ84Y&t;xDE=6Pb;B8oYyOGbW_)#*wqG)Iz$7ET>SS}rt4ze@dHHf_X=LBq z@*)ljv(VQH;9L~%(r=VESQof(>@hdtHX5=*?(I+I2q_sDUFl0o>Wl4?w^FU$`v&0f zv~zuVM9_bn{0tr(tE(S3s0bt~2t=`bfUSfh+c*%SD$NfZBLywpWWqOX zfrb%EpnOHbU0>XaSVb<~;$C!a!7}+tL4X#mHcQllij+@vfMNoTCv6G(%nyoO9}9ef z%dI^bfhjY(up5L@CqK=1TXJuH*0w1yTYXQnr$^3Io?$#hXkL7tHB?}!%F)a{V|D%lV@4LVW9mH?J;B3fx>~N-qYS?kFpxu|?tIaSd9enq zWSecF)a5BVX?~B8Y6kA+;La zejuiPwxy#d54b8vC&%nyFS;*6kXp(;YO7HX9j@5pV(W6cLdf!VWPCSO}9GEsL${^?WBl_9vY8q<7{AvCy)Q6P?x683(PpV{LAVEAVPeQ85CtNQ};JQ0)s3(L2E z#A^TYS)DCDBNyZ-f_qET2p5!^+l%I&zNP*-Wqkj}AZ_C(fs@ZqQVd;Q)h<`6H5R3-DJXSQUw()YYv7x>Fsrq$J{cua3)x1rM z1Vxq5CztxXo#gSQR6UIxmV}J^c+_sUv)T_FN;!%|S;hI%C|kPHoD<%AghSfpg+OF@ zZVtkA6d5M#N87hLet*wf#3GobipTp#&BsbODgTO>`&%ILf1kpvQN=?i4rIhRp)rah`&~*KJZi zZhv=buy@*}KLybKpUjM$RoigtWt_1v57Jd47uMRfmPtnRR8EPrJG$4E{|NBucl-M5 z08XgGq(|98c{!|4Kh98V@9Sl7=rowgIwxO#G$9V_;&x2<G@nCFDR5zm-~ zxBa7f27D-D^(zd-D3!^m35jyU!5=`_Rwbsy(!DN67<evfIp zwIUW$c%~&XxIEH*i3%%IsU9O*zx)yeG4!B)ech7F`(xv%c1uB6<5;YOc%jhd;bD+4 z`QI)L7Ph=h6Ad#@k`v}l+T*uKA1SL+c$;b~W9OEyD3!%Mc?(gTOpiEYWlfo2Toh>m zGxWUQ;?L6NnJI=3#v&hdOUU>-8p|IA9i9Dc0e@fY{h~tB&PqSW-Y326jMG|1az>(M zE3BULwpJC;K*fMoPDrc;BO~WGg^p<2r`BIuV`lJqf~!!fpP`{c&`BtiEAuyozh@Nx zi8Q@K$Zdkrf|s5A$@fo=+b&(9tsR+6jZ?cJaoJtnvUS^*feH`!{SxXVs}9v+@Nb4m v9*>`;#?iMyhcY!)MiBV177S7q7Xa|bKMA1g9r{lM{ZI7&-8Jy|X6k GUARDS = List.of( + "CityGuard", + "CityGuardWithRubyIdol", + "CowGuard", + "CowGuardNoCoin", + "GorillaGuard", + "LizardGuard", + "LizardGuardNoCoin", + "WarthogGuard"); + + /** Other box walkers: spawners hand their chain to the spawned guard / alligator. */ + public static final List OTHERS = + List.of("CowGuardSpawner", "CowGuardSpawned", "Alligator", "AlligatorSpawner", "SpawnedAlligator"); + + /** Parameter index of a guard's event bit. */ + public static final int GUARD_EVENT_PARAM = 2; + + /** Half size of the box a newly placed box walker gets (cells). */ + public static final double NEW_BOX_HALF = 2.0; + + private WaypointBoxes() {} + + /** Type name without the "(spawn)" suffix of code-only types. */ + public static String base(String type) { + return type != null && type.endsWith("(spawn)") ? type.substring(0, type.length() - 7) : type; + } + + public static boolean isGuard(String type) { + return type != null && GUARDS.contains(base(type)); + } + + public static boolean walksBoxes(String type) { + return isGuard(type) || type != null && OTHERS.contains(base(type)); + } +} diff --git a/src/main/java/com/eliasmueller/llamamod/editor/model/cmd/Edits.java b/src/main/java/com/eliasmueller/llamamod/editor/model/cmd/Edits.java index 8c5aa6a..2deebe8 100644 --- a/src/main/java/com/eliasmueller/llamamod/editor/model/cmd/Edits.java +++ b/src/main/java/com/eliasmueller/llamamod/editor/model/cmd/Edits.java @@ -12,6 +12,7 @@ import com.eliasmueller.llamamod.editor.model.Scene; import com.eliasmueller.llamamod.editor.model.Strat; import com.eliasmueller.llamamod.editor.model.StratCatalog; import com.eliasmueller.llamamod.editor.model.Tile; +import com.eliasmueller.llamamod.editor.model.WaypointBoxes; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -105,7 +106,10 @@ public final class Edits { /** * Places a new object of a catalog type: type fields and default parameters from the * prototype, its waypoint chain copied relative to the new position ("relative" mode of - * levelbuild, without snapping to the ground). + * levelbuild, without snapping to the ground). Box walkers ({@link WaypointBoxes}: guards, + * alligators, their spawners) get one box of 2 nodes around the new position instead (the game + * removes a guard that does not start inside a box), and guards event bit 0 (active from the + * start). */ public static Command placeStrat(Scene s, String type, int variant, double x, double y, double z, Double yawDeg) { StratCatalog.Type t = s.catalog().type(type); @@ -119,7 +123,23 @@ public final class Edits { int fy = fixed(y); int fz = fixed(z); List chain = new ArrayList<>(); - for (int[] c : v.chain()) { + List proto = v.chain(); + boolean boxes = WaypointBoxes.walksBoxes(type); + if (boxes) { + int h = fixed(WaypointBoxes.NEW_BOX_HALF); + int[] a = proto.size() > 0 ? proto.get(0).clone() : new int[9]; + int[] b = proto.size() > 1 ? proto.get(1).clone() : new int[9]; + a[0] = -h; + a[1] = 0; + a[2] = -h; + b[0] = h; + b[1] = 0; + b[2] = h; + a[7] = 0; + b[7] = 0; + proto = List.of(a, b); + } + for (int[] c : proto) { PathNode p = (PathNode) s.create(NodeKind.PATH_NODE); p.setRaw("x", fx + c[0]); p.setRaw("y", fy + c[1]); @@ -148,7 +168,11 @@ public final class Edits { st.setRaw("x", fx); st.setRaw("y", fy); st.setRaw("z", fz); - st.setRaw("params", v.params().clone()); + int[] params = v.params().clone(); + if (boxes && WaypointBoxes.isGuard(type) && params.length > WaypointBoxes.GUARD_EVENT_PARAM) { + params[WaypointBoxes.GUARD_EVENT_PARAM] = 0; + } + st.setRaw("params", params); st.setRaw("waypoint", chain.isEmpty() ? null : chain.getFirst()); st.setTypeName(type); cmds.add(new AddNode(st)); diff --git a/src/main/java/com/eliasmueller/llamamod/editor/model/cmd/PlayerStart.java b/src/main/java/com/eliasmueller/llamamod/editor/model/cmd/PlayerStart.java new file mode 100644 index 0000000..25c504b --- /dev/null +++ b/src/main/java/com/eliasmueller/llamamod/editor/model/cmd/PlayerStart.java @@ -0,0 +1,151 @@ +package com.eliasmueller.llamamod.editor.model.cmd; + +import com.eliasmueller.llamamod.editor.model.Node; +import com.eliasmueller.llamamod.editor.model.NodeKind; +import com.eliasmueller.llamamod.editor.model.PathNode; +import com.eliasmueller.llamamod.editor.model.Scene; +import com.eliasmueller.llamamod.editor.model.Strat; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * Player start (Llama) and its start camera. The Llama's waypoints are camera start positions + * (Camera strat, L_1330 at level start): the first node within {@value #RANGE} cells (x/z) of the + * llama becomes the camera position, looking at the llama; if the node's field unk2 ≠ 0 its x/z + * distance and height to the llama also become the camera distance/height (else the defaults 1.0 + * / 0.5), held until the llama moves. Original levels have one node per entry point (doors), so a + * prototype chain copied onto the llama puts the camera into its head (village 2: node 1 has unk2 + * ≠ 0) or makes it look along +z (village 1: zero distance, no direction). + */ +public final class PlayerStart { + /** Range of the camera start search (cells, x/z). */ + public static final double RANGE = 2.5; + + /** Camera node of a new player start: this far behind the llama, at default height. */ + public static final double BACK = 2.0; + + public static final double UP = 0.5; + + /** CutSceneTrigger parameter 6: bits 1 = end camera behind the player, 2 = not skippable. */ + static final int TRIGGER_FLAGS = 6; + + private PlayerStart() {} + + /** Index of the node the game takes as start camera, or −1 (no node within range). */ + public static int startNode(List chain, double x, double z) { + for (int i = 0; i < chain.size(); i++) { + PathNode p = chain.get(i); + if (Math.hypot(p.gx() - x, p.gz() - z) < RANGE) { + return i; + } + } + return -1; + } + + /** Places a Llama with a single camera node {@link #BACK} behind it (unk2 = 0: default camera). */ + public static Command place(Scene s, double x, double y, double z, double yawDeg) { + Batch b = (Batch) Edits.placeStrat(s, "Llama", 0, x, y, z, yawDeg); + List cmds = new ArrayList<>(); + PathNode first = null; + for (Command c : b.commands()) { + if (c instanceof AddNode a && a.node() instanceof PathNode p) { + if (first != null) { + continue; + } + first = p; + } + cmds.add(c); + } + if (first == null) { + // a Llama prototype without chain: give it one + first = (PathNode) s.create(NodeKind.PATH_NODE); + cmds.add(0, new AddNode(first)); + for (Command c : cmds) { + if (c instanceof AddNode a && a.node() instanceof Strat st) { + st.setRaw("waypoint", first); + } + } + } + cameraNode(first, x, y, z, yawDeg); + first.setRaw("next", null); + return new Batch(b.label(), cmds); + } + + private static void cameraNode(PathNode p, double x, double y, double z, double yawDeg) { + double a = Math.toRadians(yawDeg); + p.setRaw("x", Edits.fixed(x - BACK * Math.sin(a))); + p.setRaw("y", Edits.fixed(y + UP)); + p.setRaw("z", Edits.fixed(z - BACK * Math.cos(a))); + p.setRaw("ry", Edits.angleUnits(yawDeg)); + p.setRaw("unk2", 0); + } + + /** + * Moves the existing player start. Camera nodes within range of the old start move (and turn) + * with it, the others (entry points of doors) stay; so does a CutSceneTrigger at the old start + * (the base level's intro fly-by), set to end behind the llama – otherwise the fly-by ends with + * the camera at the old start, where it stays until the llama moves. If then no node is in range of the new start, + * a camera node {@link #BACK} behind it is appended to the chain. + */ + public static Command move(Scene s, Strat st, double x, double y, double z, double yawDeg) { + Map> v = new LinkedHashMap<>(); + v.put( + st, + Map.of("x", Edits.fixed(x), "y", Edits.fixed(y), "z", Edits.fixed(z), "ry", Edits.angleUnits(yawDeg))); + List chain = st.waypoint() != null && s.contains(st.waypoint()) ? s.chain(st.waypoint()) : List.of(); + double turn = Math.toRadians(yawDeg - st.yawDegrees()); + double c = Math.cos(turn), sn = Math.sin(turn); + int turnUnits = Edits.angleUnits(yawDeg - st.yawDegrees()); + double ox = st.gx(), oy = st.gy(), oz = st.gz(); + java.util.function.BiConsumer carry = (n, g) -> { + double rx = g[0] - ox, rz = g[2] - oz; + Map m = new LinkedHashMap<>(); + m.put("x", Edits.fixed(x + rx * c + rz * sn)); + m.put("y", Edits.fixed(g[1] + y - oy)); + m.put("z", Edits.fixed(z - rx * sn + rz * c)); + m.put("ry", (g[3] < 0 ? 0 : (int) g[3] + turnUnits) & 0xfff); + v.put(n, m); + }; + boolean inRange = false; + for (PathNode p : chain) { + if (Math.hypot(p.gx() - ox, p.gz() - oz) < RANGE) { + carry.accept(p, new double[] {p.gx(), p.gy(), p.gz(), p.ry()}); + inRange = true; + } else if (Math.hypot(p.gx() - x, p.gz() - z) < RANGE) { + inRange = true; + } + } + // the base level's intro fly-by (village 1/2: a CutSceneTrigger on the start, radius 0.7): it + // moves along, and flag bit 0 (p6) makes the game end the fly-by behind the llama instead of + // at its last node (placed for the old start) + for (Strat o : s.strats()) { + if (!o.type().equals("CutSceneTrigger") || Math.hypot(o.gx() - ox, o.gz() - oz) >= RANGE) { + continue; + } + carry.accept(o, new double[] {o.gx(), o.gy(), o.gz(), o.ry()}); + int[] prm = o.params().clone(); + if (prm.length > TRIGGER_FLAGS) { + prm[TRIGGER_FLAGS] = ((prm[TRIGGER_FLAGS] >> 12) | 1) << 12; + v.get(o).put("params", prm); + } + } + Command set = Edits.set("Move player start", v, null); + if (inRange) { + return set; + } + PathNode fresh = (PathNode) s.create(NodeKind.PATH_NODE); + cameraNode(fresh, x, y, z, yawDeg); + List cmds = new ArrayList<>(List.of(set)); + if (chain.isEmpty()) { + cmds.add(new AddNode(fresh)); + cmds.add(SetProp.of(st, "waypoint", fresh)); + } else { + PathNode last = chain.getLast(); + cmds.add(new AddNode(fresh, s.pathNodes().indexOf(last) + 1)); + cmds.add(SetProp.of(last, "next", fresh)); + } + return new Batch("Move player start", cmds); + } +} diff --git a/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/EventBits.java b/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/EventBits.java new file mode 100644 index 0000000..896622c --- /dev/null +++ b/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/EventBits.java @@ -0,0 +1,82 @@ +package com.eliasmueller.llamamod.editor.tools.objects; + +import com.eliasmueller.llamamod.editor.model.Scene; +import com.eliasmueller.llamamod.editor.model.Strat; +import com.eliasmueller.llamamod.editor.model.WaypointBoxes; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; + +/** + * Event (progress) bits of global 95: objects that set a bit with {@code g95 |= 1 << (v − 1)} where + * v is one of their parameters (found by a sweep over the strat code of all original levels, + * notes/editor-object-schemas.md "Event bits"). Guards with an event bit wait for it. + */ +final class EventBits { + /** Setter type → parameter indices holding the bit number (1..32, 0 = none). */ + static final Map SETTERS = new LinkedHashMap<>(); + + static { + SETTERS.put("TipoVillage", new int[] {6}); + SETTERS.put("ChacaVillage", new int[] {6}); + SETTERS.put("SmashStatueSmall", new int[] {0}); + SETTERS.put("SmashStatueBig", new int[] {0}); + SETTERS.put("SmashStatueDoor", new int[] {0}); + SETTERS.put("RiverCrocGame", new int[] {1}); + SETTERS.put("RiverTriggerBox", new int[] {0}); + SETTERS.put("KidOnCanoe", new int[] {4}); + SETTERS.put("YzmaRiver", new int[] {2, 6}); + SETTERS.put("Condor", new int[] {2}); + SETTERS.put("GoldIdol", new int[] {1}); + SETTERS.put("CityWall", new int[] {4}); + SETTERS.put("NakedPeacock", new int[] {0}); + SETTERS.put("LabSlidingDoor", new int[] {5}); + SETTERS.put("LabSlidingDoorJamie", new int[] {5}); + SETTERS.put("LabBigCutscene", new int[] {1}); + SETTERS.put("LabWall", new int[] {4}); + SETTERS.put("EndGameTriggerBox", new int[] {0}); + } + + private EventBits() {} + + /** Bits (1..32) the objects of the level can set. */ + static Set setBits(Scene s) { + Set out = new TreeSet<>(); + for (Strat st : s.strats()) { + int[] idx = SETTERS.get(WaypointBoxes.base(st.type())); + if (idx == null) { + continue; + } + for (int i : idx) { + if (i < st.params().length) { + int b = st.params()[i] >> 12; + if (b > 0 && b <= 32) { + out.add(b); + } + } + } + } + return out; + } + + /** + * "TipoVillage (parameter 6), …": the setter types placeable in this level, or all known + * setters marked as not in this base. + */ + static String setterList(Scene s) { + StringBuilder b = new StringBuilder(); + SETTERS.forEach((t, idx) -> { + if (s.catalog().has(t)) { + b.append(b.isEmpty() ? "" : ", ") + .append(t) + .append(" (parameter ") + .append(idx[0]) + .append(')'); + } + }); + return b.isEmpty() + ? "none of the setter types (" + String.join(", ", SETTERS.keySet()) + ") is in this base level" + : "set by " + b; + } +} diff --git a/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/Ground.java b/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/Ground.java index 7b631de..9972601 100644 --- a/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/Ground.java +++ b/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/Ground.java @@ -12,6 +12,12 @@ import java.util.Map; /** * Floor finder on the collision polygons of all tiles (original tiles and the tiles generated from * brushes), in game space (x east, y up, z = grid row). Cached per scene revision. + * + *

    Follows the engine's floor test (FUN_004036d0, used for the player and for objects): only the + * tiles listed in the grid cell of the point count ({@link Tile#cellX}/{@link Tile#cellZ}), so a + * polygon reaching into the cell from a neighbouring tile carries nothing there. If no such tile + * has a floor at the point, the swap models of the cell's tiles (a door object may switch the tile + * to them) are tried, and last the neighbouring tiles' polygons (where the game finds no floor). */ public final class Ground { /** A floor polygon (normal up) in game space with its collision material. */ @@ -35,10 +41,23 @@ public final class Ground { } } - /** Result of a query: floor height and material. */ - public record Hit(double y, int material) {} + /** Where a floor came from: the cell's own tiles (as in game), their swap models, a neighbour tile. */ + public enum Source { + CELL, + SWAP, + NEIGHBOUR + } + + /** Result of a query: floor height, material and source. */ + public record Hit(double y, int material, Source source) { + public Hit(double y, int material) { + this(y, material, Source.CELL); + } + } private final Map> cells = new HashMap<>(); + private final Map> swaps = new HashMap<>(); + private final Map> overlaps = new HashMap<>(); private Ground() {} @@ -56,19 +75,11 @@ public final class Ground { } private void addTile(Tile t) { - for (TileModel.PlacedPolygon cp : t.worldCollisionPolygons()) { - double[][] pts = new double[cp.corners().length][]; - for (int i = 0; i < pts.length; i++) { - double[] w = cp.corners()[i]; - pts[i] = new double[] {w[0], w[1], -w[2]}; - } - double[] pl = plane(pts); - if (pl == null || pl[1] < 0.5) { - continue; - } - Floor f = new Floor(pts, pl, cp.material()); + long own = key(t.cellX(), t.cellZ()); + for (Floor f : floors(t.worldCollisionPolygons())) { + cells.computeIfAbsent(own, q -> new ArrayList<>()).add(f); double x0 = Double.MAX_VALUE, z0 = Double.MAX_VALUE, x1 = -Double.MAX_VALUE, z1 = -Double.MAX_VALUE; - for (double[] p : pts) { + for (double[] p : f.pts) { x0 = Math.min(x0, p[0]); x1 = Math.max(x1, p[0]); z0 = Math.min(z0, p[2]); @@ -76,10 +87,37 @@ public final class Ground { } for (int cx = (int) Math.floor(x0); cx <= (int) Math.floor(x1); cx++) { for (int cz = (int) Math.floor(z0); cz <= (int) Math.floor(z1); cz++) { - cells.computeIfAbsent(key(cx, cz), q -> new ArrayList<>()).add(f); + if (key(cx, cz) != own) { + overlaps.computeIfAbsent(key(cx, cz), q -> new ArrayList<>()) + .add(f); + } } } } + if (t.hasSwap() && !t.noCollision()) { + for (TileModel m : new TileModel[] {t.swapModel(), t.swapAltModel()}) { + if (m != null) { + swaps.computeIfAbsent(own, q -> new ArrayList<>()) + .addAll(floors(m.collisionPolygons(t.transform()))); + } + } + } + } + + private static List floors(List polys) { + List out = new ArrayList<>(); + for (TileModel.PlacedPolygon cp : polys) { + double[][] pts = new double[cp.corners().length][]; + for (int i = 0; i < pts.length; i++) { + double[] w = cp.corners()[i]; + pts[i] = new double[] {w[0], w[1], -w[2]}; + } + double[] pl = plane(pts); + if (pl != null && pl[1] >= 0.5) { + out.add(new Floor(pts, pl, cp.material())); + } + } + return out; } private static double[] plane(double[][] p) { @@ -108,10 +146,27 @@ public final class Ground { /** * Highest floor at (x, z) not more than {@code above} over {@code probeY} (game space); with - * {@code probeY} = NaN the highest floor at all. Null if there is none. + * {@code probeY} = NaN the highest floor at all. Null if there is none. The cell's own tiles + * first (what the game uses), then their swap models, then polygons of neighbouring tiles. */ public Hit below(double x, double z, double probeY, double above) { - List l = cells.get(key((int) Math.floor(x), (int) Math.floor(z))); + long k = key((int) Math.floor(x), (int) Math.floor(z)); + Hit h = best(cells.get(k), Source.CELL, x, z, probeY, above); + if (h == null) { + h = best(swaps.get(k), Source.SWAP, x, z, probeY, above); + } + if (h == null) { + h = best(overlaps.get(k), Source.NEIGHBOUR, x, z, probeY, above); + } + return h; + } + + /** Highest polygon of a neighbouring tile reaching into the cell (what the game ignores there). */ + Hit neighbourBelow(double x, double z, double probeY, double above) { + return best(overlaps.get(key((int) Math.floor(x), (int) Math.floor(z))), Source.NEIGHBOUR, x, z, probeY, above); + } + + private static Hit best(List l, Source src, double x, double z, double probeY, double above) { if (l == null) { return null; } @@ -125,21 +180,22 @@ public final class Ground { continue; } if (best == null || y > best.y) { - best = new Hit(y, f.material); + best = new Hit(y, f.material, src); } } return best; } - /** True if a floor polygon with the material covers any part of the cell (cx, cz). */ + /** + * True if a tile listed in the cell (cx, cz) has a floor polygon with the material, in its + * model or a swap model (the engine's LevelDoor test: any height). + */ public boolean hasMaterial(int cx, int cz, int material) { - List l = cells.get(key(cx, cz)); - if (l == null) { - return false; - } - for (Floor f : l) { - if (f.material == material) { - return true; + for (Map> m : List.of(cells, swaps)) { + for (Floor f : m.getOrDefault(key(cx, cz), List.of())) { + if (f.material == material) { + return true; + } } } return false; diff --git a/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/Guards.java b/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/Guards.java index 5e7af91..8c4f15c 100644 --- a/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/Guards.java +++ b/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/Guards.java @@ -3,46 +3,63 @@ package com.eliasmueller.llamamod.editor.tools.objects; import com.eliasmueller.llamamod.editor.model.PathNode; import com.eliasmueller.llamamod.editor.model.Scene; import com.eliasmueller.llamamod.editor.model.Strat; +import com.eliasmueller.llamamod.editor.model.WaypointBoxes; import java.util.List; /** - * Guard family (CityGuard, CityGuardWithRubyIdol, CowGuard, GorillaGuard, …: one compiled template). - * Strat code at start: the waypoints are walked in pairs; an odd count ("Uneven number of WPs") or a - * start position outside every pair's x/z box whose first node has field unk2 = 0 ("Guard not in WP - * box") removes the guard before it is ever drawn. Parameter 2 > 0 keeps it hidden until progress - * bit p2 − 1 of global 95 is set; 0 = active as soon as the player exists. + * Objects whose waypoints are walking areas (x/z boxes of node pairs, {@link WaypointBoxes}). + * + *

      + *
    • Guard family (CityGuard, CowGuard, …: one compiled template) and CowGuardSpawned: an odd + * count ("Uneven number of WPs") or a start position outside every pair's box whose first + * node has field unk2 = 0 ("Guard not in WP box") removes the guard before it is drawn. + * Guards: parameter 2 > 0 keeps it hidden until progress bit p2 − 1 of global 95 is set. + *
    • CowGuardSpawner: spawns CowGuardSpawned at its own position with its chain – the same rule + * applies to the spawner's position, else every spawned guard is removed at once. + *
    • Alligator, SpawnedAlligator: odd count ("Odd number of WPs!") removes it; outside every box + * it is clamped into the first box ("Forcing alligator inside first WP box"). No unk2 rule. + *
    • AlligatorSpawner: the spawned alligator gets the spawner's chain; outside the first box it + * walks straight ahead (spawner yaw) until it is inside that box. + *
    */ final class Guards { - static final List TYPES = List.of( - "CityGuard", - "CityGuardWithRubyIdol", - "CowGuard", - "CowGuardNoCoin", - "GorillaGuard", - "LizardGuard", - "LizardGuardNoCoin", - "WarthogGuard"); + static final List TYPES = WaypointBoxes.GUARDS; - static final int EVENT_PARAM = 2; - - /** Half size of the box a newly placed guard gets (cells). */ - static final double NEW_BOX_HALF = 2.0; + static final int EVENT_PARAM = WaypointBoxes.GUARD_EVENT_PARAM; private Guards() {} + /** Guard family (has the event bit parameter). */ static boolean is(String type) { - return type != null && TYPES.contains(type.endsWith("(spawn)") ? type.substring(0, type.length() - 7) : type); + return WaypointBoxes.isGuard(type); + } + + /** Any object whose waypoints are box pairs (guards, cow guard spawner, alligators). */ + static boolean walksBoxes(String type) { + return WaypointBoxes.walksBoxes(type); + } + + private static boolean guardRule(String type) { + String b = WaypointBoxes.base(type); + return is(type) || b.equals("CowGuardSpawner") || b.equals("CowGuardSpawned"); + } + + private static boolean inBox(PathNode a, PathNode b, double x, double z) { + return x >= Math.min(a.x(), b.x()) + && x <= Math.max(a.x(), b.x()) + && z >= Math.min(a.z(), b.z()) + && z <= Math.max(a.z(), b.z()); } /** Index of the first node of the start box (pair), or −1 if the guard starts in none. */ static int startBox(List chain, Strat st) { + return startBox(chain, st, true); + } + + private static int startBox(List chain, Strat st, boolean unk2Rule) { for (int k = 0; k + 1 < chain.size(); k += 2) { PathNode a = chain.get(k), b = chain.get(k + 1); - if (a.unk2() == 0 - && st.x() >= Math.min(a.x(), b.x()) - && st.x() <= Math.max(a.x(), b.x()) - && st.z() >= Math.min(a.z(), b.z()) - && st.z() <= Math.max(a.z(), b.z())) { + if ((!unk2Rule || a.unk2() == 0) && inBox(a, b, st.x(), st.z())) { return k; } } @@ -52,21 +69,70 @@ final class Guards { /** Event bit (0 = none) of a guard. */ static int eventBit(Strat st) { int[] p = st.params(); - return p.length > EVENT_PARAM ? p[EVENT_PARAM] >> 12 : 0; + return is(st.type()) && p.length > EVENT_PARAM ? p[EVENT_PARAM] >> 12 : 0; } - /** Why the game removes the guard at level start, or null if it stays. */ + static List chain(Scene s, Strat st) { + return st.waypoint() != null && s.contains(st.waypoint()) ? s.chain(st.waypoint()) : List.of(); + } + + /** Why the game removes the object (or, for a spawner, what it spawns) at once, or null. */ static String removedBecause(Scene s, Strat st) { - List chain = st.waypoint() != null && s.contains(st.waypoint()) ? s.chain(st.waypoint()) : List.of(); + List chain = chain(s, st); if (chain.isEmpty()) { return "it has no waypoint boxes"; } if (chain.size() % 2 == 1) { return "its waypoint count is odd (" + chain.size() + "; boxes are node pairs)"; } - if (startBox(chain, st) < 0) { + if (guardRule(st.type()) && startBox(chain, st, true) < 0) { return "it does not start inside one of its waypoint boxes"; } return null; } + + /** + * A softer start problem of alligators (null if none): an Alligator outside all boxes is moved + * into the first box; an AlligatorSpawner's alligators walk ahead and may never reach it. + */ + static String startWarning(Scene s, Strat st) { + String b = WaypointBoxes.base(st.type()); + List chain = chain(s, st); + if (chain.size() < 2 || chain.size() % 2 == 1) { + return null; + } + if ((b.equals("Alligator") || b.equals("SpawnedAlligator")) && startBox(chain, st, false) < 0) { + return "it does not start inside a box: the game moves it into the first box"; + } + if (b.equals("AlligatorSpawner")) { + PathNode p = chain.get(0), q = chain.get(1); + if (!inBox(p, q, st.x(), st.z()) && !rayHitsBox(st, p, q)) { + return "its alligators walk straight ahead until they are inside the first box, which is not" + + " in front of it (turn it towards the box)"; + } + } + return null; + } + + /** Whether the ray from the object along its yaw crosses the x/z box of the two nodes. */ + static boolean rayHitsBox(Strat st, PathNode a, PathNode b) { + double yaw = Math.toRadians(st.yawDegrees()); + double dx = Math.sin(yaw), dz = Math.cos(yaw); + double x0 = Math.min(a.gx(), b.gx()), x1 = Math.max(a.gx(), b.gx()); + double z0 = Math.min(a.gz(), b.gz()), z1 = Math.max(a.gz(), b.gz()); + double t0 = 0, t1 = 1e9; + double[][] axes = {{st.gx(), dx, x0, x1}, {st.gz(), dz, z0, z1}}; + for (double[] ax : axes) { + if (Math.abs(ax[1]) < 1e-9) { + if (ax[0] < ax[2] || ax[0] > ax[3]) { + return false; + } + } else { + double ta = (ax[2] - ax[0]) / ax[1], tb = (ax[3] - ax[0]) / ax[1]; + t0 = Math.max(t0, Math.min(ta, tb)); + t1 = Math.min(t1, Math.max(ta, tb)); + } + } + return t0 <= t1; + } } diff --git a/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/ObjectChecks.java b/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/ObjectChecks.java index 5aa9f67..5a02396 100644 --- a/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/ObjectChecks.java +++ b/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/ObjectChecks.java @@ -6,6 +6,7 @@ import com.eliasmueller.llamamod.editor.model.Scene; import com.eliasmueller.llamamod.editor.model.Strat; import com.eliasmueller.llamamod.editor.model.StratCatalog; import com.eliasmueller.llamamod.editor.model.Tile; +import com.eliasmueller.llamamod.editor.model.cmd.PlayerStart; import com.eliasmueller.llamamod.editor.tools.objects.ParamSchema.ParamDef; import com.eliasmueller.llamamod.editor.tools.objects.ParamSchema.TypeSchema; import com.eliasmueller.llamamod.editor.ui.LevelCheck; @@ -13,6 +14,8 @@ import com.eliasmueller.llamamod.editor.ui.Problem; import com.eliasmueller.llamamod.save.Worlds; import java.util.ArrayList; import java.util.List; +import java.util.Locale; +import java.util.Set; import java.util.function.Supplier; /** Problems panel checks for objects, parameters and waypoint chains. */ @@ -33,11 +36,17 @@ final class ObjectChecks implements LevelCheck { broken)); } List doorTiles = null; + Set setBits = null; int players = 0; for (Strat st : s.strats()) { String type = st.type(); if ("player".equals(StratCatalog.category(type))) { players++; + String cam = startCamera(s, st); + if (cam != null) { + out.add(Problem.warning( + label(st) + ": " + cam + " (Place tool → Player start sets a camera node)", st)); + } } TypeSchema sc = Schemas.of(type); TypeStats.Stat stat = TypeStats.of(type); @@ -57,19 +66,38 @@ final class ObjectChecks implements LevelCheck { } } } - String gone = Guards.is(type) ? Guards.removedBecause(s, st) : null; - if (gone != null) { + String gone = Guards.walksBoxes(type) ? Guards.removedBecause(s, st) : null; + String spawned = type.equals("CowGuardSpawner") + ? "guards" + : type.equals("AlligatorSpawner") ? "alligators" : null; + if (gone != null && spawned != null) { + out.add(Problem.warning( + label(st) + ": the game removes its " + spawned + " as soon as they spawn because " + gone + + " (Waypoint tool: give it a box of 2 nodes around its position)", + st)); + } else if (gone != null) { out.add(Problem.error( label(st) + " never appears: the game removes it at level start because " + gone + " (Waypoint tool: give it a box of 2 nodes around its position)", st)); - } else if (Guards.is(type) && Guards.eventBit(st) > 0) { + } else if (Guards.startWarning(s, st) != null) { + out.add(Problem.warning(label(st) + ": " + Guards.startWarning(s, st), st)); + } + if (gone == null && Guards.eventBit(st) > 0) { + int bit = Guards.eventBit(st); + if (setBits == null) { + setBits = EventBits.setBits(s); + } out.add(Problem.info( - label(st) + " stays hidden until event bit " + Guards.eventBit(st) - + " is set by another object; set Event bit to 0 to have it active from the start", + label(st) + " stays hidden until event bit " + bit + " is set by another object" + + (setBits.contains(bit) + ? "" + : ", but no object in this level sets bit " + bit + " (" + + EventBits.setterList(s) + ")") + + "; set Event bit to 0 to have it active from the start", st)); } - if (!Guards.is(type) + if (!Guards.walksBoxes(type) && sc.waypoints().required() && chain.size() < sc.waypoints().min()) { out.add(Problem.warning( @@ -83,7 +111,7 @@ final class ObjectChecks implements LevelCheck { + chain.size(), st)); } - if (sc.waypoints().pairs() && chain.size() % 2 == 1 && !Guards.is(type)) { + if (sc.waypoints().pairs() && chain.size() % 2 == 1 && !Guards.walksBoxes(type)) { out.add(Problem.warning( label(st) + ": box nodes come in pairs, the chain has " + chain.size(), st)); } @@ -159,6 +187,28 @@ final class ObjectChecks implements LevelCheck { return false; } + /** Start camera problem of a player start (see {@link PlayerStart}), or null. */ + static String startCamera(Scene s, Strat st) { + List chain = st.waypoint() != null && s.contains(st.waypoint()) ? s.chain(st.waypoint()) : List.of(); + int k = PlayerStart.startNode(chain, st.gx(), st.gz()); + if (k < 0) { + return null; + } + PathNode p = chain.get(k); + double d = Math.hypot(p.gx() - st.gx(), p.gz() - st.gz()); + if (p.unk2() != 0 && d < 0.5) { + return String.format( + Locale.ROOT, + "the start camera is inside the llama's head – waypoint %d is the camera start (first node within" + + " %.1f cells) and, with unk2 ≠ 0, its distance %.2f becomes the camera distance until the" + + " llama moves", + k + 1, + PlayerStart.RANGE, + d); + } + return null; + } + static String label(Strat s) { return s.type() + " (" + s.id() + ")"; } diff --git a/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/ObjectPalette.java b/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/ObjectPalette.java index 31ee8e2..b15cc69 100644 --- a/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/ObjectPalette.java +++ b/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/ObjectPalette.java @@ -8,6 +8,7 @@ import com.eliasmueller.llamamod.editor.ui.EditorContext; import com.eliasmueller.llamamod.editor.ui.EditorWindow; import com.eliasmueller.llamamod.editor.ui.Icons; import com.eliasmueller.llamamod.editor.ui.NodeIcons; +import com.eliasmueller.llamamod.editor.ui.TypeMenus; import com.eliasmueller.llamamod.editor.ui.view.Thumbnails; import com.eliasmueller.llamamod.util.SwingListeners; import java.awt.BorderLayout; @@ -36,7 +37,9 @@ import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JList; +import javax.swing.JMenuItem; import javax.swing.JPanel; +import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.JToggleButton; @@ -144,22 +147,40 @@ final class ObjectPalette extends JPanel { list.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { - if (e.isPopupTrigger() || e.getButton() == MouseEvent.BUTTON3) { - int i = list.locationToIndex(e.getPoint()); - if (i >= 0) { - Session.of(ctx).toggleFavourite(model.get(i).type); - list.repaint(); - if (favOnly.isSelected()) { - reload(); - } - } + menu(e); + } + + @Override + public void mouseReleased(MouseEvent e) { + menu(e); + } + + private void menu(MouseEvent e) { + int i = list.locationToIndex(e.getPoint()); + if (!e.isPopupTrigger() || i < 0) { + return; } + String type = model.get(i).type; + boolean fav = Session.of(ctx).favourites().contains(type); + JPopupMenu m = new JPopupMenu(); + JMenuItem f = new JMenuItem(fav ? "Remove from favourites" : "Add to favourites ★"); + f.addActionListener(a -> { + Session.of(ctx).toggleFavourite(type); + list.repaint(); + if (favOnly.isSelected()) { + reload(); + } + }); + m.add(f); + TypeMenus.fill(ctx, type, m); + m.show(list, e.getX(), e.getY()); } }); JScrollPane sp = new JScrollPane(list); sp.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, UIManager.getColor("Component.borderColor"))); add(sp, BorderLayout.CENTER); - JLabel hint = new JLabel("Click: place with the Place tool (P) · drag into the viewport · right-click: ★"); + JLabel hint = + new JLabel("Click: place with the Place tool (P) · drag into the viewport · right-click: ★, type menu"); hint.setFont(hint.getFont().deriveFont(10.5f)); hint.setForeground(UIManager.getColor("Label.disabledForeground")); hint.setBorder(BorderFactory.createEmptyBorder(3, 8, 4, 6)); diff --git a/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/ObjectsEditorPlugin.java b/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/ObjectsEditorPlugin.java index 6fb4c37..ba0d5f7 100644 --- a/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/ObjectsEditorPlugin.java +++ b/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/ObjectsEditorPlugin.java @@ -4,6 +4,7 @@ import com.eliasmueller.llamamod.editor.model.Node; import com.eliasmueller.llamamod.editor.model.PathNode; import com.eliasmueller.llamamod.editor.model.Scene; import com.eliasmueller.llamamod.editor.model.Strat; +import com.eliasmueller.llamamod.editor.tools.strats.CustomTypes; import com.eliasmueller.llamamod.editor.ui.ActionSpec; import com.eliasmueller.llamamod.editor.ui.AssetTab; import com.eliasmueller.llamamod.editor.ui.Dock; @@ -17,6 +18,7 @@ import com.eliasmueller.llamamod.editor.ui.LayerSpec; import com.eliasmueller.llamamod.editor.ui.NodeNames; import com.eliasmueller.llamamod.editor.ui.PanelSpec; import com.eliasmueller.llamamod.editor.ui.ToolEvent; +import com.eliasmueller.llamamod.editor.ui.TypeMenus; import com.eliasmueller.llamamod.editor.ui.tools.EditOps; import java.awt.FlowLayout; import java.awt.Toolkit; @@ -30,7 +32,9 @@ import java.util.function.Predicate; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JLabel; +import javax.swing.JMenuItem; import javax.swing.JPanel; +import javax.swing.JPopupMenu; import javax.swing.SwingUtilities; /** @@ -67,6 +71,7 @@ public final class ObjectsEditorPlugin implements EditorPlugin { x.renderContributor(new ObjectOverlays.Cameras()); x.check(new ObjectChecks(() -> null)); x.assetTab(new AssetTab("prefabs", "Prefabs", "assets", 60, Prefabs::tab)); + TypeMenus.register("objects.customType", ObjectsEditorPlugin::customTypeMenu); x.action(ActionSpec.of( "objects.copy", @@ -297,4 +302,17 @@ public final class ObjectsEditorPlugin implements EditorPlugin { return root; } } + + /** Edit type… / Delete type… for custom strat types (dialogs of editor.tools.strats). */ + static void customTypeMenu(EditorContext ctx, String type, JPopupMenu m) { + if (CustomTypes.index(ctx, type) < 0) { + return; + } + JMenuItem edit = new JMenuItem("Edit type…"); + edit.addActionListener(e -> CustomTypes.edit(ctx, type)); + JMenuItem del = new JMenuItem("Delete type…"); + del.addActionListener(e -> CustomTypes.delete(ctx, type)); + m.add(edit); + m.add(del); + } } diff --git a/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/ParamsSection.java b/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/ParamsSection.java index dad477d..47850a2 100644 --- a/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/ParamsSection.java +++ b/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/ParamsSection.java @@ -134,7 +134,7 @@ final class ParamsSection implements InspectorSection { if (st.type().equals("LevelDoor") || st.type().equals("VillageEndDoor")) { exitRow(st); } - if (Guards.is(st.type())) { + if (Guards.walksBoxes(st.type())) { guardRow(st); } for (int i = 0; i < Math.max(n, sc != null ? sc.paramCount() : 0); i++) { @@ -330,14 +330,20 @@ final class ParamsSection implements InspectorSection { private void guardRow(Strat st) { Scene s = ctx.scene(); String gone = Guards.removedBecause(s, st); + String warn = gone == null ? Guards.startWarning(s, st) : null; int bit = Guards.eventBit(st); String txt = gone != null ? "Never appears: the game removes it at level start because " + gone + "." - : bit > 0 - ? "Starts inside its box. Hidden until event bit " + bit - + " is set by another object (0 = active from the start)." - : "Starts inside its box; active from the start."; - if (gone == null) { + : warn != null + ? "Note: " + warn + "." + : bit > 0 + ? "Starts inside its box. Hidden until event bit " + bit + + " is set by another object (0 = active from the start)" + + (EventBits.setBits(s).contains(bit) + ? "." + : "; no object in this level sets it.") + : "Starts inside its box; active from the start."; + if (gone == null && warn == null) { full(note(txt)); return; } @@ -351,7 +357,7 @@ final class ParamsSection implements InspectorSection { BorderLayout.CENTER); JButton fix = new JButton("Box around it"); fix.setFocusable(false); - fix.setToolTipText("Replace its waypoints with one 4×4 box around the guard"); + fix.setToolTipText("Replace its waypoints with one 4×4 box around it"); fix.addActionListener(e -> { ctx.execute(Setups.guardBox(s, st)); javax.swing.SwingUtilities.invokeLater(this::refresh); diff --git a/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/PlaceTool.java b/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/PlaceTool.java index 2ca528a..e44c097 100644 --- a/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/PlaceTool.java +++ b/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/PlaceTool.java @@ -8,6 +8,7 @@ import com.eliasmueller.llamamod.editor.model.StratCatalog; import com.eliasmueller.llamamod.editor.model.cmd.Batch; import com.eliasmueller.llamamod.editor.model.cmd.Command; import com.eliasmueller.llamamod.editor.model.cmd.Edits; +import com.eliasmueller.llamamod.editor.model.cmd.PlayerStart; import com.eliasmueller.llamamod.editor.render.Camera; import com.eliasmueller.llamamod.editor.render.Legend; import com.eliasmueller.llamamod.editor.render.Overlay; @@ -292,7 +293,13 @@ public final class PlaceTool implements Tool { List nodes = new ArrayList<>(); nodes.add(dragging); if (dragging.waypoint() != null && ctx.prefs().getBool("objects.moveWaypoints", true)) { - nodes.addAll(ctx.scene().chain(dragging.waypoint())); + for (PathNode n : ctx.scene().chain(dragging.waypoint())) { + // a player start's far nodes are camera starts of door entries: they stay + if (dragging != ctx.scene().playerStart() + || Math.hypot(n.gx() - dragging.gx(), n.gz() - dragging.gz()) < PlayerStart.RANGE) { + nodes.add(n); + } + } } ctx.execute(Edits.translate(nodes, dx, dy, dz, mergeKey)); ctx.repaintTool(); @@ -315,6 +322,20 @@ public final class PlaceTool implements Tool { "z", Edits.fixed(st.gz() + r * Math.cos(a)), "ry", Edits.angleUnits(deg))); } + if (st.scene() != null && st == st.scene().playerStart() && st.waypoint() != null) { + // the start camera node(s) turn around the llama + double t = Math.toRadians(deg - st.yawDegrees()), c = Math.cos(t), sn = Math.sin(t); + for (PathNode p : st.scene().chain(st.waypoint())) { + double rx = p.gx() - st.gx(), rz = p.gz() - st.gz(); + if (Math.hypot(rx, rz) < PlayerStart.RANGE) { + v.put( + p, + Map.of( + "x", Edits.fixed(st.gx() + rx * c + rz * sn), + "z", Edits.fixed(st.gz() - rx * sn + rz * c))); + } + } + } return Edits.set("Rotate " + st.type(), v, mergeKey); } diff --git a/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/Schemas.java b/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/Schemas.java index 728cbc5..ae515ed 100644 --- a/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/Schemas.java +++ b/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/Schemas.java @@ -166,7 +166,10 @@ public final class Schemas { .add(); // ---------------------------------------------------------- player, checkpoints, exits - t("Llama", "Player start. The first node of its chain is the start position of the camera.") + t( + "Llama", + "Player start. Its waypoints are start camera positions: the first one within 2.5 cells" + + " of the llama becomes the camera at level start.") .p("Helper", Kind.BOOL, "on: spawns a helper strat at start (STPC 0x434e22 in the village)") .p("Unused", Kind.RAW, "not read by the Llama code") .choice( @@ -178,7 +181,10 @@ public final class Schemas { Role.CAMERA, 0, 0, - "first node = camera start (8 cells behind the llama); the others sit on the llama") + "camera starts (originals: one per entry door): at level start the first node within 2.5" + + " cells (x/z) of the llama is the camera position, looking at the llama; with unk2 ≠ 0" + + " also its distance and height (held until the llama moves – a node on the llama" + + " puts the camera into its head)") .add(); t( "CheckPointPost", @@ -363,6 +369,57 @@ public final class Schemas { .add(); } } + t( + "CowGuardSpawner", + "Spawns CowGuardSpawned guards at its position (they walk inside its waypoint boxes)" + + " while the player is more than 1.5 cells away.") + .p("View range", Kind.RADIUS, 0, 50, "handed on: the spawned guard's view range") + .p("Chase range", Kind.RADIUS, 0, 50, "handed on: the spawned guard's chase range") + .p("Max guards", Kind.COUNT, 0, 20, "spawns again only while fewer of its guards are alive") + .p("Interval", Kind.SECONDS, 0, 120, "wait between spawns") + .p("p4", Kind.RAW, "not read") + .p("p5", Kind.FIXED, "handed on as the guard's parameter 3, which CowGuardSpawned does not read") + .wpPairs( + Role.BOX, + 2, + "walking areas of the spawned guards (they get this chain): boxes of node pairs; the" + + " spawner must stand inside a box whose first node has unk2 = 0, else every" + + " spawned guard is removed at once") + .conf("medium") + .add(); + t("CowGuardSpawned", "Guard made by a CowGuardSpawner (same code as the guards).") + .p("View range", Kind.RADIUS, 0, 50, "") + .p("Chase range", Kind.RADIUS, 0, 50, "") + .p("Event bit", Kind.EVENT_BIT, 0, 32, guardEvent) + .p("p3", Kind.FIXED, "not read") + .wpPairs(Role.BOX, 2, guardBoxes) + .conf("medium") + .add(); + String gatorBoxes = "walking areas: boxes of node pairs (x/z). An odd count removes it; outside every" + + " box the game moves it into the first box. It snaps at the player only on the same floor" + + " height (±0.2) and inside its boxes"; + t("Alligator", "Alligator lying in wait inside its waypoint boxes; snaps at a llama on its floor level.") + .wpPairs(Role.BOX, 2, gatorBoxes) + .conf("medium") + .add(); + t("SpawnedAlligator", "Alligator made by an AlligatorSpawner (gets the spawner's waypoint boxes).") + .wpPairs(Role.BOX, 2, gatorBoxes) + .conf("medium") + .add(); + t( + "AlligatorSpawner", + "Spawns alligators that walk straight ahead (its yaw) into the first waypoint box, then" + + " behave like an Alligator.") + .p("Max alligators", Kind.COUNT, 0, 20, "spawns again only while fewer of its alligators are alive") + .p("Interval", Kind.SECONDS, 0, 120, "wait between spawns (and the player must be 1.5 cells away)") + .p("Floor collision", Kind.BOOL, "on: spawned alligators get strat flags 0x8400 (floor collision)") + .wpPairs( + Role.BOX, + 2, + "boxes of node pairs handed to the spawned alligators; the spawner should face the first" + + " box (alligators walk straight ahead until inside it)") + .conf("medium") + .add(); t("JumpingBeetleBlue", "Jumping beetle following its path.") .p("Jump time", Kind.FIXED, "") .p("p1", Kind.RAW, "unused") diff --git a/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/Session.java b/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/Session.java index 2a43ebb..58b5425 100644 --- a/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/Session.java +++ b/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/Session.java @@ -67,15 +67,21 @@ public final class Session { return ground; } - /** Floor height under a game-space point (searching from a little above), or NaN. */ + /** + * Floor height under a game-space point (searching from a little above), or NaN. A floor of the + * cell's own tiles (the one the game uses) wins over a neighbour tile's polygon at any height. + */ public double floorY(double x, double z, double probeY) { Ground g = ground(); if (g == null) { return Double.NaN; } Ground.Hit h = g.below(x, z, probeY, 0.6); - if (h == null) { - h = g.below(x, z, Double.NaN, 0); + if (h == null || h.source() == Ground.Source.NEIGHBOUR) { + Ground.Hit any = g.below(x, z, Double.NaN, 0); + if (h == null || any != null && any.source() != Ground.Source.NEIGHBOUR) { + h = any; + } } return h == null ? Double.NaN : h.y(); } diff --git a/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/Setups.java b/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/Setups.java index 0b14135..8e212f6 100644 --- a/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/Setups.java +++ b/src/main/java/com/eliasmueller/llamamod/editor/tools/objects/Setups.java @@ -5,13 +5,14 @@ import com.eliasmueller.llamamod.editor.model.Node; import com.eliasmueller.llamamod.editor.model.PathNode; import com.eliasmueller.llamamod.editor.model.Scene; import com.eliasmueller.llamamod.editor.model.Strat; +import com.eliasmueller.llamamod.editor.model.WaypointBoxes; import com.eliasmueller.llamamod.editor.model.cmd.AddNode; import com.eliasmueller.llamamod.editor.model.cmd.Batch; import com.eliasmueller.llamamod.editor.model.cmd.Command; import com.eliasmueller.llamamod.editor.model.cmd.Edits; +import com.eliasmueller.llamamod.editor.model.cmd.PlayerStart; import com.eliasmueller.llamamod.editor.model.cmd.SetProp; import java.util.ArrayList; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -62,8 +63,9 @@ public final class Setups { } /** - * Places an object (yaw in degrees). Guards ({@link Guards}) get one box around them instead of the prototype's - * boxes and event bit 0, so they are active from the start. + * Places an object (yaw in degrees). Box walkers (guards, alligators: {@link Guards}) get one box + * around them instead of the prototype's boxes and guards event bit 0, so they are active from + * the start ({@link Edits#placeStrat}, the same for every way of adding an object). */ public static Made object(Scene s, String type, int variant, double x, double y, double z, double yaw) { return object(s, type, variant, x, y, z, Double.valueOf(yaw)); @@ -72,48 +74,12 @@ public final class Setups { /** As above; yaw null = the prototype's yaw. */ public static Made object(Scene s, String type, int variant, double x, double y, double z, Double yaw) { Command c = Edits.placeStrat(s, type, variant, x, y, z, yaw); - Strat st = lastStrat(c); - if (Guards.is(type)) { - c = guardSetup(s, (Batch) c, st, x, y, z); - } - return new Made(c, st); + return new Made(c, lastStrat(c)); } - private static Command guardSetup(Scene s, Batch placed, Strat st, double x, double y, double z) { - double h = Guards.NEW_BOX_HALF; - List nodes = addedNodes(placed); - List cmds = new ArrayList<>(); - if (nodes.size() >= 2) { - for (Command k : placed.commands()) { - if (!(k instanceof AddNode a && a.node() instanceof PathNode p && nodes.indexOf(p) >= 2)) { - cmds.add(k); - } - } - pos(nodes.get(0), x - h, y, z - h); - pos(nodes.get(1), x + h, y, z + h); - nodes.get(0).setRaw("unk2", 0); - nodes.get(1).setRaw("unk2", 0); - nodes.get(1).setRaw("next", null); - } else { - cmds.addAll(placed.commands()); - cmds.addAll(ChainOps.newChain( - s, - st, - List.of( - ChainOps.newNode(s, x - h, y, z - h, 0, null), - ChainOps.newNode(s, x + h, y, z + h, 0, null)))); - } - int[] p = st.params().clone(); - if (p.length > Guards.EVENT_PARAM) { - p[Guards.EVENT_PARAM] = 0; - st.setRaw("params", p); - } - return new Batch(placed.label(), cmds); - } - - /** Replaces a guard's waypoints with one box of 2 nodes around it (it then starts inside). */ + /** Replaces a box walker's waypoints with one box of 2 nodes around it (it then starts inside). */ public static Command guardBox(Scene s, Strat st) { - double h = Guards.NEW_BOX_HALF; + double h = WaypointBoxes.NEW_BOX_HALF; List cmds = new ArrayList<>(); if (st.waypoint() != null && s.contains(st.waypoint()) @@ -130,40 +96,19 @@ public final class Setups { } /** - * Player start: moves the existing player object if there is one (a level has exactly one), - * else places a Llama with its chain (first node = camera 8 cells behind, rest on the llama). + * Player start: moves the existing player object if there is one (a level has exactly one; its + * camera nodes near the old start move along), else places a Llama with one start camera node + * behind it ({@link PlayerStart}). */ public static Made player(Scene s, double x, double y, double z, double yaw) { Strat st = s.playerStart(); if (st != null) { - Map> v = new LinkedHashMap<>(); - double dx = x - st.gx(), dy = y - st.gy(), dz = z - st.gz(); - v.put( - st, - Map.of("x", Edits.fixed(x), "y", Edits.fixed(y), "z", Edits.fixed(z), "ry", Edits.angleUnits(yaw))); - if (st.waypoint() != null) { - List ch = s.chain(st.waypoint()); - double a = Math.toRadians(yaw); - for (int i = 0; i < ch.size(); i++) { - PathNode p = ch.get(i); - double nx = i == 0 ? x - 8 * Math.sin(a) : p.gx() + dx; - double nz = i == 0 ? z - 8 * Math.cos(a) : p.gz() + dz; - double ny = i == 0 ? y - 0.4 : p.gy() + dy; - v.put(p, Map.of("x", Edits.fixed(nx), "y", Edits.fixed(ny), "z", Edits.fixed(nz))); - } - } - return new Made(Edits.set("Move player start", v, null), st); + return new Made(PlayerStart.move(s, st, x, y, z, yaw), st); } if (!s.catalog().has("Llama")) { throw new IllegalStateException("this base level has no Llama (player start) to copy"); } - Command c = Edits.placeStrat(s, "Llama", 0, x, y, z, yaw); - double a = Math.toRadians(yaw); - int k = 0; - for (PathNode p : addedNodes(c)) { - pos(p, k == 0 ? x - 8 * Math.sin(a) : x, k == 0 ? y - 0.4 : y, k == 0 ? z - 8 * Math.cos(a) : z); - k++; - } + Command c = PlayerStart.place(s, x, y, z, yaw); return new Made(new Batch("Player start", List.of(c)), lastStrat(c)); } diff --git a/src/main/java/com/eliasmueller/llamamod/editor/tools/strats/CustomTypes.java b/src/main/java/com/eliasmueller/llamamod/editor/tools/strats/CustomTypes.java new file mode 100644 index 0000000..f7dbd06 --- /dev/null +++ b/src/main/java/com/eliasmueller/llamamod/editor/tools/strats/CustomTypes.java @@ -0,0 +1,31 @@ +package com.eliasmueller.llamamod.editor.tools.strats; + +import com.eliasmueller.llamamod.editor.ui.EditorContext; + +/** Public entry to the custom type dialogs for other packages (object palettes). */ +public final class CustomTypes { + private CustomTypes() {} + + /** Index of a custom type of the open project by name, or −1. */ + public static int index(EditorContext ctx, String type) { + return ctx.document() == null + ? -1 + : StratEdits.customNames(ctx.document().project()).indexOf(type); + } + + /** Opens the script dialog of a custom type ({@link TypeEdits#edit} on OK). */ + public static void edit(EditorContext ctx, String type) { + int k = index(ctx, type); + if (k >= 0) { + TypeDialog.showEdit(ctx, k); + } + } + + /** Asks and deletes a custom type with its objects ({@link TypeEdits#delete}). */ + public static void delete(EditorContext ctx, String type) { + int k = index(ctx, type); + if (k >= 0) { + TypeDialog.delete(ctx, k); + } + } +} diff --git a/src/main/java/com/eliasmueller/llamamod/editor/ui/BuiltinEditorPlugin.java b/src/main/java/com/eliasmueller/llamamod/editor/ui/BuiltinEditorPlugin.java index 2918d99..6d2a6d2 100644 --- a/src/main/java/com/eliasmueller/llamamod/editor/ui/BuiltinEditorPlugin.java +++ b/src/main/java/com/eliasmueller/llamamod/editor/ui/BuiltinEditorPlugin.java @@ -2,15 +2,13 @@ package com.eliasmueller.llamamod.editor.ui; import com.eliasmueller.llamamod.editor.model.Brush; import com.eliasmueller.llamamod.editor.model.BrushKind; -import com.eliasmueller.llamamod.editor.model.PathNode; import com.eliasmueller.llamamod.editor.model.Scene; import com.eliasmueller.llamamod.editor.model.Strat; import com.eliasmueller.llamamod.editor.model.StratCatalog; import com.eliasmueller.llamamod.editor.model.TileModel; -import com.eliasmueller.llamamod.editor.model.cmd.AddNode; -import com.eliasmueller.llamamod.editor.model.cmd.Batch; import com.eliasmueller.llamamod.editor.model.cmd.Command; import com.eliasmueller.llamamod.editor.model.cmd.Edits; +import com.eliasmueller.llamamod.editor.model.cmd.PlayerStart; import com.eliasmueller.llamamod.editor.render.Camera; import com.eliasmueller.llamamod.editor.render.Gizmo; import com.eliasmueller.llamamod.editor.ui.panels.AssetBrowserPanel; @@ -340,25 +338,9 @@ final class BuiltinEditorPlugin implements EditorPlugin { } } - /** - * Player start like levelbuild: the Llama with its waypoint chain, first node = camera start 8 - * cells behind, the others on the llama. - */ + /** Player start: the Llama with one start camera node behind it ({@link PlayerStart}). */ private static Command placePlayer(Scene s, double x, double y, double z, double yawDeg) { - Batch b = (Batch) Edits.placeStrat(s, "Llama", 0, x, y, z, yawDeg); - double a = Math.toRadians(yawDeg); - int k = 0; - for (Command c : b.commands()) { - if (c instanceof AddNode an && an.node() instanceof PathNode p) { - double nx = k == 0 ? x - 8 * Math.sin(a) : x, nz = k == 0 ? z - 8 * Math.cos(a) : z; - double ny = k == 0 ? y - 0.4 : y; - p.setRaw("x", Edits.fixed(nx)); - p.setRaw("y", Edits.fixed(ny)); - p.setRaw("z", Edits.fixed(nz)); - k++; - } - } - return b; + return PlayerStart.place(s, x, y, z, yawDeg); } // ------------------------------------------------------------------ checks diff --git a/src/main/java/com/eliasmueller/llamamod/editor/ui/TypeMenus.java b/src/main/java/com/eliasmueller/llamamod/editor/ui/TypeMenus.java new file mode 100644 index 0000000..653be82 --- /dev/null +++ b/src/main/java/com/eliasmueller/llamamod/editor/ui/TypeMenus.java @@ -0,0 +1,43 @@ +package com.eliasmueller.llamamod.editor.ui; + +import java.util.Map; +import java.util.concurrent.ConcurrentSkipListMap; +import javax.swing.JPopupMenu; + +/** + * Context-menu entries for an object type (right-click in the Assets → Objects grid and the + * Objects palette). Plugins register a contributor under an id; each adds its items for the type. + */ +public final class TypeMenus { + /** Adds menu items for {@code type} (catalog type name) to the menu. */ + @FunctionalInterface + public interface Contributor { + void contribute(EditorContext ctx, String type, JPopupMenu menu); + } + + private static final Map CONTRIBUTORS = new ConcurrentSkipListMap<>(); + + private TypeMenus() {} + + public static void register(String id, Contributor c) { + CONTRIBUTORS.put(id, c); + } + + /** Lets every contributor add its entries (a separator before each non-empty group). */ + public static void fill(EditorContext ctx, String type, JPopupMenu menu) { + for (Contributor c : CONTRIBUTORS.values()) { + int before = menu.getComponentCount(); + if (before > 0) { + menu.addSeparator(); + } + try { + c.contribute(ctx, type, menu); + } catch (RuntimeException e) { + e.printStackTrace(); + } + if (before > 0 && menu.getComponentCount() == before + 1) { + menu.remove(before); + } + } + } +} diff --git a/src/main/java/com/eliasmueller/llamamod/editor/ui/panels/AssetBrowserPanel.java b/src/main/java/com/eliasmueller/llamamod/editor/ui/panels/AssetBrowserPanel.java index 62a2798..cc1649d 100644 --- a/src/main/java/com/eliasmueller/llamamod/editor/ui/panels/AssetBrowserPanel.java +++ b/src/main/java/com/eliasmueller/llamamod/editor/ui/panels/AssetBrowserPanel.java @@ -18,6 +18,7 @@ import com.eliasmueller.llamamod.editor.ui.EditorWindow; import com.eliasmueller.llamamod.editor.ui.Icons; import com.eliasmueller.llamamod.editor.ui.NodeIcons; import com.eliasmueller.llamamod.editor.ui.NodeNames; +import com.eliasmueller.llamamod.editor.ui.TypeMenus; import com.eliasmueller.llamamod.editor.ui.Widgets; import com.eliasmueller.llamamod.editor.ui.tools.EditOps; import com.eliasmueller.llamamod.editor.ui.view.SceneRenderer; @@ -55,7 +56,9 @@ import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JList; +import javax.swing.JMenuItem; import javax.swing.JPanel; +import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTabbedPane; @@ -318,8 +321,39 @@ public final class AssetBrowserPanel extends JPanel { list.setToolTipText(hint); AssetDrop.dragSource(list, it -> it.dragKind == null ? null : AssetDrop.payload(it.dragKind, it.dragData)); list.addMouseListener(new MouseAdapter() { + @Override + public void mousePressed(MouseEvent e) { + typeMenu(e); + } + + @Override + public void mouseReleased(MouseEvent e) { + typeMenu(e); + } + + private void typeMenu(MouseEvent e) { + int i = list.locationToIndex(e.getPoint()); + if (!e.isPopupTrigger() + || i < 0 + || !list.getCellBounds(i, i).contains(e.getPoint()) + || !(model.get(i).data instanceof StratCatalog.Type t)) { + return; + } + list.setSelectedIndex(i); + Item it = model.get(i); + JPopupMenu m = new JPopupMenu(); + JMenuItem place = new JMenuItem("Place at view centre"); + place.addActionListener(a -> placeAtCentre(it)); + m.add(place); + TypeMenus.fill(ctx, t.name(), m); + m.show(list, e.getX(), e.getY()); + } + @Override public void mouseClicked(MouseEvent e) { + if (e.getButton() != MouseEvent.BUTTON1) { + return; + } Item it = list.getSelectedValue(); if (it == null) { return; diff --git a/src/test/java/com/eliasmueller/llamamod/editor/tools/objects/GroundTest.java b/src/test/java/com/eliasmueller/llamamod/editor/tools/objects/GroundTest.java new file mode 100644 index 0000000..f5009fe --- /dev/null +++ b/src/test/java/com/eliasmueller/llamamod/editor/tools/objects/GroundTest.java @@ -0,0 +1,71 @@ +package com.eliasmueller.llamamod.editor.tools.objects; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import com.eliasmueller.llamamod.editor.io.Bases; +import com.eliasmueller.llamamod.editor.io.BrushCompiler; +import com.eliasmueller.llamamod.editor.io.Project; +import com.eliasmueller.llamamod.editor.model.Scene; +import com.eliasmueller.llamamod.editor.tools.playtest.FloorFinder; +import java.util.ArrayList; +import org.junit.jupiter.api.Test; + +/** Snap-to-floor follows the engine's cell rule (needs -Dllamamod.cd). */ +class GroundTest { + @Test + void cellFloorsMatchTheEngineRuleOfThePlayerFinder() throws Exception { + int same = 0, neighbourOnly = 0, ignoredAbove = 0; + for (String base : new String[] {"t1l1m001", "t1l1m002", "t1l5m001"}) { + Scene s = ObjectToolsTest.load(base); + Ground g = Ground.build(s, null); + for (int cx = 0; cx < s.settings().width(); cx++) { + for (int cz = 0; cz < s.settings().height(); cz++) { + for (double[] o : new double[][] {{0.5, 0.5}, {0.1, 0.9}, {0.85, 0.2}}) { + double x = cx + o[0], z = cz + o[1]; + Ground.Hit h = g.below(x, z, Double.NaN, 0); + FloorFinder.Floor f = FloorFinder.below(s, x, 1000, z); + if (h == null) { + continue; + } + Ground.Hit nb = g.neighbourBelow(x, z, Double.NaN, 0); + if (h.source() == Ground.Source.CELL && nb != null && nb.y() > h.y() + 0.05) { + ignoredAbove++; + } + if (h.source() == Ground.Source.NEIGHBOUR) { + neighbourOnly++; + assertTrue(f == null || f.material() == 30, x + "," + z); + } else if (h.source() == Ground.Source.CELL && f != null && f.material() != 30) { + assertEquals(f.y(), h.y(), 0.02, x + "," + z); + same++; + } + } + } + } + } + assertTrue(same > 500, "cell floors compared: " + same); + // the villages have places where a higher polygon reaches into a cell its tile is not listed in + // (the geometric finder snapped onto it) + assertTrue(ignoredAbove + neighbourOnly > 0, "ignored points: " + ignoredAbove + " / " + neighbourOnly); + System.out.println("GroundTest: " + same + " same, " + ignoredAbove + " higher neighbour polygons ignored, " + + neighbourOnly + " neighbour-only"); + } + + @Test + void brushFloorsAndSwapModels() throws Exception { + Project pr = Project.create(Bases.fromCd(ObjectToolsTest.cd()), "new", "t1l1m002"); + Scene s = pr.scene(); + Setups.exit(s, 12.2, 0, 26.2, 1, 1, 2).command().apply(s); + var out = BrushCompiler.compile(s, new ArrayList<>()); + Ground g = Ground.build(s, out); + Ground.Hit h = g.below(12.5, 26.5, Double.NaN, 0); + assertNotNull(h); + assertEquals(Ground.Source.CELL, h.source()); + assertEquals(16, h.material()); + // village 1: the door tile's exit floor is only in its swap model (RubyIdolDoor opens it) + Scene v = ObjectToolsTest.load("t1l1m001"); + Ground gv = Ground.build(v, null); + assertTrue(gv.hasMaterial(42, 49, 16)); + } +} diff --git a/src/test/java/com/eliasmueller/llamamod/editor/tools/objects/GuardsTest.java b/src/test/java/com/eliasmueller/llamamod/editor/tools/objects/GuardsTest.java index e25c066..fa7fa9b 100644 --- a/src/test/java/com/eliasmueller/llamamod/editor/tools/objects/GuardsTest.java +++ b/src/test/java/com/eliasmueller/llamamod/editor/tools/objects/GuardsTest.java @@ -11,6 +11,8 @@ import com.eliasmueller.llamamod.editor.model.PathNode; import com.eliasmueller.llamamod.editor.model.Scene; import com.eliasmueller.llamamod.editor.model.Strat; import com.eliasmueller.llamamod.editor.model.cmd.Batch; +import com.eliasmueller.llamamod.editor.model.cmd.Command; +import com.eliasmueller.llamamod.editor.model.cmd.Edits; import com.eliasmueller.llamamod.editor.model.cmd.History; import com.eliasmueller.llamamod.editor.ui.Problem; import java.nio.file.Files; @@ -29,7 +31,10 @@ class GuardsTest { @Test void originalGuardsAndDoorsPassTheChecks() throws Exception { int guards = 0, withEvent = 0; + Map walkers = new TreeMap<>(); + List odd = new ArrayList<>(); Map doorWarnings = new TreeMap<>(); + List unsetBits = new ArrayList<>(); try (var files = Files.list(ObjectToolsTest.cd().resolve("wads"))) { for (Path p : files.filter(f -> f.getFileName().toString().matches("t1l\\dm00\\d\\.wad")) .sorted() @@ -41,12 +46,22 @@ class GuardsTest { guards++; assertNull(Guards.removedBecause(s, st), base + " " + st.id()); withEvent += Guards.eventBit(st) > 0 ? 1 : 0; + } else if (Guards.walksBoxes(st.type())) { + walkers.merge(st.type(), 1, Integer::sum); + String why = Guards.removedBecause(s, st); + if (why != null) { + odd.add(base + " " + st.id()); + } + assertNull(Guards.startWarning(s, st), base + " " + st.id()); } } List out = new ArrayList<>(); new ObjectChecks(() -> null).check(s, out); for (Problem pr : out) { assertTrue(!pr.message().contains("never appears"), base + ": " + pr.message()); + if (pr.message().contains("no object in this level sets")) { + unsetBits.add(base + " " + pr.message().replaceAll(".*until event bit (\\d+).*", "$1")); + } if (pr.message().contains("without exit floor")) { doorWarnings.merge(base, 1, Integer::sum); } @@ -57,6 +72,64 @@ class GuardsTest { assertEquals(4, withEvent); // lab: cow, gorilla and lizard guards wait for scenes // the two spare doors of t1l3m003 have no exit floor (their partners next to them do) assertEquals(Map.of("t1l3m003", 2), doorWarnings); + assertEquals(Map.of("Alligator", 1, "AlligatorSpawner", 2, "CowGuardSpawner", 8), walkers); + // one lab spawner stands 0.12 cells outside its boxes + assertEquals(List.of("t1l8m005 strat:82"), odd); + // lab guards: bits 8 (LabBigCutscene) and 30 (LabWall) have setters, 1 and 20 none in the level + assertEquals(List.of("t1l8m001 20", "t1l8m001 1"), unsetBits); + } + + @Test + void everyWayOfAddingGivesBoxWalkersOneBox() throws Exception { + Scene s = Project.create(Bases.fromCd(ObjectToolsTest.cd()), "new", "t1l1m002") + .scene(); + // the Add object path (asset drop, Objects panel drag, place at view centre) + Command c = Edits.placeStrat(s, "CityGuard", 0, 22, 0, 18, null); + c.apply(s); + Strat guard = Setups.lastStrat(c); + assertEquals(2, s.chain(guard.waypoint()).size()); + assertNull(Guards.removedBecause(s, guard)); + assertEquals(0, Guards.eventBit(guard)); + assertTrue(ChainOps.contiguous(s)); + assertTrue(problems(s).isEmpty(), problems(s).toString()); + } + + @Test + void alligatorsAndSpawners() throws Exception { + Bases b = Bases.fromCd(ObjectToolsTest.cd()); + Scene s = ObjectToolsTest.load("t1l6m003"); + assertTrue(s.catalog().has("AlligatorSpawner")); + History h = new History(s); + Setups.Made m = Setups.object(s, "AlligatorSpawner", 0, 30, 0, 30, 0); + h.execute(m.command()); + Strat sp = (Strat) m.main(); + List ch = s.chain(sp.waypoint()); + assertEquals(2, ch.size()); + assertNull(Guards.removedBecause(s, sp)); + assertNull(Guards.startWarning(s, sp)); + // box moved behind the spawner: its alligators would walk away from it + for (PathNode p : ch) { + p.setRaw("z", p.z() - 6 * 4096); + } + assertNotNull(Guards.startWarning(s, sp)); + sp.setRaw("ry", 2048); // turned round: facing the box again + assertNull(Guards.startWarning(s, sp)); + // odd node count: spawned alligators are removed at once + h.execute(new Batch("del", ChainOps.remove(s, ch.get(1)))); + assertTrue(problems(s).stream() + .anyMatch(p -> + p.severity() == Problem.Severity.WARNING && p.message().contains("its alligators"))); + + Scene v = Project.create(b, "new", "t1l4m002").scene(); + Setups.Made g = Setups.object(v, "Alligator", 0, 20, 0, 20, 0); + g.command().apply(v); + Strat al = (Strat) g.main(); + assertEquals(2, v.chain(al.waypoint()).size()); + assertTrue(problems(v).isEmpty(), problems(v).toString()); + al.setRaw("x", al.x() + 5 * 4096); + assertTrue(problems(v).stream() + .anyMatch(p -> + p.severity() == Problem.Severity.WARNING && p.message().contains("first box"))); } @Test @@ -124,7 +197,7 @@ class GuardsTest { private static List problems(Scene s) { List out = new ArrayList<>(); new ObjectChecks(() -> null).check(s, out); - out.removeIf(p -> !(p.node() instanceof Strat st) || !Guards.is(st.type())); + out.removeIf(p -> !(p.node() instanceof Strat st) || !Guards.walksBoxes(st.type())); return out; } } diff --git a/src/test/java/com/eliasmueller/llamamod/editor/tools/objects/ObjectsGameDemo.java b/src/test/java/com/eliasmueller/llamamod/editor/tools/objects/ObjectsGameDemo.java new file mode 100644 index 0000000..08985ce --- /dev/null +++ b/src/test/java/com/eliasmueller/llamamod/editor/tools/objects/ObjectsGameDemo.java @@ -0,0 +1,123 @@ +package com.eliasmueller.llamamod.editor.tools.objects; + +import com.eliasmueller.llamamod.editor.io.Bases; +import com.eliasmueller.llamamod.editor.io.Project; +import com.eliasmueller.llamamod.editor.io.ProjectIO; +import com.eliasmueller.llamamod.editor.model.Brush; +import com.eliasmueller.llamamod.editor.model.BrushKind; +import com.eliasmueller.llamamod.editor.model.PathNode; +import com.eliasmueller.llamamod.editor.model.Scene; +import com.eliasmueller.llamamod.editor.model.Strat; +import com.eliasmueller.llamamod.editor.model.cmd.AddNode; +import com.eliasmueller.llamamod.editor.model.cmd.Command; +import com.eliasmueller.llamamod.editor.model.cmd.Edits; +import com.eliasmueller.llamamod.editor.ui.Problem; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * Not a unit test: test levels for the start camera and box walkers. A 12×12 plaza, the player start + * in its middle facing +x; "old" = the previous player setup (prototype chain on the llama, first + * node 8 behind); objects added through {@link Edits#placeStrat} (the Add object path) 3 cells ahead. + * Args: CD folder, output .llamalevel, base, chapter, name, old|new, [object type]. + */ +public final class ObjectsGameDemo { + private ObjectsGameDemo() {} + + public static void main(String[] a) throws Exception { + Bases cd = Bases.fromCd(Path.of(a[0])); + boolean orig = a[5].startsWith("orig"); + Project pr = orig + ? new Project( + com.eliasmueller.llamamod.editor.io.Templates.original(cd, a[2]), + com.eliasmueller.llamamod.editor.io.WadImporter.importWad(cd.wad(a[2]), a[2], cd::fileOrNull)) + : Project.create(cd, "new", a[2]); + Scene s = pr.scene(); + if (a[5].equals("origprobe")) { + double nx = Double.parseDouble(a[6]), nz = Double.parseDouble(a[7]); + for (int yaw = 0; yaw < 360; yaw += 30) { + double r = Math.toRadians(yaw); + StringBuilder b2 = new StringBuilder("yaw " + yaw + ":"); + for (double d : new double[] {0, 1, 2}) { + var f = com.eliasmueller.llamamod.editor.tools.playtest.FloorFinder.below( + s, nx - d * Math.sin(r), 20, nz - d * Math.cos(r)); + b2.append(String.format(" %.2f", f == null ? Double.NaN : f.y())); + } + System.out.println(b2); + } + return; + } + if (orig) { + // move the start of the original level: old setup (node 0 eight behind, the rest by the delta) or new + double nx = Double.parseDouble(a[6]), nz = Double.parseDouble(a[7]), yaw = Double.parseDouble(a[8]); + var f = com.eliasmueller.llamamod.editor.tools.playtest.FloorFinder.near(s, nx, 20, nz); + Strat ll = s.playerStart(); + if (a[5].equals("origold")) { + List ch = s.chain(ll.waypoint()); + double dx = nx - ll.gx(), dy = f.y() - ll.gy(), dz = nz - ll.gz(), r = Math.toRadians(yaw); + for (int i = 0; i < ch.size(); i++) { + PathNode p = ch.get(i); + if (i == 0) { + Setups.pos(p, nx - 8 * Math.sin(r), f.y() - 0.4, nz - 8 * Math.cos(r)); + } else { + Setups.pos(p, p.gx() + dx, p.gy() + dy, p.gz() + dz); + } + } + ll.setRaw("x", Edits.fixed(nx)); + ll.setRaw("y", Edits.fixed(f.y())); + ll.setRaw("z", Edits.fixed(nz)); + ll.setRaw("ry", Edits.angleUnits(yaw)); + } else { + Setups.player(s, nx, f.y(), nz, yaw).command().apply(s); + } + List ch = s.chain(ll.waypoint()); + System.out.println("start " + nx + " " + f.y() + " " + nz + " camera node " + + com.eliasmueller.llamamod.editor.model.cmd.PlayerStart.startNode(ch, nx, nz)); + ProjectIO.save(pr, Path.of(a[1]), cd); + System.out.println("saved " + a[1]); + return; + } + s.settings().prop("name").setRaw(s.settings(), a[4]); + s.settings().prop("targetChapter").setRaw(s.settings(), Integer.parseInt(a[3])); + Brush b = s.createBrush(BrushKind.BOX); + Map.of("x0", 10.0, "z0", 10.0, "x1", 22.0, "z1", 22.0, "y0", -1.0, "y1", 0.0) + .forEach(b::setRaw); + new AddNode(b).apply(s); + double px = 14.5, pz = 16.5; + if (a[5].equals("old")) { + Command c = Edits.placeStrat(s, "Llama", 0, px, 0, pz, 90.0); + c.apply(s); + List ch = s.chain(Setups.lastStrat(c).waypoint()); + for (int i = 0; i < ch.size(); i++) { + Setups.pos(ch.get(i), i == 0 ? px - 8 : px, i == 0 ? -0.4 : 0, pz); + } + } else { + Setups.player(s, px, 0, pz, 90).command().apply(s); + } + if (a.length > 6) { + Command c = Edits.placeStrat(s, a[6], 0, px + 3.5, 0, pz, 270.0); + c.apply(s); + } + if (a.length > 7 && a[7].equals("ui")) { + // editor screenshot setup: a custom type and a guard waiting for an event nobody sets + var t = com.eliasmueller.llamamod.editor.tools.strats.StratEdits.cloneOf(s, "Coin", "MyCoin"); + com.eliasmueller.llamamod.editor.tools.strats.StratEdits.addType(pr, t); + Command c = Edits.placeStrat(s, a[6], 0, px + 3.5, 0, pz + 3, 270.0); + c.apply(s); + Strat g = Setups.lastStrat(c); + int[] prm = g.params().clone(); + prm[2] = 5 << 12; + g.setRaw("params", prm); + } + List out = new ArrayList<>(); + new ObjectChecks(() -> null).check(s, out); + out.forEach(p -> System.out.println(p.severity() + " " + p.message())); + for (Strat st : s.strats()) { + System.out.println(st.type() + " chain " + s.chain(st.waypoint()).size()); + } + ProjectIO.save(pr, Path.of(a[1]), cd); + System.out.println("saved " + a[1]); + } +} diff --git a/src/test/java/com/eliasmueller/llamamod/editor/tools/objects/PlayerStartTest.java b/src/test/java/com/eliasmueller/llamamod/editor/tools/objects/PlayerStartTest.java new file mode 100644 index 0000000..14be68a --- /dev/null +++ b/src/test/java/com/eliasmueller/llamamod/editor/tools/objects/PlayerStartTest.java @@ -0,0 +1,111 @@ +package com.eliasmueller.llamamod.editor.tools.objects; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import com.eliasmueller.llamamod.editor.io.Bases; +import com.eliasmueller.llamamod.editor.io.Project; +import com.eliasmueller.llamamod.editor.model.PathNode; +import com.eliasmueller.llamamod.editor.model.Scene; +import com.eliasmueller.llamamod.editor.model.Strat; +import com.eliasmueller.llamamod.editor.model.cmd.Command; +import com.eliasmueller.llamamod.editor.model.cmd.Edits; +import com.eliasmueller.llamamod.editor.model.cmd.History; +import com.eliasmueller.llamamod.editor.model.cmd.PlayerStart; +import java.util.List; +import org.junit.jupiter.api.Test; + +/** The Llama's waypoints are start camera positions (first node within 2.5 cells). Needs -Dllamamod.cd. */ +class PlayerStartTest { + @Test + void newPlayerStartGetsOneCameraNodeBehind() throws Exception { + Bases b = Bases.fromCd(ObjectToolsTest.cd()); + for (String base : new String[] {"t1l1m001", "t1l1m002"}) { + Scene s = Project.create(b, "new", base).scene(); + Setups.Made m = Setups.player(s, 20.5, 3, 20.5, 90); + m.command().apply(s); + Strat ll = (Strat) m.main(); + List ch = s.chain(ll.waypoint()); + assertEquals(1, ch.size(), base); + assertEquals(0, PlayerStart.startNode(ch, ll.gx(), ll.gz())); + assertEquals(18.5, ch.getFirst().gx(), 1e-3); // 2 cells behind (facing +x) + assertEquals(3.5, ch.getFirst().gy(), 1e-3); + assertEquals(0, ch.getFirst().unk2()); + assertNull(ObjectChecks.startCamera(s, ll), base); + assertTrue(ChainOps.contiguous(s)); + // the Place tool's rotate knob turns the camera node around the llama + PlaceTool.rotateCommand(ll, 180, null).apply(s); + assertEquals(20.5, ch.getFirst().gx(), 1e-3); + assertEquals(22.5, ch.getFirst().gz(), 1e-3); + } + } + + @Test + void prototypeChainOnTheLlamaIsReported() throws Exception { + Bases b = Bases.fromCd(ObjectToolsTest.cd()); + // what the old setup did: prototype chain, first node 8 behind, the rest on the llama + for (String base : new String[] {"t1l1m001", "t1l1m002"}) { + Scene s = Project.create(b, "new", base).scene(); + Command c = Edits.placeStrat(s, "Llama", 0, 20.5, 3, 20.5, 0.0); + c.apply(s); + Strat ll = Setups.lastStrat(c); + List ch = s.chain(ll.waypoint()); + for (int i = 0; i < ch.size(); i++) { + Setups.pos(ch.get(i), 20.5, i == 0 ? 2.6 : 3, i == 0 ? 12.5 : 20.5); + } + String why = ObjectChecks.startCamera(s, ll); + // village 2: node 2 has unk2 ≠ 0 – camera in the head (seen in game); village 1: unk2 = 0, + // the camera starts behind the llama at default distance (seen in game) + if (base.equals("t1l1m002")) { + assertNotNull(why); + assertTrue(why.contains("head"), why); + } else { + assertNull(why, why); + } + } + } + + @Test + void movingTheOriginalStartKeepsDoorNodes() throws Exception { + Scene s = ObjectToolsTest.load("t1l1m001"); + Strat ll = s.playerStart(); + List before = s.chain(ll.waypoint()); + double[][] pos = new double[before.size()][]; + for (int i = 0; i < pos.length; i++) { + pos[i] = new double[] {before.get(i).gx(), before.get(i).gz()}; + } + assertNull(ObjectChecks.startCamera(s, ll)); + Strat intro = s.strats().stream() + .filter(o -> o.type().equals("CutSceneTrigger") && Math.hypot(o.gx() - ll.gx(), o.gz() - ll.gz()) < 1) + .findFirst() + .orElseThrow(); + assertEquals(0, intro.params()[6]); + History h = new History(s); + h.execute(Setups.player(s, 30.5, 4.25, 40.5, 180).command()); + // the intro fly-by trigger moves along and ends behind the llama + assertEquals(30.5, intro.gx(), 0.1); + assertEquals(1 << 12, intro.params()[6]); + List after = s.chain(ll.waypoint()); + assertEquals(before.size() + 1, after.size()); + for (int i = 0; i < pos.length; i++) { + assertEquals(pos[i][0], after.get(i).gx(), 1e-3); + assertEquals(pos[i][1], after.get(i).gz(), 1e-3); + } + int k = PlayerStart.startNode(after, ll.gx(), ll.gz()); + assertEquals(after.size() - 1, k); + assertEquals(42.5, after.get(k).gz(), 1e-3); // behind = +z when facing −z + assertNull(ObjectChecks.startCamera(s, ll)); + assertTrue(ChainOps.contiguous(s)); + // moving it again a little takes the node along instead of adding one + h.execute(Setups.player(s, 31.5, 4.25, 40.5, 90).command()); + after = s.chain(ll.waypoint()); + assertEquals(before.size() + 1, after.size()); + assertEquals(29.5, after.getLast().gx(), 1e-3); + assertEquals(40.5, after.getLast().gz(), 1e-3); + h.undo(); + h.undo(); + assertEquals(before.size(), s.chain(ll.waypoint()).size()); + } +}