havoc-remaster/tools
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
..
analyze2.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
analyze3.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
analyze4.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
analyze5.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
analyze6.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
analyze7.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
analyze_crash.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
check_files.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
check_strings.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
createfile_trace.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
dbg_path.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
deep_audit.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
deep_trace.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
drive_trace.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
dump_region.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
ff_extract.py Initial commit: Havoc preservation toolkit + format docs 2026-06-28 23:33:30 -07:00
final_analysis.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
find_callers.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
find_cdcheck.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
find_cdpath.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
find_drive_func.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
find_ini_calls.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
find_string.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
full_audit.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
ini_audit.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
io_audit.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
parse_iat.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
parse_imports.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
patch_exappwindow.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
patch_flagcheck.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
patch_paths.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
patch_vtable.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
path_audit.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
pe_sections.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
r2ac00.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
r2alloc.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
r2alloc2.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
r2alloc3.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
r2analyze.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
r2cdcheck.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
r2crash.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
r2heap.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
r2init.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
read_bin_iso.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
trace_init.py feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00