Skip to content
chrissotraidisPublic

About

Dinosaur Planet, native for MacOS, iOS, and iPadOS

Topics

Resources

Stars

11 stars

Watchers

0 watching

Forks

Repository files navigation

DinoPad

Krystal exploring a temple in Restored Adventure on a physical iPad

A native Apple application for the December 2000 Dinosaur Planet prototype, built directly on the work of the recompilation community.

Warning

The DinoPad base edition that PadMint builds contains Prototype Mode only. It does not contain DinoMod Enhanced or Restored Adventure because DinoMod redistribution permission has not been granted. Screenshots of Restored Adventure on this page document private development work; they are not features of the base edition.

Important

DinoPad is an Apple-platform integration of Dinosaur Planet: Recompiled, not an independent reimplementation of its work. The game-specific static recompilation and core integration come from that project. Restored Adventure uses work from DinoMod Enhanced. DinoPad's contribution is the native macOS/iOS/iPadOS application layer, Apple portability work, product experience, touch controls, lifecycle and packaging integration described below. Every upstream project retains its authorship, license, and rights boundary.

Platforms: macOS 11+, iOS and iPadOS 15+ Renderer: RT64 Metal Status: development Game data: user supplied Build DinoPad with PadMint Join the DinoPad Discord

DinoPad turns the existing Dinosaur Planet static-recompilation stack into a native Apple app for Apple Silicon Mac, iPhone, and iPad. Private development builds provide two clearly separated play modes; the base edition provides Prototype Mode only. DinoPad includes a ROM-import flow, a UIKit/AppKit home screen, complete N64 touch controls, settings and diagnostics, save isolation, and Apple-specific runtime hardening. It is not an emulator, does not use JIT compilation, and does not download or execute game or mod code at runtime.

Note

AI disclosure: DinoPad uses substantial AI assistance for code, tests, documentation, debugging and maintenance. Some support replies and maintenance tasks are automated. There is no audited percentage of AI-generated code. Build, test and device records describe what was checked. This disclosure concerns DinoPad's workflow, not the authorship of its upstream projects.

Gameplay

A Restored Adventure story scene running on a physical iPad Krystal collecting a Warp Crystal in Restored Adventure on a physical iPad

A rooftop encounter in Restored Adventure on a physical iPad Krystal meeting a SnowHorn in Restored Adventure on a physical iPad

Captured from Restored Adventure running natively on a physical iPad with a locally supplied copy of the game. DinoPad does not include or distribute game data.

Built on community work

The shortest honest description of the project is:

Dinosaur Planet: Recompiled supplies the game port; DinoMod Enhanced supplies the restoration work; N64Recomp, N64ModernRuntime, and RT64 supply the core technology; PaperPad supplied proven Apple-product patterns; DinoPad integrates and adapts that stack into the Apple applications in this repository.

Project What that project provides Relationship to DinoPad
Dinosaur Planet: Recompiled The base Dinosaur Planet static-recompilation project: game-specific recompiled code, runtime integration, launcher foundation, rendering integration, and mod support. Direct foundation. DinoPad builds the pinned v0.3.0 source and carries replayable Apple patches around it. DinoPad does not claim authorship of the base recompilation.
DinoMod Enhanced Community restoration work for the December 2000 prototype, including fixes for bugs and progression blockers. Restored Adventure foundation. DinoPad statically integrates the pinned v0.9.3 restoration for constrained Apple runtimes. The restoration design and fixes remain DinoMod's work. Public redistribution is blocked pending permission or a compatible published license.
PaperPad An earlier Apple static-recompilation project with native macOS, iPhone, and iPad shell patterns: setup, touch controls, lifecycle, settings, and testing. Apple reference implementation. DinoPad adapts architectural and UX patterns to a different game and upstream stack. It does not use Paper Mario game code, art, assets, or branding.
N64: Recompiled The general-purpose toolchain that statically recompiles supported N64 programs. Core upstream technology, inherited through Dino Recompiled. DinoPad did not create the recompiler.
N64ModernRuntime Shared runtime services used by modern N64 recompilation projects. Core upstream runtime, inherited through Dino Recompiled. DinoPad maintains opt-in patches for static mods, separate profiles, restartable sessions, and mobile no-dynamic-code policy.
RT64 and its Plume backend The modern renderer, including the Metal backend used on Apple hardware. Core upstream renderer, inherited through Dino Recompiled. RT64 already supported Metal and macOS; DinoPad does not claim that work. DinoPad maintains iOS/iPadOS, UIKit, cross-build, and lifecycle patches needed by this app.

Exact versions, commits, dependency relationships, patch order, and patch hashes are recorded in the upstream inventory and dependencies.lock.json. Those records are the source of truth; names in this README are not a substitute for original licenses or notices.

Apple platform history

“Apple support” can mean a renderer backend, a reusable runtime, or a complete game application. Those are not equivalent. The following table describes the published documentation and checked-out source at DinoPad's exact pins; it is not a claim about every later fork or unrecorded experiment.

Upstream at the pinned version macOS iOS iPadOS
Dinosaur Planet: Recompiled v0.3.0 No official app target was documented; upstream build instructions covered Windows and Linux. No official app target documented. No official app target documented.
DinoMod Enhanced v0.9.3 A mod for Dino Recompiled, not a standalone app; its build prerequisites covered Windows and Linux. No native app target documented. No native app target documented.
PaperPad at 644945d Yes. Native Apple Silicon macOS was part of the reference project. Yes. iPhone app and Simulator/device validation were documented. Yes. iPad app and Simulator/device validation were documented.
RT64 renderer Yes. RT64 already provided Metal/macOS rendering support. Not a complete game app; iOS was not listed as a supported application platform at the pin. Not a complete game app; iPadOS was not listed as a supported application platform at the pin.

Therefore, DinoPad's Apple work should not be described as inventing static recompilation, restoration, RT64, Metal rendering, or the original Apple-shell ideas. Its contribution is making this particular game stack work as a coherent macOS/iPhone/iPad product, including the mobile renderer adaptations and runtime policies that the pinned base project did not provide.

flowchart LR
    NR["N64: Recompiled<br/>static recompiler"] --> DR["Dinosaur Planet: Recompiled<br/>game port and integration"]
    NMR["N64ModernRuntime<br/>runtime services"] --> DR
    RT["RT64 + Plume<br/>renderer and Metal backend"] --> DR
    DM["DinoMod Enhanced<br/>restoration fixes"] --> DP["DinoPad<br/>Apple application and patch layer"]
    DR --> DP
    PP["PaperPad<br/>Apple reference patterns"] -. architecture and UX reference .-> DP
    DP --> MAC["macOS"]
    DP --> IOS["iPhone"]
    DP --> PAD["iPad"]
Loading

What DinoPad adds

DinoPad's maintained work in this repository is the integration layer around those upstreams:

  • native AppKit/UIKit setup, ROM import, replacement, and private storage;
  • a dinosaur-themed development launcher with Restored Adventure and warned Prototype Mode choices, plus a Prototype-only public configuration;
  • complete N64 touch input, controller handoff, editable phone/tablet layouts, and a persistent in-game menu;
  • Metal-window, iOS renderer, mobile sampler, cross-compilation, thread, autorelease, audio, and session-lifecycle fixes;
  • static restoration dispatch with no JIT, no runtime code writes, no writable mod scanning, and no arbitrary mod installation;
  • separate saves and settings for Restored and Prototype sessions;
  • native settings, ROM management, diagnostics sharing, quit-to-home, and restartable in-process play sessions;
  • reproducible dependency pins, a locked 28-file patch set, ROM-free package checks, smoke tests, and evidence-backed platform status.

All maintained upstream changes live as reviewable patches under patches/. Reference checkouts under ref/ are ignored, reproducible, and push-disabled; DinoPad does not silently rewrite upstream history.

Current experience

The private Restored build presents two isolated ways to explore the prototype:

  • Restored Adventure is the recommended path. It uses the pinned DinoMod Enhanced restoration through statically linked, no-write dispatch.
  • Prototype Mode is the archival path. It preserves the original incomplete experience and requires an explicit warning before launch.

The base edition exposes only Prototype Mode. In a private Restored build, both modes keep separate saves and settings. On iPhone and iPad, DinoPad opens with a native launcher and Files-based ROM importer, then provides touch controls, controller handoff, a persistent ••• menu, layout editing, settings, ROM management, diagnostics, and quit-to-home. The macOS app uses the same mode policy with a native launcher plus keyboard and controller support.

Project status

Target Verified development state
macOS arm64 Native app bundle, RT64 Metal rendering, audio, native launcher and ROM import, isolated modes/saves, controller support, desktop keyboard/mouse defaults, windowed/fullscreen switching, and clean shutdown.
iPhone Simulator arm64 Native launcher/importer, complete touch shell, Restored gameplay, save-preserving relaunch, and a bounded 600-second run.
iPad Simulator arm64 Tablet launcher, independent layout persistence, complete product matrix, save relaunch, and a bounded 600-second run.
Physical iPhone/iPad Signed arm64 builds installed in place with private ROMs, saves, and settings preserved. Restored Adventure has been exercised on both form factors; physical-iPad controller play and reconnect are working. The 0.1.2 iPad build also passed the exact mode → Home → second-mode visual regression that previously produced a zoomed/cropped Metal surface. The full duration/audio/thermal/update matrix is still open.

These are engineering results beyond the narrower public base build. See Status, UI parity, and the playtest matrix for the evidence behind each claim.

Note

Releases publish no app: DinoPad contains code translated from the game, so everyone makes their own base build with PadMint. See Playing DinoPad.

Playing DinoPad

No Mac? Build it on a Windows PC (experimental). PadMint 0.5.27 or newer builds DinoPad for iPhone or iPad on Windows 11 (x64 or ARM64) from your own Dinosaur Planet ROM. Install Visual Studio 2022 Build Tools with Desktop development with C++, then choose DinoPad in PadMint. PadMint downloads the game-free DinoPad app from this release and adds the game code it builds from your file on your PC; nothing of yours is uploaded. The Mac build is unchanged. This Windows route is new: builds pass on Windows 11 ARM64, but a Windows-built copy has not yet been played on a device. GitHub's Mac can't build DinoPad, because that would mean uploading your game file. Details: portable module.

On an Apple Silicon Mac with Xcode and brew install cmake ninja xdelta ripgrep, download PadMint, unzip it, double-click PadMint.command, choose DinoPad and pick your supported Dinosaur Planet dump. PadMint builds the DinoPad base edition from this repository's latest release and saves an unsigned IPA in your Downloads folder. Install it with AltStore Classic, SideStore or Sideloadly. The IPA contains code translated from your dump: it is yours alone; never share it.

After installation:

  1. Put your supported Dinosaur Planet dump in Files, iCloud Drive, or another location visible to the Apple file picker.
  2. Launch DinoPad and select the dump when prompted. The expected original file is commonly named rom with no extension. Do not select rom_crack.z64.
  3. DinoPad verifies and privately imports the file. A renamed, modified, or wrong-revision image is rejected.
  4. From DinoPad Home, choose Start Dinosaur Planet, acknowledge the archival warning, and play. The public app has no Restored Adventure selector.

The imported ROM, saves, settings, and touch layouts remain in DinoPad's private app container. Updating the same bundle in place is intended to preserve that container; deleting the app deletes its local data, so back up anything important before removing it.

Restored Adventure: private self-build

The base edition cannot be converted to Restored Adventure by importing an .nrm file. DinoPad's iOS/iPadOS port uses ahead-of-time native code and does not permit JIT or runtime executable mod loading. DinoMod Enhanced must therefore be compiled into a separate app and signed by the person building it.

Users who obtain DinoMod Enhanced v0.9.3 from its official project may create a private Restored build from source:

git clone https://github.com/chrissotraidis/dinopad.git
cd dinopad

# macOS host prerequisites
brew install cmake ninja xdelta
scripts/bootstrap.sh
scripts/build-tools.sh

# DinoMod's private asset-generation environment
python3 -m venv .goal-loop/dinomod-venv
.goal-loop/dinomod-venv/bin/pip install \
  -r ref/dinomod-enhanced-recompiled/requirements.txt

# Use the exact original big-endian dump described below.
mkdir -p ref/DINO
cp /absolute/path/to/your/original/rom ref/DINO/rom
scripts/generate-base.sh --rom ref/DINO/rom
scripts/generate-restoration.sh

# Build native host shader tools, then the private Restored device app.
cmake -S . -B build-macos -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build-macos --target DinoPad
scripts/build-ios-device.sh --distribution restored \
  --team YOUR10CHARTEAMID --allow-provisioning-updates

The signed app is produced at build-ios-device/Release-iphoneos/DinoPad.app and can be installed with Xcode or xcrun devicectl. An unsigned private candidate can instead be built without --team and packaged with scripts/package-ios.sh --candidate --distribution restored; it still must be signed before installation. Generated DinoMod code/data and a Restored IPA are for the user's private build only and must not be redistributed without DinoMod permission. Installing the private build over the same DinoPad bundle is intended to preserve the existing app container, including Prototype saves and settings; do not delete the installed app first.

Required game dump (exact build)

DinoPad supports only the original, unmodified December 1, 2000 prototype build. The supported dump identifies itself as DINO PLANET, game code NDPE, revision 0, and is exactly 64 MiB (67,108,864 bytes).

The original big-endian dump used by the upstream project is conventionally named rom with no filename extension. Some reference sets place a modified rom_crack.z64 beside it; do not select rom_crack.z64. DinoPad requires the original rom data and deliberately rejects that patched emulator/flash-cart image.

To verify a copy without sharing it, calculate the MD5 of the original big-endian file. The supported fingerprint is:

49f7bb346ade39d1915c22e090ffd748

DinoPad also accepts .z64, .v64, and .n64 byte orders whose normalized data matches that fingerprint; the filename itself is not trusted. DinoPad normalizes and validates the selected file locally, then stores the accepted copy only in private app storage. This project does not provide or link to game-data downloads.

Developer build requirements

  • Apple Silicon Mac running macOS 11 or later
  • Xcode with macOS and iOS Simulator SDKs
  • CMake 3.20+, Ninja, Git, Python 3, and make
  • a MIPS-capable Clang toolchain for private generation
  • at least 20 GiB of available disk space
  • the supported game dump described above

Controls

Xbox-style controllers use the ordinary N64 layout: left stick moves, the south face button is A, the west face button is B, the triggers provide Z/R, the left bumper is L, the right stick provides the C buttons, and Menu is Start. iPhone and iPad additionally provide independent, editable touch layouts that disappear automatically while a controller is active. On touch screens, holding Z for half a second locks targeting until the next Z tap; Settings & Status > Hold Z to Lock Targeting can disable that behavior.

The default macOS keyboard and mouse layout is:

N64 input macOS default
Analog stick W A S D
A / B Left click or Space / right click or X
Z Left or right Shift
C buttons Q left, E right, R up, F down
D-pad Arrow keys
L / R Z / C
Start Escape or `
DinoPad settings menu Tab
Fullscreen F11 or Option+Return

Bindings remain editable in the in-game controls screen. Existing development profiles keep their saved bindings until Reset Keyboard Bindings is used.

Building for local development

The unreleased base-game module preparation can build an empty iOS shell without a ROM. Its portable game module still needs validation with the supported original input before it is offered through PadMint.

Follow the complete build guide for toolchain setup, pinned dependency bootstrap, private generation, safety audits, outputs, and Simulator smoke tests.

Once the private generation prerequisites are available, the primary commands are:

scripts/build-macos-app.sh --rom /absolute/path/to/your/rom
scripts/build-ios-simulator.sh
scripts/build-ios-device.sh

The macOS command creates build-macos/DinoPad.app. The iOS commands create ROM-free local development apps for Simulator or an unsigned iphoneos target. A personal development team may be specified for local device testing; this is not a distribution workflow.

Never add a ROM, save, generated game code, private fixture, signing material, or local absolute path to the repository. Run the package checks in the build guide before treating any local artifact as testable.

Known limitations

  • A full Restored start-to-credits playthrough and chapter-boundary matrix are still open.
  • Controller reconnect is working on the tested physical iPad, but rumble, Bluetooth audio, thermal behavior, memory pressure, interruption handling, and the full update-preservation matrix still need broader hardware coverage.
  • The archival prototype is unfinished and can contain progression blockers.
  • Individual touch controls are not yet exposed as separate accessibility elements.
  • The public-package configuration currently contains the original Prototype experience only. Restored Adventure remains development-only until DinoMod publishes compatible terms or grants redistribution permission.

Read Known issues and technical debt for the full evidence-linked record.

Frequently asked questions

Is DinoPad a fork of Dinosaur Planet: Recompiled?

DinoPad is an Apple integration built from a pinned checkout of Dinosaur Planet: Recompiled, with a maintained patch series and a new native product shell around it. “Fork” is directionally correct, but incomplete: this repository intentionally stores adapters and replayable patches rather than a silent copy of the entire upstream tree.

Who made the recompilation and restoration?

The Dinosaur Planet: Recompiled contributors made the base game recompilation project. The DinoMod Enhanced contributors made the restoration fixes used by Restored Adventure. DinoPad credits and depends on both; it does not rebrand their work as its own.

Did DinoPad bring RT64 or Metal to macOS?

No. RT64 already supported Metal and macOS. DinoPad adapts that renderer and the surrounding game/runtime stack for this specific Apple application, and carries mobile, UIKit, cross-build, and lifecycle patches needed for iPhone and iPad.

What is static recompilation?

Static recompilation translates the supported N64 program into native arm64 code before the app is built. DinoPad runs that generated code with N64ModernRuntime and RT64; it does not emulate an N64 and does not generate executable code at runtime.

Can DinoPad run another ROM or a patched ROM?

No. DinoPad supports exactly one December 2000 prototype and verifies the normalized input before accepting it. The ROM is never bundled, uploaded, downloaded, or shared by DinoPad.

Is Restored Adventure a public DinoMod release?

No. Its static integration is development evidence only. DinoPad cannot publish a Restored build until DinoMod's rightsholders provide a compatible redistribution grant. The separate base build excludes all DinoMod code and data and passes the repository's compliance gate.

Can I download an app or IPA?

No. The app contains code translated from the game, so PadMint builds your own base edition from your dump on an Apple Silicon Mac. See Playing DinoPad.

Repository guide

Path Purpose
apple/app/ Native iOS/iPadOS shell, controls, settings, diagnostics, ROM setup, and lifecycle integration.
src/app/ Native macOS home and support integration.
src/runtime/ DinoPad-owned runtime adapters.
src/restoration/ Static restoration integration boundary.
patches/ Ordered, replayable changes against exact upstream pins.
scripts/ Bootstrap, build, smoke-test, runtime-guard, and package-safety automation.
docs/ Architecture, implementation status, upstream inventory, rights analysis, testing, and release gates.
docs/evidence/ Curated outputs that support platform and feature claims.

Community and support

Join the Discord for help and news. It is one community for DinoPad and its sibling projects, such as KartPad, BlueWake and MeleePad: ask about setup, building with PadMint, and installing, share how it runs on your device, and hear about new releases first.

Found a bug? Open an issue with your device, its OS version, and the steps that led to it.

Rights, licenses, and distribution

DinoPad is independent and unofficial. It is not affiliated with or endorsed by Nintendo, Rare, Microsoft, Dinosaur Planet Recompiled, DinoMod Enhanced, PaperPad, or any of their contributors. Game names, assets, characters, copyrights, and trademarks belong to their respective owners.

Caution

DinoPad-owned work is GPL-3.0-only, but that grant does not relicense game material or third-party projects. Each upstream retains its own terms. DinoMod publishes no redistribution license, so only the build that excludes all DinoMod code and data currently passes the public-package compliance gate.

The tracked repository contains no ROM, save, extracted game asset, generated playable game source, private fixture, signing identity, or redistributable Restored package. A ROM-free executable may still contain locally generated code derived from user-supplied game data. That disclosed copyright-risk question is tracked as an advisory rather than misrepresented as an unidentified software license.

Before sharing source or a build, read:

The release gate distinguishes resolved compliance requirements, non-blocking advisories, and profile-specific permission blockers. It passes for the audited base build and fails closed for Restored Adventure while DinoMod permission is absent.

Detailed acknowledgements

DinoPad exists because of the work of many upstream communities. In addition to the directly credited projects above, the pinned build includes work from SDL, RmlUi, FreeType, and other transitive projects recorded in dependencies.lock.json and the generated compiled-dependency inventory.

Thank you to the Dinosaur Planet preservation, decompilation, recompilation, modding, and tooling contributors whose research and engineering made every layer of this project possible. DinoPad's documentation should always preserve that provenance: the Apple app is DinoPad's work; the foundations remain the work of their original authors.

About

Dinosaur Planet, native for MacOS, iOS, and iPadOS

Topics

Resources

Stars

11 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages