feat(ironman): Standard and Hardcore, from the cache's own panel #227

Merged
sickday merged 3 commits from feat/ironman-modes into main 2026-08-16 01:39:50 +00:00
Owner

Interface 215 is complete in this cache and script 687 writes the rules out
as string literals, so Contract.Ironman quotes rather than derives — the
rare subsystem that needed no era sourcing at all.

The mode lives on World.Account beside xp_mode, persisted as a nullable
column in varbit 1777's numbering, where NULL is never asked and 0 is
asked, and declined. Contract.Crown decides the one rights byte a staff
crown and a mode both want; staff wins, because a moderator nobody can
identify is the only failure here with a cost outside cosmetics.

Gated: trade (World.tradeable_pair/2, on the world because the refusal is
about a pair and no session may read another account), the Grand Exchange,
scavenging and PK loot. A dangerous death spends a Hardcore life at the
collapse, keyed off the stage the collapse already chose.

Ground piles gained a fourth kind. owner answers whose a pile is and only
kind answers what happened to it — a PvP pile belongs to the killer, so an
owner-versus-taker rule refuses every stranger's drop and allows every kill
an Iron Man made, which is the rule exactly inverted and invisible. The
merge compares kind too, or one preparatory drop launders a PK pile.

Setup asks it last, since it is the only one of the three answers that
cannot be taken back; ::ironman reopens the panel and ::ironman reset is the
operator's way to hand a choice back. Ultimate is representable and refused
by name — two of its rules are unbuilt and a mode enforcing half its own
description is worse than one that says it is not here.

Interface 215 is complete in this cache and script 687 writes the rules out as string literals, so Contract.Ironman quotes rather than derives — the rare subsystem that needed no era sourcing at all. The mode lives on World.Account beside xp_mode, persisted as a nullable column in varbit 1777's numbering, where NULL is *never asked* and 0 is *asked, and declined*. Contract.Crown decides the one `rights` byte a staff crown and a mode both want; staff wins, because a moderator nobody can identify is the only failure here with a cost outside cosmetics. Gated: trade (World.tradeable_pair/2, on the world because the refusal is about a pair and no session may read another account), the Grand Exchange, scavenging and PK loot. A dangerous death spends a Hardcore life at the collapse, keyed off the stage the collapse already chose. Ground piles gained a fourth kind. `owner` answers whose a pile is and only `kind` answers what happened to it — a PvP pile belongs to the killer, so an owner-versus-taker rule refuses every stranger's drop and allows every kill an Iron Man made, which is the rule exactly inverted and invisible. The merge compares kind too, or one preparatory drop launders a PK pile. Setup asks it last, since it is the only one of the three answers that cannot be taken back; ::ironman reopens the panel and ::ironman reset is the operator's way to hand a choice back. Ultimate is representable and refused by name — two of its rules are unbuilt and a mode enforcing half its own description is worse than one that says it is not here.
feat(ironman): Standard and Hardcore, from the cache's own panel
Some checks failed
ci / gates (pull_request) Has been cancelled
ff91856368
Interface 215 is complete in this cache and script 687 writes the rules out
as string literals, so Contract.Ironman quotes rather than derives — the
rare subsystem that needed no era sourcing at all.

The mode lives on World.Account beside xp_mode, persisted as a nullable
column in varbit 1777's numbering, where NULL is *never asked* and 0 is
*asked, and declined*. Contract.Crown decides the one `rights` byte a staff
crown and a mode both want; staff wins, because a moderator nobody can
identify is the only failure here with a cost outside cosmetics.

Gated: trade (World.tradeable_pair/2, on the world because the refusal is
about a pair and no session may read another account), the Grand Exchange,
scavenging and PK loot. A dangerous death spends a Hardcore life at the
collapse, keyed off the stage the collapse already chose.

Ground piles gained a fourth kind. `owner` answers whose a pile is and only
`kind` answers what happened to it — a PvP pile belongs to the killer, so an
owner-versus-taker rule refuses every stranger's drop and allows every kill
an Iron Man made, which is the rule exactly inverted and invisible. The
merge compares kind too, or one preparatory drop launders a PK pile.

Setup asks it last, since it is the only one of the three answers that
cannot be taken back; ::ironman reopens the panel and ::ironman reset is the
operator's way to hand a choice back. Ultimate is representable and refused
by name — two of its rules are unbuilt and a mode enforcing half its own
description is worse than one that says it is not here.
Merge branch 'main' into feat/ironman-modes
All checks were successful
ci / gates (pull_request) Successful in 3m41s
1bcc872d64
feat(ironman): the three tutors, and a door into the panel
All checks were successful
ci / gates (pull_request) Successful in 3m22s
build / image (push) Successful in 38s
ci / gates (push) Successful in 3m47s
5d917b47ba
Adam (311), Paul (317) and Juan (3369) on Lumbridge's east lawn, with
Talk-to wired to interface 215. None of the three was spawned in this world,
so the panel the cache draws had no door in it.

Identified by *shape* rather than by name: they are the only three
definitions of 7,746 carrying ["Talk-to", nil, "Armour", nil, nil] at combat
level 0, and the test asks the whole archive rather than asserting the three
that came to mind. Keying on the name is the one thing the standing id rule
forbids, and it would rot quietly here — Adam, Paul and Juan are exactly the
names a rework reuses, and 1,083 of this cache's names are already shared.
Enum 1713 entry 1124 labels the spot "Iron Man tutors", plural, which is
what says there is a set.

Tiles ported from an era-adjacent server and checked against our own map,
which is the whole reason a ported coordinate gets checked: the source put
Paul and Juan on the same tile and gave Juan a second spawn this map has
blocked. Both dropped.

The conversation is a chain of World.Script continuations — a greeting that
reads the account, the two mode descriptions quoted from script 687, and a
row that opens the panel. Armour is refused with a line of its own and its
clause runs first, because "Nothing interesting happens." is this engine's
word for content nobody wrote, and a verb we chose not to build is a
different fact that a bug report must not confuse with it.
Sign in to join this conversation.
No reviewers
No labels
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
Revenant/Server!227
No description provided.