Skip to content
Merged
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
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ Credits
- **ChrisLv_CN** - interceptor logic, LaserTrails, laser fixes, general assistance (work relicensed under [following permission](images/ChrisLv-relicense.png))
- **Xkein** - general assistance, YRpp edits
- **thomassneddon** - general assistance
- **Starkku** - Warhead shield penetration & breaking, strafing aircraft weapon customization, vehicle DeployFire fixes/improvements, stationary VehicleTypes, Burst logic improvements, TechnoType auto-firing weapons, Secondary weapon fallback customization, weapon target type filtering, AreaFire targeting customization, CreateUnit improvements, Attached animation & jumpjet unit layer customization, IsSimpleDeployer improvements, Shield modification warheads, Warhead decloaking toggle, Warp(In/Out)Weapon, Grinder improvements / additions, Attached animation position customization, Critical hit logic additions
- **Starkku** - Warhead shield penetration & breaking, strafing aircraft weapon customization, vehicle DeployFire fixes/improvements, stationary VehicleTypes, Burst logic improvements, TechnoType auto-firing weapons, Secondary weapon fallback customization, weapon target type filtering, AreaFire targeting customization, CreateUnit improvements, Attached animation & jumpjet unit layer customization, IsSimpleDeployer improvements, Shield modification warheads, Warhead decloaking toggle, Warp(In/Out)Weapon, Grinder improvements / additions, Attached animation position customization, Critical hit logic additions, Aircraft & jumpjet speed modifiers fix
- **SukaHati (Erzoid)** - Minimum interceptor guard range
- **Morton (MortonPL)** - XDrawOffset, Shield passthrough & absorption, building LimboDelivery, fix for Image in art rules, power delta counter
- **mevitar** - honorary shield tester *triple* award
Expand Down
2 changes: 1 addition & 1 deletion YRpp
Submodule YRpp updated 1 files
+102 −0 JumpjetLocomotionClass.h
1 change: 1 addition & 0 deletions docs/Fixed-or-Improved-Logics.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ This page describes all ingame logics that are fixed or improved in Phobos witho
- Fixed interaction of `UnitAbsorb` & `InfantryAbsorb` with `Grinding` buildings. The keys will now make the building only accept appropriate types of objects.
- Fixed missing 'no enter' cursor for VehicleTypes being unable to enter a `Grinding` building.
- Fixed Engineers being able to enter `Grinding` buildings even when they shouldn't (such as ally building at full HP).
- Aircraft & jumpjet units are now affected by speed modifiers such as `SpeedAircraft/Infantry/UnitsMult` on `Countries`, `VeteranSpeed` and Crates / AttachEffect (Ares feature).

## Animations

Expand Down
1 change: 1 addition & 0 deletions docs/Whats-New.md
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,7 @@ Vanilla fixes:
- Fixed AI Aircraft docks bug when Ares tag `[GlobalControls]` > `AllowParallelAIQueues=no` is set (by FS-21)
- Fixed the bug when occupied building's `MuzzleFlashX` is drawn on the center of the building when `X` goes past 10 (by Otamaa)
- Fixed jumpjet units that are `Crashable` not crashing to ground properly if destroyed while being pulled by a `Locomotor` warhead (by Starkku)
- Fixed aircraft & jumpjet units not being affected by speed modifiers (by Starkku)

Phobos fixes:
- Fixed shields being able to take damage when the parent TechnoType was under effects of a `Temporal` Warhead (by Starkku)
Expand Down
12 changes: 6 additions & 6 deletions src/Ext/Aircraft/Hooks.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ DEFINE_HOOK(0x417FF1, AircraftClass_Mission_Attack_StrafeShots, 0x6)
return 0;
}

DEFINE_HOOK(0x418409, AircraftClass_Mission_Attack_FireAtTarget_BurstFix, 0x0)
DEFINE_HOOK(0x418403, AircraftClass_Mission_Attack_FireAtTarget_BurstFix, 0x8)
{
GET(AircraftClass*, pThis, ESI);

Expand All @@ -40,7 +40,7 @@ DEFINE_HOOK(0x418409, AircraftClass_Mission_Attack_FireAtTarget_BurstFix, 0x0)
return 0x418478;
}

DEFINE_HOOK(0x4186B6, AircraftClass_Mission_Attack_FireAtTarget2_BurstFix, 0x0)
DEFINE_HOOK(0x4186B6, AircraftClass_Mission_Attack_FireAtTarget2_BurstFix, 0x8)
{
GET(AircraftClass*, pThis, ESI);

Expand All @@ -49,7 +49,7 @@ DEFINE_HOOK(0x4186B6, AircraftClass_Mission_Attack_FireAtTarget2_BurstFix, 0x0)
return 0x4186D7;
}

DEFINE_HOOK(0x418805, AircraftClass_Mission_Attack_FireAtTarget2Strafe_BurstFix, 0x0)
DEFINE_HOOK(0x418805, AircraftClass_Mission_Attack_FireAtTarget2Strafe_BurstFix, 0x8)
{
GET(AircraftClass*, pThis, ESI);

Expand All @@ -58,7 +58,7 @@ DEFINE_HOOK(0x418805, AircraftClass_Mission_Attack_FireAtTarget2Strafe_BurstFix,
return 0x418826;
}

DEFINE_HOOK(0x418914, AircraftClass_Mission_Attack_FireAtTarget3Strafe_BurstFix, 0x0)
DEFINE_HOOK(0x418914, AircraftClass_Mission_Attack_FireAtTarget3Strafe_BurstFix, 0x8)
{
GET(AircraftClass*, pThis, ESI);

Expand All @@ -67,7 +67,7 @@ DEFINE_HOOK(0x418914, AircraftClass_Mission_Attack_FireAtTarget3Strafe_BurstFix,
return 0x418935;
}

DEFINE_HOOK(0x418A23, AircraftClass_Mission_Attack_FireAtTarget4Strafe_BurstFix, 0x0)
DEFINE_HOOK(0x418A23, AircraftClass_Mission_Attack_FireAtTarget4Strafe_BurstFix, 0x8)
{
GET(AircraftClass*, pThis, ESI);

Expand All @@ -76,7 +76,7 @@ DEFINE_HOOK(0x418A23, AircraftClass_Mission_Attack_FireAtTarget4Strafe_BurstFix,
return 0x418A44;
}

DEFINE_HOOK(0x418B25, AircraftClass_Mission_Attack_FireAtTarget5Strafe_BurstFix, 0x0)
DEFINE_HOOK(0x418B1F, AircraftClass_Mission_Attack_FireAtTarget5Strafe_BurstFix, 0x8)
{
GET(AircraftClass*, pThis, ESI);

Expand Down
15 changes: 15 additions & 0 deletions src/Ext/Techno/Body.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -494,6 +494,21 @@ void TechnoExt::UpdateSharedAmmo(TechnoClass* pThis)
}
}

double TechnoExt::GetCurrentSpeedMultiplier(FootClass* pThis)
{
double houseMultiplier = 1.0;

if (pThis->WhatAmI() == AbstractType::Aircraft)
houseMultiplier = pThis->Owner->Type->SpeedAircraftMult;
else if (pThis->WhatAmI() == AbstractType::Infantry)
houseMultiplier = pThis->Owner->Type->SpeedInfantryMult;
else
houseMultiplier = pThis->Owner->Type->SpeedUnitsMult;

return pThis->SpeedMultiplier * houseMultiplier *
(pThis->HasAbility(Ability::Faster) ? RulesClass::Instance->VeteranSpeed : 1.0);
}

// =============================
// load / save

Expand Down
2 changes: 1 addition & 1 deletion src/Ext/Techno/Body.h
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,6 @@ class TechnoExt
static void ObjectKilledBy(TechnoClass* pThis, TechnoClass* pKiller);
static void EatPassengers(TechnoClass* pThis);
static void UpdateSharedAmmo(TechnoClass* pThis);

static double GetCurrentSpeedMultiplier(FootClass* pThis);
static bool CanFireNoAmmoWeapon(TechnoClass* pThis, int weaponIndex);
};
56 changes: 56 additions & 0 deletions src/Misc/Hooks.BugFixes.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#include <AircraftClass.h>
#include <AnimClass.h>
#include <BuildingClass.h>
#include <TechnoClass.h>
Expand All @@ -8,9 +9,12 @@
#include <VoxelAnimClass.h>
#include <BulletClass.h>
#include <HouseClass.h>
#include <FlyLocomotionClass.h>
#include <JumpjetLocomotionClass.h>

#include <Ext/Rules/Body.h>
#include <Ext/BuildingType/Body.h>
#include <Ext/Techno/Body.h>

#include <Utilities/Macro.h>
#include <Utilities/Debug.h>
Expand Down Expand Up @@ -363,5 +367,57 @@ DEFINE_HOOK(0x480552, CellClass_AttachesToNeighbourOverlay_Gate, 0x7)
}
}

return 0;
}

DEFINE_HOOK(0x415F5C, AircraftClass_FireAt_SpeedModifiers, 0xA)
{
GET(AircraftClass*, pThis, EDI);

if (pThis->Type->Locomotor == LocomotionClass::CLSIDs::Fly)
{
if (const auto pLocomotor = static_cast<FlyLocomotionClass*>(pThis->Locomotor.get()))
{
double currentSpeed = pThis->GetTechnoType()->Speed * pLocomotor->CurrentSpeed *
TechnoExt::GetCurrentSpeedMultiplier(pThis);

R->EAX(static_cast<int>(currentSpeed));
}
}

return 0;
}

DEFINE_HOOK(0x4CDA78, FlyLocomotionClass_MovementAI_SpeedModifiers, 0x6)
{
GET(FlyLocomotionClass*, pThis, ESI);

double currentSpeed = pThis->LinkedTo->GetTechnoType()->Speed * pThis->CurrentSpeed *
TechnoExt::GetCurrentSpeedMultiplier(pThis->LinkedTo);

R->EAX(static_cast<int>(currentSpeed));

return 0;
}

DEFINE_HOOK(0x4CE4BF, FlyLocomotionClass_4CE4B0_SpeedModifiers, 0x6)
{
GET(FlyLocomotionClass*, pThis, ECX);

double currentSpeed = pThis->LinkedTo->GetTechnoType()->Speed * pThis->CurrentSpeed *
TechnoExt::GetCurrentSpeedMultiplier(pThis->LinkedTo);

R->EAX(static_cast<int>(currentSpeed));

return 0;
}

DEFINE_HOOK(0x54D138, JumpjetLocomotionClass_Movement_AI_SpeedModifiers, 0x6)
{
GET(JumpjetLocomotionClass*, pThis, ESI);

double multiplier = TechnoExt::GetCurrentSpeedMultiplier(pThis->LinkedTo);
pThis->Speed = (int)(pThis->LinkedTo->GetTechnoType()->JumpjetSpeed * multiplier);

return 0;
}