Fix Lua HUD interpolation

This commit is contained in:
GenericHeroGuy 2025-02-10 01:56:29 +01:00
parent d639158a59
commit 8f87807c92
3 changed files with 25 additions and 14 deletions

View file

@ -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;
}
}

View file

@ -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");

View file

@ -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);