Ares
|
#include <AnimClass.h>
#include <BulletClass.h>
#include <CCINIClass.h>
#include <CellSpread.h>
#include <HouseClass.h>
#include <InfantryClass.h>
#include <LightSourceClass.h>
#include <LocomotionClass.h>
#include <LoadProgressManager.h>
#include <MapClass.h>
#include <MixFileClass.h>
#include <TacticalClass.h>
#include <TechnoClass.h>
#include <TemporalClass.h>
#include <UnitTypeClass.h>
#include <WarheadTypeClass.h>
#include "Debug.h"
#include "../Ares.h"
#include "../Ext/Rules/Body.h"
#include "../Ext/BuildingType/Body.h"
#include "../Ext/BulletType/Body.h"
#include "../Ext/Techno/Body.h"
#include "../Ext/TechnoType/Body.h"
#include "../Ext/House/Body.h"
#include "../Ext/Side/Body.h"
#include "../Ext/HouseType/Body.h"
#include "../Ext/WeaponType/Body.h"
#include "../Ext/WarheadType/Body.h"
#include "../Utilities/Template.h"
#include <cstdlib>
Defines | |
#define | XL(r) |
Functions | |
DEFINE_HOOK (5CB0B1, QueryPerformance, 5) | |
DEFINE_HOOK (6BD7E3, Expand_MIX_Reorg, 5) | |
DEFINE_HOOK (52BB64, Expand_MIX_Deorg, 5) | |
DEFINE_HOOK (53029E, Load_Bootstrap_AresMIX, 5) | |
DEFINE_HOOK (6BE9BD, sub_6BE1C0, 6) | |
DEFINE_HOOK (715857, TechnoTypeClass_LoadFromINI_LimitPalettes, 5) | |
DEFINE_HOOK (441D25, BuildingClass_Destroy, 0A) | |
DEFINE_HOOK (71A922, TemporalClass_Update, 6) | |
DEFINE_HOOK (71AF2B, TemporalClass_Fire_UnwarpableA, A) | |
DEFINE_HOOK (71AF76, TemporalClass_Fire_UnwarpableB, 9) | |
DEFINE_HOOK (4D98DD, Insignificant_UnitLost, 6) | |
DEFINE_HOOK (424B23, AnimClass_Update, 6) | |
DEFINE_HOOK (6BB9DD, WinMain_LogNonsense, 5) | |
DEFINE_HOOK (531726, StupidPips1, 5) | |
DEFINE_HOOK (53173F, StupidPips2, 5) | |
DEFINE_HOOK (5F698F, ObjectClass_GetCell, 5) | |
DEFINE_HOOK (6FCA30, TechnoClass_GetWeaponState, 6) | |
DEFINE_HOOK (671152, RulesClass_Addition_General, 6) | |
DEFINE_HOOK (4693B0, BulletClass_Fire_Overpower, 6) | |
DEFINE_HOOK (4444E2, BuildingClass_KickOutUnit, 6) | |
DEFINE_HOOK (42461D, AnimClass_Update_Damage, 6) DEFINE_HOOK_AGAIN(42463A | |
Variables | |
AnimClass_Update_Damage |
#define XL | ( | r | ) |
GET(TechnoClass *, T, ECX); \ Debug::Log("%c: [%s] receiving...\n", r, T->GetType()->ID); \ Debug::Log("\t Subject = %s\n", ((TechnoClass *)R->get_StackVar32(0x4))->GetType()->ID); \ Debug::Log("\t command = %d\n", R->get_StackVar32(0x8)); \ Debug::Log("\t unknown = %d\n", R->get_StackVar32(0xC)); \ for(DWORD i = 0x10; i < 0x40; i += 4) { \ Debug::Log("\t 0x%02x = 0x%08X\n", i, R->get_StackVar32(i)); \ } \ return 0;
DEFINE_HOOK | ( | 5CB0B1 | , |
QueryPerformance | , | ||
5 | |||
) |
{ if(!R->EAX()) { R->EAX(1); } return 0; }
DEFINE_HOOK | ( | 42461D | , |
AnimClass_Update_Damage | , | ||
6 | |||
) |
DEFINE_HOOK | ( | 4444E2 | , |
BuildingClass_KickOutUnit | , | ||
6 | |||
) |
{ GET(BuildingClass *, Src, ESI); GET(BuildingClass *, Tst, EBP); if(Src != Tst && Tst->GetCurrentMission() == mission_Guard && !Tst->IsUnderEMP() // issue #1571 && Tst->Type->Factory == Src->Type->Factory && Tst->Type->Naval == Src->Type->Naval && !Tst->Factory) { return 0x44451F; } return 0x444508; }
DEFINE_HOOK | ( | 4693B0 | , |
BulletClass_Fire_Overpower | , | ||
6 | |||
) |
{ GET(TechnoClass *, pT, ECX); switch(pT->WhatAmI()) { case abs_Infantry: case abs_Unit: return 0x4693BC; default: return 0x469AA4; } }
DEFINE_HOOK | ( | 671152 | , |
RulesClass_Addition_General | , | ||
6 | |||
) |
{
GET(RulesClass *, Rules, ESI);
Rules->PrismSupportModifier /= 100;
return 0;
}
DEFINE_HOOK | ( | 6FCA30 | , |
TechnoClass_GetWeaponState | , | ||
6 | |||
) |
{
GET(TechnoClass *, Techno, ESI);
TechnoClass *Transport = Techno->Transporter;
RET_UNLESS(Transport && Transport->CloakState);
return 0x6FCA4F;
}
DEFINE_HOOK | ( | 5F698F | , |
ObjectClass_GetCell | , | ||
5 | |||
) |
{
return 0x5F69B2;
}
DEFINE_HOOK | ( | 53173F | , |
StupidPips2 | , | ||
5 | |||
) |
{
return 0x531749;
}
DEFINE_HOOK | ( | 531726 | , |
StupidPips1 | , | ||
5 | |||
) |
{
return 0x53173A;
}
DEFINE_HOOK | ( | 6BB9DD | , |
WinMain_LogNonsense | , | ||
5 | |||
) |
{
return 0x6BBE2B;
}
DEFINE_HOOK | ( | 424B23 | , |
AnimClass_Update | , | ||
6 | |||
) |
{
GET(InfantryClass *, I, EDI);
I->UnInit();
GET(AnimClass *, A, ESI);
A->TimeToDie = 1;
A->UnInit();
return 0x424B29;
}
DEFINE_HOOK | ( | 4D98DD | , |
Insignificant_UnitLost | , | ||
6 | |||
) |
{
GET(TechnoClass *, t, ESI);
TechnoTypeClass *T = t->GetTechnoType();
return (T->Insignificant || T->DontScore) ? 0x4D9916 : 0;
}
DEFINE_HOOK | ( | 71AF76 | , |
TemporalClass_Fire_UnwarpableB | , | ||
9 | |||
) |
{ GET(TechnoClass *, T, EDI); // now it has been checked: this is warpable. // free captured and destroy spawned units. if (T->SpawnManager) { T->SpawnManager->KillNodes(); } if (T->CaptureManager) { T->CaptureManager->FreeAll(); } // always resume normally. return 0; }
DEFINE_HOOK | ( | 71AF2B | , |
TemporalClass_Fire_UnwarpableA | , | ||
A | |||
) |
{ // skip freeing captured and destroying spawned units, // as it is not clear here if this is warpable at all. return 0x71AF4D; }
DEFINE_HOOK | ( | 71A922 | , |
TemporalClass_Update | , | ||
6 | |||
) |
{
return 0x71A97D;
}
DEFINE_HOOK | ( | 441D25 | , |
BuildingClass_Destroy | , | ||
0A | |||
) |
{
return 0x441D37;
}
DEFINE_HOOK | ( | 715857 | , |
TechnoTypeClass_LoadFromINI_LimitPalettes | , | ||
5 | |||
) |
{
return 0x715876;
}
DEFINE_HOOK | ( | 6BE9BD | , |
sub_6BE1C0 | , | ||
6 | |||
) |
{ Ares::UninitOwnResources(); return 0; }
DEFINE_HOOK | ( | 53029E | , |
Load_Bootstrap_AresMIX | , | ||
5 | |||
) |
{ Ares::InitOwnResources(); return 0; }
DEFINE_HOOK | ( | 52BB64 | , |
Expand_MIX_Deorg | , | ||
5 | |||
) |
{
R->AL(1);
return 0x52BB69;
}
DEFINE_HOOK | ( | 6BD7E3 | , |
Expand_MIX_Reorg | , | ||
5 | |||
) |
{
MixFileClass::Bootstrap();
return 0;
}