mirror of
https://github.com/DramaticShape/DramaticShapeVoxelMod.git
synced 2026-08-12 12:11:03 +02:00
1.0.5: furnish every remaining interior
Extends the shape profile from ten tilesets to twenty-three -- 1,190 pinned tiles over ~130 maps -- surveyed against the standard the finished interiors set: one 16px wall band carrying its built-ins, half-cell counters, bookcase-collapsed shelving, thin-pool plant standees, objects riding the furniture they are drawn above. The recurring failures were rooms sunk into ponds by the three stale-cache water ids (collision is per cell, so one trapped tile sank its neighbours too), counters and cave edges towering to 32-48px, racks fusing into deep monoliths, and anything in a walkable cell -- stools, tables, staircases, gravestone arches -- vanishing into the floor. Also fixes the door fold overwriting profile pins: it replaced the resolved shape unconditionally, so stair pins on tiles their tileset lists in doorTiles (Celadon Mansion, Pokemon Mansion 3F) silently did nothing.
This commit is contained in:
@@ -1,5 +1,73 @@
|
||||
# Changelog
|
||||
|
||||
## 1.0.5
|
||||
|
||||
### Added
|
||||
|
||||
- **Every remaining interior is furnished.** The profile covered ten
|
||||
tilesets; it now covers twenty-three -- 1,190 pinned tiles across
|
||||
`GATE`, `FOREST_GATE`, `LOBBY`, `MUSEUM`, `LAB`, `MANSION`,
|
||||
`INTERIOR`, `CLUB`, `SHIP`, `SHIP_PORT`, `FACILITY`, `CEMETERY` and
|
||||
`UNDERGROUND`, plus full entries for `CAVERN` and `GYM` which had only
|
||||
stubs. Roughly 130 maps, surveyed against the standard the finished
|
||||
interiors already set: one 16px wall band carrying whatever is drawn
|
||||
built into it, half-cell counters so the drawn front folds up and the
|
||||
top stays on top, `bookcase` collapse for free-standing shelves,
|
||||
thin-pool standees for plants, and small objects riding the furniture
|
||||
they are drawn above.
|
||||
|
||||
What the detector was doing before, by way of what changed:
|
||||
|
||||
- **Rooms with no walls.** Three tile ids (`$14`, `$32`, `$48`) are
|
||||
claimed by the engine's water set in EVERY tileset, and collision is
|
||||
per CELL, so one of them in a cell's bottom-left corner sank the
|
||||
whole cell. `$32` draws both the route gates' wall base course and
|
||||
every counter front, so all 25 gate maps were a checkered floor in a
|
||||
moat; the same trap put ponds through two thirds of Seafoam B4F,
|
||||
under every museum vitrine, along the S.S. Anne's wall corners and
|
||||
across Silph Co 1F's lobby island. The set is wider than three ids
|
||||
in practice -- `LAB`, `MANSION` and `INTERIOR` each hit six to nine
|
||||
-- because the test is per cell, so an innocent tile sharing a cell
|
||||
with a trapped one sinks with it and has to be pinned too.
|
||||
- **Towers and fused monoliths.** Counters raised to 48px dragging
|
||||
their wall band with them, merchandise racks fused sideways into
|
||||
32px blocks four tiles deep, cave shelf edges standing as 48px fins
|
||||
beside a 16px band, the Vermilion liner folded upright into a lumpy
|
||||
48px slab.
|
||||
- **Furniture that was not there at all.** Anything whose cell is
|
||||
walkable resolved to flat ground: 59 department-store stools, every
|
||||
gate lounge table and pair of binoculars, both museum staircases,
|
||||
the gym-lounge chairs, and -- via the void rule -- the black
|
||||
partition walls every gym is divided by, which left their white rim
|
||||
columns standing as hollow 48px fins.
|
||||
- **314 gravestones** in Pokemon Tower were 8px stubs, because the
|
||||
volume path measured only their bottom row and dropped the arch.
|
||||
|
||||
Notable readings: the S.S. Anne's hull is `roof` (a drawing seen from
|
||||
above, so the art belongs on the top face); the Warden's specimens and
|
||||
Celadon Gym's shrubs are `cylinder` voxel balls, the first indoor use
|
||||
of that class; the Fan Club's octagonal boardroom table is `counter`
|
||||
rather than `table`, because only a counter rides its upper rows onto
|
||||
the top face in drawn order -- which is what draws the seated chairman
|
||||
exactly once, the Pokemon Center couch case verbatim.
|
||||
|
||||
Fuchsia Gym's invisible maze is deliberately left flat. Raising it
|
||||
would read better as a room, and would also hand the player the
|
||||
solution; a shape is purely presentational, so the drawn answer wins
|
||||
and the gym plays as the flat game does.
|
||||
|
||||
### Fixed
|
||||
|
||||
- **A profile pin now outranks the door fold.** `Structures.forMap`
|
||||
folds a door cell into its facade so the doorway does not punch a hole
|
||||
in the wall -- but it overwrote the resolved shape unconditionally,
|
||||
including for AUTHORED tiles, which contradicts rule 1 of the
|
||||
documented resolution order. Any pin on a tile its tileset also lists
|
||||
in `doorTiles` was dead on arrival: all four Celadon Mansion
|
||||
staircases and Pokemon Mansion 3F's descent are door tiles, so
|
||||
`stair_*` pins there silently did nothing and the flights stayed
|
||||
painted flat on the floor. The fold now skips authored tiles.
|
||||
|
||||
## 1.0.4
|
||||
|
||||
### Added
|
||||
|
||||
+1396
-6
File diff suppressed because it is too large
Load Diff
+16
-5
@@ -205,6 +205,14 @@ function Structures.forMap(map)
|
||||
-- the fold then shows the door art standing at ground level in the
|
||||
-- building's front face. Door graphics only (the tileset's doorTiles);
|
||||
-- interior stair/mat warps stay flat.
|
||||
--
|
||||
-- A PROFILE PIN WINS over the fold. The fold is detection, and rule 1
|
||||
-- of the resolution order is that an authored tile bypasses detection
|
||||
-- -- but this used to overwrite shapeAt unconditionally, so a pin on
|
||||
-- any tile the tileset also lists in doorTiles was dead on arrival.
|
||||
-- Celadon Mansion is the case that found it: all four of its
|
||||
-- staircases are door tiles, so `stair_e` / `stair_down_w` pins there
|
||||
-- silently did nothing and the flights stayed painted on the floor.
|
||||
for cy = math.floor(y0 / 2), math.floor(y1 / 2) do
|
||||
for cx = math.floor(x0 / 2), math.floor(x1 / 2) do
|
||||
if map.doorTiles[map:cellTile(cx, cy)] then
|
||||
@@ -214,11 +222,14 @@ function Structures.forMap(map)
|
||||
for dy = 0, 1 do
|
||||
for dx = 0, 1 do
|
||||
local dk = keyOf(cx * 2 + dx, cy * 2 + dy)
|
||||
shapeAt[dk] = shapes.classes.wall
|
||||
-- remembered for buildVolume: a folded doorway column
|
||||
-- answers to its REGION for height and top, not to its
|
||||
-- own drawn extent (see the door adoption there)
|
||||
S.doorFold[dk] = true
|
||||
local ds = shapeAt[dk]
|
||||
if not (ds and ds.authored) then
|
||||
shapeAt[dk] = shapes.classes.wall
|
||||
-- remembered for buildVolume: a folded doorway column
|
||||
-- answers to its REGION for height and top, not to its
|
||||
-- own drawn extent (see the door adoption there)
|
||||
S.doorFold[dk] = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -376,7 +376,7 @@ mod.events:on("map.reloaded", function(payload)
|
||||
if mapId then ChunkMesher.invalidate(mapId) end
|
||||
end)
|
||||
|
||||
mod.exports.version = "1.0.4"
|
||||
mod.exports.version = "1.0.5"
|
||||
-- exposed so a companion mod can pin its own tiles' shapes or read the
|
||||
-- camera without reaching into this mod's file layout
|
||||
mod.exports.lib = V
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"id": "DRAMATIC_SHAPE",
|
||||
"name": "Dramatic Shape Voxel Mod",
|
||||
"version": "1.0.4",
|
||||
"version": "1.0.5",
|
||||
"api": 2,
|
||||
"entry": "main.lua",
|
||||
"profile": "content",
|
||||
|
||||
Reference in New Issue
Block a user