Skip to content

Commit 28a4110

Browse files
committed
TearFlags access for BRIMSTONE_BALL, TECH_DOT, and CHAIN_LIGHTNING
1 parent ce247eb commit 28a4110

File tree

2 files changed

+52
-20
lines changed

2 files changed

+52
-20
lines changed

repentogon/LuaInterfaces/Entities/LuaEntity.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -849,6 +849,18 @@ LUA_FUNCTION(Lua_EntityCanDevolve)
849849
return 1;
850850
}
851851

852+
LUA_FUNCTION(Lua_EntitySetVariant) {
853+
Entity* ent = lua::GetLuabridgeUserdata<Entity*>(L, 1, lua::Metatables::ENTITY, "Entity");
854+
855+
if (Entity_Effect* effect = ent->ToEffect()) {
856+
effect->_varData = BitSet128();
857+
}
858+
859+
ent->_variant = (unsigned int)luaL_checkinteger(L, 2);
860+
861+
return 0;
862+
}
863+
852864

853865
HOOK_METHOD(LuaEngine, RegisterClasses, () -> void) {
854866
super();
@@ -946,4 +958,6 @@ HOOK_METHOD(LuaEngine, RegisterClasses, () -> void) {
946958
{ NULL, NULL }
947959
};
948960
lua::RegisterFunctions(_state, lua::Metatables::ENTITY, functions);
961+
962+
lua::RegisterVariableSetter(_state, lua::Metatables::ENTITY, "Variant", Lua_EntitySetVariant);
949963
}

repentogon/LuaInterfaces/Entities/LuaEntityEffect.cpp

Lines changed: 38 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#include <unordered_set>
2+
13
#include "IsaacRepentance.h"
24
#include "LuaCore.h"
35
#include "HookSystem.h"
@@ -50,19 +52,29 @@ LUA_FUNCTION(Lua_EffectCreateLootPreview) {
5052
LUA_FUNCTION(Lua_GetGridEntityDesc) {
5153
auto* entity = lua::GetLuabridgeUserdata<Entity_Effect*>(L, 1, lua::Metatables::ENTITY_EFFECT, "EntityEffect");
5254

53-
if (entity->_variant != 136) {
55+
if (entity->_variant == 136) {
56+
lua::luabridge::UserdataPtr::push(L, (GridEntityDesc*)&entity->_varData, lua::GetMetatableKey(lua::Metatables::GRID_ENTITY_DESC));
57+
} else {
5458
lua_pushnil(L);
55-
return 1;
5659
}
57-
58-
lua::luabridge::UserdataPtr::push(L, (GridEntityDesc*)&entity->_varData, lua::GetMetatableKey(lua::Metatables::GRID_ENTITY_DESC));
60+
5961
return 1;
6062
}
6163

62-
LUA_FUNCTION(Lua_GetAquariusTearFlags) {
64+
static const std::unordered_set<int> tearflagEffectVariants = {
65+
54, // PLAYER_CREEP_HOLYWATER_TRAIL (Aquarius)
66+
113, // BRIMSTONE_BALL
67+
126, // TECH_DOT
68+
167, // CHAIN_LIGHTNING
69+
};
70+
static bool AllowTearflagAccess(Entity_Effect* effect) {
71+
return tearflagEffectVariants.count(effect->_variant);
72+
}
73+
74+
LUA_FUNCTION(Lua_GetTearFlags) {
6375
auto* entity = lua::GetLuabridgeUserdata<Entity_Effect*>(L, 1, lua::Metatables::ENTITY_EFFECT, "EntityEffect");
6476

65-
if (entity->_variant == 54) {
77+
if (AllowTearflagAccess(entity)) {
6678
lua::luabridge::UserdataValue<BitSet128>::push(L, lua::GetMetatableKey(lua::Metatables::BITSET_128), entity->_varData);
6779
} else {
6880
lua_pushnil(L);
@@ -71,39 +83,39 @@ LUA_FUNCTION(Lua_GetAquariusTearFlags) {
7183
return 1;
7284
}
7385

74-
LUA_FUNCTION(Lua_SetAquariusTearFlags) {
86+
LUA_FUNCTION(Lua_SetTearFlags) {
7587
auto* entity = lua::GetLuabridgeUserdata<Entity_Effect*>(L, 1, lua::Metatables::ENTITY_EFFECT, "EntityEffect");
7688

77-
if (entity->_variant == 54) {
89+
if (AllowTearflagAccess(entity)) {
7890
entity->_varData = *lua::GetLuabridgeUserdata<BitSet128*>(L, 2, lua::Metatables::BITSET_128, "BitSet128");
7991
}
8092

8193
return 0;
8294
}
8395

84-
LUA_FUNCTION(Lua_AddAquariusTearFlags) {
96+
LUA_FUNCTION(Lua_AddTearFlags) {
8597
auto* entity = lua::GetLuabridgeUserdata<Entity_Effect*>(L, 1, lua::Metatables::ENTITY_EFFECT, "EntityEffect");
8698

87-
if (entity->_variant == 54) {
99+
if (AllowTearflagAccess(entity)) {
88100
entity->_varData.AddFlags(*lua::GetLuabridgeUserdata<BitSet128*>(L, 2, lua::Metatables::BITSET_128, "BitSet128"));
89101
}
90102

91103
return 0;
92104
}
93105

94-
LUA_FUNCTION(Lua_ClearAquariusTearFlags) {
106+
LUA_FUNCTION(Lua_ClearTearFlags) {
95107
auto* entity = lua::GetLuabridgeUserdata<Entity_Effect*>(L, 1, lua::Metatables::ENTITY_EFFECT, "EntityEffect");
96108

97-
if (entity->_variant == 54) {
109+
if (AllowTearflagAccess(entity)) {
98110
entity->_varData.RemoveFlags(*lua::GetLuabridgeUserdata<BitSet128*>(L, 2, lua::Metatables::BITSET_128, "BitSet128"));
99111
}
100112

101113
return 0;
102114
}
103115

104-
LUA_FUNCTION(Lua_HasAquariusTearFlags) {
116+
LUA_FUNCTION(Lua_HasTearFlags) {
105117
auto* entity = lua::GetLuabridgeUserdata<Entity_Effect*>(L, 1, lua::Metatables::ENTITY_EFFECT, "EntityEffect");
106-
lua_pushboolean(L, entity->_variant == 54 && entity->_varData.HasAny(*lua::GetLuabridgeUserdata<BitSet128*>(L, 2, lua::Metatables::BITSET_128, "BitSet128")));
118+
lua_pushboolean(L, AllowTearflagAccess(entity) && entity->_varData.HasAny(*lua::GetLuabridgeUserdata<BitSet128*>(L, 2, lua::Metatables::BITSET_128, "BitSet128")));
107119
return 1;
108120
}
109121

@@ -114,15 +126,21 @@ HOOK_METHOD(LuaEngine, RegisterClasses, () -> void) {
114126

115127
luaL_Reg functions[] = {
116128
{ "GetGridEntityDesc", Lua_GetGridEntityDesc },
117-
{ "GetAquariusTearFlags", Lua_GetAquariusTearFlags },
118-
{ "SetAquariusTearFlags", Lua_SetAquariusTearFlags },
119-
{ "AddAquariusTearFlags", Lua_AddAquariusTearFlags },
120-
{ "ClearAquariusTearFlags", Lua_ClearAquariusTearFlags },
121-
{ "HasAquariusTearFlags", Lua_HasAquariusTearFlags },
129+
{ "GetTearFlags", Lua_GetTearFlags },
130+
{ "SetTearFlags", Lua_SetTearFlags },
131+
{ "AddTearFlags", Lua_AddTearFlags },
132+
{ "ClearTearFlags", Lua_ClearTearFlags },
133+
{ "HasTearFlags", Lua_HasTearFlags },
134+
// Previous function names
135+
{ "GetAquariusTearFlags", Lua_GetTearFlags },
136+
{ "SetAquariusTearFlags", Lua_SetTearFlags },
137+
{ "AddAquariusTearFlags", Lua_AddTearFlags },
138+
{ "ClearAquariusTearFlags", Lua_ClearTearFlags },
139+
{ "HasAquariusTearFlags", Lua_HasTearFlags },
122140
{ NULL, NULL }
123141
};
124142
lua::RegisterFunctions(_state, lua::Metatables::ENTITY_EFFECT, functions);
125143

126144
lua::RegisterGlobalClassFunction(_state, "EntityEffect", "CreateLight", Lua_EffectCreateLight);
127145
lua::RegisterGlobalClassFunction(_state, "EntityEffect", "CreateLootPreview", Lua_EffectCreateLootPreview);
128-
}
146+
}

0 commit comments

Comments
 (0)