This release ships better Android touch/menu behavior and always landscape, a 32 bit Android ARMv7a release target, signed and notarized macOS release executables, no more Windows defender false positives, improvements to the Mod Manager, a HUD toggle, and an option to mute the game when the window loses focus.
New Features
1. Android controls and menu improvements (#249)
The Android overlay is less intrusive and easier to operate on real devices.
- Auto-hiding menu button - the on-screen menu affordance fades out instead of staying permanently over gameplay.
- Back/Select menu shortcut - Android Back and controller Select can now open the menu.
- Landscape/fullscreen handling - the activity keeps the game locked to landscape and cooperates with SDL fullscreen resizing behavior.
- Touch overlay polish - analog stick stays in the same place always.
2. Mod Manager refresh and deleted-mod handling (#236)
The Script Mods panel has been folded into the broader Assets section and now behaves more like a live manager instead of a static list.
- Rescan support - the UI can rescan installed mods without restarting the game.
- Hot-reload cleanup - deleted mods are reflected correctly instead of lingering in the menu.
- Mod registry plumbing - new
port/mods/ModRegistry.*tracks mod entries for the menu and runtime reload path.
3. Disable HUD option (#246)
A new enhancement lets players hide the in-game HUD.
- Adds the port-side
DisableHUDenhancement and menu checkbox. - Includes the decomp-side guards needed for the toggle to actually suppress HUD drawing.
4. Mute on focus loss (#237)
A new focus-control option can mute the game while the window is inactive and restore the previous master volume when focus returns.
- Uses libultraship's new
WindowFocusEvent. - The integration fixes a double-focus-loss edge case so the saved volume is not overwritten with the muted value.
5. Android arm64 and armeabi-v7a release APKs
The release now ships separate Android APKs for modern 64-bit devices and older 32-bit ARM devices.
- Keeps the historical
BattleShip-android.apkfilename forarm64-v8a. - Adds
BattleShip-android-armeabi-v7a.apkfor 32-bit ARM devices.
Quality-of-Life improvements
- Training Mode extra-stage scrolling - Training Mode can scroll the extra-stage page correctly, including Android CSS icon support.
- CSS empty-slot guard - empty P3/P4 fighter slots no longer reactivate into invalid state.
- Android emulator helper -
scripts/android-emulator.shwas expanded for easier local Android iteration.
Release and Packaging
- TinyCC static-linking on Windows - TinyCC is linked into the Windows modding build to reduce antivirus false-positive risk from shipping the tinycc.dll in the release.
- TinyCC mod loading from memory - libultraship now supports loading TinyCC mods from memory and pins the TinyCC source revision used by the build.
- macOS signing and notarization - release builds now import the Developer ID certificate, sign the app, notarize the package, and retry notarization polling when Apple's service is slow.
- Styled macOS DMGs restored - CI now requires the polished drag-to-Applications DMG window with the background art and larger icons, while still using a timeout so Finder automation cannot hang the release forever.
- macOS SDL3 bundling - Homebrew's current
sdl2can resolve tosdl2-compat, which loads SDL3 dynamically; the macOS package now bundleslibSDL3.0.dyliband thelibSDL3.dylibsymlink needed on clean Macs. - Release artifact matrix cleanup - release builds produce US/JP macOS DMGs, US/JP Linux AppImages, US/JP Windows zips, and both Android APKs.
- Release checksums and attestations - release artifacts continue to be published with SHA256 sums and provenance attestations.
Bug Fixes
- Focus-loss volume restore - repeated focus-lost events no longer replace the saved master volume with
0. - Android landscape/fullscreen sizing - Android now keeps the activity in the intended orientation and avoids SDL resize behavior that could leave the touch/game area wrong.
- Training Mode stage-scroll issues - extra Training Mode stages can be reached reliably.
- P3/P4 CSS null fighter state - empty player slots are skipped instead of being reactivated with invalid fighter data.
- CSS costume/null-fkind guards - costume lookup paths now guard against unregistered fighter kinds, and reused fighter GObjs have their world position re-applied correctly.
- Co-Op Classic Master Hand/challenger behavior - partner control and challenger-duel stock/win-loss handling are corrected.
- macOS "Failed loading SDL3 library" launch crash - release DMGs now include SDL3 when the bundled SDL2 dylib is the sdl2-compat wrapper.
- Modern libstdc++ compatibility in libultraship - LUS PR #6 adds the missing
<cstdint>include and fixes the event ID declaration macro so newer GCC/libstdc++ combinations do not rejectextern "C" externdeclarations.
Submodule Changes
decomp: 676f840a -> 25f9a8c9
68755588f- fix co-op Master Hand P2 control and 2-player challenger duels.6c1183086- skip empty VS fighter slots.76a034d8b- allow Training Mode extra-stage page scroll.7bd0cfc77- add disable-HUD guards.7783bf83c- fix Android v7a ILP32 decomp compatibility.25f9a8c9e- merge CSS costume/null-fkind guards fromssb-decomp-re#10.
libultraship: b3da10da -> 58f22ed4
ec22b3e2- pin TinyCC source revision.f11f123a- load TinyCC mods from memory.e4815835- addWindowFocusEvent.58f22ed4- merge GCC 16 / modern libstdc++ compatibility fixes from LUS PR #6.
torch
- Unchanged:
8060a909.
Contributors
Thanks to @Zorkats for the Mod Manager refresh and focus-loss mute option, @the-outcaster for the Disable HUD option, and @RakugaKid for the Android menu/control improvements.