Implement SACT2.SP_SetBrightness

Used in Pastel Chime Continue.
This commit is contained in:
kichikuou
2025-09-09 09:19:38 +09:00
parent 2c771acfe6
commit 8d67c87f6f
6 changed files with 24 additions and 13 deletions
+2
View File
@@ -91,6 +91,8 @@ int sact_SP_IsPtInRect(int sp_no, int x, int y);
int sact_CG_GetMetrics(int cg_no, struct page **page);
int sact_SP_GetAMapValue(int sp_no, int x, int y);
int sact_SP_GetPixelValue(int sp_no, int x, int y, int *r, int *g, int *b);
int sact_SP_SetBrightness(int sp_no, int brightness);
int sact_SP_GetBrightness(int sp_no);
int sact_GAME_MSG_GetNumOf(void);
void sact_IntToZenkaku(struct string **s, int value, int figures, int zero_pad);
void sact_IntToHankaku(struct string **s, int value, int figures, int zero_pad);
+1 -1
View File
@@ -68,7 +68,7 @@ struct sact_sprite {
/*
* XXX: There are two different sprite renderers:
* * SACT2 - only shader param is blend rate
* * SACT2 - blend rate and brightness (stored in multiply_color field)
* * ChipmunkSpriteEngine - blend rate, add color, multiply color, surface area
* (uses parts shader)
*
+3 -1
View File
@@ -16,11 +16,13 @@
uniform sampler2D tex;
uniform float blend_rate;
uniform vec3 multiply_color;
in vec2 tex_coord;
out vec4 frag_color;
void main() {
frag_color = texture(tex, tex_coord);
frag_color = texture(tex, tex_coord);
frag_color.rgb *= multiply_color;
frag_color.a *= blend_rate;
}
+11 -7
View File
@@ -841,16 +841,20 @@ void sact_CG_BlendAMapBin(int dst, int dx, int dy, int src, int sx, int sy, int
//void SACT2_Debug_Pause(void);
//void SACT2_Debug_GetFuncStack(struct string **s, int nest);
int SACT2_SP_SetBrightness(int sp_no, int brightness)
int sact_SP_SetBrightness(int sp_no, int brightness)
{
if (brightness != 255)
WARNING("Unimplemented HLL function: SACT2.SP_SetBrightness(%d, %d)", sp_no, brightness);
struct sact_sprite *sp = sact_try_get_sprite(sp_no);
if (!sp) return 0;
sprite_set_multiply_color(sp, brightness, brightness, brightness);
sprite_dirty(sp);
return 1;
}
int SACT2_SP_GetBrightness(int sp_no)
int sact_SP_GetBrightness(int sp_no)
{
return 255;
struct sact_sprite *sp = sact_try_get_sprite(sp_no);
if (!sp) return 0;
return sp->multiply_color.r;
}
#define SACT_EXPORTS \
@@ -994,8 +998,8 @@ int SACT2_SP_GetBrightness(int sp_no)
HLL_TODO_EXPORT(Debug_GetFuncStack, SACT2_Debug_GetFuncStack), \
HLL_EXPORT(SP_GetAMapValue, sact_SP_GetAMapValue), \
HLL_EXPORT(SP_GetPixelValue, sact_SP_GetPixelValue), \
HLL_EXPORT(SP_SetBrightness, SACT2_SP_SetBrightness), \
HLL_EXPORT(SP_GetBrightness, SACT2_SP_GetBrightness)
HLL_EXPORT(SP_SetBrightness, sact_SP_SetBrightness), \
HLL_EXPORT(SP_GetBrightness, sact_SP_GetBrightness)
HLL_WARN_UNIMPLEMENTED( , void, SACTDX, SetVolumeMixerMasterGroupNum, int n);
HLL_WARN_UNIMPLEMENTED( , void, SACTDX, SetVolumeMixerSEGroupNum, int n);
+2 -4
View File
@@ -41,8 +41,6 @@
static bool fps_show = false;
HLL_WARN_UNIMPLEMENTED( , void, StoatSpriteEngine, JoypadQuake_Set, int num, int type, int magnitude);
HLL_WARN_UNIMPLEMENTED(0, int, StoatSpriteEngine, SP_SetBrightness, int sp_no, int brightness);
HLL_WARN_UNIMPLEMENTED(0, int, StoatSpriteEngine, SP_GetBrightness, int sp_no);
HLL_WARN_UNIMPLEMENTED( , void, StoatSpriteEngine, SetVolumeMixerMasterGroupNum, int n);
HLL_WARN_UNIMPLEMENTED( , void, StoatSpriteEngine, SetVolumeMixerSEGroupNum, int n);
HLL_WARN_UNIMPLEMENTED( , void, StoatSpriteEngine, SetVolumeMixerBGMGroupNum, int n);
@@ -1098,8 +1096,8 @@ HLL_LIBRARY(StoatSpriteEngine,
HLL_TODO_EXPORT(Debug_GetFuncStack, SACT2_Debug_GetFuncStack),
HLL_EXPORT(SP_GetAMapValue, sact_SP_GetAMapValue),
HLL_EXPORT(SP_GetPixelValue, sact_SP_GetPixelValue),
HLL_EXPORT(SP_SetBrightness, StoatSpriteEngine_SP_SetBrightness),
HLL_EXPORT(SP_GetBrightness, StoatSpriteEngine_SP_GetBrightness),
HLL_EXPORT(SP_SetBrightness, sact_SP_SetBrightness),
HLL_EXPORT(SP_GetBrightness, sact_SP_GetBrightness),
HLL_TODO_EXPORT(SP_CreateCopy, SACTDX_SP_CreateCopy),
HLL_TODO_EXPORT(Joypad_GetAnalogStickStatus, SACTDX_Joypad_GetAnalogStickStatus),
HLL_TODO_EXPORT(GetDigitalStickStatus, SACTDX_GetDigitalStickStatus),
+5
View File
@@ -88,6 +88,10 @@ static void prepare_sact_shader(struct gfx_render_job *job, void *data)
struct sprite_shader *s = (struct sprite_shader*)job->shader;
struct sact_sprite *sp = (struct sact_sprite*)data;
glUniform1f(s->blend_rate, sp->blend_rate / 255.0f);
glUniform3f(s->multiply_color,
sp->multiply_color.r / 255.0f,
sp->multiply_color.g / 255.0f,
sp->multiply_color.b / 255.0f);
}
static void prepare_chipmunk_shader(struct gfx_render_job *job, void *data)
@@ -123,6 +127,7 @@ void sprite_init_sact(void)
}
gfx_load_shader(&sprite_shader.s, "shaders/render.v.glsl", "shaders/sprite.f.glsl");
sprite_shader.blend_rate = glGetUniformLocation(sprite_shader.s.program, "blend_rate");
sprite_shader.multiply_color = glGetUniformLocation(sprite_shader.s.program, "multiply_color");
sprite_shader.s.prepare = prepare_sact_shader;
}