Skip to content

Releases: MYSOREZ/GeneralsZH-Android-Port

v1.4.0

Choose a tag to compare

@github-actions github-actions released this 03 Oct 19:32
576e226

Highlights

1.4.0 is about speed and fit: a much faster OpenGL ES renderer, upscaling that renders the battlefield
below screen resolution while the interface stays sharp, and an interface size setting that makes menus and
buttons larger on small screens. Both settings are in the launcher:

Setting Where in the launcher
Upscaling (Snapdragon GSR) Graphics page (shown with the OpenGL ES backends; Vulkan does not use it)
Interface Size Interface page

Performance: a faster OpenGL ES renderer

The native OpenGL ES renderer (the default) got most of the work in this release:

  • Its own render thread. The game no longer waits on the graphics driver for every draw: GL calls are
    queued and run on a separate thread.
  • Dynamic geometry streamed the way the driver expects -- persistently mapped buffers, index data written
    into never-reused memory, fewer GL calls per draw, base-vertex draws and a shader program cache.
  • Cheaper translucent effects, sounds and file lookups: particle and model draws with the same state are
    merged, .wav sounds are decoded natively instead of through FFmpeg, and the sound cache no longer drops
    sounds still in use.

On the old Mali test phone, heavy battles went from about 23 to about 35 fps -- before upscaling, which adds
on top of that.

Upscaling: more frames, sharp interface

Launcher → Graphics → Upscaling (Snapdragon GSR). The 3D battlefield is rendered at a lower resolution and
sharpened back to full screen with Snapdragon Game Super Resolution; menus, the command bar and text are drawn at
full resolution afterwards, so they stay crisp. Four modes, as on PC: Ultra Quality, Quality, Balanced,
Performance -- the launcher shows the resolution each one renders at. On a phone whose GPU is the limit this
is the biggest single gain. Works with OpenGL ES and OpenGL ES + ANGLE; with Vulkan the option is hidden.

Interface size: bigger buttons on small screens

Launcher → Interface → Interface Size. Menus, the command bar, the generals' power bar, the group panel and
the corner HUD can be made larger. The layouts themselves are scaled as they load, so buttons really grow --
larger touch targets, not just a larger picture -- and the main menu, emblems and power bar are kept inside the
screen at every size.

Typing in the game: a real Android text field

Chat, lobby names and passwords are edited in an Android text field at the top of the screen: cursor,
selection, copy and paste, the keyboard's suggestions. OK or Enter sends, Back closes.

Online (GeneralsOnline)

  • Cross-play with the current PC release (100126). Every match against a 100126 PC went out of sync at
    frame 100; the game now follows the PC release's checksum rules on its own.
  • Sessions no longer die after 15 minutes. The GeneralsOnline sign-in lasts fifteen minutes and the PC
    client renews it; the phone did not, so after a while every lobby request was refused and the lobby simply
    stopped changing. It now renews itself, during long lobby waits and long matches alike.
  • A failed online start gives the main menu back. No connection, or a sign-in the server no longer
    accepts: the game says which (and asks you to sign in again in the launcher when that is the cause) and
    the main menu's buttons return -- no more killing the game.
  • Relay for the joining player (#31). A player joining a lobby never got TURN relay credentials, so two
    players on "difficult" networks (mobile data, some Wi-Fi) could not connect. Connection retries and the
    server's mesh check follow the PC client's current rules.
  • The service's integrity checks are answered the way the PC client answers them: loading-screen and
    score-screen screenshots, the match replay and the list of loaded libraries, uploaded to GeneralsOnline when
    the service asks for them.
  • Online game data: the install no longer fails with "checksum mismatch", and the community data patch is
    not mounted over a mod (Contra and others start again); a launcher switch uses it with mods anyway.

One account per device. The service accepts one active sign-in per account: signing in with the same
account on a second phone (or on the PC) signs the first one out. Use a separate account on each device.

LAN games between phones

LAN lobbies work on Android: the game listens for lobby broadcasts on the Wi-Fi network rather than on the
mobile-data interface, and holds the multicast lock Android requires. (Fix from the android-lan-fix branch
of JetErorr's fork.)

Game speed and controls

  • The skirmish Game Speed slider works again; its top position is four times normal speed.
  • Hold a command button to read its description -- also on commands that are not available yet -- without
    buying or building anything.
  • Smoother camera momentum after a drag on high-refresh screens.

Launcher

  • Support the project card on the Help page (Boosty -- like Patreon -- and USDT). Its contents come with the
    signed settings, so they are kept current without a new APK.
  • Settings from the signed updates now also cover the data package's address and the PC checksum rules, so
    fixes like the "checksum mismatch" one reach older launchers too.
  • List rows on the Tools and Help pages respond to a tap.

Fixes

  • An audio exception in looping and multi-part sounds, which could stop a sound or flood the log.
  • A command-bar description title no longer jumps between two font sizes.
  • Tokens are removed from the launcher's network log before it is shared.

Full Changelog: v1.3.0...v1.4.0

Support the project

This port is developed with Claude Code, and the subscription is paid out of pocket. If the port is useful to
you, donations are welcome -- on Boosty (a Patreon-like platform,
bank cards from anywhere) or in USDT, see the launcher's Help page or the
README. The game and every build stay
free; nothing is unlocked by donating.

v1.3.0

Choose a tag to compare

@github-actions github-actions released this 27 Sep 20:03
eb8b458

Highlights

Cross-platform multiplayer: play online with PC players

Android players can now play GeneralsOnline matches together with PC (Windows) players -- join a PC player's
lobby, or host one from the phone and let PC players join it.

  • The phone speaks the PC client's network protocol and matches its game checksums, so PC lobbies accept it.
  • The PC client's executable checksum is computed on the phone from the GeneralsOnline data patch, so a new PC
    release needs no new APK.
  • Many simulation paths were aligned with the PC client's own source so that both sides compute the same game.
  • The PC player has to turn their anti-cheat off (GeneralsOnline AntiCheat / Easy Anti-Cheat in the
    GeneralsOnline launcher): the mobile client has none, and the server only matches clients with the same setting.
  • Setup: sign in with your GeneralsOnline account in the launcher, install Online game data there (community data
    patch + maps, straight from GeneralsOnline) and turn on Play with PC players.

Cross-play is new; if a match against a PC goes out of sync, please send the logs from the launcher (log button)
and the replay of that match (the phone's and, if you can get it, the PC player's .rep) -- that is how the
remaining differences are being found.

The game in 12 languages besides English

Ten new game-text language packs, each a complete translation of the English original:
German, French, Spanish, Brazilian Portuguese, Polish, Interslavic, Simplified Chinese, Korean, Arabic and Persian.
The Russian and Ukrainian packs from 1.2.2 were completed against the English original and edited
Every pack is downloadable from the launcher,
and the launcher now names each language the way the pack itself writes it.

Text rendering was extended to carry them:

  • Right-to-left layout and Arabic/Persian letter shaping -- joined letters, right-aligned text and tooltips,
    numbers kept intact inside RTL text.
  • Chinese, Korean and Arabic glyphs are taken from the phone's own system fonts when the game's fonts lack them,
    instead of empty boxes. Symbol fonts too, so the GeneralsOnline lobby's shield icon now draws.
  • One-line labels whose translation is longer than the English shrink to fit instead of being cut in half.

Controls and interface

  • Second page on builder command bars. Dozers and workers with more structures than the bar has slots get an
    arrow button (bottom right) that flips to the rest.
  • Force-attack and waypoint buttons on the command bar (#25). Force attack is only offered to units with a weapon.
  • Scroll any list with your finger -- game lists, player lists, chat, map lists.
  • Corner HUD, messages and the watermark stay inside the screen's safe area on phones with rounded corners and
    cut-outs (#20).
  • Enter on the Android keyboard submits a text field -- e.g. the password of a locked online game, which could not
    be sent at all before.
  • The Steam release's Custom Mission button works.
  • Android 10 storage access fixed (#22).
  • One home-screen icon, the game's, opening the launcher.

Online (GeneralsOnline)

  • Sign-in fixed: the launcher asks the server for the login code instead of inventing one, and says what went wrong
    when something does.
  • Online game data from the launcher. The GeneralsOnline community data patch and community maps download
    straight from GeneralsOnline -- no PC needed -- and can be switched off or removed. The launcher checks for a newer
    version on its own and installs it on Wi-Fi.
  • 30 Hz or 60 Hz simulation, chosen in the launcher. The APK carries both engines.
  • Lobby fixes: the reason a join was refused is shown instead of blaming the host; map names in any language reach
    other players intact; games hosted from a phone are marked
    [Android] and shown in green in this client's list.
  • PC replays load on the phone, and a Replay check screen runs a replay through to compare it frame by frame.

Updates without a new APK

  • The launcher takes signed updates from this repository: newer engine builds and network settings (servers, PC
    compatibility) arrive without reinstalling the APK. Anything without a valid signature is ignored; an updated engine
    that fails to start twice is dropped automatically. Home → Updates.
  • The launcher and the game work fully offline; the last verified update stays in use.
  • Collect logs switch: turn it off and nothing is logged in the background.

Fixes

  • A missing control in a menu layout names itself in the log instead of closing the game.
  • Unit bone names were garbage under the Android C library (itoa wrote nothing) -- docking and attachment points are right again.
  • Upgrades are no longer queued on buildings still under construction.
  • Base-game INI tokens (FLESHY_SNIPER, AIRFIELD) read as their Zero Hour equivalents (#2).

Full Changelog: v1.2.2...v1.3.0

P.S. Your language is missing? Send it in ;)

Anyone can add a language: a pack is one plain UTF-8 text file (generals.str) that can be edited in any text
editor. Send it to this repository as a pull request (or attach it to an issue), and once it is merged it appears in
the launcher's language list for every player -- no app update needed. Corrections to the existing packs are
just as welcome. How to start, including converting an existing PC translation (.csf): see
languages/README.md.

v1.2.2

Choose a tag to compare

@github-actions github-actions released this 09 Sep 17:54
4bba249

Highlights

Game text languages

Zero Hour can now be played in languages the original release never shipped, without replacing any of the game's own files.

  • Native .str language packs. The engine now reads data/<language>/generals.str in addition to the original generals.csf, preferring the .str file when both are present. .str is plain UTF-8 text, so a translation is a text file anyone can edit in any editor and send as a pull request.
  • Russian and Ukrainian packs are included in this release, downloadable straight from the launcher.
  • Download language packs button in the launcher fetches every pack published in the repository's languages/ folder into the game directory in one go.
  • Game text language picker in the launcher, listing only what is actually installed — the languages present in the game folder plus any found inside mounted .big archives. The first entry, "Default (.big takes priority)", keeps the original behaviour so old localized mods packaged as archives keep working untouched.
  • scripts/language/csf2str.py converts an existing .csf — loose or inside a .big — into a .str pack, so translations that already exist for the PC game can be brought over directly.

Translators: see languages/README.md. New packs merged into the repository become downloadable from the launcher immediately, with no app update.

Touch controls

  • Two-finger camera rotation. Twisting two fingers rotates the camera; a small dead zone keeps it from firing during an ordinary pinch-zoom.
  • Real order markers under your finger. Issuing an order now draws the game's own cursor art — the red attack arrow, the capture flag, attack-move — instead of the previous generic green square.
  • Unit and structure health on touch. Tapping or holding an object shows its health bar, the hover feedback a mouse gets on the desktop game.

Fixes

  • Campaign "Continue" button did nothing on the score screen; the next mission now loads.
  • Movie audio. Intro and in-game videos play with sound.
  • Menu sounds and music. Button clicks and world sounds are audible again in the main menu, and the menu music no longer stops partway.
  • Intro sequence. The game logo no longer flickers in the top-right corner during the intro.
  • Camera during cutscenes stays locked while a script owns it, across all scripted camera modes rather than only some.
  • Launcher layout in right-to-left languages (Arabic, Persian) now mirrors correctly, and the language dialog no longer runs off the edge of the screen.

Launcher

  • Redesigned in Material 3, still supporting Android 7.0 and newer, and still fully translated into all 13 languages.
  • Collect audio logs button, for reporting sound problems.

Full Changelog: v1.2.1...v1.2.2

P.S. Please help us participate in translating the game into different languages ;)

v1.2.1

v1.2.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 06 Sep 17:13
e5866b1

Native touch controls

Battlefield input no longer pretends to be a mouse.

Until now every touch was turned into a stream of raw mouse messages and handed to an input chain written around a pointer -- something that has a position when nothing is pressed, that hovers, that can rest near a screen edge, and whose button releases are guaranteed to arrive. A finger has none of those properties, and that gap was behind essentially every control complaint on this port: a cursor left parked on the button that armed an ability so the placement ghost drew there, a camera scroll latched by a button-release that a higher-priority handler legitimately discarded, an ability radius frozen mid-drag.

Taps, double taps, the long press, the two-finger cancel and ability targeting now go straight to the engine's own decision-making -- pick what is under the finger, project it into the world, ask the engine what order that means. It is the same path a click on the radar minimap has always used. The orders produced are identical to the ones the mouse path produced, so multiplayer and replays are untouched.

What this fixes

  • The map no longer runs away. Screen-edge scrolling is off on touch: it is defined by a pointer resting near an edge and only ends when a later pointer event says otherwise, which cannot happen without a pointer.
  • Aiming an ability shows its radius, and the circle follows your finger for the whole drag. Release fires it where you let go; a second finger cancels.
  • The building ghost appears under your finger, when you point at the map -- not in the middle of the screen the moment you pick a structure.
  • Hold a build or ability button to read its description, and it stays up for the whole hold instead of flashing and vanishing. A hold no longer arms the build either -- a short tap still does.
  • Taps no longer fall through panels onto the battlefield underneath.
  • The intro can be skipped by tapping again.

Launcher

  • New Touch input overlay switch in Diagnostics: draws the gesture, where your finger is, where the engine thinks the pointer is, and the camera scroll anchor, and writes matching lines into the log. Turn it on when reporting a control problem.
  • The launcher is now fully translated in all 13 languages -- the log viewer and the DXVK config card were still falling back to English.

Full Changelog: v1.2.0...v1.2.1

P.S. I know about the bug with the bottom panel in the game; it won’t be there in the upcoming version. ;)

v1.2.0

Choose a tag to compare

@github-actions github-actions released this 06 Sep 03:42
90b82c1

What's new in 1.2.0

The OpenGL ES / ANGLE render backend is now a real alternative to Vulkan. Until now, DXVK-over-Vulkan was the only path that rendered the game correctly, so a device whose driver can't run DXVK had nothing to fall back on. This release makes the GLES path usable end to end and adds an in-app Render Backend picker (Vulkan / GLES / GLES+ANGLE) to the Setup screen, so you can switch without a rebuild.

GLES rendering fixes (all confirmed on a real Mali-G76 device)

  • Framerate: 12-17 fps to 55-60 fps. Dynamic vertex/index buffer locks forced the GPU to drain its queued work before nearly every UI draw. D3D8's lock flags (DISCARD / NOOVERWRITE) are a synchronization contract, and they are now translated as one instead of being ignored.
  • Textures disappearing after a restart on Medium and Low detail. D3DRS_ZENABLE was never seeded with its documented D3D8 default, so the depth test was off for the whole scene and water, drawn last, painted over the terrain.
  • Grey and flickering build icons in the command bar: the MULTIPLYADD texture-stage operation the icons use was silently approximated as MODULATE, and a texture-less stage was collapsed for both colour and alpha at once.
  • Aircraft shadows rendering as dark slabs at High detail and above: a signed cast clamped the stencil reference value to 0, and a STENCILMASK of 0 ("compare no bits") was being read as "unset" and replaced with a default.
  • Pink/magenta terrain on GPUs that do not expose S3TC (issue #18): DXT1-5 textures are now decoded in software instead of falling through to a magenta placeholder.
  • See-through strip along the right and bottom edge of the screen.
  • Upside-down picture on some devices (Redmi Note 8 Pro): ANGLE's surface pre-rotation is now disabled.

Beyond rendering

  • The game-folder picker now detects truncated or corrupted .big archives and shows the result prominently, instead of silently accepting a half-copied folder.
  • GeneralsOnline sign-in reports the actual network/HTTP error instead of a blanket "login failed".
  • Dynamic LOD also drops shadows at the lowest FPS tier.
  • Richer DXVK adapter logging at startup (vendor/device ID, Vulkan API version, BC texture support).

Notes

Vulkan remains the default and the recommended backend where it works. Pick GLES or GLES+ANGLE in Setup if Vulkan gives you a black screen or a driver crash on your device.

Full Changelog: v1.1.5...v1.2.0

v1.1.5

Choose a tag to compare

@MYSOREZ MYSOREZ released this 04 Aug 16:45
c387195
  • Fixed an empty folder list in the system file picker on Android 9/10 – previously, on these versions, the user physically could not select the game folder during installation.
  • Backported several null‑pointer crash fixes from the GeneralsX/GeneralsGameCode upstream.
  • Fixed save/load bugs for the aircraft carrier.
  • Fixed object picking via screen tap (incorrect precision mode during raycasting).
  • Increased the font scale of tooltips and the main menu fallback font on high‑DPI screens.
  • Added a one‑frame delay before stopping rendering when the app loses focus – prevents a sudden black screen when minimising.
  • Fixed black areas in screenshots and in the "Recent" section (swapchain alpha channel).
  • Enabled multipass terrain blending by default on Android – eliminates black edges on Adreno GPUs.
  • Fixed importing of custom Vulkan drivers (Turnip) – a missing slash in the path used to break it entirely; now it loads correctly.
  • Completely rewrote touch‑based camera control: true pinch‑to‑zoom and one‑finger panning without mouse emulation or phantom cursor, camera inertia on release, and fixed pan/zoom freezing in busy scenes.
  • Added full touch‑based building placement (tap‑drag‑rotate‑release) and box selection via long‑press followed by drag.
  • Added a completely new feature – a native unit group control panel (a spoiler button at the bottom next to the minimap), which did not exist before: proper 0–9 button numbering, synchronised show/hide with the actual minimap panel, a long‑press gesture to clear a group without losing unit commandability and without affecting the current battlefield selection, and fixed a bug where an invisible window intercepted clicks on the battlefield after using the panel.
  • Continued auditing and fixing race conditions in reference counting on ARM in DXVK (bug class "DxvkResourceAllocationPool: corrupted free list head") – fixed in five more render engine classes on top of what was already done in 1.1.4.
  • Added toggle checkboxes in the launcher for diagnostic files, replacing manual creation of .txt files via file manager, with labels worded in plain language across all 12 launcher languages.

https://github.com/MYSOREZ/GeneralsZH-Android-Port/commits/claude/native-touch-controls

v1.1.4

Choose a tag to compare

@github-actions github-actions released this 01 Aug 04:06
c0bd28b

Follow-up fixes to v1.1.3

  • The Settings app's driver-help text still said Mali GPUs "aren't affected" by the Turnip driver option in a way that read as "Mali isn't supported" -- fixed in all 13 launcher languages. Mali GPUs (Mali-G76, Mali-G57, and similar) already meet DXVK's Vulkan 1.1 requirement natively; the Turnip option is Adreno-only because Turnip itself only targets Adreno hardware.
  • Documented the opt-in diagnostic marker files (gx_trace.txt, gx_perf.txt, dxvk_hud.txt, dxvk_validation.txt) testers can drop into their game folder for extra logging -- see docs/port/ANDROID_PORT.md.
  • Moved the GeneralsOnline sign-in card higher in the Setup screen, above the advanced-settings cards (language, UI scale, driver, dxvk.conf editor).
  • README now clearly states this is an unofficial community fan port, not affiliated with EA/Westwood.

Full Changelog: v1.1.3...v1.1.4

v1.1.3

Choose a tag to compare

@github-actions github-actions released this 01 Aug 03:13
bd3a79f

Vulkan 1.1 GPUs (ARM Mali-G76, Mali-G57 and similar) are now playable

DXVK's minimum Vulkan requirement was lowered from 1.3 to 1.1 with an adaptive feature/extension fallback path, so phones with a Vulkan 1.1-only driver -- ARM Mali-G76 (Redmi Note 8 Pro and similar), Mali-G57, and comparable Bifrost/Valhall-class GPUs -- can now launch and run the game. This build also carries a round of Mali-specific stability fixes (GPU memory corruption workarounds, texture padding/crash fixes) and better on-device diagnostics (in-launcher log viewer/export, dxvk.conf editor).

Performance on these GPUs is still primarily CPU-bound rather than GPU-bound: on older or weaker phones expect lower frame rates and occasional freezes, especially during map/mission loading. Please share logs if you run into issues -- they help a lot.

P.S. Let me remind you that the game has a multiplayer mode if you log in to your GeneralsOnline account directly in the launcher.

Full Changelog: v1.1.2...v1.1.3

v1.1.2

Choose a tag to compare

@github-actions github-actions released this 13 Jul 12:22
8fe9360

New in 1.1.2: the launcher can now switch the game's own text too, and 4 more languages

The Language card in Settings can now optionally switch the game's own in-match text to match, for German, Spanish, Chinese, French, Korean, Polish, Brazilian Portuguese, and Russian -- but only when your own game folder actually contains that language's data (data//generals.csf). This app never ships or invents game text itself; if the data isn't there, the game keeps its own language and the Language card tells you why.

Also new: French, Korean, and Brazilian Portuguese join the launcher's own UI language list (in addition to the German/Spanish/Chinese/Russian/Ukrainian/Interslavic/Arabic/Persian added in 1.1.1), matching every language Zero Hour's engine can auto-detect.

Full Changelog: v1.1.1...v1.1.2

v1.1.1

Choose a tag to compare

@github-actions github-actions released this 13 Jul 10:55
74e688f

New in 1.1.1: Launcher language support

The Settings app (game folder picker, log viewer, driver options, GeneralsOnline sign-in) can now run in 9 languages instead of just English: English, Russian, German, Ukrainian, Spanish, Simplified Chinese, Interslavic (Medzuslovjansky), Arabic, and Persian. Pick one from the new "Language" card in Settings -- defaults to following your phone's system language, falling back to English if it's not one of these.

Note: this only affects the Settings app itself. The game's own in-match text always comes from your own copied game data (.big files) and isn't something this port controls.

Also in this build: a bundled fallback Vulkan driver (Mesa Turnip) for some older Qualcomm Adreno phones whose stock driver doesn't reach the Vulkan 1.3 floor DXVK needs, and assorted crash-log fixes.

Full Changelog: v1.1.0...v1.1.1