mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-11 05:53:23 -05:00
feat: profile idtech4a++, ines and infinity
This commit is contained in:
1 parent
694f2a74d0
commit
ed0c44be4a
3 files changed
+1000
No files matched your search
@@ -0,0 +1,618 @@
|
||||
emulator: idTech4A++
|
||||
type: standalone
|
||||
core_classification: game_engine
|
||||
source: "https://github.com/glKarin/com.n0n3m4.diii4a"
|
||||
upstream: "https://github.com/glKarin/com.n0n3m4.diii4a"
|
||||
author: "glKarin"
|
||||
profiled_date: "2026-08-11"
|
||||
source_commit: "683afc7aa181ec4b7ee69424ce9fdb1a8fac5ba9"
|
||||
core_version: "1.1.0harmattan72"
|
||||
display_name: "id Tech engine collection (idTech4A++)"
|
||||
cores:
|
||||
- "idtech4a++"
|
||||
- idtech4amm
|
||||
- diii4a
|
||||
systems:
|
||||
- doom
|
||||
- doom3
|
||||
- doom3-bfg
|
||||
- quake
|
||||
- quake2
|
||||
- quake3
|
||||
- quake4
|
||||
- prey
|
||||
- wolfenstein3d
|
||||
- return-to-castle-wolfenstein
|
||||
- wolfenstein-enemy-territory
|
||||
- realrtcw
|
||||
- the-dark-mod
|
||||
- jedi-academy
|
||||
- jedi-outcast
|
||||
- medal-of-honor-allied-assault
|
||||
- urban-terror
|
||||
- enemy-territory-quake-wars
|
||||
- skin-deep
|
||||
- quadrilateral-cowboy
|
||||
- icarus-starship-command-simulator
|
||||
- hexen2
|
||||
- half-life
|
||||
- half-life-2
|
||||
- serious-sam
|
||||
mode: standalone
|
||||
|
||||
notes: |
|
||||
Android package com.karin.idTech4Amm, arm64-v8a and armeabi-v7a, Android 4.4+,
|
||||
GPLv3, forked from n0n3m4's DIII4A. A Java launcher picks a game and a command
|
||||
line, then loads one of twenty-six engine libraries into the Q3E frontend,
|
||||
which owns the GL surface, the on-screen controls and the audio path. Another
|
||||
application starts a game directly through com.n0n3m4.q3e.Q3EMain with a `game`
|
||||
extra carrying the game token and a `command` extra carrying an argument vector
|
||||
that begins with `game.arm`.
|
||||
ref: README.md:13-26, 237-251,
|
||||
Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:8-33, 91-116, 303,
|
||||
Q3E/src/main/java/com/n0n3m4/q3e/Q3EGlobals.java:9,
|
||||
idTech4Amm/build.gradle:13-14, 23
|
||||
|
||||
Game data lives under a working directory, `/sdcard/diii4a` unless the
|
||||
preference names another, and each game reads a base folder inside it. With the
|
||||
standalone-directory preference on, which is the default, the base folder sits
|
||||
under a per-game subdirectory; with it off, games that are not marked always
|
||||
standalone read the base folder directly under the working directory. The Dark
|
||||
Mod, UZDOOM, FTEQW, ECWolf, Xash3D, Source and both Serious Sam entries are
|
||||
always standalone and keep their subdirectory either way.
|
||||
ref: Q3E/src/main/java/com/n0n3m4/q3e/Q3EInterface.java:89, 106, 233-254,
|
||||
Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:147-202, 421,
|
||||
443-461
|
||||
|
||||
Engine, standalone directory and base folder per game, in registration order:
|
||||
DOOM 3 (dante, doom3/base), Quake 4 (dante, quake4/q4base), Prey 2006 (dante,
|
||||
prey/preybase), Enemy Territory: QUAKE Wars (Splash Damage idTech4,
|
||||
etqw/etqwbase), DOOM 3 BFG (RBDOOM-3-BFG 1.4.0, doom3bfg/base), The Dark Mod
|
||||
2.14 (darkmod), Skin Deep 1.0.4 (skindeep/base), Quadrilateral Cowboy
|
||||
1.0.2602252 (qc/base), Icarus Starship Command Simulator 1.0.9 (icarus/base),
|
||||
Quake III Arena (ioquake3 1.36, quake3/baseq3), Return to Castle Wolfenstein
|
||||
(iortcw 1.51d, rtcw/main), Wolfenstein: Enemy Territory (ET: Legacy 2.83.2,
|
||||
etw/etmain), Jedi Academy (OpenJK 1.0.1.1, openja/base), Jedi Outcast (OpenJK
|
||||
1.0.1.1, openjo/base), Medal of Honor: Allied Assault (OpenMOHAA 0.82.1,
|
||||
openmohaa/main), Urban Terror (Q3-UT4 4.3.4, urt/q3ut4), RealRTCW 5.43
|
||||
(realrtcw/Main), Quake II (Yamagi 8.60, quake2/baseq2), Quake (Darkplaces,
|
||||
quake1/darkplaces/id1), UZDOOM 4.14.3 (uzdoom), Wolfenstein 3D (ECWolf 1.4.2,
|
||||
ecwolf), FTEQW 1.05 (fteqw), Xash3D 0.21 (xash/valve), Source Engine 1.16
|
||||
(srceng/hl2), Serious Sam TFE 1.10.7 (serioussamtfe) and Serious Sam TSE 1.10.7
|
||||
(serioussamtse). Every one is built in this configuration; the F-Droid flavour
|
||||
leaves out Xash3D and Source, and the idtech flavour leaves out those two and
|
||||
Serious Sam. DOOM 3 BFG carries a second library for its Vulkan renderer.
|
||||
ref: Q3E/src/main/java/com/n0n3m4/q3e/Q3EGame.java:17-291,
|
||||
Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:204-230,
|
||||
Q3E/src/main/jni/CMakeLists.txt:33-60, 137-266
|
||||
|
||||
The retail data is what the user brings, and no engine here names its archives
|
||||
one by one. The idTech 4 lineage lists `.pk4` in the game directory, DOOM 3 BFG
|
||||
lists `.resources`, Yamagi walks `pak0` through `pak99` for each of its four
|
||||
container suffixes and then globs the rest, and Serious Sam globs `*.gro`. What
|
||||
every id-derived engine does gate on is `default.cfg` inside those archives: an
|
||||
empty read is a fatal error, and only the Splash Damage build is compiled past
|
||||
the check. UZDOOM ends with "Cannot find a game IWAD" when no known IWAD is
|
||||
present, and ECWolf with "Can not find base game data. (*.wl6, *.wl1, *.sdm,
|
||||
*.sod, *.n3d)". The launcher carries a store or homepage link per game and mod
|
||||
so the data can be bought or downloaded.
|
||||
ref: doom3/neo/framework/FileSystem.cpp:2052, 2503, 3392-3400,
|
||||
Q3E/src/main/jni/doom3bfg/neo/framework/FileSystem.cpp:3001, 3173,
|
||||
Q3E/src/main/jni/darkmod/framework/FileSystem.cpp:2650-2657,
|
||||
Q3E/src/main/jni/quake3/code/qcommon/files.c:4161-4165,
|
||||
Q3E/src/main/jni/rtcw/SP/code/qcommon/files.c:4340-4344,
|
||||
Q3E/src/main/jni/jk/code/qcommon/files.cpp:3020,
|
||||
Q3E/src/main/jni/openmohaa/code/qcommon/files.cpp:4011,
|
||||
Q3E/src/main/jni/quake2/yquake2/src/common/filesystem.c:1801-1850,
|
||||
Q3E/src/main/jni/zdoom/src/d_iwad.cpp:738,
|
||||
Q3E/src/main/jni/ecwolf/src/wl_iwad.cpp:766,
|
||||
idTech4Amm/src/main/java/com/karin/idTech4Amm/sys/GameResourceUrl.java:14-118
|
||||
|
||||
The Quake III lineage keeps id's release checksums for `baseq3` pak0 through
|
||||
pak8 and `missionpack` pak0 through pak3, and an archive whose value disagrees
|
||||
only draws a console warning telling the user to re-copy from the CD or
|
||||
re-install the point release. Those numbers are a block checksum over the CRCs
|
||||
of the archive members, not a hash of the file, so they identify a release
|
||||
rather than validate a download.
|
||||
ref: Q3E/src/main/jni/quake3/code/qcommon/files.c:178-197, 3572-3690,
|
||||
Q3E/src/main/jni/quake3/code/qcommon/qcommon.h:592-593
|
||||
|
||||
UZDOOM reads the IWAD names it will accept from `iwadinfo.txt` inside
|
||||
`game_support.pk3`: the DOOM, DOOM II, Final DOOM, BFG and KEX re-releases,
|
||||
Freedoom, Heretic, Hexen, Strife, Blasphemer, Chex Quest, Action Doom 2, HacX,
|
||||
Harmony, Square, Delaweare and Return of the Triad, forty-nine names. The
|
||||
launcher itself names four of them as selectable data files, DOOM.WAD,
|
||||
DOOM2.WAD, freedoom1.wad and freedoom2.wad, because UZDOOM and ECWolf are the
|
||||
two games whose data is a file rather than a folder.
|
||||
ref: Q3E/src/main/jni/zdoom/src/d_iwad.cpp:287-297, 321-342,
|
||||
Q3E/src/main/jni/zdoom/src/version.h:100-102,
|
||||
idTech4Amm/src/main/java/com/karin/idTech4Amm/sys/Game.java:69-72,
|
||||
Q3E/src/main/java/com/n0n3m4/q3e/Q3EInterface.java:710-713
|
||||
|
||||
Starting a game extracts that game's bundled resources first. A text file named
|
||||
`idtech4amm.version` is written beside them and compared on the next run, so an
|
||||
engine update replaces the copy and a user edit survives otherwise. The Dark
|
||||
Mod, DOOM 3 BFG, UZDOOM, Xash3D, Source, Enemy Territory, ECWolf, Skin Deep and
|
||||
ETQW are covered by this path; the bot, Rivensin and translation archives are
|
||||
extracted on request from the launcher instead.
|
||||
ref: Q3E/src/main/java/com/n0n3m4/q3e/Q3EMain.java:167,
|
||||
Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:624-703, 921-940,
|
||||
Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResource.java:12-47,
|
||||
Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:32-218
|
||||
|
||||
On-screen button images are read through a search path built from the working
|
||||
directory, the external files directory of the package, its internal data
|
||||
directory and the assets of the apk, plus every `.zipak` archive found in the
|
||||
first three. A file of the same name in any of them replaces the built-in
|
||||
image, and a folder under `controls_theme/` becomes a named theme in the
|
||||
chooser, described by a `description.txt` that may be suffixed with a language
|
||||
tag.
|
||||
ref: Q3E/src/main/java/com/n0n3m4/q3e/karin/KFDManager.java:66-96,
|
||||
Q3E/src/main/java/com/n0n3m4/q3e/Q3EContextUtils.java:236-241, 305-345,
|
||||
Q3E/src/main/java/com/n0n3m4/q3e/Q3EGlobals.java:230,
|
||||
idTech4Amm/src/main/java/com/n0n3m4/DIII4A/launcher/SetupControlsThemeFunc.java:149-179
|
||||
|
||||
files:
|
||||
- name: uzdoom.pk3
|
||||
required: true
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
category: game_data
|
||||
path: "uzdoom/uzdoom.pk3"
|
||||
size: 3007398
|
||||
md5: d3f231863ee2973dbc9291e853d1eb4a
|
||||
sha1: dd2364da2cc8b49e32330ba9abff80727b4ea0a0
|
||||
description: "UZDOOM engine resource archive"
|
||||
note: >-
|
||||
Named by BASEWAD and searched before anything else; a miss ends the process
|
||||
with "Cannot find uzdoom.pk3". Carries the hex font, the widget resources
|
||||
and the script definitions the engine needs before a game is chosen. Copied
|
||||
out of the apk with the rest of the UZDOOM resource directory.
|
||||
source_ref: "Q3E/src/main/jni/zdoom/src/version.h:100, Q3E/src/main/jni/zdoom/src/d_main.cpp:3707-3713, Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:94-103"
|
||||
|
||||
- name: game_support.pk3
|
||||
required: true
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
category: game_data
|
||||
path: "uzdoom/game_support.pk3"
|
||||
size: 2382047
|
||||
md5: 64d976172bae64edb10e542f14f2de9f
|
||||
sha1: cccab57d1d1b84601fa0c52a74f55bf7b36f4e1c
|
||||
description: "UZDOOM IWAD definitions and per-game filters"
|
||||
note: >-
|
||||
Named by OPTIONALWAD and opened as the second file of the IWAD manager. It
|
||||
holds the IWADINFO lump, so without it no IWAD is recognised and startup
|
||||
ends on "Cannot find a game IWAD" even when the WAD is in place. Also
|
||||
carries the per-game filter trees keyed by IWAD identity.
|
||||
source_ref: "Q3E/src/main/jni/zdoom/src/version.h:102, Q3E/src/main/jni/zdoom/src/d_main.cpp:3744-3746, Q3E/src/main/jni/zdoom/src/d_iwad.cpp:321-342, 738"
|
||||
|
||||
- name: game_widescreen_gfx.pk3
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
category: game_data
|
||||
path: "uzdoom/game_widescreen_gfx.pk3"
|
||||
size: 5565936
|
||||
md5: 8ebf4d4a7b950f156c6c277ed9244aac
|
||||
sha1: 9ff11fca19550b189cc8e7d4cafc9897d57cd472
|
||||
description: "Widescreen replacements for the stock graphics"
|
||||
note: >-
|
||||
Searched by name and loaded only when the startup dialog leaves widescreen
|
||||
graphics enabled.
|
||||
source_ref: "Q3E/src/main/jni/zdoom/src/d_main.cpp:2083"
|
||||
|
||||
- name: lights.pk3
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
category: game_data
|
||||
path: "uzdoom/lights.pk3"
|
||||
size: 24030
|
||||
md5: 5e5977e018d3ef2dfda2607b0b3e57ae
|
||||
sha1: 19ad73cae23b5d9f3890ae29542a2d3e611bda00
|
||||
description: "Dynamic light definitions"
|
||||
note: >-
|
||||
Searched by name on the user choice recorded at first start, and offered a
|
||||
second time as a launcher switch that appends it to the file list.
|
||||
source_ref: "Q3E/src/main/jni/zdoom/src/d_main.cpp:2066-2075, Q3E/src/main/java/com/n0n3m4/q3e/Q3EInterface.java:1138, idTech4Amm/src/main/java/com/n0n3m4/DIII4A/GameLauncher.java:558"
|
||||
|
||||
- name: brightmaps.pk3
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
category: game_data
|
||||
path: "uzdoom/brightmaps.pk3"
|
||||
size: 246181
|
||||
md5: 302fd7cffd2b197c5c68778f877d3086
|
||||
sha1: ccb1fb093dc128da46a5060ba319c5bd5790e074
|
||||
description: "Brightmap definitions"
|
||||
note: >-
|
||||
Loaded on the same choice and the same launcher switch as the light
|
||||
definitions.
|
||||
source_ref: "Q3E/src/main/jni/zdoom/src/d_main.cpp:2066-2081, Q3E/src/main/java/com/n0n3m4/q3e/Q3EInterface.java:1140, idTech4Amm/src/main/java/com/n0n3m4/DIII4A/GameLauncher.java:565"
|
||||
|
||||
- name: uzdoom.sf2
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
category: game_data
|
||||
path: "uzdoom/soundfonts/uzdoom.sf2"
|
||||
size: 3299098
|
||||
md5: f306ebc541a428d296cd3b7ee996d872
|
||||
sha1: 4394193fb95c1e59916efe9ac3a47952ab5002f5
|
||||
description: "SoundFont for the MIDI devices"
|
||||
note: >-
|
||||
Collected by scanning a `soundfonts` directory added to the search paths of
|
||||
the config file; every .sf2 and zipped GUS patch set found there becomes a
|
||||
menu entry.
|
||||
source_ref: "Q3E/src/main/jni/zdoom/src/gameconfigfile.cpp:220, 258, Q3E/src/main/jni/zdoom/src/common/audio/music/i_soundfont.cpp:335-370"
|
||||
|
||||
- name: GENMIDI.GS.wopl
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
category: game_data
|
||||
path: "uzdoom/fm_banks/GENMIDI.GS.wopl"
|
||||
size: 118767
|
||||
md5: 29570afc6ccea3d9ef7d2734f02e6cab
|
||||
sha1: 538d220d87b86b997f539265eb12a6c319e17a1c
|
||||
description: "OPL3 instrument bank"
|
||||
note: >-
|
||||
Collected from an `fm_banks` directory added to the search paths beside the
|
||||
soundfont directory, for the OPL synthesiser.
|
||||
source_ref: "Q3E/src/main/jni/zdoom/src/gameconfigfile.cpp:221, 259"
|
||||
|
||||
- name: gs-by-papiezak-and-sneakernets.wopn
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
category: game_data
|
||||
path: "uzdoom/fm_banks/gs-by-papiezak-and-sneakernets.wopn"
|
||||
size: 274864
|
||||
md5: 4978fd39a6d78de1cf1021e24424f822
|
||||
sha1: eaca5d7a9fe1db6094990be0d8916b7f97920db1
|
||||
description: "OPN2 instrument bank"
|
||||
note: >-
|
||||
Collected from the same `fm_banks` directory, for the OPN2 synthesiser.
|
||||
source_ref: "Q3E/src/main/jni/zdoom/src/gameconfigfile.cpp:221, 259"
|
||||
|
||||
- name: ecwolf.pk3
|
||||
required: true
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
category: game_data
|
||||
path: "ecwolf/ecwolf.pk3"
|
||||
size: 185013
|
||||
md5: d9dcd91db4a0bc45ba12a01ad1828be8
|
||||
sha1: d327b48f83d9b95c5a49597145d96be80be3eade
|
||||
description: "ECWolf engine resource archive"
|
||||
note: >-
|
||||
Named by MAIN_PK3 and passed to the game selector with the program
|
||||
directory; failing to open it ends the process with "Could not open
|
||||
ecwolf.pk3!". It holds the IWADINFO rules that identify which Wolfenstein
|
||||
data set is present, the palettes and the actor definitions. This build
|
||||
reads it from disk after extraction, unlike the libretro core which
|
||||
compiles it in.
|
||||
source_ref: "Q3E/src/main/jni/ecwolf/src/version.h:12, Q3E/src/main/jni/ecwolf/src/wl_iwad.cpp:604, Q3E/src/main/jni/ecwolf/src/wl_main.cpp:1294-1307, Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:186-195"
|
||||
|
||||
- name: glprogs.pk4
|
||||
required: true
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
category: game_data
|
||||
size: 98396
|
||||
md5: 3155df291027d253e2596db3fca1ac4a
|
||||
sha1: 2651f1eff1785999918c08600f079e1ad4a206e7
|
||||
description: "The Dark Mod GLSL shader set rewritten for OpenGL ES"
|
||||
note: >-
|
||||
Unpacked into the standalone directory as `glslprogs/`, the tree the
|
||||
renderer compiles its programs from. Version-stamped with the engine
|
||||
release so a Dark Mod update replaces it.
|
||||
source_ref: "Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:83-92, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:705-722, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:391"
|
||||
|
||||
- name: renderprogs.pk4
|
||||
required: true
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
category: game_data
|
||||
size: 223453
|
||||
md5: 7edee35e1e53475d9557c1026877ae7c
|
||||
sha1: ab89141b5772de1df43831e64c53aece28c2e6f6
|
||||
description: "DOOM 3 BFG shader set rewritten for OpenGL ES"
|
||||
note: >-
|
||||
Unpacked into `base/renderprogs/` beside the game resources. The shipped
|
||||
BFG data carries the desktop HLSL set, which this build cannot use.
|
||||
source_ref: "Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:72-81, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:768-787, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:393"
|
||||
|
||||
- name: glsl.pk4
|
||||
required: true
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
category: game_data
|
||||
size: 51642
|
||||
md5: b94d15df5bf72a4c4510c834ef404ebb
|
||||
sha1: 87f0f5ec3db3855c4453a9031ce695d39d0eaa44
|
||||
description: "Skin Deep shader set rewritten for OpenGL ES"
|
||||
note: >-
|
||||
Unpacked into `base/glsl/` and stamped with the game version.
|
||||
source_ref: "Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:197-206, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:726-745, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:399"
|
||||
|
||||
- name: zzz_etqwbase.pk4
|
||||
required: true
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
category: game_data
|
||||
size: 136061
|
||||
md5: 2f5c49dca4993da5911d632d3962c1f3
|
||||
sha1: 0d4dee46085ced0fd117030a13533d903265301c
|
||||
description: "ETQW shader set and megatexture patches"
|
||||
note: >-
|
||||
Unpacked into the ETQW base folder. The name sorts last so the entries
|
||||
override the ones the retail archives carry.
|
||||
source_ref: "Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:208-217, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:747-766, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:400"
|
||||
|
||||
- name: legacy_v2.83.2.pk3
|
||||
required: true
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
category: game_data
|
||||
path: "etw/legacy/legacy_v2.83.2.pk3"
|
||||
size: 30993701
|
||||
md5: ea838df0911a68b5f22f5010d37867f5
|
||||
sha1: f156945f70545e37fb5ee33a95ee97204a7f60b7
|
||||
description: "ET: Legacy mod archive matching the built engine"
|
||||
note: >-
|
||||
Copied into the `legacy` folder, the mod the engine runs by default; the
|
||||
retail Enemy Territory data in `etmain` stays the user's to supply. The
|
||||
file name is built from the engine version, so a Legacy update lands under
|
||||
a new name.
|
||||
source_ref: "Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:175-184, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:845-868, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:397"
|
||||
|
||||
- name: extras.pk3
|
||||
required: true
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
category: game_data
|
||||
path: "xash/extras.pk3"
|
||||
size: 1491748
|
||||
md5: 1a65bf279b969c017a34497d183e5544
|
||||
sha1: 971249b94cb62fbca2f42c8ab7a7d29d30e5b368
|
||||
description: "Xash3D touch controls, fonts and controller database"
|
||||
note: >-
|
||||
Mounted ahead of every game directory from the path in
|
||||
XASH3D_EXTRAS_PAK1. It carries the touch-control textures the mobile build
|
||||
draws and the gamecontrollerdb.txt the SDL joystick layer reads through the
|
||||
virtual filesystem.
|
||||
source_ref: "Q3E/src/main/jni/xash3d/xash3d-fwgs/filesystem/filesystem.c:1376-1378, Q3E/src/main/jni/xash3d/xash3d-fwgs/engine/platform/sdl2/joy_sdl2.c:346, Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:142-151"
|
||||
|
||||
- name: cs16client-extras.pk3
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
category: game_data
|
||||
path: "xash/cs16client-extras.pk3"
|
||||
size: 12976942
|
||||
md5: 15bf94e95c94c301f92270b6775b9a3d
|
||||
sha1: ab0c9f66e9e9be4af96c20d5ce3a9d684eeff2c2
|
||||
description: "Counter-Strike 1.6 client resources for Xash3D"
|
||||
note: >-
|
||||
Extracted right after the base extras and mounted the same way, for the
|
||||
cs16 and cs16_yapb server classes the launcher offers.
|
||||
source_ref: "Q3E/src/main/jni/xash3d/xash3d-fwgs/filesystem/filesystem.c:1380-1382, Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:153-162, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:815-843, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:412"
|
||||
|
||||
- name: extras.zip
|
||||
required: true
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
category: game_data
|
||||
size: 15081926
|
||||
md5: 15944b9068602a6d36905be035e9e547
|
||||
sha1: 388bfce5ba834f5ed329a0fa9864b0b75840e951
|
||||
description: "Source engine fonts and platform archive"
|
||||
note: >-
|
||||
Unpacked into `files/` under the Source standalone directory. It carries
|
||||
the DejaVu, Droid Sans Fallback, Itim and Liberation faces the engine
|
||||
substitutes for the Windows fonts, and extras_dir.vpk.
|
||||
source_ref: "Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:164-173, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:895-919, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:396"
|
||||
|
||||
- name: d3_sabot_a7.pk4
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
category: game_data
|
||||
path: "doom3/base/zzz_idTech4Amm_d3_sabot_a7.pk4"
|
||||
size: 2399406
|
||||
md5: 494bd9601fc82752cc6c6d14cf684d8e
|
||||
sha1: 8179522bcd5abc4c5a3194bf49f6821738644500
|
||||
description: "Stupid Angry Bot definitions for DOOM 3 multiplayer"
|
||||
note: >-
|
||||
Extracted on request into the current mod folder under a name prefixed to
|
||||
sort last. It holds the defs, scripts and multiplayer AAS files the bot
|
||||
commands need. A second entry repacks only the `maps/` tree into
|
||||
zzz_idTech4Amm_d3_sabot_a7_aas.pk4 for users who already have the mod.
|
||||
source_ref: "Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:48-58, 129-140, README.md:256-259"
|
||||
|
||||
- name: q4_sabot_a9.pk4
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
category: game_data
|
||||
path: "quake4/q4base/zzz_idTech4Amm_q4_sabot_a9.pk4"
|
||||
size: 21143072
|
||||
md5: 710997decddd8ace044d028fe79b52e9
|
||||
sha1: a3af9251c6a2b4b8d02108bd7b91919aace929dd
|
||||
description: "Stupid Angry Bot definitions for Quake 4 multiplayer"
|
||||
note: >-
|
||||
The Quake 4 counterpart, extracted the same way, with the same
|
||||
maps-only variant written as zzz_idTech4Amm_q4_sabot_a9_aas.pk4.
|
||||
source_ref: "Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:36-46, 116-127, README.md:256-259"
|
||||
|
||||
- name: play_original_doom3_level.pk4
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
category: game_data
|
||||
path: "doom3/rivensin/zzz_idTech4Amm_play_original_doom3_level.pk4"
|
||||
size: 16866
|
||||
md5: 214e3daebf5d11e40cd06ca5e1b02971
|
||||
sha1: de368e97ca86f489c1f10ea148e0812913c25c7d
|
||||
description: "Rivensin patch restoring the original DOOM 3 levels"
|
||||
note: >-
|
||||
Extracted on request into the `rivensin` mod folder, the one patch tied to
|
||||
a named mod rather than to whichever mod is selected.
|
||||
source_ref: "Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:60-70"
|
||||
|
||||
- name: doom3_chinese_translation_doom3bfg.pk4
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
category: game_data
|
||||
path: "doom3/base/doom3_chinese_translation_doom3bfg.pk4"
|
||||
size: 5138117
|
||||
md5: 4fa638d0accdd696149d83f3579d185e
|
||||
sha1: 8c06159ab1012b271d39d624b45c55c2360dc443
|
||||
description: "Chinese text and fonts for DOOM 3, taken from the BFG release"
|
||||
note: >-
|
||||
Copied into the DOOM 3 base folder on request. It pairs with the
|
||||
wide-character language and BFG font support compiled into the engine.
|
||||
source_ref: "Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:105-114, README.md:37, 168-169"
|
||||
|
||||
- name: controls_theme.zipak
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
size: 3133490
|
||||
md5: 9f6f5073fda93251f7a48a91a6d4c5d1
|
||||
sha1: 5be92df9e74843bc6071e3627f4fd876d499a490
|
||||
description: "Button image themes carried in the apk"
|
||||
note: >-
|
||||
Read in place from the assets, never extracted. Archives with this suffix
|
||||
are folded into the search path wherever they are found, and the
|
||||
`controls_theme/` folders inside become named entries in the theme chooser;
|
||||
this one carries the cs16-client and source-engine sets.
|
||||
source_ref: "Q3E/src/main/java/com/n0n3m4/q3e/Q3EGlobals.java:230, Q3E/src/main/java/com/n0n3m4/q3e/karin/KFDManager.java:44, 102, 113-129, Q3E/src/main/java/com/n0n3m4/q3e/karin/KFileDescriptor.java:56, 102"
|
||||
|
||||
- name: btn_jump.png
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
description: "Default on-screen button images, 52 files"
|
||||
note: >-
|
||||
Read from the assets root when the theme is the built-in one. The set
|
||||
covers the alphabet, the digits and the named actions the games bind, and
|
||||
any of the 52 names can be replaced by putting a file of the same name in
|
||||
one of the external search paths.
|
||||
source_ref: "Q3E/src/main/java/com/n0n3m4/q3e/Q3EContextUtils.java:348-370, idTech4Amm/src/main/java/com/n0n3m4/DIII4A/launcher/SetupControlsThemeFunc.java:167-177"
|
||||
|
||||
- name: generic.json
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
path: "keyboard/generic.json"
|
||||
size: 10278
|
||||
md5: ef9b27699a627334930f6d4252b644d5
|
||||
sha1: 839c05a60c231d409f90b477bf2001c28f10b1bb
|
||||
description: "Virtual keyboard layout"
|
||||
note: >-
|
||||
Read straight from the assets when the on-screen keyboard is built, without
|
||||
going through the external search path, so nothing outside the archive
|
||||
replaces it.
|
||||
source_ref: "Q3E/src/main/java/com/n0n3m4/q3e/Q3EKeyboard.java:74"
|
||||
|
||||
- name: autoexec.cfg
|
||||
required: false
|
||||
unsourceable: "console commands written by the user for one install"
|
||||
description: "Console script the engine runs at startup"
|
||||
note: >-
|
||||
Executed by the id-derived engines from the mod folder and from the base
|
||||
folder. The launcher lists both positions next to the config file each game
|
||||
writes for itself, DoomConfig.cfg, Quake4Config.cfg, preyconfig.cfg,
|
||||
q3config.cfg, wolfconfig.cfg, Darkmod.cfg, uzdoom.ini and the rest, and
|
||||
opens any of them in its editor. The config files are written by the
|
||||
engines; this one only ever comes from the user.
|
||||
source_ref: "Q3E/src/main/java/com/n0n3m4/q3e/Q3EInterface.java:722-836, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:63-88, idTech4Amm/src/main/java/com/karin/idTech4Amm/ConfigEditorActivity.java:103"
|
||||
|
||||
- name: description.txt
|
||||
required: false
|
||||
unsourceable: "text written by whoever assembled the mod folder"
|
||||
description: "Blurb shown for a mod in the chooser"
|
||||
note: >-
|
||||
Read from the root of a mod folder when the mod list is built and shown
|
||||
under the folder name with its size. The control theme chooser reads a file
|
||||
of the same name from a theme folder, there with an optional language
|
||||
suffix.
|
||||
source_ref: "idTech4Amm/src/main/java/com/n0n3m4/DIII4A/launcher/ChooseGameModFunc.java:242-251, Q3E/src/main/java/com/n0n3m4/q3e/Q3EContextUtils.java:330-341"
|
||||
|
||||
- name: controller_map.txt
|
||||
required: false
|
||||
load_from: internal_storage
|
||||
description: "Extra SDL controller mappings"
|
||||
note: >-
|
||||
SDL builds this path from the internal storage directory of the package
|
||||
when SDL_GAMECONTROLLERCONFIG_FILE is unset, which it is here, and reads it
|
||||
while the game controller subsystem starts, after the compiled-in mappings
|
||||
and before the ones the environment carries. It reaches the six games the
|
||||
app runs on SDL, Xash3D, Source, ECWolf, Skin Deep, Quadrilateral Cowboy
|
||||
and Icarus; the other engines take input from the Q3E frontend instead. The
|
||||
SDL2 tree under deplibs is what the build compiles, version 2.32.5.
|
||||
source_ref: "Q3E/src/main/jni/deplibs/SDL2/src/joystick/SDL_gamecontroller.c:1873-1884, 1890-1916, Q3E/src/main/jni/deplibs/SDL2/include/SDL_version.h:59-61, Q3E/src/main/jni/CMakeLists.txt:90-102, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:430, 454-461"
|
||||
|
||||
- name: "controls_theme/<name>/btn_jump.png"
|
||||
required: false
|
||||
unsourceable: "button artwork authored per theme, with no released set to collect"
|
||||
description: "Button images of a user theme"
|
||||
note: >-
|
||||
A folder under `controls_theme/` in any search path, or inside a `.zipak`
|
||||
there, appears in the chooser under its own name and its images replace the
|
||||
built-in ones. A `description.txt` beside them, optionally suffixed with a
|
||||
language tag, supplies the name, author and description the chooser shows.
|
||||
source_ref: "Q3E/src/main/java/com/n0n3m4/q3e/Q3EContextUtils.java:305-345, idTech4Amm/src/main/java/com/n0n3m4/DIII4A/launcher/SetupControlsThemeFunc.java:136-179"
|
||||
|
||||
- name: gameaarch64.so
|
||||
required: false
|
||||
aliases: [gamearm.so]
|
||||
unsourceable: "compiled per mod against the published SDK, with no released binary to collect"
|
||||
description: "External idTech 4 mod game library"
|
||||
note: >-
|
||||
Looked for in the mod folder of DOOM 3, Quake 4, Prey or ETQW when the
|
||||
external-library preference is on, copied to a private cache and named to
|
||||
the engine through harm_fs_gameLibPath. The suffix follows the running
|
||||
architecture, gameaarch64.so on arm64 and gamearm.so on armv7. Without it
|
||||
the engine keeps the game code built into the apk. The launcher also
|
||||
accepts a full path to any libxxxxx.so instead.
|
||||
source_ref: "Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:342-372, 429-434, idTech4Amm/src/main/java/com/n0n3m4/DIII4A/launcher/AddExternalLibraryFunc.java:71-86, README.md:229-233, 241-251"
|
||||
|
||||
- name: server.so
|
||||
required: false
|
||||
aliases: [client.so, menu.so]
|
||||
unsourceable: "compiled per mod from hlsdk-portable, with no released binary to collect"
|
||||
description: "External Xash3D game libraries"
|
||||
note: >-
|
||||
Read from `lib/<arch>/` inside the Xash3D mod folder when the
|
||||
external-library preference is on, copied to the private cache and passed
|
||||
as the dll, clientlib and menulib parameters with gamelibdir pointing at
|
||||
the cache. The three default names are used unless the command line names
|
||||
others, and any further libraries in the folder are copied alongside.
|
||||
source_ref: "Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:373-414, 445-475"
|
||||
|
||||
exclusion_note: >
|
||||
The retail game data is not listed. Every engine here loads it by globbing the
|
||||
base folder rather than by name, `.pk4` for the idTech 4 lineage, `.resources`
|
||||
for DOOM 3 BFG, the four container suffixes for Yamagi, `*.gro` for Serious
|
||||
Sam, and what it gates on is a `default.cfg` that lives inside those archives
|
||||
rather than beside them. The names that do appear in the code are the forty-nine
|
||||
the DOOM engine accepts as an IWAD, read from `iwadinfo.txt` in
|
||||
`game_support.pk3`, the four the launcher offers as selectable UZDOOM data
|
||||
files, and the five extensions ECWolf reports when no Wolfenstein data is
|
||||
found; all of them are game content, held here the same way the PrBoom and
|
||||
boom3 profiles hold theirs, in the notes. `stdout.txt` and `stderr.txt` are
|
||||
opened for writing by the engine and read back only to show the last run log,
|
||||
and an `idtech4amm.version` stamp is written beside each extracted resource.
|
||||
ref: doom3/neo/framework/FileSystem.cpp:2052, 3397-3399,
|
||||
Q3E/src/main/jni/quake2/yquake2/src/common/filesystem.c:1801-1850,
|
||||
Q3E/src/main/jni/serioussam/SamTFE/Sources/Engine/Base/Stream.cpp:212-247,
|
||||
Q3E/src/main/jni/ecwolf/src/wl_iwad.cpp:766,
|
||||
Q3E/src/main/jni/q3e/q3emisc.c:23-25,
|
||||
idTech4Amm/src/main/java/com/n0n3m4/DIII4A/GameLauncher.java:2899, 2916,
|
||||
Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:697-703
|
||||
@@ -0,0 +1,177 @@
|
||||
emulator: iNES
|
||||
type: standalone
|
||||
core_classification: other
|
||||
source: "https://fms.komkon.org/iNES/iNES-Android-6104.apk"
|
||||
upstream: closed-source
|
||||
author: "Marat Fayzullin (Garage Research)"
|
||||
profiled_date: "2026-08-11"
|
||||
core_version: "6.1.4"
|
||||
display_name: "Nintendo - NES / Famicom (iNES)"
|
||||
cores:
|
||||
- ines
|
||||
systems:
|
||||
- nintendo-nes
|
||||
- nintendo-fds
|
||||
mode: standalone
|
||||
|
||||
notes: |
|
||||
NES and Famicom emulator by Marat Fayzullin, covering cartridges, the Famicom
|
||||
Disk System and the VS System. The build read here is the free Android APK the
|
||||
author publishes himself, package com.fms.ines versionName 6.1.4 versionCode
|
||||
6104, apk md5 d0e1b93b09d4b58294efd4e1509e25ca, signed CN=Marat Fayzullin
|
||||
O=Garage Research issued 2011, sha256
|
||||
d09469e9b550cbc9005d3bd089f3df5f0ba89cba71cdd3b33736a0382d6f9848; the two
|
||||
download paths on that site serve the same bytes. Google Play carries the
|
||||
emulator as com.fms.ines.free, the package ES-DE launches, and inside VGBAnext
|
||||
as com.fms.ng, the author recording that Play removed the original com.fms.ines
|
||||
listing over its built-in cheats. The native libraries keep their symbol
|
||||
tables, so the readings below cite libmain.so offsets in the x86_64 slice; the
|
||||
arm64-v8a, armeabi-v7a, armeabi and x86 slices carry the same filename set. The
|
||||
free iNES 6.1 builds for Windows and Ubuntu were read beside it and open the
|
||||
same files under the same names. No source has ever been published: the author
|
||||
releases ColEm and fMSX as source archives, while every iNES download on the
|
||||
same site, from 0.7 for AIX and SunOS through 6.1, is a binary package.
|
||||
ref: iNES-Android-6104.apk META-INF/CERT.RSA, https://fms.komkon.org/iNES/,
|
||||
iNES61-Windows-bin.zip, iNES61-Ubuntu-x86-bin.tgz
|
||||
|
||||
One directory holds everything the emulator reads. MainActivity hands
|
||||
EMULib.k() to jniStart, which copies it into the buffer GetHomeDir returns and
|
||||
passes that same buffer to SetPrivateDir. Every open goes through mopen, which
|
||||
calls OpenRealFile: the name is tried as given and again as
|
||||
<PrivateDir>/<basename>, and when both open the larger of the two is kept. That
|
||||
directory is <ExternalStorage> joined with the application label up to its first
|
||||
space, so iNES, falling back to getExternalFilesDirs(null) when the path is not
|
||||
a writable directory. mopen layers gzdopen over the result, so any of these
|
||||
files also opens gzipped, and a content:// name is routed to the Android storage
|
||||
framework instead.
|
||||
ref: MainActivity.java:2257, EMULib.java:1328, EMULib.java:408,
|
||||
EMULib.java:474-505, EMULib.java:682, libmain.so 0x1212a-0x1218c,
|
||||
libmain.so OpenRealFile 0x32070-0x32285, libmain.so mopen 0x322b0-0x323f2
|
||||
|
||||
DISKSYS.ROM is the only filename compiled into the emulator. LoadFDS reads the
|
||||
disk image first, taking a bare *NINTENDO-HVC* header or the 16 byte FDS wrapper
|
||||
ahead of it, then opens DISKSYS.ROM and reads 0x2000 bytes into RAM at 0xE000. A
|
||||
failed open leaves the status at NOT FOUND and a short read at FAILED, and
|
||||
either makes LoadFDS return zero, so the disk never starts. Nothing about the
|
||||
image is checked past the length of that read. Cartridge titles never reach this
|
||||
path.
|
||||
ref: libmain.so LoadFDS 0x3bdd0-0x3c245, open 0x3bf97, read 0x3bfc5-0x3bff7,
|
||||
iNES61-Ubuntu-x86-bin ines 0x38165-0x381a9
|
||||
|
||||
The startup palette is <HomeDir>/iNES.pal, assembled in Application from
|
||||
GetHomeDir and held in PalName, which StartNES loads when it is set. LoadPAL
|
||||
reads the first 256 bytes: exactly 192 is taken as 64 RGB triples fed to
|
||||
SetColor one at a time, anything else is parsed as text. A missing file leaves
|
||||
the built-in palette in place. The desktop distribution ships twenty candidates
|
||||
under Palettes/ to copy into that single name, the Android package none.
|
||||
ref: libmain.so Application 0x39739-0x39795, StartNES 0x3a685-0x3a694,
|
||||
LoadPAL 0x3a870-0x3a930, iNES61-Windows-bin.zip Palettes/
|
||||
|
||||
LoadNES derives five companion names from the ROM path through MakeFileName:
|
||||
.sav, .ips, .cht, .pal and .sta. Started with no ROM name at all, Application
|
||||
substitutes CART.NES.
|
||||
ref: libmain.so LoadNES 0x3bb49, 0x3bc43, 0x3bcdc, 0x3bd2b, 0x3bd52,
|
||||
libmain.so Application 0x39887-0x3989c
|
||||
|
||||
Three package resources are read at runtime. assets/memfs.mp3 is passed whole to
|
||||
jniStart and mounted as an in-memory filesystem carrying one entry, CART.NES.
|
||||
assets/names.dat fills the title lookup and is then extended by
|
||||
<HomeDir>/names.dat, whose entries win on collision. assets/ROOT.chts opens the
|
||||
cheat browser, its Include lines pulling further sets through the same lookup,
|
||||
which falls back to <HomeDir>/Cheats and to the home directory itself.
|
||||
ref: MainActivity.java:2246-2257, libmain.so 0x11ca6-0x11ccc,
|
||||
FileInfo.java:260-295, Cheatopedia.java:339, 448, 505-520,
|
||||
CheatHelper.java:14-24
|
||||
|
||||
files:
|
||||
- name: DISKSYS.ROM
|
||||
system: nintendo-fds
|
||||
required: true
|
||||
min_size: 8192
|
||||
validation: [size]
|
||||
description: "Famicom Disk System BIOS"
|
||||
note: "Opened by bare name, so it resolves against the working directory and then against the home directory. Read as 0x2000 bytes into RAM at 0xE000; a missing file reports NOT FOUND and a short read FAILED, and either aborts the disk load. Only the length of that read is checked, so a longer file passes on its first 8192 bytes and no hash is compared. The open is gzip transparent, so a compressed copy answers too."
|
||||
source_ref: "libmain.so LoadFDS 0x3bdd0-0x3c245 (open 0x3bf97, read 0x3bfc5-0x3bff7), iNES61-Ubuntu-x86-bin ines 0x38165-0x381a9"
|
||||
|
||||
- name: iNES.pal
|
||||
system: nintendo-nes
|
||||
required: false
|
||||
unsourceable: "any 64 colour palette the user picks, under the one name the code builds"
|
||||
description: "startup colour palette"
|
||||
note: "Built as <HomeDir>/iNES.pal and loaded at startup when present, otherwise the built-in palette stands. Exactly 192 bytes is read as 64 RGB triples, any other length as text. No single file answers to this name: the desktop distribution ships twenty palettes under other names for the user to copy over."
|
||||
source_ref: "libmain.so Application 0x39739-0x39795, StartNES 0x3a685-0x3a694, LoadPAL 0x3a870-0x3a930"
|
||||
|
||||
- name: CART.NES
|
||||
system: nintendo-nes
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
category: game_data
|
||||
size: 24592
|
||||
md5: c1db31a2aa8a12432705fc8bd3c1156a
|
||||
sha1: 486eede1bb748d95efc8a2a3d46ef1a530100559
|
||||
crc32: "2e03cb7f"
|
||||
description: "sample ROM image started when no game is given"
|
||||
note: "The only entry in assets/memfs.mp3, which MainActivity reads whole and jniStart mounts as an in-memory filesystem. A 16 byte header plus one 16 KB PRG bank and one 8 KB CHR bank. Application passes this name to StartNES when it is invoked without a ROM, so launching through ES-DE never reaches it."
|
||||
source_ref: "MainActivity.java:2246-2257, libmain.so 0x11ca6-0x11ccc, libmain.so Application 0x39887-0x3989c"
|
||||
|
||||
- name: names.dat
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
category: game_data
|
||||
size: 21390
|
||||
description: "title database keyed by system and CRC32"
|
||||
note: "Parsed from assets as lines of key colon title, keys reading NES-4C629A95. The copy at <HomeDir>/names.dat is read straight afterwards into the same map, so user entries extend and override the packaged ones."
|
||||
source_ref: "FileInfo.java:260-295"
|
||||
|
||||
- name: ROOT.chts
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "arrives with the application package, not sourced separately"
|
||||
category: game_data
|
||||
size: 27447
|
||||
description: "cheat database read by the Cheatopedia browser"
|
||||
note: "Looked up in the package assets first, then through the home directory, its subdirectories and Downloads, with <HomeDir>/Cheats as the default cheat directory. Include lines pull further sets through the same lookup; the package carries seven of them, battle-toads, dragon-warrior, dragon-warrior-2, fceu, final-fantasy-2, final-fantasy-3 and super-mario-brothers."
|
||||
source_ref: "Cheatopedia.java:339, 448, 505-520, CheatHelper.java:14-24"
|
||||
|
||||
- name: "<game>.ips"
|
||||
required: false
|
||||
unsourceable: "a patch the user supplies for one title"
|
||||
category: game_data
|
||||
description: "IPS patch applied to the loaded ROM"
|
||||
note: "Named from the ROM path by MakeFileName and applied by ApplyIPS when present. A patch chosen by hand goes through the same call in LoadFile."
|
||||
source_ref: "libmain.so LoadNES 0x3bc43 (ApplyIPS 0x3bc93), LoadFile 0x3acf8"
|
||||
|
||||
- name: "<game>.cht"
|
||||
required: false
|
||||
unsourceable: "cheat codes the user writes or collects per title"
|
||||
category: game_data
|
||||
description: "cheat codes for one title"
|
||||
note: "Named from the ROM path by MakeFileName and read by LoadCHT when present. Distinct from the .chts sets of the Cheatopedia browser. The menu handler reaches the same loader for a file picked by hand."
|
||||
source_ref: "libmain.so LoadNES 0x3bcdc (LoadCHT 0x3bcec), Joystick 0x39e7f"
|
||||
|
||||
- name: "<game>.pal"
|
||||
required: false
|
||||
unsourceable: "any 64 colour palette the user picks for one title"
|
||||
category: game_data
|
||||
description: "colour palette for one title"
|
||||
note: "Named from the ROM path by MakeFileName and read by LoadPAL when present, taking precedence over the startup palette for that game."
|
||||
source_ref: "libmain.so LoadNES 0x3bd2b"
|
||||
|
||||
exclusion_note: >
|
||||
Left out are the files iNES writes and reads back itself, which are emulator
|
||||
state rather than anything a user obtains: <game>.sav holding battery backed
|
||||
cartridge RAM, <game>.sta and the desktop builds' DEFAULT.STA holding saved
|
||||
emulation state, and LOG.MID, the soundtrack the emulator records when the MIDI
|
||||
log is toggled on. libOpenSLES.so is left out as the Android audio library the
|
||||
system provides, dlopen'd by name from InitAudio and the only other literal
|
||||
filename in the binary. The twenty palettes under Palettes/ in the Windows and
|
||||
Ubuntu distributions are left out as the shipped candidates for iNES.pal, which
|
||||
the emulator never opens under those names; four of them are the VS System
|
||||
chip palettes, RP2C04-001, RP2C04-002, RP2C04-003 and RP2C05-004, and they
|
||||
reach the emulator through the palette entries above rather than a path of
|
||||
their own. Neither the VS System nor the FamilyBASIC keyboards need a file:
|
||||
DISKSYS.ROM is the only image the binary names.
|
||||
ref: libmain.so LoadNES 0x3bb49, 0x3bd52, libmain.so InitAudio 0x12cfc,
|
||||
iNES61-Ubuntu-x86-bin ines DEFAULT.STA, iNES61-Windows-bin.zip Palettes/
|
||||
@@ -0,0 +1,205 @@
|
||||
emulator: Infinity
|
||||
type: standalone
|
||||
core_classification: community_fork
|
||||
based_on: "fake-08 by jtothebell"
|
||||
source: "https://play.google.com/store/apps/details?id=me.dt2dev.infinity"
|
||||
upstream: closed-source
|
||||
author: "GuoPing He"
|
||||
profiled_date: "2026-08-11"
|
||||
core_version: "5"
|
||||
display_name: "PICO-8 (Infinity)"
|
||||
cores:
|
||||
- infinity
|
||||
systems:
|
||||
- pico8
|
||||
mode: standalone
|
||||
|
||||
notes: |
|
||||
Android package me.dt2dev.infinity, closed source, free with ads on Google Play.
|
||||
Two builds are read here, versionCode 501 (versionName 5, minSdk 32, targetSdk 37,
|
||||
xapk sha256 d0040583814a634c9aa2ff56b8245f1eb94f33ee0785c264bccfa5188cd3a273) and
|
||||
versionCode 404 (minSdk 30), both carrying lib/arm64-v8a, the Play app signing
|
||||
certificate sha256
|
||||
eb7b3dd469cf44ab614abda7a367c20de540014a37bb2b915dffecf5f3268da2 and the Play
|
||||
distribution source stamp.
|
||||
|
||||
The engine is fake-08 compiled into libinfinity.so and driven through a nine
|
||||
method JNI bridge. Its Lua blobs are upstream: the settings cart is byte identical
|
||||
to fake-08 814991a and the default cart differs only where VER_STR is spliced, the
|
||||
Android build leaving that macro undefined so the boot cart reports v0.0.0.0. The
|
||||
global Lua glue is patched in five places, all in the pause menu, where "exit to
|
||||
menu" and "exit to settings" give way to a single "quit game" calling the native
|
||||
__quitgame, navigation wraps around and the menu holds eight items instead of
|
||||
nine. No menu entry reaches the cart browser or the settings cart any more, the
|
||||
Compose interface listing the library instead.
|
||||
ref: Fake8.java:27-44, 60, 95,
|
||||
libinfinity.so arm64 .rodata DefaultCart / FakoSettings / p8GlobalLuaFunctions
|
||||
blobs, symbol __quitgame
|
||||
|
||||
A cart never reaches the engine as a path. Java reads the bytes into a direct
|
||||
ByteBuffer, from the application assets for a built-in cart or through the content
|
||||
resolver for anything else, then hands the buffer to nativeStart with the save
|
||||
state name <cart>.ss and the application's internal files directory, where a cdata
|
||||
subdirectory holds the <id>.p8d.txt cart data files. No storage permission is
|
||||
declared: the cart library is a directory tree granted through the storage access
|
||||
framework, and the only write outside internal storage is the .nomedia file that
|
||||
the "Show Carts in Photos" switch creates or deletes there.
|
||||
ref: pg0.java:50-92, ok0.java:139-146, yk0.java:54-63,
|
||||
libinfinity.so arm64 .rodata ".p8d.txt"
|
||||
|
||||
ES-DE targets me.dt2dev.infinity/.SchemeActivity with a VIEW intent on its own
|
||||
content provider. The activity reads the display name from the provider, accepts
|
||||
it only when it ends in .p8 or .p8.png, strips that extension and forwards
|
||||
infinity://game with cart_uri, filename, save_state=false and assets=false to
|
||||
MainActivity. The manifest filter announces the content scheme with the image/png
|
||||
type, which an explicit component bypasses.
|
||||
ref: SchemeActivity.java:25-84, AndroidManifest.xml activity me.dt2dev.infinity.SchemeActivity
|
||||
|
||||
Two graphics backends. OpenGL ES is the default and carries its three fragment
|
||||
programs as GLSL string literals inside the library. Vulkan, offered as beta,
|
||||
reads SPIR-V modules from the application assets instead, one vertex module plus
|
||||
one fragment module chosen by the display filter. Version 501 ships no shader
|
||||
asset at all, version 404 ships the four listed below, and both libraries name
|
||||
them; the loader takes no null check between AAssetManager_open and
|
||||
AAsset_getLength. The manifest requires only abi and density splits, so no asset
|
||||
pack can deliver them separately.
|
||||
ref: vh.java:381 graphics_backend default 0, vh.java:297 display_filter default 0,
|
||||
libinfinity.so arm64 0xa6ee0-0xa7098, 0x9c72c-0x9c828
|
||||
|
||||
files:
|
||||
- name: common.vert.spv
|
||||
path: "assets/shaders/common.vert.spv"
|
||||
system: pico8
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "ships inside the application package"
|
||||
category: game_data
|
||||
size: 748
|
||||
md5: 541e16aa5651699bb085c954ec1b043e
|
||||
sha1: 20815dcbfaff559ec0faf0f890ad473a3b784ed0
|
||||
description: "Vulkan vertex shader module"
|
||||
note: "Opened first whenever the Vulkan backend starts, whatever the display filter. Bytes from versionCode 404."
|
||||
source_ref: "libinfinity.so arm64 0xa7078, 0x9c780-0x9c78c"
|
||||
|
||||
- name: none.frag.spv
|
||||
path: "assets/shaders/none.frag.spv"
|
||||
system: pico8
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "ships inside the application package"
|
||||
category: game_data
|
||||
size: 580
|
||||
md5: 8437c4e750da7183dffc7b98f9938377
|
||||
sha1: f3aae57c3f776d35ddf2690679221c05745dcc8b
|
||||
description: "Vulkan fragment shader module, unfiltered output"
|
||||
note: "Chosen for any display filter value other than 1 and 2, the stored default being 0. Bytes from versionCode 404."
|
||||
source_ref: "libinfinity.so arm64 0xa6f04-0xa6f40, 0xa7090-0xa7098, 0x9c7ec-0x9c828"
|
||||
|
||||
- name: crt.frag.spv
|
||||
path: "assets/shaders/crt.frag.spv"
|
||||
system: pico8
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "ships inside the application package"
|
||||
category: game_data
|
||||
size: 1864
|
||||
md5: c4878a2aaee2e3c26d3d4aeeeaa3ac25
|
||||
sha1: 92822c268c59f60fe9a4098768be599006f7f1ab
|
||||
description: "Vulkan fragment shader module, CRT filter"
|
||||
note: "Chosen when the display filter is 1. Bytes from versionCode 404."
|
||||
source_ref: "libinfinity.so arm64 0xa6f34-0xa6f40, 0xa7090-0xa7098, 0x9c7ec-0x9c828"
|
||||
|
||||
- name: lcd.frag.spv
|
||||
path: "assets/shaders/lcd.frag.spv"
|
||||
system: pico8
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "ships inside the application package"
|
||||
category: game_data
|
||||
size: 1700
|
||||
md5: 76f36cbe69708d631ae356bcd49274b2
|
||||
sha1: 1a3c0aa0b93cc1ee4690b2c0d593497d003b6165
|
||||
description: "Vulkan fragment shader module, LCD filter"
|
||||
note: "Chosen when the display filter is 2. Bytes from versionCode 404."
|
||||
source_ref: "libinfinity.so arm64 0xa6f10-0xa6f30, 0xa7090-0xa7098, 0x9c7ec-0x9c828"
|
||||
|
||||
- name: 7x7demake.p8.png
|
||||
path: "assets/7x7demake.p8.png"
|
||||
system: pico8
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "ships inside the application package"
|
||||
category: game_data
|
||||
size: 7443
|
||||
md5: 1d6416a591c99b03c58b41f0dd5537b0
|
||||
sha1: 35ec298b803b29b6bee6d89f46507c50a3461b35
|
||||
description: "Built-in cart, 7x7 Demake"
|
||||
note: "Held as a file:///android_asset URI and prepended to the library when the built-in carts switch is on, the loader taking the path after the scheme and reading it from the assets."
|
||||
source_ref: "qd.java:15-17, pg0.java:50, ok0.java:139-142"
|
||||
|
||||
- name: tictactoe.p8.png
|
||||
path: "assets/tictactoe.p8.png"
|
||||
system: pico8
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "ships inside the application package"
|
||||
category: game_data
|
||||
size: 7537
|
||||
md5: 4f508068de9190c06775bfb4e47e2654
|
||||
sha1: 5a7d0bd289e971a4ea6dfb09704b56252b85fe01
|
||||
description: "Built-in cart, Infinity Tic Tac Toe"
|
||||
note: "Second entry of the same table, loaded the same way."
|
||||
source_ref: "qd.java:18-20, pg0.java:50, ok0.java:139-142"
|
||||
|
||||
- name: fake-08.md
|
||||
path: "assets/fake-08.md"
|
||||
system: pico8
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "ships inside the application package"
|
||||
category: game_data
|
||||
size: 5543
|
||||
md5: a382a7e446335d3ea20f85a21a5846ec
|
||||
sha1: 6d7e23241be0a110bc59110773963f678e199c32
|
||||
description: "Licence text shown for fake-08"
|
||||
note: "First of four names paired with the library names fake-08, coil, okio and DocumentFileCompat, each read from the assets when its entry is opened."
|
||||
source_ref: "ry0.java:14-15, yq0.java:125"
|
||||
|
||||
- name: coil.txt
|
||||
path: "assets/coil.txt"
|
||||
system: pico8
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "ships inside the application package"
|
||||
category: game_data
|
||||
size: 11347
|
||||
md5: 06f4dfd96b1e7f0b6d5cc7f7163c7904
|
||||
sha1: 14d28015d8a8c902d219b6a24d2241aa061dda09
|
||||
description: "Licence text shown for coil"
|
||||
source_ref: "ry0.java:14-15, yq0.java:125"
|
||||
|
||||
- name: okio.txt
|
||||
path: "assets/okio.txt"
|
||||
system: pico8
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "ships inside the application package"
|
||||
category: game_data
|
||||
size: 11358
|
||||
md5: 3b83ef96387f14655fc854ddc3c6bd57
|
||||
sha1: 2b8b815229aa8a61e483fb4ba0588b8b6c491890
|
||||
description: "Licence text shown for okio"
|
||||
source_ref: "ry0.java:14-15, yq0.java:125"
|
||||
|
||||
- name: dfc.txt
|
||||
path: "assets/dfc.txt"
|
||||
system: pico8
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "ships inside the application package"
|
||||
category: game_data
|
||||
size: 11357
|
||||
md5: 86d3f3a95c324c9479bd8986968f4327
|
||||
sha1: 7df059597099bb7dcf25d2a9aedfaf4465f72d8d
|
||||
description: "Licence text shown for DocumentFileCompat"
|
||||
source_ref: "ry0.java:14-15, yq0.java:125"
|
||||
Reference in new issue
Block a user