Skip to content

Releases: xinerqu/ns2ios-shell

Game-free shell 20261104-02c91cd-793bd86

Choose a tag to compare

@github-actions github-actions released this 04 Nov 16:54

Source: upstream 02c91cd4cc7abd86d7e2e28b81e98fa19d76b2ec
Fingerprint: 46af309eab13515b
Smoke test: passed — a real game was packed with this shell on Windows before publishing.
冒烟测试:通过——发布前已用真实游戏在 Windows 上完整打过一次包。

What's new in this release

A game's own upscaler can be handed to MetalFX, and add-on content is finally seen by the game.

  • MetalFX for a game's own upscaler now really works. Donkey Kong Bananza upscales its frame with its own network:
    in handheld mode it renders 960×540-1280×720 and upscales to 1080p, at 3.5-5 ms a frame. With Game's upscaler:
    MetalFX
    the launcher's row does what it says, and that step costs about 1 ms instead. The look changes (Apple's scaler
    instead of the game's own network), so it stays a choice, and the default is still the game's.
  • DLC is seen by the game. A dumped add-on was packed under the wrong index, so the game was told it had no add-on
    content at all -- the DLC was in the package and invisible. It is reported now, and the package no longer carries the
    same DLC twice.
  • More memory for the game. Two tables that tell the host how far each shader reads its constant buffers are taken
    again, so only the shaders that need a whole 64 KiB buffer get one. Upstream also shares placement sparse tiles by
    physical memory: Mario Kart World's terrain takes a third of the GPU memory it did.
  • Two more rows on the settings screen. A package built from a dump or a NUP (no control data) now offers the Game
    language row, with a note that some of the languages may not be in the game; games with screen-shape stubs (Animal
    Crossing: New Horizons, Breath of the Wild) get the Picture shape row.
  • Super Mario 3D All-Stars is listed as not supported. It is one application holding four programs and this shell
    runs one program per app; the packer stops on its profile before it extracts anything instead of building a package
    that cannot start its games. Its Super Mario 64 and Sunshine are no longer listed on their own.
  • 140 games, up from 134: Kirby Star Allies, DAVE THE DIVER, Mario Kart World and Mario Tennis Fever (Switch 2), and
    Mario & Luigi: Brothership.

Files

Asset What it is
ns2ios-packer.exe The packer window for Windows: pick a folder, press Start.
shell-<date>-<commit>.zip The shell: an unsigned iOS app with no game content in it.
nxnative-windows-tools.zip nx_extract.exe, dmsh_xlate.exe, spirv-cross.exe, glslangValidator.exe, zstd.exe
<version>-supported.tsv The supported games, with title IDs and the version each was verified on.
<version>-contents.tsv What is inside the shell zip, with sizes.

Use it

You only need ns2ios-packer.exe. Run it, choose the game's folder (or its .nsp / .xci), point at prod.keys, press
Start — a Switch 2 dump needs no keys. On its first run the packer fetches the shell and the Windows tools from the newest
release itself, and Check and download updates them; the other four assets are here for packing from the command line.

Credits

Built on seedds' nxnative (MIT) — the rewriter, the translation chain, the host
and the game profiles are its work. The native-execution approach and the "shell" route come from jhaizhou-ops'
d2r-mobile (MIT). Two separate projects by two different authors.


本版更新

游戏自带的上采样器可以交给 MetalFX 了,追加内容也终于被游戏认到。

  • 交给 MetalFX 的那个开关,现在真的生效。 《大金刚 蕉力全开》用自己的网络放大画面:掌机模式渲染 960×540–1280×720
    再放大到 1080p,每帧 3.5–5 ms。设置页把「游戏的上采样器」选成 MetalFX 之后,这一步约 1 ms。画面会变(Apple 的缩放器
    替掉游戏自己的网络),所以仍然是玩家自己选,默认还是游戏自己的那套。
  • 追加内容(DLC)现在游戏认得到。 以前 dump 里的 DLC 被打成错误的序号,游戏被告知"一个都没有"——东西在包里却是隐形的。
    现在会上报,而且包里不会再装两份同样的 DLC。
  • 给游戏留出更多内存。 告诉宿主"每个着色器读常量缓冲读到哪"的两张表恢复被接受,于是只有真正需要 64 KiB 的着色器才独占
    一块;上游还把稀疏 tile 改回按物理内存共享——《马力欧赛车 世界》的地形少占三分之二的显存。
  • 设置页多了两行。 从 dump 或 NUP 打包(没有 control 数据)现在也有「游戏语言」一行,并注明其中一些语言可能游戏里没有;
    带换屏桩的游戏(《集合啦!动物森友会》《旷野之息》)多了「画面形状」一行。
  • 《超级马力欧 3D 收藏集》标注为不支持。 它是一个应用装四个程序,而本项目的壳一个应用只跑一个程序;打包器读到它的
    profile 就停,不会产出一个起不来游戏的包。它的《马力欧 64》和《阳光》也不再单列。
  • 140 款(上一版 134):《星之卡比 新星同盟》《DAVE THE DIVER》《马力欧赛车 世界》《马力欧网球 狂热》(后两款是
    Switch 2)、《马力欧&路易吉 兄弟齐航》。

文件

资产 是什么
ns2ios-packer.exe Windows 上的打包器界面:选文件夹、按开始。
shell-<日期>-<提交>.zip 壳:不含游戏内容的未签名 iOS 应用。
nxnative-windows-tools.zip nx_extract.exe、dmsh_xlate.exe、spirv-cross.exe、glslangValidator.exe、zstd.exe
<version>-supported.tsv 支持的游戏,含 title ID 与已验证版本。
<version>-contents.tsv 壳 zip 里都有什么,含大小。

怎么用

只需要 ns2ios-packer.exe。 运行它,选游戏文件夹(或 .nsp / .xci)、填 prod.keys、按开始;Switch 2 的 dump 不要
keys。首次运行时它会自己从最新发布里取壳和 Windows 工具,以后按「检查并下载」就能更新——另外四个资产是留给命令行打包用的。

致谢

基于 seedds 的 nxnative(MIT)——改写器、翻译链、宿主与游戏 profile 都是它的
成果。原生执行方案与「壳」路线来自 jhaizhou-ops 的 d2r-mobile(MIT)。
它们是两个独立项目、两位不同作者。

Game-free shell 20261103-ad7af9c-4556df0

Choose a tag to compare

@github-actions github-actions released this 03 Nov 19:26

Source: upstream ad7af9cb34f5728bb0704c619ed12ebad9e6cf9a
Fingerprint: 87edc25affc91f40
Smoke test: passed — a real game was packed with this shell on Windows before publishing.
冒烟测试:通过——发布前已用真实游戏在 Windows 上完整打过一次包。

What's new in this release

Switch 2 games get their settings screen, and Bananza runs a little lighter.

  • A settings screen for Switch 2 games. A Switch 2 package used to start straight into the game. It now opens on the
    same page as every other game: console or handheld mode, frame-rate counter, performance HUD, rumble and touch
    feedback, and the cheats panel.
  • Donkey Kong Bananza: its depth prepass gathers 480 mesh draws into one dispatch, 1.50 → 0.67-0.72 ms a frame on an
    M1. With the per-segment GPU timestamps of the last release, its dynamic resolution now sees real GPU time.
  • The picture follows the screen. Portrait, a half-folded iPad window and an external display put the picture above
    the controls, it can Fill the screen, and a gear opens an in-game menu whose settings take effect at once.
  • A package built after a shell update always carries that shell's shader fixes. It used to be possible for a pack
    to reuse the previous build's shaders without saying so.
  • 134 games: Hyrule Warriors: Age of Imprisonment joins as a Switch 2 title.

Files

Asset What it is
ns2ios-packer.exe The packer window for Windows: pick a folder, press Start.
shell-<date>-<commit>.zip The shell: an unsigned iOS app with no game content in it.
nxnative-windows-tools.zip nx_extract.exe, dmsh_xlate.exe, spirv-cross.exe, glslangValidator.exe, zstd.exe
<version>-supported.tsv The supported games, with title IDs and the version each was verified on.
<version>-contents.tsv What is inside the shell zip, with sizes.

Use it

Choose the game's folder, point at prod.keys, press Start. A Switch 2 dump needs no keys.

Credits

Built on seedds' nxnative (MIT) — the rewriter, the translation chain, the host
and the game profiles are its work. The native-execution approach and the "shell" route come from jhaizhou-ops'
d2r-mobile (MIT). Two separate projects by two different authors.


本版更新

Switch 2 的游戏有设置页了,大金刚也轻快了一点。

  • Switch 2 的游戏现在有设置页:以前打出来的包直接进游戏,现在和其他游戏一样先到设置页——主机/掌机模式、帧率计数、
    性能 HUD、震动、触感,还有金手指面板。
  • 《大金刚 蕉力全开》:深度预通道把 480 个网格 draw 合并成一次 dispatch,M1 上每帧 1.50 → 0.67–0.72 ms。
    配合上一版的分段 GPU 时间戳,它的动态分辨率现在看到的是真实的 GPU 耗时。
  • 画面跟着屏幕走:竖屏、半折的 iPad 窗口和外接显示会把画面放到按键上方,可以铺满屏幕;齿轮按钮打开游戏内菜单,
    改完立即生效。
  • 壳更新之后打的包,一定带着这一版壳的着色器修复:以前有可能悄悄沿用上一次构建的着色器。
  • 134 款:《塞尔达无双 封印战记》作为 Switch 2 作品进表。

文件

资产 是什么
ns2ios-packer.exe Windows 上的打包器界面:选文件夹、按开始。
shell-<日期>-<提交>.zip 壳:不含游戏内容的未签名 iOS 应用。
nxnative-windows-tools.zip nx_extract.exe、dmsh_xlate.exe、spirv-cross.exe、glslangValidator.exe、zstd.exe
<version>-supported.tsv 支持的游戏,含 title ID 与已验证版本。
<version>-contents.tsv 壳 zip 里都有什么,含大小。

怎么用

选游戏文件夹、填 prod.keys、开始打包;Switch 2 的 dump 不要 keys。

致谢

基于 seedds 的 nxnative(MIT)——改写器、翻译链、宿主与游戏 profile 都是它的
成果。原生执行方案与「壳」路线来自 jhaizhou-ops 的 d2r-mobile(MIT)。
它们是两个独立项目、两位不同作者。

Game-free shell 20261103-07ca3ef-9a1e889

Choose a tag to compare

@github-actions github-actions released this 03 Nov 12:00

Source: upstream 07ca3efc923b22acd3eb9560fef5f981d8802de1
Fingerprint: 31b800399e13d5b9
Smoke test: passed — a real game was packed with this shell on Windows before publishing.
冒烟测试:通过——发布前已用真实游戏在 Windows 上完整打过一次包。

What's new in this release

The shell catches up with upstream, and the packer now says why a pack stops.

  • Three more games. The Legend of Zelda: Skyward Sword HD, Princess Peach: Showtime! and Pokémon Pokopia are in the
    list, 133 games in all. Pokopia is a Switch 2 title, and its shaders are what the first launch spends its time on.
  • AV1 cutscenes play. Where the phone has no AV1 decoder in VideoToolbox, the movie is decoded by dav1d instead of
    stopping at a black screen.
  • A large package no longer sits in memory whole. Pokopia's 4.25 GB shader package made every worker cost 75 ms to
    start, one shader at a time; the builder now reads each record from the file when it needs it.
  • Older prod.keys stop the pack at once, naming the master key that is missing and the firmware it came with —
    instead of failing minutes later, or, for a compressed NSZ, after writing an extraction that unpacked and then made no
    sense.
  • A kept work folder stops growing. The per-shader cache entries the current translation chain did not use are
    removed; upstream measured 906,286 unused entries, 70 GB, on Tears of the Kingdom.
  • Fixes carried over from upstream: Xenoblade Chronicles 3's cutscenes no longer alternate brightness every frame,
    Splatoon Raiders' lit pass is much faster on Apple silicon, and the launcher's cloud-save folder button opens one
    picker per tap instead of one per row.

Files

Asset What it is
ns2ios-packer.exe The packer window for Windows: pick a folder, press Start.
shell-<date>-<commit>.zip The shell: an unsigned iOS app with no game content in it.
nxnative-windows-tools.zip nx_extract.exe, dmsh_xlate.exe, spirv-cross.exe, glslangValidator.exe, zstd.exe
<version>-supported.tsv The supported games, with title IDs and the version each was verified on.
<version>-contents.tsv What is inside the shell zip, with sizes.

Use it

Same as the last release: choose the game's folder, point at prod.keys, press Start. Nothing in the flow changed.

Credits

Built on seedds' nxnative (MIT) — the rewriter, the translation chain, the host
and the game profiles are its work. The native-execution approach and the "shell" route come from jhaizhou-ops'
d2r-mobile (MIT). Two separate projects by two different authors.


本版更新

壳跟上上游,打包器开始说明「为什么打不下去」。

  • 又是三款游戏:《御天之剑 HD》《碧姬公主 表演时刻!》《Pokémon Pokopia》进表,一共 133 款。Pokopia 是 Switch 2 作品,
    首次启动的时间基本都花在编译它的着色器上。
  • AV1 过场能播了:手机里的 VideoToolbox 没有 AV1 解码器时,影片改由 dav1d 解码,不会再卡在黑屏。
  • 大包不再整个塞进内存:Pokopia 那份 4.25 GB 的着色器包,以前让每个 worker 的启动都要 75 ms、只能一个一个来;
    现在按需从文件里读记录。
  • prod.keys 比游戏旧时立刻停,直接说缺哪个 master key、它是哪个固件带来的——不再等几分钟后才失败,
    也不再出现 NSZ 被解成损坏文件、看着解完了却完全读不懂的情况。
  • 留着的中间目录不会无限长大:当前翻译链没用到的 per-shader 缓存条目会被清掉;上游在《王国之泪》上量到
    90 多万条没用、70 GB。
  • 从上游带过来的修复:《异度神剑 3》过场不再每帧亮度交替,Splatoon Raiders 的光照 pass 在苹果芯上快了很多,
    启动器里「云存档文件夹」的按钮一次点击只弹一个选择器,不再每行一个。

文件

资产 是什么
ns2ios-packer.exe Windows 上的打包器界面:选文件夹、按开始。
shell-<日期>-<提交>.zip 壳:不含游戏内容的未签名 iOS 应用。
nxnative-windows-tools.zip nx_extract.exe、dmsh_xlate.exe、spirv-cross.exe、glslangValidator.exe、zstd.exe
<version>-supported.tsv 支持的游戏,含 title ID 与已验证版本。
<version>-contents.tsv 壳 zip 里都有什么,含大小。

怎么用

与上一版相同:选游戏文件夹、填 prod.keys、开始打包。流程一步没变。

致谢

基于 seedds 的 nxnative(MIT)——改写器、翻译链、宿主与游戏 profile 都是它的
成果。原生执行方案与「壳」路线来自 jhaizhou-ops 的 d2r-mobile(MIT)。
它们是两个独立项目、两位不同作者。

Game-free shell 20261102-4a2a81a-dc2b36c

Choose a tag to compare

@github-actions github-actions released this 02 Nov 15:47

Source: upstream 4a2a81a64f029d0a75ade9523c8ffc6c89465375
Fingerprint: 031083c289f939ea
Smoke test: passed — a real game was packed with this shell on Windows before publishing.
冒烟测试:通过——发布前已用真实游戏在 Windows 上完整打过一次包。

What's new in this release

Switch 2 games build on Windows, and they need no keys. Donkey Kong Bananza was packed on Windows with this tool
and runs on an iPhone — the first Switch 2 title this fork has carried end to end.

  • A Switch 2 game is a folder of its files, not a package. Those dumps are not encrypted, so packing one reads no key
    at all: -k is not needed, and the packer window stops asking for prod.keys when the folder is a dump.
  • The title and the version are read from the dump itself. The title ID comes from main.npdm; the version is the
    update folder's name (a decimal number). An update's RomFS is packed on its own, never laid over the base — it already
    holds the base plus its patch, and the two trees differ.
  • The first launch compiles the shaders, and that takes a while. A Switch 2 title carries thousands of them and
    Metal compiles each one on the phone: expect several minutes on the first start, with the progress screen up. Every
    later start uses the cache.
  • 130 games in the list (Fire Emblem Fortune's Weave joins), and the shell is built on upstream 4a2a81a: the
    rewriter reads register writes by what the registers are, jump-table walks see overwritten indices, and a jump-table
    site whose index changes after its check is refused.

What a Switch 2 game folder looks like

D:\games\DonkeyKongBananza\
  base\exefs\             main, main.npdm, sdk, rtld
  base\romfs\
  updates\458752\         optional: the update, named by its version as a decimal number
    exefs\
    romfs\                the patched RomFS, not a patch
  dlc\<title ID>\0\romfs\ optional

Point the packer at the folder that holds base. Nothing has to be renamed, repacked or decrypted first.

How to build one

  1. Download ns2ios-packer.exe and run it. Windows warns about an unknown publisher — it is unsigned, so choose
    More info → Run anyway.
  2. Press Check and download: the shell, the five executables and the packer land in ns2ios-packer-data\versions\<tag>\.
  3. Choose the game folder (the one holding base). Leave prod.keys empty — a Switch 2 dump needs no key. The row
    is only checked for NSP/XCI games, which still need it.
  4. Press Start packing. The IPA lands beside the game folder.
  5. Sideload it (SideStore, Sideloadly, LiveContainer), launch, and wait out the first shader compile.

The same from a command line, with no Mac and no keys:

python scripts\nxn_pack.py shell-<date>-<commit>.zip "<dump folder>" --tools <the five executables> --keep-work

Files

File What it is
ns2ios-packer.exe One file, the whole tool — downloads the rest and packs your game. Windows 10+.
shell-<date>-<commit>.zip The shell: an unsigned iOS app with no game content.
nxnative-windows-tools.zip nx_extract.exe, dmsh_xlate.exe, spirv-cross.exe, glslangValidator.exe, zstd.exe
<version>-supported.tsv The supported games with their title IDs and verified versions.
<version>-contents.tsv What is inside the shell zip, with sizes.

Credits

Built on nxnative by seedds (MIT) — the rewriter, the translation chain, the
host and the game profiles are its work, the Switch 2 support among them. The native-execution approach and the shell
route come from d2r-mobile by jhaizhou-ops (MIT). Two separate
projects by two different authors.


本版更新

Switch 2 的游戏可以在 Windows 上构建了,而且不需要密钥。《大金刚 蕉力全开》已经用这个工具在 Windows 上打包,
并在 iPhone 上实测跑通——这是本仓库第一次把 Switch 2 的作品端到端走完。

  • Switch 2 的游戏是一堆文件,不是一个包。 这类 dump 本身没有加密,所以打包全程一个密钥都不读:不需要 -k,
    打包器窗口在认出 dump 目录后也不再索要 prod.keys。
  • 游戏身份直接从 dump 里读。 title ID 取自 main.npdm,版本号取 update 文件夹的名字(十进制)。update 的 RomFS
    是单独打包的,绝不叠在 base 上——它本身已经含 base 加补丁,两棵树并不等价。
  • 首次启动要编译着色器,时间比较漫长。 Switch 2 的作品动辄几千个着色器,Metal 要在手机上逐个编译:第一次启动
    请耐心等,准备好几分钟,期间有进度页;之后每次启动都走缓存。
  • 支持列表 130 款(新增《火焰纹章 Fortune's Weave》),壳按上游 4a2a81a 构建:改写器改成按寄存器的实际含义读写入,
    跳表扫描能看见被覆盖的下标,索引在检查之后又变动的跳表位置会被拒绝。

Switch 2 的游戏目录长什么样

D:\games\大金刚蕉力全开\
  base\exefs\             main、main.npdm、sdk、rtld
  base\romfs\
  updates\458752\         可选:更新,文件夹名就是它的版本号(十进制)
    exefs\
    romfs\                打好补丁的 RomFS,不是补丁
  dlc\<title ID>\0\romfs\ 可选

把打包器指向含 base 的那一层就行。不需要改名、不需要重新打包、也不需要先解密。

怎么构建

  1. 下载 ns2ios-packer.exe,双击运行。Windows 会提示"未知发布者"——它没签名,点 更多信息 → 仍要运行。
  2. 点「检查更新并下载」:壳、五个可执行文件和打包器都落到 ns2ios-packer-data\versions\<tag>\。
  3. 「游戏目录」选含 base 的那一层。「prod.keys」留空——Switch 2 的 dump 不需要密钥;只有 NSP/XCI 的游戏才校验
    那一栏,那种仍要 keys。
  4. 点「开始打包」。IPA 落在游戏目录旁边。
  5. 侧载(SideStore、Sideloadly、LiveContainer)后启动,耐心等第一次着色器编译。

命令行等价写法(不需要 Mac,也不需要密钥):

python scripts\nxn_pack.py shell-<日期>-<提交>.zip "<dump 目录>" --tools <那五个可执行文件> --keep-work

文件

文件 说明
ns2ios-packer.exe 一个文件就是全部工具——把其余的下好,然后把游戏打出来。Windows 10 及以上。
shell-<日期>-<提交>.zip 壳:不含游戏内容的未签名 iOS 应用。
nxnative-windows-tools.zip nx_extract.exe、dmsh_xlate.exe、spirv-cross.exe、glslangValidator.exe、zstd.exe
<version>-supported.tsv 支持的游戏,含 title ID 与已验证版本。
<version>-contents.tsv 壳 zip 里都有什么,含大小。

怎么用(NSP/XCI 的游戏)

与上一版相同:选游戏文件夹、填 prod.keys、开始打包。Switch 2 那条路只是多了一种输入,原有流程一步没变。

致谢

基于 seedds 的 nxnative(MIT)——改写器、翻译链、宿主与游戏 profile 都是它的
成果,Switch 2 的支持也在其中。原生执行方案与「壳」路线来自 jhaizhou-ops 的
d2r-mobile(MIT)。它们是两个独立项目、两位不同作者。

Game-free shell 20261102-1ae435d-835f94b

Choose a tag to compare

@github-actions github-actions released this 02 Nov 12:32

Source: upstream 1ae435d5dbe378a022ec336692a26787557a6cea
Fingerprint: 467b076980339f25
Smoke test: passed — a real game was packed with this shell on Windows before publishing.
冒烟测试:通过——发布前已用真实游戏在 Windows 上完整打过一次包。

What's new in this release

Six more games, and a scan that no longer walks past compressed shaders. Upstream moved 32 commits while this
release was prepared; what reaches you is below.

  • The list grows from 123 to 129 games: Hollow Knight, Super Robot Wars Y, Castlevania: Belmont's Curse, Super
    Mario RPG, Triangle Strategy, and Splatoon Raiders (Switch 2).
  • gzip-wrapped shader archives are recognised. The scan now goes by the file's magic rather than its name, and
    decodes the archive before reading it: a game that keeps its shaders compressed (Skyward Sword HD does) used to hide
    every shader signature behind the compression, so the split found none of them.
  • Unity 2020.3's stripped ComputeShader objects are read, so a build whose ComputeShader was stripped keeps its GPU
    skinning instead of falling back.
  • Playback: an H.264 loop keeps its presentation order when timestamps restart, and Vorbis output lasts as long as
    the specification says at a window change.
  • The packer's window: the project button now reads ns2ios-shell and opens the repository when clicked.

The shell follows upstream to 1ae435d5. All 25 patches of this fork apply to it, and the packer's copies are level
with upstream.

Files

File What it is
ns2ios-packer.exe One file, the whole tool — downloads the rest and packs your game. Windows 10+.
shell-<date>-<commit>.zip The shell: an unsigned iOS app with no game content.
nxnative-windows-tools.zip nx_extract.exe, dmsh_xlate.exe, spirv-cross.exe, glslangValidator.exe, zstd.exe
<version>-supported.tsv The supported games with their title IDs and verified versions.
<version>-contents.tsv What is inside the shell zip, with sizes.

How to use it

  1. Download ns2ios-packer.exe and run it. Windows warns about an unknown publisher — it is unsigned, so choose
    More info → Run anyway.
  2. Press Check and download. The shell, the tools and the packer land in ns2ios-packer-data\versions\<tag>\.
  3. The Python row finds a Python 3.9+ by itself; if not, press Browse…. Then press Install deps once.
  4. Choose the game folder, your prod.keys, and where the IPA should go — then press Start packing.
  5. Sideload the IPA (SideStore, Sideloadly, LiveContainer) and launch it once to compile the shaders.

Credits

Built on nxnative by seedds (MIT) — the rewriter, the translation chain, the
host and the game profiles are its work. The native-execution approach and the shell route come from
d2r-mobile by jhaizhou-ops (MIT). Two separate projects by two
different authors.


本版更新

多了六款游戏,扫描也不再漏掉压起来的着色器。 这一版之前上游走了 32 个提交,落到我们这边的是下面这些。

  • 支持列表从 123 款增加到 129 款:《空洞骑士》《超级机器人大战Y》《恶魔城:贝尔蒙特的诅咒》《超级马力欧 RPG》《三角战略》,以及 Switch 2 的《斯普拉遁 突袭者》。
  • 认得 gzip 包着的着色器归档了。 扫描改成看文件头的魔数、不看文件名,读之前先解压:像《御天之剑 HD》这种把着色器压起来放的游戏,以前压缩把着色器签名全藏住了,拆的时候一个都找不到。
  • Unity 2020.3 被剥离的 ComputeShader 对象能读了,剥离过的版本不会丢 GPU 蒙皮,不会退回软算。
  • 播放: H.264 循环在时间戳重新开始时保持呈现顺序;Vorbis 在窗口切换时按规范输出应有的长度。
  • 打包器窗口: 项目按钮改成 ns2ios-shell,点它直接打开仓库。

壳跟上上游到 1ae435d5:本仓库 25 个补丁全部打得上去,打包器副本也与上游齐平。

文件

文件 说明
ns2ios-packer.exe 一个文件就是全部工具——把其余的下好,然后把游戏打出来。Windows 10 及以上。
shell-<日期>-<提交>.zip 壳:不含游戏内容的未签名 iOS 应用。
nxnative-windows-tools.zip nx_extract.exe、dmsh_xlate.exe、spirv-cross.exe、glslangValidator.exe、zstd.exe
<version>-supported.tsv 支持的游戏,含 title ID 与已验证版本。
<version>-contents.tsv 壳 zip 里都有什么,含大小。

怎么用

  1. 下载 ns2ios-packer.exe,双击运行。Windows 会提示"未知发布者"——它没签名,点 更多信息 → 仍要运行。
  2. 点「检查更新并下载」。壳、工具、打包器落到 ns2ios-packer-data\versions\<tag>\。
  3. 「Python」那一行会自己找 Python 3.9+;找不到就点「浏览…」选一次,然后点「装依赖」。
  4. 选游戏目录、prod.keys、IPA 放哪,点「开始打包」。
  5. 侧载 IPA(SideStore、Sideloadly、LiveContainer),首次启动会编译一遍着色器。

致谢

基于 seedds 的 nxnative(MIT)——改写器、翻译链、宿主与游戏 profile 都是它的成果。原生执行方案与「壳」路线来自 jhaizhou-ops 的 d2r-mobile(MIT)。它们是两个独立项目、两位不同作者。

Game-free shell 20261101-a1b9a2a-4474bce

Choose a tag to compare

@github-actions github-actions released this 01 Nov 15:28

Source: upstream a1b9a2ae23cf3e17a659f10191846cd4c7e89cea
Fingerprint: 8acde8c636fc8725
Smoke test: passed — a real game was packed with this shell on Windows before publishing.
冒烟测试:通过——发布前已用真实游戏在 Windows 上完整打过一次包。


What's new in this release

One file, and it does the rest. This release adds ns2ios-packer.exe: a 780 KB Windows program that downloads the
shell, the five executables and the packer for you, then packs your game from a single window. No source zip, no tools
zip, no command line, nothing to keep in step by hand — and because it takes all three from the same release, they can
never be mismatched.

  • Switch 2 shaders now translate. Upstream's Ampere work lands here: the Ampere decoders, the tensor and geometry
    paths, the Switch 2 codec and its sync points. The supported list grows from 120 to 123 games.
  • Nothing installed system-wide. Everything the tool downloads lives in one folder beside the exe; delete it and the
    tool is gone. No registry, no PATH changes.
  • The command line is unchanged. Everything the window does is scripts/nxn_pack.py, still in the source zip, still
    with the same flags.

Files

File What it is
ns2ios-packer.exe One file, the whole tool — downloads the rest and packs your game. Windows 10+.
shell-<date>-<commit>.zip The shell: an unsigned iOS app with no game content.
nxnative-windows-tools.zip nx_extract.exe, dmsh_xlate.exe, spirv-cross.exe, glslangValidator.exe, zstd.exe
<version>-supported.tsv The supported games with their title IDs and verified versions.

How to use it

  1. Download ns2ios-packer.exe and run it. Windows warns about an unknown publisher — it is unsigned, so choose
    More info → Run anyway.
  2. Press Check and download. The shell, the tools and the packer land in ns2ios-packer-data�ersions\<tag>\.
  3. The Python row finds a Python 3.9+ by itself; if not, press Browse…. Then press Install deps once.
  4. Choose the game folder, your prod.keys, and where the IPA should go — then press Start packing.
  5. Sideload the IPA (SideStore, Sideloadly, LiveContainer) and launch it once to compile the shaders.

本版更新

一个文件,剩下的它全包了。 这一版多了 ns2ios-packer.exe:一个 780 KB 的 Windows 程序,帮你把壳、五个可执行
文件和打包器都下好,然后在一个窗口里把游戏打出来。不用下源码包、不用下工具包、不用命令行,也不用自己保持两边同步
——而且这三样都取自同一个 release,不可能版本对不上。

  • Switch 2 的着色器现在能翻译了。 上游的 Ampere 工作落进来:Ampere 解码器、张量与几何路径、Switch 2 的编解码器
    和同步点。支持列表从 120 款增加到 123 款。
  • 不往系统里装任何东西。 下载的一切都在 exe 旁边的一个文件夹里,删掉它等于没装过;不写注册表、不改 PATH。
  • 命令行一点没变。 窗口做的每件事都是 scripts/nxn_pack.py 在干,脚本照旧在源码包里,参数照旧。

文件

文件 说明
ns2ios-packer.exe 一个文件就是全部工具——把其余的下好,然后把游戏打出来。Windows 10 及以上。
shell-<日期>-<提交>.zip 壳:不含游戏内容的未签名 iOS 应用。
nxnative-windows-tools.zip nx_extract.exe、dmsh_xlate.exe、spirv-cross.exe、glslangValidator.exe、zstd.exe
<version>-supported.tsv 支持的游戏,含 title ID 与已验证版本。

怎么用

  1. 下载 ns2ios-packer.exe,双击运行。Windows 会提示"未知发布者"——它没签名,点 更多信息 → 仍要运行。
  2. 点「检查更新并下载」。壳、工具、打包器落到 ns2ios-packer-data\versions\<tag>\。
  3. 「Python」那一行会自己找 Python 3.9+;找不到就点「浏览…」选一次,然后点「装依赖」。
  4. 选游戏目录、prod.keys、IPA 放哪,点「开始打包」。
  5. 侧载 IPA(SideStore、Sideloadly、LiveContainer),首次启动会编译一遍着色器。

致谢

基于 seedds 的 nxnative(MIT)——改写器、翻译链、宿主与游戏 profile 都是
它的成果。原生执行方案与「壳」路线来自 jhaizhou-ops 的 d2r-mobile
(MIT)。它们是两个独立项目、两位不同作者。

Built on nxnative by seedds (MIT) — the rewriter, the translation chain, the
host and the game profiles are its work. The native-execution approach and the shell route come from
d2r-mobile by jhaizhou-ops (MIT). Two separate projects by two
different authors.

Game-free shell 20261101-dad38db-bfa9cdb

Choose a tag to compare

@github-actions github-actions released this 01 Nov 09:50

Source: upstream dad38db62ef549404b617a73aa18d31aa8117c8e
Fingerprint: d98b14b06a2ec31b
Smoke test: passed — a real game was packed with this shell on Windows before publishing.
冒烟测试:通过——发布前已用真实游戏在 Windows 上完整打过一次包。

What's new in this release

  • Cheats, in the launcher. Paste an Atmosphère cheat file, switch the entries you want on, press Play — no extra tools.
    Each entry is marked: "changes values" (follows a pointer into a game object, works) or "patches instructions"
    (rewrites a word of the program).
  • Instruction patches are off by default. On the iPhone they crash the game, so they cannot be switched on until you
    turn on "Allow code patches" at the bottom of the section. A run that dies within 30 seconds of starting turns those
    entries off on the next launch, with the reason written under each one. If you find one that does run, please report it
    in issue #7.
  • 121 games supported (one more than the last release).

Files

File What it is
<version>.zip The shell: an unsigned iOS app with no game content. Pack your own game files into it.
nxnative-windows-tools.zip nx_extract.exe, dmsh_xlate.exe, spirv-cross.exe, glslangValidator.exe, zstd.exe — self-contained; no .NET SDK or C++ toolchain needed, and nothing else to install.

Use it

  1. Take the whole repository (git clone or the source zip) — the packer needs dm/ beside scripts/, so the script alone cannot work. Unpack the tools too, e.g. to D:/nxn-tools.
  2. Put one game's files in a folder. File names do not matter — the game is identified from inside the package, so any naming scheme works. NSP and XCI both work, and an update or DLC can sit in the same folder; the newest version present is the one packed.
  3. cd into the repository, then python scripts/nxn_pack.py <version>.zip <game folder> -k <prod.keys> --tools D:/nxn-tools
  4. Sideload the IPA it writes (SideStore, Sideloadly, LiveContainer) and launch it once to compile the shaders.

Temporary files (the extraction, the rewritten modules, the split shaders, the assembled app tree) are removed once the IPA exists — together they are several times the size of the game. Only a few-KB log per step stays, in <title ID>_pack/logs/. --keep-work keeps the whole tree for a faster repack; --clean <game folder> clears out an earlier run.

The packing machine needs Python 3.9+ with lz4 capstone fonttools backports.zstd pillow.

Super Mario Galaxy 1 and 2 are the only games that need one capture before they play; everything else packs into something playable in one run. See docs/CAPTURE.md.

Full instructions and the game list: README.md

Credits

Built on nxnative by seedds (MIT) — the rewriter, the translation chain, the host and the game profiles are its work. The native-execution approach and the shell route come from d2r-mobile by jhaizhou-ops (MIT), which nxnative's generic parts started from; both projects borrow from each other. Two separate projects by two different authors.


本版更新

  • 启动页多了金手指面板。 粘贴 Atmosphère 格式的金手指文本、勾选要的条目、点开始即可,不需要额外工具。
    每条都会标注:改数值(顺着指针改游戏对象里的数值,能正常工作)或 改代码(改游戏程序的指令)。
  • 改代码的条目默认关闭。 它们在 iPhone 上会崩,所以要打开分区底部的「允许改代码」才能勾选。
    开着某几条 30 秒内崩过,下次启动会自动关掉并写明原因。如果你试到能跑起来的,请到
    issue #7 反馈。
  • 支持 121 款游戏(比上一版多一款)。

文件

文件 说明
<version>.zip 壳:不含游戏内容的未签名 iOS 应用,把自己的游戏文件打进去。
nxnative-windows-tools.zip nx_extract.exe、dmsh_xlate.exe、spirv-cross.exe、glslangValidator.exe、zstd.exe——自包含,不需要 .NET SDK 或 C++ 工具链,也不用另装任何东西。

用法

  1. 下载完整仓库(git clone 或源码压缩包)——打包器需要 scripts/ 旁边的 dm/,只拷那个脚本跑不了。工具也解压出来,比如放到 D:/nxn-tools。
  2. 把一个游戏的文件放进一个目录。文件名不重要——游戏是从包内容里认出来的,随便怎么命名都行。NSP 和 XCI 都支持,更新包和 DLC 可以放进同一个目录;会打包目录里最新的那个版本。
  3. 进仓库目录,执行 python scripts/nxn_pack.py <version>.zip <游戏文件夹> -k <prod.keys> --tools D:/nxn-tools
  4. 用自签工具(SideStore、Sideloadly、LiveContainer)装上它产出的 IPA,首次启动会编译一遍着色器。

IPA 写好后临时文件会自动删除(解包、改写后的模块、拆出的着色器、拼装好的 app 树,加起来是游戏体积的好几倍),只留每步几 KB 的日志在 <title ID>_pack/logs/。--keep-work 保留整棵树以便快速重打包;--clean <游戏文件夹> 单独清掉之前留下的。

打包机器需要 Python 3.9+ 以及 lz4 capstone fonttools backports.zstd pillow。

只有超级马里奥银河 1、2 需要在玩之前抓取一次,其余游戏打一次就是成品。详见 docs/CAPTURE.zh-CN.md。

完整说明与支持列表:README.zh-CN.md

致谢

基于 seedds 的 nxnative(MIT)——改写器、翻译链、宿主与游戏 profile 都是它的成果。原生执行方案与「壳」路线来自 jhaizhou-ops 的 d2r-mobile(MIT),nxnative 的通用部分即从其起步;两个项目互相借鉴。它们是两个独立项目、两位不同作者。

Game-free shell 20261031-bfc7088-119488f

Choose a tag to compare

@github-actions github-actions released this 31 Oct 04:55

Source: upstream bfc7088152cd509b80ae5df8eac2b5a0580c8214
Fingerprint: 9faf68096b6053ea
Smoke test: passed — a real game was packed with this shell on Windows before publishing.
冒烟测试:通过——发布前已用真实游戏在 Windows 上完整打过一次包。

What changed since the last release

  • Base to bfc70881: the Unreal frame-limit variable reaches the host, and the packer's copies follow upstream
    1. Four new ports: Metroid Prime Remastered 1.0.0, Hyrule Warriors: Definitive Edition 1.0.1, DRAGON QUEST III HD-2D Remake 1.1.2, Atelier Ryza DX 1.2.0. Supported list 116 → 120 games.
    2. dm/host/hle_svc.c was the only real conflict: upstream factored the alias region's remaining room into alias_room() and rewrote the cap line, which is the same line this fork had made runtime-overridable, so both are kept: cap = pcap ? pcap : alias_room().
    3. One new compiled constant would have failed silently: DM_GAME_UE_FPS_CVAR had no runtime path, so the shell fell back to the placeholder's t.MaxFPS while SHIN MEGAMI TENSEI V: Vengeance names its variable Project.FrameRateLimit, leaving its 60 fps lock off without a word. Its runtime path is in now (patches 20 → 21).
    4. The packer's copies are level with upstream: 86 updated, 55 added, 0100B7C00933A000/patches.py removed upstream, and 20 more files outside the five synced folders (docs, dm/ios, dm/mac, scripts).

The game-free shell, plus the executables a packing machine needs. Nothing here contains game content.

Files

File What it is
<version>.zip The shell: an unsigned iOS app with no game content. Pack your own game files into it.
nxnative-windows-tools.zip nx_extract.exe, dmsh_xlate.exe, spirv-cross.exe, glslangValidator.exe, zstd.exe — self-contained; no .NET SDK or C++ toolchain needed, and nothing else to install.

Use it

  1. Take the whole repository (git clone or the source zip) — the packer needs dm/ beside scripts/, so the script alone cannot work. Unpack the tools too, e.g. to D:/nxn-tools.
  2. Put one game's files in a folder. File names do not matter — the game is identified from inside the package, so any naming scheme works. NSP and XCI both work, and an update or DLC can sit in the same folder; the newest version present is the one packed.
  3. cd into the repository, then python scripts/nxn_pack.py <version>.zip <game folder> -k <prod.keys> --tools D:/nxn-tools
  4. Sideload the IPA it writes (SideStore, Sideloadly, LiveContainer) and launch it once to compile the shaders.

Temporary files (the extraction, the rewritten modules, the split shaders, the assembled app tree) are removed once the IPA exists — together they are several times the size of the game. Only a few-KB log per step stays, in <title ID>_pack/logs/. --keep-work keeps the whole tree for a faster repack; --clean <game folder> clears out an earlier run.

The packing machine needs Python 3.9+ with lz4 capstone fonttools backports.zstd pillow.

Super Mario Galaxy 1 and 2 are the only games that need one capture before they play; everything else packs into something playable in one run. See docs/CAPTURE.md.

Full instructions and the game list: README.md

Credits

Built on nxnative by seedds (MIT) — the rewriter, the translation chain, the host and the game profiles are its work. The native-execution approach and the shell route come from d2r-mobile by jhaizhou-ops (MIT), which nxnative's generic parts started from; both projects borrow from each other. Two separate projects by two different authors.


本版变更(对比上一版)

  • 基座推进到 bfc70881(上游 28 条)
    1. 新增四个 port:《银河战士 Prime 重制版》1.0.0、《塞尔达无双 全明星》1.0.1、《勇者斗恶龙III HD-2D 重制版》1.1.2、《莱莎的炼金工房 常暗女王与秘密藏身处 DX》1.2.0;支持列表 116 → 120 款。
    2. dm/host/hle_svc.c 是这次唯一的真冲突:上游把「alias 区域还剩多少」提成 alias_room() 函数并改写了 cap 那一行,我们改的正是同一行(运行期 stdalloc_cap() 通路),解成两边都留:cap = pcap ? pcap : alias_room()。
    3. 一个会静默失效的新键:编译常量 DM_GAME_UE_FPS_CVAR 之前没有运行期通路,壳里退化成占位值 t.MaxFPS,《真·女神转生V 复仇》的帧率变量却叫 Project.FrameRateLimit,60 帧锁定会无声失效 —— 已补 DM_UE_FPS_CVAR 通路(补丁 20 → 21)。
    4. 打包器副本与上游对齐:86 个文件更新、55 个新增,0100B7C00933A000/patches.py 随上游删除,五个目录之外再补 20 个文件(docs、dm/ios、dm/mac、scripts)。

不含任何游戏内容的「壳」,以及打包机器需要的可执行文件。这里没有任何游戏内容。

文件

文件 说明
<version>.zip 壳:不含游戏内容的未签名 iOS 应用,把自己的游戏文件打进去。
nxnative-windows-tools.zip nx_extract.exe、dmsh_xlate.exe、spirv-cross.exe、glslangValidator.exe、zstd.exe——自包含,不需要 .NET SDK 或 C++ 工具链,也不用另装任何东西。

用法

  1. 下载完整仓库(git clone 或源码压缩包)——打包器需要 scripts/ 旁边的 dm/,只拷那个脚本跑不了。工具也解压出来,比如放到 D:/nxn-tools。
  2. 把一个游戏的文件放进一个目录。文件名不重要——游戏是从包内容里认出来的,随便怎么命名都行。NSP 和 XCI 都支持,更新包和 DLC 可以放进同一个目录;会打包目录里最新的那个版本。
  3. 进仓库目录,执行 python scripts/nxn_pack.py <version>.zip <游戏文件夹> -k <prod.keys> --tools D:/nxn-tools
  4. 用自签工具(SideStore、Sideloadly、LiveContainer)装上它产出的 IPA,首次启动会编译一遍着色器。

IPA 写好后临时文件会自动删除(解包、改写后的模块、拆出的着色器、拼装好的 app 树,加起来是游戏体积的好几倍),只留每步几 KB 的日志在 <title ID>_pack/logs/。--keep-work 保留整棵树以便快速重打包;--clean <游戏文件夹> 单独清掉之前留下的。

打包机器需要 Python 3.9+ 以及 lz4 capstone fonttools backports.zstd pillow。

只有超级马里奥银河 1、2 需要在玩之前抓取一次,其余游戏打一次就是成品。详见 docs/CAPTURE.zh-CN.md。

完整说明与支持列表:README.zh-CN.md

致谢

基于 seedds 的 nxnative(MIT)——改写器、翻译链、宿主与游戏 profile 都是它的成果。原生执行方案与「壳」路线来自 jhaizhou-ops 的 d2r-mobile(MIT),nxnative 的通用部分即从其起步;两个项目互相借鉴。它们是两个独立项目、两位不同作者。

Game-free shell 20261030-6d880d2-d3c0c60

Choose a tag to compare

@github-actions github-actions released this 30 Oct 11:04

Source: upstream 6d880d237a7684365ca88236e5a5ff34921adf7d
Fingerprint: 20b4acb7162d108d
Smoke test: passed — a real game was packed with this shell on Windows before publishing.
冒烟测试:通过——发布前已用真实游戏在 Windows 上完整打过一次包。

What changed since the last release

  • Base to 6d880d2: GPUs without BC textures are refused at start, and main.m needed a real merge
  • Base to 51904e7: Super Monkey Ball and Pokemon Violet, an IL2CPP symbolizer, and the per-build cuts moved into the SDK-wide rules
  • One backslash ate the closing quote of an echo, and a step died on a comment twenty lines below it
  • The fingerprint must run on the machine it runs on: sha256sum is not on macOS, and the annotator was one directory up
  • A nightly no longer publishes what it just published, and a failed build names the patch to fix
  • A package says which shell it came from, and three things that failed silently now do not
  • Base to 17f670a: SDK-wide 2 MB alignment, Unreal's texture pool, deferred encoding on its own thread

The game-free shell, plus the executables a packing machine needs. Nothing here contains game content.

Files

File What it is
<version>.zip The shell: an unsigned iOS app with no game content. Pack your own game files into it.
nxnative-windows-tools.zip nx_extract.exe, dmsh_xlate.exe, spirv-cross.exe, glslangValidator.exe, zstd.exe — self-contained; no .NET SDK or C++ toolchain needed, and nothing else to install.

Use it

  1. Take the whole repository (git clone or the source zip) — the packer needs dm/ beside scripts/, so the script alone cannot work. Unpack the tools too, e.g. to D:/nxn-tools.
  2. Put one game's files in a folder. File names do not matter — the game is identified from inside the package, so any naming scheme works. NSP and XCI both work, and an update or DLC can sit in the same folder; the newest version present is the one packed.
  3. cd into the repository, then python scripts/nxn_pack.py <version>.zip <game folder> -k <prod.keys> --tools D:/nxn-tools
  4. Sideload the IPA it writes (SideStore, Sideloadly, LiveContainer) and launch it once to compile the shaders.

Temporary files (the extraction, the rewritten modules, the split shaders, the assembled app tree) are removed once the IPA exists — together they are several times the size of the game. Only a few-KB log per step stays, in <title ID>_pack/logs/. --keep-work keeps the whole tree for a faster repack; --clean <game folder> clears out an earlier run.

The packing machine needs Python 3.9+ with lz4 capstone fonttools backports.zstd pillow.

Super Mario Galaxy 1 and 2 are the only games that need one capture before they play; everything else packs into something playable in one run. See docs/CAPTURE.md.

Full instructions and the game list: README.md

Credits

Built on nxnative by seedds (MIT) — the rewriter, the translation chain, the host and the game profiles are its work. The native-execution approach and the shell route come from d2r-mobile by jhaizhou-ops (MIT), which nxnative's generic parts started from; both projects borrow from each other. Two separate projects by two different authors.


本版变更(对比上一版)

  • 基座再推进到 6d880d2:启动时先检查 GPU 是否支持 BC 压缩纹理,不支持就直接报 [RED] 并退出(要 iPhone 15 Pro / A17 Pro 起,或 M1 起的 iPad)—— 这类设备上游戏用的纹理格式读不了,早退比花屏好。dm/ios/Sources/main.m 这次是真冲突:我们在同一位置插了内存上限的打印行,上游插了 GPU 检查,解成两段都保留(先打内存行,再做 GPU 检查)。nvn_mtl.m 也动了,0 冲突。
  • 基座推进到 51904e7(上游 6 条):新增《超级猴子球 香蕉大乱斗》2.20 与《宝可梦 紫》1.0.0 两个 profile(紫与朱是孪生档),IL2CPP 地址符号化按模块的 .eh_frame 界定方法名,脏页保护从查表到最后一次 mprotect 全程持有池槽互斥,改写器能在整个引擎范围找到 Unreal 的 FMallocBinned3。per-build 的 cut 被上游搬进了 SDK 级规则,对应的 6 个 patches.py 随之删除(01005270232F2000、0100606026F12000、010069C01AB82000、0100A3501946E000、0100A9D01C446000、0100B8A026F14000)。支持列表 114 → 116 款。
  • 修一个字符引发的连环失败:echo "version=$V" >> "$GITHUB_OUTPUT\" 里那个反斜杠把收尾引号吃掉了,bash 于是把后面十几行(含四行注释)当成同一条命令,报错指向一条注释而不是出错的那一行。另外新增 scripts/check_workflow_shell.py:对 workflow 里每个 run: | 块跑 bash -n,改完本地先跑一遍(GitHub 的 YAML 解析不校验块里的 shell 语法,只有 runner 跑到那一步才会炸)。
  • 修上一版自己打出来的两个错:补集指纹用了只有 Linux 才有的 sha256sum(这一步跑在 macOS runner 上),改成两边都有的 git hash-object;失败注解步骤去工作区根找脚本,而仓库被 checkout 到 fork/ 下,改成指向 checkout 后的路径。判据:applied 20 patches 已经在失败日志里出现过,说明补丁数断言是好的,死的是它后面那一行。
  • 定时任务不再把刚发过的东西再发一版:判重键从「fork 提交 sha」换成「补丁集指纹」(.shell-base.txt + overlay + .shell-patches/ 的摘要),CI 自己的同步提交不再每天顶出一版空发布。发版前校验中文译文表——缺行只警告,重复键或列数不对直接失败;变更列表里去掉 CI 的同步提交,截断到 30 条时明确写出还剩多少。构建失败时把 路径:行: error: 映射回.shell-patches/ 里对应的补丁,一眼知道该改哪个文件(原来只有一句 exit code)。基座推进到 eab2537:呈现快照的常驻集合在拷贝前提交、被替换的环形纹理住到该槽下次使用。另外移基座工具从 tmp/ 搬进 scripts/basemove/ 并参数化,needs_mac_shaders 不再硬编码 5 个 title ID,改成从 HEAD 派生。
  • 包现在记下自己是用哪个壳打的:Info.plist 的 DMCommit 写壳的 SOURCE_SHA,手机日志第一行就能看到,不用再要 shell_info.txt(旧包仍是 not recorded)。CI 三处「绿了但其实是坏的」改成报错或明说:补丁一个都没打上也照样发版、release tag 落在当时的 main 头而不是被构建的那棵树、冒烟测试拿旧树打包。打包器 -o 的目录开头就校验(原来要跑满二十分钟才抛 traceback)、--stop-after assemble 真的会停、删掉从没实现过的 --diagnose;补上 fork 里缺的 4 个 iOS 源文件,source=fork 那条入口才编得过。
  • 基座推进到 17f670a(上游之后又走了 45 条提交):SDK 级大地址区 2 MB 对齐、Unreal 的 texture streaming pool、NVN 的延迟编码改走独立线程。带进来两个新的 profile 键——enc_thread(只有 NFS: 热力追踪重制版用)已接运行期通路,ue_texture_pool 故意不接(iPhone 上上游本来就不开);宝可梦 朱紫的 patches.py 上游已删,这里跟着删。支持列表 111 → 114 款(新增 NFS: 热力追踪重制版、EA SPORTS FC 27、歧路旅人 0、传送门 2)。

不含任何游戏内容的「壳」,以及打包机器需要的可执行文件。这里没有任何游戏内容。

文件

文件 说明
<version>.zip 壳:不含游戏内容的未签名 iOS 应用,把自己的游戏文件打进去。
nxnative-windows-tools.zip nx_extract.exe、dmsh_xlate.exe、spirv-cross.exe、glslangValidator.exe、zstd.exe——自包含,不需要 .NET SDK 或 C++ 工具链,也不用另装任何东西。

用法

  1. 下载完整仓库(git clone 或源码压缩包)——打包器需要 scripts/ 旁边的 dm/,只拷那个脚本跑不了。工具也解压出来,比如放到 D:/nxn-tools。
  2. 把一个游戏的文件放进一个目录。文件名不重要——游戏是从包内容里认出来的,随便怎么命名都行。NSP 和 XCI 都支持,更新包和 DLC 可以放进同一个目录;会打包目录里最新的那个版本。
  3. 进仓库目录,执行 python scripts/nxn_pack.py <version>.zip <游戏文件夹> -k <prod.keys> --tools D:/nxn-tools
  4. 用自签工具(SideStore、Sideloadly、LiveContainer)装上它产出的 IPA,首次启动会编译一遍着色器。

IPA 写好后临时文件会自动删除(解包、改写后的模块、拆出的着色器、拼装好的 app 树,加起来是游戏体积的好几倍),只留每步几 KB 的日志在 <title ID>_pack/logs/。--keep-work 保留整棵树以便快速重打包;--clean <游戏文件夹> 单独清掉之前留下的。

打包机器需要 Python 3.9+ 以及 lz4 capstone fonttools backports.zstd pillow。

只有超级马里奥银河 1、2 需要在玩之前抓取一次,其余游戏打一次就是成品。详见 docs/CAPTURE.zh-CN.md。

完整说明与支持列表:README.zh-CN.md

致谢

基于 seedds 的 nxnative(MIT)——改写器、翻译链、宿主与游戏 profile 都是它的成果。原生执行方案与「壳」路线来自 jhaizhou-ops 的 d2r-mobile(MIT),nxnative 的通用部分即从其起步;两个项目互相借鉴。它们是两个独立项目、两位不同作者。

Game-free shell 20261030-8e0916b-aede8af

Choose a tag to compare

@github-actions github-actions released this 30 Oct 03:42

Source: upstream 8e0916bf04f6fb8542c52ed01b166a8796158ca0
Smoke test: passed — a real game was packed with this shell on Windows before publishing.
冒烟测试:通过——发布前已用真实游戏在 Windows 上完整打过一次包。

What changed since the last release

  • docs: upstream's pages for the 1c54ea0 base move
  • CI: keep needs_mac_shaders on the five Oodle profiles across the packer sync
  • Base to 1c54ea0: vertex streams read zeros past their bound size, and two more ports

Published automatically: the daily schedule found a new upstream commit and rebuilt from it.

The game-free shell, plus the executables a packing machine needs. Nothing here contains game content.

Files

File What it is
<version>.zip The shell: an unsigned iOS app with no game content. Pack your own game files into it.
nxnative-windows-tools.zip nx_extract.exe, dmsh_xlate.exe, spirv-cross.exe, glslangValidator.exe, zstd.exe — self-contained; no .NET SDK or C++ toolchain needed, and nothing else to install.

Use it

  1. Take the whole repository (git clone or the source zip) — the packer needs dm/ beside scripts/, so the script alone cannot work. Unpack the tools too, e.g. to D:/nxn-tools.
  2. Put one game's files in a folder. File names do not matter — the game is identified from inside the package, so any naming scheme works. NSP and XCI both work, and an update or DLC can sit in the same folder; the newest version present is the one packed.
  3. cd into the repository, then python scripts/nxn_pack.py <version>.zip <game folder> -k <prod.keys> --tools D:/nxn-tools
  4. Sideload the IPA it writes (SideStore, Sideloadly, LiveContainer) and launch it once to compile the shaders.

Temporary files (the extraction, the rewritten modules, the split shaders, the assembled app tree) are removed once the IPA exists — together they are several times the size of the game. Only a few-KB log per step stays, in <title ID>_pack/logs/. --keep-work keeps the whole tree for a faster repack; --clean <game folder> clears out an earlier run.

The packing machine needs Python 3.9+ with lz4 capstone fonttools backports.zstd pillow.

Super Mario Galaxy 1 and 2 are the only games that need one capture before they play; everything else packs into something playable in one run. See docs/CAPTURE.md.

Full instructions and the game list: README.md

Credits

Built on nxnative by seedds (MIT) — the rewriter, the translation chain, the host and the game profiles are its work. The native-execution approach and the shell route come from d2r-mobile by jhaizhou-ops (MIT), which nxnative's generic parts started from; both projects borrow from each other. Two separate projects by two different authors.


本版变更(对比上一版)

  • docs: upstream's pages for the 1c54ea0 base move
    未翻译:这一条还没有中文,补一行到 .github/release-notes.zh.tsv
  • CI 修:每次构建「对齐打包器副本」那一步都会用上游的 game.tsv 覆盖我们那 5 个 Oodle/LZ5 profile,把 needs_mac_shaders 键(我们加的,supported_list 靠它标「暂不支持」)一起冲掉并提交——已发生两次(10-28、10-29),每次都要手工补。现在同步后调用 scripts/restore_mac_shader_marks.py 只补回这个键,上游对同一文件的其它改动照常进来。
  • 基座移到 1c54ea0:Maxwell 的顶点取指按绑定尺寸截断、越界读 0,Metal 以前会读到池里后面的字节——奥德赛半分辨率合成的 9 个顶点从一个 36 字节的流里读,把瀑布雾气混了两次。另含 NVNsh/Sumo 着色器读取、两款新 port(Well Dweller、Team Sonic Racing)与文档更新。5 个补丁文件三方合并 0 冲突,preflight 20/20 + 逐字节,支持列表 111 款。

本版为自动发布:定时任务发现上游有新提交后自动重建。

不含任何游戏内容的「壳」,以及打包机器需要的可执行文件。这里没有任何游戏内容。

文件

文件 说明
<version>.zip 壳:不含游戏内容的未签名 iOS 应用,把自己的游戏文件打进去。
nxnative-windows-tools.zip nx_extract.exe、dmsh_xlate.exe、spirv-cross.exe、glslangValidator.exe、zstd.exe——自包含,不需要 .NET SDK 或 C++ 工具链,也不用另装任何东西。

用法

  1. 下载完整仓库(git clone 或源码压缩包)——打包器需要 scripts/ 旁边的 dm/,只拷那个脚本跑不了。工具也解压出来,比如放到 D:/nxn-tools。
  2. 把一个游戏的文件放进一个目录。文件名不重要——游戏是从包内容里认出来的,随便怎么命名都行。NSP 和 XCI 都支持,更新包和 DLC 可以放进同一个目录;会打包目录里最新的那个版本。
  3. 进仓库目录,执行 python scripts/nxn_pack.py <version>.zip <游戏文件夹> -k <prod.keys> --tools D:/nxn-tools
  4. 用自签工具(SideStore、Sideloadly、LiveContainer)装上它产出的 IPA,首次启动会编译一遍着色器。

IPA 写好后临时文件会自动删除(解包、改写后的模块、拆出的着色器、拼装好的 app 树,加起来是游戏体积的好几倍),只留每步几 KB 的日志在 <title ID>_pack/logs/。--keep-work 保留整棵树以便快速重打包;--clean <游戏文件夹> 单独清掉之前留下的。

打包机器需要 Python 3.9+ 以及 lz4 capstone fonttools backports.zstd pillow。

只有超级马里奥银河 1、2 需要在玩之前抓取一次,其余游戏打一次就是成品。详见 docs/CAPTURE.zh-CN.md。

完整说明与支持列表:README.zh-CN.md

致谢

基于 seedds 的 nxnative(MIT)——改写器、翻译链、宿主与游戏 profile 都是它的成果。原生执行方案与「壳」路线来自 jhaizhou-ops 的 d2r-mobile(MIT),nxnative 的通用部分即从其起步;两个项目互相借鉴。它们是两个独立项目、两位不同作者。