Skip to content

Commit

Permalink
Merge branch 'develop' into origin/branch/exclusive-sw-sidebar
Browse files Browse the repository at this point in the history
  • Loading branch information
NetsuNegi authored Dec 21, 2024
2 parents ad89d94 + 5ac6ce5 commit 3751cb4
Show file tree
Hide file tree
Showing 15 changed files with 144 additions and 58 deletions.
1 change: 1 addition & 0 deletions CREDITS.md
Original file line number Diff line number Diff line change
Expand Up @@ -410,3 +410,4 @@ This page lists all the individual contributions to the project by their author.
- **Damfoos** - extensive and thorough testing
- **Dmitry Volkov** - extensive and thorough testing
- **Rise of the East community** - extensive playtesting of in-dev features
- **Aephiex** - fixed Ares academy not working on the initial payloads of vehicles built from a war factory
5 changes: 3 additions & 2 deletions docs/Fixed-or-Improved-Logics.md
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ This page describes all ingame logics that are fixed or improved in Phobos witho
- Fixed Nuke & Dominator Level lighting not applying to AircraftTypes.
- Projectiles created from `AirburstWeapon` now remember the WeaponType and can apply radiation etc.
- Fixed damaged aircraft not repairing on `UnitReload=true` docks unless they land on the dock first.
- Certain global tileset indices (`ShorePieces`, `WaterSet`, `CliffSet`, `WaterCliffs`, `WaterBridge`, `BridgeSet` and `WoodBridgeSet`) are now correctly parsed for Lunar theater.
- Certain global tileset indices (`ShorePieces`, `WaterSet`, `CliffSet`, `WaterCliffs`, `WaterBridge`, `BridgeSet` and `WoodBridgeSet`) can now be toggled to be parsed for lunar theater by setting `[General]` -> `ApplyLunarFixes` to true in `lunarmd.ini`. Do note that enabling this without fixing f.ex `WoodBridgeTileSet` pointing to a tileset with `TilesInSet=0` will cause issues in-game.
- Fixed infantry `SecondaryFire` / `SecondaryProne` sequences being displayed in water instead of `WetAttack`.
- Fixed objects with ally target and `AttackFriendlies=true` having their target reset every frame, particularly AI-owned buildings.
- `<Player @ X>` can now be used as owner for pre-placed objects on skirmish and multiplayer maps.
Expand All @@ -191,6 +191,7 @@ This page describes all ingame logics that are fixed or improved in Phobos witho
- Fixed an issue introduced by Ares that caused `Grinding=true` building `ActiveAnim` to be incorrectly restored while `SpecialAnim` was playing and the building was sold, erased or destroyed.
- Fixed Ares' Abductor weapon leaves permanent placement stats when abducting moving vehicles.
- Suppressed Ares' swizzle warning when parsing `Tags` and `TaskForces` (typically begin with `[Developer fatal]Pointer 00000000 declared change to both`).
- Fixed Academy *(Ares feature)* not working on the initial payloads *(Ares feature)* of vehicles built from a war factory.

## Aircraft

Expand Down Expand Up @@ -311,7 +312,7 @@ LargeFireDistances=0.4375 ; list of floating point values, distance in
```

```{note}
Save for the change that `Flamer? does not spawn animations if the parent animation is in air, the default settings should provide identical results to similar feature from Ares.
Save for the change that `Flamer` does not spawn animations if the parent animation is in air, the default settings should provide identical results to similar feature from Ares.
```

### Layer on animations attached to objects
Expand Down
2 changes: 1 addition & 1 deletion docs/New-or-Enhanced-Logics.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ This page describes all the engine features that are either new and introduced b
- `Crit.AllowWarheads` can be used to list only Warheads that can benefit from this critical hit chance multiplier and `Crit.DisallowWarheads` weapons that are not allowed to, respectively.
- `RevengeWeapon` can be used to temporarily grant the specified weapon as a [revenge weapon](#revenge-weapon) for the attached object.
- `RevengeWeapon.AffectsHouses` customizes which houses can trigger the revenge weapon.
- `ReflectDamage` can be set to true to have any positive damage dealt to the object the effect is attached to be reflected back to the attacker. `ReflectDamage.Warhead` determines which Warhead is used to deal the damage, defaults to `[CombatDamage]`->`C4Warhead`. If `ReflectDamage.Warhead` is set to true, the Warhead is fully detonated instead of used to simply deal damage. `ReflectDamage.Multiplier` is a multiplier to the damage received and then reflected back. Already reflected damage cannot be further reflected back.
- `ReflectDamage` can be set to true to have any positive damage dealt to the object the effect is attached to be reflected back to the attacker. `ReflectDamage.Warhead` determines which Warhead is used to deal the damage, defaults to `[CombatDamage]`->`C4Warhead`. If `ReflectDamage.Warhead.Detonate` is set to true, the Warhead is fully detonated instead of used to simply deal damage. `ReflectDamage.Multiplier` is a multiplier to the damage received and then reflected back. Already reflected damage cannot be further reflected back.
- Warheads can prevent reflect damage from occuring by setting `SuppressReflectDamage` to true. `SuppressReflectDamage.Types` can control which AttachEffectTypes' reflect damage is suppressed, if none are listed then all of them are suppressed.
- `DisableWeapons` can be used to disable ability to fire any and all weapons.
- On TechnoTypes with `OpenTopped=true`, `OpenTopped.CheckTransportDisableWeapons` can be set to true to make passengers not be able to fire out if transport's weapons are disabled by `DisableWeapons`.
Expand Down
4 changes: 3 additions & 1 deletion docs/Whats-New.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ You can use the migration utility (can be found on [Phobos supplementaries repo]

#### From post-0.3 devbuilds

- Lunar theater tileset parsing unhardcoding is now only applied if `lunarmd.ini` has `[General]` -> `ApplyLunarFixes` set to true.
- `Units.DisableRepairCost` was changed to `Units.UseRepairCost` (note inverted expected value) as it no longer has discrete default value and affects `Hospital=true` buildings, infantry do not have repair cost by default.
- Critical hit animations created by `Crit.AnimOnAffectedTargets=true` Warheads no longer default to `AnimList.PickRandom` if `Crit.AnimList.PickRandom` is not set.
- `SelfHealGainType` value `none` has been changed to `noheal` due to `none` being treated as a blank string and not parsed by the game.
Expand Down Expand Up @@ -547,7 +548,7 @@ Vanilla fixes:
- Removed the 0 damage effect from `InfDeath=9` warheads to in-air infantries (by Trsdy)
- Projectiles created from `AirburstWeapon` now remember their WeaponType and can apply radiation etc. (by Starkku)
- Fixed damaged aircraft not repairing on `UnitReload=true` docks unless they land on the dock first (by Starkku)
- Certain global tileset indices (`ShorePieces`, `WaterSet`, `CliffSet`, `WaterCliffs`, `WaterBridge`, `BridgeSet` and `WoodBridgeSet`) are now correctly parsed for Lunar theater (by Starkku)
- Certain global tileset indices (`ShorePieces`, `WaterSet`, `CliffSet`, `WaterCliffs`, `WaterBridge`, `BridgeSet` and `WoodBridgeSet`) can now be toggled to be parsed for lunar theater (by Starkku)
- Fixed infantry `SecondaryFire` / `SecondaryProne` sequences being displayed in water instead of `WetAttack` (by Starkku)
- Fixed objects with ally target and `AttackFriendlies=true` having their target reset every frame, particularly AI-owned buildings (by Starkku)
- Follower vehicle index for preplaced vehicles in maps is now explicitly constrained to `[Units]` list in map files and is no longer thrown off by vehicles that could not be created or created vehicles having other vehicles as initial passengers (by Starkku)
Expand Down Expand Up @@ -610,6 +611,7 @@ Fixes / interactions with other extensions:
- Appended Ares' `SW.Shots` usage to extended tooltips (by Trsdy)
- Fixed Ares' Abductor weapon leaves permanent placement stats when abducting moving vehicles (by Trsdy)
- Suppressed Ares' swizzle warning when parsing `Tags` and `TaskForces` (by Trsdy)
- Fixed Academy *(Ares feature)* not working on the initial payloads *(Ares feature)* of vehicles built from a war factory. (by Aephiex)
</details>
### 0.3.0.1
Expand Down
2 changes: 1 addition & 1 deletion src/Ext/Bullet/Body.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ void BulletExt::ExtData::InitializeLaserTrails()

for (auto const& idxTrail : pTypeExt->LaserTrail_Types)
{
this->LaserTrails.push_back(LaserTrailClass { &LaserTrailTypeClass::Array[idxTrail], pOwner });
this->LaserTrails.emplace_back(LaserTrailTypeClass::Array[idxTrail].get(), pOwner);
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/Ext/Bullet/Hooks.DetonateLogics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ DEFINE_HOOK(0x469C46, BulletClass_Logics_DamageAnimSelected, 0x8)
{
bool createAll = pWHExt->AnimList_CreateAll;

if (pWHExt->Crit_Active && !pWHExt->Crit_AnimOnAffectedTargets)
if (pWHExt->Crit_Active && pWHExt->Crit_AnimList.size() > 0 && !pWHExt->Crit_AnimOnAffectedTargets)
{
createAll = pWHExt->Crit_AnimList_CreateAll.Get(createAll);

Expand Down
51 changes: 18 additions & 33 deletions src/Ext/TAction/Body.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -277,8 +277,8 @@ bool TActionExt::RunSuperWeaponAt(TActionClass* pThis, int X, int Y)
if (SuperWeaponTypeClass::Array->Count > 0)
{
int swIdx = pThis->Param3;
int houseIdx = -1;
std::vector<int> housesListIdx;
HouseClass* pExecuteHouse = nullptr; // House who will fire the SW.
std::vector<HouseClass*> housesList;
CellStruct targetLocation = { (short)X, (short)Y };

do
Expand All @@ -291,15 +291,6 @@ bool TActionExt::RunSuperWeaponAt(TActionClass* pThis, int X, int Y)
}
while (!MapClass::Instance->IsWithinUsableArea(targetLocation, false));

// Skip this check to use FindByCountryIndex
// Only valid House indexes
//if ((pThis->Param4 >= HouseClass::Array->Count
// && pThis->Param4 < HouseClass::PlayerAtA)
// || pThis->Param4 > (HouseClass::PlayerAtA + HouseClass::Array->Count - 3))
//{
// return true;
//}

switch (pThis->Param4)
{
case -1:
Expand All @@ -310,12 +301,12 @@ bool TActionExt::RunSuperWeaponAt(TActionClass* pThis, int X, int Y)
&& !pHouse->IsObserver()
&& !pHouse->Type->MultiplayPassive)
{
housesListIdx.push_back(pHouse->ArrayIndex);
housesList.push_back(pHouse);
}
}

if (housesListIdx.size() > 0)
houseIdx = housesListIdx.at(ScenarioClass::Instance->Random.RandomRanged(0, housesListIdx.size() - 1));
if (housesList.size() > 0)
pExecuteHouse = housesList[ScenarioClass::Instance->Random.RandomRanged(0, housesList.size() - 1)];
else
return true;

Expand All @@ -327,14 +318,11 @@ bool TActionExt::RunSuperWeaponAt(TActionClass* pThis, int X, int Y)
{
if (pHouseNeutral->IsNeutral())
{
houseIdx = pHouseNeutral->ArrayIndex;
pExecuteHouse = pHouseNeutral;
break;
}
}

if (houseIdx < 0)
return true;

break;

case -3:
Expand All @@ -345,38 +333,35 @@ bool TActionExt::RunSuperWeaponAt(TActionClass* pThis, int X, int Y)
&& !pHouse->Defeated
&& !pHouse->IsObserver())
{
housesListIdx.push_back(pHouse->ArrayIndex);
housesList.push_back(pHouse);
}
}

if (housesListIdx.size() > 0)
houseIdx = housesListIdx.at(ScenarioClass::Instance->Random.RandomRanged(0, housesListIdx.size() - 1));
if (housesList.size() > 0)
pExecuteHouse = housesList[ScenarioClass::Instance->Random.RandomRanged(0, housesList.size() - 1)];
else
return true;

break;

default:
if (pThis->Param4 >= 0)
houseIdx = pThis->Param4;
pExecuteHouse = HouseClass::Index_IsMP(pThis->Param4) ? HouseClass::FindByIndex(pThis->Param4) : HouseClass::FindByCountryIndex(pThis->Param4);
else
return true;

break;
}

if (HouseClass* pHouse = HouseClass::Index_IsMP(houseIdx) ? HouseClass::FindByIndex(houseIdx) : HouseClass::FindByCountryIndex(houseIdx))
if (pExecuteHouse)
{
if (auto const pSuper = pHouse->Supers.GetItem(swIdx))
{
int oldstart = pSuper->RechargeTimer.StartTime;
int oldleft = pSuper->RechargeTimer.TimeLeft;
pSuper->SetReadiness(true);
pSuper->Launch(targetLocation, false);
pSuper->Reset();
pSuper->RechargeTimer.StartTime = oldstart;
pSuper->RechargeTimer.TimeLeft = oldleft;
}
auto const pSuper = pExecuteHouse->Supers.Items[swIdx];

CDTimerClass old_timer = pSuper->RechargeTimer;
pSuper->SetReadiness(true);
pSuper->Launch(targetLocation, false);
pSuper->Reset();
pSuper->RechargeTimer = old_timer;
}
}

Expand Down
1 change: 1 addition & 0 deletions src/Ext/TechnoType/Body.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,7 @@ TechnoClass* TechnoTypeExt::CreateUnit(TechnoTypeClass* pType, CoordStruct locat
{
if (!alwaysOnGround)
{
inAir = pTechno->IsInAir();
if (auto const pFlyLoco = locomotion_cast<FlyLocomotionClass*>(pTechno->Locomotor))
{
pTechno->SetLocation(location);
Expand Down
2 changes: 1 addition & 1 deletion src/Ext/TechnoType/Body.h
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ class TechnoTypeExt
ValueableIdx<LaserTrailTypeClass> idxType;
Valueable<CoordStruct> FLH;
Valueable<bool> IsOnTurret;
LaserTrailTypeClass* GetType() const { return &LaserTrailTypeClass::Array[idxType]; }
LaserTrailTypeClass* GetType() const { return LaserTrailTypeClass::Array[idxType].get(); }
};

std::vector<LaserTrailDataEntry> LaserTrailData;
Expand Down
2 changes: 1 addition & 1 deletion src/Ext/VoxelAnim/Body.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ void VoxelAnimExt::InitializeLaserTrails(VoxelAnimClass* pThis)

for (auto const& idxTrail : pTypeExt->LaserTrail_Types)
{
pThisExt->LaserTrails.push_back(LaserTrailClass { &LaserTrailTypeClass::Array[idxTrail], pThis->OwnerHouse });
pThisExt->LaserTrails.emplace_back(LaserTrailTypeClass::Array[idxTrail].get(), pThis->OwnerHouse);
}
}

Expand Down
69 changes: 67 additions & 2 deletions src/Misc/Hooks.BugFixes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
#include <Utilities/Macro.h>
#include <Utilities/Debug.h>
#include <Utilities/TemplateDef.h>
#include <Utilities/AresFunctions.h>

/*
Allow usage of TileSet of 255 and above without making NE-SW broken bridges unrepairable
Expand Down Expand Up @@ -963,8 +964,18 @@ DEFINE_HOOK(0x44985B, BuildingClass_Mission_Guard_UnitReload, 0x6)
return 0;
}

// Patch tileset parsing to not reset certain tileset indices for Lunar theater.
DEFINE_JUMP(LJMP, 0x546C8B, 0x546CBF);
// Fix tileset parsing to not reset certain tileset indices for Lunar theater if the fix is enabled.
DEFINE_HOOK(0x546C95, IsometricTileTypeClass_ReadINI_LunarFixes, 0x6)
{
enum { SkipGameCode = 0x546CBF };

LEA_STACK(CCINIClass*, pINI, STACK_OFFSET(0xA10, -0x9D8));

if (pINI->ReadBool(GameStrings::General, "ApplyLunarFixes", false))
return SkipGameCode;

return 0;
}

// Fixes an edge case that affects AI-owned technos where they lose ally targets instantly even if they have AttackFriendlies=yes - Starkku
DEFINE_HOOK(0x6FA467, TechnoClass_AI_AttackFriendlies, 0x5)
Expand Down Expand Up @@ -1052,6 +1063,8 @@ DEFINE_HOOK(0x743664, UnitClass_ReadFromINI_Follower3, 0x6)
return SkipGameCode;
}

#pragma endregion

// This shouldn't be here
// Author: tyuah8
DEFINE_HOOK_AGAIN(0x4AF94D, EndPiggyback_PowerOn, 0x7) // Drive
Expand All @@ -1077,3 +1090,55 @@ size_t __fastcall HexStr2Int_replacement(const char* str)
}
DEFINE_JUMP(CALL, 0x6E8305, GET_OFFSET(HexStr2Int_replacement)); // TaskForce
DEFINE_JUMP(CALL, 0x6E5FA6, GET_OFFSET(HexStr2Int_replacement)); // TagType

// This is the inline function to get the academy type that a techno enjoys.
inline static const AbstractType GetAresAcademyType(TechnoClass* pTechno)
{
if (pTechno->WhatAmI() == AbstractType::Unit)
{
if (pTechno->GetTechnoType()->ConsideredAircraft)
return AbstractType::Aircraft;
else if (pTechno->GetTechnoType()->Organic)
return AbstractType::Infantry;
else
return AbstractType::Unit;
}
else if (pTechno->WhatAmI() == AbstractType::Infantry
|| pTechno->WhatAmI() == AbstractType::Aircraft
|| pTechno->WhatAmI() == AbstractType::Building)
{
return pTechno->WhatAmI();
}
return AbstractType::None;
}

// This is a fix to the Ares bug: Academy feature doesn't apply to the initial payload of vehicles built off a War Factory.
// Curiously, Academy applies to the initial payloads of vehicles under any other circumstances, even when built off a Naval Shipyard.
// It is "Unsorted::IKnowWhatImDoing" prevented the "HouseExt::ApplyAcademy" from taking effect.
// The fix is simple, when Ares is supposed to have initialized the initial payload, and Academy is prevented from taking any effect,
// temporarily turn off "Unsorted::IKnowWhatImDoing", invoke "HouseExt::ApplyAcademy", then turn on "Unsorted::IKnowWhatImDoing" again.
DEFINE_HOOK(0x4D71A0, FootClass_Put_InitialPayload_AfterAres, 0x6)
{
GET(FootClass* const, pThis, ESI);

if (AresFunctions::ApplyAcademy && Unsorted::IKnowWhatImDoing)
{
if (pThis && !pThis->InLimbo && pThis->IsOnMap && pThis->WhatAmI() == AbstractType::Unit
&& pThis->GetTechnoType()->Passengers > 0
&& pThis->Passengers.NumPassengers > 0)
{
for (auto pNext = pThis->Passengers.FirstPassenger; pNext; pNext = abstract_cast<FootClass*>(pNext->NextObject))
{
auto abstractType = GetAresAcademyType(pNext);
if (abstractType != AbstractType::None)
{
--Unsorted::IKnowWhatImDoing;
AresFunctions::ApplyAcademy(AresFunctions::HouseExtMap_Find(pNext->Owner), pNext, abstractType);
++Unsorted::IKnowWhatImDoing;
}
}
}
}

return 0;
}
16 changes: 16 additions & 0 deletions src/Utilities/AresAddressInit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,14 @@
decltype(AresFunctions::ConvertTypeTo) AresFunctions::ConvertTypeTo = nullptr;
decltype(AresFunctions::SpawnSurvivors) AresFunctions::SpawnSurvivors = nullptr;
decltype(AresFunctions::IsTargetConstraintsEligible) AresFunctions::IsTargetConstraintsEligible = nullptr;
decltype(AresFunctions::ApplyAcademy) AresFunctions::ApplyAcademy = nullptr;
std::function<AresSWTypeExtData* (SuperWeaponTypeClass*)> AresFunctions::SWTypeExtMap_Find;
std::function<AresHouseExtData* (HouseClass*)> AresFunctions::HouseExtMap_Find;

void* AresFunctions::_SWTypeExtMap = nullptr;
decltype(AresFunctions::_SWTypeExtMapFind) AresFunctions::_SWTypeExtMapFind = nullptr;
void* AresFunctions::_HouseExtMap = nullptr;
decltype(AresFunctions::_HouseExtMapFind) AresFunctions::_HouseExtMapFind = nullptr;

void Apply_Ares3_0_Patches();
void Apply_Ares3_0p1_Patches();
Expand All @@ -29,10 +33,16 @@ void AresFunctions::InitAres3_0()

NOTE_ARES_FUN(IsTargetConstraintsEligible, 0x032110);

NOTE_ARES_FUN(ApplyAcademy, 0x020750);

NOTE_ARES_FUN(_SWTypeExtMapFind, 0x57C70);
NOTE_ARES_FUN(_SWTypeExtMap, 0xC1C54);
SWTypeExtMap_Find = [](SuperWeaponTypeClass* swt) { return _SWTypeExtMapFind(_SWTypeExtMap, swt); };

NOTE_ARES_FUN(_HouseExtMapFind, 0x57C70);
NOTE_ARES_FUN(_HouseExtMap, 0xC1AA8);
HouseExtMap_Find = [](HouseClass* houseClass) { return _HouseExtMapFind(_HouseExtMap, houseClass); };

#ifndef USING_MULTIFINITE_SYRINGE
Apply_Ares3_0_Patches();
#endif
Expand All @@ -53,10 +63,16 @@ void AresFunctions::InitAres3_0p1()

NOTE_ARES_FUN(IsTargetConstraintsEligible, 0x032AF0);

NOTE_ARES_FUN(ApplyAcademy, 0x0211D0);

NOTE_ARES_FUN(_SWTypeExtMapFind, 0x58900);
NOTE_ARES_FUN(_SWTypeExtMap, 0xC2C50);
SWTypeExtMap_Find = [](SuperWeaponTypeClass* swt) { return _SWTypeExtMapFind(_SWTypeExtMap, swt); };

NOTE_ARES_FUN(_HouseExtMapFind, 0x589A0);
NOTE_ARES_FUN(_HouseExtMap, 0xC2B08);
HouseExtMap_Find = [](HouseClass* houseClass) { return _HouseExtMapFind(_HouseExtMap, houseClass); };

#ifndef USING_MULTIFINITE_SYRINGE
Apply_Ares3_0p1_Patches();
#endif
Expand Down
9 changes: 9 additions & 0 deletions src/Utilities/AresFunctions.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#pragma once
#include <functional>
#include <GeneralDefinitions.h>
class TechnoClass;
class TechnoTypeClass;
class FootClass;
Expand Down Expand Up @@ -29,12 +30,20 @@ class AresFunctions

static std::function<AresSWTypeExtData* (SuperWeaponTypeClass*)> SWTypeExtMap_Find;

static void(__thiscall* ApplyAcademy)(void*, TechnoClass* pTechno, AbstractType considerAs);

static std::function<AresSWTypeExtData* (SuperWeaponTypeClass*)> SWTypeExtMap_Find;

Check failure on line 35 in src/Utilities/AresFunctions.h

View workflow job for this annotation

GitHub Actions / build

'std::function<AresSWTypeExtData *(SuperWeaponTypeClass *)> AresFunctions::SWTypeExtMap_Find': redefinition [D:\a\Phobos\Phobos\Phobos.vcxproj]

Check failure on line 35 in src/Utilities/AresFunctions.h

View workflow job for this annotation

GitHub Actions / build

static std::function<AresSWTypeExtData* (SuperWeaponTypeClass*)> SWTypeExtMap_Find; [D:\a\Phobos\Phobos\Phobos.vcxproj]

Check failure on line 35 in src/Utilities/AresFunctions.h

View workflow job for this annotation

GitHub Actions / build

^ (compiling source file src\Ext\Sidebar\SWSidebar\SWButtonClass.cpp) [D:\a\Phobos\Phobos\Phobos.vcxproj]

static std::function<AresHouseExtData* (HouseClass*)> HouseExtMap_Find;

private:

static constexpr bool _maybe = false;

static constexpr bool AresWasWrongAboutSpawnSurvivors = _maybe;

static void* _SWTypeExtMap;
static void* _HouseExtMap;
static AresSWTypeExtData* (__thiscall* _SWTypeExtMapFind)(void*, SuperWeaponTypeClass*);
static AresHouseExtData* (__thiscall* _HouseExtMapFind)(void*, HouseClass*);
};
Loading

0 comments on commit 3751cb4

Please sign in to comment.