Commit Graph
1265 Commits
Author SHA1 Message Date
kichikuou 9ccc4ab0c7 parts: Implement PE_AddWholeMotionVibrationSize
It vibrates the whole screen. To implement this, this introduces a
global motion list and parts_set_global_pos(), which sets the position
of the root of the parts tree.
2025-06-10 09:35:11 +09:00
Nunuhara Cabbage 13a00c131d Merge pull request #240 from kichikuou/3d
Rance Quest: Fix 3D rendering issues
2025-06-07 06:45:10 -07:00
kichikuou 929a2dd3e7 3d: Draw transparent objects before outlines
Otherwise, the background of transparent objects with outlines (e.g.
hitotsurei01.POL) are filled with the outline color.
2025-06-04 10:23:03 +09:00
kichikuou b5b92bc367 3d: Add ALPHA_MAP_TEST mode
It does alpha testing using alpha map texture.
2025-06-02 07:25:38 +09:00
kichikuou e5fadf2b73 TapirEngine: Correctly implement MeshPart in .opr parser
`MeshPart = "str"` sets the attribute to all meshes whose name contains
`str`.
2025-06-02 07:25:38 +09:00
kichikuou 2713290ac9 TapirEngine: Add support for BlendMode = Add opr attribute 2025-06-02 07:25:37 +09:00
Nunuhara Cabbage 3bfb92e1fb Merge pull request #239 from kichikuou/pathfinding
TapirEngine: Implement pathfinding functions
2025-06-01 09:01:05 -07:00
kichikuou 378450c625 Implement TapirEngine.OptimizeInstancePathLine
It simplifies the path calculated by TapirEngine.FindInstancePath() by
removing unnecessary points.
2025-05-30 07:43:15 +09:00
kichikuou 919b86916c TapirEngine: Implement pathfinding functions
TapirEngine.FindInstancePath() takes a starting point and an end point
and executes the A* algorithm on the collision mesh. The resulting path
can be obtained with TapirEngine.GetInstancePathLine().
2025-05-30 07:43:11 +09:00
kichikuou 6fbd147c54 Implement TapirEngine.CalcPathFinderIntersectEyeVec
It returns the position on the collision mesh corresponding to the mouse
coordinates.
2025-05-26 10:06:13 +09:00
Nunuhara Cabbage bcae91003a Merge pull request #238 from kichikuou/mg-rance7-text
Fix overlapping text issue in MangaGamer Sengoku Rance
2025-05-24 10:50:27 -07:00
kichikuou 7e584c5fd2 Fix overlapping text issue in MangaGamer Sengoku Rance
This fixes https://github.com/kichikuou/xsystem4-android/issues/12.

This game uses DrawGraph.FillAMap() to erase text drawn on the sprite,
but our SengokuRanceFont implementation draws text on sp->text.texture.

For a detailed analysis of this issue and other possible solutions, see
https://github.com/nunuhara/xsystem4/issues/237.
2025-05-24 09:10:25 +09:00
Nunuhara Cabbage b0c7aad6c3 Merge pull request #236 from kichikuou/world_transform
gfx: Remove world_transform from struct texture
2025-05-21 06:07:34 -07:00
Nunuhara Cabbage 5d0819a115 Merge pull request #235 from kichikuou/rq
Small changes for Rance Quest
2025-05-21 06:06:24 -07:00
kichikuou 724bbcdfdd 3d: Disable light mapping for meshes without light_uv 2025-05-21 07:44:15 +09:00
kichikuou dc0daf3329 gfx: Remove world_transform from struct texture
Pure refactoring, no behavioral changes.
2025-05-18 21:15:03 +09:00
kichikuou 5d271deec0 ChipmunkSpriteEngine: Remove duplicated HLL_EXPORT entries 2025-05-18 11:34:08 +09:00
kichikuou 2ede7e6bb1 StoatSpriteEngine: Clear cached font_size struct in SP_SetTextSpriteType
This fixes a bug where the wrong font was used on the Rance Quest status
screen.

Commit 6c2a55c reset `font_size` on size changes, but the same is needed
for face changes.
2025-05-18 11:23:28 +09:00
kichikuou e6d069b757 SystemService.GetGameFolderPath should return SJIS string 2025-05-18 11:23:27 +09:00
kichikuou d6abcc2f92 Plumb GoatGUIEngine.AddWholeMotionVibrationSize 2025-05-18 11:23:27 +09:00
kichikuou de0646e430 Implement ChipmunkSpriteEngine.SP_{Suspend,Resume,IsSuspend}
Their exact meaning is unknown; currently it is just a read/write
boolean flag.
2025-05-18 11:23:27 +09:00
Nunuhara Cabbage c04fd2280d Merge pull request #233 from kichikuou/sprite-transform
Rance Quest: Implement ChipmunkSpriteEngine.SP_SetSpriteTransform*
2025-05-17 18:13:35 -07:00
kichikuou 71c58e85ae LIST_REMOVE regardless of whether free() is defined 2025-05-18 07:27:32 +09:00
kichikuou 61650308b7 Implement ChipmunkSpriteEngine.SP_SetSpriteTransform*
Used for the treasure chest opening effect in Rance Quest.

Implemented using draw_plugin. The render() method of draw_plugin is no
longer dedicated to custom sprites, but can be used for any sprites to
override the default sprite rendering function.
2025-05-17 14:28:45 +09:00
kichikuou bb26326929 draw_plugin: Add free() method
It is called when the plugin is unbound from a sprite, or when the
sprite to which the plugin is bound is released.

This prevents memory leaks when sprites are destroyed without the plugin
being released, and simplifies lifetime management of the DrawDungeon
plugin.
2025-05-16 09:13:10 +09:00
kichikuou f50c9f6d77 gfx: Add gfx_render_quadrilateral()
It draws a quadrilateral with arbitrary vertex and texture coordinates.

This is used to properly implement DrawGraph.DrawDeformedSpriteBilinear,
and will be used to implement ChipmunkSpriteEngine.
SP_SetSpriteTransformPos in a subsequent patch.
2025-05-16 09:13:06 +09:00
Nunuhara Cabbage ea081e0eb7 Merge pull request #231 from kichikuou/debugger-dap
debugger_dap: Source-level debugging
2025-05-12 17:50:08 -07:00
kichikuou e8ecad598a debugger_dap: Support SteppingGranularity
Debuggers that operate at the instruction level can execute instruction-
level step even when xsystem4 has loaded debug information, by adding
`granularity: "instruction"` to the step request.
2025-05-10 16:17:54 +09:00
kichikuou cb551e8f06 debugger_dap: Source-level debugging
- Add support for setBreakpoints request
- Add source locations to stackTrace response
- Source-level stepIn/stepOut/next executions

All of these only work if debug information is available. Otherwise they
work at the instruction level as before.
2025-05-10 15:31:04 +09:00
Nunuhara Cabbage 002bca4e24 Merge pull request #230 from kichikuou/a_sort
A_SORT, A_SORT_MEM: Use stable sorting
2025-05-09 22:56:33 -07:00
kichikuou 0bbd9171b5 A_SORT, A_SORT_MEM: Use stable sorting
This fixes the weird ordering of the quest list in Rance Quest.
2025-05-04 12:44:27 +09:00
Nunuhara Cabbage 7dfc9926be Merge pull request #229 from kichikuou/z-tie-break
SACTDX/Stoat/Chipmunk: render sprites in correct order for same Z
2025-05-03 13:04:09 -07:00
kichikuou 1dd10ecc45 SACTDX/Stoat/Chipmunk: render sprites in correct order for same Z
In SACT2, if two sprites have the same Z value, they are rendered in
increasing order of their sprite numbers. This behavior is documented in
the SDK manual.

However, in later versions of the sprite engine (SACTDX,
StoatSpriteEngine, ChipmunkSpriteEngine), sprites are drawn in the order
they were created.

This fixes an issue in Rance Quest Magnum which relies on this behavior.
2025-05-03 11:13:03 +09:00
Nunuhara Cabbage ba11900350 Merge pull request #228 from kichikuou/assets
Use case-insensitive match for asset file names
2025-04-29 17:33:53 -07:00
kichikuou 508839ed4c Use case-insensitive match for asset file names
This fixes #227.

Rance 1 Digest Edition includes `Rance1.ain` and `RANCE1BA.ald`.
2025-04-28 16:47:47 +09:00
Nunuhara Cabbage 55f826db36 Merge pull request #225 from kichikuou/trial
SystemService: Add two functions
2025-04-13 07:11:09 -07:00
kichikuou 882354c692 SystemService: Add two functions
Used in the trial versions of Rance 01 and Dorapeko.
2025-04-12 13:25:13 +09:00
Nunuhara Cabbage 071d7d2137 Merge pull request #224 from kichikuou/cmake
cmake: Use find_package() for zlib, SDL and freetype
2025-04-08 19:16:01 -07:00
kichikuou eddac54fa0 cmake: Use find_package() for zlib, SDL and freetype
It is the user's responsibility to ensure that these are found.
2025-04-07 13:20:42 +09:00
Nunuhara Cabbage 2e1059cbac Merge pull request #222 from kichikuou/daiteikoku
Daiteikoku support
2025-04-01 18:12:57 -07:00
kichikuou f9177b89b1 game_compatibility.md: Mark Daiteikoku as supported 2025-04-01 14:18:44 +09:00
kichikuou 7bae2cdf8a DrawGraph.CopyRotZoom2Bilinear should copy src alpha 2025-04-01 11:53:25 +09:00
kichikuou 769bdca725 Implement DrawGraph.CopyReverseLRWithAMap
Used in Daiteikoku.
2025-04-01 11:47:21 +09:00
kichikuou 6517303e2a Implement FileOperation.{ExistFile,GetFileSize}
This unblocks the "User Admiral" feature of Daiteikoku.
2025-04-01 10:41:56 +09:00
Nunuhara Cabbage 0e388c74c0 Merge pull request #221 from kichikuou/effect60
Implement effect number 60
2025-03-22 23:46:02 -07:00
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