diff --git a/modules/SACT/sprite_eupdate.c b/modules/SACT/sprite_eupdate.c index eafeaa7..8e20d6d 100644 --- a/modules/SACT/sprite_eupdate.c +++ b/modules/SACT/sprite_eupdate.c @@ -342,16 +342,6 @@ static void ec38_cb(surface_t *sfsrc, surface_t *sfdst) { static void ec39_cb(surface_t *sfsrc, surface_t *sfdst) { } -static enum effect sact_effect_to_effect(enum sact_effect effect) { - switch (effect) { - case SACT_EFFECT_PENTAGRAM_IN_OUT: return EFFECT_PENTAGRAM_IN_OUT; - case SACT_EFFECT_PENTAGRAM_OUT_IN: return EFFECT_PENTAGRAM_OUT_IN; - case SACT_EFFECT_HEXAGRAM_IN_OUT: return EFFECT_HEXAGRAM_IN_OUT; - case SACT_EFFECT_HEXAGRAM_OUT_IN: return EFFECT_HEXAGRAM_OUT_IN; - default: return 0; - } -} - /* 効果つき画面更新 @param type: 効果の種類 @@ -375,7 +365,7 @@ int sp_eupdate(int type, int time, int cancel) { sfdst = sf_dup(sf0); if (SACT_EFFECT_PENTAGRAM_IN_OUT <= type && type <= SACT_EFFECT_HEXAGRAM_OUT_IN) - ecp.fader = sdl_fader_init(0, 0, sfsrc->width, sfsrc->height, 0, 0, sact_effect_to_effect(type)); + ecp.fader = sdl_fader_init(0, 0, sfsrc->width, sfsrc->height, 0, 0, from_sact_effect(type)); else sf_copyall(sf0, sfsrc); // 全部の効果タイプにこの処理は要らないんだけど diff --git a/src/ecopy.c b/src/ecopy.c index 71ac005..0367746 100644 --- a/src/ecopy.c +++ b/src/ecopy.c @@ -1428,17 +1428,17 @@ void ags_eCopyArea(int sx, int sy, int w, int h, int dx, int dy, int sw, int opt ags_fader(&i); return; - case EFFECT_PENTAGRAM_IN_OUT: - case EFFECT_PENTAGRAM_OUT_IN: - case EFFECT_HEXAGRAM_IN_OUT: - case EFFECT_HEXAGRAM_OUT_IN: - case EFFECT_WINDMILL: - case EFFECT_WINDMILL_180: - case EFFECT_WINDMILL_360: + case NACT_EFFECT_PENTAGRAM_IN_OUT: + case NACT_EFFECT_PENTAGRAM_OUT_IN: + case NACT_EFFECT_HEXAGRAM_IN_OUT: + case NACT_EFFECT_HEXAGRAM_OUT_IN: + case NACT_EFFECT_WINDMILL: + case NACT_EFFECT_WINDMILL_180: + case NACT_EFFECT_WINDMILL_360: i.step_max = SDL_FADER_MAXSTEP; i.effect_time = opt == 0 ? 1000 : opt; i.cancel = cancel; - sdlfader = sdl_fader_init(ecp.sx, ecp.sy, ecp.w, ecp.h, ecp.dx, ecp.dy, sw); + sdlfader = sdl_fader_init(ecp.sx, ecp.sy, ecp.w, ecp.h, ecp.dx, ecp.dy, from_nact_effect(sw)); i.callback = sdlfader_step; ags_fader(&i); sdl_fader_finish(sdlfader); diff --git a/src/effect.h b/src/effect.h index ca89af7..d4e1401 100644 --- a/src/effect.h +++ b/src/effect.h @@ -20,23 +20,40 @@ #ifndef __EFFECT_H__ #define __EFFECT_H__ -// Effect numbers for the CE command. -enum effect { - EFFECT_CROSSFADE = 31, - EFFECT_PENTAGRAM_IN_OUT = 44, - EFFECT_PENTAGRAM_OUT_IN = 45, - EFFECT_HEXAGRAM_IN_OUT = 46, - EFFECT_HEXAGRAM_OUT_IN = 47, - EFFECT_WINDMILL = 50, - EFFECT_WINDMILL_180 = 51, - EFFECT_WINDMILL_360 = 52, +// Effect types of the CE command. +enum nact_effect { + NACT_EFFECT_CROSSFADE = 31, + NACT_EFFECT_PENTAGRAM_IN_OUT = 44, + NACT_EFFECT_PENTAGRAM_OUT_IN = 45, + NACT_EFFECT_HEXAGRAM_IN_OUT = 46, + NACT_EFFECT_HEXAGRAM_OUT_IN = 47, + NACT_EFFECT_WINDMILL = 50, + NACT_EFFECT_WINDMILL_180 = 51, + NACT_EFFECT_WINDMILL_360 = 52, }; +// Effect types of SCAT.DrawEffect. enum sact_effect { SACT_EFFECT_PENTAGRAM_IN_OUT = 14, SACT_EFFECT_PENTAGRAM_OUT_IN = 15, - SACT_EFFECT_HEXAGRAM_IN_OUT = 16, - SACT_EFFECT_HEXAGRAM_OUT_IN = 17, + SACT_EFFECT_HEXAGRAM_IN_OUT = 16, + SACT_EFFECT_HEXAGRAM_OUT_IN = 17, }; +// Internal effect numbers. +enum sdl_effect { + EFFECT_INVALID, + EFFECT_CROSSFADE, + EFFECT_PENTAGRAM_IN_OUT, + EFFECT_PENTAGRAM_OUT_IN, + EFFECT_HEXAGRAM_IN_OUT, + EFFECT_HEXAGRAM_OUT_IN, + EFFECT_WINDMILL, + EFFECT_WINDMILL_180, + EFFECT_WINDMILL_360, +}; + +enum sdl_effect from_nact_effect(enum nact_effect effect); +enum sdl_effect from_sact_effect(enum sact_effect effect); + #endif /* __EFFECT_H__ */ diff --git a/src/sdl_core.h b/src/sdl_core.h index 346b07a..d29f818 100644 --- a/src/sdl_core.h +++ b/src/sdl_core.h @@ -88,7 +88,7 @@ extern SDL_Surface *com2surface(agsurface_t *s); #define SDL_FADER_MAXSTEP 256 struct sdl_fader; -struct sdl_fader *sdl_fader_init(int sx, int sy, int w, int h, int dx, int dy, enum effect type); +struct sdl_fader *sdl_fader_init(int sx, int sy, int w, int h, int dx, int dy, enum sdl_effect type); void sdl_fader_step(struct sdl_fader *fader, int step); void sdl_fader_finish(struct sdl_fader *fader); extern void sdl_fadeIn(int step); diff --git a/src/sdl_fader.c b/src/sdl_fader.c index 5688b4f..cf866e7 100644 --- a/src/sdl_fader.c +++ b/src/sdl_fader.c @@ -30,9 +30,33 @@ struct sdl_fader { SDL_Texture *tx_old, *tx_new, *tx_tmp; SDL_Rect dst_rect; - enum effect effect; + enum sdl_effect effect; }; +enum sdl_effect from_nact_effect(enum nact_effect effect) { + switch (effect) { + case NACT_EFFECT_CROSSFADE: return EFFECT_CROSSFADE; + case NACT_EFFECT_PENTAGRAM_IN_OUT: return EFFECT_PENTAGRAM_IN_OUT; + case NACT_EFFECT_PENTAGRAM_OUT_IN: return EFFECT_PENTAGRAM_OUT_IN; + case NACT_EFFECT_HEXAGRAM_IN_OUT: return EFFECT_HEXAGRAM_IN_OUT; + case NACT_EFFECT_HEXAGRAM_OUT_IN: return EFFECT_HEXAGRAM_OUT_IN; + case NACT_EFFECT_WINDMILL: return EFFECT_WINDMILL; + case NACT_EFFECT_WINDMILL_180: return EFFECT_WINDMILL_180; + case NACT_EFFECT_WINDMILL_360: return EFFECT_WINDMILL_360; + default: return EFFECT_INVALID; + } +} + +enum sdl_effect from_sact_effect(enum sact_effect effect) { + switch (effect) { + case SACT_EFFECT_PENTAGRAM_IN_OUT: return EFFECT_PENTAGRAM_IN_OUT; + case SACT_EFFECT_PENTAGRAM_OUT_IN: return EFFECT_PENTAGRAM_OUT_IN; + case SACT_EFFECT_HEXAGRAM_IN_OUT: return EFFECT_HEXAGRAM_IN_OUT; + case SACT_EFFECT_HEXAGRAM_OUT_IN: return EFFECT_HEXAGRAM_OUT_IN; + default: return EFFECT_INVALID; + } +} + #define HAS_SDL_RenderGeometry SDL_VERSION_ATLEAST(2, 0, 18) #if HAS_SDL_RenderGeometry @@ -269,7 +293,7 @@ static void step_crossfade(struct sdl_fader *fader, int step) { SDL_RenderPresent(sdl_renderer); } -struct sdl_fader *sdl_fader_init(int sx, int sy, int w, int h, int dx, int dy, enum effect effect) { +struct sdl_fader *sdl_fader_init(int sx, int sy, int w, int h, int dx, int dy, enum sdl_effect effect) { if (!SDL_RenderTargetSupported(sdl_renderer) || !HAS_SDL_RenderGeometry) { WARNING("Effect %d is not supported in this system. Falling back to crossfade.\n", effect); effect = EFFECT_CROSSFADE;