Drop tables have no shared rare drop table, and combat stats are not extracted #69

Open
opened 2026-07-30 21:03:54 +00:00 by sickday · 0 comments
Owner

priv/data/npc_drops.exs gives 1,388 NPCs a drop table, and two things the real
game has are absent from the data as well as from the code.

The shared rare drop table. The source tables reference it by name, and the
wiki scrape they came from drops that row rather than expanding it. So no NPC
here can roll it, and the tables that should share it instead end at their own
entries. It is a term over Contract.DropTable.roll/2's output when it arrives
— an extra weighted slot that delegates — rather than a change to the roller.

Everything past the four fields extracted. The combat source carries attack
style, offensive and defensive bonuses, slayer level and xp, aggression,
poison and venom immunity, attack speed and a spawn animation. None of it is
extracted, deliberately: there is no combat, so every one of those would land in
the table as a number nothing reads, and a number nothing reads is a number
nobody notices has gone stale.

Widening the converter is a one-line change to combat_entry/1 in
Tools/dumps. It should happen with the combat code that reads each field,
not before it.

Worth knowing about the data quality while this is open: 36 of the 2,031 kept
ids (1.8%) carry a cache name unlike their source file's. Most are variants
filed together — Asyn Shade under asyn shadow, Rabbit under bunny — but that
count is the honest error rate of the id matching and it is reported by the
converter on every run rather than suppressed.

`priv/data/npc_drops.exs` gives 1,388 NPCs a drop table, and two things the real game has are absent from the data as well as from the code. **The shared rare drop table.** The source tables reference it by name, and the wiki scrape they came from drops that row rather than expanding it. So no NPC here can roll it, and the tables that should share it instead end at their own entries. It is a term over `Contract.DropTable.roll/2`'s output when it arrives — an extra weighted slot that delegates — rather than a change to the roller. **Everything past the four fields extracted.** The combat source carries attack style, offensive and defensive bonuses, slayer level and xp, aggression, poison and venom immunity, attack speed and a spawn animation. None of it is extracted, deliberately: there is no combat, so every one of those would land in the table as a number nothing reads, and a number nothing reads is a number nobody notices has gone stale. Widening the converter is a one-line change to `combat_entry/1` in `Tools/dumps`. It should happen **with** the combat code that reads each field, not before it. Worth knowing about the data quality while this is open: 36 of the 2,031 kept ids (1.8%) carry a cache name unlike their source file's. Most are variants filed together — Asyn Shade under *asyn shadow*, Rabbit under *bunny* — but that count is the honest error rate of the id matching and it is reported by the converter on every run rather than suppressed.
sickday referenced this issue from a commit 2026-07-31 18:25:20 +00:00
Sign in to join this conversation.
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#69
No description provided.