Uprising’s loop kept an old timestamp instead of refreshing it, so its delay fell to the minimum. We found a useful place to pace it in what looked like an ordinary logging line.UP01

The loop boundary.

The existing curLoop print call marked each iteration. The adapter used that boundary for pacing without patching the guest bytecode. It was functional scheduling behavior, not an invitation to flood the diagnostic log during play.UP01UP02

Claire and Leon in the original room, with the native 40-pixel touch strip retained. Historical 240×320 desktop original-guest frame; not the phone recording.
Historical host capture

Claire and Leon in the original room, with the native 40-pixel touch strip retained. Historical 240×320 desktop original-guest frame; not the phone recording.

Open the image for the full original view.

UP90

The original also had a nonstandard left-key value and a forty-pixel touch strip. Preserving the game’s controls meant following those actual inputs and pixels rather than replacing the lower strip with an assumed viewport crop.UP03

Inventory was missing from the panel.

The later phone evidence had original gameplay and inventory use, but our panel was missing Inventory 0 and description-scroll actions 7 and 9. We exposed them in both 0.1.2 control modes. The original host regression could open and close inventory through 0; its short item list still left long-description scrolling for another check.UP04UP05UP06

We kept the original save restrictions, including refusing to save during dialogue. Later, an Omni report failed during preparation and asked for the original download again. That gave us a different problem to track, before the game loop was even running.UP07UP08

About these records

The pacing and inventory records describe their stated earlier builds. Phone feedback, host action regressions and a later Omni PREPARATION_FAILED export remain distinct. The later preparation failure is not resolved by this report. The image is historical original Java guest output, and a short inventory fixture does not establish description scrolling.

The receipts

Selected source lines, investigation notes and recorded feedback. Open a receipt for the original context and scope.

UP01 / The original loop timestamp and functional log boundaryCheckpoint investigation notes

Source: Uprising_Bridge_v0.1.2_PRIVATE_CHECKPOINT.zip / Uprising_Bridge_v0.1.2_PRIVATE/TECHNICAL_HANDOFF.txt · selected lines 103–117

FRAME SCHEDULING / BACKGROUND
The original t.run() sets a timestamp once before the loop and subtracts
that same timestamp from its 33 ms sleep budget forever. Consequently its
sleep reaches the original 5 ms minimum even while idle on a fast host.
Platform.pace() enforces the original intended ~30 Hz budget without spin
waiting. Original methods, timers and movement logic remain untouched.
The original loop emits a unique curLoop: line each iteration. A private
PrintStream hook uses that existing boundary for pacing and foreground
scheduling while dropping repetitive loop spam. This is functional code;
do not remove it as cosmetic logging cleanup. Other original log lines and
stderr are retained in bounded diagnostics. Android backgrounding calls the
original MIDlet pause at this boundary and parks the worker on a condition;
foregrounding resumes the original MIDlet. No thread suspension or polling
spin is used. The host harness verifies native MIDlet pause/resume; Android
foreground parking still needs device testing.
UP02 / Historical pacing check and original guest executionHistorical original-guest host verification

Source: Uprising_Bridge_v0.1.2_PRIVATE_CHECKPOINT.zip / Uprising_Bridge_v0.1.2_PRIVATE/evidence/baseline-v0.1.0/VERIFICATION.txt · selected lines 13–22, 36–46

PASSED — ORIGINAL EXECUTION ON HOST
Runs the actual supplied ResidentEvilMIDlet and game classes with the common
MIDP compatibility layer, using an AWT backend for headless rendering.
Original English selection, sound prompt, Capcom/Glu startup and title menu.
Original opening text, Claire's station map and introduction to Leon.
Original map movement with all four bridge directional inputs.
Original pause menu, inventory, search/knife entries and item exchange.
Native MIDlet pause stops frame output; native resume restores it.
The main acceptance session reached 17,594 original frames without a
recorded compatibility error. This is host evidence, not Android evidence.

[... selected excerpt ...]

PASSED — GRAPHICS / SCHEDULING
All eight MIDP drawRegion transforms passed pixel comparisons.
Clipping and surface pixel semantics passed.
The approximately 30 Hz scheduler passed its timing check (30 intervals
in 1.024 seconds) without busy waiting.

PASSED — ORIGINAL MIDI PARSING / REQUESTS
Original title (11056 bytes), intro (13301 bytes) and gameplay (3477 bytes)
MIDI streams parsed successfully and exercised player completion callbacks.
Android MediaPlayer output is implemented; host MIDI parsing does not prove
audible playback on Samsung.
UP90 / Historical image / Resident Evil: UprisingHistorical host capture

Source: Uprising_Bridge_v0.1.2_PRIVATE/evidence/acceptance/30_walk_left.png

Retained historical host output. Original emulator chrome, where present, is part of the unchanged source image. No phone capture or phone performance is inferred.

Unchanged historical image.
Source member: Uprising_Bridge_v0.1.2_PRIVATE/evidence/acceptance/30_walk_left.png
SHA-256: a810f950856d3939e65b43c5e35263f25a2b38317b49a5f21f40661d31fb0bcc

Claire and Leon in the original room, with the native 40-pixel touch strip retained. Historical 240×320 desktop original-guest frame; not the phone recording.

Scope: Historical original JAR execution with AWT graphics backend, retained from original acceptance.
UP03 / A nonstandard left key and an original touch stripCheckpoint investigation notes

Source: Uprising_Bridge_v0.1.2_PRIVATE_CHECKPOINT.zip / Uprising_Bridge_v0.1.2_PRIVATE/TECHNICAL_HANDOFF.txt · selected lines 75–101

EXECUTION
The unchanged original JAR is converted with D8 together with a targeted
MIDP compatibility layer. ResidentEvilMIDlet, t and all other original
classes execute directly. No game logic is decompiled/recreated and no
original class bytes are patched. All 123 non-class original resources are
packaged byte-for-byte at the APK classpath root, with the original manifest
also retained as game-manifest.mf for MIDlet properties.

The compatibility layer implements the actual API set referenced by this
JAR: Canvas, Display, Displayable, Image, Graphics, MIDlet, Manager,
Player/PlayerListener and RecordStore. Graphics includes all eight MIDP
region transforms, original PNG alpha, clipping, primitive drawing and
pixel-preserving scaling. The game uses its own sprite font for most text.
The virtual original device is 240x320. Its game field is 240x280 plus the
native 40-pixel touch strip. The original touch strip is intentionally
preserved as part of original execution. Native pointer input is supported.

INPUT
The JAR's t.a(int) maps raw -3 to an alternate '*' input before consulting
getGameAction. Do not change the external left button to conventional -3.
Verified native mappings are Up=-1, Down=-2, Left=2, Right=-4, OK=-5.
Glu-Left-Key-Code=-6, Glu-Right-Key-Code=-7, Glu-Back-Key-Code=-8,
Glu-Center-Key-Code=-5. Thus external Back=-7 reaches the game's own back
handler. Number keys send their actual ASCII values. Numeric 5 is distinct
from the separate OK input. Input events are queued and consumed at most
one per original render, preserving quick press/release ordering. Cancel,
panel swaps and app backgrounding release/clear pending touch state.
UP04 / Phone recording exposes missing inventory and text actionsCheckpoint investigation notes

Source: Uprising_Bridge_v0.1.2_PRIVATE_CHECKPOINT.zip / Uprising_Bridge_v0.1.2_PRIVATE/TECHNICAL_HANDOFF.txt · selected lines 5–29

CUSTOM CONTROL COMPLETENESS — v0.1.2 / 2026-10-19
The v0.1.1 phone recording exposed missing direct Inventory input in custom
mode. UprisingControls.normal now defines five actions: BACK / PAUSE (-7),
INVENTORY / 0 (48), ACTION / OK (-5), TEXT UP / 7 (55) and TEXT DOWN / 9 (57).
The two text buttons scroll descriptions in inventory and item exchange.
These mappings are documented by the original l.class help fields eN=0,
eO=7 and eP=9. Native t.a(int) remains untouched. All help sections were
reviewed: movement and OK/Back cover search, combat, target and aim modes;
0 plus 7/9 supply the additional inventory/exchange actions.

The actual unchanged kit arranges Back/Pause above Inventory on the left,
four-way sliding D-pad in the center, and the larger Action above the two
text-scroll buttons on the right. Keypad mode retains all five action buttons
and the separate original D-pad, with the numeric cluster. Compact keypad
actions now use two rows; normal mode reserves the same taller slot, so the
same renderer retains its dimensions and parent when switching modes.

Run tests/run_android_ui.py for six production Activity tests, including the
regression that finds and touches all three missing actions in BOTH modes.
In keypad mode, releasing a labeled action while its duplicate digit is held
must not release the original key. Switching modes clears held touch input.
The existing tests also cover startup/insets, movement, native pointers,
Android Back/cleanup, independent report export and startup faults.
See current VERIFICATION.txt. Previous v0.1.1 handoff and verification are
retained under evidence/baseline-v0.1.1.
UP05 / Original inventory opens and closes in the host regressionHistorical original-guest host regression

Source: Uprising_Bridge_v0.1.2_PRIVATE_CHECKPOINT.zip / Uprising_Bridge_v0.1.2_PRIVATE/evidence/control-regression-v0.1.2/RESULTS.txt · selected lines 1–10

Original unchanged game.jar executed with the existing shared MIDP layer and AWT host backend.
Loaded the existing original save through Pause > Load; retained bo=2 and bg=14.
Closed the original pause menu, sent literal original 0 (48), and observed the real Inventory screen.
12_direct_inventory.png / .txt: aL=2, aN=130, bo=2, bg=14.
Sent original 7 (55) and 9 (57) in inventory without error, then 0 (48) again.
15_inventory_closed.png / .txt: aL=2, aN=384, bo=2, bg=14.
Assertions bo=2 and bg=14 passed before normal original MIDlet destruction.
This item list did not display a long description, so a visible scroll transition is not claimed.
7/9 function meanings are grounded in the original l.class help, not inferred from this fixture.
This is original game execution on a host, not Android device verification.
UP06 / The current control changes keep their physical-phone scopeCheckpoint investigation notes

Source: Uprising_Bridge_v0.1.2_PRIVATE_CHECKPOINT.zip / Uprising_Bridge_v0.1.2_PRIVATE/VERIFICATION.txt · selected lines 62–76

ORIGINAL GAME SHORTCUT — PASSED ON HOST
The actual unchanged JAR loaded the existing original save through its own
Pause > Load flow. After closing Pause, original 0 opened Inventory (aN=130)
and a second 0 closed it to gameplay (aN=384). Existing save state bo=2 and
bg=14 remained intact; original guest reported no error. Screens and states
are retained under evidence/control-regression-v0.1.2.
7 and 9 were also delivered without error; the selected inventory fixture
had no long item description, so a visible scroll transition is not claimed.
Their meanings are documented by original help in the retained control audit.

DEVICE SCOPE
The user's supplied v0.1.1 phone recording establishes real original gameplay
and original keypad Inventory input on the phone. The new v0.1.2 buttons and
their thumb comfort still need a phone run. No new physical-device, speaker,
full-game or phone Downloads validation is claimed.
UP07 / Original save/load retains its restrictionsHistorical original-guest save regression

Source: Uprising_Bridge_v0.1.2_PRIVATE_CHECKPOINT.zip / Uprising_Bridge_v0.1.2_PRIVATE/evidence/baseline-v0.1.0/VERIFICATION.txt · selected lines 24–34

PASSED — SAVES
The original pause-menu Save operation wrote the original game's records.
A new JVM then started a fresh game session, used the original Pause > Load
path and displayed the original "Game load complete" confirmation.
Persisted plot flag bo=2 and room bg=14 were restored. Saved camera position
1821/1032 resumed at 1824/1030. Exact states and screenshots are preserved
in evidence/reload-final and evidence/reload-acceptance.json.
The game correctly refused saving during an earlier dialogue sequence;
that restriction was left intact.
Independent RMS checks passed a fresh-JVM byte-exact reload and 300
unchanged setRecord calls without additional disk writes.
UP08 / Later Omni export reports preparation failure before gameplayPhone Omni preparation report

Source: Uprising_report_20261022_165652_301.txt · selected lines 15, 26, 37

Thu Oct 22 16:56:37 CDT 2026 | PREPARATION_FAILED | Load the original Uprising download again to finish this update. Your existing game and saves are kept.

[... selected excerpt ...]

Thu Oct 22 16:54:59 CDT 2026 | PREPARATION_FAILED | Load the original Uprising download again to finish this update. Your existing game and saves are kept.

[... selected excerpt ...]

Thu Oct 22 16:54:52 CDT 2026 | PREPARATION_FAILED | Load the original Uprising download again to finish this update. Your existing game and saves are kept.
Continue through the archiveAge of Empires II Mobile →