Merge pull request #167 from kichikuou/vmGraph

vmGraph changes for DALK Gaiden
This commit is contained in:
Nunuhara Cabbage
2024-07-26 20:49:31 -07:00
committed by GitHub
4 changed files with 130 additions and 39 deletions
+6
View File
@@ -75,4 +75,10 @@ enum effect {
extern const char *effect_names[NR_EFFECTS];
int effect_init(enum effect type);
void effect_record_old(void);
void effect_record_new(void);
int effect_update(float rate);
int effect_fini(void);
#endif /* SYSTEM4_EFFECT_H */
+19 -31
View File
@@ -19,8 +19,6 @@
#include <SDL.h>
#include "effect.h"
#include "gfx/gfx.h"
#include "parts.h"
#include "sact.h"
#include "system4.h"
#include "xsystem4.h"
@@ -276,7 +274,7 @@ static effect_fun effect_functions[NR_EFFECTS] = {
[EFFECT_ZOOM_IN_CROSSFADE] = effect_zoom_in_crossfade,
};
int sact_TRANS_Begin(int type)
int effect_init(enum effect type)
{
if (type <= 0 || type >= NR_EFFECTS) {
WARNING("Invalid or unknown effect: %d", type);
@@ -301,14 +299,26 @@ int sact_TRANS_Begin(int type)
effect.on = true;
effect.type = type;
gfx_copy_main_surface(&effect.old);
PE_UpdateComponent(0);
scene_render();
gfx_copy_main_surface(&effect.new);
return 1;
}
int sact_TRANS_Update(float rate)
void effect_record_old(void)
{
if (!effect.on) {
return;
}
gfx_copy_main_surface(&effect.old);
}
void effect_record_new(void)
{
if (!effect.on) {
return;
}
gfx_copy_main_surface(&effect.new);
}
int effect_update(float rate)
{
if (!effect.on) {
return 0;
@@ -323,32 +333,10 @@ int sact_TRANS_Update(float rate)
return 1;
}
int sact_TRANS_End(void)
int effect_fini(void)
{
effect.on = false;
gfx_delete_texture(&effect.old);
gfx_delete_texture(&effect.new);
return 1;
}
int sact_Effect(int type, int time, possibly_unused int key)
{
uint32_t start = SDL_GetTicks();
if (!sact_TRANS_Begin(type))
return 0;
uint32_t t = SDL_GetTicks() - start;
while (t < time) {
sact_TRANS_Update((float)t / (float)time);
uint32_t t2 = SDL_GetTicks() - start;
if (t2 < t + 16) {
SDL_Delay(t + 16 - t2);
t += 16;
} else {
t = t2;
}
}
sact_TRANS_End();
return 1;
}
+45
View File
@@ -26,10 +26,12 @@
#include "hll.h"
#include "asset_manager.h"
#include "audio.h"
#include "effect.h"
#include "input.h"
#include "queue.h"
#include "gfx/gfx.h"
#include "gfx/font.h"
#include "parts.h"
#include "sact.h"
#include "scene.h"
#include "vm/page.h"
@@ -175,6 +177,28 @@ int sact_Update(void)
return 1;
}
int sact_Effect(int type, int time, possibly_unused int key)
{
uint32_t start = SDL_GetTicks();
if (!sact_TRANS_Begin(type))
return 0;
uint32_t t = SDL_GetTicks() - start;
while (t < time) {
sact_TRANS_Update((float)t / (float)time);
uint32_t t2 = SDL_GetTicks() - start;
if (t2 < t + 16) {
SDL_Delay(t + 16 - t2);
t += 16;
} else {
t = t2;
}
}
sact_TRANS_End();
return 1;
}
HLL_WARN_UNIMPLEMENTED(1, int, SACT2, EffectSetMask, int cg);
//int SACT2_EffectSetMaskSP(int sp);
@@ -962,6 +986,27 @@ HLL_WARN_UNIMPLEMENTED( , void, SACTDX, SetVolumeMixerBGMGroupNum, int n);
//static void SACTDX_Key_ClearFlagNoCtrl(void);
//static void SACTDX_Key_ClearFlagOne(int nKeyCode);
int sact_TRANS_Begin(int type)
{
if (!effect_init(type))
return 0;
effect_record_old();
PE_UpdateComponent(0);
scene_render();
effect_record_new();
return 1;
}
int sact_TRANS_Update(float rate)
{
return effect_update(rate);
}
int sact_TRANS_End(void)
{
return effect_fini();
}
bool sact_VIEW_SetMode(int mode)
{
view_mode = mode;
+60 -8
View File
@@ -14,6 +14,7 @@
* along with this program; if not, see <http://gnu.org/licenses/>.
*/
#include "effect.h"
#include "gfx/gfx.h"
#include "vmSurface.h"
#include "hll.h"
@@ -61,7 +62,15 @@ static void vmGraph_CopySprite(int dst_surface, int dx, int dy, int src_surface,
//void vmGraph_Blend(int dst_surface, int dx, int dy, int src_surface, int sx, int sy, int width, int height, int alpha);
//void vmGraph_BlendSrcBright(int dst_surface, int dx, int dy, int src_surface, int sx, int sy, int width, int height, int alpha, int nRate);
//void vmGraph_BlendAddSatur(int dst_surface, int dx, int dy, int src_surface, int sx, int sy, int width, int height);
static void vmGraph_BlendAddSatur(int dst_surface, int dx, int dy, int src_surface, int sx, int sy, int width, int height)
{
struct vm_surface *dst = vm_surface_get(dst_surface);
struct vm_surface *src = vm_surface_get(src_surface);
if (!dst || !src)
return;
gfx_blend_add_satur(&dst->texture, dx, dy, &src->texture, sx, sy, width, height);
}
static void vmGraph_BlendAlphaMap(int dst_surface, int dx, int dy, int src_surface, int sx, int sy, int width, int height)
{
@@ -79,7 +88,16 @@ static void vmGraph_BlendAlphaMap(int dst_surface, int dx, int dy, int src_surfa
//void vmGraph_BlendAlphaMapBright(int dst_surface, int dx, int dy, int src_surface, int sx, int sy, int width, int height, int nRate);
//void vmGraph_BlendAlphaMapAlphaSrcBright(int dst_surface, int dx, int dy, int src_surface, int sx, int sy, int width, int height, int alpha, int nRate);
//void vmGraph_BlendUseAMapColor(int dst_surface, int dx, int dy, int width, int height, int hAlphaSurface, int nAx, int nAy, int r, int g, int b, int alpha);
//void vmGraph_BlendScreen(int dst_surface, int dx, int dy, int src_surface, int sx, int sy, int width, int height);
static void vmGraph_BlendScreen(int dst_surface, int dx, int dy, int src_surface, int sx, int sy, int width, int height)
{
struct vm_surface *dst = vm_surface_get(dst_surface);
struct vm_surface *src = vm_surface_get(src_surface);
if (!dst || !src)
return;
gfx_blend_screen(&dst->texture, dx, dy, &src->texture, sx, sy, width, height);
}
//void vmGraph_BlendMultiply(int dst_surface, int dx, int dy, int src_surface, int sx, int sy, int width, int height);
//void vmGraph_BlendScreenAlpha(int dst_surface, int dx, int dy, int src_surface, int sx, int sy, int width, int height, int alpha);
@@ -127,7 +145,15 @@ static void vmGraph_AddDA_DAxSA(int dst_surface, int dx, int dy, int src_surface
gfx_add_da_daxsa(&dst->texture, dx, dy, &src->texture, sx, sy, width, height);
}
//void vmGraph_SubDA_DAxSA(int dst_surface, int dx, int dy, int src_surface, int sx, int sy, int width, int height);
static void vmGraph_SubDA_DAxSA(int dst_surface, int dx, int dy, int src_surface, int sx, int sy, int width, int height)
{
struct vm_surface *dst = vm_surface_get(dst_surface);
struct vm_surface *src = vm_surface_get(src_surface);
if (!dst || !src)
return;
gfx_sub_da_daxsa(&dst->texture, dx, dy, &src->texture, sx, sy, width, height);
}
//void vmGraph_BrightDestOnly(int surface, int x, int y, int width, int height, int nRate);
//void vmGraph_CopyTextureWrap(int dst_surface, int dx, int dy, int d_width, int d_height, int src_surface, int sx, int sy, int s_width, int s_height, int nU, int nV);
//void vmGraph_CopyTextureWrapAlpha(int dst_surface, int dx, int dy, int d_width, int d_height, int src_surface, int sx, int sy, int s_width, int s_height, int nU, int nV, int alpha);
@@ -158,7 +184,33 @@ static void vmGraph_CopyStretch(int surface, int dx, int dy, int d_width, int d_
//void vmGraph_CopyStretchBlend(int surface, int dx, int dy, int d_width, int d_height, int src_surface, float sx, float sy, float s_width, float s_height, int alpha);
//void vmGraph_CopyStretchBlendAlphaMap(int surface, int dx, int dy, int d_width, int d_height, int src_surface, float sx, float sy, float s_width, float s_height);
HLL_WARN_UNIMPLEMENTED( , void, vmGraph, SetClickCancel, int click);
//int vmGraph_EffectCopy(int dx, int dy, int src_surface, int sx, int sy, int width, int height, int nEffect, int nTotalTime);
static int vmGraph_EffectCopy(int dx, int dy, int src_surface, int sx, int sy, int width, int height, int effect, int total_time)
{
uint32_t start = SDL_GetTicks();
if (!effect_init(effect))
return 0;
effect_record_old();
vmGraph_Copy(vm_surface_get_main_surface(), dx, dy, src_surface, sx, sy, width, height);
effect_record_new();
uint32_t t = SDL_GetTicks() - start;
while (t < total_time) {
effect_update((float)t / (float)total_time);
uint32_t t2 = SDL_GetTicks() - start;
if (t2 < t + 16) {
SDL_Delay(t + 16 - t2);
t += 16;
} else {
t = t2;
}
}
effect_update(1.0);
effect_fini();
return 1;
}
//int vmGraph_GetMainWidth(void);
//int vmGraph_GetMainHeight(void);
//int vmGraph_GetMainBpp(void);
@@ -178,7 +230,7 @@ HLL_LIBRARY(vmGraph,
HLL_EXPORT(CopySprite, vmGraph_CopySprite),
HLL_TODO_EXPORT(Blend, vmGraph_Blend),
HLL_TODO_EXPORT(BlendSrcBright, vmGraph_BlendSrcBright),
HLL_TODO_EXPORT(BlendAddSatur, vmGraph_BlendAddSatur),
HLL_EXPORT(BlendAddSatur, vmGraph_BlendAddSatur),
HLL_EXPORT(BlendAlphaMap, vmGraph_BlendAlphaMap),
HLL_TODO_EXPORT(BlendAlphaMapSrcOnly, vmGraph_BlendAlphaMapSrcOnly),
HLL_TODO_EXPORT(BlendAlphaMapColor, vmGraph_BlendAlphaMapColor),
@@ -187,7 +239,7 @@ HLL_LIBRARY(vmGraph,
HLL_TODO_EXPORT(BlendAlphaMapBright, vmGraph_BlendAlphaMapBright),
HLL_TODO_EXPORT(BlendAlphaMapAlphaSrcBright, vmGraph_BlendAlphaMapAlphaSrcBright),
HLL_TODO_EXPORT(BlendUseAMapColor, vmGraph_BlendUseAMapColor),
HLL_TODO_EXPORT(BlendScreen, vmGraph_BlendScreen),
HLL_EXPORT(BlendScreen, vmGraph_BlendScreen),
HLL_TODO_EXPORT(BlendMultiply, vmGraph_BlendMultiply),
HLL_TODO_EXPORT(BlendScreenAlpha, vmGraph_BlendScreenAlpha),
HLL_EXPORT(Fill, vmGraph_Fill),
@@ -197,7 +249,7 @@ HLL_LIBRARY(vmGraph,
HLL_TODO_EXPORT(SaturDP_DPxSA, vmGraph_SaturDP_DPxSA),
HLL_TODO_EXPORT(ScreenDA_DAxSA, vmGraph_ScreenDA_DAxSA),
HLL_EXPORT(AddDA_DAxSA, vmGraph_AddDA_DAxSA),
HLL_TODO_EXPORT(SubDA_DAxSA, vmGraph_SubDA_DAxSA),
HLL_EXPORT(SubDA_DAxSA, vmGraph_SubDA_DAxSA),
HLL_TODO_EXPORT(BrightDestOnly, vmGraph_BrightDestOnly),
HLL_TODO_EXPORT(CopyTextureWrap, vmGraph_CopyTextureWrap),
HLL_TODO_EXPORT(CopyTextureWrapAlpha, vmGraph_CopyTextureWrapAlpha),
@@ -205,7 +257,7 @@ HLL_LIBRARY(vmGraph,
HLL_TODO_EXPORT(CopyStretchBlend, vmGraph_CopyStretchBlend),
HLL_TODO_EXPORT(CopyStretchBlendAlphaMap, vmGraph_CopyStretchBlendAlphaMap),
HLL_EXPORT(SetClickCancel, vmGraph_SetClickCancel),
HLL_TODO_EXPORT(EffectCopy, vmGraph_EffectCopy),
HLL_EXPORT(EffectCopy, vmGraph_EffectCopy),
HLL_EXPORT(GetMainSurface, vm_surface_get_main_surface),
HLL_TODO_EXPORT(GetMainWidth, vmGraph_GetMainWidth),
HLL_TODO_EXPORT(GetMainHeight, vmGraph_GetMainHeight),