Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -365,6 +365,10 @@ MigrationBackup/
# Fody - auto-generated XML schema
FodyWeavers.xsd

# Google Drive File Stream
/.tmp.driveupload
/.tmp.drivedownload

###########
# Allowed #
###########
Expand Down
3 changes: 3 additions & 0 deletions EEex-v2.6.6.0/headers/EEex-v2.6.6.0/EEex.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,9 @@ namespace EEex {

// op101
bool Opcode_Hook_Op101_ShouldEffectBypassImmunity(CGameEffect* pEffect);
// op122 / op255
void Opcode_Hook_CGameEffectCreateItem_BeforePlaceItem(CGameEffect* pEffect, CItem* pItem);
void Opcode_Hook_CGameEffectCreateItem_AfterPlaceItem(CGameEffect* pEffect, CGameSprite* pSprite, CItem* pItem);
// op248
void Opcode_Hook_OnOp248AddTail(CGameEffect* pOp248, CGameEffect* pEffect);
// op249
Expand Down
48 changes: 48 additions & 0 deletions EEex-v2.6.6.0/source/EEex-v2.6.6.0/EEex.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3391,6 +3391,54 @@ bool EEex::Opcode_Hook_Op101_ShouldEffectBypassImmunity(CGameEffect* pEffect) {
STUTTER_LOG_END
}

//-----------------------------------------//
// op122/255 - CGameEffectCreateItem Hooks //
//-----------------------------------------//

void EEex::Opcode_Hook_CGameEffectCreateItem_BeforePlaceItem(CGameEffect* pEffect, CItem* pItem) {

STUTTER_LOG_START(void, "EEex::Opcode_Hook_CGameEffectCreateItem_BeforePlaceItem")

if (pEffect != nullptr && pItem != nullptr && pEffect->m_dWFlags > 0) {
// The Create Item opcode reuses m_dWFlags as an item-flag override.
pItem->m_flags = pEffect->m_dWFlags;
}

STUTTER_LOG_END
}

void EEex::Opcode_Hook_CGameEffectCreateItem_AfterPlaceItem(CGameEffect* pEffect, CGameSprite* pSprite, CItem* pItem) {

STUTTER_LOG_START(void, "EEex::Opcode_Hook_CGameEffectCreateItem_AfterPlaceItem")

if (pEffect == nullptr || pSprite == nullptr || pItem == nullptr || (pEffect->m_special & 1) == 0) {
return;
}

int slot = -1;
for (int i = 0; i < 39; ++i) {
if (pSprite->m_equipment.m_items.data[i] == pItem) {
slot = i;
break;
}
}

// The opcode stores only a single scalar aux value. Clear the field when the placed
// item didn't end up in the live equipment array so callers never observe a stale slot.
lua_State* const L = luaState();
getUDAux(L, pSprite);
if (slot >= 0) {
lua_pushinteger(L, static_cast<lua_Integer>(slot));
}
else {
lua_pushnil(L);
}
lua_setfield(L, -2, "EEex_CGameEffectCreateItem_Slot");
lua_pop(L, 1);

STUTTER_LOG_END
}

//-------//
// op248 //
//-------//
Expand Down
3 changes: 3 additions & 0 deletions EEex-v2.6.6.0/source/EEex-v2.6.6.0/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,9 @@ static void exportPatterns() {

// op101
exportPattern(TEXT("EEex::Opcode_Hook_Op101_ShouldEffectBypassImmunity"), EEex::Opcode_Hook_Op101_ShouldEffectBypassImmunity);
// op122 / op255
exportPattern(TEXT("EEex::Opcode_Hook_CGameEffectCreateItem_BeforePlaceItem"), EEex::Opcode_Hook_CGameEffectCreateItem_BeforePlaceItem);
exportPattern(TEXT("EEex::Opcode_Hook_CGameEffectCreateItem_AfterPlaceItem"), EEex::Opcode_Hook_CGameEffectCreateItem_AfterPlaceItem);
// op248
exportPattern(TEXT("EEex::Opcode_Hook_OnOp248AddTail"), EEex::Opcode_Hook_OnOp248AddTail);
// op249
Expand Down