feat: PvP arena — sealed stone pit + stone static art + asset-naming hard gate (#109) #154

Merged
marco merged 1 commit from feat/arena-map into main 2026-07-22 18:58:33 +02:00
Owner

Summary

Authors the PvP arena (#109) — the alpha's playfield — as a sealed stone pit carved into the shared world.map, on the static-content system (#89/#143) + the map editor's format. Also brings the arena's stone art into the pack and codifies an asset-naming HARD GATE.

Content — the arena (content/maps/world.map + world.statics):

  • A sealed rectangular stone pit (rocky-ground floor) with a perimeter of stone walls and central cover (stone columns + pillars), per the agreed design (docs/game-design/systems/pvp-arena.md): cover concentrated in the middle, corners bare, walls block move and sight. Entry is by teleport (alpha: GM /tp); the map spawn stays outside.
  • Walls are correctly oriented per iso edge: the two straight faces map N/S edges → stone_wall_se, W/E edges → stone_wall_sw (an earlier pass had the faces swapped — fixed and verified in the screenshot).

Content — the stone art (coherent "stone" set, discovered via findart, recorded in docs/uo-asset-map.md):

  • New statics registered in the extractor manifest + content/tiledata.txt (all blocks=1): stone_wall_se (0x001A), stone_wall_sw (0x001B), stone_pillar (0x00DB), stone_column (0x0077). assets.isoa repacked (285 anims).
  • Extractor anchor rule now foot-anchors all fixtures (tree/walls/pillars/columns), centres only ground item_*.

HARD GATE — asset naming. Added to CLAUDE.md (Design checklist + Assets section): asset/pack/tiledata names are descriptive <material>_<kind>[_<facing/variant>] (e.g. stone_wall_se), never a bare generic (wall, pillar) — so a future marble/wooden set never collides and the catalog stays legible. Names mirrored in docs/uo-asset-map.md.

No new server mechanic — the arena is pure authored content on existing systems (walls block via the static blocks flag → walkability + LoS server-side; the ankh res-point is GM-/placed). No wire change.

Screenshots / recording

Piloted from a fresh DB (spawn temporarily moved into the arena centre for the shot; committed spawn stays outside — entry is by teleport). The sealed stone pit: correctly-oriented walls all round, rocky floor, stone columns + pillars as central cover, player in the middle.

arena

How it was tested

  • just lint (zero warnings) + just test green; whole solution builds. Server + client load the new world.map/.statics + tiledata + pack; walls render (coherent stone), collide, and block sight (verified they block a bolt via the LoS path already tested in #152).
  • Repacked assets.isoa verified to contain static/stone_wall_se|_sw|_pillar|_column.

Notes

  • ⚠️ Touches assets.isoa (binary) + the extractor manifest — coordinate with the biome-art track (#137) to avoid a pack conflict; merge promptly.
  • Wall corners use the straight pieces (no dedicated corner art yet) — acceptable for the MVP; refine in the editor later. Fine-tuning the layout is now a visual job for the map editor (#113).

Checklist

  • just lint passes (zero warnings)
  • just test is green
  • The whole solution builds (client + tools)
  • Multi-platform preserved
  • Assets: real art (no placeholder shapes); names follow the new HARD GATE; id in uo-asset-map.md
  • Docs + DoD updated (design doc, CLAUDE.md, uo-asset-map)
  • Linked issue #109

Closes #109.

## Summary Authors the **PvP arena** (#109) — the alpha's playfield — as a sealed stone pit carved into the shared `world.map`, on the static-content system (#89/#143) + the map editor's format. Also brings the arena's **stone art** into the pack and codifies an **asset-naming HARD GATE**. **Content — the arena** (`content/maps/world.map` + `world.statics`): - A sealed rectangular stone pit (rocky-ground floor) with a **perimeter of stone walls** and **central cover** (stone columns + pillars), per the agreed design (`docs/game-design/systems/pvp-arena.md`): cover concentrated in the middle, corners bare, walls block move **and** sight. Entry is by teleport (alpha: GM `/tp`); the map spawn stays outside. - **Walls are correctly oriented per iso edge**: the two straight faces map N/S edges → `stone_wall_se`, W/E edges → `stone_wall_sw` (an earlier pass had the faces swapped — fixed and verified in the screenshot). **Content — the stone art** (coherent "stone" set, discovered via `findart`, recorded in `docs/uo-asset-map.md`): - New statics registered in the extractor manifest + `content/tiledata.txt` (all `blocks=1`): `stone_wall_se` (`0x001A`), `stone_wall_sw` (`0x001B`), `stone_pillar` (`0x00DB`), `stone_column` (`0x0077`). `assets.isoa` repacked (285 anims). - Extractor anchor rule now **foot-anchors all fixtures** (tree/walls/pillars/columns), centres only ground `item_*`. **HARD GATE — asset naming.** Added to `CLAUDE.md` (Design checklist + Assets section): asset/pack/tiledata names are **descriptive `<material>_<kind>[_<facing/variant>]`** (e.g. `stone_wall_se`), never a bare generic (`wall`, `pillar`) — so a future marble/wooden set never collides and the catalog stays legible. Names mirrored in `docs/uo-asset-map.md`. No new server mechanic — the arena is pure authored content on existing systems (walls block via the static `blocks` flag → walkability + LoS server-side; the ankh res-point is GM-`/place`d). No wire change. ## Screenshots / recording Piloted from a fresh DB (spawn **temporarily** moved into the arena centre for the shot; committed spawn stays outside — entry is by teleport). The sealed stone pit: correctly-oriented walls all round, rocky floor, stone columns + pillars as central cover, player in the middle. ![arena](https://git.homelab.devncode.it/attachments/357d29c8-f420-4aad-b507-f2466d3044f3) ## How it was tested - `just lint` (zero warnings) + `just test` green; whole solution builds. Server + client load the new `world.map`/`.statics` + `tiledata` + pack; walls render (coherent stone), collide, and block sight (verified they block a bolt via the LoS path already tested in #152). - Repacked `assets.isoa` verified to contain `static/stone_wall_se|_sw|_pillar|_column`. ## Notes - ⚠️ Touches `assets.isoa` (binary) + the extractor manifest — coordinate with the biome-art track (#137) to avoid a pack conflict; merge promptly. - Wall **corners** use the straight pieces (no dedicated corner art yet) — acceptable for the MVP; refine in the editor later. Fine-tuning the layout is now a visual job for the map editor (#113). ## Checklist - [x] `just lint` passes (zero warnings) - [x] `just test` is green - [x] The whole solution builds (client + tools) - [x] Multi-platform preserved - [x] Assets: real art (no placeholder shapes); names follow the new HARD GATE; id in `uo-asset-map.md` - [x] Docs + DoD updated (design doc, CLAUDE.md, uo-asset-map) - [x] Linked issue #109 Closes #109.
1.3 MiB
feat(arena): PvP arena (#109) — sealed stone pit + stone static art + asset-naming hard gate
All checks were successful
ci / Lint & Test (pull_request) Successful in 1m57s
b1bd55c727
marco merged commit 8c01ff0865 into main 2026-07-22 18:58:33 +02:00
marco deleted branch feat/arena-map 2026-07-22 18:58:33 +02:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
marco/IsoMmo!154
No description provided.