|
1 | 1 | #include "Body.h" |
| 2 | +#include <Ext/Rules/Body.h> |
2 | 3 |
|
3 | 4 | namespace CloakTemp |
4 | 5 | { |
@@ -174,3 +175,41 @@ DEFINE_HOOK(0x4579A5, BuildingClass_ShouldNotCloak_Sensors, 0x6) |
174 | 175 |
|
175 | 176 | return Continue; |
176 | 177 | } |
| 178 | + |
| 179 | +// NOTE: Overrides incorrect Ares hook at the same address. |
| 180 | +DEFINE_HOOK(0x6FCA26, TechnoClass_CanFire_RevertAresOpenTopCloakFix, 0x6) |
| 181 | +{ |
| 182 | + enum { Skip = 0x6FCA4F, Continue = 0x6FCA36, NotApplicable = 0x6FCA5E }; |
| 183 | + |
| 184 | + GET(WeaponTypeClass*, pWeapon, EBX); |
| 185 | + |
| 186 | + if (!pWeapon->DecloakToFire) |
| 187 | + return NotApplicable; |
| 188 | + |
| 189 | + GET(TechnoClass*, pThis, ESI); |
| 190 | + |
| 191 | + if (pThis->InOpenToppedTransport && pThis->Transporter) |
| 192 | + { |
| 193 | + auto const pTransporterTypeExt = TechnoExt::ExtMap.Find(pThis->Transporter)->TypeExtData; |
| 194 | + if (pTransporterTypeExt->OpenTopped_DecloakToFire.Get(RulesExt::Global()->OpenTopped_DecloakToFire)) |
| 195 | + return NotApplicable; |
| 196 | + } |
| 197 | + |
| 198 | + R->EAX(pThis->CloakState); |
| 199 | + return Continue; |
| 200 | +} |
| 201 | + |
| 202 | +DEFINE_HOOK(0x6FCD1D, TechnoClass_CanFire_OpenTopCloakFix, 0x5) |
| 203 | +{ |
| 204 | + GET(TechnoClass*, pThis, ESI); |
| 205 | + GET_STACK(const bool, checkIfTargetInRange, STACK_OFFSET(0x20, 0xC)); |
| 206 | + |
| 207 | + if (checkIfTargetInRange && pThis->InOpenToppedTransport && pThis->Transporter) |
| 208 | + { |
| 209 | + auto const pTransporterTypeExt = TechnoExt::ExtMap.Find(pThis->Transporter)->TypeExtData; |
| 210 | + if (pTransporterTypeExt->OpenTopped_DecloakToFire.Get(RulesExt::Global()->OpenTopped_DecloakToFire)) |
| 211 | + pThis->Transporter->Uncloak(true); |
| 212 | + } |
| 213 | + |
| 214 | + return 0; |
| 215 | +} |
0 commit comments