Need help getting started? Try the player guide. These notes include older work; the game overview explains what’s ready now.

Native in-level automap

M toggles the original flag8 automap in the Windows frontend. The mouse wheel zooms while it is open; held plus/minus keys, including the numeric keypad, use the recovered one-sixteenth-per-tick zoom steps. Outside the map the wheel still cycles weapons. Each entrance starts at8192, as original 08008B28 does; zoom clamps to4096..65536. Tab/N retain NETRICSA and Esc/P retain Pause.

Options -> Extras -> Automap enables/disables the feature. It defaults to Off, including when older version1..6 settings files are loaded. Version7 stores the choice in byte10 bit7, with music volume in the lower seven bits; explicit saved On/Off choices are preserved. The existing 16-byte CRC-protected file and all other settings retain their layout. Disabling an open map closes it and clears held zoom/partial wheel input. Gameplay M no longer toggles audio mute, and F no longer opens the map. This is a north-up, player-following overhead map with live walls and zoom, in the familiar classic FPS form; its drawing remains the recovered Serious Sam Advance map rather than importing Doom assets or code.

The map follows the player with north up. WASD and mouse look remain available, and the existing native world simulation continues. New firing and weapon selection are suppressed while the map is open. A running automatic weapon stops, and death returns to the normal view/death flow. Pause and NETRICSA can open over the map and return to it. Focus loss clears held zoom. These are PC control bindings around the recovered rendering/state; no GBA instruction runs in the game process.

Both renderer settings display the same original240x160 map canvas through the existing viewport scaler. M switches pixel ownership, dimensions and palette before queued paint messages can present it, avoiding a stale framebuffer size or a flash of the map palette over the world. Zoom and scanline motion use the simulation clock; repeat draws do not advance either clock.

Recovery

src/automap.c ports original 08007FDC line clipping/rasterization and the normal geometry in 08008420. The original line routine ORs palette indices into the framebuffer. Horizontal/vertical lines include both endpoints; diagonals omit their final endpoint. The original isolated-point case writes the neighboring byte. All these quirks are retained and compared to the ROM. The original invalid post-clipping infinite loop becomes a native error.

The scene skips equal-floor two-sided lines, draws the remaining walls, colors the ordered nearby contact lines, submits the scaled body-facing sight segment, camera-heading triangle and active-entity crosses. Fixed-point multiplication, coordinate wrap, live sector heights, coarse body facing versus full camera heading, colors and draw order are retained. It also draws the original moving five-row scan, palette indices14/12/10/8/6 at two-row intervals, with byte wrap. The palette comes directly from original 0846265C.

The normal-gameplay projection has no debug ray list. The original optional debug branch destructively translates its global ray coordinates; that debug list mutation is not implemented or claimed by this API. Original multiplayer DMA/BIOS transport choices are not a network implementation.

ssa_player_interaction_query_at exposes the existing recovered0429C traversal for an explicit destination. The old facing-based query delegates to it and retains its original64-unit behavior. Automap uses its own initialized collision scratch and the original zoom-scaled destination. It does not replace weapon, movement or camera scratch, change world.blocking_entity, activate switches, move entities or modify gameplay during drawing.

Native game ownership adds only the map's zoom, scanline counter and dedicated query scratch. Initialization/free cover partial failures. The original flag8 drives existing HUD visibility and palette policy; the M adapter additionally inhibits PC firing after the alternate-weapon policy refresh. Mode changes keep the palette's simulation-owned flash clock unchanged.

Verification

Reports: automap-rom-validation.json, automap-validation.json, windows-automap-validation.json, native-player-hazards-validation.json. Full campaign playthroughs remain manual. This is native behavioral recovery; it adds no exact byte match. The original ROM remains unchanged.