Skip to content

Releases: Codex64ai/daggerfall-unity-ios

Pre-Alpha 0.1.7 — Icon, graphic & button improvements

Choose a tag to compare

@Codex64ai Codex64ai released this 25 Aug 01:50

Pre-Alpha 0.1.7 for iPad and iPhone. Unsigned IPA — sideload with AltStore, SideStore or
Xcode. You still need your own Daggerfall arena2 folder; see README-iOS.md for setup.

This release is about how the touch HUD looks, plus three buttons that were missing.

Every custom icon redrawn

All 21 illustrated icons were regenerated and replaced. The old set never quite looked like
Daggerfall, and measuring it against the game's own ART_PAL.COL showed why: 39.7% of its
pixels sat above value 200
— a specular blowout that 1996 VGA item art simply doesn't have.
The art was being asked for it directly, with terms like "thick dark outline", "high contrast"
and "bright highlights". Those are modern game-icon conventions. The new set describes the
digitized painted look of the real thing instead.

Every icon is then conditioned to the house style measured off the shipped art — a 56×56
native grid
, hard pixel edges with no anti-aliasing, and quantisation to a sampled
palette. Each one now lands at 24–58 colours, against a house range of 51–82.

The two 4-colour placeholders, btn_menu and btn_pause, are real art at last.

Joysticks are drawn, not generated

The ring and knob are geometry rather than illustration — the knob has to read as concentric
with the ring no matter where you drag it. Image generation can't deliver that: the generated
ring measured aspect 1.041, visibly tilted, and the knob was too big to sit inside it.

Both are now computed analytically on the same 56×56 grid — true circles, knob radius 16
against ring inner radius 18.5, giving 2.5 px of clearance. This also retires the old knob,
which was the single worst-matching asset in the set at 852 colours.

Three missing buttons

  • Character sheet — opens your character record, in both classic and non-classic modes.
  • Interaction mode — cycles Grab → Info → Talk → Steal. Steal is how you pick a lock on
    touch: cycle to it, then tap the door with the action button.
  • Automap — non-classic fullscreen had no way to open the dungeon map. It does now.
    (The travel map is unchanged; it already worked.)

Tapping a locked door you can't open now shows a proper Daggerfall-styled message instead of
doing nothing.

Known rough edges

Five icons are weaker than the rest and are already queued for another pass:
btn_combat_off reads faint, btn_back looks more like a crescent than an arrow,
btn_crouch goes murky at small size, btn_jump reads as a bird rather than a boot, and
rest / map / sheet are three rolled-parchment shapes that can be confused in a row.

Mods remain loose-file only — .dfmod code mods can't run on iOS, since IL2CPP has no
runtime compiler. See README-iOS.md.

Pre-Alpha 0.1.6 — Archery, aiming & diagnostics

Choose a tag to compare

@Codex64ai Codex64ai released this 24 Aug 19:57

Archery, aiming, and diagnostics. Same binary that passed on-device testing.

Bows work properly now

Bows used to fire continuously while you tried to aim. Two things were wrong at once.
Daggerfall drives a bow from the attack button being held rather than from a swing, and
the touch layer kept that action held briefly after every look-drag so that a quick flick
would still register as a sword swing. With a bow that made aiming itself the trigger -
line up a shot, and an arrow left on its own. On top of that, the drawback setting was off
by default, which fires the instant an attack starts, so there was no draw to hold at all.

Archery now works the way a bow should:

Hold anywhere on the view to draw the bow. Keep holding and move to aim - with the same
finger, or the look stick. Lift your thumb to loose the arrow.

No button, nothing to learn. A brief tap will not fire, so incidental touches are safe, and
melee is untouched - swords still swing by swiping. Bow drawback is switched on for you;
Daggerfall's own Settings > Controls still owns it if you prefer click-to-fire.

One crosshair

There were two: Daggerfall's crosshair, and a small square the touch layer drew. In
fullscreen they sat almost on top of each other; with the classic bar docked they pulled
apart and it became obvious. The extra one is gone - and the Crosshair setting now
actually turns the crosshair off, which it could not before.

Diagnostics

Two small text logs now appear in the app's Documents folder, alongside arena2:

  • session-log.csv - a line every 30 seconds with frame time, fps, battery and memory.
    Useful for spotting whether long sessions degrade. About 32KB for three hours.
  • controller-unknown-buttons.txt - only appears if your gamepad sends a button this port
    does not recognise. If your controller has a button that does nothing, send us this
    file
    - it is the fastest way to get that pad properly supported.

Both are plain text and safe to delete.

Also

README-iOS now documents the 0.1.5 interface work (per-icon layout editing, separate
layouts for fullscreen and classic mode, the classic interface bar) and the log files. For
anyone building the fork, UPSTREAM-PATCHES.md inventories exactly what it changes in
Daggerfall Unity's own files and how to rebase it.

Carried forward

Everything from v0.1.5: classic bar touch support, per-mode touch layouts, per-icon
customisation, controller menu clicks on the face buttons, fast-travel and keyboard fixes,
loose-file mod support.

Unsigned IPA; free-Apple-ID sideloads expire after 7 days. Requires your own copy of
Daggerfall's arena2 - never included.

Pre-Alpha 0.1.5 — Classic UI control tweaks

Choose a tag to compare

@Codex64ai Codex64ai released this 24 Aug 03:33

Classic UI control tweaks. Same binary that passed on-device testing.

This release is about playing with the classic interface bar - the recreation of
Daggerfall's original bottom HUD (Large HUD, docked, in DFU's settings). Until now it
was pure decoration on iOS; the whole release makes it a real way to play.

The classic bar responds to touch

Tap any icon on the bar and it works: inventory, map, rest, options, spellbook, use
magic item, transport, sheathe weapon, the interaction-mode icon (cycles
steal/talk/grab/info), and the portrait (opens the character sheet). Previously the
engine required a desktop "release the mouse cursor" mode before accepting clicks on
these, so they did nothing on a touchscreen.

This works with a controller connected too - the bar stays tappable even when the
touch overlay has stood down for the gamepad.

Taps route precisely: a look-drag that strays across the bar is not a click, and a tap
on a bar icon can never grab a joystick or turn the camera.

The touch overlay adapts to the bar

  • With the bar docked, every touch control lifts above it automatically, and controls
    the bar already provides (weapon, pause, inventory, map, rest) start hidden.
  • Hidden is a default, not a rule. Any control can be shown or hidden in any mode -
    the overlay MAP button jumps straight to the travel map, so you can have it alongside
    the bar's map icon if you want it.
  • The TUNE settings panel now claims the whole screen while open (the bar was covering
    its bottom rows).

Two layouts, two modes

Fullscreen and classic mode now keep separate touch layouts. Arrange each mode
however you like; switching back and forth restores each mode's own arrangement
exactly. Reset all only resets the mode you are in. (This also fixes a bug where
editing the layout in classic mode corrupted saved positions and icons crept up the
screen on every mode switch.)

Every icon moves on its own

The action row and menu drawer are no longer grouped blocks: every icon - weapon,
spell, jump, crouch, pause, inventory, status, map, rest, and the TUNE gear - can be
dragged, resized and hidden individually, per mode. Layout editor fixes ride along:
icons can no longer be pushed off-screen or under the editor toolbar, the drawer stays
open (and visible) while arranging, and hide/show state is always truthful.

New defaults

Both modes ship hand-tuned default layouts. Classic mode starts minimal: compact
sticks tucked above the bar, activate/crouch/jump under the right thumb, menu beside
them, settings and travel map at the top right - the bar itself does the rest. Existing
layout customisations are preserved; use TUNE > Edit layout > Reset all in each mode to
adopt the new defaults.

Carried forward

Everything from v0.1.4: controller menu clicks on the face buttons, fast-travel search
and soft-keyboard fixes, loose-file mod support.

Unsigned IPA; free-Apple-ID sideloads expire after 7 days. Requires your own copy of
Daggerfall's arena2 - never included.

Pre-Alpha 0.1.4 — Controller menus, touch layout & fixes

Choose a tag to compare

@Codex64ai Codex64ai released this 23 Aug 14:38

Controller, touch, and layout update.

Controller: menus now use the face buttons

Button Menu action
A Select (left click)
B Back / close window
X Right click
Y Middle click

This fixes a real bug, not just a preference: Daggerfall Unity's stock UI-pointer
bindings sit on joystick buttons 0-3, and on an Xbox controller under iPadOS nothing
useful lives there - button 0 is what Start emits, and 1-3 map to no physical control.
So Start acted as the click button, A did nothing, and right-click and window-close were
unreachable from a controller at all. All four now sit on the measured face buttons,
applied automatically whenever a controller connects. Default for everyone; rebindable
in Settings > Controls > Joystick.

Touch: new default layout

The touch HUD's default arrangement is now one tuned on a real iPad over actual play,
replacing the original authored guesses:

  • Action bank runs along the bottom centre, with COMBAT at its left end and MENU at its
    right, where both thumbs can reach without leaving the sticks.
  • ACTIVATE sits between the action row and the look stick.
  • The menu drawer opens as a compact column tucked against the right edge.
  • Controls are a step smaller across the board - the old sizes crowded the look/swipe
    area. Every target still clears Apple's minimum touch size.

If you have already customised your layout, nothing changes - your edits always win.
TUNE > Edit layout > Reset all switches an existing install to the new defaults.

Carried forward

All of v0.1.3's fixes: fast-travel search and the soft keyboard with a controller,
loose-file mod support (textures, sounds, quests, books, iOS-built .dfmod packages),
and the controller probe.

Unsigned IPA; free-Apple-ID sideloads expire after 7 days. Requires your own copy of
Daggerfall's arena2 - never included.

Pre-Alpha 0.1.3 — Fast travel & keyboard fixes, loose-file mods

Choose a tag to compare

@Codex64ai Codex64ai released this 23 Aug 13:53

Bug-fix release. Same binary that passed on-device testing; if you sideloaded a debug
build from the last few days, this replaces it.

Fixed

Fast travel search works with a controller. The big one. Two bugs stacked: with a
gamepad connected the on-screen keyboard was suppressed entirely (it was gated behind a
touch-only check, but a gamepad cannot type - that left no input method at all), and even
once text arrived, pressing return did nothing, because the classic input prompt confirms
on a raw hardware key event that the iOS soft keyboard never produces. Return is now
forwarded as a real confirmation, so typing a location name and pressing return actually
searches.

The keyboard opens when you need it and stays closed when you don't. A window with a
text field brings the keyboard up automatically, once. Dismissing it sticks for as long as
that window is open, and the next prompt starts fresh. On the travel map's find prompt,
tapping the popup brings a dismissed keyboard back. (Tap-the-field-to-open was tried and
is impossible against Daggerfall's classic UI: an empty text box has a zero-width
clickable area - there is nothing to tap.)

Added

Loose files and mods load from the app's Documents folder - the same place arena2
goes. Folders are created on first launch with a readme: Textures/, Textures/Img/,
Textures/CifRci/, Sound/, Quests/, QuestPacks/, Books/, WorldData/, Mods/.
Anything you add takes precedence; anything you leave out falls back to the app's own
files, so partial packs are fine. Two texture bugs that broke this on iOS are fixed
(desktop-only DXT5 compression; a legacy audio loader that silently produced empty clips).

The sharp boundary, measured on a real device and not negotiable:

  • Mods containing C# code cannot run on iOS, ever. iOS compiles ahead-of-time; there
    is no way to execute downloaded code. This rules out most popular gameplay mods.
  • .dfmod packages from Nexus are refused - they are built for desktop platforms.
    Asset-only mods rebuilt for iOS load fine, and DFU's mod builder now has an iOS target.
  • Quest packs (plain text) and loose texture packs work as-is. Music replacement (.ogg)
    ships but is unverified.

See the "Mods and loose files" section of README-iOS for the full table.

Also

  • The controller probe (TUNE > Controller probe overlay) now debounces, so the phantom
    button pulse iPadOS emits during touches can no longer corrupt a reading.
  • Self test grew from 31 to 45 checks.

Unsigned IPA; free-Apple-ID sideloads expire after 7 days as usual. Requires your own
copy of Daggerfall's arena2 - never included.

Pre-Alpha 0.1.2 — Controller mapping

Pre-release

Choose a tag to compare

@Codex64ai Codex64ai released this 20 Aug 14:07

Full hardware controller mapping, built from measurements taken on device rather than
guessed. Two complete layers: a base layer, and a second layer while LT is held.

Base layer

Input Action Input Action
A Activate D-Up Character sheet
X Ready weapon D-Down Status
RT Swing weapon D-Left Automap
B Cast spell D-Right Travel map
Y Jump Start Pause
RB Switch hand L3 (stick click) Crouch
LB Autorun R3 (stick click) Transport

Hold LT

Input Action Input Action
LT + Y Inventory LT + D-Up Steal mode
LT + A Recast spell LT + D-Down Grab mode
LT + B Use magic item LT + D-Left Info mode
LT + X Notebook LT + D-Right Talk mode
LT + RB Logbook LT + Start Quicksave
LT + LB Run LT + RT Rest
LT + L3 Sneak LT + R3 Quickload

Holding LT suppresses the base action of any button that has an LT variant, so LT+Y opens
the inventory without also jumping. That comes from Daggerfall Unity's own combo-keybind
system, not a bolted-on input layer, so every combo also appears in
Settings > Controls > Joystick and can be rebound like any other binding. Everything is
applied as a secondary binding, so keyboard controls are untouched.

Why the old mapping felt scrambled

It bound JoystickButton0-JoystickButton9, the conventional face-button numbering. On an
Xbox controller under iPadOS that is wrong in an interesting way: nothing useful lives below
button 4. The d-pad is 4-7, shoulders 8-9, triggers 10-11, and the face buttons are
12-15
. So the old layout was mostly firing d-pad and shoulder actions.

Measured with the new on-device probe (v0.1.2-probe1), which also turned up:

  • Every control except the stick clicks reports as both a button and a duplicate axis,
    offset by one (Btn4 = Axis5 ... Btn15 = Axis16). This build binds the buttons.
  • Every axis rests at 0.00 on this controller - no trigger resting at -1, so no
    permanently-half-pressed trigger to design around.
  • Select / View is not mapped. It reports as JoystickButton0 and so does Start (which
    also reports its own button 16). Binding button 0 would either fire Select's action every
    time you paused, or bind the phantom button iPadOS pulses during touches. Rest and
    Quickload sit on LT + RT and LT + R3 instead.

Also in this release

  • The probe ships permanently, off by default: TUNE > Controller probe overlay. Turn it
    on before connecting a controller. If your controller maps wrongly, it will tell you
    exactly what your hardware reports.
  • Gamepad bindings are no longer written to KeyBinds.txt. Persisting joystick bindings to
    disk is what caused the original phantom-input bug, since every scene reload restored
    them. They are applied live on connect and removed on disconnect.
  • Unsigned IPA; free-Apple-ID sideloads expire after 7 days as usual.

Pre-Alpha 0.1.1 — PAUSE/Save menu button

Choose a tag to compare

@Codex64ai Codex64ai released this 20 Aug 01:03

Daggerfall Unity iOS — Pre-Alpha 0.1.1

Fix release on top of 0.1.0.

What's new

  • PAUSE button added to the MENU drawer. The pause options window (Save, Load,
    Exit, settings) was unreachable from the touch HUD — there was no on-screen control
    bound to Escape during gameplay. Tap MENU (three lines) → PAUSE to open it.
    New matching pixel-art icon included.
  • Drawer buttons slightly resized so all six (PAUSE, INVENTORY, STATUS, MAP, REST,
    TUNE) fit on screen.

You must supply the game data (not included)

Same as 0.1.0 — the app waits at the data screen until Daggerfall's arena2 folder
(~512 MB, ~1560 files) is on the device. Full copy steps (Mac/PC and iPad-only paths):
see README-iOS.md.

⚠️ If the folder came through iCloud Drive, make sure the files are downloaded, not
cloud placeholders — placeholders look like real files but are empty.

Installing (unsigned IPA)

The IPA is unsigned — sideload it with AltStore, Sideloadly, or Xcode. Free Apple IDs
give a 7-day signing window before you need to re-sign.

Known pre-alpha limitations

  • Mods are not supported (iOS platform restriction)
  • Tested on iPad Pro 11" (M4) only; other devices/iPhones untested
  • Save-file compatibility across pre-alpha builds is not guaranteed

Pre-Alpha 0.1.0 — Daggerfall on iPad & iPhone

Choose a tag to compare

@Codex64ai Codex64ai released this 19 Aug 21:31

Daggerfall Unity iOS — Pre-Alpha 0.1.0

The Elder Scrolls II: Daggerfall, playable entirely by touch on iPhone and iPad.

This is a pre-alpha: core gameplay is verified working on real hardware (iPad Pro 11"
M4, iPadOS 26) — exploration, two-handed touch combat, doors/NPCs/loot, the full classic
menu system, saving, cutscenes. Expect rough edges everywhere else.

Touch controls

  • Left stick — move (full tilt runs) · Right stick — camera, always and only
  • Swipe with a weapon drawn — attack; swipe direction picks the strike
  • Hand-and-ring button — activate doors/NPCs/loot (aims from the centre crosshair)
  • MENU drawer — Inventory, Status, Map, Rest, and TUNE (live sensitivity, swipe
    distance, control size/opacity, and a drag-anywhere layout editor)
  • Classic menus are direct touch; the keyboard appears for text fields; hold to skip videos
  • Hardware keyboards/controllers auto-hide the touch HUD

You must supply the game data (not included)

Daggerfall's assets remain Bethesda's copyright (the game is a free download, the data
is still theirs). Like upstream Daggerfall Unity, nothing is bundled:

The app launches without it but waits at the data screen until the arena2 folder
(~512 MB, ~1560 files) is on the device:

  1. Get Daggerfall free from Bethesda (or GOG/Steam) and locate the arena2 folder
    inside the install
  2. Install this app and launch it once (this creates its Files-app folder)
  3. Copy the whole arena2 folder into the app:
    • With a Mac/PC: connect the iPad → Finder (or iTunes on Windows) → your device →
      Files → Daggerfall Unity → drag arena2 in
    • iPad only: get arena2 into the Files app any way you like (iCloud Drive,
      Google Drive/Dropbox, a USB drive, or unzip a downloaded copy on-device), then in
      Files copy it to On My iPad → Daggerfall Unity
  4. Relaunch — the game finds arena2 and starts

⚠️ If the folder came through iCloud Drive, tap into it and make sure every file is
actually downloaded first — cloud placeholders look like real files but are empty, and
the game will fail at world load in a way that looks like a crash.

Installing the .ipa

The attached .ipa is unsigned — Apple requires every installed app to be signed,
so sideload it with your own (free) Apple ID using AltStore,
Sideloadly, or similar. Free-account signatures expire after 7 days; re-sideload to renew.
Building from source in Xcode (below) signs it the same way with less friction if you
have a Mac.

Building from source

Unity 2022.3.62f3 + iOS Build Support, then:
Tools → Daggerfall Mobile → Apply iOS Player SettingsBuild Touch HUD → Build for iOS
→ open in Xcode, set your team, Run. Full instructions in README-iOS.md.

Known pre-alpha limitations

  • Mods are not supported (iOS platform restriction)
  • Tuned on one device (iPad Pro 11" M4); other devices will want a TUNE pass
  • Haptics are iPhone-only (iPads have no Taptic Engine)
  • Long-session stability beyond ~15 minute tests is unproven
  • 23 documented platform findings in REVIEW.md — worth reading if you're porting
    anything to iPadOS

Built on Daggerfall Unity (MIT,
© Daggerfall Workshop). Daggerfall © Bethesda Softworks.