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
Original file line number Diff line number Diff line change
Expand Up @@ -816,10 +816,13 @@ class HeliTakeoffOrLandingState : public State
loco->setUltraAccurate(true);
jetAI->ignoreObstacleID(jet->getProducerID());

Object* airfield;
ParkingPlaceBehaviorInterface* pp = getPP(jet->getProducerID(), &airfield);
ParkingPlaceBehaviorInterface* pp = getPP(jet->getProducerID());
if (pp == nullptr)
return STATE_SUCCESS; // no airfield? just skip this step
#if RETAIL_COMPATIBLE_CRC
return STATE_SUCCESS;
#else
return STATE_FAILURE;
#endif

Coord3D landingApproach;
if (jet->isKindOf(KINDOF_PRODUCED_AT_HELIPAD))
Expand Down Expand Up @@ -1431,6 +1434,13 @@ class JetOrHeliReloadAmmoState : public State
virtual StateReturnType update() override
{
Object* jet = getMachineOwner();

#if !RETAIL_COMPATIBLE_CRC
ParkingPlaceBehaviorInterface* pp = getPP(jet->getProducerID());
if (pp == nullptr)
return STATE_FAILURE;
#endif

UnsignedInt now = TheGameLogic->getFrame();
Bool allDone = true;
for (Int i = 0; i < WEAPONSLOT_COUNT; ++i)
Expand Down Expand Up @@ -1577,8 +1587,13 @@ HeliAIStateMachine::HeliAIStateMachine(Object *owner, AsciiString name) : AIStat
defineState( TAKING_OFF, newInstance(HeliTakeoffOrLandingState)( this, false ), AI_IDLE, AI_IDLE );
defineState( LANDING_AWAIT_CLEARANCE, newInstance(SuccessState)( this ), ORIENT_FOR_PARKING_PLACE, AI_IDLE );
defineState( ORIENT_FOR_PARKING_PLACE, newInstance(JetOrHeliParkOrientState)( this ), LANDING, AI_IDLE );
#if RETAIL_COMPATIBLE_CRC
defineState( LANDING, newInstance(HeliTakeoffOrLandingState)( this, true ), RELOAD_AMMO, AI_IDLE );
defineState( RELOAD_AMMO, newInstance(JetOrHeliReloadAmmoState)( this ), AI_IDLE, AI_IDLE );
#else
defineState( LANDING, newInstance(HeliTakeoffOrLandingState)( this, true ), RELOAD_AMMO, TAKING_OFF );
defineState( RELOAD_AMMO, newInstance(JetOrHeliReloadAmmoState)( this ), AI_IDLE, TAKING_OFF );
#endif
defineState( RETURN_TO_DEAD_AIRFIELD, newInstance(JetOrHeliReturningToDeadAirfieldState)( this ), CIRCLING_DEAD_AIRFIELD, RETURN_TO_DEAD_AIRFIELD );
defineState( CIRCLING_DEAD_AIRFIELD, newInstance(JetOrHeliCirclingDeadAirfieldState)( this ), AI_IDLE, AI_IDLE );
defineState( TAXI_FROM_HANGAR, newInstance(JetOrHeliTaxiState)( this, FROM_HANGAR ), AI_IDLE, AI_IDLE );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1003,10 +1003,13 @@ class HeliTakeoffOrLandingState : public State
loco->setUltraAccurate(true);
jetAI->ignoreObstacleID(jet->getProducerID());

Object* airfield;
ParkingPlaceBehaviorInterface* pp = getPP(jet->getProducerID(), &airfield);
ParkingPlaceBehaviorInterface* pp = getPP(jet->getProducerID());
if (pp == nullptr)
return STATE_SUCCESS; // no airfield? just skip this step
#if RETAIL_COMPATIBLE_CRC
return STATE_SUCCESS;
#else
return STATE_FAILURE;
#endif

Coord3D landingApproach;
if (jet->isKindOf(KINDOF_PRODUCED_AT_HELIPAD))
Expand Down Expand Up @@ -1623,6 +1626,13 @@ class JetOrHeliReloadAmmoState : public State
virtual StateReturnType update() override
{
Object* jet = getMachineOwner();

#if !RETAIL_COMPATIBLE_CRC
ParkingPlaceBehaviorInterface* pp = getPP(jet->getProducerID());
if (pp == nullptr)
return STATE_FAILURE;
#endif

UnsignedInt now = TheGameLogic->getFrame();
Bool allDone = true;
for (Int i = 0; i < WEAPONSLOT_COUNT; ++i)
Expand Down Expand Up @@ -1769,8 +1779,13 @@ HeliAIStateMachine::HeliAIStateMachine(Object *owner, AsciiString name) : AIStat
defineState( TAKING_OFF, newInstance(HeliTakeoffOrLandingState)( this, false ), AI_IDLE, AI_IDLE );
defineState( LANDING_AWAIT_CLEARANCE, newInstance(SuccessState)( this ), ORIENT_FOR_PARKING_PLACE, AI_IDLE );
defineState( ORIENT_FOR_PARKING_PLACE, newInstance(JetOrHeliParkOrientState)( this ), LANDING, AI_IDLE );
#if RETAIL_COMPATIBLE_CRC
defineState( LANDING, newInstance(HeliTakeoffOrLandingState)( this, true ), RELOAD_AMMO, AI_IDLE );
defineState( RELOAD_AMMO, newInstance(JetOrHeliReloadAmmoState)( this ), AI_IDLE, AI_IDLE );
#else
defineState( LANDING, newInstance(HeliTakeoffOrLandingState)( this, true ), RELOAD_AMMO, TAKING_OFF );
defineState( RELOAD_AMMO, newInstance(JetOrHeliReloadAmmoState)( this ), AI_IDLE, TAKING_OFF );
#endif
defineState( RETURN_TO_DEAD_AIRFIELD, newInstance(JetOrHeliReturningToDeadAirfieldState)( this ), CIRCLING_DEAD_AIRFIELD, RETURN_TO_DEAD_AIRFIELD );
defineState( CIRCLING_DEAD_AIRFIELD, newInstance(JetOrHeliCirclingDeadAirfieldState)( this ), AI_IDLE, AI_IDLE );
defineState( TAXI_FROM_HANGAR, newInstance(JetOrHeliTaxiState)( this, FROM_HANGAR ), AI_IDLE, AI_IDLE );
Expand Down
Loading