Commit Graph
33 Commits
Author SHA1 Message Date
kichikuou 9a76d472db Implement StoatSpriteEngine.SP_SetDashTextSprite
This implementation creates a temporary "glyph" texture and draws it to
the sprite using gfx_draw_glyph().
2024-09-21 10:35:42 +09:00
kichikuou 49b85f885d StoatSpriteEngine: Make SP_GetMaxZ consider multisprites
This fixes a problem in Vanish! where the opening movie was hidden
behind other sprites.
2024-09-20 20:39:20 +09:00
kichikuou b155b4b79f Add a parameter to gfx_draw_glyph() for controlling blending behavior
This adds a new parameter `blend` to `gfx_draw_glyph()`. When `blend` is
true, the function performs normal alpha blending (same as
`gfx_draw_glyph_to_pmap()`).

If `blend` is false, the resulting pixel color will be the text color
and the alpha value will be copied from the glyph texture. However, if
the alpha value is less than 0.01, the pixel will not be written.

If you are drawing on a transparent texture (which will later be blended
into another texture), `blend` should be false. If you are drawing on top
of an image, `blend` should be true.

`gfx_draw_glyph()` used to fill transparent pixels with text color, but
this step is no longer needed and has been removed.
2024-06-15 14:34:58 +09:00
kichikuou 6c2a55c67a StoatSpriteEngine: Clear cached font_size struct in SP_SetTextSpriteSize
This fixes text layout issue in Daiteikoku and Rance Quest.
2023-07-02 10:11:44 +09:00
Nunuhara Cabbage f7cf2264fa Fix multiple issues with resetting HLLs
Clear PartsEngine/SACT2/CharSpriteManager/audio state when resetting the
VM.

Fixes #113
2023-04-14 16:00:40 -07: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 9b83a6d09d Refactor text rendering code
.fnl fonts can now be used outside of SengokuRanceFont, and
SengokuRanceFont now uses the same text layout and caching code as
SACT2, etc.
2022-05-14 23:12:36 -07:00
Nunuhara Cabbage 6080af3621 Implement Sound_GetGroupNumFromDataNum
Part of StoatSpriteEngine and KiwiSoundEngine.

This fixes an issue with per-channel volume settings not working
correctly in Haruurare (and presumably other games).
2022-05-04 20:30:03 -07:00
Nunuhara Cabbage b45e8e73dc Fix replaying animation bug in StoatSpriteEngine
Fix a bug where animations would replay after calling
StoatSpriteEngine.MultiSprite_EndAllMove (e.g. the start of battle
animation in Rance 02 replaying after every attack).
2022-04-06 17:55:28 -07:00
Nunuhara Cabbage 8a131d416b Add 'screen' draw method to StoatSpriteEngine
This fixes an issue in Rance 02 where Sill's fire arrow attack had a
black background (reported in #44).
2022-04-05 16:55:47 -07:00
Nunuhara Cabbage 5713742a99 Implement MultiSprite_Encode/MultiSprite_Decode 2022-04-03 13:41:34 -07:00
kichikuou ba1dcd6e21 Fix StoatSpriteEngine.SP_SetDrawMethod
The method parameter of this function has a different meaning from that
of SACT2.SP_SetDrawMethod.

I've only checked it in Widenyo, but it seems 0 and 1 are valid values
and 1 is additive blending.
2022-03-25 10:49:25 +09:00
kichikuou 2707bc9a7e Implement MapLoader HLL
For Widenyo.

Now sprite_set_cg() takes a struct cg, so that CG can be loaded from
custom sources such as .map file.
2022-03-25 10:29:30 +09:00
Nunuhara Cabbage 51d21612d2 Implement some SystemService.dll functions
For Rance 01.
2021-10-26 11:45:50 -07:00
Nunuhara Cabbage 96356094d9 Get loop info and volume from .bgi file
Music should now correctly loop in games that use .ogg audio.
2021-10-01 21:14:25 -07:00
Nunuhara Cabbage a4e642783b Implement ChipmunkSpriteEngine.SP_GetFontWidth
Used in Shaman's Sanctuary.
2021-05-24 11:09:49 -07:00
kichikuou ea513ca727 Implement SACT2.SaveCG
Used in Rance VI.
2021-05-22 17:07:14 +09:00
Nunuhara Cabbage f25e26ecf4 Refactor archive management code
Implement a new interface for managing archives. This is mainly to
support loading afa archives alongside ald archives.

Also included here is some code for creating an index for afa CG
archives (the numbers used to reference CGs in afa archives correspond
to the file name, not the position in the archive).
2021-05-16 08:06:40 -07:00
Nunuhara Cabbage 92b81f21ee Add stubs for ChipmunkSpriteEngine
Used in Shaman's Sanctuary. Mostly identical to StoatSpriteEngine, but
with a few additions and some removed functions (notably, the
MultiSprite functions were removed).
2021-05-15 18:55:24 -07:00
Nunuhara Cabbage d393647267 Implement StoatSpriteEngine.SYSTEM_* functions 2021-05-13 20:19:53 -07:00
Nunuhara Cabbage b3783178f4 Implement MultiSprite_SetOriginPosMode
Used in Rance 02.
2021-05-12 22:02:48 -07:00
Nunuhara Cabbage 2a9e7a417b Implement CharSpriteMangager_{Rebuild,Save,Load} 2021-05-12 19:35:53 -07:00
Nunuhara Cabbage dffbd3125c Fix StoatSpriteEngine.ADVLogList_GetADVLogVoice
This function has a different interface than the AnteaterADVEngine
version.
2021-05-11 19:32:59 -07:00
Nunuhara Cabbage e74fc33cf0 Add stubs for miscellaneous HLL functions
Used in Haru Urare.
2021-05-09 20:55:37 -07:00
Nunuhara Cabbage 5a28c73492 Implement MultiSprite text functions
Implement StoatSpriteEngine.MultiSprite_SetText and related functions.
2021-05-09 12:14:54 -07:00
Nunuhara Cabbage 49458585d6 Implement ADVSceneKeeper functions
This is a serialization interface for a particular struct type. I've
implemented it somewhat generically, only checking that the name of the
struct matches the expected type. The actual structure of the objects
passed in is not checked, and in fact this structure differs between
games.

The serialized data produced by ADVSceneKeeper.Save should be identical
to what's produced by AnteaterADVEngine.dll from Shaman's Sanctuary.
2021-05-08 10:52:47 -07:00
Nunuhara Cabbage 28ca3d01e2 Implement StoatSpriteEngine.CharSprite functions
With the exception of the Rebuild, Save and Load functions.

Used in 僕だけの保健室
2021-05-06 20:58:10 -07:00
Nunuhara Cabbage 601bb1d556 Implement AnteaterADVEngine.ADVLogList functions
These functions were originally part of StoatSpriteEngine but were moved
to a separate library in Shaman's Sanctuary. This implementation should
be fully compatible with AnteaterADVEngine.dll, even if the game were to
inspect the serialized data produced by ADVLogList_Save.

Also added here is a minimal implementation of CrayfishLogViewer.hll.
This is a debug API but it's useful for creating test cases that can
run on both System40.exe and xsystem when system.Output is not
available.
2021-05-06 09:57:17 -07:00
Nunuhara Cabbage 9202454ed1 Add stubs for StoatSpriteEngine.SYSTEM_* functions
Also implement StoatSpriteEngine.SP_DeleteAll
2021-05-03 17:41:53 -07:00
Nunuhara Cabbage 65868cde8f Implement MultiSprite_SetAllShowMessageFrame
Apparently type 0 is used for CGs that should disappear together with
the message frame when right clicking.
2021-05-02 19:51:29 -07:00
Nunuhara Cabbage 73db60afb3 Implement VSFile.hll 2021-05-02 17:34:14 -07:00
Nunuhara Cabbage b986789b64 Initial implementation of StoatSpriteEngine
Implement the SP_SetText* and MultiSprite_* functions added by
StoatSpriteEngine (as well as the TRANS_* functions introduced in
SACTDX). Enough to get to the opening movie in Vanish!
2021-05-02 16:07:06 -07:00
Nunuhara Cabbage 863666ed6d Move StoatSpriteEngine impl to separate file
Also clean up some redundant functions in hll/SACT2.c
2021-05-01 22:04:49 -07:00