feat(pets): a follower the cache states twice #251

Merged
sickday merged 2 commits from feat/pets into main 2026-08-19 17:57:14 +00:00
Owner

The pet framework, and every pet whose source stands in this world. The
cache's enum 985 is the roster — 37 items — and NPC opcode 111 is the
follower flag: every pet is defined twice and exactly one twin carries it,
which no id order predicts, so Cache.Npc now decodes it as follower?.

Five skilling pets roll per yield at 1 in (base - level * 25): the Beaver,
the Rock golem, the Heron, the fourteen Rift guardians (the variant is the
rune crafted, and crafting elsewhere recolours the one that follows) and
Tangleroot (Check-health where the crop has one, the exhausting stroke where
it does not). Nineteen flat boss rates over sixteen standing bosses roll at
the corpse's own vanishing, addressed to the top damager. Receipt is the
era's one rule for all of them — follower first, backpack second, nothing
third — with its three messages verbatim, and a pet already owned anywhere
in the family is a duplicate.

Dropping the item releases it (a pet never reaches the floor as a pile);
Pick-up folds it back for its owner alone; Talk-to answers with the pet's
own sourced line; Metamorphosis cycles the morph pairs. The follower heels a
tile behind its owner each tick, is re-placed past a fifteen-tile leash or a
plane change the way a fishing spot relocates, survives a logout on the
account (pet_out / pet_insured columns), and a real death loses it — to
Probita's books if insured (500k to insure, 1M to reclaim), for good if not.

One engine fix the world test forced: the tick's settle phase writes every
stepped NPC back into the world wholesale, so anything removed mid-tick was
resurrected by its own stale copy. Pet requests now apply after settle, and
settle skips an index no longer present — which also covers a session dying
inside the barrier with its pet out.

Every rate, price and message is sourced from dated 2017-04..07 wiki
revisions in priv/data/pets.exs, and Data.PetsTest regenerates the identity
claims from the cache. What is out of reach here — Kraken, Zulrah, Skotizo,
the minigames, Hunter, Agility, Thieving — is refused by name rather than
omitted.

The pet framework, and every pet whose source stands in this world. The cache's enum 985 is the roster — 37 items — and NPC opcode 111 is the follower flag: every pet is defined twice and exactly one twin carries it, which no id order predicts, so Cache.Npc now decodes it as follower?. Five skilling pets roll per yield at 1 in (base - level * 25): the Beaver, the Rock golem, the Heron, the fourteen Rift guardians (the variant is the rune crafted, and crafting elsewhere recolours the one that follows) and Tangleroot (Check-health where the crop has one, the exhausting stroke where it does not). Nineteen flat boss rates over sixteen standing bosses roll at the corpse's own vanishing, addressed to the top damager. Receipt is the era's one rule for all of them — follower first, backpack second, nothing third — with its three messages verbatim, and a pet already owned anywhere in the family is a duplicate. Dropping the item releases it (a pet never reaches the floor as a pile); Pick-up folds it back for its owner alone; Talk-to answers with the pet's own sourced line; Metamorphosis cycles the morph pairs. The follower heels a tile behind its owner each tick, is re-placed past a fifteen-tile leash or a plane change the way a fishing spot relocates, survives a logout on the account (pet_out / pet_insured columns), and a real death loses it — to Probita's books if insured (500k to insure, 1M to reclaim), for good if not. One engine fix the world test forced: the tick's settle phase writes every stepped NPC back into the world wholesale, so anything removed mid-tick was resurrected by its own stale copy. Pet requests now apply after settle, and settle skips an index no longer present — which also covers a session dying inside the barrier with its pet out. Every rate, price and message is sourced from dated 2017-04..07 wiki revisions in priv/data/pets.exs, and Data.PetsTest regenerates the identity claims from the cache. What is out of reach here — Kraken, Zulrah, Skotizo, the minigames, Hunter, Agility, Thieving — is refused by name rather than omitted.
feat(pets): a follower the cache states twice
Some checks failed
ci / gates (pull_request) Failing after 22s
0019f77be4
The pet framework, and every pet whose source stands in this world. The
cache's enum 985 is the roster — 37 items — and NPC opcode 111 is the
follower flag: every pet is defined twice and exactly one twin carries it,
which no id order predicts, so Cache.Npc now decodes it as follower?.

Five skilling pets roll per yield at 1 in (base - level * 25): the Beaver,
the Rock golem, the Heron, the fourteen Rift guardians (the variant is the
rune crafted, and crafting elsewhere recolours the one that follows) and
Tangleroot (Check-health where the crop has one, the exhausting stroke where
it does not). Nineteen flat boss rates over sixteen standing bosses roll at
the corpse's own vanishing, addressed to the top damager. Receipt is the
era's one rule for all of them — follower first, backpack second, nothing
third — with its three messages verbatim, and a pet already owned anywhere
in the family is a duplicate.

Dropping the item releases it (a pet never reaches the floor as a pile);
Pick-up folds it back for its owner alone; Talk-to answers with the pet's
own sourced line; Metamorphosis cycles the morph pairs. The follower heels a
tile behind its owner each tick, is re-placed past a fifteen-tile leash or a
plane change the way a fishing spot relocates, survives a logout on the
account (pet_out / pet_insured columns), and a real death loses it — to
Probita's books if insured (500k to insure, 1M to reclaim), for good if not.

One engine fix the world test forced: the tick's settle phase writes every
stepped NPC back into the world wholesale, so anything removed mid-tick was
resurrected by its own stale copy. Pet requests now apply after settle, and
settle skips an index no longer present — which also covers a session dying
inside the barrier with its pet out.

Every rate, price and message is sourced from dated 2017-04..07 wiki
revisions in priv/data/pets.exs, and Data.PetsTest regenerates the identity
claims from the cache. What is out of reach here — Kraken, Zulrah, Skotizo,
the minigames, Hunter, Agility, Thieving — is refused by name rather than
omitted.
Merge branch 'main' into feat/pets
All checks were successful
ci / gates (pull_request) Successful in 3m25s
build / image (push) Successful in 36s
ci / gates (push) Successful in 3m32s
c22ef052d7
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!251
No description provided.