@@ -201,6 +201,7 @@ void ACraft::Clear() {
201201 m_DeliveryState = FALL;
202202 m_AltitudeMoveState = HOVER;
203203 m_AltitudeControl = 0 ;
204+ m_CanEnterOrbit = true ;
204205 m_MaxPassengers = -1 ;
205206
206207 m_DeliveryDelayMultiplier = 1.0 ;
@@ -251,6 +252,7 @@ int ACraft::Create(const ACraft& reference) {
251252 m_DeliveryState = reference.m_DeliveryState ;
252253 m_AltitudeMoveState = reference.m_AltitudeMoveState ;
253254 m_AltitudeControl = reference.m_AltitudeControl ;
255+ m_CanEnterOrbit = reference.m_CanEnterOrbit ;
254256 m_MaxPassengers = reference.m_MaxPassengers ;
255257
256258 m_DeliveryDelayMultiplier = reference.m_DeliveryDelayMultiplier ;
@@ -285,6 +287,7 @@ int ACraft::ReadProperty(const std::string_view& propName, Reader& reader) {
285287 MatchProperty (" DeliveryDelayMultiplier" , { reader >> m_DeliveryDelayMultiplier; });
286288 MatchProperty (" ExitInterval" , { reader >> m_ExitInterval; });
287289 MatchProperty (" CanLand" , { reader >> m_LandingCraft; });
290+ MatchProperty (" CanEnterOrbit" , { reader >> m_CanEnterOrbit; });
288291 MatchProperty (" MaxPassengers" , { reader >> m_MaxPassengers; });
289292 MatchProperty (" ScuttleIfFlippedTime" , { reader >> m_ScuttleIfFlippedTime; });
290293 MatchProperty (" ScuttleOnDeath" , { reader >> m_ScuttleOnDeath; });
@@ -314,7 +317,10 @@ int ACraft::Save(Writer& writer) const {
314317
315318 writer.NewProperty (" CrashSound" );
316319 writer << m_CrashSound;
317-
320+
321+ writer.NewProperty (" CanEnterOrbit" );
322+ writer << m_CanEnterOrbit;
323+
318324 writer.NewProperty (" MaxPassengers" );
319325 writer << m_MaxPassengers;
320326 writer.NewProperty (" ScuttleIfFlippedTime" );
@@ -698,23 +704,26 @@ void ACraft::Update() {
698704 // ///////////////////////////////////////
699705 // Check for having gone into orbit
700706
701- if (m_Pos.m_Y < -m_CharHeight || m_Pos.m_Y > g_SceneMan.GetSceneHeight () + m_CharHeight) {
702- g_ActivityMan.GetActivity ()->HandleCraftEnteringOrbit (this );
703- // Play fading away thruster sound
704- // if (m_pMThruster && m_pMThruster->IsEmitting())
705- // m_pMThruster->(pTargetBitmap, targetPos, mode, onlyPhysical);
706- m_ToDelete = true ;
707- }
707+ if (m_CanEnterOrbit) {
708+ if (m_Pos.m_Y < -m_CharHeight || m_Pos.m_Y > g_SceneMan.GetSceneHeight () + m_CharHeight) {
709+ g_ActivityMan.GetActivity ()->HandleCraftEnteringOrbit (this );
710+ // Play fading away thruster sound
711+ // if (m_pMThruster && m_pMThruster->IsEmitting())
712+ // m_pMThruster->(pTargetBitmap, targetPos, mode, onlyPhysical);
713+ m_ToDelete = true ;
714+ }
708715
709- if (g_ActivityMan.GetActivity ()->GetCraftOrbitAtTheEdge ()) {
710- if (g_SceneMan.GetScene () && !g_SceneMan.GetScene ()->WrapsX ()) {
711- if (m_Pos.m_X < -GetSpriteWidth () || m_Pos.m_X > g_SceneMan.GetSceneWidth () + GetSpriteWidth ()) {
712- g_ActivityMan.GetActivity ()->HandleCraftEnteringOrbit (this );
713- m_ToDelete = true ;
716+ // Horizontal orbiting, if scene doesn't wrap
717+ if (g_ActivityMan.GetActivity ()->GetCraftOrbitAtTheEdge ()) {
718+ if (g_SceneMan.GetScene () && !g_SceneMan.GetScene ()->WrapsX ()) {
719+ if (m_Pos.m_X < -GetSpriteWidth () || m_Pos.m_X > g_SceneMan.GetSceneWidth () + GetSpriteWidth ()) {
720+ g_ActivityMan.GetActivity ()->HandleCraftEnteringOrbit (this );
721+ m_ToDelete = true ;
722+ }
714723 }
715- }
724+ }
716725 }
717-
726+
718727 if (m_Status == DEAD) {
719728 if (m_ScuttleOnDeath || m_AIMode == AIMODE_SCUTTLE) {
720729 GibThis ();
0 commit comments