weapon damage: confirm Damage*DataComponents absent from item/ammo bundles (runtime/server-only); rank routes to base numbers

This commit is contained in:
DownloadPizza
2026-06-16 17:51:40 +02:00
parent f1dbc06425
commit ec1295e39c

View File

@@ -12,6 +12,25 @@ and the formula function (RVAs below); the literal constants need a different me
end). This corrects an earlier draft that wrongly concluded "no value exists" — the values
**are** live at runtime; they just aren't statically anchorable constants.
**Confirmed 2026-06-16 (offline, `bundle/dump_blueprint.py`): the `Damage*DataComponent`s are
NOT authored on the item/ammo EntityBlueprints in the bundles.** Decoded `item_grenadeContact`,
`item_shotgunAmmo`, `item_pistolAmmo`, `item_shotgun`, `item_revolverSmall_dusters` — every one
has only generic components (InteractActions, Count, ItemName, ItemType, NiceName, View,
ViewSize, colliders, Physics); **zero** `Damage{Physical,…}DataComponent` / `MeleeDataComponent`
/ AoE. The only `.value` floats present are `ViewSizeDataComponent` (~0.30.97), not damage. So
`GetDamage`'s `DamageXxxDataComponent.value` reads are populated **at runtime (server-authoritative)**
— there is no per-weapon damage constant in the bundles *or* as a static anchor in the DLL.
**Ways to get actual base numbers, ranked:**
-**In-game empirical measurement** (controlled damage tests) — the only clean route.
- ⚠️ Live-client runtime memory (the components hold real values once spawned) — but that's
process inspection → **BattlEye / no injection** → off-limits.
- ❌ Static extraction (bundles) — values absent (proven above).
- ❌ Static decompile constant — none exists (generic Entitas dispatch).
- ❌ Master-server query — no damage field / no stats endpoint (see [MASTER_SERVER.md](MASTER_SERVER.md)).
- ❓ Game-server (not master) entity-snapshot capture *might* carry component values, but unverified
and the server may only transmit results, not per-weapon stats.
## Damage model (all static, all in `il2cpp/dump.cs` + verified by disasm)
Per-type damage lives as a `float value` (object offset **+0x10**) on 8 components on the