Commit Graph
649 Commits
Author SHA1 Message Date
Nunuhara Cabbage dbd1e54c46 Merge branch 'master' of github.com:nunuhara/xsystem4 2023-03-07 18:21:21 -08:00
kichikuou d4f7ab06cf Add stub for DrawDungeon14.SetRasterScroll
This function is used for the underwater effect in GALZOO. It should be
implemented as a post-processing effect, but in the meantime let's stub
it out to avoid runtime error.
2023-03-06 20:03:03 +09:00
Nunuhara Cabbage 66d8def3f8 Merge pull request #104 from kichikuou/sleep
Add vm_sleep()
2023-02-28 16:29:05 -08:00
kichikuou e53dc6ad0e Add vm_sleep()
The nanosleep() function in mingw-w64 often sleeps for more than the
specified time. This causes a problem in Rance 6 combat scene, where
the damage popup is noticeably slow.

This adds vm_sleep() that calls SDL_Delay() which uses high-resolution
timer on Windows.
2023-02-25 21:57:34 +09:00
kichikuou 90a96eb8bb Use UTF8-aware dirname/basename functions
Command line paths containing non-ASCII characters now work on Windows.
2023-02-25 21:05:53 +09:00
Nunuhara Cabbage 3ff2c33d3c Fix crash due to gap in mixer list
Fix a crash that occurs during startup of Oyako Rankan due to a gap in
the "VolumeValancer" list in AliceStart.ini
2023-02-12 19:49:28 -08:00
Nunuhara Cabbage 2237bb814c Implement various HLL functions for Rance Quest
Most of the functionality of gfx_render_texture (draw method, blend
rate) is moved into sprite_render, since this was the only place using
it.
The draw method and blend rate are now stored in sact_sprite objects
instead of textures.
sact_sprite now has two renderers: the old SACT2 renderer (with blend
rate as the only shader parameter) and the new ChipmunkSpriteEngine
renderer, which supports multiply/add colors and the "surface area"
feature from PartsEngine.

Rance Quest now runs up to the first Flash-related function call
(Flash?!?!).
2023-02-12 15:59:36 -08:00
Nunuhara Cabbage 6b62e1db23 Fix CG loading functions for Rance Quest
Rance Quest uses strings for CG names, but the strings contain numbers
which should be converted to integers for lookup.
2023-02-11 16:36:05 -08:00
kichikuou 91e4478a29 Fix file name encoding issues in movie.c and Toushin3Loader.c 2023-01-16 21:54:55 +09:00
Nunuhara Cabbage 842d712a31 Fix bug in S_MOD
The 3rd argument to the instruction indicates the type of the second
argument. If there are multiple specifiers in the format string, the
first specifier matching the given type is substituted (NOT the first
specifier encountered when processing the format string).
2023-01-10 18:47:03 -08:00
Nunuhara Cabbage 2dbc322db8 Fix text layout bug in SengokuRanceFont
Fix text layout bug when message setting isn't "No Wait".
2023-01-09 17:26:22 -08:00
kichikuou 5649236c7c Allow frames to drop in sact_Effect()
Some effects (e.g. EFFECT_BLUR_CROSSFADE) are slow on low-end Android
devices. This adds frame rate control so that they won't take too long.
2023-01-09 14:50:45 +09:00
Nunuhara Cabbage a55893bf2f debugger: improve print command
Now handles arbitrarily complex member/subscript expressions, with
pretty-printing and a configurable recursion depth.
2023-01-08 17:13:33 -08:00
Nunuhara Cabbage d8f936f1df Implement SystemService.GetGameFolderPath 2023-01-08 11:34:06 -08:00
Nunuhara Cabbage d2539b978e GoatGUIEngine.GetPartsCGName 2023-01-08 11:32:02 -08:00
Nunuhara Cabbage 92bbcb4866 Fix bug in afa_load_archive 2023-01-08 11:30:52 -08:00
Nunuhara Cabbage 96df171157 debugger: clean up help command list
Make the command list printed by the 'help' command easier to read.
2023-01-07 15:28:31 -08:00
Nunuhara Cabbage 9fd0415ec6 debugger: add finish command
Add finish (fin) command which resumes execution until returning from
the current function.
2023-01-07 13:44:08 -08:00
Nunuhara Cabbage 31930c5e97 Use gamedir_path in system.ExistsFile
Fixes an issue where the Sengoku Rance opening movie wouldn't play
if the game was started outside the game directory.
2023-01-07 13:09:49 -08:00
Nunuhara Cabbage def987ad5f debugger: print stack and disassembly side-by-side
This makes the screen position of the disassembly more stable when
stepping through code.
2023-01-07 12:58:09 -08:00
Nunuhara Cabbage a4bb1a815a debugger: show hll function names in disassembly 2023-01-07 10:45:10 -08:00
Nunuhara Cabbage 71f3450037 Only define windows_error_handler on Windows 2023-01-07 10:35:48 -08:00
Nunuhara Cabbage f7c9d9326d debugger: add single-stepping commands
Add 'step' (s) and 'next' (n) commands for single-stepping bytecode.
'step' is the 'step into' type which descends into function calls,
wheras 'next' is the 'step over' type which continues until the next
instruction within the current function.
2023-01-07 09:54:15 -08:00
kichikuou d4d292434c Add error checking for movie format
AliceSoft only uses MPEG-PS, but PlayMovie.dll is included in System4
SDK and can play any format supported by DirectShow. This fixes crash in
movie_load() when given file is not a MPEG-PS.
2023-01-07 18:26:09 +09:00
kichikuou 2f75253080 Add DrawMovie2.{SetInnerVolume,UpdateVolume}
For Rance 02.
2023-01-06 15:21:53 +09:00
kichikuou b0477deca1 Handle events in system.Peek()
Otherwise Sengoku Rance becomes unresponsive during movie playback.
2023-01-06 12:12:10 +09:00
kichikuou de2db1af93 Implement DrawMovie, DrawMovie2 and PlayMovie HLLs
These HLLs play .mpg movie files (later games use .alm file extension,
but the format is the same, i.e. MPEG-PS) that contain MPEG1 video and
MP2 audio streams.

pl_mpeg.h is the PL_MPEG library (https://github.com/phoboslab/pl_mpeg)
imported from commit 5aeef4d07593be1960a0e4c7fe204809cfae30bd.

This adds a few mixer functions (mixer_stream_*) for playing custom
audio streams under the master mixer.
2023-01-06 12:12:07 +09:00
Nunuhara Cabbage b6f9999a56 Merge pull request #96 from kichikuou/repl-on-mbutton
Enter debugger REPL on middle-button click
2023-01-02 16:42:16 -08:00
kichikuou 64a92a2ffa Enter debugger REPL on middle-button click
This is effective only if --debug command line flag is specified.
2023-01-02 21:10:58 +09:00
kichikuou 620fecb244 Windows: Fix read_save_file
This fixes an issue where saved files could not be read on Windows.

On Windows if a file is opened in text mode, ftell() at EOF returns
the file size in bytes, but fread() tries to read the specified number
of characters (after removing carriage returns), resulting in an EOF
error.

To avoid this problem, open save files in binary mode.
2023-01-02 21:00:11 +09:00
Nunuhara Cabbage 75d8a8b69d Improve usage error reporting
Print usage information when there is an error in the command line
arguments. Also, wait for keypress before exiting on Windows so that the
user can read the error message.
2023-01-01 19:28:59 -08:00
Nunuhara Cabbage 5a5954811f Update libsys4 2023-01-01 13:21:00 -08:00
kichikuou 68eff9a122 ReignEngine: Fix out-of-bounds access in calc_motion_frame
Happens when frame range in MonsterInfo.txt is wrong.
2022-12-28 13:18:41 +09:00
kichikuou 1edf95bcde ReignEngine: Fix height detection
This fixes an issue where height detection fails due to gaps in
suspension bridge planks.

If the depth map has no value for the given point, return the average
of 4 neighbors.
2022-12-28 13:18:41 +09:00
kichikuou 6e63b4a5e9 ReignEngine: Do not draw particle effect if current_frame == end_frame 2022-12-28 13:18:41 +09:00
kichikuou 9465ee1c63 ReignEngine: Cache parsed motions
Motions are cached in `struct model`.
2022-12-28 13:18:41 +09:00
kichikuou 10710e9908 ReignEngine: Cache parsed particle effects
Now parsed particle-effect definitions are cached in a hash map in the
plugin object. To make it possible, static part of `struct
particle_effect` and `struct particle_object` are factored out to
`struct pae` and `struct pae_object` respectively.
2022-12-28 13:18:41 +09:00
kichikuou defeb0ba17 ReignEngine: Cache loaded models
When there are multiple instances of a model, now they share a single
model object. Model objects are retained in a hash table until the
plugin is released, which is fine because Toushin Toshi 3 doesn't reuse
a plugin across scenes.
2022-12-28 13:18:41 +09:00
Nunuhara Cabbage 9a8e3c59ec Fix use-after-free in font_freetype.c
Pointers to `struct font_size` objects are cached in `struct text_style`
objects, so the `sizes` array can't be reallocated.

This fixes a crash in Rance 02 when entering battle.
2022-12-27 10:14:14 -08:00
Nunuhara Cabbage f23d713f46 Merge pull request #91 from kichikuou/effect
Implement EFFECT_NOISE_CROSSFADE and EFFECT_SEPIA_NOISE_CROSSFADE
2022-12-27 10:11:54 -08:00
kichikuou 8aafb271f9 Implement EFFECT_NOISE_CROSSFADE and EFFECT_SEPIA_NOISE_CROSSFADE
EFFECT_SEPIA_NOISE_CROSSFADE is frequently used in Toushin Toshi 3.
2022-12-27 21:13:01 +09:00
kichikuou c7cebb9ea9 ReignEngine: Fix out-of-range material index in .POL
Without this, some maps (e.g. map059) and battle backgrounds
(e.g. bg101) in Toushin Toshi 3 are not rendered correctly.
2022-12-24 16:54:41 +09:00
kichikuou 2de5132803 ReignEngine: Support (sprite) mesh attribute
It has the same effect as the (sprite) material attribute.

Also, now sprite objects are rendered in the DRAW_OPAQUE phase.
2022-12-24 16:54:40 +09:00
kichikuou 70b4071350 ReignEngine: Support "shadow darkness" material parameter
It is a value between 0.0 and 1.0, where 0.0 means no shadows are drawn
on the material.
2022-12-24 16:54:40 +09:00
kichikuou eb13ae0cc1 ReignEngine: Fix rendering issue of skinned models without motion
This fixes a bug where skinned instances with no motion loaded were not
drawn.
2022-12-24 16:54:40 +09:00
kichikuou 06b9da800c Implement ReignEngine.SetInstanceDebugDrawShadowVolume
It visualizes the bounding sphere of the instance. Although it is only
called from dead code in Toushin Toshi 3, it's useful for debugging
shadow mapping.
2022-12-24 16:54:37 +09:00
kichikuou fdd0af8dcf ReignEngine: Improve shadow view-frustum calculation
This fixes broken shadow rendering e.g. when Nacht climbs a ladder.

Now update_bones() calculates the instance's bounding sphere which
is the minimum sphere containing the AABB of current bone coordinates.
This corresponds to the sphere that is displayed when calling
SetInstanceDebugDrawShadowVolume on the original ReignEngine.dll.
2022-12-24 16:25:05 +09:00
Nunuhara Cabbage cfaed35f23 Merge pull request #89 from kichikuou/half-width
font_freetype: Fix display width of half-width kana and some symbols
2022-12-21 18:52:05 -08:00
kichikuou 1bcf026f25 font_freetype: Fix display width of half-width kana and some symbols
Halfwidth katakana are now displayed in half-width.

This also fixes an issue where some symbols with codepoint <256 (e.g.
MULTIPLICATION SIGN) were considered half-width, while the bundled font
has full width glyphs for those codepoints.
2022-12-18 14:57:04 +09:00
kichikuou acb814021c Add stubs for DrawMovie library
Used in Toushin Toshi 3. The interface is the same as DrawMovie2.
2022-12-18 10:27:34 +09:00