Commit Graph
276 Commits
Author SHA1 Message Date
kichikuou 6bd5baf7c2 Implement game specific commands for Gakuen KING 2026-08-24 16:29:09 +09:00
kichikuou 64f8e7bf9f Extract NACT_GakuenKing into a separate file 2026-08-22 08:46:47 +09:00
kichikuou 0d4884f6ba Fix key release masks for A, Y1 (Sys1) and Y253 (Sys2)
These commands should wait for release of all direction keys + RETURN,
instead of only RIGHT and RETURN.
2026-08-21 07:42:37 +09:00
kichikuou 64e99b9235 Add headless scenario tests
Run a compiled System 1/2/3 scenarios with SDL's dummy video and audio
drivers, and report failures through the text hook and exit status.
2026-08-08 08:16:38 +09:00
kichikuou 6f5933adaf Replace SDL_mixer with dr_mp3/stb_vorbis + SDL audio
- 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.
2026-08-03 17:09:59 +09:00
kichikuou 21d2e5fb94 show_quit_dialog: Default to quitting if SDL_ShowMessageBox fails 2026-07-31 09:33:50 +09:00
RottenBlock 78c0af9e19 updated R4.x English CRC32s, corrected comment version #s 2026-07-17 22:59:06 -04:00
kichikuou 8212548376 Use std::string_view in Encoding and AGS::draw_text() 2026-05-02 11:35:03 +09:00
kichikuou 86c0ef4841 Ignore zero palette entry in Gakuen Senki
This prevents unused palette portions of loaded CG from cluttering other
parts of the screen.
2026-02-08 15:10:27 +09:00
kichikuou 0187d0f216 System3: Implement CD availability check
The `Y14,2:` command (`Y20,2:` in Gakuen KING) now returns zero if CD
audio is not available (i.e. playlist is not loaded).
2025-11-28 10:41:20 +09:00
kichikuou ad73ed9271 Refactor key release handling in NACT commands 2025-11-27 08:49:51 +09:00
kichikuou 257dc9c415 Y240,1 should still convert hankaku Japanese characters to zenkaku
This fixes Shade's comments in the music mode of Gakuen King.
2025-11-25 15:46:00 +09:00
kichikuou cba31e264a Implement commands for Gakuen King's music mode
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.
2025-11-25 15:46:00 +09:00
kichikuou a051baf5af Refactor CG constructor 2025-11-11 13:08:47 +09:00
kichikuou 0c68777226 Refactor AGS::Window struct 2025-11-11 12:38:44 +09:00
kichikuou 8f36143ce5 Refactor CG destination handling 2025-11-11 09:11:44 +09:00
kichikuou 13dbdfc4c1 Fix non-square pixels for Gakuen Senki
This was a regression by commit bf97425.
2025-11-09 16:43:54 +09:00
kichikuou 8b813e3631 Add Streamer Mode with -censor option
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.
2025-11-09 12:08:25 +09:00
kichikuou 49cf5d55ed Refactor CG loaders
Now they return a newly introduced CG object instead of writing directly
to VRAM. The palette is still written directly in the load functions.
2025-11-09 10:41:00 +09:00
kichikuou 51ab709da7 Advance messages by scrolling mouse wheel down
Now the 'A' command accepts mouse wheel down events in addition to
keyboard and mouse buttons.
2025-11-04 10:17:30 +09:00
kichikuou 098c19bf1a Enable Y10 command (ignore palette for specified CG) in System2 2025-11-03 11:30:39 +09:00
kichikuou 58d0782781 Fix off-by-one bug in box initialization for sdps and prog_fd
This was a regerssion introduced by commit ff00165.
2025-11-03 08:34:26 +09:00
kichikuou 6de68d7337 Windows: Add NOMINMAX compile definition 2025-06-20 08:21:35 +09:00
kichikuou febee3f5a3 Refactor savefile path handling 2025-06-06 16:13:02 +09:00
kichikuou bce04adf82 Do not include SDL.h from common.h 2025-06-06 15:04:35 +09:00
kichikuou 7f527da74f nact: Change tvar from char array to std::string 2025-06-06 14:51:38 +09:00
kichikuou 6e959be871 Fix MSVS build 2025-06-06 09:41:11 +09:00
kichikuou e1287e5b86 load_pms: Abort decoding when pixel data is insufficient
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.
2025-06-06 09:31:03 +09:00
kichikuou 073da3464b AGS: Refactor CG loading functions to take std::vector<uint8_t>& 2025-06-06 07:32:56 +09:00
kichikuou d5de8b18b8 Enable Y 240 (draw_hankaku) in System2 2025-04-24 21:00:38 +09:00
kichikuou c8ef298c56 Add quit confirmation dialog
On Android, the back button opens the dialog.
2025-03-06 08:54:57 +09:00
kichikuou 9733caf10f debugger: Update screen before entering REPL 2025-03-05 16:01:56 +09:00
kichikuou ae5592a35b pms: Fix palette mask handling
The PMS palette mask is 16 bits, not 8 bits. This fixes a color issue in
Rance 4.1.
2025-03-05 15:13:08 +09:00
kichikuou d97d49dbe7 Fix Y103 command (play_pcm)
* The parameter is the number of times to loop, e.g. Y103,2: will play
  the sound twice. This still does not work on Windows because
  PlaySound() does not support specifying the loop count.
* Get AMSE data size from its header. This fixes audio glitch at the end
  of sounds.
2025-03-04 15:59:22 +09:00
kichikuou c0d8566dbd AGS: Refresh screen when palette is changed by CG loading 2025-02-22 22:26:18 +09:00
kichikuou 446d34132a AGS: Defer texture update until update_screen() 2025-02-22 15:24:27 +09:00
kichikuou 3f55a90c64 AGS: Remove intermediate screen buffer
Pixels are now copied directly from the 8-bit buffer to the texture.
2025-02-10 07:38:45 +09:00
kichikuou bf9742533f AGS: Move scroll handling to update_screen()
This fixes an out-of-bounds access bug when scroll > 400.
2025-02-09 14:42:52 +09:00
kichikuou b1dfc57e9b AGS: Refactor palette loading logic 2025-02-09 11:06:37 +09:00
kichikuou c205806d7b Fix header include paths 2025-02-08 12:55:14 +09:00
kichikuou aae15c34e1 AGS: Update draw_push() to use draw_gaiji() 2025-01-19 11:09:00 +09:00
kichikuou 43d1af3a44 AGS: Refactor text layout logic 2025-01-19 10:41:14 +09:00
kichikuou ff00165f47 AGS: Refactor Box struct 2025-01-18 15:37:15 +09:00
kichikuou fad34f7bb9 Refactor text / menu window code 2025-01-18 15:37:13 +09:00
kichikuou 32a510d543 Add AGS::load() and AGS::save() 2025-01-18 14:41:14 +09:00
kichikuou 11a366005f AGS: Refactor VRAM accessors 2025-01-17 15:13:32 +09:00
kichikuou 1673a5eb3c AGS: Refactor palette management to use SDL_Palette 2025-01-17 13:47:10 +09:00
kichikuou 12e7804d9f AGS: Use SDL drawing functions 2025-01-17 10:58:50 +09:00
kichikuou ca2ca7276f AGS: Use SDL_Surface to save / restore screen 2025-01-17 10:58:50 +09:00
kichikuou 33418f8cb5 AGS: Make VRAM 8 bits per pixel
Before this, the virtual VRAM was 32 bits per pixel, with each pixel
holding an 8-bit index color or 0x80RRGGBB. The latter was for Ayumi-
chan Monogatari Jisshaban, which has been unsupported since system3-sdl2
was forked from System3 for Win32.

This change removes the 0x80RRGGBB format and makes the virtual VRAM 8
bits per pixel.
2025-01-17 10:58:46 +09:00