Skip to content

Receipts

codingncaffeine edited this page Jul 6, 2026 · 3 revisions

Receipts

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.

World & assets

  • 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)

Loot & itemization

  • 2,829 pcontent entries (303 weapons across 10 classes + 435 armor templates) tagged with rarity (normal / rare / unique) — krug-class #club/2-3 picks a generic power-2/3 club, #armor/-rare(1)/28-80 rolls only rare-tier armor in band, #*/-unique(2)/175-286 picks 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 authored damage_min/damage_max 1:1 through the in-game ActorStats path an equipped weapon feeds its wielder — sword 1..414, axe 1..421, mace 3..188, staff 1..335, minigun 38..350, bow 2..180. 302/302, zero misreads. The only items carrying no damage_min/max are 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 only; the defense-mitigation curve is a separate, explicitly-approximated pass (weapons damage-audit)
  • Mob loot drops match shipped pacingsiegefx loot dump <Logic.dsres> <template> prints the parsed [inventory][pcontent] Equipped/Drops trees and rolls N times. Only il_main entries roll (the worn es_weapon_hand weapon stays on the body). Receipts (200 rolls, seed 42): krug_grunt drops 36/200 (avg 0.18/kill, matching the 0.15 chance gate × ~uniform 4-way pick) — #weapon/12-17 7.0%, #armor/6-29 4.0%, potion_health_small 4.0%, potion_mana_small 3.0%; krug_scout 25/200 (avg 0.12/kill); gremal 0/200 (no [inventory][pcontent] in its chain — correct, drops nothing).

Navigation

  • 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.center gate 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-actor NavTraversal policy — --water=4 on region path swims 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 from stitch_helper.gas wired into NavMesh adjacency, so the player walks from a surface region into its basement / cellar / cave / dungeon through any authored seam.

Triggers & scripting

  • 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 with single_shot / start_active / delay / reset_duration honored. The when_false falling-edge channel lands 83 deferred actions across 23 regions (region triggers).

Animation

  • 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 .prs animations parse with zero failures1,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).

Spells

  • 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_life placeholders, and the [[ cond ?: a : b ]] ternary. Receipts: fireball L1 3.85..4.67, spell_freeze #maxlife=20 charges mana=50.0, healing_hands' triple-ternary returns 11 / -0.61 / 4 across 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.

Recent systems (Phases 23–27)

  • 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_member conversation node, fight with their own equipped weapon, and trail the leader through six formations decoded 1:1 from world/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 .asp is authored Z-up with its origin on the hinge edge, confirmed by siegefx 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_dart from spl_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.

Clone this wiki locally