Commit Graph
1220 Commits
Author SHA1 Message Date
kichikuou 7ff5ec89e7 Implement effect number 60
Used in Rance Quest.
2025-03-23 08:22:16 +09:00
Nunuhara Cabbage 33403cbd3d Merge pull request #220 from kichikuou/circular-log-buffer
AnteaterADVEngine: Limit log size to 1000 pages
2025-03-17 20:43:50 -07:00
kichikuou 40fe2068e7 AnteaterADVEngine: Limit log size to 1000 pages
If the log exceeds 1000 pages, the oldest pages are discarded. This
behavior is in line with AnteaterADVEngine.dll of Daiteikoku.

This prevents the log buffer from growing indefinitely, slowing down
saves and loads.
2025-03-17 21:06:10 +09:00
Nunuhara Cabbage 40914a7cef Merge pull request #219 from kichikuou/hoken
StoatSpriteEngine: multisprite_update() should not use sprite_set_show()
2025-03-15 07:18:04 -07:00
kichikuou 0946900e02 game_compatibility: Mark "Boku Dake no Hokenshitsu" as supported 2025-03-15 08:19:48 +09:00
kichikuou 56d9b607b2 StoatSpriteEngine: multisprite_update() should not use sprite_set_show()
sprite_set_show() is also used by MultiSprite_SetAllShowMessageFrame,
causing interference.

Now multisprite_update() clears the sprite's texture when there's no CG,
rather than hiding it.

Fixes #218.
2025-03-15 08:15:02 +09:00
Nunuhara Cabbage 155c801804 Update libsys4 2025-03-09 17:31:16 -07:00
Nunuhara Cabbage 4942e41fb8 Merge pull request #217 from kichikuou/drawgraph
Daiteikoku: Implement DrawGraph.DrawDeformedSpriteBilinear
2025-03-03 07:53:39 -08:00
kichikuou ac8a37f67b Daiteikoku: Implement DrawGraph.DrawDeformedSpriteBilinear
This function draws a quad with arbitrary vertex and texture
coordinates, but since it is actually only used to copy a rectangular
area, this can be implemented using gfx_copy_stretch().

This also adds HLL_TODO_EXPORTs for the DrawGraph functions defined but
unused in Daiteikoku.
2025-02-26 13:28:10 +09:00
Nunuhara Cabbage 331563a165 Merge pull request #216 from kichikuou/daiteikoku-text
Fix text rendering issues in Daiteikoku
2025-02-24 15:43:46 -08:00
Nunuhara Cabbage c30510e688 Merge pull request #215 from kichikuou/vsync
SystemService: Persist "wait vsync" setting to disk
2025-02-24 15:43:23 -08:00
kichikuou 81c0c494b0 parts: Draw per-character glyphs directly to the screen
Before this, character glyphs were copied to an intermediate texture
(text->common.texture) using gfx_copy_with_alpha_map(). In Daiteikoku,
some text sprites have a character spacing of -4, causing the copy to
cut off the right edge of the previously drawn character.

This fixes the problem by having parts_render_text() blend per-glyph
textures directly onto the target without using an intermediate texture.
2025-02-24 10:07:48 +09:00
kichikuou e9bec3c2fe Use text_style_width() to calculate CharSprite width
So that edge width is taken into account.
2025-02-24 10:07:47 +09:00
kichikuou 298e9bddf5 Fix text rendering issue on the save screen of Daiteikoku
This fixes the same bug that commit c4e17c6 fixed, for sprites created
by ChipmunkSpriteEngine.SP_SetTextSprite. This uses text_style_width()
instead of gfx_size_char() so that edge width is taken into account.
2025-02-24 10:07:47 +09:00
kichikuou bf3c4feb9d SystemService: Persist "wait vsync" setting to disk
This setting has a significant impact on system load, so users may want
xsystem4 to remember their preference.

This implementation uses a JSON format, while the AliceSoft's
implementation saves it to a binary file (WindowSetting.sav).

This only records the wait_vsync setting, since the other fields in
window_settings are currently no-op.
2025-02-23 11:02:27 +09:00
Nunuhara Cabbage 6a36fc8f53 Merge pull request #214 from kichikuou/DrawEffect
Implement DrawEffect HLL
2024-12-29 20:36:06 -08:00
Nunuhara Cabbage 45876a9921 Merge pull request #213 from kichikuou/rsm
Use RSM save format by default
2024-12-29 20:35:30 -08:00
kichikuou 2461c1e52d Implement DrawEffect HLL
Used in Ultra Mahou Shoujo Manana vol.5.

Although the HLL interface allows partial screen effects, it is actually
used only for full screen effects.
2024-12-29 14:06:42 +09:00
kichikuou 41c7830558 Use RSM save format by default
Before this, the resume save format defaulted to JSON, which could not
be loaded by System40.exe and save/load was sometimes too slow even on
desktop environments.

In xsystem4-android the RSM format has been the default for 9 months and
no problems have been reported. Let's make this the default on all
platforms.
2024-12-28 18:23:14 +09:00
Nunuhara Cabbage 009bafae40 Merge pull request #212 from kichikuou/debugger_dap
debugger_dap: minor fixes
2024-11-18 20:47:42 -08:00
Nunuhara Cabbage e891e74bcf Merge pull request #211 from kichikuou/android-fix
Android: Update SDL2 to 2.30.9
2024-11-18 20:47:19 -08:00
kichikuou 5576f14a0f debugger_dap: minor fixes
* Add `allThreadsStopped` to Stopped event to indicate that stacktrace
  can be accessed
* StackTraceResponse should return most recent call first
* Fix instruction pointers of calling frames

The first two will improve compatibility with DAP clients other than
xsys4dbg.
2024-11-17 09:42:25 +09:00
kichikuou 90075f2e25 Android: Update SDL2 to 2.30.9
This fixes an audio issue on Android 15.
https://github.com/libsdl-org/SDL/issues/11376
2024-11-17 08:34:28 +09:00
Nunuhara Cabbage c0cc3f729b Merge pull request #210 from kichikuou/debugger
debugger_cmd: Add support for source-level debugging
2024-11-10 07:32:29 -08:00
kichikuou 4d303b291d debugger_cmd: Add support for source-level debugging
This adds source-level debugging capabilities to the command-line
debugger, utilizing debug information generated by sys4dc. The debug
information format is documented at:
https://github.com/kichikuou/sys4dc/blob/master/docs/debug_info.md

The location of the debug information file can be specified with the
`--debug-info` command-line flag. If not specified, xsystem4 will
attempt to load it from `gamedir_path("src/debug_info.json")`.

When debug information is available, a breakpoint can be set at a
specific line in a file using `breakpoint <file> <line>`. Also, `step`
and `next` commands advance execution to the next source line (this is
naively implemented by repeating instruction-level stepping).
2024-11-09 13:10:13 +09:00
Nunuhara Cabbage e73abc3cd6 Merge pull request #208 from kichikuou/draw-plugins
Implement DrawSnow, DrawRain, and DrawRipple HLLs
alpha-5.1
2024-11-02 15:28:02 -07:00
kichikuou 579c158477 Implement DrawRipple HLL
Used in Majo no Shokuzai.
2024-11-02 07:55:30 +09:00
kichikuou 842bac92f3 Implement DrawRain HLL
Used in Tsuma Shibori.
2024-11-01 10:59:06 +09:00
kichikuou dc8a9379d0 Implement DrawSnow HLL
Used in Tsuma Shibori, and some indie System 4 games.

This HLL is a draw plugin that uses SACT2's "custom sprite" mechanism.
Custom sprites do not have a texture. Instead, the plugin's render()
callback draws them directly to the main surface.
2024-11-01 08:53:58 +09:00
Nunuhara Cabbage f8f02a1c99 Merge pull request #207 from kichikuou/framebuffer
Fix "incomplete framebuffer" error in gfx_init_texture_rgb(a)
2024-10-27 20:38:55 -07:00
kichikuou d7d9bb70f2 Fix "incomplete framebuffer" error in gfx_init_texture_rgb(a)
This fixes "incomplete framebuffer" error in Haru Urare right after the
game start, due to gfx_set_framebuffer() being called with a zero width
texture. It was a regression introduced by commit 04d5237, which started
using gfx_set_framebuffer() in gfx_init_texture_rgba().

Ideally, we should avoid creating zero-area textures in upper layers
(commit 3f18b18 was an attempt to do so), but this is difficult because
there are many places that create textures. Let's just make sure that we
don't generate unrecoverable errors.
2024-10-28 11:28:08 +09:00
Nunuhara Cabbage dcdb82e2a8 Merge pull request #205 from kichikuou/alpha
TapirEngine: Fix alpha test / alpha blend conditions
2024-10-25 19:00:27 -07:00
kichikuou f1a2904262 TapirEngine: Fix alpha test / alpha blend conditions
In ReignEngine, alpha blending is the default. Alpha testing is used if
the mesh/material has the (sprite) attribute.

In TapirEngine, alpha testing is the default. Alpha blending is used if
the mesh/material has the (alpha) attribute.
2024-10-22 10:17:07 +09:00
kichikuou ecd71896b3 3d: Store 3D engine version in a global variable
So that we don't have to pass it around everywhere.
2024-10-22 10:16:51 +09:00
Nunuhara Cabbage d7b7879747 Merge pull request #204 from kichikuou/3d
3d: Various improvements for Rance Quest
2024-10-20 09:08:45 -07:00
kichikuou 1cbf6125ce 3d: Implement vertex alpha
POL v2 models can have an alpha mod per vertex.
2024-10-20 08:25:42 +09:00
kichikuou 9b03741288 3d: Pack bone transform matrices
Before this, the BoneTransforms uniform block consumed
(4 * 4 * sizeof(float) * MAX_BONES) = 19712 bytes, which exceeds 16384,
the minimum possible value of GL_MAX_UNIFORM_BLOCK_SIZE in OpenGL ES
3.2.

Since the bone matrices are affine, we can drop the 4th rows and pack
them into a mat4x3 array. Now the BoneTransforms block is 14784 bytes
and it should work with all OpenGL ES 3.2 implementations.
2024-10-20 08:25:39 +09:00
kichikuou 4e04db0045 3d: Implement MESH_BOTH attribute
It disables back-face culling.
2024-10-20 08:16:27 +09:00
kichikuou abd3a276a3 TapirEngine: Implement UVScroll mesh attribute 2024-10-20 08:16:24 +09:00
Nunuhara Cabbage 9ca3d3e9c6 Merge pull request #203 from kichikuou/lighting
TapirEngine: Simplify lighting
2024-10-18 20:15:02 -07:00
kichikuou d8ad22b638 TapirEngine: Simplify lighting
In TapirEngine, the following lighting features are not used:

- global ambient
- directional lights
- specular lights
- rim lights
- fog

(The setters / getters for these parameters are still there, but they
don't affect rendering.)

This implementation disables those features in GLSL using #ifdefs. The C
code that sets up the lighting remains almost unchanged --
glGetUniformLocation() will return -1 if the specified uniform variable
name is not found, and glUniform*(-1, ...) will be no-op.
2024-10-19 08:43:31 +09:00
Nunuhara Cabbage 3f02a22a8d Merge pull request #202 from kichikuou/fps
gfx: Add frame rate counter
2024-10-17 06:30:07 -07:00
kichikuou bff491bbe9 gfx: Add frame rate counter
It is exposed through StoatSpriteEngine functions, and is normally only
visible when the game's debug mode is enabled. It's very useful for
checking graphics performance.
2024-10-17 09:20:26 +09:00
Nunuhara Cabbage f566539e4f Merge pull request #201 from kichikuou/outline
TapirEngine: Outline rendering
2024-10-13 11:28:53 -07:00
kichikuou c04aa8a844 TapirEngine: Outline rendering
This implements outline (called "edge" in the game config) rendering of
3D objects, using the "inverted hull" method.
2024-10-13 07:18:49 +09:00
kichikuou 87b1e2abe2 Make variable names consistent between reign.v.glsl and reign_shadow.v.glsl
Pure refactoring, no behavior changes.
2024-10-13 07:18:49 +09:00
kichikuou a0a68a022c TapirEngine: Load .opr file
A .pol file may have a corresponding .opr file, which is a text file
containing parameters for the meshes.
2024-10-13 07:18:49 +09:00
Nunuhara Cabbage 3fb2dc3650 Merge pull request #200 from kichikuou/bones
3d: Increase MAX_BONES to 308
2024-10-11 21:00:49 -07:00
kichikuou c1ce2c88c6 3d: Increase MAX_BONES to 308
This is the maximum number of bones in a model for Rance Quest
(pasuteru_full.POL).

Now bone transform matrices are stored in a uniform buffer object,
because its size exceeds GL_MAX_VERTEX_UNIFORM_COMPONENTS in iOS Safari.
2024-10-12 07:35:51 +09:00
Nunuhara Cabbage 222d2700a9 Merge pull request #199 from kichikuou/CGManager
CGManager.LoadArchive() should open archive in the game directory
2024-10-09 06:24:33 -07:00