github cheemu21/kid-with-sword-remake ff10
FF10 (pre-release): Cool mode, steadier frame generation, amiibo through Shortcuts (includes FF8-FF9)

pre-release59 minutes ago

Pre-release: source code only. No IPA and nothing from the game are attached or in the repository. Build your own from your own dump of the game (base game + update v131072) with the steps in docs/games/kid-with-sword-remake.md, using the env file under "Build settings" below.

The Legend of Zelda: Ocarina of Time (Switch 2) as a native iPhone app, on top of nxnative.

From X9 to FF10: everything that changed

The X series ended with X9, the first build with frame generation. FF is a new line: it starts from the current nxnative main (303 changes newer than the X series' base) and brings the X series' iPhone features over one at a time. These notes cover everything from X9 to FF10. FF2, FF3, FF5, FF6, FF8 and FF9 were test builds; all their changes are in FF10.

Highlights

  • Frame generation that never falls back to 30. The game draws 30 frames a second, the screen shows 60, and it keeps running through dropped frames instead of switching off.
  • A steadier in-between picture on camera turns. Sharper motion tracking and no more blocky squares.
  • Native widescreen. The game fills the iPhone screen at about 19.5:9 with nothing stretched: 3D, cameras and HUD all follow the screen's shape.
  • Cool mode. A new launcher switch for longer play with less heat.
  • Amiibo. Virtual amiibo from an in-game list, real figures through the iPhone's NFC reader, and a Shortcuts helper for LiveContainer.
  • A smooth title screen and opening.
  • Less CPU and GPU work a frame, and fewer stalls when new areas load.

Frame generation

Launcher: Frame generation, offered with Frame rate 30 fps.

  • Never falls back to 30 (FF4). X9 to FF3 turned frame generation off whenever frames kept dropping, so the picture flipped between 60 and 30 (8 times in 90 seconds in one test). It now keeps running.
  • A late frame still gets its in-between frame (FF4), so a slow moment reads as a slower step, not a stutter.
  • Sized for the phone (FF7). In-between frames are made at a 1440x810 pixel budget and scaled back up. If frames keep dropping and frame generation itself is the heavy part, they step down to 1200x675, then 960x540.
  • Keeps its full size when the game is the slow part (FF8). Earlier builds made the in-between frames smaller whenever frames dropped, even when the game's own frame was late, which blurred the picture for nothing. Now it steps down only while its own GPU time averages 8 ms or more (DM_FRAMEGEN_HEAVY_MS).
  • Sharper motion on camera turns (FF8). Each motion vector is refined to about 2 pixels instead of 8, so the ground and walls stay steadier while the camera moves. In the frame generation test's camera pans, the in-between frame's error against the true halfway picture fell 35-65 %, and the share of the picture held at 30 fps fell from 7-16 % to 0.1-0.2 %. Objects that move on their own can smear a little more.
  • No more blocky squares (FF4, FF8). X13 to FF3 pasted squares of the real frame over spots where motion wasn't trusted, and they stepped at 30 fps when the camera turned. Only the still HUD now comes from the real frame. DM_FRAMEGEN_PASTE=1 brings the old squares back.
  • The steady HUD and motion found from the picture, from the X line (X10 to X14).
  • log.txt shows frame generation's GPU time, its size steps and why each one happened.

Heat and performance

  • Cool mode (FF10). New launcher switch in the Game section, off by default. On, it draws the 3D at 50 % (whatever Render scale says) and frame generation's in-between frames at half size. On a Mac, on the same route, GPU work per frame fell from 17-20 ms to about 13 ms (25-30 % less), and each in-between frame from about 3 ms to 1.5 ms, still at 30 fps. The picture is softer; HUD and text stay sharp. The Render scale row shows "· Cool mode" with the size actually used. Most of the heat at 30 fps with frame generation comes from the GPU, so this keeps the phone at full speed longer.
  • Less CPU work per draw (FF8). The game's texture tables (about 264 KB each, rewritten about 16 times a frame) now reuse their buffers instead of getting new ones. On a Mac that's about 11 % fewer instructions per draw, long frames right after an area load fell from 103 to 6, and dropped frames from 26 to 7.
  • The game's upscaler is drawn by MetalFX (FF2). The game's own chain of upscaling shaders cost the phone 5-10 ms of GPU time a frame.
  • The game's compute work runs side by side where the game allows it (FF2): about 2 ms less a frame in Kokiri Forest on a Mac.
  • Fewer pipeline stalls in play (FF2, FF3). About 1,700 pipelines recorded in play are prepared in advance. The offline pipeline archive holds 36,774 render pipelines (3,409 of them needing a vertex layout) and 4,125 compute pipelines. Pipelines build on two lanes, and one that couldn't be built isn't looked up again at every draw.
  • Installs with LiveContainer. The pipeline archive is packed so LiveContainer can sign the app.

Widescreen

  • Wide view, on by default (FF4). The game fills the iPhone screen at its own shape (about 19.5:9) with no black bars. The launcher's Wide view row turns it off; an iPad keeps 16:9.
  • Nothing stretched (FF7). FF4 widened the screen but the 3D still used the game's 16:9 shape, so Link and everything else looked wide. The 3D cameras now use the screen's real shape, and hearts, buttons and menus keep their own 16:9 proportions.

Amiibo

  • Pick an amiibo from the in-game menu (FF7). The gamepad's menu button › Amiibo lists every figure the game accepts. None takes it away.
  • Scan real figures with the iPhone's NFC reader (FF7), in installs signed with the NFC permission. Only the figure's ID is read; nothing is written to it.
  • The daily amiibo limit is off (FF7).
  • Tap a real amiibo with Shortcuts (FF10). Inside LiveContainer, iOS checks LiveContainer's signature, which has no NFC permission, so the scan can't run there. The Amiibo menu now shows Tap a real amiibo instead. Pick a figure, and the game copies its ID and shows the Shortcuts steps with the exact folder to save into, so you can set up a tap-to-load automation once per figure. Why not scan here? says what this install is missing.

Title screen and movies

  • Light movie mode (FF7). The title screen and opening are videos, and the game ran an AI filter on every frame of them: about 15 ms of GPU time a frame, so they stuttered on the iPhone and the Mac. The video is now shown as it is, upscaled normally, at well under 1 ms a frame. It may look a little softer. DM_NDVE_LITE=0 brings the filter back.

Launcher

  • Cool mode (FF10), above.
  • Render scale shows the resolution in use (FF7), for example "1432 × 658 (60 %)", including Wide view's width, and "· Cool mode" when Cool mode sets it.
  • Render scale slider from 0.25 to 1.0 (Potato at 0.25, 0.6 by default), from the X line. A value in env.txt is the slider's starting point, and you can still change it.

Carried over from the X series

  • Touch controls: the Native layout, the Forest theme and the Ocarina arrangement.
  • A steady 30 fps on the iPhone (V17).
  • Microphone: the game hears the phone's microphone, so the Ocarina's voice controls work.
  • A fix for running out of GPU memory at a scene change.

From nxnative main

  • The game draws its full docked picture (graphics scale tier 0).
  • A cliff beside the Castle Town wall no longer goes dark for a frame when the game streams in a sharper texture.
  • Cheaper texture re-uploads: only the images the game wrote are sent again.
  • Fixes for blending, shader compiler crashes and shared memory pages.
  • Cloud saves ask which save to keep when both changed.

Build by build

Build What it brought
FF2-FF3 The game's upscaler drawn by MetalFX, compute side by side, the pipeline archive with vertex layouts, prepared pipelines, LiveContainer-signable archive
FF4 Frame generation that never falls back to 30, no pasted squares, Wide view on by default
FF5-FF7 3D and HUD unstretched in Wide view, amiibo list and NFC scan, daily limit off, light movie mode, the 1440x810 frame generation budget, Render scale shows its resolution
FF8 Frame generation keeps its size when the game is the slow part, motion refined to 2 px, no pasted squares on camera turns, texture-table buffers reused
FF9 Cool mode
FF10 Tap a real amiibo with Shortcuts

Build settings

DM_UPSCALER=metalfx
DM_FPS_HOLD=off
DM_THERMAL_CAP=0
DM_QOS_MAP=1
DM_QOS_EDGES=45,59
DM_NVN_GPUPROF=every:600
DM_GUEST_FILE=1

Status

  • FF8 on an iPhone 18 Pro (30 fps with frame generation, render scale 0.6, Wide view): 30 fps held with 0-1 dropped frames per 300 for long stretches, and frame generation never stopped. The phone reached thermal state 1 (fair) after about a minute. After about 2½ minutes iOS lowered the CPU clock from about 3.9 to 1.6 GHz, and frames dropped for about 20 seconds before the game settled at about 29.8 fps. The GPU was busy about 21-24 ms of every 33 ms frame. That's what Cool mode is for.
  • FF9 and FF10 haven't been played on a phone yet. Cool mode and the Shortcuts helper were checked on a Mac and in code; the Shortcuts folder text was checked against a real LiveContainer path.
  • To scan real amiibo with NFC, sign LiveContainer or Strata with a certificate that includes NFC (the NFC tag-reading permission, usually from a paid developer account or a signing service). The game runs inside that app, so iOS checks its signature, not the game's. Otherwise use the Amiibo list or Tap a real amiibo.
  • A few short freezes (up to about half a second) when the first area loads its textures.
  • Keep at least 15 GB free on the phone: the game stops itself under 5 GB free.

Credits

Not affiliated with Nintendo.

Don't miss a new kid-with-sword-remake release

NewReleases is sending notifications on new releases.