Skip to content

Commit 1229205

Browse files
committed
Minor optimizations for airstrike hooks
- Consolidate BuildingClass_AI hook to the existing one - Replace the tint intensity hook with redirecting the single function call that game does
1 parent a1a18c0 commit 1229205

File tree

3 files changed

+23
-7
lines changed

3 files changed

+23
-7
lines changed

YRpp

src/Ext/Building/Hooks.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ DEFINE_HOOK(0x43FE69, BuildingClass_AI, 0xA)
2222
pExt->DisplayIncomeString();
2323
pExt->ApplyPoweredKillSpawns();
2424

25+
// Force airstrike targets to redraw every frame to account for tint intensity fluctuations.
26+
if (TechnoExt::ExtMap.Find(pThis)->AirstrikeTargetingMe)
27+
pThis->Mark(MarkType::Change);
28+
2529
return 0;
2630
}
2731

src/Ext/Techno/Hooks.Airstrike.cpp

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ DEFINE_HOOK(0x41D604, AirstrikeClass_PointerGotInvalid_ResetForTarget, 0x6)
140140
return SkipGameCode;
141141
}
142142

143-
DEFINE_HOOK(0x65E97F, HouseClass_CreateAirstrike_SetTaretForUnit, 0x6)
143+
DEFINE_HOOK(0x65E97F, HouseClass_CreateAirstrike_SetTargetForUnit, 0x6)
144144
{
145145
enum { SkipGameCode = 0x65E992 };
146146

@@ -198,6 +198,9 @@ DEFINE_HOOK(0x70E92F, TechnoClass_UpdateAirstrikeTint, 0x5)
198198
return TechnoExt::ExtMap.Find(pThis)->AirstrikeTargetingMe ? ContinueIn : Skip;
199199
}
200200

201+
// 9.6.2025 - Starkku: Moved to BuildingClass_AI hook in Buildings/Hooks.cpp for optimization's sake.
202+
// Said hook is later but shouldn't matter in this case, the purpose is to force redraw on every frame.
203+
/*
201204
DEFINE_HOOK(0x43FDD6, BuildingClass_AI_Airstrike, 0x6)
202205
{
203206
enum { SkipGameCode = 0x43FDF1 };
@@ -208,7 +211,7 @@ DEFINE_HOOK(0x43FDD6, BuildingClass_AI_Airstrike, 0x6)
208211
pThis->Mark(MarkType::Change);
209212
210213
return SkipGameCode;
211-
}
214+
}*/
212215

213216
DEFINE_HOOK(0x43F9E0, BuildingClass_Mark_Airstrike, 0x6)
214217
{
@@ -255,13 +258,22 @@ DEFINE_HOOK(0x456E5A, BuildingClass_Flash_Airstrike, 0x6)
255258
return TechnoExt::ExtMap.Find(pThis)->AirstrikeTargetingMe ? ContinueTintIntensity : NonAirstrike;
256259
}
257260

258-
DEFINE_HOOK(0x456FD3, BuildingClass_GetEffectTintIntensity_Airstrike, 0x6)
261+
class BuildingClassFake final : public BuildingClass
259262
{
260-
enum { ContinueTintIntensity = 0x457002, NonAirstrike = 0x45700F };
263+
int _GetAirstrikeInvulnerabilityIntensity(int intensity) const;
264+
};
261265

262-
GET(BuildingClass*, pThis, ESI);
266+
int BuildingClassFake::_GetAirstrikeInvulnerabilityIntensity(int currentIntensity) const
267+
{
268+
auto const pBuilding = (BuildingClass*)this;
269+
int newIntensity = pBuilding->GetFlashingIntensity(currentIntensity);
263270

264-
return TechnoExt::ExtMap.Find(pThis)->AirstrikeTargetingMe ? ContinueTintIntensity : NonAirstrike;
271+
if (pBuilding->IsIronCurtained() || TechnoExt::ExtMap.Find(pBuilding)->AirstrikeTargetingMe)
272+
newIntensity = pBuilding->GetEffectTintIntensity(newIntensity);
273+
274+
return newIntensity;
265275
}
266276

277+
DEFINE_FUNCTION_JUMP(CALL, 0x450A5D, BuildingClassFake::_GetAirstrikeInvulnerabilityIntensity); // BuildingClass_Animation_AI
278+
267279
#pragma endregion

0 commit comments

Comments
 (0)