Skip to content

Commit 40332c1

Browse files
committed
Fix HUD anm2 offsets, expose stacked/playerhud streaks
1 parent e18ab06 commit 40332c1

File tree

3 files changed

+43
-7
lines changed

3 files changed

+43
-7
lines changed

libzhl/functions/HUD.zhl

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ __thiscall int HUD::GetPlayerHUDLayout(int playerHudIndex, Entity_Player* player
3838

3939

4040

41-
struct HUD depends (PlayerHUD, ANM2, StatHUD) { {{
41+
struct HUD depends (PlayerHUD, ANM2, StatHUD, HUD_Message) { {{
4242
inline PlayerHUD* GetPlayerHUD(int index) {
4343
if (index < 0 || index > 7) {
4444
return nullptr;
@@ -48,12 +48,14 @@ struct HUD depends (PlayerHUD, ANM2, StatHUD) { {{
4848
}}
4949
PlayerHUD _playerHUD[8] : 0x0;
5050
ANM2 _chargeBarSprite : 0x3798;
51-
ANM2 _heartsSprite : 0x38ac;
52-
ANM2 _pickupHUDSprite : 0x39c0;
51+
ANM2 _heartsSprite : 0x39c0;
52+
ANM2 _pickupHUDSprite : 0x3ad4;
5353
ANM2 _cardsPillsSprite : 0x3be8;
54-
ANM2 _streakSprite : 0x5278;
55-
ANM2 _fortuneSprite : 0x5394;
56-
//ANM2 _oldHUDStatsSprite : 0xc3d80;
54+
HUD_Message _messageMain : 0x3cfc; // Used for stage/curse text, at least
55+
HUD_Message _messageStack[6] : 0x3ef0; // Used for item text / pills / etc
56+
HUD_Message _messagePlayerHUD[4] : 0x4aa8; // Mini item text streaks displayed near player huds in co-op
57+
ANM2 _fortuneSprite : 0x5278;
58+
ANM2 _statsSprite : 0x5394;
5759
float _bossHPBarFill : 0x54b0;
5860
bool _isVisible : 0x54e4;
5961
int _hudRefreshType : 0x54e8;

libzhl/functions/HUD_Message.zhl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
struct HUD_Message depends (ANM2) {
2+
ANM2 _streakSprite : 0x20;
3+
} : 0x1f4;

repentogon/LuaInterfaces/HUD/LuaHUD.cpp

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,36 @@ LUA_FUNCTION(Lua_HUDGetCardsPillsSprite) {
4646

4747
LUA_FUNCTION(Lua_HUDGetStreakSprite) {
4848
HUD* hud = lua::GetUserdata<HUD*>(L, 1, lua::Metatables::HUD, "HUD");
49-
ANM2* sprite = &hud->_streakSprite;
49+
50+
ANM2* sprite = &hud->_messageMain._streakSprite;
51+
lua::luabridge::UserdataPtr::push(L, sprite, lua::GetMetatableKey(lua::Metatables::SPRITE));
52+
53+
return 1;
54+
}
55+
56+
LUA_FUNCTION(Lua_HUDGetStackedStreakSprite) {
57+
HUD* hud = lua::GetUserdata<HUD*>(L, 1, lua::Metatables::HUD, "HUD");
58+
const int i = (int)luaL_optinteger(L, 2, 0);
59+
60+
if (i < 0 || i > 5) {
61+
return luaL_error(L, "Invalid HUD streak index %d", i);;
62+
}
63+
64+
ANM2* sprite = &hud->_messageStack[i]._streakSprite;
65+
lua::luabridge::UserdataPtr::push(L, sprite, lua::GetMetatableKey(lua::Metatables::SPRITE));
66+
67+
return 1;
68+
}
69+
70+
LUA_FUNCTION(Lua_HUDGetPlayerStreakSprite) {
71+
HUD* hud = lua::GetUserdata<HUD*>(L, 1, lua::Metatables::HUD, "HUD");
72+
const int i = (int)luaL_optinteger(L, 2, 0);
73+
74+
if (i < 0 || i > 3) {
75+
return luaL_error(L, "Invalid player HUD streak index %d", i);;
76+
}
77+
78+
ANM2* sprite = &hud->_messagePlayerHUD[i]._streakSprite;
5079
lua::luabridge::UserdataPtr::push(L, sprite, lua::GetMetatableKey(lua::Metatables::SPRITE));
5180

5281
return 1;
@@ -117,6 +146,8 @@ HOOK_METHOD(LuaEngine, RegisterClasses, () -> void) {
117146
{ "GetPickupsHUDSprite", Lua_HUDGetPickupsHUDSprite },
118147
{ "GetCardsPillsSprite", Lua_HUDGetCardsPillsSprite },
119148
{ "GetStreakSprite", Lua_HUDGetStreakSprite },
149+
{ "GetStackedStreakSprite", Lua_HUDGetStackedStreakSprite },
150+
{ "GetPlayerStreakSprite", Lua_HUDGetPlayerStreakSprite },
120151
{ "GetFortuneSprite", Lua_HUDGetFortuneSprite },
121152
{ "GetCoopMenuSprite", Lua_HUDGetCoopMenuSprite },
122153
{ "GetInventorySprite", Lua_HUDGetInventorySprite },

0 commit comments

Comments
 (0)