diff --git a/modules/NIGHTDLL/sprite_eupdate.c b/modules/NIGHTDLL/sprite_eupdate.c index 60f8c7e..17799e9 100644 --- a/modules/NIGHTDLL/sprite_eupdate.c +++ b/modules/NIGHTDLL/sprite_eupdate.c @@ -47,10 +47,6 @@ static void ec9_cb(surface_t *, surface_t *); static void ec11_cb(surface_t *, surface_t *); static void ec12_cb(surface_t *, surface_t *); static void ec13_cb(surface_t *, surface_t *); -static void ec14_cb(surface_t *, surface_t *); -static void ec15_cb(surface_t *, surface_t *); -static void ec16_cb(surface_t *, surface_t *); -static void ec17_cb(surface_t *, surface_t *); static void ec_dummy_cb(surface_t *, surface_t *); struct ecopyparam { @@ -245,58 +241,6 @@ static void ec13_cb(surface_t *src, surface_t *dst) { ecp.oldstep = st_i; } -// 五芒星 (内->外) -static void ec14_cb(surface_t *sfsrc, surface_t *sfdst) { - int curstep, maxstep; - maxstep = 256; - curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime); - - if (ecp.oldstep == 0) { - sf_copyall(sf0, sfdst); - } - sdl_maskupdate(0, 0, sfsrc->width, sfsrc->height, 0, 0, 44, curstep); - ecp.oldstep = curstep; -} - -// 五芒星 (外->内) -static void ec15_cb(surface_t *sfsrc, surface_t *sfdst) { - int curstep, maxstep; - maxstep = 256; - curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime); - - if (ecp.oldstep == 0) { - sf_copyall(sf0, sfdst); - } - sdl_maskupdate(0, 0, sfsrc->width, sfsrc->height, 0, 0, 45, curstep); - ecp.oldstep = curstep; -} - -// 六芒星 (内->外) -static void ec16_cb(surface_t *sfsrc, surface_t *sfdst) { - int curstep, maxstep; - maxstep = 256; - curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime); - - if (ecp.oldstep == 0) { - sf_copyall(sf0, sfdst); - } - sdl_maskupdate(0, 0, sfsrc->width, sfsrc->height, 0, 0, 46, curstep); - ecp.oldstep = curstep; -} - -// 六芒星 (外->内) -static void ec17_cb(surface_t *sfsrc, surface_t *sfdst) { - int curstep, maxstep; - maxstep = 256; - curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime); - - if (ecp.oldstep == 0) { - sf_copyall(sf0, sfdst); - } - sdl_maskupdate(0, 0, sfsrc->width, sfsrc->height, 0, 0, 47, curstep); - ecp.oldstep = curstep; -} - // フェードイン static void ec_fadein_cb(surface_t *sfsrc, surface_t *sfdst) { int curstep; diff --git a/modules/SACT/sprite_eupdate.c b/modules/SACT/sprite_eupdate.c index 43d035a..eafeaa7 100644 --- a/modules/SACT/sprite_eupdate.c +++ b/modules/SACT/sprite_eupdate.c @@ -48,10 +48,7 @@ static void ec9_cb(surface_t *, surface_t *); static void ec11_cb(surface_t *, surface_t *); static void ec12_cb(surface_t *, surface_t *); static void ec13_cb(surface_t *, surface_t *); -static void ec14_cb(surface_t *, surface_t *); -static void ec15_cb(surface_t *, surface_t *); -static void ec16_cb(surface_t *, surface_t *); -static void ec17_cb(surface_t *, surface_t *); +static void sdlfader_cb(surface_t *, surface_t *); static void ec_dummy_cb(surface_t *, surface_t *); struct ecopyparam { @@ -60,6 +57,7 @@ struct ecopyparam { int edtime; int curstep; int oldstep; + struct sdl_fader *fader; }; typedef struct ecopyparam ecopyparam_t; static ecopyparam_t ecp; @@ -87,10 +85,10 @@ static entrypoint *cb[39] = { ec11_cb, ec12_cb, ec13_cb, - ec14_cb, - ec15_cb, - ec16_cb, - ec17_cb, + sdlfader_cb, + sdlfader_cb, + sdlfader_cb, + sdlfader_cb, ec_dummy_cb, // 欠番 ec19_cb, ec20_cb, @@ -288,55 +286,13 @@ static void ec13_cb(surface_t *src, surface_t *dst) { ecp.oldstep = st_i; } -// 五芒星 (内->外) -static void ec14_cb(surface_t *sfsrc, surface_t *sfdst) { - int curstep, maxstep; - maxstep = 256; - curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime); +static void sdlfader_cb(surface_t *sfsrc, surface_t *sfdst) { + int curstep = SDL_FADER_MAXSTEP * (ecp.curtime - ecp.sttime) / (ecp.edtime - ecp.sttime); if (ecp.oldstep == 0) { sf_copyall(sf0, sfdst); } - sdl_maskupdate(0, 0, sfsrc->width, sfsrc->height, 0, 0, 44, curstep); - ecp.oldstep = curstep; -} - -// 五芒星 (外->内) -static void ec15_cb(surface_t *sfsrc, surface_t *sfdst) { - int curstep, maxstep; - maxstep = 256; - curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime); - - if (ecp.oldstep == 0) { - sf_copyall(sf0, sfdst); - } - sdl_maskupdate(0, 0, sfsrc->width, sfsrc->height, 0, 0, 45, curstep); - ecp.oldstep = curstep; -} - -// 六芒星 (内->外) -static void ec16_cb(surface_t *sfsrc, surface_t *sfdst) { - int curstep, maxstep; - maxstep = 256; - curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime); - - if (ecp.oldstep == 0) { - sf_copyall(sf0, sfdst); - } - sdl_maskupdate(0, 0, sfsrc->width, sfsrc->height, 0, 0, 46, curstep); - ecp.oldstep = curstep; -} - -// 六芒星 (外->内) -static void ec17_cb(surface_t *sfsrc, surface_t *sfdst) { - int curstep, maxstep; - maxstep = 256; - curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime); - - if (ecp.oldstep == 0) { - sf_copyall(sf0, sfdst); - } - sdl_maskupdate(0, 0, sfsrc->width, sfsrc->height, 0, 0, 47, curstep); + sdl_fader_step(ecp.fader, curstep); ecp.oldstep = curstep; } @@ -386,6 +342,15 @@ 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; + } +} /* 効果つき画面更新 @@ -409,7 +374,11 @@ int sp_eupdate(int type, int time, int cancel) { sfdst = sf_dup(sf0); - sf_copyall(sf0, sfsrc); // 全部の効果タイプにこの処理は要らないんだけど + 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)); + else + sf_copyall(sf0, sfsrc); // 全部の効果タイプにこの処理は要らないんだけど + // 5つを越えたら別の方法を考えよう if (type == 10) { ec10_prepare(sfsrc, sfdst); @@ -449,6 +418,10 @@ int sp_eupdate(int type, int time, int cancel) { if (type == 19) { ec19_drain(sfsrc, sfdst); } + if (ecp.fader) { + sdl_fader_finish(ecp.fader); + ecp.fader = NULL; + } return OK; } diff --git a/src/effect.h b/src/effect.h index 1e11495..ca89af7 100644 --- a/src/effect.h +++ b/src/effect.h @@ -32,4 +32,11 @@ enum effect { EFFECT_WINDMILL_360 = 52, }; +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, +}; + #endif /* __EFFECT_H__ */ diff --git a/src/sdl_core.h b/src/sdl_core.h index 728d4d9..e44d26c 100644 --- a/src/sdl_core.h +++ b/src/sdl_core.h @@ -81,7 +81,6 @@ extern void sdl_CopyRegion(void *src, int sx, int sy, int w, int h, int dx, int extern void sdl_restoreRegion(void *src, int x, int y); extern void* sdl_saveRegion(int x, int y, int w, int h); extern void sdl_delRegion(void *src); -extern void sdl_maskupdate(int sx, int sy, int w, int h, int dx, int dy, int func, int step); extern SDL_Surface *com2surface(agsurface_t *s); /* fader */ diff --git a/src/sdl_draw.c b/src/sdl_draw.c index 788a36f..5cb97d5 100644 --- a/src/sdl_draw.c +++ b/src/sdl_draw.c @@ -480,12 +480,3 @@ void sdl_wrapColor(int sx, int sy, int w, int h, BYTE c, int rate) { SDL_BlitSurface(s, &r_src, sdl_dib, &r_dst); SDL_FreeSurface(s); } - -/* mask update まだ */ -void sdl_maskupdate(int sx, int sy, int w, int h, int dx, int dy, int func, int step) { - if (step == 256) { - WARNING("Unimplemented effect %d\n", func); - ags_copyArea(sx, sy, w, h, dx, dy); - ags_updateArea(dx, dy, w, h); - } -}