Skip to content

RealTommyGreen/JA2-Reborn

Repository files navigation

JA2 Reborn

JA2 Reborn is an Android-focused Jagged Alliance 2 port. It is built on top of Jagged Alliance 2 Stracciatella, keeps the original native game engine, and adds an Android launcher, modern build setup, touch controls, Android storage handling, and optional gameplay helpers for mobile play.

This project is a tribute to the original JA2 Stracciatella team and their long-running preservation work. Without that foundation, this Android port would not exist.

The project does not include Jagged Alliance 2 game data. You need a legally owned copy of the original game files.

Status

JA2 Reborn is maintained as a hobby project with limited available time. There is no fixed update schedule, and new releases or improvements will only happen when I have time and interest to work on them.

Bug reports are welcome, but fixes can only be considered when the issue is reproducible for me or includes enough detail to understand and verify the problem.

Everyone is welcome to fork the project and continue experimenting with it within the terms of the LICENSE.

The Android port currently supports:

  • Release APK builds for all configured Android ABIs
  • Android 7.0+ devices, including Android 16
  • Android launcher for game data path, save path, resolution, scaling, language, and mouse mode
  • Safe launcher resolution presets for Modern, High Res (More Map), and Retro 640x480 play
  • Expert Settings for manual resolution, scaling, and legacy control choices
  • Fixed-path game data loading
  • Android 11+ all-files access support
  • Android 7-10 legacy storage permission fallback
  • SDL statically linked into libja2.so
  • OpenSL ES audio backend tuning for stable playback
  • Modern Controls input mode, plus legacy absolute mouse and touchscreen modes
  • Modern Controls cursor movement with single-tap left click, two-finger right click, double click, and held-click drag
  • Direct tactical bottom-panel touch handling for panel buttons and inventory drag/drop
  • Tactical UI scaling with adaptive default action-panel and overlay sizing for phones and tablets
  • Modular in-game touch overlay with editable buttons and JSON persistence
  • Bundled default touch overlay preset
  • Team-panel portrait touch selection and long-press multi-select
  • Sector-exit overlay actions
  • Optional in-game tutorial overlay
  • One-time main menu touch-control hint panel
  • Optional cheat system with launcher and in-game overlay controls
  • Native crash log export next to emergency savegames when a recoverable crash report can be written

Repository Layout

android/        Android app, Gradle build, launcher, SDL Java bridge
assets/         Distribution assets and bundled data
cmake/          CMake helper modules
dependencies/   Third-party source dependencies used by the native build
docs/           Build and project documentation
rust/           Rust crates used by the Stracciatella engine
src/            Native JA2 Stracciatella engine and Android JNI bridges

Controls

The launcher exposes three input modes:

  • Modern Controls: uses swipes to move a virtual cursor and taps to click.
  • Absolute mouse (legacy): maps finger coordinates directly to the game cursor.
  • Touchscreen (legacy): forwards native touch events.

In Modern Controls mode:

  • One-finger tap sends left click.
  • Two-finger tap sends right click.
  • Quick double tap sends double click.
  • Double tap and hold keeps the left mouse button held for drag actions.
  • Tactical bottom-panel touches are routed directly to the JA2 interface for panel controls and inventory movement.
  • A two-finger tap on the tactical bottom panel toggles team portraits and single-merc inventory view.

The touch overlay is available in the tactical game screen and can be unlocked in-game to edit button layout and actions.

Resolution Modes

The Android launcher defaults to safe resolution presets:

  • Modern: recommended default with readable UI and aspect-correct scaling.
  • High Res (More Map): shows more tactical map area with a smaller UI.
  • Retro: fixed classic 640x480 presentation.

Manual resolution, scaling, and legacy control choices are available through Expert Settings.

Configuration Files

Runtime configuration is stored under the app's .ja2 directory.

Common files:

ja2.json              Launcher/game configuration
touch_buttons.json    Touch overlay layout and settings
cheats.json           Optional cheat configuration
tutorial.set          Tutorial visibility preference
mainmenu_tutorial.set Main menu hint visibility preference
crashlog-latest.txt   Latest native crash report, when available

Documentation

Building

Android build instructions are maintained separately in docs/BUILDING_ANDROID.md.

Short version:

cd android
.\gradlew.bat :app:assembleRelease

The first build after deleting caches, or any build after SDL Java / CMake integration changes, should use:

.\gradlew.bat :app:assembleRelease --rerun-tasks

Game Data

This port expects the user to provide original Jagged Alliance 2 data files. The Android launcher lets you enter the game data directory and save directory manually.

Storage behavior:

  • Android 11+ uses all-files access for fixed-path native reads.
  • Android 7-10 uses legacy runtime storage permissions.

Upstream

This repository is based on JA2 Stracciatella. JA2 Reborn is not an official Stracciatella release. The Android port branch starts at the upstream base tag:

android-port-base

Local Android port commits are kept on:

ja2-reborn-android-port

Changelog

See CHANGELOG.md for the public change history.

License

The project source is distributed under the Strategy First Inc. Source Code License Agreement. See LICENSE.

Third-party dependencies and bundled mods may include their own license files. See THIRD_PARTY_NOTICES.md.

Jagged Alliance 2 game assets are not included and remain the property of their respective owners.

About

Android-focused Jagged Alliance 2 port based on JA2 Stracciatella

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors