Skip to content

Releases: missingno7/pre2_port

v0.4.0 — bridge-free product: the workbench is now a detachable plug-in

Choose a tag to compare

@missingno7 missingno7 released this 12 Jul 21:08

Prehistorik 2 native port — v0.4.0

The bridge-free product milestone: the shipped game now carries none of the verification/snapshot/VM machinery — the workbench is a detachable plug-in used only for recording, snapshots, and byte-exact verification. On top of v0.3.2.

🏗️ The detachable workbench (the milestone)

  • The boundary is machine-enforced: shipped code (recovered/views/native/enhanced/codecs + the entry scripts) may never import pre2.bridge or dos_re — not even lazily; scripts/lint.py fails the build otherwise. The workbench imports the product, never the reverse.
  • Demo replay is a product feature: play_native.py --play-demo replays recorded runs (front-end presentation + byte-exact tick replay) with zero workbench code.
  • The deployed tree ships no bridge, no VM, no game data — verified per release.

📖 Human-readable, field-backed state

  • All gameplay code reads/writes named state (player.xvel, g.energy, enemy_slots[3].state) through the evidence-annotated view layer — ~260 raw-offset sites eliminated.
  • Every mutable byte of the game's data segment is named (fields, indexed records, or declared arenas): the cartography proof counts zero written-unnamed bytes over the demo corpus.
  • The machine-readable offset map generates into the bridge (field_registry.py, drift-guarded); the bridge serializer converts a live game state to/from a human-readable named snapshot and diffs two states by field name.
  • The whole seam is corpus-proven: per-tick round-trip identity, mutation coverage, and backend equivalence over all 4,146 fields across every recorded demo (919/207/187/68/15 ticks — all byte-identical to the original ASM oracle).

📦 Downloads

file platform
pre2native-v0.4.0-win64.zip Windows x64 (standalone, no Python needed)
pre2-v0.4.0-arm64-v8a.apk Android (arm64)

Both need the original game files (*.SQZ, *.TRK) next to the executable / picked at first launch — no game data is distributed.

🤖 Generated with Claude Code

v0.3.2 — expert-eater wall + collision recovery, verified cold-start

Choose a tag to compare

@missingno7 missingno7 released this 12 Jul 17:17

Prehistorik 2 native port — v0.3.2

Gameplay-accuracy fixes on top of v0.3.1, plus a new end-to-end proof that the native front end behaves like the original.

🐛 Fixed (byte-exact recoveries, oracle-verified)

  • "YOU MUST BE AN EXPERT EATER" wall — a beginner who reaches level 8/9 now sees the CASTLE screen before the world map and level load (the original's 0x0163 gate ordering), then returns to the menu. Previously the map scrolled in and the level even started first.
  • 668B ceiling head-bump (Yvel==0) — the last reachable collision gap, recovered as the original's own null-pointer no-op.
  • Object-inject write order — X/Xvel/slot-pointer now written before the terrain scan, exactly as the ASM does; fixes a mid-demo divergence (a user demo now replays 187/187 ticks byte-identically).
  • Fresh-start block at menu entry — lives/bonus/damage state now set when entering the menu, matching the original's main 0141..0155.

🎬 Cold-start demo replay

--play-demo on a cold-start recording now shows the front end (credits → titles → menu) and then hands into the byte-exact gameplay tick replay — it no longer hangs at the menu or drifts into the attract demo.

✅ New verification (for the curious)

scripts/verify_native_frontend.py — a four-gate proof that the VM-less front end behaves like the original PRE2.EXE from cold boot: screen order, byte-compared decision state at every screen transition, and the recorded gameplay evolving byte-identically from native's own cold start. All gates green on a real cold-start recording; 907 automated tests pass.

Both downloads ship no game data

You provide your own legally-owned *.SQZ / *.TRK files (e.g. from the GOG release).

  • Windows — pre2native-v0.3.2-win64.zip: unzip, then pre2native.exe --game-root "C:\path\to\Prehistorik 2" (or drop the folder contents into your GOG game folder).
  • Android — pre2-v0.3.2-arm64-v8a.apk (debug build; arm64, Android 8+): install, then on first launch pick the folder holding your game files. Build details in docs/android.md.

🤖 Generated with Claude Code

v0.3.1 — fix off-spider jump freeze (#4)

Choose a tag to compare

@missingno7 missingno7 released this 12 Jul 09:09
08544b2

Prehistorik 2 native port — v0.3.1 (patch)

A gameplay fix on top of v0.3.0.

🐛 Fixed

  • Off-spider jump freeze (#4) — bouncing off the right spider in the first cave launches the caveman above the top of the level (Y ≤ -1), a state no recorded demo had ever reached. The collision routine's off-top branch (5B8B) was therefore an un-recovered fail-loud gap and the game froze. Recovered it from the disassembly (run the in-air physics, mark the player airborne, skip tile interaction — there's no tile up there); it's a mechanical transcription of the game's own bytes, verified in the collision island's disasm-composition style. Thanks to @rain1 for the precise repro.

Both downloads still ship no game data

You provide your own legally-owned *.SQZ / *.TRK files (e.g. from the GOG release).

  • Windows — pre2native-v0.3.1-win64.zip: unzip, then pre2native.exe --game-root "C:\path\to\Prehistorik 2" (or drop the folder contents into your GOG game folder).
  • Android — pre2-v0.3.1-arm64-v8a.apk (debug build; arm64, Android 8+): install, then on first launch pick the folder holding your game files. Build details in docs/android.md.

Everything else is unchanged from v0.3.0 (the full Android/touch port). 901 automated tests green; the APK is confirmed data-free.

v0.3.0 — Android / touch support

Choose a tag to compare

@missingno7 missingno7 released this 12 Jul 07:45
8d80d9f

Prehistorik 2 native port — v0.3.0: Android / touch support

The VM-less native port now runs on Android phones, and the desktop build continues alongside it. Both are the same backend-agnostic core — Android is just another host (numpy framebuffer out, five input flags in). No game logic changed; the desktop faithful path stays byte-exact.

📱 New: Android (touch)

  • On-screen touch controls — a floating, hidden analog joystick (left) + JUMP / BASH buttons (right). JUMP hard-clears DOWN so a stray crouch can't cancel a jump.
  • Phone-native front end — the press-1/2 menu shows NEW GAME and CONTINUE. CONTINUE is a 2-column BEGINNER (9) / EXPERT (10) checkpoint grid that unlocks as you reach levels and jumps in via the game's own password mechanism.
  • Back button → a PAUSE dialog (Resume / Main menu / Exit); the game freezes while it's open.
  • Immersive, landscape-locked fullscreen.
  • First-run game-data importer — a folder picker (Storage Access Framework) copies your own *.SQZ / *.TRK into the app.

🖥️ Desktop

Unchanged and still included as the Windows build (pre2native-v0.3.0-win64.zip). Also picks up everything since v0.2.5.

⚠️ Bring your own game data

Neither download contains any Prehistorik 2 game files. You need a legally-owned copy (e.g. the GOG release) — the *.SQZ / *.TRK files.

  • Windows — unzip, then either run pre2native.exe --game-root "C:\path\to\Prehistorik 2", or copy the folder's contents into your GOG game folder and run pre2native.exe.
  • Android — install pre2-v0.3.0-arm64-v8a.apk (a debug build — allow "install from unknown sources"; arm64 devices, Android 8+). On first launch, tap to pick the folder holding your *.SQZ / *.TRK files. Building the APK yourself is documented in docs/android.md.

Verification

Byte-exact vs the original on the desktop faithful path; 900 automated tests; the Android build verified on a physical arm64 device. The APK is confirmed to ship zero game-data files.

v0.2.5 — pixel-perfect smooth camera + death-HUD & boss-music fixes

Choose a tag to compare

@missingno7 missingno7 released this 07 Jul 23:56

Prehistorik 2 — VM-less native source port. Runs from the game data files only (no EXE needed).

Download: pre2native-v0.2.5-win64.zip → unzip → run pre2native.exe from your game folder (or pass --game-root). Or run from source: pip install numpy pygame then python scripts/play_native.py.

What's new in v0.2.5

Smooth camera — vertical is now pixel-perfect

  • 1:1 velocity follow — on a platform ride or a fall the camera moves with the player, holding it at a fixed screen row while the background scrolls, instead of letting it drift through a dead-zone.
  • Integer screen-offset lock — eliminates the ±1px vertical "shimmer" that affected every object (player, platforms). This is the structural reason horizontal tracking was always perfect; vertical now matches it.
  • Right-sized vertical over-extraction, and no camera jump when a level-start / cave curtain ends.

Fixes

  • Death HUD — dying with health left no longer flashes the hearts to 0 during the death-bounce; the HUD stays frozen at the pre-death value until respawn, exactly like the original.
  • Boss music — the boss theme now switches correctly when you reach the boss after an intervening level song.

872 tests pass; gameplay remains byte-exact to the original.


Support this project

If you enjoy this and want to support work like it: ☕ ko-fi.com/missingno7 — thank you!

v0.2.4 — smooth palette fades

Choose a tag to compare

@missingno7 missingno7 released this 07 Jul 11:42

Smooth palette fades

Smooth transitions now also covers the front-end DAC fades — the intro, the TITUS / PREHISTORIK-2 title (including the logo's color reveal), the mode-select entry, THE END, the game-over scene, and the menu-map/carte exit fades. All of them now ramp continuously at your display's refresh rate instead of the original's stepped VGA fade.

The tricky part: the original fade only updates a given color roughly once every 8 frames (a held-then-jump staircase), so a naive frame-to-frame smoothing pass still looked banded — smoothing the jump itself didn't remove the ~100ms hold in between. Fixed with a small continuous filter that chases the fade's target color instead of interpolating between two fixed points; it doesn't care how the original staircase happens to be paced, and it still converges to the exact original color once a fade settles.

With Smooth transitions off, every fade reproduces the exact original discrete sequence, byte-for-byte — this is purely a presentation option.

▶ Download & play (Windows)

pre2native-v0.2.4-win64.zip — unzip pre2native.exe + _internal/ into your legal GOG Prehistorik 2 folder (next to SPRITES.SQZ) and run it. No Python needed. See HOW_TO_PLAY.txt.

Prefer to run from source? The README has a beginner-complete walkthrough (virtual env + pip install numpy pygame + python scripts/play_native.py) — no .EXE required to play.

v0.2.3 — gamepad support + responsive controls

Choose a tag to compare

@missingno7 missingno7 released this 06 Jul 22:11

Controls & responsiveness

This release is all about how the game feels in your hands.

🎮 Gamepad support (auto-detected — just plug it in)

  • Left stick / D-pad move (up = jump), A jumps, B/X/Y attack, Start begins the game in the menu and pauses during play.
  • Hot-plug works; no configuration needed.
  • Under the hood: PRE2's own joystick was analog-read but the game digitizes it to the same on/off inputs as the keyboard (it has a single fixed walk speed), so the controller is wired straight into the game's input the faithful way — nothing to configure, and it feels exactly like the original's joystick did, just on a modern pad.

⚡ Responsive controls (Experimental tab, off by default)

Ever tapped jump quickly and nothing happened? The original samples the keyboard only ~23 times a second, so a fast tap between samples — or a jump pressed a hair too early — gets dropped. This option adds a small jump-input buffer so every tap registers and slightly-early presses still fire. It's pure input handling — gameplay stays byte-for-byte the original when it's off (and still faithful when it's on; it only affects when your own presses are seen).

Everything from v0.2.2 (widescreen everywhere, smooth front-end, enhanced snow, narrow-level centering) is included.

▶ Download & play (Windows)

pre2native-v0.2.3-win64.zip — unzip pre2native.exe + _internal/ into your legal GOG Prehistorik 2 folder (next to SPRITES.SQZ) and run it. No Python needed. See HOW_TO_PLAY.txt.

Prefer to run from source? The README has a beginner-complete walkthrough (virtual env + pip install numpy pygame + python scripts/play_native.py) — no .EXE required to play.

v0.2.2 — widescreen everywhere + smooth front-end

Choose a tag to compare

@missingno7 missingno7 released this 06 Jul 15:16

Widescreen everywhere + a smooth front-end

This release extends the enhancement layer to the parts of the game that were still 4:3, and makes the whole front-end display-rate-smooth.

  • Widescreen world-map & mode-select — the carte scroll-in now reveals the real 640-px map through a wider window (the original only ever showed a 312-px slice), and the mode-select / password screen fills an ultrawide viewport with a seamless background. Both pan with sub-pixel smoothness at your monitor's refresh rate.
  • Enhanced falling snow — the LEVELG snow now spans the full widescreen viewport and falls frame-rate-independently, as part of smooth transitions.
  • Narrow tower levels centered — the vertical "inside a tree" level and the final level now sit centered with black borders on an ultrawide display instead of pinned to the left.
  • Smooth camera shares all the widescreen fixes now, and is much lighter (crop-aware compositing ≈ 3.5× faster per present, plus a background cache).
  • No more pickup flicker during scrolling — items use one unified rendering path across the whole widescreen viewport.
  • Tidier F10 menu — options regrouped into View / Widescreen / Overlay / Audio / Experimental tabs.

Every enhancement stays pure presentation — it reads game state and changes none of it, so gameplay is byte-for-byte identical to the original (verified: 870 tests + widescreen parity all green).

▶ Download & play (Windows)

pre2native-v0.2.2-win64.zip — unzip pre2native.exe + _internal/ into your legal GOG Prehistorik 2 folder (next to SPRITES.SQZ) and run it. No Python needed. See HOW_TO_PLAY.txt.

Prefer to run from source? The README now has a beginner-complete walkthrough (virtual env + pip install numpy pygame + python scripts/play_native.py) — no .EXE required to play.

v0.2.1 — performance

Choose a tag to compare

@missingno7 missingno7 released this 06 Jul 00:38

Major performance improvements

  • GPU-accelerated present — the frame is now scaled on the GPU instead of the CPU, so the frame rate no longer drops as the window grows. Fullscreen / large windows are as fast as small ones.
  • Cut wasted per-tick work — the faithful renderer no longer runs (and gets discarded) when the enhanced pipeline is presenting; ~2× faster per tick.

Plus the enhancement layer from v0.2.0 (interpolation, widescreen, stereo SFX, smooth transitions, F10 overlay — mouse or keyboard).

▶ Download & play (Windows)

pre2native-v0.2.1-win64.zip — unzip pre2native.exe + _internal/ into your legal GOG Prehistorik 2 folder (next to SPRITES.SQZ) and run it. No Python needed. See HOW_TO_PLAY.txt.

Prehistorik 2 native port v0.2.0

Choose a tag to compare

@missingno7 missingno7 released this 05 Jul 23:04

▶ Download & play (Windows)

pre2native-v0.2.0-win64.zip — unzip pre2native.exe + _internal/ into your legal GOG Prehistorik 2 folder (next to SPRITES.SQZ) and run it. No Python needed. See HOW_TO_PLAY.txt.


The whole game still cold-boots VM-less and byte-exact against the ASM oracle. v0.2.0 adds an optional, pure-presentation enhancement layer on top, toggled from an in-game F10 overlay (mouse + keyboard). Enhancements read game state and write none — gameplay, demo recordings, and the oracle are untouched, and each is proven pixel-/state-equal to the faithful game at its neutral setting.

Enhancements (press F10)

  • F10 overlay menu — tabbed, scrollable, DPI-aware, fully mouse-controllable; hidden --debug Develop tab.
  • Frame interpolation — present the fixed ~23 Hz tick at your monitor's refresh (60 / 120 / 144 / 240 / vsync); the tick cadence never changes.
  • Widescreen — real extra tilemap columns (not a stretch), HUD left/center/right, stretch/mirror/black backdrop edges, and a true-widescreen mode drawing objects in the margins. Boss-tile levels (gorilla) stay 4:3 with a wide HUD.
  • Smooth transitions — curtain / iris / fade re-authored present-time (frame-rate-independent).
  • Stereo SFX — effects panned by where on screen they fire (music was already stereo).
  • Presentation — borderless fullscreen (Alt+Enter), integer scaling, live fps/tps overlay, adjustable overlay scale, F12 screenshot, frame cap / display-rate lock.

Fixes

  • LEVEL A/F gorilla-boss rendering + audio; earthquake-respawn-era stability retained.

Verification

  • Full test suite green (870 tests); enhanced-parity gate 60/60 + widescreen 30/30.

Bring your own legal copy of the GOG PRE2.EXE / assets (see README).