Reading the repo
Opening the box…
Reading the repo
Opening the box…
How to install on macOS
CubeEvil4 - native Android port of the Resident Evil 4 GameCube prototype (G4BE08 Nov 2004 debug build), with controller support and OpenGL ES 3 / Vulkan (experimental).
GitHub didn't answer, so this is the saved copy from 1 days ago
Will it work on macOS?
CONTRIBUTING.mdThe tree is complete: every unit compiles to the original bytes. Work now is on readability (names, comments, notes) and on tooling. The one rule that covers everything: the bytes do not change.
Follow "Building" in README.md. You need the native SN GCC (built once from SN's GPL source drop)
and your own images of the debug discs in orig/G4BE08/. python3 configure.py && ninja builds and
verifies. After that, run ninja only; it reruns configure.py itself when a config file changes.
Three checks. A change is done when all three pass on a clean rebuild.
Byte identity of the binaries:
find build/G4BE08 -path '*/obj/*' -prune -o -name '*.o' -print | xargs rm -f
ninja
build/tools/dtk shasum -c config/G4BE08/build.sha1
Every line must be OK; the number of lines is wc -l < config/G4BE08/build.sha1 (one per binary
your discs provide). The clean rebuild matters: the ProDG compile rule has no dependency file, so an
incremental ninja after a header edit can leave stale objects in place.
One unit, while you work on it: python3 tools/bytecmp.py <mod>/<unit> must say IDENTICAL
(game/item, em10/em10, lib/adx_amp). python3 tools/fdiff.py <mod>/<unit> <symbol> shows the
side-by-side for one function when it does not.
No instruction from an asm template: python3 tools/asmcheck.py --all must report the same total and
the same per-unit hits as before your change (the hardware kernels listed at the end of README.md,
"What matching means here"). A single unit: python3 tools/asmcheck.py <mod>/<unit>.
docs/matching.md has the workflow: "Workflow for one unit (game/foo)" for the DOL, "Workflow for one
module unit" under "REL modules" for a REL, and "Conventions" for the rules the tree follows. The
"Lever catalogue" maps a byte difference to the compiler mechanism behind it and to the source shape
that reproduces it. Read it before changing a function's body; most differences you can produce by
reformulating C have a known cause and a known non-asm fix.
tools/research/kit/variant.sh <unit> <variant-src> [FUNC] compiles a variant of one unit and judges it
without touching build/ (about a second per variant).
dtk shasum are the judge; bytecmp.py IDENTICAL per unit is the working check.// COMPILER-DIFF: <n> with the
mechanism, and the tag's mechanism is written up in docs/matching.md or docs/research/.
asmcheck.py enforces it. No .s bodies for functions the vendor wrote in C.docs/naming.md says where every class of name comes from. Vendor names (from the symbol
files or the PS2 debug symbols) keep the vendor's spelling. New names follow the surrounding struct.
Placeholders xNN/pad_NN are renamed only with evidence (below).docs/naming.md, "Structs, fields, enums") and a pG flag bit with the XxxFlagChk/On/Off(pG, NAME)
macros of include/global.h. Do not introduce a #define or a local enum for a value the PS2 dump
names; do not rename an imported enumerator.pG->x = v, pPL->pos.y = f, work->field = p. The compiler patch
(docs/matching.md, "Compiler") reproduces the vendor's pointer reloads from that form. Do not
reintroduce reference-view setters (U32Set, FSet, PSet, ...), struct views of a global pointer
(pGS) or one-member XxxWorkPtr wrappers; the few BitOn/BitOff16/U16Set helpers that remain
in global.h are register-choice levers, not aliasing workarounds.#line directives and // COMPILER-DIFF: tags stay where they are. Both are load-bearing;
docs/naming.md explains each.docs/unit-notes.md; a compiler mechanism you worked out, with
the evidence, goes in docs/research/ (one ### section, so the lever catalogue can cite it by title);
the conventions and the catalogue live in docs/matching.md. Source comments say what the code does
and, at a tag, which mechanism it steers; the long argument goes in the docs..clang-format (4-space indent, function brace on its own line,
T* x, 110 columns). Do not run the formatter over existing files: a whitespace-only diff across half a
million lines hides real changes and gains nothing. The vendor-style src/lib/ sources (tabs) stay as
they are.em10: name the Em10Work motion tables from the PS2 symbols (bytes unchanged). No trailers, no signatures.Open an issue with the "Struct or field name" template or send a PR. Either way the rename needs evidence, and the class of evidence is stated:
python3 tools/ps2sym.py --struct <Name> shows the field aligned to a PS2 field
with its confidence. Confidence 1.00 with a name match on the neighbours is enough on its own. Lower
confidence needs a second argument (a use site whose meaning agrees).A rename PR changes the declaration and its use sites, nothing else in those files, and passes the
clean rebuild with every OK. The rename tool (ps2sym.py --apply, --fix-errors) follows the
compiler's error list rather than a text search; do the same, or check every hit by hand. A name that
also appears in a mangled symbol (config/G4BE08/sym_map.tsv) cannot change: the link would fail.
OK, and asmcheck.py --all unchanged.build/, no orig/.Needs Git: xcode-select --install
git clone https://github.com/alexbatistaribeiro777-cpu/CubeEvil4-ios.git cd CubeEvil4-ios
We couldn't spot a known stack. The AI guide below can read the code for you.
You need
G4BE08), of the European retail release (G4BP08), of the US retail release
(G4BE08) or of the Japanese retail release (G4BJ08, also the Korean fan translation), and enough
free storage to import them. Both discs must be of the same release.First start
SELECT button
.gci for Dolphin and the GameCube) and the error log (send or save a
report; R3 = graphics capture). B returns to the game.Buttons
| Controller | GameCube | In the game | Alternate Controls | |---|---|---|---| | A, B, X, Y | A, B, X, Y | by their labels | A, B as before; X Ashley; Y map | | Left stick | Control stick | move | move | | Right stick | C stick | | aim while L1 or L2 is held | | D-pad | D-pad | | as before | | START | START | | as before | | R2 | R | ready weapon | fire, or slash with the knife ready | | L2 | L | knife | ready weapon (aim) | | R1 | Z | map | inventory (weapons and recovery) | | L1 | – | | ready the knife | | SELECT | – | app menu (hold: debug menu, debug discs only) | as before | | R3 | – | graphics capture for error reports (only when "R3 = Graphics capture" is on) | as before |
Controller Configuration (app menu → Controls, with a controller connected): X, Y, L1, R1, L3 and R3 can each take any function or none; A, B, L2, R2, START, SELECT and the D-pad keep theirs, so the game's button prompts and menus always match. Giving Ashley, the inventory or the map to another button swaps the two buttons. With Alternate Controls on, their own layout applies.
Touch controls
On screen: A, B, X, Y, Z, L, R, START, MENU (= SELECT), the D-pad, a move stick and a look zone (the C stick). App menu → Touch Controls: Auto (shown without a controller; a tap on the screen shows them, a button hides them), Force (always shown) or Suppress (hidden while a controller is connected). In the inventory you can tap items, files and the map, and swipe left or right to change the tab. When a quick-time prompt flashes up (L+R, A+B, mash A …), a tap on it (or anywhere on the picture) presses its buttons; tap again and again to mash. The editor (gear) can add an R3 button (graphics capture for error reports, as on a controller). Button style (app menu → Controls → Button style, or the style button in the editor): RE (the default: a symbol for what each button does, in dark brown and gold) or GC (the letters in the GameCube's colours, as before); the switch takes effect at once and keeps your layout.
Comfort controls (app menu → Controls)
…
No reports for macOS yet.
GitManual AI Agent reads the 3 key files and writes a step-by-step guide for macOS. Once written, it's saved for everyone.