Skip to content

ARMSX2 iOS 2.4.1

Latest

Choose a tag to compare

@J1coding J1coding released this 18 Jul 17:40
a7f1c1b

ARMSX2 iOS 2.4.1 is a much bigger follow-up than the version number might suggest.

This update adds video library backgrounds, MetalFX upscaling, more flexible controller and RetroAchievements settings, save-state previews, and a long list of interface improvements.

There has also been a lot of work under the hood. JIT handling is more resilient, several ARM64 and Metal paths have been improved, and a number of game-specific compatibility problems have been fixed.

Thank you to everyone who tested the builds, reported issues, and kept checking the fixes.

Library backgrounds

Library backgrounds have been rebuilt around separate portrait and landscape slots.

Setting a portrait background no longer replaces the landscape one, or vice versa. Each slot clearly shows its orientation, file type, and size, so it is easier to see exactly what you are editing.

Each orientation also has its own fit mode:

  • Fill fills the screen and crops the edges when necessary.
  • Fit keeps the entire image visible and may add letterboxing.
  • Stretch fills the screen by changing the image proportions.

Stretch mode has been fixed so it no longer leaves black bars along the sides in portrait or at the top and bottom in landscape.

Alongside static and animated images, the library can now use looping video backgrounds. MP4, MKV, and WebM files can be selected, and the player swaps cleanly when a different video is chosen. Videos resume properly after returning to the app and pause while ARMSX2 is in the background.

Background importing is also safer. A failed import can no longer remove or replace the background you were already using.

The dimming control now shows a live percentage, making it easier to use the same intensity across different backgrounds.

Game cards

Portrait game cards finally receive the same frosted-glass treatment as their landscape versions. A subtle gradient behind the cards gives the glass something consistent to blur, while Reduce Transparency users receive an opaque fallback.

The cards themselves have received a small layout pass:

  • Titles, file information, size, and region are centered beneath the cover.
  • Additional padding gives the contents more breathing room.
  • The favorite star has a lighter and less distracting background.
  • The BIOS Only button is easier to notice.
  • Favorite buttons in the list view have a larger and more reliable tap area.

Save states and memory cards

Save states now display the screenshot captured with each state. This should make it much easier to recognise the point in the game you are about to restore.

Memory cards can be exported through the standard iOS share sheet. ZIP archives containing memory cards can also be imported directly into the app.

Gameplay and controls

Portrait gameplay uses more of the available screen. The game viewport has been increased from 55% to 60% of the screen height, reducing the unused space between the game and the virtual controller.

The in-game pause button now uses a proper pause symbol instead of the previous ellipsis icon. The menu button also has better contrast, helping it remain visible over bright game scenes.

ARMSX2 now keeps the display awake while a game is running.

Stick inversion

Each virtual stick axis can be inverted independently:

  • Left stick horizontal
  • Left stick vertical
  • Right stick horizontal
  • Right stick vertical

These options have global defaults and can also be overridden for individual games. The on-screen stick still follows your finger normally; only the input sent to the game is inverted.

Rumble and haptics

When no rumble-capable physical controller is connected, PS2 rumble events can now be translated into iPhone haptic feedback.

This respects the existing Haptic Feedback setting and is rate-limited so sustained rumble does not overload the device’s haptic engine.

Pause menu

Long game titles use end truncation instead of cutting text out of the middle, which keeps the beginning of the title readable.

The speed-control panel can also expand to full height. It should no longer remain stuck at half-height after rotating the device.

Settings

The main Settings screen is no longer one long list of unrelated links. Options have been organised into five sections:

  • Interface
  • Emulation
  • Input
  • Storage & Memory
  • Features

The JIT diagnostic panel has been moved below the main settings, so it is no longer the first thing most users see.

The BIOS list has also been cleaned up. Description text uses the normal interface font instead of monospaced text, and the empty state presents one clear action rather than two competing buttons.

A shader-cache reset option is now available from the app, making it easier to recover from a damaged or outdated cache without manually deleting files.

Per-Game Settings

Per-Game Settings includes a new RetroAchievements category, allowing achievements and Hardcore Mode to be controlled for individual games.

The CPU section also exposes EE and IOP rounding and clamp modes for games that require more specific behaviour.

Messages about live settings have been corrected. Options that can apply immediately say so, while settings that need a restart no longer pretend to have changed instantly. The confirmation shown after saving also reflects what actually happened.

A bug that could create unwanted per-game cheat settings even when overrides were disabled has been fixed.

The panel background has been corrected in portrait, where it could previously appear as a flat black sheet. Warning styling and untranslated text have also been brought in line with the rest of the app.

RetroAchievements

Expired or rejected RetroAchievements sessions are handled more clearly.

When stored login information is no longer valid, the settings screen shows "Not connected" and offers a "Log In Again" button. You no longer have to log out manually before being able to authenticate again.

Achievement notifications now queue properly. When several achievements unlock close together, their banners appear one after another instead of overlapping or replacing each other.

Hardcore Mode and patches

Trusted widescreen and 60 FPS patches from the built-in patches database can now be used in Hardcore Mode. Cheats remain blocked.

The app checks where each patch came from rather than relying on its filename, so a cheat cannot bypass the restriction simply by being renamed to look like a 60 FPS patch.

Patch entries also show what is really happening:

  • Hardcore-safe patches display a green check.
  • Suppressed patches display an amber lock.
  • A patch no longer appears enabled when Hardcore Mode has actually prevented it from running.

Turning a patch off while Hardcore Mode is active no longer permanently loses its previous selection. The selection is restored when Hardcore Mode is disabled.

Multiple patch and cheat databases are now merged while loading, improving coverage when more than one source is installed.

MetalFX and graphics

MetalFX Spatial upscaling is now available on supported iPhones and iPads running iOS 16 or later.

It can be selected globally or for an individual game. Unsupported devices automatically fall back to the normal scaling path, with a one-time on-screen message explaining why MetalFX could not be used.

Several Metal rendering paths have also been cleaned up for Apple GPUs. Redundant desktop-style texture barriers are no longer used on iOS, and fixes have been made around framebuffer handling, texture-cache invalidation, downsampling, overlapping geometry, and feedback rendering.

The on-screen display has a new custom preset, and overlays should no longer be cut off near screen corners or rounded display edges.

Audio and performance

The NEON-optimised SPU2 mixer is now active on iOS. Volume processing, voice accumulation, clamping, and parts of the reverb path can use ARM’s vector instructions, while the original scalar paths remain available as a fallback.

The ARM64 recompiler has received additional optimisations and correctness fixes, including immediate-value folding and improved handling for several floating-point operations.

Fast memory access has been hardened with safer address checks and fault handling. The frame limiter also reads the ARM64 hardware counter directly, reducing timing overhead.

Games that frequently read data back from the graphics system benefit from improvements to vertex submission and stall handling.

These are mostly internal changes, but together they should reduce unnecessary CPU and GPU work and avoid several correctness problems in affected games.

Game compatibility

This release includes targeted GameDB, recompiler, and renderer fixes.

Notable changes include:

  • Ratchet: Deadlocked: Fixed a VU0 and Emotion Engine timing deadlock that could leave the player invisible or the game stuck.
  • True Crime: New York City: Added VU synchronisation fixes and removed a flag workaround that could cause graphical corruption.
  • Chaos Legion: Added VU synchronisation fixes for affected scenes and menus.
  • Silent Hill 3: Removed an outdated renderer workaround that could produce black FMV sequences.
  • Burnout 3: The existing skybox correction is now applied on iOS. Made possible by @dr-sandwich
  • EyeToy games: Fixed an iOS camera path that incorrectly referenced a desktop-only camera type.

A broader set of shared graphics fixes has also been pulled in for texture handling, framebuffer clears, flat shading, depth resizing, and other rendering edge cases.

Stability

JIT handling has been made more resilient.

A startup watchdog also catches rare hangs while the emulator is preparing the virtual machine and displays an error instead of leaving the app indefinitely stuck on a black screen.

DEV9 HDD image paths are validated before use. If an image is missing or unsafe to open, DEV9 disables it cleanly rather than preventing the game from booting.

Malformed DDS texture replacements are also handled safely. Invalid texture dimensions can no longer request an enormous memory allocation and crash the app; the damaged texture is skipped instead.

Accessibility and readability

VoiceOver coverage has been expanded across the game display, virtual controls, and performance HUD.

Battery level, thermal state, memory use, and Low Power Mode information can be read aloud without relying solely on the visual overlay.

Secondary text and frosted overlays have stronger contrast over bright game content. The secondary text color has been adjusted to meet the WCAG AA contrast target, and the background frost is more stable when the scene underneath changes rapidly.

Reduce Transparency continues to replace glass surfaces with solid alternatives where needed.

Final note

Thank you again to the testing team.

There were a lot of small changes in this release, and many of them came directly from people repeatedly testing rough builds, checking fixes, and pointing out the parts of the app that still felt awkward.

That feedback made 2.4.1 a much more polished and reliable update.