From 8f87807c92c9dc374fb90ab4f1c62095b56153e4 Mon Sep 17 00:00:00 2001 From: GenericHeroGuy Date: Mon, 10 Feb 2025 01:56:29 +0100 Subject: [PATCH] Fix Lua HUD interpolation --- src/lua_hooklib.c | 18 +++++++++++++++++- src/lua_hudlib.c | 4 ---- src/lua_hudlib_drawlist.c | 17 ++++++++--------- 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/lua_hooklib.c b/src/lua_hooklib.c index bed747a7c..f186ccabf 100644 --- a/src/lua_hooklib.c +++ b/src/lua_hooklib.c @@ -478,6 +478,21 @@ static int call_mapped(Hook_State *hook, const hook_t *map) return map->numHooks; } +static int call_mapped_hud(Hook_State *hook, const hook_t *map) +{ + int k; + + for (k = 0; k < map->numHooks; ++k) + { + hud_interpolate = hud_interpstring = hud_interplatch = false; + hud_interpcounter++; + get_hook(hook, map->ids, k); + call_single_hook(hook); + } + + return map->numHooks; +} + static int call_string_hooks(Hook_State *hook) { const stringhook_t *map = &stringHooks[hook->hook_type]; @@ -654,10 +669,11 @@ void LUA_HookHUD(huddrawlist_h list, int hook_type) begin_hook_values(&hook); LUA_SetHudHook(hook_type, list); + hud_interpcounter = 0; hud_running = true; // local hook init_hook_call(&hook, 0, res_none); - call_mapped(&hook, map); + call_mapped_hud(&hook, map); hud_running = false; } } diff --git a/src/lua_hudlib.c b/src/lua_hudlib.c index a7a4e7e35..d25628404 100644 --- a/src/lua_hudlib.c +++ b/src/lua_hudlib.c @@ -1420,10 +1420,6 @@ boolean LUA_HudEnabled(enum hud option) void LUA_SetHudHook(int hook, huddrawlist_h list) { lua_getref(gL, lib_draw_ref); - - // Update interpolation - hud_interpolate = hud_interpstring = hud_interplatch = false; - hud_interpcounter++; lua_pushlightuserdata(gL, list); lua_setfield(gL, LUA_REGISTRYINDEX, "HUD_DRAW_LIST"); diff --git a/src/lua_hudlib_drawlist.c b/src/lua_hudlib_drawlist.c index f25e477e6..9a12c7b99 100644 --- a/src/lua_hudlib_drawlist.c +++ b/src/lua_hudlib_drawlist.c @@ -35,6 +35,7 @@ enum drawitem_e { DI_DrawString, DI_FadeScreen, DI_DrawTitleCardString, + DI_DrawTitleCardStringBoss, DI_DrawKartString, DI_MAX, }; @@ -56,21 +57,17 @@ typedef struct drawitem_s { INT32 align; // drawString INT32 num; // drawNum, drawPaddedNum, drawPingNum UINT16 color; // fadeScreen + INT32 timer; // drawTitleCardString }; union { fixed_t vscale; // drawStretched fixed_t h; // drawFill INT32 digits; // drawPaddedNum UINT8 strength; // fadeScreen + INT32 threshold; // drawTitleCardString }; UINT8 *colormap; - union { // for title cards - boolean bossmode; - boolean p4; - INT32 timer; - INT32 threshold; - }; // pointers (and size_t's) last, for potentially better packing union { patch_t *patch; @@ -530,12 +527,11 @@ void LUA_HUD_AddDrawTitleCardString( size_t i = AllocateDrawItem(list); drawitem_t *item = &list->items[i]; item->id = GetItemId(); - item->type = DI_DrawTitleCardString; + item->type = bossmode ? DI_DrawTitleCardStringBoss : DI_DrawTitleCardString; item->x = x; item->y = y; item->flags = flags; item->stroffset = CopyString(list, str); - item->bossmode = bossmode; item->timer = timer; item->threshold = threshold; } @@ -688,7 +684,10 @@ void LUA_HUD_DrawList(huddrawlist_h list) V_DrawFadeScreen(item->color, item->strength); break; case DI_DrawTitleCardString: - V_DrawTitleCardString(LERPS(x), LERPS(y), itemstr, item->flags, item->bossmode, item->timer, item->threshold); + V_DrawTitleCardString(LERPS(x), LERPS(y), itemstr, item->flags, false, item->timer, item->threshold); + break; + case DI_DrawTitleCardStringBoss: + V_DrawTitleCardString(LERPS(x), LERPS(y), itemstr, item->flags, true, item->timer, item->threshold); break; case DI_DrawKartString: V_DrawKartString(LERPS(x), LERPS(y), item->flags, itemstr);