Repo ↗ · Source README ↗ · Markdown & license bundle

Image reference (original game): GunZ: The Duel · original-game box art, provided by IGDB. Image rights remain with their respective owners. This illustrates the referenced original game, not the actual visuals of this rewrite or mod.

Source maintainer: OpenRsG · Revision: e927bd052244 · Catalogued: 2026-10-12

Source license: Apache-2.0 · LICENSE · Article: Source README (format adapted)

The source README follows, with formatting adapted for this site and images replaced by source links. Feature, completion and testing claims belong to its authors and have not been independently playtested here. The Traditional Chinese translation was prepared with AI assistance.


GunZRs

A clean-room Rust port of GunZ: The Duel, built on Bevy.
It loads the maps, characters, weapons and effects straight from your Steam install.

[README image:Rust](https://www.rust-lang.org)
[README image:Bevy](https://bevyengine.org)
[README image:License](https://github.com/OpenRsG/GunZRs/blob/e927bd05224484725d0911876a483acb11e0f89e/LICENSE)
[README image:Get the game on Steam](https://store.steampowered.com/app/3139440/GunZ_The_Duel/)

README image:A dash with afterimages, a wall run and kick, a fight against three bots, the killcam, a rifle kill with the ELIMINATED confirmation, and the main menu, in Mansion

Mansion, recorded headlessly with <code>–shot</code> and <code>GUNZ_SEQ</code>: dash, wall run, three skill-1 bots, killcam, a kill, the menu.

No game files are included (the demo animation is a capture for illustration). You need your own copy
of the game; the port only reads its .mrs archives and never runs Gunz.exe.

Quick start

  1. Install GunZ: The Duel on Steam
    (or paste steam://install/3139440 into your browser to open the Steam client).
  2. Install Rust. On Linux, Bevy also needs the ALSA and udev development
    packages (libasound2-dev libudev-dev on Debian/Ubuntu, alsa-lib-devel systemd-devel on Fedora).
  3. Build and play. gunz-play finds the game through Steam’s library folders on its own; pass
    the install folder first if it lives somewhere unusual:
git clone https://github.com/OpenRsG/GunZRs && cd GunZRs
cargo run --release --bin gunz-play                       # main menu, game found via Steam
cargo run --release --bin gunz-play -- "/path/to/GUNZ THE DUEL"
./start.sh                                               # same, also tries the Flatpak install (GUNZ_GAME=DIR overrides)
Steam install GAME folder
Linux (native) ~/.steam/steam/steamapps/common/GUNZ THE DUEL
Linux (Flatpak) ~/.var/app/com.valvesoftware.Steam/.local/share/Steam/steamapps/common/GUNZ THE DUEL
Windows C:\Program Files (x86)\Steam\steamapps\common\GUNZ THE DUEL

Other library folder? In Steam, right-click the game, then Manage, Browse local files.
The port is developed and tested on Linux. A cross-check of the Windows target compiles, and CI
builds Linux, Windows and macOS, but nobody has played it on Windows or macOS yet.

Controls

Defaults follow the original game’s config.xml; C, T, F5-F9, [ and ] are this port’s extras.

Key Action
Mouse Aim (cursor is grabbed)
W A S D Run (full speed at once, stops at once); double-tap a direction to dash
C Dash: a 16 m/s burst in the held direction (forward if none)
Space Jump; near a wall in the air: wall kick; along a wall with W held: wall run
Left mouse, left Ctrl Attack (hold for automatic guns, chain slashes into a combo)
Right mouse, left Shift Guard (melee)
R Reload
1-5, Q / E, wheel Switch weapon (Q and wheel up: previous; E and wheel down: next)
Tab Scoreboard
Esc Pause menu (resume, controls, option toggles, main menu, quit)
Numpad 1-6, T, F5-F9 Taunt, emotes (bow, wave, laugh, cry, dance)
[ / ] Mouse sensitivity down / up
F Blitzkrieg upgrade panel (Up/Down, Enter buys)
M Blitzkrieg minimap on / off
1-9, arrows, Enter Blitzkrieg class screen at the start of the match (30 s; click works too)

CONTROLS (a main-menu tab, and in the Esc menu) rebinds every action above except Esc and the
Blitzkrieg keys, two bindings each: keys, mouse buttons 1-5 or the wheel. A key taken from another action says so. The mouse side
has sensitivity (shown as cm per 360 at 800 and 1600 DPI), vertical ratio, invert, acceleration
with its limit and a live speed curve, and, in the browser, raw input (unaccelerated pointer lock
in Chromium browsers; the desktop build always reads raw mouse motion). Everything is saved in
the profile.

GRAPHICS (a main-menu tab, and in the Esc menu) has three presets and every setting by itself:
ORIGINAL draws the image exactly as the game always did (no tonemapping, no effects, 4x MSAA);
ENHANCED (the default) and ULTRA add HDR with tonemapping, bloom, SMAA, sharpening, anisotropic
filtering, distance fog, vignette, film grain, chromatic aberration and camera-turn motion blur;
every screen effect has its own strength (OFF costs nothing): speed effects (light rays and radial
blur while dashing or falling, and a dash that widens the view for a moment), a hit flash, and a
drained, throbbing screen at low health. Dust
rings from the game’s own effects mark ground dashes, wall kicks and hard landings. LIGHTING lights the characters
from the map’s own lightmap colours (with a rim light), lights up the walls, floor and characters
around muzzle flashes and explosions, and puts a soft contact shadow under every character.
WORLD EFFECTS has the Explosions slider: at 0 (ORIGINAL) rockets and grenades show the game’s own
fireball sprite; above it they become a full explosion (a blinding flash, a fireball that cools
into a lingering smoke plume, bouncing sparks, debris, dust along the floor, a shock ring and a
scorch mark, a strong light and a camera shake), richer at ULTRA.
Also field of view, vsync and a frame limit (not in the browser). Changes show in the match at once
and are saved in the profile; gunz-play --gfx original|enhanced|ultra picks a preset for one run.

PLAYER (a main-menu tab) shows your character idling in its lobby pose. Its EFFECTS panel has two
tabs. DASH picks what a dash leaves behind (afterimages, glowing sparks, both, or nothing); SLASH
picks the trail your sword swings leave (arc, energy, fire or none, plus sparks where a blow
lands). Both choose a colour (team, cyan, gold, violet, ember, toxic or rainbow) and an amount; the
character dashes or swings a katana in the preview to show each change, and DEMO replays it.
Your colour is used for your own dashes and swings; other players keep team colours. None of the
trails are in the original game, so the ORIGINAL graphics preset hides them.

Combo meter and killing sprees (not in the original game; the Combo option or --no-combo hides
them): every hit you land within 2.5 s of the last grows a combo whose multiplier climbs from x1 to
x8 (at 5, 10, 20, 35, 50, 70 and 100 hits), and damage and kills score points times it. Kills less
than 4 s apart announce DOUBLE, TRIPLE, QUAD, MULTI and MONSTER KILL; kills without dying announce
KILLING SPREE (3), RAMPAGE (5), DOMINATING (7), UNSTOPPABLE (10) and GODLIKE (15). Each banner
slams in with a screen-edge flash, a shake and its own sound. The sounds are synthesized in code.

Dead in a round mode? Space or click cycles the player you spectate.

Your profile (level, XP, bounty, inventory, equipped items) is saved in
$XDG_DATA_HOME/gunzrs/profile.txt (%APPDATA%\gunzrs\profile.txt on Windows). Kills and match
results pay XP and bounty; spend the bounty in the SHOP tab and equip items in INVENTORY.

K-style techniques

The original game’s bug-born movement tech works as ordinary features, always on, for you and the
bots (timings are estimates, see docs/formats.md “K-style techniques”). With the default
loadout (katana, revolver, rifle) and the keys above, every technique of the usual guide works;
each input sequence was played headless and its log checked (the juggle’s last hit only by bots):

Technique How
Dash, air dash C or a double tap: a 16 m/s burst with the game’s dash effect; one in the air per jump; a slash out of a dash, a wall kick or a jump gives it back; after falling for 1.5 s you can dash in the air without limit (super dash)
Dash cancel Slash during a dash, a wall kick or a wall run to cancel it: full control, switch, guard, jump or dash again
Flying / wall climbing Wall kick, slash, jump off the wall again, repeat (flash climb: slash, switch to a gun and back, jump)
Switch cancel Switch weapons during an air slash: slash shot (jump, slash, switch to a gun, shoot), flash step (slash, gun, back to the blade: no draw delay)
Reload shot Shoot, tap reload, switch weapon, shoot: the reload cancels the draw delay of the next weapon
Swapshot Shoot, switch to the other gun, shoot: each gun keeps its own fire delay
Gravity cancel An air slash near the top of a jump (or falling) holds your height for a moment, once per jump
Wall hang In the air against a wall with a blade, hold guard; forward + jump while hanging climbs
Butterfly, slide Slash, then guard before the recovery ends: you can move while the guard is up, and emote (slide); jump or dash out of it
Air butterfly (BF, double / triple BF) The same guard cancels an air slash in the air: jump, dash, slash, block; jump, slash, block, dash, slash, block; or jump, slash, block three times (a jump pressed just before landing is kept)
Block cancel (quadruple BF) Guard during a slash lands the hit at once and goes straight to the guard; press guard with the next direction for the glitch rhythm
Quick launch, juggle Uppercut (guard + attack), guard to cancel its recovery; an uppercut on an airborne launched enemy keeps them up; flip, block, jump, dash, slash, block
Extended flip Dash right out of the uppercut
Half step, reload half step, forbidden step A shot during a dash fires and ends the dash; mix with slashes, switches and reloads
Wall cancel, advanced wall cancel Dash back into a wall and kick off it again (with a switch cancel in between for the advanced one)
Multi wall run Dash at a wall at about 45 degrees and jump twice: a second kick off another wall
Wall hang cancel Guard against a wall ends a wall run or a kick’s flight in a hang
Insta-kill Uppercut, then switch to a gun right after it hits and shoot the airborne enemy
Light step A dash right after a slash makes no dash sound

Bots use the techniques by skill: at skill 0 none, from 0.2 the butterfly, up to the quadruple
butterfly and forbidden step from 0.85; the better the bot, the more often it tries them. They also
climb a wall with a hang to reach an enemy on a ledge.

Status

Working

Area What you get
Maps All 30 RS v7 maps plus quest maps, with lightmaps, skies and every prop (fires, light shafts, water, fans, waving flags and curtains)
Collision Retail .RS.col BSP: stairs, slopes, walls, ceilings
Characters Man and woman models; every clothing piece of the item data (102 chests, 50 legs, 33 hair/hats… for the man) chosen per slot with optional dyes on the PLAYER page, live preview (drag to turn, zoom, framing per body part); bots wear random clothes; skinned animation with cross-fades, upper-body layer and aim pitch; 63 of the 71 character clips in use, including emotes
Movement Run, jump, tumble, air dash, wall kick, wall run, wall hang and climb, falls; run speed, jump, gravity, fall speed and wall kicks measured from public match replays; rocket launchers and machine guns slow you and block wall moves, as their item data says
Melee Slash combos, uppercut, massive attack, guard and block, butterfly, slide, juggle, and the K-style cancels (see “K-style techniques”)
Guns Pistols, revolvers, SMGs, shotguns, rifles, machine guns, rocket launchers; magazines, reloads, weapon switching, armour piercing (estimated from the monsters’ attack data)
Throwables and items Frag, flashbang, smoke and stun grenades, mines, medikits, repair kits; health, armour and ammo pickups from the maps’ item spawn points
Combat HP / AP damage, hit reactions, knockback and blast states, slow / stun / root / burn effects, death camera; optional fixed (non-random) bullet spread
Kill camera When someone kills you, the camera swoops to your killer and orbits it (mouse turns, wheel zooms) under a floating “name killed YOU” blood tag, with a blood burst on your corpse
Modes Deathmatch, team deathmatch, gladiator, team gladiator, elimination, assassinate, duel, duel tournament, berserker, gunman, spy (with tracker pings and spy items), blitzkrieg (nine classes, upgrades, minimap, announcer, rewards), clan war, training
Extra modes (not in retail) The port’s own takes on modes community servers made popular, built from retail items and maps: Infected (one random player turns zombie each round: blade only, faster, tougher, knockback hits; whoever a zombie kills joins them; survivors win at the round timer), Gun Game (free for all up a 12-step weapon ladder, a kill upgrades your weapon, a melee kill demotes the victim, a kill from the last step wins), Dynamic Duels (several 1-on-1 duels at once on one map, each in its own arena phase; winners stay, losers queue and watch, Space switches the watched arena)
Clans Create, rename and leave a clan in the CLAN tab (level 10, 20,000 bounty), pick one of the 52 retail emblems and 9 backgrounds, bot members, ranking against 13 generated rival clans; the Clan War mode (4 against 4, elimination rounds) shows both clans’ emblems and moves the clan’s points
Quests Quest, challenge quest and survival scenarios: sectors, monster waves, bosses, portals, drops and rewards; sacrifice items unlock special scenarios, a random dice roll picks the route, quest items stay in your inventory, level limits and challenge time bonuses
Monsters 76 quest monsters and 48 scripted actors from the data, with their skills (missiles, area attacks, heals, summons, critical hits, camera shake) and state-machine AI
Bots Random gamer tags (distinct within a match); path-finding over the map (stairs, jumps, drops, climbs, side wall runs, precise wall kicks up to otherwise unreachable floors such as Mansion’s top, for bots carrying a blade), weapon choice by range, guarding, butterfly, K-style techniques scaled with skill (jump dash, slash shot, reload shot, swapshot, launch and juggle, wall hang climbs), grenade and smoke throws, pickups, retreating, skill level
Profile and shop Offline profile with levels, XP and bounty; a shop with 215 items, their icons and stats; inventory and equipment
Menus and HUD One look throughout (src/ui.rs, rules in DESIGN.md): Barlow type, amber accent, sharp plates. Main menu (MATCH, PLAYER, SHOP, INVENTORY, CLAN, CONTROLS, GRAPHICS, quest picker) with tabs, a player strip (level, XP bar, bounty, medals) and an animated 3D character preview with a dash-trail demo; pause menu as a side panel. HUD: health and armour bottom left (the bar trails behind damage), weapon and ammo bottom right with low-ammo and RELOAD warnings, clock and team scores top centre, KILLS / DEATHS top left, a crosshair that opens with running, jumping and shots, hit and kill markers, damage direction arcs, status effect timers, a ranked scoreboard with K/D; a sliding kill feed at the top right with the retail kill-log weapon icons, HEADSHOT tags and clan emblems in a clan war; ELIMINATED and the victim’s name under the crosshair when you kill; a combo meter at the left with its multiplier, score and “+N” popups, and multikill and killing-spree banners; a KILLED BY screen with the damage each attacker dealt and a respawn bar; round banners; end-of-match screen with XP and bounty earned
Sound and music Weapon sounds, surface footsteps, voices, monster sounds, map ambience, background music with crossfades; synthesized combo, kill and killing-spree sounds and your own hit sound (custom/hitsound.wav next to the profile)
Options Pause-menu toggles for killcam, kill sounds, hit sound, fixed spread, teammate bars, screen blood, realistic blood and the combo meter; saved in the profile, and --NAME / --no-NAME flags override them for one run
Blood Simulated gore (on by default, --no-realistic-blood / the pause menu for the retail sprites and marks): droplet sprays scaled by damage that fly with gravity, splatter walls and floors by impact angle, run down walls in drips, pool under corpses, trail from hurt bots, and splash drops and a dark vignette on your screen
LAN multiplayer HOST LAN / JOIN LAN in the menu (or --host / --join ADDR, --join lan finds the host by broadcast): deathmatch, team deathmatch, gladiator and team gladiator with the host’s bots. The host decides hits, deaths and scores; each player moves their own character. TCP and UDP port 7790 must be open on the host

Not done yet

Area State
Online multiplayer LAN only (see above), our own protocol; the round, quest and Blitzkrieg modes are not played over the LAN yet, and nothing talks to the retail servers
Online clans Clan chat, invitations, the war lobby and matchmaking need a server; rival clans are generated bots that never play each other
Blitzkrieg extras Nine classes are playable (three of them have no class book, so whether retail offered them is unknown); neither the data nor public sources give class art or loadouts, so the cards show weapon icons and the class guns are the port’s guesses; the data has no medal shop stock or prices (its messages suggest the server sends them), so medals are stored and shown but cannot be spent
Quest extras The challenge quest’s gacha reward item (3000xxx) is not in the item data, so it cannot be given; the quest .nav meshes miss up to 43 % of the spawn points, so monsters use the port’s own floor graph; Survival Dungeon’s skeletons follow the data’s id scheme and a public wiki, but its XP, bounty and drops are not in the data
Music choice Neither the data nor public sources say which track belongs to which map; the port picks one of the nine in-game tracks per map (fixed, by name)
Korean-only names 22 monster names exist only in Korean in every locale; the port shows English translations of its own (marked inferred in docs/formats.md)
Exact feel Movement constants come from replays of older clients, so parity with the Steam client is unproven; the dash speed, the cancel windows and the wall-climb height are estimates (listed as inferred in docs/formats.md)

In the browser (WebGPU)

web/build.sh                       # wasm client + data packs from your install into web/dist
python3 web/dist/serve.py 8090     # http://localhost:8090 (WebGPU needs localhost or HTTPS)
sudo tailscale serve --bg --https=10000 http://127.0.0.1:8090   # HTTPS on your tailnet

web/ builds the same game for the browser. gunz-pack plays a short traced match on every
map (and opens the game’s menu) and keeps only the files those runs read. The result is one
shared pack (characters, weapons, effects, sounds; about 40 MB gzipped instead of the 1.6 GB
install) plus one pack per map (3-14 MB, with the bots’ path graph computed ahead, so a match
starts without the seconds of path building). The page fetches the shared pack and the wasm
module (7 MB brotli) right away and a map’s pack only once you pick that map. Packs are cached
for good by their CRC and the engine by its content hash, so a match start downloads nothing
again. Clothes are too many to pack (hundreds of MB): every other file under
model/ is served on its own from data/files/ and downloaded when the game reads it (a bot’s
outfit at the start of a match, a piece you browse to). The page opens on the game’s own main
menu (MATCH, PLAYER, SHOP, INVENTORY, CLAN, CONTROLS, GRAPHICS) behind a loading screen that
shows each download (size and its own bar), an overall bar, the speed and time left, then the
start-up step. The profile lives in the browser’s local storage; START downloads the map’s pack
and plays it, and MAIN MENU in a match comes back here. On a touch screen the match has
on-screen controls (a stick, drag anywhere else to look, fire, jump, dash, guard, reload, weapon
swap, scores, pause) and the first touch goes fullscreen; pinch and double-tap zoom are off.
The gear button opens their
settings, kept in the browser: look sensitivity and invert, aim assist strength (it leans the
aim towards the visible enemy nearest the crosshair while you turn, move or shoot, never on its
own; 0 = off), a floating or fixed stick and its dead zone, button size and opacity,
left-handed layout, vibration, and a layout editor to drag each control anywhere and resize it.
The menus and the match HUD shrink to fit windows smaller than 1280 x 720 (phones), and with
touch controls the weapon and ammo panel moves to the bottom centre, clear of FIRE. A tablet
with a keyboard or mouse switches to them at the first key or mouse use (the controls hide,
the pointer locks for aiming) and back at the next touch. If the browser’s WebGPU rejects
something the GRAPHICS settings use (Safari reports such errors only to the page, which hands
them on), the match drops to ORIGINAL and says so; serve.py prints what the page reports
about errors and the device’s GPU (POST /log), so a phone’s problem shows up in its log.
No LAN in the browser. web/dist holds retail bytes, so serve it only to your own devices (a
tailnet-only tailscale serve, never tailscale funnel).

More tools

cargo run --release --bin gunz-play -- "$GAME" Mansion --bots 3   # straight into a match
cargo run --release -- "$GAME" Castle                             # fly through any map
cargo run --release --bin gunz-char -- "$GAME" man                # assembled character, bind pose
cargo run --release --bin gunz-anim -- "$GAME" man run            # one animation
cargo run --release --bin gunz-weapon -- "$GAME" "Raptor 50 RP" --on man --idle
cargo run --release --bin gunz-fx -- "$GAME" flame_rifle          # one effect; --list
cargo run --release --bin mrs -- extract "$GAME" .local/extract   # CRC-checked dump of every archive

<details>
<summary>All <code>gunz-play</code> options</summary>

--char man|woman, --look LOOK (the profile’s look text), --loadout ID,.., --bots N, --skill 0..1,
--mode dm|tdm|gladiator|team-gladiator|elimination|assassinate|duel|tournament|berserker|gunman|spy|blitzkrieg|clanwar|infected|gungame|dynduel|training,
--mode quest --scenario NAME [--dice N] [--sacrifice A,B] (e.g. "Quest Mansion QL0", "Goblin King",
"Challenge 101", "Survival Prison"; without --dice the die is rolled), --time-limit S, --kill-limit N (0 = none),
--respawn S, --protect S, --round-time S, --ready S, --host or --join ADDR|lan (LAN). A match ends at the time or
kill/round limit (defaults per mode from gametypecfg.xml) with victory, defeat or draw.

Testing without a window: every viewer accepts --shot OUT.png to render one 1280x720 frame
headlessly. gunz-play adds --script, --time, --hp, --ap, --at, --die-at,
--npc NAME,.. (spawn quest monsters), --menu-page match|player|shop|inventory|clan|controls|graphics
and --pause-at S [--pause-page controls|graphics] for
reproducible runs (syntax in src/bin/gunz-play.rs). With GUNZ_SEQ=SECS and a % in the shot
path it also saves the last SECS seconds at 20 fps, which is how the demo above was made (the
clips were captioned and joined with Pillow, then encoded to animated WebP with ffmpeg).
GUNZ_PROFILE=PATH uses another profile file. RUST_LOG=gunz::bot=debug logs bot decisions;
GUNZ_FRAMETIMES=1 logs frame times (add GUNZ_NOVSYNC=1 for uncapped frames).

</details>

How it works

GunZ’s .mrs archives are ZIP files with XOR-scrambled headers; maps, models and animations
are the original binary formats. Gunz.exe is Themida-packed, so every format here was recovered
from the data files themselves. The notes are in docs/formats.md, and
CREDITS.md lists outside sources.

Reverse-engineering framework

Local, target-independent investigations with OMP, REA and Ghidra.

Start

bash scripts/setup-tools.sh
bash scripts/agent.sh

The isolated OMP profile is reverse-engineering. Its existing profile data was
preserved during migration. Only REA is registered; AISandbox is denied.
Other profiles and target installations are unchanged.

One function

bash scripts/query.sh /absolute/path/to/program function_name
bash scripts/query.sh /absolute/path/to/library.dll 0x180001000

The procedure is a symbol or address in the selected binary. These are usage
examples, not claims that those files or addresses exist.

The command hashes the actual input, records the question and selects a snapshot
under .local/re/<sha256>/function-<question-hash>/. Identical input/question can
replay saved evidence; changed bytes select a different namespace. REA validates
the actual provider/profile/query cache key. No target name or installation path
is built into the investigation.

Output is concise JSON: input identity, provider, procedure, pseudocode,
parameter availability, limitations and evidence paths. The complete raw response,
logs, request and snapshot remain in a private run directory. Results exceeding
the 16 MiB display limit fail visibly; the raw file is retained, not truncated.
Analysis failures return ok: false and a nonzero exit even when the upstream
CLI envelope says ok: true. Failed runs keep their evidence and are not cached.

Force a new observation when needed:

bash scripts/query.sh /absolute/path/to/program function_name --fresh

Fresh runs retain previous evidence. Invalid snapshots/profile changes are not
silently retried; an explicit fresh run can replace the active cache reference.
Original targets remain read-only and are never executed by this command.

Use the OMP agent and keep one REA MCP session open: open one selected input,
follow bounded strings/xrefs/functions, reuse returned dossier facets, save a
snapshot, then close. Warm same-session queries avoid repeated imports. The CLI
helper is for one-off questions, not a second analysis engine.

Check the framework

bash scripts/check-framework.sh

Checks include generated ELF and x86-64 PE DLL decompilation, strings/references,
assembly, ownership cleanup, cached replay without Ghidra launch, two independent
ELF programs, explicit fresh analysis, changed bytes at the same filename,
unchanged original inputs and unknown-procedure failures without cache promotion.
Temporary fixtures are removed; evidence remains under .local/re/engine-check/
and .local/re/query-check/.

Measured runs and coverage limits: docs/reverse-engineering.md.

Prerequisites

  • Node 22.19+, supported Node 24, or Node 26+.
  • Extracted Ghidra 12.1.4, defaulting to ~/tools/ghidra_12.1.4_PUBLIC.
  • 64-bit JDK 21. Setup can install checksum-pinned Temurin 21.0.12.1+1 locally.
  • cc, clang, lld-link, timeout for generated checks; strace for cache traces.

Select existing installations with:

bash scripts/setup-tools.sh /absolute/ghidra_12.1.4_PUBLIC /absolute/jdk-21

Native paths are stored in ignored .local/ files. The current runner is
Linux-oriented; rootless strace bootstrap uses signed Arch packages. No Windows
or macOS host verification is claimed. No system Java setting is changed.

OMP instructions

.omp/AGENTS.md routes tasks, .omp/RULES.md supplies short sticky invariants,
and .omp/rules/re-workflow.md describes question-first native investigations.
Only load instructions relevant to the question. Raw evidence, proprietary input,
databases, local paths and credentials stay outside Git. See CREDITS.md for
source provenance and licenses.

Static inspection is the default. Running an unknown target or capturing its
runtime requires separate authorization. The local decompiler runs with your
user permissions; it is not an OS security sandbox.


License and provenance

The README and its translation retain Apache-2.0 terms. Changes comprise translation, links and formatting. Editable Markdown, the original README, LICENSE and NOTICE files are included in the linked bundle. This grants no rights to the original games, their assets or trademarks.

LICENSE

Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.