Compare commits

..
Author SHA1 Message Date
kichikuou 82c8b76a58 Fix missing equipment gauges in Rance 5D
This fixes #83.

**CG_GRAPH checks the source CG's type before drawing, but
SACT.CG_QueryType only checked CGs already loaded into memory. The gauge
images had not been loaded yet, so they were reported as unused.

Check the ALD link table for unloaded CGs, then load them when querying
their dimensions.
2026-09-23 07:51:47 +09:00
4 changed files with 18 additions and 25 deletions
+17 -13
View File
@@ -35,6 +35,7 @@
#include "ags.h"
#include "variable.h"
#include "sactcg.h"
#include "ald_manager.h"
#include "cg.h"
#include "gfx.h"
@@ -328,24 +329,27 @@ void scg_free(int no) {
// CGの種類を取得
int scg_querytype(int wNumCG) {
if (wNumCG >= (CGMAX -1)) return CG_NOTUSED;
if (!cg_store || !cg_store[wNumCG]) return CG_NOTUSED;
return cg_store[wNumCG]->type;
if (cg_store && cg_store[wNumCG])
return cg_store[wNumCG]->type;
// Linked CGs are valid even before they are loaded into cg_store.
return ald_is_linked(DRIFILE_CG, wNumCG - 1) ? CG_LINKED : CG_NOTUSED;
}
// CGの大きさを取得
bool scg_querysize(int wNumCG, vmvar_t *w, vmvar_t *h) {
if (wNumCG >= (CGMAX -1)) goto errexit;
if (!cg_store || !cg_store[wNumCG]) goto errexit;
if (cg_store[wNumCG]->sf == NULL) goto errexit;
*w = cg_store[wNumCG]->sf->w;
*h = cg_store[wNumCG]->sf->h;
return true;
errexit:
*w = *h = 0;
return false;
if (wNumCG >= (CGMAX - 1))
return false;
cginfo_t *cg = cg_store ? cg_store[wNumCG] : NULL;
if (!cg && ald_is_linked(DRIFILE_CG, wNumCG - 1))
cg = scg_get(wNumCG);
if (!cg || !cg->sf)
return false;
*w = cg->sf->w;
*h = cg->sf->h;
return true;
}
// CGのBPPを取得
-2
View File
@@ -191,7 +191,6 @@ static void eff_init(struct effect *eff, SDL_Rect *rect, EffectTexture *old, Eff
if (!eff->is_fullscreen)
gfx_updateScreen(); // Flush pending display changes.
gfx_setEffectRunning(true);
}
static void eff_finish(struct effect *eff, bool present) {
@@ -1913,5 +1912,4 @@ void effect_step(struct effect *eff, float progress) {
void effect_finish(struct effect *eff) {
eff->finish(eff);
gfx_setEffectRunning(false);
}
+1 -8
View File
@@ -45,7 +45,6 @@
#include "debugger.h"
static bool gfx_dirty;
static bool gfx_effect_running;
static void gfx_pal_check(void) {
if (nact->ags.pal_changed) {
@@ -65,7 +64,7 @@ SDL_Color gfx_getPaletteColor(uint8_t color) {
}
void gfx_updateScreen(void) {
if (!gfx_dirty || gfx_effect_running)
if (!gfx_dirty)
return;
SDL_RenderClear(gfx_renderer);
SDL_RenderCopy(gfx_renderer, gfx_texture, NULL, NULL);
@@ -74,12 +73,6 @@ void gfx_updateScreen(void) {
gfx_dirty = false;
}
void gfx_setEffectRunning(bool running) {
gfx_effect_running = running;
// Effects present directly. Do not replay pending redraws over their frames.
gfx_dirty = false;
}
void gfx_requestRedraw(void) {
gfx_dirty = true;
}
-2
View File
@@ -37,8 +37,6 @@ extern surface_t *gfx_dibinfo;
extern int view_w;
extern int view_h;
void gfx_setEffectRunning(bool running);
SDL_Surface *gfx_dib_to_surface_with_alpha(int x, int y, int w, int h);
SDL_Surface *gfx_dib_to_surface_colorkey(int x, int y, int w, int h, int col);