-
Notifications
You must be signed in to change notification settings - Fork 1
Receipts
codingncaffeine edited this page Jul 6, 2026
·
3 revisions
The clean-room rule: every claim here is backed by a headless siegefx audit you can run yourself, over the bytes the retail game ships. The 2023 leak of the DS1 source is off-limits — none of this needed it.
Headline — 81 regions / 50,680 props / 7,252 NPCs / 2,829 pcontent entries / 16,275 SNO tiles / 2,086 trigger rows / 1,962 PRS animations / a 231-template spell universe, every one loaded from the shipped data.
- 81 regions — all shipped DS1 regions load through the cross-boundary streamer
-
50,680 static-prop placements — 100% textured via the runtime resolver (
region prop-textures all) -
7,252 NPCs / 7,517 texture slots — every slot resolves (
region actor-coverage all) -
2,626 ASP meshes — 274 multi-subset; the BTRI cornerStart fix landed here (
asp subset-fuzz) -
~18,000 hero variants — 7 bodies × ~32 skins × ~41 pants × 2 genders (
templates hero-variants) -
520 mood definitions + 165 SED descriptors — region ambient beds and per-fire pitch ranges driven by data (
mood list,audio sed-list) -
626 audio cues in
Sound.dsres, per-category gaps mapped (audio coverage)
-
2,829 pcontent entries (303 weapons across 10 classes + 435 armor templates) tagged with rarity (normal / rare / unique) — krug-class
#club/2-3picks a generic power-2/3 club,#armor/-rare(1)/28-80rolls only rare-tier armor in band,#*/-unique(2)/175-286picks named unique drops the normal roll never sees (pcontent dump) -
Every shipped weapon deals its authored DS1 damage — all 302 weapon-item templates (
[attack][attack_class]+ an[aspect][model]grip mesh, creatures and dev/test excluded) resolve their authoreddamage_min/damage_max1:1 through the in-gameActorStatspath an equipped weapon feeds its wielder — sword1..414, axe1..421, mace3..188, staff1..335, minigun38..350, bow2..180. 302/302, zero misreads. The only items carrying nodamage_min/maxare the 19 ammunition + throwables (arrows / bolts / rocks / grenades / bombs) whose damage comes from the launcher or explosion, not the projectile — as DS1 authors them. Audits source damage; the to-hit + armor + difficulty resolution is in Combat below (weapons damage-audit) -
Mob loot drops match shipped pacing —
siegefx loot dump <Logic.dsres> <template>prints the parsed[inventory][pcontent]Equipped/Drops trees and rolls N times. Onlyil_mainentries roll (the wornes_weapon_handweapon stays on the body). Receipts (200 rolls, seed 42):krug_gruntdrops 36/200 (avg 0.18/kill, matching the 0.15 chance gate × ~uniform 4-way pick) —#weapon/12-177.0%,#armor/6-294.0%,potion_health_small4.0%,potion_mana_small3.0%;krug_scout25/200 (avg 0.12/kill);gremal0/200 (no[inventory][pcontent]in its chain — correct, drops nothing).
-
To-hit, armor and difficulty resolve from DS1's own
[combat_constants](formulas.gas), not a hand-tuned guess.attack_rating = 0.45·skill + 0.55·dex + 0.15·int, same shape fordefend_rating;hit_chance = 50 + (AR−DR)·2.1clamped to[5, 95]; a landed hit rolls the weapon'sdamage_min..max— DS1 has no strength/skill damage bonus, attributes drive the chance to hit, not the size of the blow — then losesdefense·armor_scalar/10. Akrug_gruntmirror lands 50.0% (equal ratings) and dies in ~6 swings / 3 hits; an elite3W_goblin_grunt(armor 554) shaves ~55 dmg/hit off a 142–204 roll; the rating gap clamps goblin-vs-krug to the 95% ceiling and krug-vs-goblin to the 5% floor, where armor 554 fully absorbs the krug's 16-damage swing to the 1-HP min chip (formulas dump,templates combat <a> <b> --duels=N --seed=K).
-
16,275 SNO tiles (World + MpWorld) — every shipped retail tile parses cleanly; the doors/spots disk-order swap and the v6.2/v6.3
general_connection_section.centergate landed here (region nav-fuzz). Funnel-smoothed nav follower hugs corridor corners — fh_r1 (10,10)→(30,30) walks 30.30u vs 28.28u straight-line over 39 path triangles / 7 funnel waypoints (region follow). Water tiles ride alongside floor in the mesh (1,435 water / 26,973 floor in fh_r1), gated by a per-actorNavTraversalpolicy —--water=4onregion pathswims a 6-tri pond the default land-only policy refuses. A* open-set rewritten from SortedSet to a duplicate-tolerant binary min-heap: 2.0× pathfinder speedup at fh_r1 scale (504 µs → 247 µs per probe over 173-tri paths,region path-bench). -
Land↔water seam stitching — wires Floor↔Water boundary edges that share an XZ footprint and a wadeable Y delta (≤0.5u), since DS1 authors water surfaces in their own SNOs whose vertices don't weld to the shoreline floor. fh_r1 climbs from 0/1,435 to 37/1,435 water tris with a Floor edge; World totals 4,907 cross-kind seams across 81 regions (
region nav,region path-fuzz). -
Cross-region stitch — intra-region doors from
nodes.gas+ cross-region doors fromstitch_helper.gaswired into NavMesh adjacency, so the player walks from a surface region into its basement / cellar / cave / dungeon through any authored seam.
-
2,086 trigger rows across the World — the
[instance_triggers]matrix language is parsed and dispatched at 20 Hz alongside the message bus; 1,952/3,043 special.gas placements bear matrices, zero parse failures. 8/8 condition verbs (actor_within_sphere,go_within_sphere,party_member_within_sphere/_bounding_box/_node,party_member_entered/left_trigger_group,receive_world_message) and 5/5 action verbs (send_world_message,fade_nodes,mood_change,set_interest_radius,fade_nodes_global) dispatched; group-keyed pairing withsingle_shot/start_active/delay/reset_durationhonored. Thewhen_falsefalling-edge channel lands 83 deferred actions across 23 regions (region triggers).
-
Full chore dictionary loads per actor — every
chore_*section (default / walk / attack / die / fidget / magic / misc) is parsed at spawn and addressable by name. fh_r1 catalogue grows from 2.0 clips/actor to avg 5.99 across 181 spawns:chore_default×181, chore_fidget×181, chore_attack×179, chore_die×179, chore_walk×179, chore_magic×144, chore_misc×41(region spawn). -
1,962 / 1,962 shipped
.prsanimations parse with zero failures — 1,855 v3 (94.5%) + 62 v0x202 + 45 v0x302; 131 carry undocumented TRCR tracer chunks the loader skips via 4-byte-aligned tag-scan resync. Pre-fix every TRCR-bearing file threw and fell to a no-clip stub (including the farmboy stance-1 attack, silently demoting dagger swings to the unarmed punch); post-fix the empty-catalogue cohort in fh_r1 is 0 (prs fuzz).
-
69 offensive spell templates parse end-to-end —
[magic]block damage / mana-cost / heal expressions evaluate against caster + target stats. SpellExpr handles the**power op (19 spells), the#magic/#maxlife/#life/#src_mana/#src_lifeplaceholders, and the[[ cond ?: a : b ]]ternary. Receipts: fireball L13.85..4.67, spell_freeze#maxlife=20chargesmana=50.0, healing_hands' triple-ternary returns11 / -0.61 / 4across three contexts (spells eval,spells show). Element classification buckets all 69 — Fire 27, Lightning 16, Ice 6, Holy 6, Acid 4, Death 3, Generic 7 — and tints bolt + impact-flash per bucket (spells elements). - 231-template spell universe — the catalog now carries the full offensive + buff + summon + monster arsenal (not just the 69 offensive), with golden traces over every template.
- Sfx-script VM — the complete SiegeFX Appendix-A parameter set is parsed and executed on a deterministic timeline (committed goldens + an offscreen spell filmstrip / contact-sheet renderer), so cast effects — cylinder tubes, spinning srays, lightning, explosions, plumes, orbiters, ribbons — run from the authored data rather than reimplemented by eye.
-
Party & companions — companions are recruited through their authored
potential_memberconversation node, fight with their own equipped weapon, and trail the leader through six formations decoded 1:1 fromworld/ai/formations.gas(column, double_column, line, double_line, wedge, circle — each a 9×9 spot grid with the authored spot spacing). Followers path with the player's own navmesh traversal so they follow through human-only / gated zones. -
Doors are hinge-accurate — the door
.aspis authored Z-up with its origin on the hinge edge, confirmed bysiegefx asp info(m_i_csl_door-01: extents(-1.60,-0.05,0.00)..(0.00,0.05,2.70),-90°-about-X standup bind pose). Doors swing on that hinge on a click and play the shipped open cue. -
Monster casters fire their authored spell — a Phrak Piercer resolves
il_active_primary_spell = spell_phrak_dartfromspl_spell.gas; monster-arsenal spells carry their damage in[attack](3–5 for the dart), now read so casters deal their authored bite from standoff range.
Numbers reflect the retail World / MpWorld data set. Reproduce any line with the siegefx command in parentheses — see Diagnostic CLI Tools.