The web shell scales the canvas to its final display size. Enabling a
high-density backbuffer would make SDL scale to device pixels first,
followed by another scaling pass in the browser.
Make SDL3 the default and only supported SDL version for Android. Download
the official SDL3 Android AAR during Gradle configuration and expose it to
the native CMake build through Prefab. SDL_ttf 3 is built from source with
HarfBuzz and PlutoSVG disabled.
Add optional SDL3 support while keeping SDL2 as the default. SDL3 builds
must be selected explicitly with the SYSTEM3_SDL_VERSION CMake option.
Centralize most SDL2/SDL3 API differences behind compatibility interfaces.
Audio playback uses a dedicated SDL3 backend based on SDL3 audio streams,
implemented separately in mako_sdl3.cpp.
Android and Nintendo Switch remain on SDL2 for now.
init_console() unconditionally reopened stdout, stderr and stdin on a
newly allocated console. Since ad33e72 this also happens for
`-texthook print`, which made the scenario tests fail because ctest
could no longer read the output of the process.
Dri::load_mda() referenced 26 of the built-in MDAs without the ".MDA"
suffix, so open_resource() never found them.
Also add the missing cases for Rance 4 and Gakuen KING.
Gakuen KING's original implementation returns 1 for num=1; it returns 0
only when num is 0.
The line dates back to the initial upstream import and had never been
changed. nact_sys1.cpp and nact_sys2.cpp still have the same expression
but they are left alone.
This is an enhancement over the original. The original draws each map
redraw at its new position at once, then waits for the movement
interval. Compose the view into an offscreen screen and slide it into
place over that same interval, interpolating the sprite alongside it,
for smooth scrolling. Redraws that move more than one cell still snap.
The original leaves the selection feedback to the mouse pointer,
which may be missing or impossible to move in system3-sdl2. Draw the
mouse cursor image extracted from GAKUEN.COM on the grid while the
keyboard drives the selection.
- MP3/OGG files are now decoded with dr_mp3 and stb_vorbis via the new
MakoMusic backend.
- Merge src/win/mako.cpp into src/generic/mako.cpp: Windows now uses the
same SDL audio path.
- A single SDL2 audio device mixes FM, BGM and PCM in its callback with
SDL_MixAudioFormat.
- PCM plays through SDL_AudioStream.
- dr_mp3 and stb_vorbis are vendored under deps/ and included from
mako_music.cpp. Warnings for that translation unit are silenced.
Run GameActivity in a private :game process and terminate it after SDL
shutdown completes, ensuring that each game starts with fresh native
state.
Refresh the launcher game list from disk when it resumes instead of
using the process-local Launcher singleton from GameActivity.
Move ZIP install jobs from GlobalScope to a Launcher-owned coroutine
scope and store progress, success, and failure in InstallState. This
lets a recreated LauncherActivity render the current install state and
consume completed results once, even when observer callbacks happened
while the activity was absent.
ymfm's fm_engine_base::output() contains OPL-specific rhythm code that
accesses m_operator[13]/[17], which is out-of-bounds when instantiated
for OPN (OPERATORS=12). The code is unreachable at runtime because
rhythm_enable() returns false for OPN, but newer clang (emscripten) flag
it statically.
If CD audio is not available (no playlist) but CD playback is specified,
MAKO::play() falls back to FM/MIDI.
Also, on Windows, gray out the "CD Audio" menu item if CD audio is not
available.
Rapid register writes could cause audio glitches [1].
This introduces a queue to process one write per audio generation cycle.
This approach is the same as the one used in ymfm's vgmrender.cpp.
[1] https://github.com/aaronsgiles/ymfm/issues/1
This adds minimal command support to enable Gakuen King's music mode:
- P: Set text color
- I: Allow user to select a grid item using mouse/keyboard input
- Y25: Switch text window
- Y118: Set text X coordinate
- Y119: Set text Y coordinate
The meanings of these commands were investigated from the implementation
of Gakuen King's system3.5 port.
This introduces "Streamer Mode" to mosaic specified NSFW images, making
the game suitable for streaming or public viewing. This feature is
enabled via the '-censor <file>' command-line option, which takes a file
containing a list of image numbers to be filtered.
This fixes https://github.com/kichikuou/system3-sdl2/issues/34.
Some PMS in Rance 4.1/4.2 fan English translation have one less row of
pixel data than image height.
When such data is encountered, decoding stops. The image rows decoded
up to that point are transferred to VRAM.
<0x86A2> (U+2500, BOX DRAWINGS LIGHT HORIZONTAL) is used in Funny Bee
and Only You.
Note that these are not part of CP932, so they should not be added to
the unicode table of xsystem35/xsys35c.
This also makes the tables const.