mirror of
https://github.com/jkdansereau/goldeneye-pc-port.git
synced 2026-10-24 00:02:45 +02:00
First real human WS6 playthrough. Each crash is a subsystem the 21-level
boot sweep never exercises.
- D135 (propobj.c) bgTestHitOnObj: unported N64 GBI parser — raw 8-byte-Gfx
byte/word indices desync on the PC 16-byte Gfx stream, walk off the DL.
Ported #ifdef PORT to gdl->words.w0/.w1 shifts (mirrors pd_port bg.c:3635).
Sub-fix: objHit:9717 div-by-0 — texnum recovery not portable, force -1.
- D137 (gunfire.c) gunDrawSight: s32 sp54 holds a Gfx*; 4-byte slot splices
adjacent stack into the pointer -> wild DL write on right-mouse aim.
#ifdef PORT: Gfx *sp54.
- D138 (snd.c) sndCreatePostEvent: parked audio never drains evtq->allocList,
per-objTick positional-sound posts stall the main thread ("1 room from the
end" freeze). #ifdef PORT no-op until audio lands (D77).
- D139 (cleanup_objects.c) cleanupObjects: read the propDef type via
(u8)obj[0] — correct only big-endian (type = low byte of the header word).
On LE that's extrascale -> walk never hits PROPDEF_END -> runs off the blob
-> frees garbage -> stage-unload crash. #ifdef PORT uses pdef->type.
UNVERIFIED (fast teardown test hit D140 first).
Open: D140 pause-menu watch-model NULL matrix; D118c aim-mode mouse-down
-> crouch. New harness tools_pc/repro_gdb.sh + build-pc/d136_cmds.txt.
-level_09 unregressed (91.65%). Docs: PCPortResearch §F D135-D140,
PORT-LEARNINGS §B/§C, HANDOFF M-23 + M-24 next-task.
42 lines
1.4 KiB
Bash
42 lines
1.4 KiB
Bash
#!/bin/bash
|
|
# Playtest launcher for docs/LEVEL-PLAYTEST.md (WS6 human validation).
|
|
# Usage: ./tools_pc/playtest.sh <XX> [difficulty-note]
|
|
# e.g. ./tools_pc/playtest.sh 33 "Agent"
|
|
# Launches the game bare (-level_XX, pools auto-injected per D121), tees all
|
|
# output to build-pc/playtest_L<XX>_<HHMMSS>.log, and reports crash status
|
|
# on exit. Human plays start-to-finish; close the window when done.
|
|
|
|
set -e
|
|
cd "$(dirname "$0")/.."
|
|
|
|
LEVEL="${1:?usage: playtest.sh <XX> [difficulty]}"
|
|
DIFF="${2:-Agent}"
|
|
export PATH="/c/msys64/mingw64/bin:$PATH"
|
|
|
|
if [ ! -x build-pc/ge007.x86_64.exe ]; then
|
|
echo "binary missing — building..."
|
|
./build-pc.sh ntsc-final
|
|
fi
|
|
|
|
LOG="build-pc/playtest_L${LEVEL}_$(date +%H%M%S).log"
|
|
echo "== playtest level ${LEVEL} (difficulty: ${DIFF}) =="
|
|
echo "== log: ${LOG}"
|
|
echo "== checklist: docs/LEVEL-PLAYTEST.md — spawn, geometry, guards,"
|
|
echo "== doors/pickups/objectives, alarms, exit -> MISSION COMPLETE, auto-advance"
|
|
|
|
set +e
|
|
./build-pc/ge007.x86_64.exe "-level_${LEVEL}" 2>&1 | tee "$LOG"
|
|
RC=${PIPESTATUS[0]}
|
|
set -e
|
|
|
|
echo "==============================="
|
|
if grep -q "FATAL: EXCEPTION" "$LOG"; then
|
|
echo "RESULT: CRASH (see log)"
|
|
grep -A3 "FATAL: EXCEPTION" "$LOG" | head -8
|
|
elif grep -qi "mission complete\|MISSION COMPLETE" "$LOG"; then
|
|
echo "RESULT: MISSION COMPLETE seen in log"
|
|
else
|
|
echo "RESULT: exited rc=${RC} (no crash marker; check log + your notes)"
|
|
fi
|
|
echo "log: ${LOG}"
|