PORTANDROIDARM64RETROID POCKET 5PRE-RELEASE

System Shock - Android

A native Android/ARM64 adaptation of Shockolate, developed around the Retroid Pocket 5 as the primary reference device. I am using the port both to make the game work naturally on a modern handheld and to document reusable engineering knowledge about Android lifecycle, input, audio, presentation, legacy assets and reproducible porting.

ACTIVE DEVELOPMENTPresentation: 1024x768 4:3 onlyPublic release: v0.1.0-pre.3Signed APK + first-run importer: PASSUpdated 20 August 2026

01 / OVERVIEW

What this port is

↑ Index

Source-port foundation

I use Shockolate as the code foundation. The Android work starts from upstream commit 4cc3d07d…, a merge of pull request #421 by oreo639.

Hardware-led development

I treat the Retroid Pocket 5 as a real target rather than a generic Android endpoint. Display behavior, controller routing, Android lifecycle, audio timing, text input and 4:3 presentation are validated against the handheld itself.

Commercial data stays external

I do not put proprietary System Shock game data in the public source tree, APKs or redistributable source packages. The signed pre-release asks the user to select their own compatible res folder on first run and copies it into private app storage.

02 / REPRODUCE & SHARE

From “works on my machine” to a public engineering project

↑ Index

The project is organized so another person can inspect the source, reproduce the Android build, provide their own game data and understand the decisions behind the result. The public source is deliberately separate from my internal handover/control infrastructure.

Published source snapshot

The reviewed, sanitized source tree is public in raposomiguel50/system-shock-android. It includes the Android project, modified Shockolate source, licenses, provenance, portable build helpers and documentation. Private workspace metadata and commercial game data are excluded.

Reproduction guide

The reproduction page records the pinned dependency baselines, Android/JDK toolchain, build/verification flow, data-import boundary and the clean-clone gate.

Current public release

v0.1.0-pre.3 publishes the validated source and signed ARM64 APK. You can also download the tagged source as ZIP. Fresh-clone build and verification, side-by-side RP5 QA, first-run folder import and final signed release verification all passed before publication.

v0.1.0-pre.1 remains historical evidence of the first clean-bootstrap defect. v0.1.0-pre.2 preserved the validated bootstrap correction. v0.1.0-pre.3 is the first APK-bearing public pre-release.

03 / CURRENT STATE

Implemented and validated

↑ Index
PLATFORMAndroid / ARM64

Native C/C++ game code packaged through the Android toolchain rather than desktop emulation.

DISPLAY4:3 preserved

1024x768 no-stretch presentation remains the current and only public presentation mode.

INPUTHandheld-first controls

Right-stick camera look is the default. View/Select switches the stick into fine cursor mode for the original interface.

AUDIOSDL_mixer + ADLMIDI

A single mixer-owned physical device handles the audio endpoint, while the gameplay music scheduler rebases after abnormal host stalls instead of bursting overdue events.

TEXT ENTRYAndroid IME

Committed text uses the SDL/Android text-input path for the player-name workflow instead of synthetic printable controller keys.

PUBLIC RELEASESigned APK + importer validated

v0.1.0-pre.3 is non-debuggable, ARM64-only, signed with the stable release certificate and validated on the Retroid Pocket 5 with first-run user-data import.

04 / CONTROLS

Desktop interaction translated to a handheld

↑ Index

System Shock combines free-look movement with a mouse-driven interface. The port keeps both interaction models available instead of forcing one control scheme to do everything.

InputDefault behavior
Left stickPlayer movement / menu navigation.
Right stickCamera rotation / look by default.
View / SelectToggles the right stick between camera-look and fine cursor/mouse mode.
L2Left-mouse style selection, interaction and drag behavior for the original UI.
R2Right-mouse / attack path according to the active game state.
TouchscreenOptional pointer-style interaction; it can be used as a mouse but is not mandatory.
Android keyboardText entry for player names and other keyboard-oriented fields.

The controller boundary uses SDL GameController semantics rather than hard-coded Android/Linux event codes. Detailed reasoning is documented in KB-SS-005.

05 / PRESENTATION

Preserve the original presentation

↑ Index

4:3 reference

The original logical 1024×768 presentation remains the known-good reference. Android owns the physical surface while the game owns its logical render geometry.

Current presentation decision

The port retains the original-style 1024x768 4:3 no-stretch presentation as its only public presentation mode. The Android IME keyboard shown during text entry is the only platform-specific visual addition.

Graphics extraction

The validated private extraction pipeline identified and extracted 8,870 supported image frames using the engine's proven legacy decoders. Those commercial-derived outputs remain private; only methodology and metadata are shared.

Indexed-renderer boundary

Sprite/UI Scale4x can preserve indexed source colors exactly. Bicubic WORLD/STATIC output creates RGB colors the current 8-bit renderer cannot represent without quantization, so that path remains blocked pending an explicit architecture/quality decision.

Font reconstruction

The validated offline dataset contains 36 fonts and 5,696 glyphs. Composite resource identity is required, and contour/vector candidates remain offline research until they pass layout and readability gates.

Rejected experiments

Several HD/font stages failed their manual or architectural gates. They are preserved as negative knowledge in the knowledge base rather than silently discarded.

06 / TECHNICAL STACK

Build and runtime foundation

↑ Index
Game/source-port baseShockolate 0.7.8 lineage, upstream baseline 4cc3d07….
Primary languagesC/C++ game code with Java/JNI Android integration.
SDLSDL 2.32.10, release commit 5d249570….
AudioSDL_mixer 2.8.1 at validated commit 171eb2d4…, plus Shockolate's ADLMIDI/OPL3 path.
Android buildcompileSdk 34, target/min SDK 33, Build Tools 34.0.0, NDK 29.0.14206865, CMake 3.22.1, Gradle 8.1.1 and JDK 17.
Architecturearm64-v8a.
Reference hardwareRetroid Pocket 5 - Android 13, Adreno 650, 8 GB RAM, 5.5-inch 1080p/60 Hz AMOLED according to Retroid's product specification.

07 / OPEN KNOWLEDGE

The port as a public technical article

↑ Index

The knowledge base publishes more than the final solution. It records root causes, workarounds, unresolved concerns, rejected experiments and rules that became standards during the port.

Resolved problems

PowerShell case collisions, Android lifecycle/surface diagnostics, audio-device ownership, Android IME integration, right-stick mode routing, gameplay music timing, dependency-bootstrap failures, release signing and first-run data import are preserved as reusable records.

Open concerns

Broader Android compatibility, WORLD/STATIC HD architecture and font remastering remain explicitly open. The public release/importer and fresh-clone release gates have been completed for the Retroid Pocket 5 reference path.

Standards

Platform ownership, reversibility, semantic controller mapping, single audio ownership, artifact-level validation, evidence separation and commercial-data isolation are documented as project standards.

08 / RELEASE & LICENSING

Open code, separate game data

↑ Index

Release status

v0.1.0-pre.3 is published as a GitHub pre-release with the tagged source, a signed non-debuggable ARM64 APK, SHA-256 sidecar, release manifest and public signing certificate. The first-run folder importer was validated on the Retroid Pocket 5 before publication.

Source licensing

Shockolate is distributed under the GNU GPL v3.0 or later. Public distribution of this derivative source keeps the applicable upstream copyright/license notices and documents third-party dependencies.

Game ownership

The project does not provide System Shock commercial resources. A compatible legally obtained copy is required separately. On first run, the release APK lets the user choose the required res folder without ADB.

09 / FEEDBACK & CONTACT

Found a problem, have an idea or tested another device?

↑ Index

Public technical feedback goes through structured GitHub forms so reports remain searchable and can become reusable project knowledge. Professional contact is available through LinkedIn.

Report a bug

Use the bug form for reproducible build, installation or runtime problems. Include exact errors and observed evidence.

Open bug report

Suggest an improvement

Ideas about controls, presentation, audio, build tooling, Android integration or documentation are welcome.

Suggest an improvement

Report compatibility

Tested another Android handheld or phone? Successful reports are useful too. Record device, Android version and each runtime area separately.

Submit compatibility report

Documentation

Report unclear or incorrect documentation and include the source or evidence supporting the correction.

Correct documentation

General feedback

For questions or comments that do not fit another category, use the general public feedback form.

Leave feedback or ask a question

Contribute or contact

Code contributions can be proposed through pull requests. For professional networking or private professional enquiries, use LinkedIn.

Pull requests · LinkedIn

Do not attach proprietary System Shock game data, credentials or private information to public GitHub issues.

10 / REFERENCES

Sources and acknowledgements

↑ Index

References are formatted in APA style as closely as practical for software repositories, pull requests, source-code commits, products and continuously updated technical documentation. Author and source links are included where an authoritative public page is available.

  1. Interrupt. (n.d.). Shockolate: A minimalist and cross-platform System Shock source port [Computer software]. GitHub.
  2. oreo639. (2025, October 1). Fix building with gcc14 [Pull request #421]. Interrupt/systemshock. GitHub.
  3. Cuddigan, C. [Interrupt]. (2025, October 1). Merge pull request #421 from oreo639/fix-gcc14 [Git commit, 4cc3d07dfff2d11b6d3a0a9960a51cf4ca253690]. Interrupt/systemshock. GitHub.
  4. Looking Glass Studios. (1994). System Shock [Video game]. Origin Systems. Digital product information: GOG.com.
  5. Nightdive Studios. (n.d.). System Shock: Enhanced Edition.
  6. SDL contributors. (n.d.). SDL2 README: Android. SDL Wiki.
  7. Lantinga, S. (2025, September 1). Updated to version 2.32.10 for release [Git commit]. libsdl-org/SDL. GitHub.
  8. Lantinga, S., & SDL contributors. (2025). SDL_mixer 2.8.1 [Computer software]. GitHub.
  9. Novichkov, V., Yliluoma, J., & contributors. (n.d.). libADLMIDI: A software MIDI synthesizer library with OPL3 emulation [Computer software]. GitHub.
  10. Android Developers. (n.d.). Get started with the NDK. Google.
  11. Retroid. (n.d.). Retroid Pocket 5 [Product specifications].
  12. Free Software Foundation. (2007, June 29). GNU General Public License, version 3. GNU Project.