havoc-remaster/docs/WEAPONS.md
pyr0ball 27174a1c79 feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection)
Diagnosed and fixed the crash that killed HAVOC_NOCD.EXE ~1s after launch
(dgVoodoo window appears black, then the process exits). It was not a clean
exit: an ACCESS_VIOLATION (null-pointer read at VA 0x444E6A) during init.

Root cause is a copy-protection check in the WORLDS\ data-file loader
(0x42a480). It opens each file (GRAFIX/LAND/MAP/STUF) from both a local
"WORLDS\<name>" path and a CD-drive path (HAVOC.INI [SETUP] DRIVE=D:\), and
returns a valid stream only when the local open fails and the CD-drive open
succeeds. With files present locally and no D: drive it returned NULL, and the
GRAFIX loader (0x444db0) dereferenced that NULL without checking.

Fix: 14-byte patch at FO 0x29a2b rewrites the return decision to hand back the
successfully-opened local object. The game now boots to the title screen
("HAVOC(tm) by Reality Bytes"), responsive, main loop running.

- docs/PATCHES.md: full patch table (28 patches) + crash write-up
- tools/: RE + patching scripts (r2pipe disasm, minidump parser, ctypes
  debugger, PE/IAT/import analysis)
- run_probe.bat / run_and_log.bat: reliable native launch for repro
- .gitignore: exclude CD images, Ghidra install/project, dgVoodoo, *.ini

Diagnosed via WER minidumps (%LOCALAPPDATA%\CrashDumps) parsed in pure Python
(no cdb/windbg available).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TN4Ytn3gdWRonNmHpisWQv
2026-07-03 09:29:59 -07:00

4.1 KiB

Havoc weapon system

Source: STR#7D02.dat (pickup banner text) and STR#7D03.dat (HUD active weapon names), extracted from INTRFACE.FF. True class structure and game logic to be confirmed via Ghidra decompilation of HAVOC.EXE.

Player memory: 6 weapon classes each for primary (infinite ammo) and secondary (limited ammo).


Primary weapons (infinite ammo)

Weapons not appearing in the pickup table are assumed to be starting/default weapons. Upgrades within a class are listed tier by tier.

Class Tier 1 (start) Tier 2 Tier 3 Tier 4
Laser Laser Improved Laser ElectroLaser High-Power ElectroLaser
Disc Disc Improved Disc Disc Gun Doubler High-Power Disc / Fin-Stabilized Disc
Shockwave Shockwave Radial Shockwave
Fireball Fireball High-Velocity Fireball
Plasma Plasma High-Energy Plasma
VARG VARG Omicron VARG Omicron High-Power VARG Omicron Focused VARG Photon / VARG Photon High-Energy

Notes:

  • "Laser Doubler" pickup grants a second laser barrel (doubles fire rate/output, not a separate class).
  • "Disc" and "Improved Disc" do not appear as pickups -- probably starting weapons.
  • "Plasma" does not appear as a pickup -- probably starting or granted via progression.
  • VARG (Variable Armament Resonance Gun?) is the highest-tier class, with two sub-branches (Omicron / Photon).

Secondary weapons (limited ammo)

Cheat code mmm gives the best Heatseeker class weapon. Cheat aaa = max ammo for all secondaries.

Class Base weapon Upgrade(s) Ammo pickup
Rocket Rocket Rocket Repeater, Rocket Doubler Rocket Ammo +5 / +10
Cruise Missile Cruise Missile Afterburner Cruise Cruise Missile Ammo +5
Mortar Mortar High-Impact Mortar Mortar Ammo +5
Mine Mine Dropper Thermite Mine Dropper, Proximity Mine Dropper Mines +5
Heatseeker Heatseeker Afterburner Heatseeker Heatseeker Ammo +5
EMP EMP Cannon Improved EMP Cannon EMP Cannon Ammo +5
Fusion Fusion Cannon Catalyst-Aug Fusion Cannon Fusion Cannon Ammo +5
LGM Laser Guided Missile Thermal LGM, ElectroCharge LGM LGM Ammo +5
Warhead Warhead Multi-Warhead Warhead Ammo +5
Sweep Dropper Sweep Dropper - Laser Sweep Dropper - Photon, Sweep Dropper - Flame Sweep Dropper Ammo +5
Terraformer Terraformer Enhanced Terraformer Terraformer Ammo +5
Phase Missile Phase Missile Dual-Phase Missile Phase Missile Ammo +5
Catapult Ion Catapult Meson Catapult Catapult Ammo +5
Disruptor Disruptor Cannon High-Phase Disruptor Cannon Disruptor Cannon Ammo +5

Note: The data shows 14 distinct secondary weapon lines, but player memory is 6 classes. Likely some of these are grouped into the same class slot in the UI (e.g. Rocket + Cruise Missile may share one slot, LGM + Phase Missile another). Ghidra will resolve the actual slot count.

Unaccounted-in-pickups (appear only in HUD list, may be starting secondaries):

  • Pulse
  • Frequency-Modulated Pulse
  • Particle Accelerator
  • High-Velocity Particle

Special pickups (non-weapon)

Item Effect
Gate Key Required to open the exit gate and complete the level
Shields +5 / +10 / +20 / +30 / +50 / +100 Restores shield hitpoints
Shields Restored Full shield restore
Ultrashield Temporary invulnerability (or large instant shield restore)
Shield Max Increased +10 Permanently raises shield capacity
Freeze Enemies Temporarily freezes all enemies on screen
Invisibility Temporary cloaking
Targeting Enhancement Improves lock-on/targeting
Bonus Vehicle Extra life
Installing Mass-Energy Weapon Special weapon install event
Upgrading Mass-Energy Weapon Upgrade event for the above

Cheat codes

All confirmed working in demo and retail:

Code Effect
mmm Best Heatseeker class weapon (Afterburner Heatseeker)
vvv Bonus Vehicle / extra life
sss Shield restore
hhh Health restore
aaa Max ammo for all secondaries