From c416ba11df2e897281b40390133542a23280b411 Mon Sep 17 00:00:00 2001 From: Fate-JH Date: Thu, 31 Jul 2025 01:12:16 -0400 Subject: [PATCH] allowing scaled back bfr accessibility (#1280) --- .../resources/overrides/game_objects0.adb.lst | 30 +++++++++++++---- .../WeaponAndProjectileOperations.scala | 2 +- .../BattleFrameFlightConverter.scala | 2 +- .../BattleFrameRoboticsConverter.scala | 2 +- .../global/GlobalDefinitionsProjectile.scala | 4 +-- .../global/GlobalDefinitionsVehicle.scala | 32 +++++++++---------- .../objects/vehicles/VehicleSubsystem.scala | 2 +- .../objects/vehicles/control/BfrControl.scala | 15 +++++---- .../vehicles/control/BfrFlightControl.scala | 8 ++--- .../resolution/ResolutionCalculations.scala | 2 +- 10 files changed, 59 insertions(+), 40 deletions(-) diff --git a/server/src/main/resources/overrides/game_objects0.adb.lst b/server/src/main/resources/overrides/game_objects0.adb.lst index 1ea38dca0..b62b955a0 100644 --- a/server/src/main/resources/overrides/game_objects0.adb.lst +++ b/server/src/main/resources/overrides/game_objects0.adb.lst @@ -96,12 +96,30 @@ add_property suppressor holstertime 600 add_property trek equiptime 500 add_property trek holstertime 500 add_property vulture requirement_award0 false -add_property aphelion allowed false +add_property aphelion allowed true add_property aphelion_flight allowed false -add_property aphelion_gunner allowed false -add_property colossus allowed false +add_property aphelion_gunner allowed true +add_property aphelion_armor_siphon allowed false +add_property aphelion_armor_siphon_left allowed false +add_property aphelion_armor_siphon_right allowed false +add_property aphelion_ntu_siphon allowed false +add_property aphelion_ntu_siphon_left allowed false +add_property aphelion_ntu_siphon_right allowed false +add_property colossus allowed true add_property colossus_flight allowed false -add_property colossus_gunner allowed false -add_property peregrine allowed false +add_property colossus_gunner allowed true +add_property colossus_armor_siphon allowed false +add_property colossus_armor_siphon_left allowed false +add_property colossus_armor_siphon_right allowed false +add_property colossus_ntu_siphon allowed false +add_property colossus_ntu_siphon_left allowed false +add_property colossus_ntu_siphon_right allowed false +add_property peregrine allowed true add_property peregrine_flight allowed false -add_property peregrine_gunner allowed false +add_property peregrine_gunner allowed true +add_property peregrine_armor_siphon allowed false +add_property peregrine_armor_siphon_left allowed false +add_property peregrine_armor_siphon_right allowed false +add_property peregrine_ntu_siphon allowed false +add_property peregrine_ntu_siphon_left allowed false +add_property peregrine_ntu_siphon_right allowed false diff --git a/src/main/scala/net/psforever/actors/session/support/WeaponAndProjectileOperations.scala b/src/main/scala/net/psforever/actors/session/support/WeaponAndProjectileOperations.scala index 8e18811e3..047983bd9 100644 --- a/src/main/scala/net/psforever/actors/session/support/WeaponAndProjectileOperations.scala +++ b/src/main/scala/net/psforever/actors/session/support/WeaponAndProjectileOperations.scala @@ -870,7 +870,7 @@ class WeaponAndProjectileOperations( "BattleframeLeftArm" } else { "BattleframeRightArm" - }).get.Enabled + }).exists(_.Enabled) if (!mountIsEnabled) { //can't stop the local discharge, but it will not actually shoot anything; assert the magazine sendResponse(QuantityUpdateMessage(tool.AmmoSlot.Box.GUID, tool.Magazine)) diff --git a/src/main/scala/net/psforever/objects/definition/converter/BattleFrameFlightConverter.scala b/src/main/scala/net/psforever/objects/definition/converter/BattleFrameFlightConverter.scala index 7ed207187..9efc677c2 100644 --- a/src/main/scala/net/psforever/objects/definition/converter/BattleFrameFlightConverter.scala +++ b/src/main/scala/net/psforever/objects/definition/converter/BattleFrameFlightConverter.scala @@ -110,6 +110,6 @@ class BattleFrameFlightConverter extends ObjectCreateConverter[Vehicle]() { } def showBfrShield(obj: Vehicle): Boolean = { - obj.Subsystems(VehicleSubsystemEntry.BattleframeShieldGenerator).get.Enabled && obj.Shields > 0 + obj.Subsystems(VehicleSubsystemEntry.BattleframeShieldGenerator).exists(_.Enabled) && obj.Shields > 0 } } diff --git a/src/main/scala/net/psforever/objects/definition/converter/BattleFrameRoboticsConverter.scala b/src/main/scala/net/psforever/objects/definition/converter/BattleFrameRoboticsConverter.scala index 411ff6a79..ea12b8120 100644 --- a/src/main/scala/net/psforever/objects/definition/converter/BattleFrameRoboticsConverter.scala +++ b/src/main/scala/net/psforever/objects/definition/converter/BattleFrameRoboticsConverter.scala @@ -110,6 +110,6 @@ class BattleFrameRoboticsConverter extends ObjectCreateConverter[Vehicle]() { } def showBfrShield(obj: Vehicle): Boolean = { - obj.Subsystems(VehicleSubsystemEntry.BattleframeShieldGenerator).get.Enabled && obj.Shields > 0 + obj.Subsystems(VehicleSubsystemEntry.BattleframeShieldGenerator).exists(_.Enabled) && obj.Shields > 0 } } diff --git a/src/main/scala/net/psforever/objects/global/GlobalDefinitionsProjectile.scala b/src/main/scala/net/psforever/objects/global/GlobalDefinitionsProjectile.scala index 4771f421b..be9f4e581 100644 --- a/src/main/scala/net/psforever/objects/global/GlobalDefinitionsProjectile.scala +++ b/src/main/scala/net/psforever/objects/global/GlobalDefinitionsProjectile.scala @@ -2056,7 +2056,7 @@ object GlobalDefinitionsProjectile { aphelion_plasma_rocket_projectile.DamageAtEdge = .1f aphelion_plasma_rocket_projectile.DamageRadius = 3f aphelion_plasma_rocket_projectile.ProjectileDamageType = DamageType.Splash - aphelion_plasma_rocket_projectile.DamageProxy = 96 //aphelion_plama_cloud + //aphelion_plasma_rocket_projectile.DamageProxy = 96 //aphelion_plama_cloud aphelion_plasma_rocket_projectile.InitialVelocity = 75 aphelion_plasma_rocket_projectile.Lifespan = 5f ProjectileDefinition.CalculateDerivedFields(aphelion_plasma_rocket_projectile) @@ -2221,7 +2221,7 @@ object GlobalDefinitionsProjectile { peregrine_particle_cannon_projectile.DamageAtEdge = 0.1f peregrine_particle_cannon_projectile.DamageRadius = 3f peregrine_particle_cannon_projectile.ProjectileDamageType = DamageType.Splash - peregrine_particle_cannon_projectile.DamageProxy = 655 //peregrine_particle_cannon_radiation_cloud + //peregrine_particle_cannon_projectile.DamageProxy = 655 //peregrine_particle_cannon_radiation_cloud peregrine_particle_cannon_projectile.InitialVelocity = 500 peregrine_particle_cannon_projectile.Lifespan = .6f ProjectileDefinition.CalculateDerivedFields(peregrine_particle_cannon_projectile) diff --git a/src/main/scala/net/psforever/objects/global/GlobalDefinitionsVehicle.scala b/src/main/scala/net/psforever/objects/global/GlobalDefinitionsVehicle.scala index c2fee38f6..50876dd42 100644 --- a/src/main/scala/net/psforever/objects/global/GlobalDefinitionsVehicle.scala +++ b/src/main/scala/net/psforever/objects/global/GlobalDefinitionsVehicle.scala @@ -46,7 +46,7 @@ object GlobalDefinitionsVehicle { restriction = MaxOnly } - val controlSubsystem = List(VehicleSubsystemEntry.Controls) + val controlSubsystem: List[VehicleSubsystemEntry] = List(VehicleSubsystemEntry.Controls) fury.Name = "fury" fury.MaxHealth = 650 @@ -1162,7 +1162,7 @@ object GlobalDefinitionsVehicle { bailable = true } - val flightSubsystems = List(VehicleSubsystemEntry.Controls, VehicleSubsystemEntry.Ejection) + val flightSubsystems: List[VehicleSubsystemEntry] = List(VehicleSubsystemEntry.Controls, VehicleSubsystemEntry.Ejection) val variantConverter = new VariantVehicleConverter mosquito.Name = "mosquito" @@ -1684,20 +1684,20 @@ object GlobalDefinitionsVehicle { bailable = true } val normalSeat = new SeatDefinition() - val bfrSubsystems = List( - VehicleSubsystemEntry.BattleframeMovementServos, - VehicleSubsystemEntry.BattleframeSensorArray, - VehicleSubsystemEntry.BattleframeShieldGenerator, - VehicleSubsystemEntry.BattleframeTrunk + val bfrSubsystems: List[VehicleSubsystemEntry] = List( +// VehicleSubsystemEntry.BattleframeMovementServos, +// VehicleSubsystemEntry.BattleframeSensorArray, + VehicleSubsystemEntry.BattleframeShieldGenerator//, +// VehicleSubsystemEntry.BattleframeTrunk ) - val bfrGunnerSubsystems = List( + val bfrGunnerSubsystems: List[VehicleSubsystemEntry] = List( VehicleSubsystemEntry.BattleframeLeftArm, - VehicleSubsystemEntry.BattleframeRightArm, - VehicleSubsystemEntry.BattleframeLeftWeapon, - VehicleSubsystemEntry.BattleframeRightWeapon, - VehicleSubsystemEntry.BattleframeGunnerWeapon + VehicleSubsystemEntry.BattleframeRightArm//, +// VehicleSubsystemEntry.BattleframeLeftWeapon, +// VehicleSubsystemEntry.BattleframeRightWeapon, +// VehicleSubsystemEntry.BattleframeGunnerWeapon ) ++ bfrSubsystems - val bfrFlightSubsystems = List( + val bfrFlightSubsystems: List[VehicleSubsystemEntry] = List( VehicleSubsystemEntry.BattleframeFlightLeftArm, VehicleSubsystemEntry.BattleframeFlightRightArm, VehicleSubsystemEntry.BattleframeFlightLeftWeapon, @@ -1735,7 +1735,7 @@ object GlobalDefinitionsVehicle { aphelion_gunner.AutoPilotSpeeds = (5, 1) aphelion_gunner.Packet = battleFrameConverter aphelion_gunner.DestroyedModel = None - aphelion_gunner.destructionDelay = Some(4000L) + //aphelion_gunner.destructionDelay = Some(4000L) aphelion_gunner.JackingDuration = Array(0, 62, 60, 30) aphelion_gunner.RadiationShielding = 0.5f aphelion_gunner.DamageUsing = DamageCalculations.AgainstBfr @@ -1787,7 +1787,7 @@ object GlobalDefinitionsVehicle { colossus_gunner.AutoPilotSpeeds = (5, 1) colossus_gunner.Packet = battleFrameConverter colossus_gunner.DestroyedModel = None - colossus_gunner.destructionDelay = Some(4000L) + //colossus_gunner.destructionDelay = Some(4000L) colossus_gunner.JackingDuration = Array(0, 62, 60, 30) colossus_gunner.RadiationShielding = 0.5f colossus_gunner.DamageUsing = DamageCalculations.AgainstBfr @@ -1839,7 +1839,7 @@ object GlobalDefinitionsVehicle { peregrine_gunner.AutoPilotSpeeds = (5, 1) peregrine_gunner.Packet = battleFrameConverter peregrine_gunner.DestroyedModel = None - peregrine_gunner.destructionDelay = Some(4000L) + //peregrine_gunner.destructionDelay = Some(4000L) peregrine_gunner.JackingDuration = Array(0, 62, 60, 30) peregrine_gunner.RadiationShielding = 0.5f peregrine_gunner.DamageUsing = DamageCalculations.AgainstBfr diff --git a/src/main/scala/net/psforever/objects/vehicles/VehicleSubsystem.scala b/src/main/scala/net/psforever/objects/vehicles/VehicleSubsystem.scala index 29033e8ba..364ce5431 100644 --- a/src/main/scala/net/psforever/objects/vehicles/VehicleSubsystem.scala +++ b/src/main/scala/net/psforever/objects/vehicles/VehicleSubsystem.scala @@ -18,7 +18,7 @@ sealed abstract class VehicleSubsystemConditionModifier( ) extends IntEnumEntry object VehicleSubsystemConditionModifier extends IntEnum[VehicleSubsystemConditionModifier] { - val values = findValues + val values: IndexedSeq[VehicleSubsystemConditionModifier] = findValues case object Off extends VehicleSubsystemConditionModifier(value = 1065353216, multiplier = 0f, addend = 0) diff --git a/src/main/scala/net/psforever/objects/vehicles/control/BfrControl.scala b/src/main/scala/net/psforever/objects/vehicles/control/BfrControl.scala index 69d60d4b1..9dbc3436d 100644 --- a/src/main/scala/net/psforever/objects/vehicles/control/BfrControl.scala +++ b/src/main/scala/net/psforever/objects/vehicles/control/BfrControl.scala @@ -134,7 +134,7 @@ class BfrControl(vehicle: Vehicle) item.asInstanceOf[Tool], dimorph.transform(Handiness.Generic).asInstanceOf[ToolDefinition] ) - case _ => ; //no dimorphic entry; place as-is + case _ => () //no dimorphic entry; place as-is } val guid0 = PlanetSideGUID(0) //if the weapon arm is disabled, enable it for later (makes life easy) @@ -173,7 +173,8 @@ class BfrControl(vehicle: Vehicle) override def dismountCleanup(seatBeingDismounted: Int, player: Player): Unit = { super.dismountCleanup(seatBeingDismounted, player) if (!vehicle.Seats.values.exists(_.isOccupied)) { - vehicle.Subsystems(VehicleSubsystemEntry.BattleframeShieldGenerator) match { + vehicle + .Subsystems(VehicleSubsystemEntry.BattleframeShieldGenerator) match { case Some(subsys) => if (vehicle.Shields > 0) { vehicleSubsystemMessages( @@ -190,7 +191,7 @@ class BfrControl(vehicle: Vehicle) } ) } - case _ => ; + case _ => () } } } @@ -203,7 +204,7 @@ class BfrControl(vehicle: Vehicle) if !subsys.Enabled && vehicle.Shields > 0 && subsys.Enabled_=(state = true) => //if the shield is damaged, it does not turn on until the damaged is cleared vehicleSubsystemMessages(subsys.changedMessages(vehicle)) - case _ => ; + case _ => () } } } @@ -425,9 +426,9 @@ class BfrControl(vehicle: Vehicle) zone.id, VehicleAction.GenericObjectAction(doNotSendTo, useThisGuid, action) ) - case _ => ; + case _ => () } - case _ => ; + case _ => () } } } @@ -602,7 +603,7 @@ class BfrControl(vehicle: Vehicle) ) ) } - case _ => ; + case _ => () } } } diff --git a/src/main/scala/net/psforever/objects/vehicles/control/BfrFlightControl.scala b/src/main/scala/net/psforever/objects/vehicles/control/BfrFlightControl.scala index 144ecb7d9..78d9e6387 100644 --- a/src/main/scala/net/psforever/objects/vehicles/control/BfrFlightControl.scala +++ b/src/main/scala/net/psforever/objects/vehicles/control/BfrFlightControl.scala @@ -58,20 +58,20 @@ class BfrFlightControl(vehicle: Vehicle) case Some(drain) if localFlyingValue.isEmpty => //shields off disableShield() - vehicle.Subsystems(VehicleSubsystemEntry.BattleframeShieldGenerator).get.Enabled = false + vehicle.Subsystems(VehicleSubsystemEntry.BattleframeShieldGenerator).map(s => s.Enabled = false) vehicle.Shields -= drain showShieldCharge() case None if localFlyingValue.isEmpty => //shields off disableShield() - vehicle.Subsystems(VehicleSubsystemEntry.BattleframeShieldGenerator).get.Enabled = false + vehicle.Subsystems(VehicleSubsystemEntry.BattleframeShieldGenerator).map(s => s.Enabled = false) case Some(drain) => vehicle.Shields -= drain showShieldCharge() case _ => ; } } - if (vehicle.Subsystems(VehicleSubsystemEntry.BattleframeFlightPod).get.Jammed) { + if (vehicle.Subsystems(VehicleSubsystemEntry.BattleframeFlightPod).exists(_.Jammed)) { } @@ -79,7 +79,7 @@ class BfrFlightControl(vehicle: Vehicle) if (flying.nonEmpty) { flying = None vehicle.Flying = None - vehicle.Subsystems(VehicleSubsystemEntry.BattleframeShieldGenerator).get.Enabled = true + vehicle.Subsystems(VehicleSubsystemEntry.BattleframeShieldGenerator).map(s => s.Enabled = true) if (vehicle.Shields > 0) { enableShield() } diff --git a/src/main/scala/net/psforever/objects/vital/resolution/ResolutionCalculations.scala b/src/main/scala/net/psforever/objects/vital/resolution/ResolutionCalculations.scala index e6112726b..cc6884073 100644 --- a/src/main/scala/net/psforever/objects/vital/resolution/ResolutionCalculations.scala +++ b/src/main/scala/net/psforever/objects/vital/resolution/ResolutionCalculations.scala @@ -354,7 +354,7 @@ object ResolutionCalculations { { data.cause.source.DamageToBattleframeOnly || data.cause.source.DamageToVehicleOnly || - !obj.Subsystems(VehicleSubsystemEntry.BattleframeShieldGenerator).get.Enabled || + !obj.Subsystems(VehicleSubsystemEntry.BattleframeShieldGenerator).exists(_.Enabled) || obj.Shields == 0 } )