Changelog
This will list notable changes from release to release, and credit
the people who contributed them. This mainly covers changes that are
visible to end users, so please look at the commit history if you want
to know all the details.
Names preceded by an @ are GitHub usernames.
Lists of new working apps are a guideline, not a guarantee of
support, and are not comprehensive. Credits for new working apps
indicate someone who put a lot of effort into getting that particular
app working, but compatibility is always a cumulative collaborative
effort.
Changes are categorised as follows:
- Compatibility: changes that affect which apps work in touchHLE.
- Quality and performance: changes that don’t affect which apps work,
but do affect the quality of the experience.
- Usability: changes to features of the emulator unrelated to the
above, e.g. new input methods.
- Other: when none of the above seem to fit.
v0.2.1 (2023-10-31)
From this release onwards, the old list of supported apps is replaced
by the crowdsourced touchHLE app
compatibility database.
Compatibility:
- API support improvements:
- Various small contributions. (@hikari-no-yume, @ciciplusplus, @alborrajo)
- New working apps:
Quality:
- Multi-touch is now supported. (@ciciplusplus)
Usability:
- The Android version of touchHLE now has a documents
provider. Thanks to a mere three hundred lines of boilerplate code
originally
written for the emulator Skyline (RIP), it is now possible for you,
as the owner of a device running a newer Android version, to move
files documents in and out of touchHLE’s
directory location on your device with relative
ease. For example, it is now possible to download an .ipa
file application/octet-stream
document to
the Downloads folder of your device, then, using an appropriate app,
move this document to the touchHLE location. Users of
normal operating systems and older
versions of Android continue to be able to access a superior version
of the same functionality via a so-called “file manager”. (@hikari-no-yume)
- There is now an “Open file manager” button in the app picker, to
make it easier to find where touchHLE stores your apps and settings. On
most operating systems this opens the relevant directory in a file
manager, and on Android it opens some sort of app for managing
documents in the touchHLE location. (@hikari-no-yume)
- The Android version of touchHLE now writes all log messages to a
file called
log.txt
, in addition to outputting them to
logcat. (@hikari-no-yume)
- The new
--stabilize-virtual-cursor=
option makes the
analog stick-controlled virtual cursor appear more stable to the
emulated app, which is helpful in some games with overly sensitive menu
scrolling. In some titles it is applied by default. (@hikari-no-yume;
special thanks: @wareya)
- Automatic language detection now works on all platforms, and
supports a list of languages in order of preference, rather than just
one. The
LANG
environment variable is no longer supported,
and instead the new --preferred-languages=
option can be
used. Note that it is the emulated app itself that decides what to do
with this list, and whether particular languages are supported. (@hikari-no-yume)
- The app picker now has multiple pages, so it is no longer limited to
16 apps. (@hikari-no-yume)
- The framerate is now limited to 60fps by default, which matches the
original iPhone OS and fixes issues with some games where the game ran
too fast or consumed excessive energy and CPU time. This limit can be
adjusted or disabled with the new
--limit-fps=
option.
(@hikari-no-yume; special thanks:
@wareya)
- The
--button-to-touch=
option now supports D-pad
mappings in addition to the A/B/X/Y buttons. (@alborrajo)
- Default game controller button mappings have been added for
Wolfenstein RPG and Doom II RPG, including for the D-pad. (@alborrajo)
v0.2.0 (2023-08-31)
Compatibility:
- API support improvements:
- Various small contributions. (@hikari-no-yume, @KiritoDv, @ciciplusplus, @TylerJaacks, @LennyKappa)
- PVRTC and paletted texture compression is now supported. (@hikari-no-yume)
- Some key pieces of UIKit and Core Animation are now implemented:
layer and view hierarchy, layer and view drawing, layer compositing,
touch input hit testing,
UIImageView
, UILabel
,
UIControl
, and UIButton
. Previously, touchHLE
could only support apps that draw everything with OpenGL ES, which is
only common for games. This lays the groundwork for supporting games
that rely on UIKit, and possibly some non-game apps. (@hikari-no-yume)
- Threads can now sleep, join other threads, and block on mutexes.
(@LennyKappa,
@hikari-no-yume)
- New supported apps:
- Fastlane Street Racing (@hikari-no-yume)
- Mystery Mania (@KiritoDv)
- Wolfenstein
3D (@ciciplusplus; version 1.0 only)
- Many old apps by Donut Games (@ciciplusplus)
Quality and performance:
- Overlapping characters in text now render correctly. (@Xertes0)
- touchHLE now avoids polling for events more often than 120Hz.
Previously, it would sometimes poll many times more often than that,
which could be very bad for performance. This change improves
performance in basically all apps, though the effects on the supported
apps from previous releases are fairly subtle. (@hikari-no-yume)
- The macOS-only memory leak of up to 0.4MB/s seems to have been
fixed! (@hikari-no-yume)
- App icons are now displayed with rounded corners, even if the PNG
file contains a square image. This is more accurate to what iPhone OS
does. (@hikari-no-yume)
- The memory allocator is a lot faster now. (@hikari-no-yume)
New platform support:
- touchHLE is now available for Android. Only AArch64 devices are
supported. (@ciciplusplus, @hikari-no-yume)
Usability:
- touchHLE now supports real accelerometer input on devices with a
built-in accelerometer, such as phones and tablets. This is only used if
no game controller is connected. (@hikari-no-yume)
- The options help text is now available as a file
(
OPTIONS_HELP.txt
), so you don’t have to use the command
line to get a list of options. (@hikari-no-yume)
- The new
--fullscreen
option lets you display an app in
fullscreen rather than in a window. This is independent of the internal
resolution/scale hack and supports both upscaling and downscaling.
(@hikari-no-yume)
- touchHLE now has a built-in app picker with a pretty icon grid.
Specifying an app on the command line bypasses it. (@hikari-no-yume)
- The new
--button-to-touch=
option lets you map a button
on your game controller to a point on the touch screen. touchHLE also
now includes default button mappings for some games. (@hikari-no-yume)
- The new
--print-fps
option lets you monitor the
framerate from the console. (@hikari-no-yume)
Other:
- To assist with debugging and development, touchHLE now has a
primitive implementation of the GDB Remote Serial Protocol. GDB can
connect to touchHLE over TCP and set software breakpoints, inspect
memory and registers, step or continue execution, etc. This replaces the
old
--breakpoint=
option, which is now removed. (@hikari-no-yume)
- The version of SDL2 used by touchHLE has been updated to 2.26.4.
(@hikari-no-yume)
- Building on common Linux systems should now work without problems,
and you can use dynamic linking for SDL2 and OpenAL if you prefer. Note
that we are not providing release binaries. (@GeffDev)
- Some major changes have been made to how touchHLE interacts with
graphics drivers:
- touchHLE can now use a native OpenGL ES 1.1 driver where available,
rather than translating to OpenGL 2.1. This is configurable with the new
--gles1=
option. (@hikari-no-yume)
- The code for presenting rendered frames to the screen has been
rewritten for compatibility with OpenGL ES 1.1. (@hikari-no-yume)
- The splash screen is now drawn with OpenGL ES 1.1, either natively
or via translation to OpenGL 2.1, rather than with OpenGL 3.2. (@hikari-no-yume)
Theoretically, none of these changes should affect how touchHLE behaves
for ordinary users in supported apps, but graphics drivers are
inscrutable and frequently buggy beasts, so it’s hard to be certain. As
if to demonstrate this, these changes somehow fixed the mysterious
macOS-only memory leak.
- The new
--headless
option lets you run touchHLE with no
graphical output and no input whatsoever. This is only useful for
command-line apps. (@hikari-no-yume)
v0.1.2 (2023-03-07)
Compatibility:
- API support improvements:
- Various small contributions. (@hikari-no-yume, @nitinseshadri)
- Some key parts of
UIImage
, CGImage
and
CGBitmapContext
used by Apple’s Texture2D
sample code are now implemented. Loading textures from PNG files in this
way should now work. (@hikari-no-yume)
- MP3 is now a supported audio file format in Audio Toolbox. This is
done in a fairly hacky way so it might not work for some apps. (@hikari-no-yume)
- New supported apps:
- Touch & Go LITE (@hikari-no-yume)
- Touch & Go [added to changelog after release: 2023-03-12] (@hikari-no-yume)
- Super Monkey Ball Lite (@hikari-no-yume; full version was
already supported)
Quality:
- The version of stb_image used by touchHLE has been updated. The new
version includes a fix for a bug that caused many launch images (splash
screens) and icons to fail to load. Thank you to @nothings and @rygorous who diagnosed and fixed
this.
Usability:
- The virtual cursor controlled by the right analog stick now uses a
larger portion of the analog stick’s range. (@hikari-no-yume)
- Basic information about the app bundle, such as its name and version
number, is now output when running an app. There is also a new
command-line option,
--info
, which lets you get this
information without running the app. (@hikari-no-yume)
- You are now warned if you try to run an app that requires a newer
iPhone OS version. (@hikari-no-yume)
- Options can now be loaded from files. (@hikari-no-yume)
- The recommended options for supported apps are now applied
automatically. See the new
touchHLE_default_options.txt
file.
- You can put your own options in the new
touchHLE_options.txt
file.
- If you’re a Windows user, this means that dragging and dropping an
app onto
touchHLE.exe
is now all you need to do to run an
app.
Other:
- The version of dynarmic used by touchHLE has been updated. This will
fix build issues for some people. (@hikari-no-yume)
v0.1.1 (2023-02-18)
Compatibility:
- API support improvements:
- Various small contributions. (@hikari-no-yume, @nitinseshadri, @LennyKappa, @RealSupremium)
- Basic POSIX file I/O is now supported. Previously only standard C
file I/O was supported. (@hikari-no-yume)
- Very basic use of Audio Session Services is now supported. (@nitinseshadri)
- Very basic use of
MPMoviePlayerController
is now
supported. No actual video playback is implemented. (@hikari-no-yume)
- New supported app: Crash Bandicoot Nitro Kart 3D (@hikari-no-yume;
version 1.0 only).
Quality and performance:
- The code that limits CPU use has reworked in an attempt to more
effectively balance responsiveness and energy efficiency. Frame pacing
should be more consistent and slowdowns should be less frequent. No
obvious impact on energy use has been observed. (@hikari-no-yume)
- The emulated CPU can now access memory via a more direct, faster
path. This can dramatically improve performance and reduce CPU/energy
use, in some cases by as much as 25%. (@hikari-no-yume)
- Fixed missing gamma encoding/decoding when rendering text using
UIStringDrawing
. This was making the text in Super
Monkey Ball’s options menu look pretty ugly. (@hikari-no-yume)
Usability:
.ipa
files can now be opened directly, you don’t need
to extract the .app
first. (@DCNick3)
- New command-line options
--landscape-left
and
--landscape-right
let you change the initial orientation of
the device. (@hikari-no-yume)
- The app bundle or
.ipa
file no longer has to be the
first command-line argument. (@hikari-no-yume)
Other:
- Some of the more spammy warning messages have been removed or
condensed. (@hikari-no-yume)
v0.1.0 (2023-02-02)
First release.