From bf455de35dbffc176e1bad9f53a0aeded2b366ba Mon Sep 17 00:00:00 2001 From: kichikuou Date: Wed, 1 Apr 2026 15:28:00 +0900 Subject: [PATCH] SealEngine: Implement MagSpeed functions mag_speed is a per-plugin integer (default 1) set by SetMagSpeed on all existing plugins. use_mag_speed is a per-instance flag (default true) set by SetInstanceUseMagSpeed. When use_mag_speed is true, motion delta_frame is multiplied by mag_speed. --- include/reign.h | 4 ++++ src/3d/reign.c | 4 ++++ src/hll/ReignEngine.c | 26 ++++++++++++++++++++++---- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/include/reign.h b/include/reign.h index 853d8a5..6a101f7 100644 --- a/include/reign.h +++ b/include/reign.h @@ -149,6 +149,9 @@ struct RE_plugin { // TapirEngine bool suspended; + + // SealEngine + int mag_speed; }; struct RE_instance { @@ -171,6 +174,7 @@ struct RE_instance { float shadow_volume_bone_radius; bool draw_bump; float fps; + bool use_mag_speed; bool motion_blend; float motion_blend_rate; vec3 ambient; diff --git a/src/3d/reign.c b/src/3d/reign.c index 7b36dfc..51529d0 100644 --- a/src/3d/reign.c +++ b/src/3d/reign.c @@ -49,6 +49,7 @@ static struct RE_instance *create_instance(struct RE_plugin *plugin) instance->shadow_volume_bone_radius = 0.1f; instance->draw_bump = true; instance->fps = 30.0f; + instance->use_mag_speed = true; instance->column_height = 1.0f; instance->column_radius = 1.0f; glm_mat4_identity(instance->local_transform); @@ -240,6 +241,7 @@ struct RE_plugin *RE_plugin_new(enum RE_plugin_version version) plugin->pae_cache = ht_create(32); for (int i = 0; i < RE_NR_BACK_CGS; i++) RE_back_cg_init(&plugin->back_cg[i]); + plugin->mag_speed = 1; plugin->fog_type = RE_FOG_NONE; plugin->fog_near = 1.0; plugin->fog_far = 10.0; @@ -326,6 +328,8 @@ bool RE_build_model(struct RE_plugin *plugin, int elapsed_ms) continue; float delta_frame = inst->fps * elapsed_ms / 1000.0; + if (inst->use_mag_speed) + delta_frame *= plugin->mag_speed; update_motion(inst->motion, delta_frame); update_motion(inst->next_motion, delta_frame); diff --git a/src/hll/ReignEngine.c b/src/hll/ReignEngine.c index 20e5acb..83bc999 100644 --- a/src/hll/ReignEngine.c +++ b/src/hll/ReignEngine.c @@ -2334,7 +2334,13 @@ HLL_LIBRARY(ReignEngine, REIGN_EXPORTS, HLL_LIBRARY(TapirEngine, REIGN_EXPORTS, TAPIR_EXPORTS); -HLL_QUIET_UNIMPLEMENTED(, void, SealEngine, SetMagSpeed, int MagSpeed); +static void SealEngine_SetMagSpeed(int mag_speed) +{ + for (int i = 0; i < RE_MAX_PLUGINS; i++) { + if (plugins[i]) + plugins[i]->mag_speed = mag_speed; + } +} //bool SealEngine_SaveInstance(int PluginNumber, int InstanceNumber, struct string *FileName); static bool SealEngine_IsExistInstanceData(int plugin, int instance, struct string *filename) @@ -2437,8 +2443,20 @@ HLL_WARN_UNIMPLEMENTED(false, bool, SealEngine, SetInstanceCircleShadowRadius, i //float SealEngine_GetInstanceCircleShadowRadius(int PluginNumber, int InstanceNumber); //bool SealEngine_LoadInstanceLightParam(int PluginNumber, int InstanceNumber); HLL_WARN_UNIMPLEMENTED(false, bool, SealEngine, StoreInstanceLightParam, int PluginNumber, int InstanceNumber); -HLL_WARN_UNIMPLEMENTED(false, bool, SealEngine, SetInstanceUseMagSpeed, int PluginNumber, int InstanceNumber, bool UseMagSpeed); -//bool SealEngine_IsInstanceUseMagSpeed(int PluginNumber, int InstanceNumber); +static bool SealEngine_SetInstanceUseMagSpeed(int plugin, int instance, bool use_mag_speed) +{ + struct RE_instance *ri = get_instance(plugin, instance); + if (!ri) + return false; + ri->use_mag_speed = use_mag_speed; + return true; +} + +static bool SealEngine_IsInstanceUseMagSpeed(int plugin, int instance) +{ + struct RE_instance *ri = get_instance(plugin, instance); + return ri ? ri->use_mag_speed : false; +} //bool SealEngine_CreateInstanceDebugBoneList(int PluginNumber, int InstanceNumber, int BoneInstanceNumber, int OnCursorIndex, int SelectedIndex); //bool SealEngine_CreateInstanceDebugBoneCollision(int PluginNumber, int InstanceNumber, int BoneInstanceNumber, int OnCursorIndex, int SelectedIndex); //bool SealEngine_GetCameraPos(int PluginNumber, float *X, float *Y, float *Z); @@ -2559,7 +2577,7 @@ HLL_QUIET_UNIMPLEMENTED(false, bool, SealEngine, IsThreadLoadingMode, int Plugin HLL_TODO_EXPORT(LoadInstanceLightParam, SealEngine_LoadInstanceLightParam), \ HLL_EXPORT(StoreInstanceLightParam, SealEngine_StoreInstanceLightParam), \ HLL_EXPORT(SetInstanceUseMagSpeed, SealEngine_SetInstanceUseMagSpeed), \ - HLL_TODO_EXPORT(IsInstanceUseMagSpeed, SealEngine_IsInstanceUseMagSpeed), \ + HLL_EXPORT(IsInstanceUseMagSpeed, SealEngine_IsInstanceUseMagSpeed), \ HLL_TODO_EXPORT(CreateInstanceDebugBoneList, SealEngine_CreateInstanceDebugBoneList), \ HLL_TODO_EXPORT(CreateInstanceDebugBoneCollision, SealEngine_CreateInstanceDebugBoneCollision), \ HLL_TODO_EXPORT(GetCameraPos, SealEngine_GetCameraPos), \