Skip to content

Repository files navigation

PeonPad — real-time strategy, native on iPad

PeonPad running Warcraft II with touch controls on iPad

GPL-2.0 iPadOS 16 or newer Native arm64 Physical device tested

PeonPad brings the Stratagus/Wargus real-time strategy engine for Warcraft II to iPad as a native ARM64 app.
SDL2 renders through Metal. Touch gestures map classic RTS actions to the screen. Your game data stays yours.

Screenshots · Status · Install · Controls · Game data · Engineering log

Important

PeonPad does not include Warcraft II. To play, you provide data extracted from your own legally owned copy on a Mac or PC. That game content stays local to your machine and is never part of the PeonPad download.

What is PeonPad?

PeonPad is an independent Apple-platform Warcraft II port built on the open-source Stratagus engine and Wargus game layer. It runs engine code directly on iPadOS; it does not run a Windows executable, emulate x86, or stream a game from another computer.

Your legally owned game media
            │
            ▼  extract on desktop with Wargus tooling
    local data.Wargus folder        never tracked by Git
            │
            ▼  copy after installation through Files/Finder
    PeonPad Documents/data.Wargus   private app-container data
            │
            ▼
        your iPad over USB

This repository is currently a developer preview. A signed build has been installed and exercised on a physical M2 iPad Pro. The unsigned preview IPA is data-free and requires user-side signing plus a separately copied data.Wargus; there is no App Store, TestFlight, or in-app content importer yet.

See it running

PeonPad running a snowy Warcraft II skirmish on iPad PeonPad running a large battle on iPad
Touch-ready skirmishes
Native UI, fog of war, selection and build commands
The full battlefield
Large encounters rendered through SDL2 and Metal
Open the original title-screen capture

A user-supplied Warcraft II title screen displayed by PeonPad on iPad

These are user-supplied, in-game captures from a privately built copy using legally owned game data. They document compatibility; they are not included as application assets. Warcraft II artwork and marks belong to Blizzard Entertainment and its licensors.

What works today

Area State Evidence
Native iPad runtime ARM64 iPadOS binary, SDL2 Metal renderer, landscape safe areas
Warcraft II campaigns Original and Beyond the Dark Portal missions launch, render and play
Skirmish Classic and Modern modes launch and play
Touch input Selection, command chords, camera pan and ten shared control groups
Save/load Manual saves, autosaves and relaunch loading exercised on device
Text entry iPad software keyboard appears for save names and network fields
Repeated menu cycles Quit-to-menu regression exercised across device sessions
Complete-match regression A full start-to-victory match still needs to be recorded
Hardware keyboard/mouse 🧪 Native SDL paths are retained; Magic Keyboard acceptance is pending
Multiplayer 🧪 Engine support exists; local and online play are unverified on iPad
Replay playback ⏸️ Hidden in the private iPad profile until legacy playback is reliable
Files-visible game data Loads validated Documents/data.Wargus copied after installation
In-app folder picker 🧭 Planned; Preview 1 uses the Files-visible app folder

The private Warcraft II profile exposes original campaigns plus Skirmish Classic and Skirmish Modern. Incompatible legacy custom modes are deliberately excluded instead of being presented as working. See docs/ipad-test-notes.md for the regression matrix and the reasoning behind each product decision.

Touch controls

PeonPad keeps ordinary taps immediate and adds only the gestures needed to make a mouse-first RTS playable on glass.

Gesture Action
One finger Point, select, drag-select and activate UI
Tap empty terrain Clear the current selection
Two-finger tap Right-click command at the leftmost finger
Three-finger drag Pan the battlefield with a modest 1.35× gain
Control group 1–0 Hold to assign, tap to select, double-tap to select and center
Hardware pointer/keyboard Native SDL input, including modifier keys

Two-finger movement beyond a small tolerance cancels the command. Adding the third finger cancels that pending command before camera panning begins. The gestures are gameplay-only, so menus keep normal iPad behavior.

The compact two-row control-group bank occupies the unused lower-left gameplay rail. Hold a number for half a second to assign the current selection. Assigned groups turn gold and use the same 1 through 0 slots as a hardware keyboard, so touch and keyboard control groups remain interchangeable.

There is no pinch-to-zoom: the classic Wargus view is fixed-scale. A visible Shift/Control/Alt modifier dock is designed but not yet implemented.

Install or build for an iPad

Unsigned preview IPA

The GitHub prerelease contains an unsigned, re-signable IPA with no Warcraft II or Aleona game data. Sign and install it with your preferred iOS sideloading workflow, then copy your complete extracted folder to:

On My iPad/PeonPad/data.Wargus

PeonPad validates scripts/stratagus.lua, the extraction marker, graphics, maps, and sounds at launch. If the folder is missing or incomplete, it shows the required location and exits without starting the engine. See docs/INSTALL_IPA.md for the complete flow.

Source build

What you need

  • An Apple Silicon Mac with full Xcode installed and first-launch setup complete
  • Homebrew, CMake 3.27 or newer, Git and pkg-config
  • An iPad running iPadOS 16 or newer, a USB cable and Developer Mode
  • An Apple ID available to Xcode for a Personal Team development signature
  • A legally owned Warcraft II installation or an extracted data.Wargus

The accepted device is an M2 iPad Pro on iPadOS 26.5.2. The deployment target is iPadOS 16.0. Other iPad hardware still requires testing.

Install the public build dependencies once:

brew install cmake pkg-config

The raw-installer route also needs:

brew install innoextract ffmpeg

PeonPad checks for these tools but never installs or upgrades packages for you. If the installed FFmpeg lacks its optional libtheora encoder, PeonPad automatically builds a small host-only fallback from the Xiph sources already vendored by Stratagus. Music conversion still uses the installed FFmpeg. This avoids requiring a second, expanded FFmpeg package solely for cinematics.

1. Clone PeonPad

git clone https://github.com/chrissotraidis/peonpad.git
cd peonpad
./scripts/preflight.sh

The public preflight checks the tracked source snapshots, ignore rules, Xcode, the iPhoneOS SDK and both compiler probes. It does not require the private maintainer fixture.

2. Prepare the Xcode project

Choose one route. The command builds the host tools, prepares and stages your game data, and generates build/ios-xcode/stratagus.xcodeproj.

From the validated English GOG installer

Keep these two original files together in the same directory:

setup_warcraft_ii_2.02_v5_(78104).exe
setup_warcraft_ii_2.02_v5_(78104)-1.bin

Then run:

./scripts/prepare-ipad-build.sh --installer \
  "$HOME/Downloads/setup_warcraft_ii_2.02_v5_(78104).exe"

This automated route is pinned to Warcraft II Battle.net Edition 2.02 v5, English, GOG build 78104. PeonPad verifies both files by SHA-256 before running innoextract, then converts the data with the wartool built from this repo. Other editions are deliberately rejected rather than guessed at. The command also verifies all 13 cinematics and 19 music tracks before staging the result, so an unavailable codec cannot silently produce an incomplete iPad build.

From an existing data.Wargus

If Wargus has already extracted your legally owned game, run:

./scripts/prepare-ipad-build.sh --data "/path/to/data.Wargus"

For unsupported installers, use the extraction guidance in the Wargus README, then use this --data route. PeonPad validates the expected scripts, extraction marker, graphics, maps and sounds before staging anything.

Warning

Do not copy the original .exe, .bin, INSTALL.MPQ, disc image, or store installer into the app bundle. Those files are desktop extraction inputs; the iPad does not execute them.

Both routes leave proprietary content only in ignored local directories. The staging step removes the redundant installer MPQ and incompatible custom modes without changing the source data.

3. Sign and deploy over USB

  1. Connect and unlock the iPad, tap Trust, and enable Developer Mode if iPadOS requests it.
  2. Confirm the device appears in xcrun devicectl list devices.
  3. In Xcode → Settings → Accounts, add your Apple ID. Credentials remain in Xcode; PeonPad never receives them.
  4. Open build/ios-xcode/stratagus.xcodeproj.
  5. Select the stratagus target, choose your Personal Team under Signing & Capabilities, and use a unique bundle identifier if Xcode requests one.
  6. Select the connected iPad and press Run.

The result runs directly on the iPad. The Mac is needed to compile and sign the developer build, not to stream or host gameplay.

Tip

This is a source build with CMake, Xcode signing and user-owned game data. If that toolchain is unfamiliar, using Codex from the cloned repository is recommended: ask it to follow this installation section and diagnose any preflight or Xcode error. Keep your installer and data.Wargus local; they should never be uploaded, committed or pasted into a task.

Manual command breakdown
./scripts/preflight.sh
./scripts/build-macos.sh
PEONPAD_WC2_DATA_DIR="/path/to/data.Wargus" \
  ./scripts/stage-ios-wc2-test-data.sh
./scripts/generate-ios-xcode.sh --local-data build/ios-wc2-data
open build/ios-xcode/stratagus.xcodeproj

The explicit --local-data mode is private development only. The one-command preparation script runs this same sequence and adds installer extraction when --installer is selected.

Fast macOS development loop
./scripts/build-macos.sh
./scripts/smoke-macos.sh
./scripts/run-macos.sh --profile wc2 -- -W

These defaults use ignored root-level data.Wargus. Pass --data PATH to the runtime command, or PEONPAD_WC2_DATA_DIR=PATH to the smoke command, when your extracted folder lives elsewhere. Runtime state stays under ignored runtime/.

Maintainer reference verification
./scripts/preflight.sh --maintainer
./scripts/build-macos.sh --maintainer
./tests/script-guardrails.sh --maintainer

This optional mode verifies the private, immutable ref/ evidence fixture from the original port. Normal users do not need or have that fixture and should not create it.

Project boundary

The separation between code and content is a feature, not a packaging detail.

This repository contains

  • GPL-licensed Stratagus/Wargus source at revision-locked snapshots
  • PeonPad's Apple-platform integration, touch controls and build tooling
  • Vendored open-source dependencies and their notices
  • Original PeonPad icon, launch artwork and README banner
  • Documentation screenshots supplied by the device owner

This repository does not contain

  • Blizzard game executables, installers, MPQs, discs or extracted game data
  • Warcraft II art, audio, video or maps as application resources
  • A redistributable free-content bundle; Aleona's Tales remains audit-blocked
  • Signing identities, provisioning profiles, saves, logs or account secrets

Before every distributable build, PeonPad scans the application bundle for forbidden proprietary inputs. The repository ignore rules independently block the same classes of local files. See NOTICE, LICENSES/README.md, and docs/aleona-asset-audit.md.

Architecture

Layer Role
Stratagus Native RTS simulation, renderer and input loop
Wargus Warcraft II-compatible scripts and desktop data tooling
SDL2 UIKit windowing, events, audio and Metal-backed rendering
PeonPad Apple layer Safe areas, Retina coordinates, lifecycle, touch chords and text input
Xcode Native iPadOS compilation, Personal Team signing and USB deployment

The target is currently TARGETED_DEVICE_FAMILY=2: iPad only. An iPhone is also ARM64, but PeonPad has not adapted or accepted its UI, safe areas, touch density, performance or thermal behavior. iPhone support should not be claimed until those product and device tests exist.

A physical iPhone 14 bring-up confirmed that the arm64 app can install and launch, while also exposing the expected layout and multitouch gaps. See docs/iphone-bringup-notes.md for the findings, likely input-transform issue, proposed adaptation stages and acceptance gates.

What GPL-2.0 means

GPL-2.0 is the open-source license for PeonPad's code. In practical terms:

  • You may run, study and modify PeonPad for private use.
  • You may share PeonPad, including modified versions and commercial builds.
  • If you distribute a PeonPad binary or modified version, you must make the corresponding source available under GPL-2.0 and preserve the license and copyright notices.
  • The software is provided without a warranty.

Those permissions apply to PeonPad's GPL-covered source—not to Warcraft II game data, artwork, audio, video or trademarks. GPL-2.0 cannot grant rights that the PeonPad project does not own. Read the complete terms in LICENSE. The GNU GPL-2.0 page also provides the canonical license text and supporting material. This summary is explanatory, not legal advice.

Roadmap

  • Reproducible native Apple Silicon macOS baseline
  • Physical-device iPadOS ARM64 build through SDL2 and Metal
  • Campaigns, skirmishes, touch commands, camera pan and software keyboard
  • Save/load and repeated quit-to-menu device checks
  • Build an audited, data-free unsigned IPA from public source
  • Load validated data.Wargus from the Files-visible app folder
  • Complete and record a full match regression
  • Add an in-app Files picker and validation for owned data.Wargus
  • Ship discoverable Shift/Control/Alt touch modifiers
  • Accept Magic Keyboard, mouse and trackpad combinations on hardware
  • Test local and online multiplayer on iPad
  • Repair or replace replay playback
  • Validate the public installer route from an unrelated clean clone
  • Find a redistribution-cleared libre content path

Contributing

Keep changes narrow, preserve the code/content boundary, and re-run the checks that cover the surface you touched. The usual gate is:

./scripts/preflight.sh
./scripts/build-macos.sh
./scripts/smoke-macos.sh

iPad changes also require an actual device pass; simulator or compiler success is not enough. Start with docs/build-status.md and docs/ipad-test-notes.md, then record new device evidence rather than replacing it with assumptions.

License and trademarks

PeonPad source code is distributed under GPL-2.0; dependency and asset notices live under LICENSES/. The generated PeonPad banner and project artwork are original, independent branding. Documentation screenshots are not game assets and are not offered under PeonPad's source-code license; the game imagery visible inside them remains the property of its respective rights holders.

Warcraft, Warcraft II, Battle.net, and Blizzard Entertainment are trademarks or registered trademarks of Blizzard Entertainment, Inc. All associated game content belongs to its respective rights holders. PeonPad is not affiliated with, endorsed by, or sponsored by Blizzard Entertainment. You are responsible for using your game data in accordance with the license for your copy and the laws that apply to you.

About

Warcraft II on iPad. Native iPad port of the open-source Stratagus engine with support for user-supplied Warcraft II data.

Topics

Resources

Stars

38 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages