Skip to content
NX Native

SteamWorld Dig 2

Other engines0100CA9002322000
SteamWorld Dig 2 feature illustration: original artwork for the nxnative notes
Title ID
0100CA9002322000
Tested build
4.1.1
Nintendo SDK
3.4.0
Engine
Image & Form's own engine (SteamWorld)
Graphics API
NVN

Build this game

Keep [0100CA9002322000] in your file names, put the base game, update and DLC in one folder and run the script. Follow the build guide, then the sideloading guide. Needs an iPhone 15 Pro or newer, or an M1 iPad or later.

Technical notes

The project's own record of bringing this game up: what its profile needs and why, what was found and what is still open.

Update 4.1.1 (v196608), SDK 3.4.0, on NVN (18 shaders, BNSH files). Modules main and sdk. Image & Form's own engine (the SteamWorld series' engine, the one SteamWorld Heist: Ultimate Edition runs on), with its shaders in a zip .impak archive in RomFS. SDK 3.4.0 is the oldest in the games table. The standard host and rewriter run this build with no game-specific fix: no shader overrides, rewriter cuts or host changes. The profile is the NSP script's provisional one, unchanged apart from its comments and app category (What it needs). Only this update is registered in the profile.

On the Mac (2026-10-29, a short gameplay check, as for the SteamWorld Heist games): the title, a new game (slot 1, Normal), the opening on the cliff, then the first stretch of desert: walking, jumping and the tutorial prompts (walk, jump, wall jump), at 60 fps (frame time p50 16.67 ms, GPU p50 about 1.5 ms at 1080p) with audio rendered (choppy until the audio fix in Found on this game) and no [RED] line from the game. The game saved after the new game started; in a second run the title listed the slot ("Game 1") and Continue loaded it. The unsigned IPA is built with the frame rate counter but not tested on an iPhone.

What it needs

Setting Where Why
3.25 GB layout: mem_reserve 0x100000000, mem_alias 0x10000000, mem_stack 0x10000000, app_pool 0xCD500000 game.tsv the provisional layout, which holds: main sets a heap of at most the pool − 64 MB
sys_resource 0x0 game.tsv the NPDM declares 0 MB of system resource: IsVirtualAddressMemoryEnabled is false, as on Horizon
modules main sdk game.tsv main imports only from sdk; the game has no movie decoder (its cutscenes are textures, .bntx.z)
shader_groups (one per RomFS folder) game.tsv the provisional guess, kept: every shader is in data01.impak at the RomFS root, which no group names, so all 18 are in the other packages
pad_layout (default, simple) the 2D virtual pad; the left stick walks, B jumps, A confirms

Files

  • RomFS: 412 files, 0.15 GB: Audio/ (224 WAV sounds, 29 Ogg music files), Atlases/, Characters/, Textures/, Cutscenes/ as .bntx.z, Fonts/, Language/ (en-US, fr, de, es, it, ru), and data01.impak (a zip archive) at the root.
  • The save holds savegame_000.dat at its root.

Shaders

  • Current: 18 distinct shaders (12 pixel, 6 vertex) from the .bnsh files in data01.impak (Shaders/BasicEffect_*), all translated for the Mac.
  • Open: the prewarm list (pso_manifest.tsv) is empty. The first Mac boot compiled 3 pipeline bases (126 ms, off the submit thread) by the title; a list recorded through the title and the first area would spare the iPhone's first start those waits.

Memory

  • The process footprint stayed under 1 GB (703 MiB in the first area).

On the Mac

  • After the NSP script's --platform mac build, its printed command runs the game; with the window covered add DM_PRESENT_LINK=0 so DM_CTL screenshots still come.
  • The title comes about 15 s after start. With a fresh save: A (Start Game), A (slot 1), A (Normal), then A through the opening's lines (about six presses) gives control. Left stick right walks east, B jumps.
  • Single frames of 25–260 ms come at scene changes (the title, the new game's load). In the first area a single frame of about 45 ms came every 10–25 s with no pipeline, shader library or texture upload in it (Open).
  • Every frame takes one write-protection fault for the game's writes beside a packaged texture, which the host protects again without a re-upload (writes beside a texture); no re-uploads came of it.

Found on this game

Otherwise it runs on mechanisms found on other games, including SDK 3.4.0's NVN and services.

Open

  • iPhone: the IPA is built but not tested.
  • The empty prewarm list (Shaders).
  • The single 45 ms frames in the first area: cause unknown (not pipelines or uploads; the game's own work or a host wait was not told apart).
  • Twice the host's audio watchdog logged [RED] audio #0: the device has not called back for 2xx ms (once at boot, once at a Mac output-device change) and restarted the AudioUnit; both times the game's frames took 50 ms until it restarted, which suggests the game waits on the audio renderer each frame (not confirmed). The same line is recorded on other games (Baba Is You, Sea of Stars).
  • Only the first minutes were played; digging, the mines, the town, the other languages are untested.

These notes are republished from the nxnative repository under its MIT license (license and attribution). The original, which may be newer, is the game's notes on GitHub. This site hosts no game files.

More Other engines games