Skip to content

feat: add construction (player-owned houses) - #189

Draft
oldschoola wants to merge 2 commits into
OpenRune:mainfrom
oldschoola:pr/construction
Draft

feat: add construction (player-owned houses)#189
oldschoola wants to merge 2 commits into
OpenRune:mainfrom
oldschoola:pr/construction

Conversation

@oldschoola

Copy link
Copy Markdown

Adds the Construction skill and player-owned houses.

What's in here

  • api/poh: the house engine — dynamic-region builder that assembles the house from room templates, room/hotspot/window data as generated JSON manifests, lifecycle hooks, house attributes and events. Zone updates are synced across all four levels (second commit) so building on one level renders correctly from another — zone packets are level-addressed and the client renders every level.
  • content/skills/construction: build mode (room building/removal with wiki-accurate upper-floor rules, linked staircase pairs, one door pair per doorway on the interior face), furniture building with authentic menu icons, doors and wall fillers outside building mode, stairs, portal chamber and portal nexus, chapel (altar tiers x incense burners XP table), costume room storage, menagerie, achievement gallery, dungeon (uniform under-fill keeps the ground floor flat), servants, estate agent and house options.
  • or-cache: Construction furniture dbtable packed alongside the other skill tables (dbtable.poh_furniture, 468 dbrows), costume-room inventories, and the poh gamevals.
  • tools/poh-datagen: regenerates the api/poh room/hotspot JSON from the rev-240 cache; run manually after cache updates.
  • Chapel altars take over the POH gilded-altar registrations previously hardcoded in the prayer module's GildedAltarEvents (which now handles only the chaos altar); bone offerings follow the wiki altar-tier + burner multiplier table, capped at gilded + 2 burners = 3.5x.

Not in this PR

  • The construction integration test from our fork — the integration-test-suite convention resolves :api:testing, which doesn't exist on main yet, so nothing on main compiles integration sources. Happy to follow up with the test once that's wired.

Behaviour was verified in-game on our fork (rev 240), including the stale-ghost fix after a fresh build-mode entry. On this branch, :or-cache, :api:poh, :api:game-process, :tools:poh-datagen, :content:skills:construction and :content:skills:prayer all compile against main after :or-cache:buildCache.

Adds the Construction skill and player-owned houses:

- api/poh: house engine - dynamic-region builder, room/hotspot data
  (generated JSON manifests), lifecycle hooks, attributes and events.
- content/skills/construction: build-mode room and furniture scripts,
  doors, stairs, portals (chamber and nexus), chapel altars/burners,
  costume room storage, menagerie, achievement gallery, dungeon,
  servants, estate agent and house options.
- or-cache: Construction furniture dbtable packed alongside the other
  skill tables (dbtable.poh_furniture, 468 dbrows).
- tools/poh-datagen: regenerates the api/poh room/hotspot JSON from the
  rev-240 cache after cache updates.
- Chapel altars take over the POH gilded-altar registrations previously
  hardcoded in the prayer module's GildedAltarEvents; bone offerings now
  follow the wiki altar-tier + incense-burner multiplier table.
Players only tracked zones on their own level, so loc/obj changes on
other levels never reached the client - it kept rendering the baked
map state until the player happened to visit that level. Visible in
houses: building a dungeon staircase replaces the dungeon room's
baked straight-staircase hotspot ghost server-side, but an owner on
the ground floor still saw the stale ghost's top poking through the
floor (a full-height plane-0 model), self-healing only after
climbing down and back up.

computeVisibleNeighbouringZones now enumerates all four levels of
each visible zone column - zone packets are level-addressed and the
client renders every level, which is why the protocol carries a
level field. Test expectations updated to the all-level contract
(49x4 full-follows on a fresh build area).

User-verified in game: the stale ghost no longer shows after a fresh
build-mode entry.
@Mark7625
Mark7625 marked this pull request as draft August 27, 2026 12:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant