Skip to content

Repository files navigation

DaggerPad

The Elder Scrolls II: Daggerfall via Daggerfall Unity, rebuilt for iPad.
Native Metal rendering, touch-first controls, Files-based setup, and support for keyboards, pointing devices, and iPadOS game controllers.

iPadOS 15+ Unity 2022.3.62f3 Metal renderer Physical iPad build verified Game data not included

Install · Controls · Screenshots · FAQ · Project status

DaggerPad version 10 running on a physical iPad, riding through a snowy Daggerfall town with contextual touch controls
Version 10 running on a 12.9-inch iPad Pro: native landscape gameplay, contextual controls, and the original Daggerfall world.

DaggerPad brings Daggerfall Unity as a native iPadOS app. It renders through Metal, imports your classic Daggerfall files through Files, and adds a landscape touch interface designed for movement, looking, combat, conversations, inventory, and the original game's dense UI.

The mobile baseline comes from Vwing's Daggerfall Unity Android fork, with iPadOS integration, native pointer input, Files import, lifecycle handling, and DaggerPad's touch layouts maintained in this repository. It does not contain Daggerfall, Bethesda game data, or a prepared playable archive.

Install status

Option Status What to do
Public .ipa Preview 1 published Download DaggerPad-0.1.0-preview.1-unsigned.ipa, then sign it with your own Apple ID before sideloading.
Local development .ipa Verified August 2, 2026 A development-signed Release IPA was built, audited, installed, and launched on the physical test iPad. It remains a local, ignored artifact tied to the builder's Apple development profile.
Local iPad build Available now Follow the fresh-clone instructions below, then sign the generated Xcode project with your Apple development team.
Simulator Available now Best for setup, UI, and repeatable smoke testing; it is not a substitute for physical-device testing.
App Store / TestFlight Not announced No listing or public TestFlight currently exists.

The current development source has been exported with Unity, signed and built for arm64, installed over an existing copy, and launched on a 12.9-inch M2 iPad Pro. The in-place update preserved all three existing save slots. The version 10 built-in layouts add clearer contextual command labels without changing control placement, hit targets, or bindings, and text-field taps now explicitly request the iPad software keyboard.

Those checks prove the build, installation, launch, and save preservation. The current physical-iPad captures below confirm the version 10 labels, gameplay, classic interfaces, and layout editor. Software-keyboard behavior without an attached physical keyboard and long-session performance remain open checks.

Preview 1 uses the same clean arm64 Release app produced at source commit 80cd8e5 with Unity 2022.3.62f3 and Xcode 26.6. The public package strips the builder's signature and provisioning profile, includes the project and third-party notices, and contains no Daggerfall game data or saves. Its SHA-256 is d14544e950c8aee756822fbc4bc03f8922644173aa433bae5d7c09d0787de067.

On August 18, 2026, that exact unsigned IPA was extracted, re-signed with a local Apple development identity, verified strictly, installed in place on the 12.9-inch M2 iPad Pro, and launched. The process remained live and the existing 36-file save tree matched byte-for-byte after installation. The underlying app had already passed the native landscape visual smoke shown below. This proves the downloadable payload can be re-signed, installed, and launched; it does not replace hands-on control or long-session performance testing.

Get started

You need:

  • a Mac with Xcode and its command-line tools;
  • Unity Hub with Unity 2022.3.62f3 and iOS Build Support installed;
  • an Apple ID configured in Xcode for development signing;
  • an iPad running iPadOS 15 or later; and
  • your own legally obtained Daggerfall folder containing ARENA2 and FALL.EXE.

Clone the project and prepare your game-data ZIP:

git clone https://github.com/chrissotraidis/daggerpad.git
cd daggerpad
bash scripts/prepare-game-data.sh "/path/to/your/DAGGER"

The script validates the folder and writes Builds/TestData/daggerfall.zip. The ZIP stays ignored and must never be committed or distributed with DaggerPad.

Build and run:

  1. Open the repository folder in Unity Hub with 2022.3.62f3.
  2. Let the first Unity import finish.
  3. Choose DaggerPad → Build → iPadOS Device.
  4. Open Builds/iOS/Device/Unity-iPhone.xcodeproj in Xcode.
  5. Select the Unity-iPhone target and choose your development team under Signing & Capabilities.
  6. Connect and trust your iPad, select it as the run destination, and press Run.

See BUILDING.md for command-line export, signing, Simulator, and troubleshooting instructions. The complete physical-device handoff is in docs/IPAD_SETUP_AND_CONTROLS.md.

Prefer a command-line Unity export?
/Applications/Unity/Hub/Editor/2022.3.62f3/Unity.app/Contents/MacOS/Unity \
  -batchmode -quit \
  -projectPath "$PWD" \
  -buildTarget iOS \
  -executeMethod DaggerPad.Editor.DaggerPadIosBuild.BuildDevice \
  -daggerpadBuildPath "$PWD/Builds/iOS/Device" \
  -logFile "$PWD/Builds/iOS/unity-device.log"

Open the generated Xcode project and choose your development team as described above. The full signed command-line path is in BUILDING.md.

First launch

DaggerPad never downloads or bundles game data.

  1. Make Builds/TestData/daggerfall.zip available in Files, using iCloud Drive, AirDrop, or another local transfer method.
  2. Launch DaggerPad and tap Import.
  3. Select daggerfall.zip in the Files picker.
  4. Let DaggerPad extract and validate the classic game files.
  5. Complete setup and tap Play.

Imported files, settings, mods, and saves remain visible at Files → On My iPad → DaggerPad → DaggerfallUnity. When updating an existing installation, keep the same bundle identifier and install in place; uninstalling deletes the app's data container.

Touch controls

DaggerPad's standard version 10 iPad layout keeps the game view readable while placing essential actions within thumb reach:

  • Left half: touch and drag to move from a floating origin.
  • Right half: touch and drag to look; double-tap to use, open, or take the object under the crosshair.
  • Actions: Use, Mount / Dismount, Attack, Jump, and Draw / Sheathe sit near the right thumb.
  • Commands: Pointer / Look, More / Close, Inventory, Pause / Back, and Edit / Done remain in the bottom strip and describe their current action.
  • More: opens automap, rest, quick save/load, status, travel, journals, hand switch, magic items, and a visible Run on/off toggle.
  • Classic lists: swipe vertically with one finger to scroll conversations, inventory-style lists, spell lists, and journals that support mouse-wheel input.
  • Customize: use Edit to move, resize, enable, disable, or remap controls. Built-in layouts migrate forward while custom layouts are preserved.
Surface or control Gameplay behavior
Left half Move in any direction; touch, keyboard, and controller movement are arbitrated rather than added together.
Right half Look without a permanent on-screen stick.
Right-side double tap Use, activate, open, or take the object under the crosshair.
Use Explicit alternative to the right-side double tap.
Mount / Dismount Mount an owned horse or cart outdoors, or return to foot.
Attack Ready a sheathed weapon on the first tap, then attack.
Jump Trigger Daggerfall's standard Jump action.
Pointer / Look / Enter Switch pointer modes during gameplay; the label shows the next action and changes to Enter in dialogs.
More / Close Open or close the compact secondary-action tray.
Pause / Back Pause gameplay or close the current Daggerfall window.
Edit / Done Open or close the layout editor after closing any open utility tray.

Hold a visible control briefly to show its name in the HUD, away from the finger covering the button. Automap is identified as LOCAL MAP to distinguish it from the travel map. The bundled simplified-layout, gesture-layout, and accessibility-layout presets cover the standard, gesture-combat, and larger-control starting points.

The current layout, reset behavior, keyboard and trackpad mappings, and physical retest list are documented in docs/IPAD_SETUP_AND_CONTROLS.md.

Show keyboard, trackpad, and mouse shortcuts
Input Default behavior
W, A, S, D Move at the iPad-tuned keyboard scale
Trackpad or mouse motion Look during captured Look mode
Enter Toggle Pointer mode and Look mode
Primary, secondary, middle click Feed Daggerfall's normal mouse actions and menus
Shift Run while held
Space Jump
C Crouch
M Open the automap
I Show status
Z Ready or sheathe the weapon
Escape Pause, close, or go back

Daggerfall's normal bindings remain configurable. Pointer lock is requested only during active gameplay, not while classic menus are open.

Current screenshots

All five captures in this README come from the current version 10 build running on a physical 12.9-inch iPad Pro. Click any image for the full-size view.

DaggerPad on-screen control editor over live gameplay on a physical iPad Classic Daggerfall inventory and character equipment screen running on a physical iPad
Controls that fit the game
Move, resize, remap, import, or export layouts without leaving gameplay.
The complete classic interface
Inventory, equipment, encumbrance, and item actions remain intact.
Classic Daggerfall conversation interface with touch-scrollable topics on a physical iPad DaggerPad first-person indoor interaction with contextual touch controls on a physical iPad
Conversation by touch
Browse classic topics and responses with one-finger list scrolling.
Exploration and interaction
Look, use, fight, mount, and navigate with a restrained overlay.

The snowy-town hero shows mounted outdoor play and the normal version 10 command strip. All game data used for these captures was supplied locally and is not part of this repository.

Simulator test

The automated smoke path exports DaggerPad, builds it for the pinned iOS 18.5 iPad Pro Simulator, installs it, launches it, and captures local evidence.

Run the automated Simulator smoke path
bash scripts/prepare-game-data.sh "/path/to/your/DAGGER"
bash scripts/run-simulator-smoke.sh

The script creates or reuses the named test Simulator but intentionally performs a clean DaggerPad install. Do not point it at a Simulator whose app data or saves you need to keep. See docs/TESTING.md for the exact evidence boundary and physical-iPad checklist.

What works

Area Current result
Native app Complete Unity project exports and builds for arm64 iPadOS 15+ through IL2CPP
Rendering Metal rendering works in Simulator and on physical iPad
Game setup Files-based ZIP import, validation, local extraction, and path recovery after app-container relocation work
Gameplay Character creation, Privateer's Hold, pause, inventory, automap, named saves, load, and suspension autosave recovery have been exercised
Touch Dual-zone movement/look, contextual commands, core actions, touch-scrollable classic lists, three presets, and an in-app layout editor are included
Input options Touch, keyboard, native GCMouse mouse/trackpad input, and the inherited iOS controller path are present
Updates Imported data, custom layouts, and saves can survive an in-place app update

For detailed engineering evidence and the remaining physical-device gates, see docs/STATUS.md and docs/TESTING.md.

Supported game

Game Engine Status
The Elder Scrolls II: Daggerfall Daggerfall Unity Supported with user-provided classic game files
Other Elder Scrolls games Not supported by this app

DaggerPad is a native Daggerfall Unity integration, not a DOS emulator or a general Elder Scrolls launcher.

Reproducible and game-data-free

flowchart LR
    A["DaggerPad Unity source"] --> B["iPadOS Xcode export"]
    B --> C["Locally signed app"]
    D["Your Daggerfall folder"] --> E["prepare-game-data.sh"]
    E --> F["Ignored daggerfall.zip"]
    C --> G["Files import"]
    F --> G
    G --> H["Local data, saves, and gameplay"]
Loading

The app build never needs to bundle your Daggerfall files. The preparation script creates a separate ignored ZIP from the folder you provide, and the app introduces that data only after installation through the iPadOS Files picker.

Before handing off a source build, run:

bash scripts/verify-source.sh "/path/to/your/DAGGER"
bash scripts/verify-xcode-export.sh Builds/iOS/Device

The first command checks the pinned Unity/iPadOS configuration, touch contract, the game-data folder you provide, script syntax, and whitespace. If you omit the folder, local game-data checks run only when the default ignored ref/ folder exists. The second command checks a generated Xcode export for Addressables, Files integration, iPad targeting, indirect input, and the native pointer framework.

Generated Unity state, Xcode projects, build products, prepared ZIPs, classic game files, saves, and local evidence are ignored and must never be committed.

Important limits

  • DaggerPad is an unofficial community port. You must supply your own Daggerfall files.
  • iPadOS uses IL2CPP. Runtime C# mods and precompiled managed mod assemblies do not work; asset-only mods must be rebuilt for the iOS Unity target.
  • A build, installed bundle, launched process, or device-side preset read-back does not by itself prove physical control feel or long-session stability.
  • Physical controller mappings, sustained performance, thermals, battery use, memory, interruption recovery, and a desktop-to-iPad save round trip still need broader device testing.
  • Preview 1 is offered as an unsigned sideload IPA. No App Store build or public TestFlight is currently offered.

Frequently asked questions

Where is the IPA?

Download the unsigned Preview 1 IPA from the GitHub release. It does not contain a provisioning profile and will not install directly: re-sign it with your own Apple ID using your normal sideload workflow. You can also build locally, select your Apple development team in Xcode, and install from source. Neither route includes Daggerfall game data.

Does this repository include Daggerfall?

No. You must provide your own legally obtained classic Daggerfall folder. Do not open issues requesting game data or download links.

Does it really run on a physical iPad?

Yes. Development builds have been signed, installed, launched, and exercised on a 12.9-inch M2 iPad Pro. The current version 10 build is installed and running there with the previous saves intact. The images above were captured from that device. Detached-keyboard text entry and longer performance passes still require hands-on acceptance.

Can I customize the touch controls?

Yes. Open Edit to move, resize, hide, enable, or remap controls. DaggerPad ships standard, gesture-combat, and accessibility presets and preserves user-created layouts during built-in preset migrations.

Does it support a keyboard, trackpad, mouse, or controller?

Keyboard movement and shortcuts are included. Mouse and trackpad input use a native GCMouse bridge with gameplay-only pointer lock. Daggerfall Unity's controller path is also present, but physical controller mappings and accessory feel still need model-specific testing.

Do Daggerfall Unity mods work?

Asset-only mods can work when rebuilt for the iOS Unity target. Runtime C# mods and precompiled managed mod assemblies are incompatible with the IL2CPP build.

Is this an App Store or TestFlight release?

No. App Store, TestFlight, and public sideload distribution require separate signing, packaging, testing, and rights review. None has been announced.

What is the licensing status?

Daggerfall Unity and the Vwing mobile fork are MIT-licensed. This repository carries the Daggerfall Workshop MIT license in LICENSE, while bundled third-party components retain their own notices under Assets/Licenses/. The license does not grant rights to Bethesda's classic game files, names, or trademarks. Those game files are not bundled with DaggerPad.

Project map

Path Purpose
Assets/iOS/ iPadOS build, lifecycle, Files, and platform integration
Assets/Plugins/iOS/ Native mouse and trackpad bridge
Assets/Android/Scripts/ Shared mobile touch controls and layout management
scripts/prepare-game-data.sh Validate local classic files and create the ignored import ZIP
scripts/run-simulator-smoke.sh Deterministic iPad Simulator build, install, launch, and evidence path
scripts/verify-source.sh Source, configuration, touch, and optional local-data gate
BUILDING.md Fresh-clone build, signing, Simulator, and troubleshooting guide
docs/IPAD_SETUP_AND_CONTROLS.md Physical-iPad setup, safe updates, controls, and acceptance checklist
docs/STATUS.md Implementation evidence and current boundaries
docs/TESTING.md Simulator and physical-device test matrix

Generated source state, build directories, app products, prepared game-data archives, and user saves are local-only and ignored.

Feedback and contributing

Use GitHub Issues for reproducible gameplay or platform defects. Include the DaggerPad commit, iPad model, iPadOS version, and exact reproduction steps. Never attach or request game data, prepared archives, or saves containing copyrighted material.

Legal and acknowledgements

DaggerPad is an unofficial community project and is not affiliated with or endorsed by Bethesda Softworks, ZeniMax Media, Unity Technologies, Daggerfall Workshop, or the Vwing project. It does not provide the game, game downloads, or prepared playable data.

This project builds on Daggerfall Unity, Vwing's mobile work, Unity, Native File Picker, and their contributors. All projects, copyrights, and trademarks belong to their respective owners.

About

The Elder Scrolls II: Daggerfall via Daggerfall Unity, rebuilt for iPad.

Resources

Stars

7 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages