Mapped the damage system end-to-end statically and documented it for cross-patch
tracking (docs/WEAPON_DAMAGE.md):
- Model: 8 DamageXxxDataComponent (value @+0x10) on item/ammo, read by
HealthAndDamageExtensions.GetDamage (RVA 0x4BAC520); per-shot formula in
<GetDamage>d__12.MoveNext (RVA 0x4BB3DB0) = base x range-falloff x headshot,
melee skips range falloff.
- Delivery: PlainDamgeDealerComponent{damageAmount,damageType,isMelee} -> HitEventInfo
-> reduces HealthDataComponent.value; networked via DamageEvent.
Verified the base numbers are in NO asset (blueprints/ammo/projectiles/CheatItemDefs/all
bundles UTF-16). Established WHY the literal constants aren't statically anchorable: this
build accesses every component via fully-generic Entitas dispatch (no static class/index/
string reference in producing code; typed setters all dead build-wide; item-id strings
have 0 refs, verified via a calibrated string-xref) and damage resolution is server-
authoritative. So the value is a runtime component, not a reachable static constant.
Corrects the earlier draft that overstated "no value exists".
Tools: reverse/il2cpp_re.py (+find_rip_refs_batch, scan_movss_consts),
bundle/component_census.py, bundle/dump_blueprint.py.
43 lines
610 B
Plaintext
43 lines
610 B
Plaintext
# Symlink to game data / old claude stuff
|
|
/Walkers
|
|
Walkers/
|
|
|
|
# Symlink to the game's Unity asset bundles (StreamingAssets/aa)
|
|
/bundles
|
|
|
|
# Snapshots
|
|
/snapshots/
|
|
snapshots/
|
|
|
|
# Huge IL2CPP / GameAssembly dumps (regenerable, ~460MB)
|
|
/il2cpp/
|
|
|
|
# Local HTML render of the wiki (regenerable via wikigen/render_wiki.py)
|
|
/wiki_site/
|
|
|
|
# RE method-index cache (regenerable from il2cpp/dump.cs)
|
|
/reverse/_method_index.pkl
|
|
|
|
# Python
|
|
__pycache__/
|
|
*.py[cod]
|
|
*$py.class
|
|
*.so
|
|
.Python
|
|
venv/
|
|
.venv/
|
|
env/
|
|
ENV/
|
|
build/
|
|
dist/
|
|
*.egg-info/
|
|
.eggs/
|
|
.pytest_cache/
|
|
.mypy_cache/
|
|
.ruff_cache/
|
|
.ipynb_checkpoints/
|
|
|
|
# Environment
|
|
.env
|
|
.env.*
|