From d17c16fd9b69794687c129576c0d8f01cb8a516a Mon Sep 17 00:00:00 2001 From: Fate-JH Date: Mon, 4 Mar 2024 10:49:14 -0500 Subject: [PATCH] defining all doors; moving around classes related to environment fields; separating global definitions into a main file and implementation files --- .../psforever/objects/GlobalDefinitions.scala | 8265 +---------------- .../global/GlobalDefinitionsAmmo.scala | 330 + .../global/GlobalDefinitionsDeployable.scala | 461 + .../global/GlobalDefinitionsExoSuit.scala | 111 + .../objects/global/GlobalDefinitionsKit.scala | 21 + .../GlobalDefinitionsMiscellaneous.scala | 856 ++ .../global/GlobalDefinitionsProjectile.scala | 2332 +++++ .../global/GlobalDefinitionsTools.scala | 2198 +++++ .../global/GlobalDefinitionsVehicle.scala | 1990 ++++ .../serverobject/doors/DoorDefinition.scala | 12 + .../environment/EnvironmentAttribute.scala | 74 + .../environment/PieceOfEnvironment.scala | 111 +- .../serverobject/painbox/PainboxControl.scala | 2 +- .../scala/net/psforever/zones/Zones.scala | 54 +- 14 files changed, 8527 insertions(+), 8290 deletions(-) create mode 100644 src/main/scala/net/psforever/objects/global/GlobalDefinitionsAmmo.scala create mode 100644 src/main/scala/net/psforever/objects/global/GlobalDefinitionsDeployable.scala create mode 100644 src/main/scala/net/psforever/objects/global/GlobalDefinitionsExoSuit.scala create mode 100644 src/main/scala/net/psforever/objects/global/GlobalDefinitionsKit.scala create mode 100644 src/main/scala/net/psforever/objects/global/GlobalDefinitionsMiscellaneous.scala create mode 100644 src/main/scala/net/psforever/objects/global/GlobalDefinitionsProjectile.scala create mode 100644 src/main/scala/net/psforever/objects/global/GlobalDefinitionsTools.scala create mode 100644 src/main/scala/net/psforever/objects/global/GlobalDefinitionsVehicle.scala create mode 100644 src/main/scala/net/psforever/objects/serverobject/environment/EnvironmentAttribute.scala diff --git a/src/main/scala/net/psforever/objects/GlobalDefinitions.scala b/src/main/scala/net/psforever/objects/GlobalDefinitions.scala index 094419264..070275866 100644 --- a/src/main/scala/net/psforever/objects/GlobalDefinitions.scala +++ b/src/main/scala/net/psforever/objects/GlobalDefinitions.scala @@ -1,46 +1,34 @@ // Copyright (c) 2017 PSForever package net.psforever.objects -import net.psforever.objects.avatar.Certification import net.psforever.objects.ballistics._ -import net.psforever.objects.ce.{DeployableCategory, DeployedItem} +import net.psforever.objects.ce.DeployedItem import net.psforever.objects.definition._ import net.psforever.objects.definition.converter._ import net.psforever.objects.equipment._ -import net.psforever.objects.geometry.GeometryForm -import net.psforever.objects.inventory.InventoryTile +import net.psforever.objects.global.{GlobalDefinitionsAmmo, GlobalDefinitionsDeployable, GlobalDefinitionsExoSuit, GlobalDefinitionsKit, GlobalDefinitionsMiscellaneous, GlobalDefinitionsProjectile, GlobalDefinitionsTools, GlobalDefinitionsVehicle} import net.psforever.objects.locker.LockerContainerDefinition -import net.psforever.objects.serverobject.aura.Aura import net.psforever.objects.serverobject.doors.DoorDefinition import net.psforever.objects.serverobject.generator.GeneratorDefinition import net.psforever.objects.serverobject.locks.IFFLockDefinition import net.psforever.objects.serverobject.mblocker.LockerDefinition -import net.psforever.objects.serverobject.mount._ import net.psforever.objects.serverobject.pad.VehicleSpawnPadDefinition import net.psforever.objects.serverobject.painbox.PainboxDefinition import net.psforever.objects.serverobject.terminals._ import net.psforever.objects.serverobject.tube.SpawnTubeDefinition import net.psforever.objects.serverobject.resourcesilo.ResourceSiloDefinition -import net.psforever.objects.serverobject.structures.{AmenityDefinition, AutoRepairStats, BuildingDefinition, WarpGateDefinition} +import net.psforever.objects.serverobject.structures.{AmenityDefinition, BuildingDefinition, WarpGateDefinition} import net.psforever.objects.serverobject.terminals.capture.CaptureTerminalDefinition -import net.psforever.objects.serverobject.terminals.implant.{ImplantTerminalDefinition, ImplantTerminalMechDefinition} -import net.psforever.objects.serverobject.turret.{AutoChecks, AutoCooldowns, AutoRanges, Automation, FacilityTurretDefinition, TurretUpgrade} -import net.psforever.objects.vehicles.{DestroyedVehicle, InternalTelepadDefinition, UtilityType, VehicleSubsystemEntry} -import net.psforever.objects.vital.base.DamageType -import net.psforever.objects.vital.damage._ -import net.psforever.objects.vital.etc.{ShieldAgainstRadiation => _, _} -import net.psforever.objects.vital.projectile._ -import net.psforever.objects.vital.prop.DamageWithPosition +import net.psforever.objects.serverobject.terminals.implant.ImplantTerminalMechDefinition +import net.psforever.objects.serverobject.turret.FacilityTurretDefinition +import net.psforever.objects.vehicles.InternalTelepadDefinition +import net.psforever.objects.vital.etc.{ShieldAgainstRadiation => _} import net.psforever.objects.vital._ import net.psforever.types.{ExoSuitType, ImplantType, PlanetSideEmpire, Vector3} import net.psforever.types._ import net.psforever.objects.serverobject.llu.{CaptureFlagDefinition, CaptureFlagSocketDefinition} -import net.psforever.objects.serverobject.terminals.tabs._ -import net.psforever.objects.vital.collision.TrapCollisionDamageMultiplier import scala.annotation.switch -import scala.collection.mutable -import scala.concurrent.duration._ object GlobalDefinitions { /* @@ -71,7 +59,6 @@ object GlobalDefinitions { val TRMAX = SpecialExoSuitDefinition(ExoSuitType.MAX) val NCMAX = SpecialExoSuitDefinition(ExoSuitType.MAX) - init_exosuit() /* Implants @@ -441,7 +428,6 @@ object GlobalDefinitions { val armor_siphon_projectile = ProjectileDefinition(Projectiles.Types.trek_projectile) //fake projectile for storing damage information val ntu_siphon_emp = ProjectileDefinition(Projectiles.Types.ntu_siphon_emp) - init_projectile() /* Equipment (locker_container, kits, ammunition, weapons) @@ -456,7 +442,6 @@ object GlobalDefinitions { val super_armorkit = KitDefinition(Kits.super_armorkit) val super_staminakit = KitDefinition(Kits.super_staminakit) //super stimpak - init_kit() val melee_ammo = AmmoBoxDefinition(Ammo.melee_ammo) @@ -621,7 +606,6 @@ object GlobalDefinitions { val armor_siphon_ammo = AmmoBoxDefinition(Ammo.armor_siphon_ammo) val ntu_siphon_ammo = AmmoBoxDefinition(Ammo.ntu_siphon_ammo) - init_ammo() val chainblade = ToolDefinition(ObjectClass.chainblade) @@ -991,7 +975,6 @@ object GlobalDefinitions { val peregrine_ntu_siphon_left = ToolDefinition(ObjectClass.peregrine_ntu_siphon_left) val peregrine_ntu_siphon_right = ToolDefinition(ObjectClass.peregrine_ntu_siphon_right) - init_tools() /* Vehicles @@ -1077,7 +1060,6 @@ object GlobalDefinitions { val droppod = VehicleDefinition(ObjectClass.droppod) val orbital_shuttle = VehicleDefinition(ObjectClass.orbital_shuttle) - init_vehicles() /* combat engineering deployables @@ -1114,7 +1096,6 @@ object GlobalDefinitions { //this is only treated like a deployable val internal_router_telepad_deployable = InternalTelepadDefinition() //objectId: 744 - init_deployables() /* Miscellaneous @@ -1221,14 +1202,82 @@ object GlobalDefinitions { val lock_external = new IFFLockDefinition + val amp_cap_door = new DoorDefinition(44) + + val ancient_door = new DoorDefinition(52) + + val ancient_garage_door = new DoorDefinition(53) + + val cryo_med_door = new DoorDefinition(216) + + val cryo_room_door = new DoorDefinition(216) + val door = new DoorDefinition(242) + val door_airlock = new DoorDefinition(243) + + val door_airlock_orb = new DoorDefinition(244) + + val door_dsp = new DoorDefinition(245) + + val door_garage = new DoorDefinition(246) + + val door_interior = new DoorDefinition(247) + + val door_mb = new DoorDefinition(248) + + val door_mb_garage = new DoorDefinition(249) + + val door_mb_main = new DoorDefinition(250) + + val door_mb_orb = new DoorDefinition(251) + + val door_mb_side = new DoorDefinition(252) + + val door_nc_garage = new DoorDefinition(253) + + val door_nc_rotating = new DoorDefinition(254) + + val door_ncside = new DoorDefinition(255) + + val door_orbspawn = new DoorDefinition(256) + val door_spawn_mb = new DoorDefinition(257) + val garage_door = new DoorDefinition(344) + + val gr_door_airlock = new DoorDefinition(358) + + val gr_door_ext = new DoorDefinition(359) + + val gr_door_garage_ext = new DoorDefinition(360) + + val gr_door_garage_int = new DoorDefinition(361) + + val gr_door_int = new DoorDefinition(362) + + val gr_door_main = new DoorDefinition(363) + + val gr_door_mb_ext = new DoorDefinition(364) + + val gr_door_mb_int = new DoorDefinition(365) + + val gr_door_mb_lrg = new DoorDefinition(366) + + val gr_door_mb_obsd = new DoorDefinition(367) + val gr_door_mb_orb = new DoorDefinition(368) + val gr_door_med = new DoorDefinition(369) + + val main_door = new DoorDefinition(472) + + val shield_door = new DoorDefinition(753) + val spawn_tube_door = new DoorDefinition(813) + val spawn_tube_door_coffin = new DoorDefinition(814) + val resource_silo = new ResourceSiloDefinition val capture_terminal = new CaptureTerminalDefinition(158) // Base CC @@ -1275,7 +1324,6 @@ object GlobalDefinitions { val obbasemesh = new AmenityDefinition(598) {} val targeting_laser_dispenser = new OrderTerminalDefinition(851) - initMiscellaneous() /* Buildings @@ -2073,8159 +2121,12 @@ object GlobalDefinitions { } } - /** - * Initialize `KitDefinition` globals. - */ - private def init_kit(): Unit = { - medkit.Name = "medkit" - - super_medkit.Name = "super_medkit" - - super_armorkit.Name = "super_armorkit" - - super_staminakit.Name = "super_staminakit" - } - - /** - * Initialize `ExoSuitType` globals. - */ - private def init_exosuit(): Unit = { - Standard.Name = "standard" - Standard.MaxArmor = 50 - Standard.InventoryScale = InventoryTile.Tile96 - Standard.InventoryOffset = 6 - Standard.Holster(0, EquipmentSize.Pistol) - Standard.Holster(2, EquipmentSize.Rifle) - Standard.Holster(4, EquipmentSize.Melee) - Standard.ResistanceDirectHit = 4 - Standard.ResistanceSplash = 15 - Standard.ResistanceAggravated = 8 - Standard.collision.forceFactor = 1.5f - Standard.collision.massFactor = 2f - - Agile.Name = "lite_armor" - Agile.Descriptor = "agile" - Agile.MaxArmor = 100 - Agile.InventoryScale = InventoryTile.Tile99 - Agile.InventoryOffset = 6 - Agile.Holster(0, EquipmentSize.Pistol) - Agile.Holster(1, EquipmentSize.Pistol) - Agile.Holster(2, EquipmentSize.Rifle) - Agile.Holster(4, EquipmentSize.Melee) - Agile.ResistanceDirectHit = 6 - Agile.ResistanceSplash = 25 - Agile.ResistanceAggravated = 10 - Agile.collision.forceFactor = 1.5f - Agile.collision.massFactor = 2f - - Reinforced.Name = "med_armor" - Reinforced.Descriptor = "reinforced" - Reinforced.Permissions = List(Certification.ReinforcedExoSuit) - Reinforced.MaxArmor = 200 - Reinforced.InventoryScale = InventoryTile.Tile1209 - Reinforced.InventoryOffset = 6 - Reinforced.Holster(0, EquipmentSize.Pistol) - Reinforced.Holster(1, EquipmentSize.Pistol) - Reinforced.Holster(2, EquipmentSize.Rifle) - Reinforced.Holster(3, EquipmentSize.Rifle) - Reinforced.Holster(4, EquipmentSize.Melee) - Reinforced.ResistanceDirectHit = 10 - Reinforced.ResistanceSplash = 35 - Reinforced.ResistanceAggravated = 12 - Reinforced.collision.forceFactor = 2f - Reinforced.collision.massFactor = 3f - - Infiltration.Name = "infiltration_suit" - Infiltration.Permissions = List(Certification.InfiltrationSuit) - Infiltration.MaxArmor = 0 - Infiltration.InventoryScale = InventoryTile.Tile66 - Infiltration.InventoryOffset = 6 - Infiltration.Holster(0, EquipmentSize.Pistol) - Infiltration.Holster(4, EquipmentSize.Melee) - - def CommonMaxConfig(max: SpecialExoSuitDefinition): Unit = { - max.Permissions = List(Certification.AIMAX, Certification.AVMAX, Certification.AAMAX, Certification.UniMAX) - max.MaxArmor = 650 - max.InventoryScale = InventoryTile.Tile1612 - max.InventoryOffset = 6 - max.Holster(0, EquipmentSize.Max) - max.Holster(4, EquipmentSize.Melee) - max.Subtract.Damage1 = 2 - max.ResistanceDirectHit = 6 - max.ResistanceSplash = 35 - max.ResistanceAggravated = 10 - max.RadiationShielding = 0.5f - max.collision.forceFactor = 4f - max.collision.massFactor = 10f - max.DamageUsing = DamageCalculations.AgainstMaxSuit - max.Model = MaxResolutions.calculate - } - - CommonMaxConfig(VSMAX) - VSMAX.Name = "vshev" - VSMAX.MaxCapacitor = 50 - VSMAX.CapacitorRechargeDelayMillis = 5000 - VSMAX.CapacitorRechargePerSecond = 3 - VSMAX.CapacitorDrainPerSecond = 20 - - CommonMaxConfig(TRMAX) - TRMAX.Name = "trhev" - TRMAX.MaxCapacitor = 300 - TRMAX.CapacitorRechargeDelayMillis = 10000 - TRMAX.CapacitorRechargePerSecond = 10 - TRMAX.CapacitorDrainPerSecond = 30 - - CommonMaxConfig(NCMAX) - NCMAX.Name = "nchev" - NCMAX.MaxCapacitor = 400 - NCMAX.CapacitorRechargeDelayMillis = 10000 - NCMAX.CapacitorRechargePerSecond = 4 - NCMAX.CapacitorDrainPerSecond = 4 - - } - - /** - * Initialize `AmmoBoxDefinition` globals. - */ - private def init_ammo(): Unit = { - melee_ammo.Name = "melee_ammo" - melee_ammo.Size = EquipmentSize.Blocked - - frag_grenade_ammo.Name = "frag_grenade_ammo" - frag_grenade_ammo.Size = EquipmentSize.Blocked - - jammer_grenade_ammo.Name = "jammer_grenade_ammo" - jammer_grenade_ammo.Size = EquipmentSize.Blocked - - plasma_grenade_ammo.Name = "plasma_grenade_ammo" - plasma_grenade_ammo.Size = EquipmentSize.Blocked - - bullet_9mm.Name = "9mmbullet" - bullet_9mm.Capacity = 50 - bullet_9mm.Tile = InventoryTile.Tile33 - - bullet_9mm_AP.Name = "9mmbullet_AP" - bullet_9mm_AP.Capacity = 50 - bullet_9mm_AP.Tile = InventoryTile.Tile33 - - shotgun_shell.Name = "shotgun_shell" - shotgun_shell.Capacity = 16 - shotgun_shell.Tile = InventoryTile.Tile33 - - shotgun_shell_AP.Name = "shotgun_shell_AP" - shotgun_shell_AP.Capacity = 16 - shotgun_shell_AP.Tile = InventoryTile.Tile33 - - energy_cell.Name = "energy_cell" - energy_cell.Capacity = 50 - energy_cell.Tile = InventoryTile.Tile33 - - anniversary_ammo.Name = "anniversary_ammo" - anniversary_ammo.Capacity = 30 - anniversary_ammo.Tile = InventoryTile.Tile33 - - ancient_ammo_combo.Name = "ancient_ammo_combo" - ancient_ammo_combo.Capacity = 30 - ancient_ammo_combo.Tile = InventoryTile.Tile33 - - maelstrom_ammo.Name = "maelstrom_ammo" - maelstrom_ammo.Capacity = 50 - maelstrom_ammo.Tile = InventoryTile.Tile33 - - phoenix_missile.Name = "phoenix_missile" - phoenix_missile.Size = EquipmentSize.Blocked - - striker_missile_ammo.Name = "striker_missile_ammo" - striker_missile_ammo.Capacity = 15 - striker_missile_ammo.Tile = InventoryTile.Tile44 - - hunter_seeker_missile.Name = "hunter_seeker_missile" - hunter_seeker_missile.Capacity = 9 - hunter_seeker_missile.Tile = InventoryTile.Tile44 - - lancer_cartridge.Name = "lancer_cartridge" - lancer_cartridge.Capacity = 18 - lancer_cartridge.Tile = InventoryTile.Tile44 - - rocket.Name = "rocket" - rocket.Capacity = 15 - rocket.Tile = InventoryTile.Tile33 - - frag_cartridge.Name = "frag_cartridge" - frag_cartridge.Capacity = 12 - frag_cartridge.Tile = InventoryTile.Tile33 - - plasma_cartridge.Name = "plasma_cartridge" - plasma_cartridge.Capacity = 12 - plasma_cartridge.Tile = InventoryTile.Tile33 - - jammer_cartridge.Name = "jammer_cartridge" - jammer_cartridge.Capacity = 12 - jammer_cartridge.Tile = InventoryTile.Tile33 - - bolt.Name = "bolt" - bolt.Capacity = 10 - bolt.Tile = InventoryTile.Tile33 - - oicw_ammo.Name = "oicw_ammo" - oicw_ammo.Capacity = 10 - oicw_ammo.Tile = InventoryTile.Tile44 - - flamethrower_ammo.Name = "flamethrower_ammo" - flamethrower_ammo.Capacity = 100 - flamethrower_ammo.Tile = InventoryTile.Tile44 - - winchester_ammo.Name = "winchester_ammo" - winchester_ammo.Capacity = 10 - winchester_ammo.Tile = InventoryTile.Tile33 - - pellet_gun_ammo.Name = "pellet_gun_ammo" - pellet_gun_ammo.Capacity = 8 - pellet_gun_ammo.Tile = InventoryTile.Tile33 - - six_shooter_ammo.Name = "six_shooter_ammo" - six_shooter_ammo.Capacity = 12 - six_shooter_ammo.Tile = InventoryTile.Tile33 - - dualcycler_ammo.Name = "dualcycler_ammo" - dualcycler_ammo.Capacity = 100 - dualcycler_ammo.Tile = InventoryTile.Tile44 - - pounder_ammo.Name = "pounder_ammo" - pounder_ammo.Capacity = 50 - pounder_ammo.Tile = InventoryTile.Tile44 - - burster_ammo.Name = "burster_ammo" - burster_ammo.Capacity = 100 - burster_ammo.Tile = InventoryTile.Tile44 - - scattercannon_ammo.Name = "scattercannon_ammo" - scattercannon_ammo.Capacity = 50 - scattercannon_ammo.Tile = InventoryTile.Tile44 - - falcon_ammo.Name = "falcon_ammo" - falcon_ammo.Capacity = 50 - falcon_ammo.Tile = InventoryTile.Tile44 - - sparrow_ammo.Name = "sparrow_ammo" - sparrow_ammo.Capacity = 50 - sparrow_ammo.Tile = InventoryTile.Tile44 - - quasar_ammo.Name = "quasar_ammo" - quasar_ammo.Capacity = 60 - quasar_ammo.Tile = InventoryTile.Tile44 - - comet_ammo.Name = "comet_ammo" - comet_ammo.Capacity = 50 - comet_ammo.Tile = InventoryTile.Tile44 - - starfire_ammo.Name = "starfire_ammo" - starfire_ammo.Capacity = 50 - starfire_ammo.Tile = InventoryTile.Tile44 - - health_canister.Name = "health_canister" - health_canister.Capacity = 100 - health_canister.Tile = InventoryTile.Tile23 - - armor_canister.Name = "armor_canister" - armor_canister.Capacity = 100 - armor_canister.repairAmount = 12f //ADB says 12.5, but 12 is better for the math - armor_canister.Tile = InventoryTile.Tile23 - - upgrade_canister.Name = "upgrade_canister" - upgrade_canister.Capacity = 1 - upgrade_canister.Tile = InventoryTile.Tile23 - - trek_ammo.Name = "trek_ammo" - trek_ammo.Size = EquipmentSize.Blocked - - bullet_35mm.Name = "35mmbullet" - bullet_35mm.Capacity = 100 - bullet_35mm.Tile = InventoryTile.Tile44 - - aphelion_laser_ammo.Name = "aphelion_laser_ammo" - aphelion_laser_ammo.Capacity = 165 - aphelion_laser_ammo.Tile = InventoryTile.Tile44 - - aphelion_immolation_cannon_ammo.Name = "aphelion_immolation_cannon_ammo" - aphelion_immolation_cannon_ammo.Capacity = 100 - aphelion_immolation_cannon_ammo.Tile = InventoryTile.Tile55 - - aphelion_plasma_rocket_ammo.Name = "aphelion_plasma_rocket_ammo" - aphelion_plasma_rocket_ammo.Capacity = 195 - aphelion_plasma_rocket_ammo.Tile = InventoryTile.Tile55 - - aphelion_ppa_ammo.Name = "aphelion_ppa_ammo" - aphelion_ppa_ammo.Capacity = 110 - aphelion_ppa_ammo.Tile = InventoryTile.Tile44 - - aphelion_starfire_ammo.Name = "aphelion_starfire_ammo" - aphelion_starfire_ammo.Capacity = 132 - aphelion_starfire_ammo.Tile = InventoryTile.Tile44 - - skyguard_flak_cannon_ammo.Name = "skyguard_flak_cannon_ammo" - skyguard_flak_cannon_ammo.Capacity = 200 - skyguard_flak_cannon_ammo.Tile = InventoryTile.Tile44 - - firebird_missile.Name = "firebird_missile" - firebird_missile.Capacity = 50 - firebird_missile.Tile = InventoryTile.Tile44 - - flux_cannon_thresher_battery.Name = "flux_cannon_thresher_battery" - flux_cannon_thresher_battery.Capacity = 150 - flux_cannon_thresher_battery.Tile = InventoryTile.Tile44 - - fluxpod_ammo.Name = "fluxpod_ammo" - fluxpod_ammo.Capacity = 80 - fluxpod_ammo.Tile = InventoryTile.Tile44 - - hellfire_ammo.Name = "hellfire_ammo" - hellfire_ammo.Capacity = 24 - hellfire_ammo.Tile = InventoryTile.Tile44 - - liberator_bomb.Name = "liberator_bomb" - liberator_bomb.Capacity = 20 - liberator_bomb.Tile = InventoryTile.Tile44 - - bullet_25mm.Name = "25mmbullet" - bullet_25mm.Capacity = 150 - bullet_25mm.Tile = InventoryTile.Tile44 - - bullet_75mm.Name = "75mmbullet" - bullet_75mm.Capacity = 100 - bullet_75mm.Tile = InventoryTile.Tile44 - - heavy_grenade_mortar.Name = "heavy_grenade_mortar" - heavy_grenade_mortar.Capacity = 100 - heavy_grenade_mortar.Tile = InventoryTile.Tile44 - - pulse_battery.Name = "pulse_battery" - pulse_battery.Capacity = 100 - pulse_battery.Tile = InventoryTile.Tile44 - - heavy_rail_beam_battery.Name = "heavy_rail_beam_battery" - heavy_rail_beam_battery.Capacity = 100 - heavy_rail_beam_battery.Tile = InventoryTile.Tile44 - - reaver_rocket.Name = "reaver_rocket" - reaver_rocket.Capacity = 12 - reaver_rocket.Tile = InventoryTile.Tile44 - - bullet_20mm.Name = "20mmbullet" - bullet_20mm.Capacity = 200 - bullet_20mm.Tile = InventoryTile.Tile44 - - bullet_12mm.Name = "12mmbullet" - bullet_12mm.Capacity = 300 - bullet_12mm.Tile = InventoryTile.Tile44 - - wasp_rocket_ammo.Name = "wasp_rocket_ammo" - wasp_rocket_ammo.Capacity = 6 - wasp_rocket_ammo.Tile = InventoryTile.Tile44 - - wasp_gun_ammo.Name = "wasp_gun_ammo" - wasp_gun_ammo.Capacity = 150 - wasp_gun_ammo.Tile = InventoryTile.Tile44 - - bullet_15mm.Name = "15mmbullet" - bullet_15mm.Capacity = 360 - bullet_15mm.Tile = InventoryTile.Tile44 - - colossus_100mm_cannon_ammo.Name = "colossus_100mm_cannon_ammo" - colossus_100mm_cannon_ammo.Capacity = 90 - colossus_100mm_cannon_ammo.Tile = InventoryTile.Tile55 - - colossus_burster_ammo.Name = "colossus_burster_ammo" - colossus_burster_ammo.Capacity = 235 - colossus_burster_ammo.Tile = InventoryTile.Tile44 - - colossus_cluster_bomb_ammo.Name = "colossus_cluster_bomb_ammo" - colossus_cluster_bomb_ammo.Capacity = 150 - colossus_cluster_bomb_ammo.Tile = InventoryTile.Tile55 - - colossus_chaingun_ammo.Name = "colossus_chaingun_ammo" - colossus_chaingun_ammo.Capacity = 600 - colossus_chaingun_ammo.Tile = InventoryTile.Tile44 - - colossus_tank_cannon_ammo.Name = "colossus_tank_cannon_ammo" - colossus_tank_cannon_ammo.Capacity = 110 - colossus_tank_cannon_ammo.Tile = InventoryTile.Tile44 - - bullet_105mm.Name = "105mmbullet" - bullet_105mm.Capacity = 100 - bullet_105mm.Tile = InventoryTile.Tile44 - - gauss_cannon_ammo.Name = "gauss_cannon_ammo" - gauss_cannon_ammo.Capacity = 15 - gauss_cannon_ammo.Tile = InventoryTile.Tile44 - - peregrine_dual_machine_gun_ammo.Name = "peregrine_dual_machine_gun_ammo" - peregrine_dual_machine_gun_ammo.Capacity = 240 - peregrine_dual_machine_gun_ammo.Tile = InventoryTile.Tile44 - - peregrine_mechhammer_ammo.Name = "peregrine_mechhammer_ammo" - peregrine_mechhammer_ammo.Capacity = 30 - peregrine_mechhammer_ammo.Tile = InventoryTile.Tile44 - - peregrine_particle_cannon_ammo.Name = "peregrine_particle_cannon_ammo" - peregrine_particle_cannon_ammo.Capacity = 40 - peregrine_particle_cannon_ammo.Tile = InventoryTile.Tile55 - - peregrine_rocket_pod_ammo.Name = "peregrine_rocket_pod_ammo" - peregrine_rocket_pod_ammo.Capacity = 275 - peregrine_rocket_pod_ammo.Tile = InventoryTile.Tile55 - - peregrine_sparrow_ammo.Name = "peregrine_sparrow_ammo" - peregrine_sparrow_ammo.Capacity = 150 - peregrine_sparrow_ammo.Tile = InventoryTile.Tile44 - - bullet_150mm.Name = "150mmbullet" - bullet_150mm.Capacity = 50 - bullet_150mm.Tile = InventoryTile.Tile44 - - phalanx_ammo.Name = "phalanx_ammo" - phalanx_ammo.Size = EquipmentSize.Inventory - - spitfire_ammo.Name = "spitfire_ammo" - spitfire_ammo.Size = EquipmentSize.Inventory - - spitfire_aa_ammo.Name = "spitfire_aa_ammo" - spitfire_aa_ammo.Size = EquipmentSize.Inventory - - energy_gun_ammo.Name = "energy_gun_ammo" - energy_gun_ammo.Size = EquipmentSize.Inventory - - armor_siphon_ammo.Name = "armor_siphon_ammo" - armor_siphon_ammo.Capacity = 0 - armor_siphon_ammo.Size = EquipmentSize.Blocked - - ntu_siphon_ammo.Name = "ntu_siphon_ammo" - ntu_siphon_ammo.Capacity = 0 - ntu_siphon_ammo.Size = EquipmentSize.Blocked - } - - /** - * Initialize `ProjectileDefinition` globals. - */ - private def init_projectile(): Unit = { - init_standard_projectile() - init_bfr_projectile() - } - - /** - * Initialize `ProjectileDefinition` globals for most projectiles. - */ - private def init_standard_projectile(): Unit = { - val projectileConverter: ProjectileConverter = new ProjectileConverter - val radCloudConverter: RadiationCloudConverter = new RadiationCloudConverter - - no_projectile.Name = "no_projectile" - no_projectile.DamageRadiusMin = 0f - ProjectileDefinition.CalculateDerivedFields(no_projectile) - no_projectile.Modifiers = Nil - - bullet_105mm_projectile.Name = "105mmbullet_projectile" - bullet_105mm_projectile.Damage0 = 150 - bullet_105mm_projectile.Damage1 = 300 - bullet_105mm_projectile.Damage2 = 300 - bullet_105mm_projectile.Damage3 = 300 - bullet_105mm_projectile.Damage4 = 180 - bullet_105mm_projectile.DamageAtEdge = 0.1f - bullet_105mm_projectile.DamageRadius = 7f - bullet_105mm_projectile.ProjectileDamageType = DamageType.Splash - bullet_105mm_projectile.InitialVelocity = 100 - bullet_105mm_projectile.Lifespan = 4f - ProjectileDefinition.CalculateDerivedFields(bullet_105mm_projectile) - - bullet_12mm_projectile.Name = "12mmbullet_projectile" - bullet_12mm_projectile.Damage0 = 25 - bullet_12mm_projectile.Damage1 = 10 - bullet_12mm_projectile.Damage2 = 25 - bullet_12mm_projectile.Damage3 = 10 - bullet_12mm_projectile.Damage4 = 7 - bullet_12mm_projectile.ProjectileDamageType = DamageType.Direct - bullet_12mm_projectile.DegradeDelay = .015f - bullet_12mm_projectile.DegradeMultiplier = 0.5f - bullet_12mm_projectile.InitialVelocity = 500 - bullet_12mm_projectile.Lifespan = 0.5f - bullet_12mm_projectile.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(bullet_12mm_projectile) - - bullet_12mm_projectileb.Name = "12mmbullet_projectileb" - // TODO for later, maybe : set_resource_parent 12mmbullet_projectileb game_objects 12mmbullet_projectile - bullet_12mm_projectileb.Damage0 = 25 - bullet_12mm_projectileb.Damage1 = 10 - bullet_12mm_projectileb.Damage2 = 25 - bullet_12mm_projectileb.Damage3 = 10 - bullet_12mm_projectileb.Damage4 = 7 - bullet_12mm_projectileb.ProjectileDamageType = DamageType.Direct - bullet_12mm_projectileb.DegradeDelay = .015f - bullet_12mm_projectileb.DegradeMultiplier = 0.5f - bullet_12mm_projectileb.InitialVelocity = 500 - bullet_12mm_projectileb.Lifespan = 0.5f - bullet_12mm_projectileb.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(bullet_12mm_projectileb) - - bullet_150mm_projectile.Name = "150mmbullet_projectile" - bullet_150mm_projectile.Damage0 = 150 - bullet_150mm_projectile.Damage1 = 450 - bullet_150mm_projectile.Damage2 = 450 - bullet_150mm_projectile.Damage3 = 450 - bullet_150mm_projectile.Damage4 = 400 - bullet_150mm_projectile.DamageAtEdge = 0.10f - bullet_150mm_projectile.DamageRadius = 8f - bullet_150mm_projectile.ProjectileDamageType = DamageType.Splash - bullet_150mm_projectile.InitialVelocity = 100 - bullet_150mm_projectile.Lifespan = 4f - ProjectileDefinition.CalculateDerivedFields(bullet_150mm_projectile) - bullet_150mm_projectile.Modifiers = RadialDegrade - - bullet_15mm_apc_projectile.Name = "15mmbullet_apc_projectile" - // TODO for later, maybe : set_resource_parent 15mmbullet_apc_projectile game_objects 15mmbullet_projectile - bullet_15mm_apc_projectile.Damage0 = 12 - bullet_15mm_apc_projectile.Damage1 = 20 - bullet_15mm_apc_projectile.Damage2 = 30 - bullet_15mm_apc_projectile.Damage3 = 20 - bullet_15mm_apc_projectile.Damage4 = 16 - bullet_15mm_apc_projectile.ProjectileDamageType = DamageType.Direct - bullet_15mm_apc_projectile.DegradeDelay = .015f - bullet_15mm_apc_projectile.DegradeMultiplier = 0.5f - bullet_15mm_apc_projectile.InitialVelocity = 500 - bullet_15mm_apc_projectile.Lifespan = 0.5f - ProjectileDefinition.CalculateDerivedFields(bullet_15mm_apc_projectile) - - bullet_15mm_projectile.Name = "15mmbullet_projectile" - bullet_15mm_projectile.Damage0 = 21 - bullet_15mm_projectile.Damage1 = 18 - bullet_15mm_projectile.Damage2 = 25 - bullet_15mm_projectile.Damage3 = 18 - bullet_15mm_projectile.Damage4 = 11 - bullet_15mm_projectile.ProjectileDamageType = DamageType.Direct - bullet_15mm_projectile.DegradeDelay = .015f - bullet_15mm_projectile.DegradeMultiplier = 0.5f - bullet_15mm_projectile.InitialVelocity = 500 - bullet_15mm_projectile.Lifespan = 0.5f - ProjectileDefinition.CalculateDerivedFields(bullet_15mm_projectile) - - bullet_20mm_apc_projectile.Name = "20mmbullet_apc_projectile" - // TODO for later, maybe : set_resource_parent 20mmbullet_apc_projectile game_objects 20mmbullet_projectile - bullet_20mm_apc_projectile.Damage0 = 24 - bullet_20mm_apc_projectile.Damage1 = 40 - bullet_20mm_apc_projectile.Damage2 = 60 - bullet_20mm_apc_projectile.Damage3 = 40 - bullet_20mm_apc_projectile.Damage4 = 32 - bullet_20mm_apc_projectile.ProjectileDamageType = DamageType.Direct - bullet_20mm_apc_projectile.DegradeDelay = .015f - bullet_20mm_apc_projectile.DegradeMultiplier = 0.5f - bullet_20mm_apc_projectile.InitialVelocity = 500 - bullet_20mm_apc_projectile.Lifespan = 0.5f - ProjectileDefinition.CalculateDerivedFields(bullet_20mm_apc_projectile) - - bullet_20mm_projectile.Name = "20mmbullet_projectile" - bullet_20mm_projectile.Damage0 = 20 - bullet_20mm_projectile.Damage1 = 20 - bullet_20mm_projectile.Damage2 = 40 - bullet_20mm_projectile.Damage3 = 20 - bullet_20mm_projectile.Damage4 = 16 - bullet_20mm_projectile.ProjectileDamageType = DamageType.Direct - bullet_20mm_projectile.DegradeDelay = .015f - bullet_20mm_projectile.DegradeMultiplier = 0.5f - bullet_20mm_projectile.InitialVelocity = 500 - bullet_20mm_projectile.Lifespan = 0.5f - ProjectileDefinition.CalculateDerivedFields(bullet_20mm_projectile) - - bullet_25mm_projectile.Name = "25mmbullet_projectile" - bullet_25mm_projectile.Damage0 = 25 - bullet_25mm_projectile.Damage1 = 35 - bullet_25mm_projectile.Damage2 = 50 - bullet_25mm_projectile.ProjectileDamageType = DamageType.Direct - bullet_25mm_projectile.DegradeDelay = .02f - bullet_25mm_projectile.DegradeMultiplier = 0.5f - bullet_25mm_projectile.InitialVelocity = 500 - bullet_25mm_projectile.Lifespan = 0.6f - ProjectileDefinition.CalculateDerivedFields(bullet_25mm_projectile) - - bullet_35mm_projectile.Name = "35mmbullet_projectile" - bullet_35mm_projectile.Damage0 = 40 - bullet_35mm_projectile.Damage1 = 50 - bullet_35mm_projectile.Damage2 = 60 - bullet_35mm_projectile.ProjectileDamageType = DamageType.Direct - bullet_35mm_projectile.DegradeDelay = .015f - bullet_35mm_projectile.DegradeMultiplier = 0.5f - bullet_35mm_projectile.InitialVelocity = 200 - bullet_35mm_projectile.Lifespan = 1.5f - ProjectileDefinition.CalculateDerivedFields(bullet_35mm_projectile) - - bullet_75mm_apc_projectile.Name = "75mmbullet_apc_projectile" - // TODO for later, maybe : set_resource_parent 75mmbullet_apc_projectile game_objects 75mmbullet_projectile - bullet_75mm_apc_projectile.Damage0 = 85 - bullet_75mm_apc_projectile.Damage1 = 155 - bullet_75mm_apc_projectile.DamageAtEdge = 0.1f - bullet_75mm_apc_projectile.DamageRadius = 5f - bullet_75mm_apc_projectile.ProjectileDamageType = DamageType.Splash - bullet_75mm_apc_projectile.InitialVelocity = 100 - bullet_75mm_apc_projectile.Lifespan = 4f - ProjectileDefinition.CalculateDerivedFields(bullet_75mm_apc_projectile) - bullet_75mm_apc_projectile.Modifiers = RadialDegrade - - bullet_75mm_projectile.Name = "75mmbullet_projectile" - bullet_75mm_projectile.Damage0 = 75 - bullet_75mm_projectile.Damage1 = 125 - bullet_75mm_projectile.DamageAtEdge = 0.1f - bullet_75mm_projectile.DamageRadius = 5f - bullet_75mm_projectile.ProjectileDamageType = DamageType.Splash - bullet_75mm_projectile.InitialVelocity = 100 - bullet_75mm_projectile.Lifespan = 4f - ProjectileDefinition.CalculateDerivedFields(bullet_75mm_projectile) - bullet_75mm_projectile.Modifiers = RadialDegrade - - bullet_9mm_AP_projectile.Name = "9mmbullet_AP_projectile" - // TODO for later, maybe : set_resource_parent 9mmbullet_AP_projectile game_objects 9mmbullet_projectile - bullet_9mm_AP_projectile.Damage0 = 10 - bullet_9mm_AP_projectile.Damage1 = 15 - bullet_9mm_AP_projectile.ProjectileDamageType = DamageType.Direct - bullet_9mm_AP_projectile.DegradeDelay = 0.15f - bullet_9mm_AP_projectile.DegradeMultiplier = 0.25f - bullet_9mm_AP_projectile.InitialVelocity = 500 - bullet_9mm_AP_projectile.Lifespan = 0.4f - bullet_9mm_AP_projectile.UseDamage1Subtract = true - bullet_9mm_AP_projectile.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(bullet_9mm_AP_projectile) - - bullet_9mm_projectile.Name = "9mmbullet_projectile" - bullet_9mm_projectile.Damage0 = 18 - bullet_9mm_projectile.Damage1 = 10 - bullet_9mm_projectile.ProjectileDamageType = DamageType.Direct - bullet_9mm_projectile.DegradeDelay = 0.15f - bullet_9mm_projectile.DegradeMultiplier = 0.25f - bullet_9mm_projectile.InitialVelocity = 500 - bullet_9mm_projectile.Lifespan = 0.4f - bullet_9mm_projectile.UseDamage1Subtract = true - bullet_9mm_projectile.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(bullet_9mm_projectile) - - anniversary_projectilea.Name = "anniversary_projectilea" - anniversary_projectilea.Damage0 = 30 - anniversary_projectilea.Damage1 = 15 - anniversary_projectilea.Damage2 = 15 - anniversary_projectilea.Damage3 = 45 - anniversary_projectilea.Damage4 = 15 - anniversary_projectilea.ProjectileDamageType = DamageType.Direct - anniversary_projectilea.DegradeDelay = 0.04f - anniversary_projectilea.DegradeMultiplier = 0.2f - anniversary_projectilea.InitialVelocity = 500 - anniversary_projectilea.Lifespan = 0.5f - anniversary_projectilea.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(anniversary_projectilea) - - anniversary_projectileb.Name = "anniversary_projectileb" - // TODO for later, maybe : set_resource_parent anniversary_projectileb game_objects anniversary_projectilea - anniversary_projectileb.Damage0 = 30 - anniversary_projectileb.Damage1 = 15 - anniversary_projectileb.Damage2 = 15 - anniversary_projectileb.Damage3 = 45 - anniversary_projectileb.Damage4 = 15 - anniversary_projectileb.ProjectileDamageType = DamageType.Direct - anniversary_projectileb.DegradeDelay = 0.04f - anniversary_projectileb.DegradeMultiplier = 0.2f - anniversary_projectileb.InitialVelocity = 500 - anniversary_projectileb.Lifespan = 0.5f - anniversary_projectileb.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(anniversary_projectileb) - - bolt_projectile.Name = "bolt_projectile" - bolt_projectile.Damage0 = 100 - bolt_projectile.Damage1 = 50 - bolt_projectile.Damage2 = 50 - bolt_projectile.Damage3 = 50 - bolt_projectile.Damage4 = 75 - bolt_projectile.ProjectileDamageType = DamageType.Splash - bolt_projectile.InitialVelocity = 500 - bolt_projectile.Lifespan = 1.0f - bolt_projectile.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(bolt_projectile) - //TODO bolt_projectile.Modifiers = DistanceDegrade? - - burster_projectile.Name = "burster_projectile" - burster_projectile.Damage0 = 18 - burster_projectile.Damage1 = 25 - burster_projectile.Damage2 = 50 - burster_projectile.DamageAtEdge = 0.25f - burster_projectile.DamageRadius = 10f - burster_projectile.ProjectileDamageType = DamageType.Direct - burster_projectile.ProjectileDamageTypeSecondary = DamageType.Splash - burster_projectile.InitialVelocity = 125 - burster_projectile.Lifespan = 4f - ProjectileDefinition.CalculateDerivedFields(burster_projectile) - burster_projectile.Modifiers = List( - //FlakHit, - FlakBurst, - MaxDistanceCutoff - ) - - chainblade_projectile.Name = "chainblade_projectile" - // TODO for later, maybe : set_resource_parent chainblade_projectile game_objects melee_ammo_projectile - chainblade_projectile.Damage0 = 50 - chainblade_projectile.Damage1 = 0 - chainblade_projectile.ProjectileDamageType = DamageType.Direct - chainblade_projectile.InitialVelocity = 100 - chainblade_projectile.Lifespan = .02f - ProjectileDefinition.CalculateDerivedFields(chainblade_projectile) - chainblade_projectile.Modifiers = List(MeleeBoosted, MaxDistanceCutoff) - - comet_projectile.Name = "comet_projectile" - comet_projectile.Damage0 = 15 - comet_projectile.Damage1 = 60 - comet_projectile.Damage2 = 60 - comet_projectile.Damage3 = 38 - comet_projectile.Damage4 = 64 - comet_projectile.Acceleration = 10 - comet_projectile.AccelerationUntil = 2f - comet_projectile.DamageAtEdge = 0.45f - comet_projectile.DamageRadius = 1.0f - comet_projectile.ProjectileDamageType = DamageType.Aggravated - comet_projectile.Aggravated = AggravatedDamage( - AggravatedInfo(DamageType.Direct, 0.25f, 500), //originally, .2 - Aura.Comet, - AggravatedTiming(2000, 3), - 10f, - List( - TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player), - TargetValidation(EffectTarget.Category.Vehicle, EffectTarget.Validation.Vehicle), - TargetValidation(EffectTarget.Category.Turret, EffectTarget.Validation.Turret) - ) - ) - comet_projectile.InitialVelocity = 80 - comet_projectile.Lifespan = 3.1f - ProjectileDefinition.CalculateDerivedFields(comet_projectile) - comet_projectile.Modifiers = List( - CometAggravated, - CometAggravatedBurn - ) - - dualcycler_projectile.Name = "dualcycler_projectile" - dualcycler_projectile.Damage0 = 18 - dualcycler_projectile.Damage1 = 10 - dualcycler_projectile.ProjectileDamageType = DamageType.Direct - dualcycler_projectile.DegradeDelay = .025f - dualcycler_projectile.DegradeMultiplier = .5f - dualcycler_projectile.InitialVelocity = 500 - dualcycler_projectile.Lifespan = 0.5f - dualcycler_projectile.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(dualcycler_projectile) - - dynomite_projectile.Name = "dynomite_projectile" - // TODO for later, maybe : set_resource_parent dynomite_projectile game_objects frag_grenade_projectile_enh - dynomite_projectile.Damage0 = 75 - dynomite_projectile.Damage1 = 175 - dynomite_projectile.DamageAtEdge = 0.1f - dynomite_projectile.DamageRadius = 10f - dynomite_projectile.GrenadeProjectile = true - dynomite_projectile.ProjectileDamageType = DamageType.Splash - dynomite_projectile.InitialVelocity = 30 - dynomite_projectile.Lifespan = 3f - ProjectileDefinition.CalculateDerivedFields(dynomite_projectile) - dynomite_projectile.Modifiers = RadialDegrade - - energy_cell_projectile.Name = "energy_cell_projectile" - energy_cell_projectile.Damage0 = 18 - energy_cell_projectile.Damage1 = 10 - energy_cell_projectile.ProjectileDamageType = DamageType.Direct - energy_cell_projectile.DegradeDelay = 0.05f - energy_cell_projectile.DegradeMultiplier = 0.4f - energy_cell_projectile.InitialVelocity = 500 - energy_cell_projectile.Lifespan = .4f - energy_cell_projectile.UseDamage1Subtract = true - energy_cell_projectile.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(energy_cell_projectile) - - energy_gun_nc_projectile.Name = "energy_gun_nc_projectile" - energy_gun_nc_projectile.Damage0 = 10 - energy_gun_nc_projectile.Damage1 = 13 - energy_gun_nc_projectile.ProjectileDamageType = DamageType.Direct - energy_gun_nc_projectile.InitialVelocity = 500 - energy_gun_nc_projectile.Lifespan = 0.5f - energy_gun_nc_projectile.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(energy_gun_nc_projectile) - - energy_gun_tr_projectile.Name = "energy_gun_tr_projectile" - energy_gun_tr_projectile.Damage0 = 14 - energy_gun_tr_projectile.Damage1 = 18 - energy_gun_tr_projectile.ProjectileDamageType = DamageType.Direct - energy_gun_tr_projectile.DegradeDelay = .025f - energy_gun_tr_projectile.DegradeMultiplier = .5f - energy_gun_tr_projectile.InitialVelocity = 500 - energy_gun_tr_projectile.Lifespan = 0.5f - energy_gun_tr_projectile.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(energy_gun_tr_projectile) - - energy_gun_vs_projectile.Name = "energy_gun_vs_projectile" - energy_gun_vs_projectile.Damage0 = 25 - energy_gun_vs_projectile.Damage1 = 35 - energy_gun_vs_projectile.ProjectileDamageType = DamageType.Direct - energy_gun_vs_projectile.DegradeDelay = 0.045f - energy_gun_vs_projectile.DegradeMultiplier = 0.5f - energy_gun_vs_projectile.InitialVelocity = 500 - energy_gun_vs_projectile.Lifespan = .5f - energy_gun_vs_projectile.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(energy_gun_vs_projectile) - - enhanced_energy_cell_projectile.Name = "enhanced_energy_cell_projectile" - // TODO for later, maybe : set_resource_parent enhanced_energy_cell_projectile game_objects energy_cell_projectile - enhanced_energy_cell_projectile.Damage0 = 7 - enhanced_energy_cell_projectile.Damage1 = 15 - enhanced_energy_cell_projectile.ProjectileDamageType = DamageType.Direct - enhanced_energy_cell_projectile.DegradeDelay = 0.05f - enhanced_energy_cell_projectile.DegradeMultiplier = 0.4f - enhanced_energy_cell_projectile.InitialVelocity = 500 - enhanced_energy_cell_projectile.Lifespan = .4f - enhanced_energy_cell_projectile.UseDamage1Subtract = true - enhanced_energy_cell_projectile.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(enhanced_energy_cell_projectile) - - enhanced_quasar_projectile.Name = "enhanced_quasar_projectile" - // TODO for later, maybe : set_resource_parent enhanced_quasar_projectile game_objects quasar_projectile - enhanced_quasar_projectile.Damage1 = 12 - enhanced_quasar_projectile.Damage0 = 10 - enhanced_quasar_projectile.ProjectileDamageType = DamageType.Direct - enhanced_quasar_projectile.DegradeDelay = 0.045f - enhanced_quasar_projectile.DegradeMultiplier = 0.5f - enhanced_quasar_projectile.InitialVelocity = 500 - enhanced_quasar_projectile.Lifespan = .4f - enhanced_quasar_projectile.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(enhanced_quasar_projectile) - - falcon_projectile.Name = "falcon_projectile" - falcon_projectile.Damage0 = 35 - falcon_projectile.Damage1 = 132 - falcon_projectile.Damage2 = 132 - falcon_projectile.Damage3 = 83 - falcon_projectile.Damage4 = 144 - falcon_projectile.Acceleration = 10 - falcon_projectile.AccelerationUntil = 2f - falcon_projectile.DamageAtEdge = 0.2f - falcon_projectile.DamageRadius = 1f - falcon_projectile.ProjectileDamageType = DamageType.Splash - falcon_projectile.InitialVelocity = 120 - falcon_projectile.Lifespan = 2.1f - ProjectileDefinition.CalculateDerivedFields(falcon_projectile) - falcon_projectile.Modifiers = RadialDegrade - - firebird_missile_projectile.Name = "firebird_missile_projectile" - firebird_missile_projectile.Damage0 = 125 - firebird_missile_projectile.Damage1 = 220 - firebird_missile_projectile.Damage2 = 220 - firebird_missile_projectile.Damage3 = 200 - firebird_missile_projectile.Damage4 = 181 - firebird_missile_projectile.Acceleration = 20 - firebird_missile_projectile.AccelerationUntil = 2f - firebird_missile_projectile.DamageAtEdge = .1f - firebird_missile_projectile.DamageRadius = 5f - firebird_missile_projectile.ProjectileDamageType = DamageType.Splash - firebird_missile_projectile.InitialVelocity = 75 - firebird_missile_projectile.Lifespan = 5f - ProjectileDefinition.CalculateDerivedFields(firebird_missile_projectile) - firebird_missile_projectile.Modifiers = RadialDegrade - - flail_projectile.Name = "flail_projectile" - flail_projectile.Damage0 = 75 - flail_projectile.Damage1 = 200 - flail_projectile.Damage2 = 200 - flail_projectile.Damage3 = 200 - flail_projectile.Damage4 = 300 - flail_projectile.DamageAtEdge = 0.1f - flail_projectile.DamageRadius = 15f - flail_projectile.ProjectileDamageType = DamageType.Splash - flail_projectile.DegradeDelay = 1.5f - //a DegradeDelay of 1.5s equals a DistanceNoDegrade of 112.5m - flail_projectile.DegradeMultiplier = 5f - flail_projectile.InitialVelocity = 75 - flail_projectile.Lifespan = 40f - ProjectileDefinition.CalculateDerivedFields(flail_projectile) - flail_projectile.Modifiers = List( - FlailDistanceDamageBoost, - RadialDegrade - ) - - flamethrower_fire_cloud.Name = "flamethrower_fire_cloud" - flamethrower_fire_cloud.Damage0 = 2 - flamethrower_fire_cloud.Damage1 = 0 - flamethrower_fire_cloud.Damage2 = 0 - flamethrower_fire_cloud.Damage3 = 1 - flamethrower_fire_cloud.Damage4 = 0 - flamethrower_fire_cloud.DamageAtEdge = 0.1f - flamethrower_fire_cloud.DamageRadius = 5f - flamethrower_fire_cloud.ProjectileDamageType = DamageType.Aggravated - flamethrower_fire_cloud.Aggravated = AggravatedDamage( - List(AggravatedInfo(DamageType.Direct, -1.5f, 500), AggravatedInfo(DamageType.Splash, -4.0f, 500)), - Aura.Fire, - AggravatedTiming(5000, 10), - 2.5f, - false, - false, - List(TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player)) - ) - flamethrower_fire_cloud.Lifespan = 5f - ProjectileDefinition.CalculateDerivedFields(flamethrower_fire_cloud) - flamethrower_fire_cloud.Modifiers = List( - InfantryAggravatedDirect, - InfantryAggravatedSplash, - RadialDegrade, - FireballAggravatedBurn - ) - - flamethrower_fireball.Name = "flamethrower_fireball" - flamethrower_fireball.Damage0 = 30 - flamethrower_fireball.Damage1 = 0 - flamethrower_fireball.Damage2 = 0 - flamethrower_fireball.Damage3 = 20 - flamethrower_fireball.Damage4 = 0 - flamethrower_fireball.DamageToHealthOnly = true - flamethrower_fireball.DamageAtEdge = 0.15f - flamethrower_fireball.DamageRadius = 5f - flamethrower_fireball.ProjectileDamageType = DamageType.Aggravated - flamethrower_fireball.Aggravated = AggravatedDamage( - List(AggravatedInfo(DamageType.Direct, 0.9f, 500), AggravatedInfo(DamageType.Splash, 0.9f, 500)), - Aura.Fire, - AggravatedTiming(5000, 10), - 0.1f, - false, - false, - List(TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player)) - ) - flamethrower_fireball.InitialVelocity = 15 - flamethrower_fireball.Lifespan = 1.2f - ProjectileDefinition.CalculateDerivedFields(flamethrower_fireball) - flamethrower_fireball.Modifiers = List( - InfantryAggravatedDirect, - InfantryAggravatedSplash, - RadialDegrade, - FireballAggravatedBurn - ) - - flamethrower_projectile.Name = "flamethrower_projectile" - flamethrower_projectile.Damage0 = 10 - flamethrower_projectile.Damage1 = 0 - flamethrower_projectile.Damage2 = 0 - flamethrower_projectile.Damage3 = 4 - flamethrower_projectile.Damage4 = 0 - flamethrower_projectile.DamageToHealthOnly = true - flamethrower_projectile.Acceleration = -5 - flamethrower_projectile.AccelerationUntil = 2f - flamethrower_projectile.ProjectileDamageType = DamageType.Aggravated - flamethrower_projectile.Aggravated = AggravatedDamage( - List(AggravatedInfo(DamageType.Direct, 0.5f, 500)), - Aura.Fire, - AggravatedTiming(5000, 10), - 0.5f, - false, - false, - List(TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player)) - ) - flamethrower_projectile.DegradeDelay = 1.0f - flamethrower_projectile.DegradeMultiplier = 0.5f - flamethrower_projectile.InitialVelocity = 10 - flamethrower_projectile.Lifespan = 2.0f - ProjectileDefinition.CalculateDerivedFields(flamethrower_projectile) - flamethrower_projectile.Modifiers = List( - InfantryAggravatedDirect, - FireballAggravatedBurn, - MaxDistanceCutoff - ) - - flux_cannon_apc_projectile.Name = "flux_cannon_apc_projectile" - // TODO for later, maybe : set_resource_parent flux_cannon_apc_projectile game_objects flux_cannon_thresher_projectile - flux_cannon_apc_projectile.Damage0 = 14 - flux_cannon_apc_projectile.Damage1 = 23 - flux_cannon_apc_projectile.Damage2 = 35 - flux_cannon_apc_projectile.Damage3 = 23 - flux_cannon_apc_projectile.Damage4 = 18 - flux_cannon_apc_projectile.DamageAtEdge = .5f - flux_cannon_apc_projectile.DamageRadius = 4f - flux_cannon_apc_projectile.ProjectileDamageType = DamageType.Direct - flux_cannon_apc_projectile.InitialVelocity = 300 - flux_cannon_apc_projectile.Lifespan = 1f - ProjectileDefinition.CalculateDerivedFields(flux_cannon_apc_projectile) - - flux_cannon_thresher_projectile.Name = "flux_cannon_thresher_projectile" - flux_cannon_thresher_projectile.Damage0 = 30 - flux_cannon_thresher_projectile.Damage1 = 44 - flux_cannon_thresher_projectile.Damage2 = 44 - flux_cannon_thresher_projectile.Damage3 = 40 - flux_cannon_thresher_projectile.Damage4 = 37 - flux_cannon_thresher_projectile.DamageAtEdge = .5f - flux_cannon_thresher_projectile.DamageRadius = 4f - flux_cannon_thresher_projectile.ProjectileDamageType = DamageType.Splash - flux_cannon_thresher_projectile.InitialVelocity = 75 - flux_cannon_thresher_projectile.Lifespan = 3f - ProjectileDefinition.CalculateDerivedFields(flux_cannon_thresher_projectile) - flux_cannon_thresher_projectile.Modifiers = RadialDegrade - - fluxpod_projectile.Name = "fluxpod_projectile" - fluxpod_projectile.Damage0 = 110 - fluxpod_projectile.Damage1 = 80 - fluxpod_projectile.Damage2 = 125 - fluxpod_projectile.Damage3 = 80 - fluxpod_projectile.Damage4 = 52 - fluxpod_projectile.DamageAtEdge = .3f - fluxpod_projectile.DamageRadius = 3f - fluxpod_projectile.ProjectileDamageType = DamageType.Splash - fluxpod_projectile.InitialVelocity = 80 - fluxpod_projectile.Lifespan = 4f - ProjectileDefinition.CalculateDerivedFields(fluxpod_projectile) - fluxpod_projectile.Modifiers = RadialDegrade - - forceblade_projectile.Name = "forceblade_projectile" - // TODO for later, maybe : set_resource_parent forceblade_projectile game_objects melee_ammo_projectile - forceblade_projectile.Damage0 = 50 - forceblade_projectile.Damage1 = 0 - forceblade_projectile.ProjectileDamageType = DamageType.Direct - forceblade_projectile.InitialVelocity = 100 - forceblade_projectile.Lifespan = .02f - ProjectileDefinition.CalculateDerivedFields(forceblade_projectile) - forceblade_projectile.Modifiers = List(MeleeBoosted, MaxDistanceCutoff) - - frag_cartridge_projectile.Name = "frag_cartridge_projectile" - // TODO for later, maybe : set_resource_parent frag_cartridge_projectile game_objects frag_grenade_projectile - frag_cartridge_projectile.Damage0 = 75 - frag_cartridge_projectile.Damage1 = 100 - frag_cartridge_projectile.DamageAtEdge = 0.1f - frag_cartridge_projectile.DamageRadius = 7f - frag_cartridge_projectile.GrenadeProjectile = true - frag_cartridge_projectile.ProjectileDamageType = DamageType.Splash - frag_cartridge_projectile.InitialVelocity = 30 - frag_cartridge_projectile.Lifespan = 15f - ProjectileDefinition.CalculateDerivedFields(frag_cartridge_projectile) - frag_cartridge_projectile.Modifiers = RadialDegrade - - frag_cartridge_projectile_b.Name = "frag_cartridge_projectile_b" - // TODO for later, maybe : set_resource_parent frag_cartridge_projectile_b game_objects frag_grenade_projectile_enh - frag_cartridge_projectile_b.Damage0 = 75 - frag_cartridge_projectile_b.Damage1 = 100 - frag_cartridge_projectile_b.DamageAtEdge = 0.1f - frag_cartridge_projectile_b.DamageRadius = 5f - frag_cartridge_projectile_b.GrenadeProjectile = true - frag_cartridge_projectile_b.ProjectileDamageType = DamageType.Splash - frag_cartridge_projectile_b.InitialVelocity = 30 - frag_cartridge_projectile_b.Lifespan = 2f - ProjectileDefinition.CalculateDerivedFields(frag_cartridge_projectile_b) - frag_cartridge_projectile_b.Modifiers = RadialDegrade - - frag_grenade_projectile.Name = "frag_grenade_projectile" - frag_grenade_projectile.Damage0 = 75 - frag_grenade_projectile.Damage1 = 100 - frag_grenade_projectile.DamageAtEdge = 0.1f - frag_grenade_projectile.DamageRadius = 7f - frag_grenade_projectile.GrenadeProjectile = true - frag_grenade_projectile.ProjectileDamageType = DamageType.Splash - frag_grenade_projectile.InitialVelocity = 30 - frag_grenade_projectile.Lifespan = 15f - ProjectileDefinition.CalculateDerivedFields(frag_grenade_projectile) - frag_grenade_projectile.Modifiers = RadialDegrade - - frag_grenade_projectile_enh.Name = "frag_grenade_projectile_enh" - // TODO for later, maybe : set_resource_parent frag_grenade_projectile_enh game_objects frag_grenade_projectile - frag_grenade_projectile_enh.Damage0 = 75 - frag_grenade_projectile_enh.Damage1 = 100 - frag_grenade_projectile_enh.DamageAtEdge = 0.1f - frag_grenade_projectile_enh.DamageRadius = 7f - frag_grenade_projectile_enh.GrenadeProjectile = true - frag_grenade_projectile_enh.ProjectileDamageType = DamageType.Splash - frag_grenade_projectile_enh.InitialVelocity = 30 - frag_grenade_projectile_enh.Lifespan = 2f - ProjectileDefinition.CalculateDerivedFields(frag_grenade_projectile_enh) - frag_grenade_projectile_enh.Modifiers = RadialDegrade - - galaxy_gunship_gun_projectile.Name = "galaxy_gunship_gun_projectile" - // TODO for later, maybe : set_resource_parent galaxy_gunship_gun_projectile game_objects 35mmbullet_projectile - galaxy_gunship_gun_projectile.Damage0 = 40 - galaxy_gunship_gun_projectile.Damage1 = 50 - galaxy_gunship_gun_projectile.Damage2 = 80 - galaxy_gunship_gun_projectile.ProjectileDamageType = DamageType.Direct - galaxy_gunship_gun_projectile.DegradeDelay = 0.4f - galaxy_gunship_gun_projectile.DegradeMultiplier = 0.6f - galaxy_gunship_gun_projectile.InitialVelocity = 400 - galaxy_gunship_gun_projectile.Lifespan = 0.8f - ProjectileDefinition.CalculateDerivedFields(galaxy_gunship_gun_projectile) - - gauss_cannon_projectile.Name = "gauss_cannon_projectile" - gauss_cannon_projectile.Damage0 = 190 - gauss_cannon_projectile.Damage1 = 370 - gauss_cannon_projectile.Damage2 = 370 - gauss_cannon_projectile.Damage3 = 370 - gauss_cannon_projectile.Damage4 = 240 - gauss_cannon_projectile.DamageAtEdge = 0.3f - gauss_cannon_projectile.DamageRadius = 1.5f - gauss_cannon_projectile.ProjectileDamageType = DamageType.Splash - gauss_cannon_projectile.InitialVelocity = 150 - gauss_cannon_projectile.Lifespan = 2.67f - ProjectileDefinition.CalculateDerivedFields(gauss_cannon_projectile) - gauss_cannon_projectile.Modifiers = RadialDegrade - - grenade_projectile.Name = "grenade_projectile" - grenade_projectile.Damage0 = 50 - grenade_projectile.DamageAtEdge = 0.2f - grenade_projectile.DamageRadius = 100f - grenade_projectile.ProjectileDamageType = DamageType.Splash - grenade_projectile.InitialVelocity = 15 - grenade_projectile.Lifespan = 15f - ProjectileDefinition.CalculateDerivedFields(grenade_projectile) - grenade_projectile.Modifiers = RadialDegrade - - heavy_grenade_projectile.Name = "heavy_grenade_projectile" - heavy_grenade_projectile.Damage0 = 50 - heavy_grenade_projectile.Damage1 = 82 - heavy_grenade_projectile.Damage2 = 82 - heavy_grenade_projectile.Damage3 = 75 - heavy_grenade_projectile.Damage4 = 66 - heavy_grenade_projectile.DamageAtEdge = 0.1f - heavy_grenade_projectile.DamageRadius = 5f - heavy_grenade_projectile.GrenadeProjectile = true - heavy_grenade_projectile.ProjectileDamageType = DamageType.Splash - heavy_grenade_projectile.InitialVelocity = 75 - heavy_grenade_projectile.Lifespan = 5f - ProjectileDefinition.CalculateDerivedFields(heavy_grenade_projectile) - heavy_grenade_projectile.Modifiers = RadialDegrade - - heavy_rail_beam_projectile.Name = "heavy_rail_beam_projectile" - heavy_rail_beam_projectile.Damage0 = 75 - heavy_rail_beam_projectile.Damage1 = 215 - heavy_rail_beam_projectile.Damage2 = 215 - heavy_rail_beam_projectile.Damage3 = 215 - heavy_rail_beam_projectile.Damage4 = 120 - heavy_rail_beam_projectile.DamageAtEdge = 0.30f - heavy_rail_beam_projectile.DamageRadius = 5f - heavy_rail_beam_projectile.ProjectileDamageType = DamageType.Splash - heavy_rail_beam_projectile.InitialVelocity = 600 - heavy_rail_beam_projectile.Lifespan = .5f - ProjectileDefinition.CalculateDerivedFields(heavy_rail_beam_projectile) - heavy_rail_beam_projectile.Modifiers = RadialDegrade - - heavy_sniper_projectile.Name = "heavy_sniper_projectile" - heavy_sniper_projectile.Damage0 = 55 - heavy_sniper_projectile.Damage1 = 28 - heavy_sniper_projectile.Damage2 = 28 - heavy_sniper_projectile.Damage3 = 28 - heavy_sniper_projectile.Damage4 = 42 - heavy_sniper_projectile.ProjectileDamageType = DamageType.Splash - heavy_sniper_projectile.InitialVelocity = 500 - heavy_sniper_projectile.Lifespan = 1.0f - heavy_sniper_projectile.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(heavy_sniper_projectile) - heavy_sniper_projectile.Modifiers = RadialDegrade - - hellfire_projectile.Name = "hellfire_projectile" - hellfire_projectile.Damage0 = 50 - hellfire_projectile.Damage1 = 250 - hellfire_projectile.Damage2 = 250 - hellfire_projectile.Damage3 = 125 - hellfire_projectile.Damage4 = 250 - hellfire_projectile.Acceleration = 10 - hellfire_projectile.AccelerationUntil = 2f - hellfire_projectile.DamageAtEdge = .25f - hellfire_projectile.DamageRadius = 3f - hellfire_projectile.ProjectileDamageType = DamageType.Splash - hellfire_projectile.InitialVelocity = 125 - hellfire_projectile.Lifespan = 1.5f - ProjectileDefinition.CalculateDerivedFields(hellfire_projectile) - hellfire_projectile.Modifiers = RadialDegrade - - hunter_seeker_missile_dumbfire.Name = "hunter_seeker_missile_dumbfire" - hunter_seeker_missile_dumbfire.Damage0 = 50 - hunter_seeker_missile_dumbfire.Damage1 = 350 - hunter_seeker_missile_dumbfire.Damage2 = 250 - hunter_seeker_missile_dumbfire.Damage3 = 250 - hunter_seeker_missile_dumbfire.Damage4 = 525 - hunter_seeker_missile_dumbfire.DamageAtEdge = 0.1f - hunter_seeker_missile_dumbfire.DamageRadius = 1.5f - hunter_seeker_missile_dumbfire.ProjectileDamageType = DamageType.Splash - hunter_seeker_missile_dumbfire.InitialVelocity = 40 - hunter_seeker_missile_dumbfire.Lifespan = 6.3f - ProjectileDefinition.CalculateDerivedFields(hunter_seeker_missile_dumbfire) - hunter_seeker_missile_dumbfire.Modifiers = RadialDegrade - - hunter_seeker_missile_projectile.Name = "hunter_seeker_missile_projectile" - hunter_seeker_missile_projectile.Damage0 = 50 - hunter_seeker_missile_projectile.Damage1 = 350 - hunter_seeker_missile_projectile.Damage2 = 250 - hunter_seeker_missile_projectile.Damage3 = 250 - hunter_seeker_missile_projectile.Damage4 = 525 - hunter_seeker_missile_projectile.DamageAtEdge = 0.1f - hunter_seeker_missile_projectile.DamageRadius = 1.5f - hunter_seeker_missile_projectile.ProjectileDamageType = DamageType.Splash - hunter_seeker_missile_projectile.InitialVelocity = 40 - hunter_seeker_missile_projectile.Lifespan = 6.3f - hunter_seeker_missile_projectile.registerAs = "rc-projectiles" - hunter_seeker_missile_projectile.ExistsOnRemoteClients = true - hunter_seeker_missile_projectile.RemoteClientData = (39577, 201) - hunter_seeker_missile_projectile.Packet = projectileConverter - ProjectileDefinition.CalculateDerivedFields(hunter_seeker_missile_projectile) - hunter_seeker_missile_projectile.Modifiers = RadialDegrade - - jammer_cartridge_projectile.Name = "jammer_cartridge_projectile" - // TODO for later, maybe : set_resource_parent jammer_cartridge_projectile game_objects jammer_grenade_projectile - jammer_cartridge_projectile.Damage0 = 0 - jammer_cartridge_projectile.Damage1 = 0 - jammer_cartridge_projectile.DamageAtEdge = 1.0f - jammer_cartridge_projectile.DamageRadius = 10f - jammer_cartridge_projectile.GrenadeProjectile = true - jammer_cartridge_projectile.ProjectileDamageType = DamageType.Splash - jammer_cartridge_projectile.InitialVelocity = 30 - jammer_cartridge_projectile.Lifespan = 15f - jammer_cartridge_projectile.AdditionalEffect = true - jammer_cartridge_projectile.JammerProjectile = true - jammer_cartridge_projectile.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Player, - EffectTarget.Validation.Player - ) -> 1000 - jammer_cartridge_projectile.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Vehicle, - EffectTarget.Validation.AMS - ) -> 5000 - jammer_cartridge_projectile.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Deployable, - EffectTarget.Validation.MotionSensor - ) -> 30000 - jammer_cartridge_projectile.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Deployable, - EffectTarget.Validation.Spitfire - ) -> 30000 - jammer_cartridge_projectile.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Turret, - EffectTarget.Validation.Turret - ) -> 30000 - jammer_cartridge_projectile.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Vehicle, - EffectTarget.Validation.VehicleNotAMS - ) -> 10000 - ProjectileDefinition.CalculateDerivedFields(jammer_cartridge_projectile) - jammer_cartridge_projectile.Modifiers = MaxDistanceCutoff - - jammer_cartridge_projectile_b.Name = "jammer_cartridge_projectile_b" - // TODO for later, maybe : set_resource_parent jammer_cartridge_projectile_b game_objects jammer_grenade_projectile_enh - jammer_cartridge_projectile_b.Damage0 = 0 - jammer_cartridge_projectile_b.Damage1 = 0 - jammer_cartridge_projectile_b.DamageAtEdge = 1.0f - jammer_cartridge_projectile_b.DamageRadius = 10f - jammer_cartridge_projectile_b.GrenadeProjectile = true - jammer_cartridge_projectile_b.ProjectileDamageType = DamageType.Splash - jammer_cartridge_projectile_b.InitialVelocity = 30 - jammer_cartridge_projectile_b.Lifespan = 2f - jammer_cartridge_projectile_b.AdditionalEffect = true - jammer_cartridge_projectile_b.JammerProjectile = true - jammer_cartridge_projectile_b.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Player, - EffectTarget.Validation.Player - ) -> 1000 - jammer_cartridge_projectile_b.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Vehicle, - EffectTarget.Validation.AMS - ) -> 5000 - jammer_cartridge_projectile_b.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Deployable, - EffectTarget.Validation.MotionSensor - ) -> 30000 - jammer_cartridge_projectile_b.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Deployable, - EffectTarget.Validation.Spitfire - ) -> 30000 - jammer_cartridge_projectile_b.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Turret, - EffectTarget.Validation.Turret - ) -> 30000 - jammer_cartridge_projectile_b.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Vehicle, - EffectTarget.Validation.VehicleNotAMS - ) -> 10000 - ProjectileDefinition.CalculateDerivedFields(jammer_cartridge_projectile_b) - jammer_cartridge_projectile_b.Modifiers = MaxDistanceCutoff - - jammer_grenade_projectile.Name = "jammer_grenade_projectile" - jammer_grenade_projectile.Damage0 = 0 - jammer_grenade_projectile.Damage1 = 0 - jammer_grenade_projectile.DamageAtEdge = 1.0f - jammer_grenade_projectile.DamageRadius = 10f - jammer_grenade_projectile.GrenadeProjectile = true - jammer_grenade_projectile.ProjectileDamageType = DamageType.Splash - jammer_grenade_projectile.InitialVelocity = 30 - jammer_grenade_projectile.Lifespan = 15f - jammer_grenade_projectile.AdditionalEffect = true - jammer_grenade_projectile.JammerProjectile = true - jammer_grenade_projectile.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Player, - EffectTarget.Validation.Player - ) -> 1000 - jammer_grenade_projectile.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Vehicle, - EffectTarget.Validation.AMS - ) -> 5000 - jammer_grenade_projectile.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Deployable, - EffectTarget.Validation.MotionSensor - ) -> 30000 - jammer_grenade_projectile.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Deployable, - EffectTarget.Validation.Spitfire - ) -> 30000 - jammer_grenade_projectile.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Turret, - EffectTarget.Validation.Turret - ) -> 30000 - jammer_grenade_projectile.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Vehicle, - EffectTarget.Validation.VehicleNotAMS - ) -> 10000 - ProjectileDefinition.CalculateDerivedFields(jammer_grenade_projectile) - jammer_grenade_projectile.Modifiers = MaxDistanceCutoff - - jammer_grenade_projectile_enh.Name = "jammer_grenade_projectile_enh" - // TODO for later, maybe : set_resource_parent jammer_grenade_projectile_enh game_objects jammer_grenade_projectile - jammer_grenade_projectile_enh.Damage0 = 0 - jammer_grenade_projectile_enh.Damage1 = 0 - jammer_grenade_projectile_enh.DamageAtEdge = 1.0f - jammer_grenade_projectile_enh.DamageRadius = 10f - jammer_grenade_projectile_enh.GrenadeProjectile = true - jammer_grenade_projectile_enh.ProjectileDamageType = DamageType.Splash - jammer_grenade_projectile_enh.InitialVelocity = 30 - jammer_grenade_projectile_enh.Lifespan = 3f - jammer_grenade_projectile_enh.AdditionalEffect = true - jammer_grenade_projectile_enh.JammerProjectile = true - jammer_grenade_projectile_enh.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Player, - EffectTarget.Validation.Player - ) -> 1000 - jammer_grenade_projectile_enh.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Vehicle, - EffectTarget.Validation.AMS - ) -> 5000 - jammer_grenade_projectile_enh.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Deployable, - EffectTarget.Validation.MotionSensor - ) -> 30000 - jammer_grenade_projectile_enh.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Deployable, - EffectTarget.Validation.Spitfire - ) -> 30000 - jammer_grenade_projectile_enh.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Turret, - EffectTarget.Validation.Turret - ) -> 30000 - jammer_grenade_projectile_enh.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Vehicle, - EffectTarget.Validation.VehicleNotAMS - ) -> 10000 - ProjectileDefinition.CalculateDerivedFields(jammer_grenade_projectile_enh) - jammer_grenade_projectile_enh.Modifiers = MaxDistanceCutoff - - katana_projectile.Name = "katana_projectile" - katana_projectile.Damage0 = 25 - katana_projectile.Damage1 = 0 - katana_projectile.ProjectileDamageType = DamageType.Direct - katana_projectile.InitialVelocity = 100 - katana_projectile.Lifespan = .03f - ProjectileDefinition.CalculateDerivedFields(katana_projectile) - - katana_projectileb.Name = "katana_projectileb" - // TODO for later, maybe : set_resource_parent katana_projectileb game_objects katana_projectile - katana_projectileb.Damage0 = 25 - katana_projectileb.Damage1 = 0 - katana_projectileb.ProjectileDamageType = DamageType.Direct - katana_projectileb.InitialVelocity = 100 - katana_projectileb.Lifespan = .03f - ProjectileDefinition.CalculateDerivedFields(katana_projectileb) - - lancer_projectile.Name = "lancer_projectile" - lancer_projectile.Damage0 = 25 - lancer_projectile.Damage1 = 175 - lancer_projectile.Damage2 = 125 - lancer_projectile.Damage3 = 125 - lancer_projectile.Damage4 = 263 - lancer_projectile.ProjectileDamageType = DamageType.Direct - lancer_projectile.InitialVelocity = 500 - lancer_projectile.Lifespan = 0.6f - ProjectileDefinition.CalculateDerivedFields(lancer_projectile) - - lasher_projectile.Name = "lasher_projectile" - lasher_projectile.Damage0 = 30 - lasher_projectile.Damage1 = 15 - lasher_projectile.Damage2 = 15 - lasher_projectile.Damage3 = 12 - lasher_projectile.Damage4 = 12 - lasher_projectile.ProjectileDamageType = DamageType.Direct - lasher_projectile.DegradeDelay = 0.012f - lasher_projectile.DegradeMultiplier = 0.3f - lasher_projectile.InitialVelocity = 120 - lasher_projectile.LashRadius = 2.5f - lasher_projectile.Lifespan = 0.75f - lasher_projectile.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(lasher_projectile) - lasher_projectile.Modifiers = List( - DistanceDegrade, - Lash - ) - - lasher_projectile_ap.Name = "lasher_projectile_ap" - lasher_projectile_ap.Damage0 = 12 - lasher_projectile_ap.Damage1 = 25 - lasher_projectile_ap.Damage2 = 25 - lasher_projectile_ap.Damage3 = 28 - lasher_projectile_ap.Damage4 = 28 - lasher_projectile_ap.ProjectileDamageType = DamageType.Direct - lasher_projectile_ap.DegradeDelay = 0.012f - lasher_projectile_ap.DegradeMultiplier = 0.3f - lasher_projectile_ap.InitialVelocity = 120 - lasher_projectile_ap.LashRadius = 2.5f - lasher_projectile_ap.Lifespan = 0.75f - lasher_projectile_ap.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(lasher_projectile_ap) - lasher_projectile_ap.Modifiers = List( - DistanceDegrade, - Lash - ) - - liberator_bomb_cluster_bomblet_projectile.Name = "liberator_bomb_cluster_bomblet_projectile" - liberator_bomb_cluster_bomblet_projectile.Damage0 = 75 - liberator_bomb_cluster_bomblet_projectile.Damage1 = 100 - liberator_bomb_cluster_bomblet_projectile.DamageAtEdge = 0.25f - liberator_bomb_cluster_bomblet_projectile.DamageRadius = 3f - liberator_bomb_cluster_bomblet_projectile.ProjectileDamageType = DamageType.Splash - liberator_bomb_cluster_bomblet_projectile.InitialVelocity = 0 - liberator_bomb_cluster_bomblet_projectile.Lifespan = 30f - ProjectileDefinition.CalculateDerivedFields(liberator_bomb_cluster_bomblet_projectile) - liberator_bomb_cluster_bomblet_projectile.Modifiers = RadialDegrade - - liberator_bomb_cluster_projectile.Name = "liberator_bomb_cluster_projectile" - liberator_bomb_cluster_projectile.Damage0 = 75 - liberator_bomb_cluster_projectile.Damage1 = 100 - liberator_bomb_cluster_projectile.DamageAtEdge = 0.25f - liberator_bomb_cluster_projectile.DamageRadius = 3f - liberator_bomb_cluster_projectile.ProjectileDamageType = DamageType.Direct - liberator_bomb_cluster_projectile.InitialVelocity = 0 - liberator_bomb_cluster_projectile.Lifespan = 30f - ProjectileDefinition.CalculateDerivedFields(liberator_bomb_cluster_projectile) - - liberator_bomb_projectile.Name = "liberator_bomb_projectile" - liberator_bomb_projectile.Damage0 = 250 - liberator_bomb_projectile.Damage1 = 1000 - liberator_bomb_projectile.Damage2 = 1000 - liberator_bomb_projectile.Damage3 = 1000 - liberator_bomb_projectile.Damage4 = 600 - liberator_bomb_projectile.DamageAtEdge = 0.1f - liberator_bomb_projectile.DamageRadius = 10f - liberator_bomb_projectile.ProjectileDamageType = DamageType.Splash - liberator_bomb_projectile.InitialVelocity = 0 - liberator_bomb_projectile.Lifespan = 30f - ProjectileDefinition.CalculateDerivedFields(liberator_bomb_projectile) - liberator_bomb_projectile.Modifiers = RadialDegrade - - maelstrom_grenade_damager.Name = "maelstrom_grenade_damager" - maelstrom_grenade_damager.ProjectileDamageType = DamageType.Direct - //the maelstrom_grenade_damage is something of a broken entity atm - - maelstrom_grenade_projectile.Name = "maelstrom_grenade_projectile" - maelstrom_grenade_projectile.Damage0 = 32 - maelstrom_grenade_projectile.Damage1 = 60 - maelstrom_grenade_projectile.DamageRadius = 20f - maelstrom_grenade_projectile.LashRadius = 5f - maelstrom_grenade_projectile.GrenadeProjectile = true - maelstrom_grenade_projectile.ProjectileDamageType = DamageType.Direct - maelstrom_grenade_projectile.InitialVelocity = 30 - maelstrom_grenade_projectile.Lifespan = 2f - maelstrom_grenade_projectile.DamageProxy = 464 //maelstrom_grenade_damager - ProjectileDefinition.CalculateDerivedFields(maelstrom_grenade_projectile) - maelstrom_grenade_projectile.Modifiers = RadialDegrade - - maelstrom_grenade_projectile_contact.Name = "maelstrom_grenade_projectile_contact" - // TODO for later, maybe : set_resource_parent maelstrom_grenade_projectile_contact game_objects maelstrom_grenade_projectile - maelstrom_grenade_projectile_contact.Damage0 = 32 - maelstrom_grenade_projectile_contact.Damage1 = 60 - maelstrom_grenade_projectile_contact.DamageRadius = 20f - maelstrom_grenade_projectile_contact.LashRadius = 5f - maelstrom_grenade_projectile_contact.GrenadeProjectile = true - maelstrom_grenade_projectile_contact.ProjectileDamageType = DamageType.Direct - maelstrom_grenade_projectile_contact.InitialVelocity = 30 - maelstrom_grenade_projectile_contact.Lifespan = 15f - maelstrom_grenade_projectile_contact.DamageProxy = 464 //maelstrom_grenade_damager - ProjectileDefinition.CalculateDerivedFields(maelstrom_grenade_projectile_contact) - maelstrom_grenade_projectile_contact.Modifiers = RadialDegrade - - maelstrom_stream_projectile.Name = "maelstrom_stream_projectile" - maelstrom_stream_projectile.Damage0 = 15 - maelstrom_stream_projectile.Damage1 = 6 - maelstrom_stream_projectile.ProjectileDamageType = DamageType.Direct - maelstrom_stream_projectile.DegradeDelay = .075f - maelstrom_stream_projectile.DegradeMultiplier = 0.5f - maelstrom_stream_projectile.InitialVelocity = 200 - maelstrom_stream_projectile.Lifespan = 0.2f - ProjectileDefinition.CalculateDerivedFields(maelstrom_stream_projectile) - maelstrom_stream_projectile.Modifiers = MaxDistanceCutoff - - magcutter_projectile.Name = "magcutter_projectile" - // TODO for later, maybe : set_resource_parent magcutter_projectile game_objects melee_ammo_projectile - magcutter_projectile.Damage0 = 50 - magcutter_projectile.Damage1 = 0 - magcutter_projectile.ProjectileDamageType = DamageType.Direct - magcutter_projectile.InitialVelocity = 100 - magcutter_projectile.Lifespan = .02f - ProjectileDefinition.CalculateDerivedFields(magcutter_projectile) - magcutter_projectile.Modifiers = List(MeleeBoosted, MaxDistanceCutoff) - - melee_ammo_projectile.Name = "melee_ammo_projectile" - melee_ammo_projectile.Damage0 = 25 - melee_ammo_projectile.Damage1 = 0 - melee_ammo_projectile.ProjectileDamageType = DamageType.Direct - melee_ammo_projectile.InitialVelocity = 100 - melee_ammo_projectile.Lifespan = .02f - ProjectileDefinition.CalculateDerivedFields(melee_ammo_projectile) - melee_ammo_projectile.Modifiers = List(MeleeBoosted, MaxDistanceCutoff) - - meteor_common.Name = "meteor_common" - meteor_common.DamageAtEdge = .1f - meteor_common.ProjectileDamageType = DamageType.Splash - meteor_common.InitialVelocity = 0 - meteor_common.Lifespan = 40 - ProjectileDefinition.CalculateDerivedFields(meteor_common) - meteor_common.Modifiers = RadialDegrade - - meteor_projectile_b_large.Name = "meteor_projectile_b_large" - // TODO for later, maybe : set_resource_parent meteor_projectile_b_large game_objects meteor_common - meteor_projectile_b_large.Damage0 = 2500 - meteor_projectile_b_large.Damage1 = 5000 - meteor_projectile_b_large.DamageRadius = 15f - meteor_projectile_b_large.DamageAtEdge = .1f - meteor_projectile_b_large.ProjectileDamageType = DamageType.Splash - meteor_projectile_b_large.InitialVelocity = 0 - meteor_projectile_b_large.Lifespan = 40 - ProjectileDefinition.CalculateDerivedFields(meteor_projectile_b_large) - meteor_projectile_b_large.Modifiers = RadialDegrade - - meteor_projectile_b_medium.Name = "meteor_projectile_b_medium" - // TODO for later, maybe : set_resource_parent meteor_projectile_b_medium game_objects meteor_common - meteor_projectile_b_medium.Damage0 = 1250 - meteor_projectile_b_medium.Damage1 = 2500 - meteor_projectile_b_medium.DamageRadius = 10f - meteor_projectile_b_medium.DamageAtEdge = .1f - meteor_projectile_b_medium.ProjectileDamageType = DamageType.Splash - meteor_projectile_b_medium.InitialVelocity = 0 - meteor_projectile_b_medium.Lifespan = 40 - ProjectileDefinition.CalculateDerivedFields(meteor_projectile_b_medium) - meteor_projectile_b_medium.Modifiers = RadialDegrade - - meteor_projectile_b_small.Name = "meteor_projectile_b_small" - // TODO for later, maybe : set_resource_parent meteor_projectile_b_small game_objects meteor_common - meteor_projectile_b_small.Damage0 = 625 - meteor_projectile_b_small.Damage1 = 1250 - meteor_projectile_b_small.DamageRadius = 5f - meteor_projectile_b_small.DamageAtEdge = .1f - meteor_projectile_b_small.ProjectileDamageType = DamageType.Splash - meteor_projectile_b_small.InitialVelocity = 0 - meteor_projectile_b_small.Lifespan = 40 - ProjectileDefinition.CalculateDerivedFields(meteor_projectile_b_small) - meteor_projectile_b_small.Modifiers = RadialDegrade - - meteor_projectile_large.Name = "meteor_projectile_large" - // TODO for later, maybe : set_resource_parent meteor_projectile_large game_objects meteor_common - meteor_projectile_large.Damage0 = 2500 - meteor_projectile_large.Damage1 = 5000 - meteor_projectile_large.DamageRadius = 15f - meteor_projectile_large.DamageAtEdge = .1f - meteor_projectile_large.ProjectileDamageType = DamageType.Splash - meteor_projectile_large.InitialVelocity = 0 - meteor_projectile_large.Lifespan = 40 - ProjectileDefinition.CalculateDerivedFields(meteor_projectile_large) - meteor_projectile_large.Modifiers = RadialDegrade - - meteor_projectile_medium.Name = "meteor_projectile_medium" - // TODO for later, maybe : set_resource_parent meteor_projectile_medium game_objects meteor_common - meteor_projectile_medium.Damage0 = 1250 - meteor_projectile_medium.Damage1 = 2500 - meteor_projectile_medium.DamageRadius = 10f - meteor_projectile_medium.DamageAtEdge = .1f - meteor_projectile_medium.ProjectileDamageType = DamageType.Splash - meteor_projectile_medium.InitialVelocity = 0 - meteor_projectile_medium.Lifespan = 40 - ProjectileDefinition.CalculateDerivedFields(meteor_projectile_medium) - meteor_projectile_medium.Modifiers = RadialDegrade - - meteor_projectile_small.Name = "meteor_projectile_small" - // TODO for later, maybe : set_resource_parent meteor_projectile_small game_objects meteor_common - meteor_projectile_small.Damage0 = 625 - meteor_projectile_small.Damage1 = 1250 - meteor_projectile_small.DamageRadius = 5f - meteor_projectile_small.DamageAtEdge = .1f - meteor_projectile_small.ProjectileDamageType = DamageType.Splash - meteor_projectile_small.InitialVelocity = 0 - meteor_projectile_small.Lifespan = 40 - ProjectileDefinition.CalculateDerivedFields(meteor_projectile_small) - meteor_projectile_small.Modifiers = RadialDegrade - - mine_projectile.Name = "mine_projectile" - mine_projectile.Lifespan = 0.01f - mine_projectile.InitialVelocity = 300 - ProjectileDefinition.CalculateDerivedFields(mine_projectile) - - mine_sweeper_projectile.Name = "mine_sweeper_projectile" - mine_sweeper_projectile.Damage0 = 0 - mine_sweeper_projectile.Damage1 = 0 - mine_sweeper_projectile.DamageAtEdge = .33f - mine_sweeper_projectile.DamageRadius = 25f - mine_sweeper_projectile.GrenadeProjectile = true - mine_sweeper_projectile.ProjectileDamageType = DamageType.Splash - mine_sweeper_projectile.InitialVelocity = 30 - mine_sweeper_projectile.Lifespan = 15f - ProjectileDefinition.CalculateDerivedFields(mine_sweeper_projectile) - mine_sweeper_projectile.Modifiers = RadialDegrade - - mine_sweeper_projectile_enh.Name = "mine_sweeper_projectile_enh" - mine_sweeper_projectile_enh.Damage0 = 0 - mine_sweeper_projectile_enh.Damage1 = 0 - mine_sweeper_projectile_enh.DamageAtEdge = 0.33f - mine_sweeper_projectile_enh.DamageRadius = 25f - mine_sweeper_projectile_enh.GrenadeProjectile = true - mine_sweeper_projectile_enh.ProjectileDamageType = DamageType.Splash - mine_sweeper_projectile_enh.InitialVelocity = 30 - mine_sweeper_projectile_enh.Lifespan = 3f - ProjectileDefinition.CalculateDerivedFields(mine_sweeper_projectile_enh) - mine_sweeper_projectile_enh.Modifiers = RadialDegrade - - oicw_projectile.Name = "oicw_projectile" - oicw_projectile.Damage0 = 50 - oicw_projectile.Damage1 = 50 - oicw_projectile.Acceleration = 15 - oicw_projectile.AccelerationUntil = 5f - oicw_projectile.DamageAtEdge = 0.1f - oicw_projectile.DamageRadius = 10f - oicw_projectile.ProjectileDamageType = DamageType.Splash - oicw_projectile.InitialVelocity = 5 - oicw_projectile.Lifespan = 6.1f - oicw_projectile.DamageProxy = List(601, 601, 601, 601, 601) //5 x oicw_little_buddy - oicw_projectile.registerAs = "rc-projectiles" - oicw_projectile.ExistsOnRemoteClients = true - oicw_projectile.RemoteClientData = (13107, 195) - oicw_projectile.Packet = projectileConverter - ProjectileDefinition.CalculateDerivedFields(oicw_projectile) - oicw_projectile.Modifiers = List( - //ExplodingRadialDegrade, - RadialDegrade - ) - - oicw_little_buddy.Name = "oicw_little_buddy" - oicw_little_buddy.Damage0 = 75 - oicw_little_buddy.Damage1 = 75 - oicw_little_buddy.DamageAtEdge = 0.1f - oicw_little_buddy.DamageRadius = 7.5f - oicw_little_buddy.ProjectileDamageType = DamageType.Splash - oicw_little_buddy.InitialVelocity = 40 - oicw_little_buddy.Lifespan = 0.5f - oicw_little_buddy.registerAs = "rc-projectiles" - oicw_little_buddy.ExistsOnRemoteClients = true //does not use RemoteClientData - oicw_little_buddy.Packet = new LittleBuddyProjectileConverter - //add_property oicw_little_buddy multi_stage_spawn_server_side true ... - ProjectileDefinition.CalculateDerivedFields(oicw_little_buddy) - oicw_little_buddy.Modifiers = List( - ExplosionDamagesOnlyAbove - ) - - pellet_gun_projectile.Name = "pellet_gun_projectile" - // TODO for later, maybe : set_resource_parent pellet_gun_projectile game_objects shotgun_shell_projectile - pellet_gun_projectile.Damage0 = 12 - pellet_gun_projectile.Damage1 = 8 - pellet_gun_projectile.ProjectileDamageType = DamageType.Direct - pellet_gun_projectile.InitialVelocity = 400 - pellet_gun_projectile.Lifespan = 0.1875f - pellet_gun_projectile.UseDamage1Subtract = false - ProjectileDefinition.CalculateDerivedFields(pellet_gun_projectile) - - phalanx_av_projectile.Name = "phalanx_av_projectile" - phalanx_av_projectile.Damage0 = 60 - phalanx_av_projectile.Damage1 = 140 - phalanx_av_projectile.DamageAtEdge = 0.1f - phalanx_av_projectile.DamageRadius = 5f - phalanx_av_projectile.ProjectileDamageType = DamageType.Splash - phalanx_av_projectile.InitialVelocity = 100 - phalanx_av_projectile.Lifespan = 4f - ProjectileDefinition.CalculateDerivedFields(phalanx_av_projectile) - phalanx_av_projectile.Modifiers = RadialDegrade - - phalanx_flak_projectile.Name = "phalanx_flak_projectile" - phalanx_flak_projectile.Damage0 = 15 - phalanx_flak_projectile.Damage1 = 25 - phalanx_flak_projectile.Damage2 = 70 - phalanx_flak_projectile.DamageAtEdge = 1f - phalanx_flak_projectile.DamageRadius = 10f - phalanx_flak_projectile.ProjectileDamageType = DamageType.Direct - phalanx_flak_projectile.ProjectileDamageTypeSecondary = DamageType.Splash - phalanx_flak_projectile.InitialVelocity = 100 - phalanx_flak_projectile.Lifespan = 5f - ProjectileDefinition.CalculateDerivedFields(phalanx_flak_projectile) - phalanx_flak_projectile.Modifiers = List( - //FlakHit, - FlakBurst, - MaxDistanceCutoff - ) - - phalanx_projectile.Name = "phalanx_projectile" - phalanx_projectile.Damage0 = 20 - phalanx_projectile.Damage1 = 30 - phalanx_projectile.Damage2 = 30 - phalanx_projectile.Damage3 = 30 - phalanx_projectile.Damage4 = 18 - phalanx_projectile.ProjectileDamageType = DamageType.Direct - phalanx_projectile.DegradeDelay = 0f - phalanx_projectile.DegradeMultiplier = 0.25f - phalanx_projectile.InitialVelocity = 400 - phalanx_projectile.Lifespan = 1f - phalanx_projectile.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(phalanx_projectile) - - phoenix_missile_guided_projectile.Name = "phoenix_missile_guided_projectile" - // TODO for later, maybe : set_resource_parent phoenix_missile_guided_projectile game_objects phoenix_missile_projectile - phoenix_missile_guided_projectile.Damage0 = 80 - phoenix_missile_guided_projectile.Damage1 = 400 - phoenix_missile_guided_projectile.Damage2 = 400 - phoenix_missile_guided_projectile.Damage3 = 300 - phoenix_missile_guided_projectile.Damage4 = 600 - phoenix_missile_guided_projectile.Acceleration = 60 - phoenix_missile_guided_projectile.AccelerationUntil = 2.5f - phoenix_missile_guided_projectile.DamageAtEdge = 0.3f - phoenix_missile_guided_projectile.DamageRadius = 1.5f - phoenix_missile_guided_projectile.ProjectileDamageType = DamageType.Splash - phoenix_missile_guided_projectile.InitialVelocity = 0 - phoenix_missile_guided_projectile.Lifespan = 3f - //not naturally a remote projectile, but being governed as one for convenience - phoenix_missile_guided_projectile.registerAs = "rc-projectiles" - phoenix_missile_guided_projectile.ExistsOnRemoteClients = true - phoenix_missile_guided_projectile.RemoteClientData = (0, 63) - phoenix_missile_guided_projectile.Packet = projectileConverter - // - ProjectileDefinition.CalculateDerivedFields(phoenix_missile_guided_projectile) - phoenix_missile_guided_projectile.Modifiers = RadialDegrade - - phoenix_missile_projectile.Name = "phoenix_missile_projectile" - phoenix_missile_projectile.Damage0 = 80 - phoenix_missile_projectile.Damage1 = 400 - phoenix_missile_projectile.Damage2 = 400 - phoenix_missile_projectile.Damage3 = 300 - phoenix_missile_projectile.Damage4 = 600 - phoenix_missile_projectile.Acceleration = 60 - phoenix_missile_projectile.AccelerationUntil = 2.5f - phoenix_missile_projectile.DamageAtEdge = 0.3f - phoenix_missile_projectile.DamageRadius = 1.5f - phoenix_missile_projectile.ProjectileDamageType = DamageType.Splash - phoenix_missile_projectile.InitialVelocity = 0 - phoenix_missile_projectile.Lifespan = 3f - ProjectileDefinition.CalculateDerivedFields(phoenix_missile_projectile) - phoenix_missile_projectile.Modifiers = RadialDegrade - - plasma_cartridge_projectile.Name = "plasma_cartridge_projectile" - // TODO for later, maybe : set_resource_parent plasma_cartridge_projectile game_objects plasma_grenade_projectile - plasma_cartridge_projectile.Damage0 = 20 - plasma_cartridge_projectile.Damage1 = 15 - plasma_cartridge_projectile.DamageAtEdge = 0.2f - plasma_cartridge_projectile.DamageRadius = 7f - plasma_cartridge_projectile.GrenadeProjectile = true - plasma_cartridge_projectile.ProjectileDamageType = DamageType.Aggravated - plasma_cartridge_projectile.Aggravated = AggravatedDamage( - List(AggravatedInfo(DamageType.Direct, 0.25f, 750), AggravatedInfo(DamageType.Splash, 0.25f, 1000)), - Aura.Plasma, - AggravatedTiming(3000), - 1.5f, - true, - false, - List(TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player)) - ) - plasma_cartridge_projectile.InitialVelocity = 30 - plasma_cartridge_projectile.Lifespan = 15f - ProjectileDefinition.CalculateDerivedFields(plasma_cartridge_projectile) - plasma_cartridge_projectile.Modifiers = List( - InfantryAggravatedDirect, - InfantryAggravatedDirectBurn, - InfantryAggravatedSplash, - InfantryAggravatedSplashBurn, - RadialDegrade - ) - - plasma_cartridge_projectile_b.Name = "plasma_cartridge_projectile_b" - // TODO for later, maybe : set_resource_parent plasma_cartridge_projectile_b game_objects plasma_grenade_projectile_B - plasma_cartridge_projectile_b.Damage0 = 20 - plasma_cartridge_projectile_b.Damage1 = 15 - plasma_cartridge_projectile_b.DamageAtEdge = 0.2f - plasma_cartridge_projectile_b.DamageRadius = 7f - plasma_cartridge_projectile_b.GrenadeProjectile = true - plasma_cartridge_projectile_b.ProjectileDamageType = DamageType.Aggravated - plasma_cartridge_projectile_b.Aggravated = AggravatedDamage( - List(AggravatedInfo(DamageType.Direct, 0.25f, 750), AggravatedInfo(DamageType.Splash, 0.25f, 1000)), - Aura.Plasma, - AggravatedTiming(3000), - 1.5f, - true, - false, - List(TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player)) - ) - plasma_cartridge_projectile_b.InitialVelocity = 30 - plasma_cartridge_projectile_b.Lifespan = 2f - ProjectileDefinition.CalculateDerivedFields(plasma_cartridge_projectile_b) - plasma_cartridge_projectile_b.Modifiers = List( - InfantryAggravatedDirect, - InfantryAggravatedDirectBurn, - InfantryAggravatedSplash, - InfantryAggravatedSplashBurn, - RadialDegrade - ) - - plasma_grenade_projectile.Name = "plasma_grenade_projectile" - plasma_grenade_projectile.Damage0 = 40 - plasma_grenade_projectile.Damage1 = 30 - plasma_grenade_projectile.DamageAtEdge = 0.1f - plasma_grenade_projectile.DamageRadius = 7f - plasma_grenade_projectile.GrenadeProjectile = true - plasma_grenade_projectile.ProjectileDamageType = DamageType.Aggravated - plasma_grenade_projectile.Aggravated = AggravatedDamage( - List(AggravatedInfo(DamageType.Direct, 0.25f, 750), AggravatedInfo(DamageType.Splash, 0.25f, 1000)), - Aura.Plasma, - AggravatedTiming(3000), - 1.5f, - true, - false, - List(TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player)) - ) - plasma_grenade_projectile.InitialVelocity = 30 - plasma_grenade_projectile.Lifespan = 15f - ProjectileDefinition.CalculateDerivedFields(plasma_grenade_projectile) - plasma_grenade_projectile.Modifiers = List( - InfantryAggravatedDirect, - InfantryAggravatedDirectBurn, - InfantryAggravatedSplash, - InfantryAggravatedSplashBurn, - RadialDegrade - ) - - plasma_grenade_projectile_B.Name = "plasma_grenade_projectile_B" - // TODO for later, maybe : set_resource_parent plasma_grenade_projectile_B game_objects plasma_grenade_projectile - plasma_grenade_projectile_B.Damage0 = 40 - plasma_grenade_projectile_B.Damage1 = 30 - plasma_grenade_projectile_B.DamageAtEdge = 0.1f - plasma_grenade_projectile_B.DamageRadius = 7f - plasma_grenade_projectile_B.GrenadeProjectile = true - plasma_grenade_projectile_B.ProjectileDamageType = DamageType.Aggravated - plasma_grenade_projectile_B.Aggravated = AggravatedDamage( - List(AggravatedInfo(DamageType.Direct, 0.25f, 750), AggravatedInfo(DamageType.Splash, 0.25f, 1000)), - Aura.Plasma, - AggravatedTiming(3000), - 1.5f, - true, - false, - List(TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player)) - ) - plasma_grenade_projectile_B.InitialVelocity = 30 - plasma_grenade_projectile_B.Lifespan = 3f - ProjectileDefinition.CalculateDerivedFields(plasma_grenade_projectile_B) - plasma_grenade_projectile_B.Modifiers = List( - InfantryAggravatedDirect, - InfantryAggravatedDirectBurn, - InfantryAggravatedSplash, - InfantryAggravatedSplashBurn, - RadialDegrade - ) - - pounder_projectile.Name = "pounder_projectile" - pounder_projectile.Damage0 = 31 - pounder_projectile.Damage1 = 120 - pounder_projectile.Damage2 = 120 - pounder_projectile.Damage3 = 75 - pounder_projectile.Damage4 = 132 - pounder_projectile.DamageAtEdge = 0.1f - pounder_projectile.DamageRadius = 1f - pounder_projectile.GrenadeProjectile = true - pounder_projectile.ProjectileDamageType = DamageType.Splash - pounder_projectile.InitialVelocity = 120 - pounder_projectile.Lifespan = 2.5f - ProjectileDefinition.CalculateDerivedFields(pounder_projectile) - pounder_projectile.Modifiers = RadialDegrade - - pounder_projectile_enh.Name = "pounder_projectile_enh" - // TODO for later, maybe : set_resource_parent pounder_projectile_enh game_objects pounder_projectile - pounder_projectile_enh.Damage0 = 31 - pounder_projectile_enh.Damage1 = 120 - pounder_projectile_enh.Damage2 = 120 - pounder_projectile_enh.Damage3 = 75 - pounder_projectile_enh.Damage4 = 132 - pounder_projectile_enh.DamageAtEdge = 0.1f - pounder_projectile_enh.DamageRadius = 1f - pounder_projectile_enh.GrenadeProjectile = true - pounder_projectile_enh.ProjectileDamageType = DamageType.Splash - pounder_projectile_enh.InitialVelocity = 120 - pounder_projectile_enh.Lifespan = 3.2f - ProjectileDefinition.CalculateDerivedFields(pounder_projectile_enh) - pounder_projectile_enh.Modifiers = RadialDegrade - - ppa_projectile.Name = "ppa_projectile" - ppa_projectile.Damage0 = 20 - ppa_projectile.Damage1 = 20 - ppa_projectile.Damage2 = 40 - ppa_projectile.Damage3 = 20 - ppa_projectile.Damage4 = 13 - ppa_projectile.ProjectileDamageType = DamageType.Direct - ppa_projectile.InitialVelocity = 400 - ppa_projectile.Lifespan = .5f - ProjectileDefinition.CalculateDerivedFields(ppa_projectile) - - pulsar_ap_projectile.Name = "pulsar_ap_projectile" - // TODO for later, maybe : set_resource_parent pulsar_ap_projectile game_objects pulsar_projectile - pulsar_ap_projectile.Damage0 = 7 - pulsar_ap_projectile.Damage1 = 15 - pulsar_ap_projectile.ProjectileDamageType = DamageType.Direct - pulsar_ap_projectile.DegradeDelay = 0.1f - pulsar_ap_projectile.DegradeMultiplier = 0.5f - pulsar_ap_projectile.InitialVelocity = 500 - pulsar_ap_projectile.Lifespan = .4f - pulsar_ap_projectile.UseDamage1Subtract = true - pulsar_ap_projectile.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(pulsar_ap_projectile) - - pulsar_projectile.Name = "pulsar_projectile" - pulsar_projectile.Damage0 = 20 - pulsar_projectile.Damage1 = 10 - pulsar_projectile.ProjectileDamageType = DamageType.Direct - pulsar_projectile.DegradeDelay = 0.1f - pulsar_projectile.DegradeMultiplier = 0.4f - pulsar_projectile.InitialVelocity = 500 - pulsar_projectile.Lifespan = .4f - pulsar_projectile.UseDamage1Subtract = true - pulsar_projectile.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(pulsar_projectile) - - quasar_projectile.Name = "quasar_projectile" - quasar_projectile.Damage0 = 18 - quasar_projectile.Damage1 = 8 - quasar_projectile.ProjectileDamageType = DamageType.Direct - quasar_projectile.DegradeDelay = 0.045f - quasar_projectile.DegradeMultiplier = 0.5f - quasar_projectile.InitialVelocity = 500 - quasar_projectile.Lifespan = .4f - quasar_projectile.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(quasar_projectile) - - radiator_cloud.Name = "radiator_cloud" - radiator_cloud.Damage0 = 1 //2 - radiator_cloud.DamageAtEdge = 1.0f - radiator_cloud.DamageRadius = 5f - radiator_cloud.DamageToHealthOnly = true - radiator_cloud.radiation_cloud = true - radiator_cloud.ProjectileDamageType = DamageType.Radiation - //custom aggravated information - radiator_cloud.ProjectileDamageTypeSecondary = DamageType.Aggravated - radiator_cloud.Aggravated = AggravatedDamage( - AggravatedInfo(DamageType.Splash, 1f, 80), - Aura.None, - AggravatedTiming(250, 2), - 0f, - false, - List(TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player)) - ) - radiator_cloud.Lifespan = 10.0f - ProjectileDefinition.CalculateDerivedFields(radiator_cloud) - radiator_cloud.registerAs = "rc-projectiles" - radiator_cloud.ExistsOnRemoteClients = true - radiator_cloud.Packet = radCloudConverter - //radiator_cloud.Geometry = GeometryForm.representProjectileBySphere() - radiator_cloud.Modifiers = List( - MaxDistanceCutoff, - InfantryAggravatedRadiation, - InfantryAggravatedRadiationBurn, - ShieldAgainstRadiation - ) - - radiator_grenade_projectile.Name = "radiator_grenade_projectile" // Todo : Radiator damages ? - radiator_grenade_projectile.GrenadeProjectile = true //not really, but technically yes - radiator_grenade_projectile.ProjectileDamageType = DamageType.Direct - radiator_grenade_projectile.InitialVelocity = 30 - radiator_grenade_projectile.Lifespan = 3f - radiator_grenade_projectile.DamageProxy = 717 //radiator_cloud - ProjectileDefinition.CalculateDerivedFields(radiator_grenade_projectile) - - radiator_sticky_projectile.Name = "radiator_sticky_projectile" - // TODO for later, maybe : set_resource_parent radiator_sticky_projectile game_objects radiator_grenade_projectile - radiator_sticky_projectile.GrenadeProjectile = true //not really, but technically yes - radiator_sticky_projectile.ProjectileDamageType = DamageType.Direct - radiator_sticky_projectile.InitialVelocity = 30 - radiator_sticky_projectile.Lifespan = 4f - radiator_sticky_projectile.DamageProxy = 717 //radiator_cloud - ProjectileDefinition.CalculateDerivedFields(radiator_sticky_projectile) - - reaver_rocket_projectile.Name = "reaver_rocket_projectile" - reaver_rocket_projectile.Damage0 = 25 - reaver_rocket_projectile.Damage1 = 88 - reaver_rocket_projectile.Damage2 = 75 - reaver_rocket_projectile.Damage3 = 75 - reaver_rocket_projectile.Damage4 = 88 - reaver_rocket_projectile.Acceleration = 50 - reaver_rocket_projectile.AccelerationUntil = 1f - reaver_rocket_projectile.DamageAtEdge = 0.1f - reaver_rocket_projectile.DamageRadius = 3f - reaver_rocket_projectile.ProjectileDamageType = DamageType.Splash - reaver_rocket_projectile.InitialVelocity = 100 - reaver_rocket_projectile.Lifespan = 2.1f - ProjectileDefinition.CalculateDerivedFields(reaver_rocket_projectile) - reaver_rocket_projectile.Modifiers = RadialDegrade - - rocket_projectile.Name = "rocket_projectile" - rocket_projectile.Damage0 = 50 - rocket_projectile.Damage1 = 105 - rocket_projectile.Damage2 = 75 - rocket_projectile.Damage3 = 75 - rocket_projectile.Damage4 = 75 - rocket_projectile.Acceleration = 10 - rocket_projectile.AccelerationUntil = 2f - rocket_projectile.DamageAtEdge = .5f - rocket_projectile.DamageRadius = 3f - rocket_projectile.ProjectileDamageType = DamageType.Splash - rocket_projectile.InitialVelocity = 50 - rocket_projectile.Lifespan = 8f - ProjectileDefinition.CalculateDerivedFields(rocket_projectile) - rocket_projectile.Modifiers = RadialDegrade - - rocklet_flak_projectile.Name = "rocklet_flak_projectile" - rocklet_flak_projectile.Damage0 = 20 - rocklet_flak_projectile.Damage1 = 30 - rocklet_flak_projectile.Damage2 = 57 - rocklet_flak_projectile.Damage3 = 30 - rocklet_flak_projectile.Damage4 = 50 - rocklet_flak_projectile.DamageAtEdge = 0.25f - rocklet_flak_projectile.DamageRadius = 8f - rocklet_flak_projectile.ProjectileDamageType = DamageType.Direct - rocklet_flak_projectile.ProjectileDamageTypeSecondary = DamageType.Splash - rocklet_flak_projectile.InitialVelocity = 60 - rocklet_flak_projectile.Lifespan = 3.2f - ProjectileDefinition.CalculateDerivedFields(rocklet_flak_projectile) - rocklet_flak_projectile.Modifiers = List( - //FlakHit, - FlakBurst, - MaxDistanceCutoff - ) - - rocklet_jammer_projectile.Name = "rocklet_jammer_projectile" - rocklet_jammer_projectile.Damage0 = 0 - rocklet_jammer_projectile.Acceleration = 10 - rocklet_jammer_projectile.AccelerationUntil = 2f - rocklet_jammer_projectile.DamageAtEdge = 1.0f - rocklet_jammer_projectile.DamageRadius = 10f - rocklet_jammer_projectile.ProjectileDamageType = DamageType.Splash - rocklet_jammer_projectile.InitialVelocity = 50 - rocklet_jammer_projectile.Lifespan = 8f - ProjectileDefinition.CalculateDerivedFields(rocklet_jammer_projectile) - //TODO rocklet_jammer_projectile.Modifiers = RadialDegrade? - - scattercannon_projectile.Name = "scattercannon_projectile" - scattercannon_projectile.Damage0 = 11 - scattercannon_projectile.Damage1 = 5 - scattercannon_projectile.ProjectileDamageType = DamageType.Direct - scattercannon_projectile.InitialVelocity = 400 - scattercannon_projectile.Lifespan = 0.25f - scattercannon_projectile.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(scattercannon_projectile) - - scythe_projectile.Name = "scythe_projectile" - scythe_projectile.Damage0 = 30 - scythe_projectile.Damage1 = 20 - scythe_projectile.ProjectileDamageType = DamageType.Direct - scythe_projectile.DegradeDelay = .015f - scythe_projectile.DegradeMultiplier = 0.35f - scythe_projectile.InitialVelocity = 60 - scythe_projectile.Lifespan = 3f - ProjectileDefinition.CalculateDerivedFields(scythe_projectile) - - scythe_projectile_slave.Name = "scythe_projectile_slave" // Todo how does it work ? - scythe_projectile_slave.InitialVelocity = 30 - scythe_projectile_slave.Lifespan = 3f - ProjectileDefinition.CalculateDerivedFields(scythe_projectile_slave) - - shotgun_shell_AP_projectile.Name = "shotgun_shell_AP_projectile" - // TODO for later, maybe : set_resource_parent shotgun_shell_AP_projectile game_objects shotgun_shell_projectile - shotgun_shell_AP_projectile.Damage0 = 5 - shotgun_shell_AP_projectile.Damage1 = 10 - shotgun_shell_AP_projectile.ProjectileDamageType = DamageType.Direct - shotgun_shell_AP_projectile.InitialVelocity = 400 - shotgun_shell_AP_projectile.Lifespan = 0.25f - shotgun_shell_AP_projectile.UseDamage1Subtract = true - shotgun_shell_AP_projectile.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(shotgun_shell_AP_projectile) - - shotgun_shell_projectile.Name = "shotgun_shell_projectile" - shotgun_shell_projectile.Damage0 = 12 - shotgun_shell_projectile.Damage1 = 5 - shotgun_shell_projectile.ProjectileDamageType = DamageType.Direct - shotgun_shell_projectile.InitialVelocity = 400 - shotgun_shell_projectile.Lifespan = 0.25f - shotgun_shell_projectile.UseDamage1Subtract = true - shotgun_shell_projectile.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(shotgun_shell_projectile) - - six_shooter_projectile.Name = "six_shooter_projectile" - // TODO for later, maybe : set_resource_parent six_shooter_projectile game_objects 9mmbullet_projectile - six_shooter_projectile.Damage0 = 22 - six_shooter_projectile.Damage1 = 20 - six_shooter_projectile.ProjectileDamageType = DamageType.Direct - six_shooter_projectile.DegradeDelay = 0.15f - six_shooter_projectile.DegradeMultiplier = 0.25f - six_shooter_projectile.InitialVelocity = 500 - six_shooter_projectile.Lifespan = 0.4f - six_shooter_projectile.UseDamage1Subtract = false - ProjectileDefinition.CalculateDerivedFields(six_shooter_projectile) - - skyguard_flak_cannon_projectile.Name = "skyguard_flak_cannon_projectile" - skyguard_flak_cannon_projectile.Damage0 = 15 - skyguard_flak_cannon_projectile.Damage1 = 25 - skyguard_flak_cannon_projectile.Damage2 = 50 - skyguard_flak_cannon_projectile.DamageAtEdge = 1f - skyguard_flak_cannon_projectile.DamageRadius = 10f - skyguard_flak_cannon_projectile.ProjectileDamageType = DamageType.Direct - skyguard_flak_cannon_projectile.ProjectileDamageTypeSecondary = DamageType.Splash - skyguard_flak_cannon_projectile.InitialVelocity = 100 - skyguard_flak_cannon_projectile.Lifespan = 5f - ProjectileDefinition.CalculateDerivedFields(skyguard_flak_cannon_projectile) - skyguard_flak_cannon_projectile.Modifiers = List( - //FlakHit, - FlakBurst, - MaxDistanceCutoff - ) - - sparrow_projectile.Name = "sparrow_projectile" - sparrow_projectile.Damage0 = 35 - sparrow_projectile.Damage1 = 50 - sparrow_projectile.Damage2 = 125 - sparrow_projectile.Acceleration = 12 - sparrow_projectile.AccelerationUntil = 5f - sparrow_projectile.DamageAtEdge = 0.1f - sparrow_projectile.DamageRadius = 3f - sparrow_projectile.ProjectileDamageType = DamageType.Splash - sparrow_projectile.InitialVelocity = 60 - sparrow_projectile.Lifespan = 5.85f - sparrow_projectile.registerAs = "rc-projectiles" - sparrow_projectile.ExistsOnRemoteClients = true - sparrow_projectile.RemoteClientData = (13107, 187) - sparrow_projectile.AutoLock = true - sparrow_projectile.Packet = projectileConverter - ProjectileDefinition.CalculateDerivedFields(sparrow_projectile) - sparrow_projectile.Modifiers = RadialDegrade - - sparrow_secondary_projectile.Name = "sparrow_secondary_projectile" - // TODO for later, maybe : set_resource_parent sparrow_secondary_projectile game_objects sparrow_projectile - sparrow_secondary_projectile.Damage0 = 35 - sparrow_secondary_projectile.Damage1 = 50 - sparrow_secondary_projectile.Damage2 = 125 - sparrow_secondary_projectile.Acceleration = 12 - sparrow_secondary_projectile.AccelerationUntil = 5f - sparrow_secondary_projectile.DamageAtEdge = 0.1f - sparrow_secondary_projectile.DamageRadius = 3f - sparrow_secondary_projectile.ProjectileDamageType = DamageType.Splash - sparrow_secondary_projectile.InitialVelocity = 60 - sparrow_secondary_projectile.Lifespan = 5.85f - sparrow_secondary_projectile.registerAs = "rc-projectiles" - sparrow_secondary_projectile.ExistsOnRemoteClients = true - sparrow_secondary_projectile.RemoteClientData = (13107, 187) - sparrow_secondary_projectile.AutoLock = true - sparrow_secondary_projectile.Packet = projectileConverter - ProjectileDefinition.CalculateDerivedFields(sparrow_secondary_projectile) - sparrow_secondary_projectile.Modifiers = RadialDegrade - - spiker_projectile.Name = "spiker_projectile" - spiker_projectile.Charging = ChargeDamage(4, StandardDamageProfile(damage0 = Some(20), damage1 = Some(20))) - spiker_projectile.Damage0 = 75 - spiker_projectile.Damage1 = 75 - spiker_projectile.DamageAtEdge = 0.1f - spiker_projectile.DamageRadius = 5f - spiker_projectile.DamageRadiusMin = 1f - spiker_projectile.ProjectileDamageType = DamageType.Splash - spiker_projectile.InitialVelocity = 40 - spiker_projectile.Lifespan = 5f - spiker_projectile.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(spiker_projectile) - spiker_projectile.Modifiers = List( - SpikerChargeDamage, - RadialDegrade - ) - - spitfire_aa_ammo_projectile.Name = "spitfire_aa_ammo_projectile" - spitfire_aa_ammo_projectile.Damage0 = 5 - spitfire_aa_ammo_projectile.Damage1 = 15 - spitfire_aa_ammo_projectile.Damage2 = 12 - spitfire_aa_ammo_projectile.Damage3 = 5 - spitfire_aa_ammo_projectile.Damage4 = 15 - spitfire_aa_ammo_projectile.DamageAtEdge = 1f - spitfire_aa_ammo_projectile.DamageRadius = 10f - spitfire_aa_ammo_projectile.ProjectileDamageType = DamageType.Direct - spitfire_aa_ammo_projectile.ProjectileDamageTypeSecondary = DamageType.Splash - spitfire_aa_ammo_projectile.InitialVelocity = 100 - spitfire_aa_ammo_projectile.Lifespan = 5f - ProjectileDefinition.CalculateDerivedFields(spitfire_aa_ammo_projectile) - spitfire_aa_ammo_projectile.Modifiers = List( - //FlakHit, - FlakBurst, - MaxDistanceCutoff - ) - - spitfire_ammo_projectile.Name = "spitfire_ammo_projectile" - spitfire_ammo_projectile.Damage0 = 15 - spitfire_ammo_projectile.Damage1 = 10 - spitfire_ammo_projectile.ProjectileDamageType = DamageType.Direct - spitfire_ammo_projectile.DegradeDelay = .01f - spitfire_ammo_projectile.DegradeMultiplier = 0.5f - spitfire_ammo_projectile.InitialVelocity = 100 - spitfire_ammo_projectile.Lifespan = .5f - spitfire_ammo_projectile.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(spitfire_ammo_projectile) - - starfire_projectile.Name = "starfire_projectile" - starfire_projectile.Damage0 = 16 - starfire_projectile.Damage1 = 20 - starfire_projectile.Damage2 = 58 - starfire_projectile.Acceleration = 12 - starfire_projectile.AccelerationUntil = 5f - starfire_projectile.ProjectileDamageType = DamageType.Aggravated - starfire_projectile.Aggravated = AggravatedDamage( - AggravatedInfo(DamageType.Direct, 0.25f, 250), - Aura.Comet, - 2000, - 0f, - true, - List( - TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player), - TargetValidation(EffectTarget.Category.Vehicle, EffectTarget.Validation.Vehicle), - TargetValidation(EffectTarget.Category.Turret, EffectTarget.Validation.Turret) - ) - ) - starfire_projectile.InitialVelocity = 45 - starfire_projectile.Lifespan = 7.8f - starfire_projectile.registerAs = "rc-projectiles" - starfire_projectile.ExistsOnRemoteClients = true - starfire_projectile.RemoteClientData = (39577, 249) - starfire_projectile.AutoLock = true - starfire_projectile.Packet = projectileConverter - ProjectileDefinition.CalculateDerivedFields(starfire_projectile) - starfire_projectile.Modifiers = List( - StarfireAggravatedBurn, - RadialDegrade - ) - - striker_missile_projectile.Name = "striker_missile_projectile" - striker_missile_projectile.Damage0 = 35 - striker_missile_projectile.Damage1 = 175 - striker_missile_projectile.Damage2 = 125 - striker_missile_projectile.Damage3 = 125 - striker_missile_projectile.Damage4 = 263 - striker_missile_projectile.Acceleration = 20 - striker_missile_projectile.AccelerationUntil = 2f - striker_missile_projectile.DamageAtEdge = 0.1f - striker_missile_projectile.DamageRadius = 1.5f - striker_missile_projectile.ProjectileDamageType = DamageType.Splash - striker_missile_projectile.InitialVelocity = 30 - striker_missile_projectile.Lifespan = 4.2f - ProjectileDefinition.CalculateDerivedFields(striker_missile_projectile) - striker_missile_projectile.Modifiers = RadialDegrade - - striker_missile_targeting_projectile.Name = "striker_missile_targeting_projectile" - // TODO for later, maybe : set_resource_parent striker_missile_targeting_projectile game_objects striker_missile_projectile - striker_missile_targeting_projectile.Damage0 = 35 - striker_missile_targeting_projectile.Damage1 = 175 - striker_missile_targeting_projectile.Damage2 = 125 - striker_missile_targeting_projectile.Damage3 = 125 - striker_missile_targeting_projectile.Damage4 = 263 - striker_missile_targeting_projectile.Acceleration = 20 - striker_missile_targeting_projectile.AccelerationUntil = 2f - striker_missile_targeting_projectile.DamageAtEdge = 0.1f - striker_missile_targeting_projectile.DamageRadius = 1.5f - striker_missile_targeting_projectile.ProjectileDamageType = DamageType.Splash - striker_missile_targeting_projectile.InitialVelocity = 30 - striker_missile_targeting_projectile.Lifespan = 4.2f - striker_missile_targeting_projectile.registerAs = "rc-projectiles" - striker_missile_targeting_projectile.ExistsOnRemoteClients = true - striker_missile_targeting_projectile.RemoteClientData = (26214, 134) - striker_missile_targeting_projectile.AutoLock = true - striker_missile_targeting_projectile.Packet = projectileConverter - ProjectileDefinition.CalculateDerivedFields(striker_missile_targeting_projectile) - striker_missile_targeting_projectile.Modifiers = RadialDegrade - - trek_projectile.Name = "trek_projectile" - trek_projectile.Damage0 = 0 - trek_projectile.Damage1 = 0 - trek_projectile.Damage2 = 0 - trek_projectile.Damage3 = 0 - trek_projectile.Damage4 = 0 - trek_projectile.Acceleration = -20 - trek_projectile.AccelerationUntil = 1f - trek_projectile.ProjectileDamageType = DamageType.Direct - trek_projectile.InitialVelocity = 40 - trek_projectile.Lifespan = 7f - trek_projectile.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(trek_projectile) - trek_projectile.Modifiers = MaxDistanceCutoff - - vanu_sentry_turret_projectile.Name = "vanu_sentry_turret_projectile" - vanu_sentry_turret_projectile.Damage0 = 25 - vanu_sentry_turret_projectile.Damage1 = 35 - vanu_sentry_turret_projectile.Damage2 = 100 - vanu_sentry_turret_projectile.DamageAtEdge = 0.1f - vanu_sentry_turret_projectile.DamageRadius = 3f - vanu_sentry_turret_projectile.ProjectileDamageType = DamageType.Splash - vanu_sentry_turret_projectile.InitialVelocity = 240 - vanu_sentry_turret_projectile.Lifespan = 1.3f - ProjectileDefinition.CalculateDerivedFields(vanu_sentry_turret_projectile) - vanu_sentry_turret_projectile.Modifiers = RadialDegrade - - vulture_bomb_projectile.Name = "vulture_bomb_projectile" - vulture_bomb_projectile.Damage0 = 175 - vulture_bomb_projectile.Damage1 = 1750 - vulture_bomb_projectile.Damage2 = 1000 - vulture_bomb_projectile.Damage3 = 400 - vulture_bomb_projectile.Damage4 = 1500 - vulture_bomb_projectile.DamageAtEdge = 0.1f - vulture_bomb_projectile.DamageRadius = 10f - vulture_bomb_projectile.ProjectileDamageType = DamageType.Splash - vulture_bomb_projectile.InitialVelocity = 0 - vulture_bomb_projectile.Lifespan = 30f - ProjectileDefinition.CalculateDerivedFields(vulture_bomb_projectile) - vulture_bomb_projectile.Modifiers = RadialDegrade - - vulture_nose_bullet_projectile.Name = "vulture_nose_bullet_projectile" - vulture_nose_bullet_projectile.Damage0 = 12 - vulture_nose_bullet_projectile.Damage1 = 15 - vulture_nose_bullet_projectile.Damage2 = 10 - vulture_nose_bullet_projectile.Damage3 = 10 - vulture_nose_bullet_projectile.Damage4 = 15 - vulture_nose_bullet_projectile.ProjectileDamageType = DamageType.Direct - vulture_nose_bullet_projectile.DegradeDelay = .4f - vulture_nose_bullet_projectile.DegradeMultiplier = 0.7f - vulture_nose_bullet_projectile.InitialVelocity = 500 - vulture_nose_bullet_projectile.Lifespan = 0.46f - ProjectileDefinition.CalculateDerivedFields(vulture_nose_bullet_projectile) - - vulture_tail_bullet_projectile.Name = "vulture_tail_bullet_projectile" - vulture_tail_bullet_projectile.Damage0 = 25 - vulture_tail_bullet_projectile.Damage1 = 35 - vulture_tail_bullet_projectile.Damage2 = 50 - vulture_tail_bullet_projectile.ProjectileDamageType = DamageType.Direct - vulture_tail_bullet_projectile.DegradeDelay = .02f - vulture_tail_bullet_projectile.DegradeMultiplier = 0.5f - vulture_tail_bullet_projectile.InitialVelocity = 500 - vulture_tail_bullet_projectile.Lifespan = 0.6f - ProjectileDefinition.CalculateDerivedFields(vulture_tail_bullet_projectile) - - wasp_gun_projectile.Name = "wasp_gun_projectile" - wasp_gun_projectile.Damage0 = 10 - wasp_gun_projectile.Damage1 = 15 - wasp_gun_projectile.Damage2 = 25 - wasp_gun_projectile.Damage3 = 17 - wasp_gun_projectile.Damage4 = 7 - wasp_gun_projectile.ProjectileDamageType = DamageType.Direct - wasp_gun_projectile.DegradeDelay = .015f - wasp_gun_projectile.DegradeMultiplier = 0.5f - wasp_gun_projectile.InitialVelocity = 500 - wasp_gun_projectile.Lifespan = 0.5f - wasp_gun_projectile.DamageToBattleframeOnly = true - ProjectileDefinition.CalculateDerivedFields(wasp_gun_projectile) - - wasp_rocket_projectile.Name = "wasp_rocket_projectile" - wasp_rocket_projectile.Damage0 = 35 - wasp_rocket_projectile.Damage1 = 50 - wasp_rocket_projectile.Damage2 = 300 - wasp_rocket_projectile.Acceleration = 10 - wasp_rocket_projectile.AccelerationUntil = 5f - wasp_rocket_projectile.DamageAtEdge = 0.1f - wasp_rocket_projectile.DamageRadius = 3f - wasp_rocket_projectile.ProjectileDamageType = DamageType.Splash - wasp_rocket_projectile.InitialVelocity = 60 - wasp_rocket_projectile.Lifespan = 6.5f - wasp_rocket_projectile.registerAs = "rc-projectiles" - wasp_rocket_projectile.ExistsOnRemoteClients = true - wasp_rocket_projectile.RemoteClientData = (0, 208) - wasp_rocket_projectile.AutoLock = true - wasp_rocket_projectile.Packet = projectileConverter - ProjectileDefinition.CalculateDerivedFields(wasp_rocket_projectile) - wasp_rocket_projectile.Modifiers = RadialDegrade - - winchester_projectile.Name = "winchester_projectile" - // TODO for later, maybe : set_resource_parent winchester_projectile game_objects bolt_projectile - winchester_projectile.Damage0 = 80 - winchester_projectile.Damage1 = 40 - winchester_projectile.Damage2 = 50 - winchester_projectile.Damage3 = 50 - winchester_projectile.Damage4 = 75 - winchester_projectile.ProjectileDamageType = DamageType.Direct - winchester_projectile.InitialVelocity = 500 - winchester_projectile.Lifespan = 0.6f - ProjectileDefinition.CalculateDerivedFields(winchester_projectile) - } - - /** - * Initialize `ProjectileDefinition` globals for projectiles utilized by battleframe robotics. - */ - private def init_bfr_projectile(): Unit = { - val projectileConverter: ProjectileConverter = new ProjectileConverter - val radCloudConverter: RadiationCloudConverter = new RadiationCloudConverter - - aphelion_immolation_cannon_projectile.Name = "aphelion_immolation_cannon_projectile" - aphelion_immolation_cannon_projectile.Damage0 = 55 - aphelion_immolation_cannon_projectile.Damage1 = 225 - aphelion_immolation_cannon_projectile.Damage2 = 210 - aphelion_immolation_cannon_projectile.Damage3 = 135 - aphelion_immolation_cannon_projectile.Damage4 = 140 - aphelion_immolation_cannon_projectile.DamageAtEdge = 0.1f - aphelion_immolation_cannon_projectile.DamageRadius = 2.0f - aphelion_immolation_cannon_projectile.ProjectileDamageType = DamageType.Splash - aphelion_immolation_cannon_projectile.InitialVelocity = 250 - aphelion_immolation_cannon_projectile.Lifespan = 1.4f - ProjectileDefinition.CalculateDerivedFields(aphelion_immolation_cannon_projectile) - aphelion_immolation_cannon_projectile.Modifiers = RadialDegrade - - aphelion_laser_projectile.Name = "aphelion_laser_projectile" - aphelion_laser_projectile.Damage0 = 3 - aphelion_laser_projectile.Damage1 = 5 - aphelion_laser_projectile.Damage2 = 5 - aphelion_laser_projectile.Damage3 = 4 - aphelion_laser_projectile.Damage4 = 5 - aphelion_laser_projectile.ProjectileDamageType = DamageType.Direct - aphelion_laser_projectile.DegradeDelay = .05f - aphelion_laser_projectile.DegradeMultiplier = 0.5f - aphelion_laser_projectile.InitialVelocity = 500 - aphelion_laser_projectile.Lifespan = 0.35f - ProjectileDefinition.CalculateDerivedFields(aphelion_laser_projectile) - - aphelion_plasma_cloud.Name = "aphelion_plasma_cloud" - aphelion_plasma_cloud.Damage0 = 3 - aphelion_plasma_cloud.DamageAtEdge = 1.0f - aphelion_plasma_cloud.DamageRadius = 3f - aphelion_plasma_cloud.radiation_cloud = true - aphelion_plasma_cloud.ProjectileDamageType = DamageType.Aggravated - aphelion_plasma_cloud.Aggravated = AggravatedDamage( - AggravatedInfo(DamageType.Splash, 0.5f, 1000), - Aura.Napalm, - AggravatedTiming(10000, 2), //10000 - 10f, //aphelion_plasma_rocket_projectile.aggravated_damage_max_factor - true, - List( - TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player) - ) - ) - aphelion_plasma_cloud.Lifespan = 10.0f - ProjectileDefinition.CalculateDerivedFields(aphelion_plasma_cloud) - aphelion_plasma_cloud.registerAs = "rc-projectiles" - aphelion_plasma_cloud.ExistsOnRemoteClients = true - aphelion_plasma_cloud.Packet = radCloudConverter - //aphelion_plasma_cloud.Geometry = GeometryForm.representProjectileBySphere() - aphelion_plasma_cloud.Modifiers = List( //TODO placeholder values - MaxDistanceCutoff, - InfantryAggravatedRadiation, - InfantryAggravatedRadiationBurn, - ShieldAgainstRadiation - ) - - aphelion_plasma_rocket_projectile.Name = "aphelion_plasma_rocket_projectile" - //has property aggravated_damage_max_factor, but it's the aphelion_plasma_cloud that performs aggravated damage - aphelion_plasma_rocket_projectile.Damage0 = 38 - aphelion_plasma_rocket_projectile.Damage1 = 70 - aphelion_plasma_rocket_projectile.Damage2 = 95 - aphelion_plasma_rocket_projectile.Damage3 = 55 - aphelion_plasma_rocket_projectile.Damage4 = 60 - aphelion_plasma_rocket_projectile.Acceleration = 20 - aphelion_plasma_rocket_projectile.AccelerationUntil = 2f - 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.InitialVelocity = 75 - aphelion_plasma_rocket_projectile.Lifespan = 5f - ProjectileDefinition.CalculateDerivedFields(aphelion_plasma_rocket_projectile) - aphelion_plasma_rocket_projectile.Modifiers = RadialDegrade - - aphelion_ppa_projectile.Name = "aphelion_ppa_projectile" - // TODO for later, maybe : set_resource_parent aphelion_ppa_projectile game_objects ppa_projectile - aphelion_ppa_projectile.Damage0 = 31 - aphelion_ppa_projectile.Damage1 = 84 - aphelion_ppa_projectile.Damage2 = 58 - aphelion_ppa_projectile.Damage3 = 57 - aphelion_ppa_projectile.Damage4 = 60 - aphelion_ppa_projectile.DamageAtEdge = 0.10f - aphelion_ppa_projectile.DamageRadius = 1f - aphelion_ppa_projectile.ProjectileDamageType = DamageType.Splash - aphelion_ppa_projectile.DegradeDelay = .5f - aphelion_ppa_projectile.DegradeMultiplier = 0.55f - aphelion_ppa_projectile.InitialVelocity = 350 - aphelion_ppa_projectile.Lifespan = .7f - ProjectileDefinition.CalculateDerivedFields(aphelion_ppa_projectile) - aphelion_ppa_projectile.Modifiers = RadialDegrade - - aphelion_starfire_projectile.Name = "aphelion_starfire_projectile" - // TODO for later, maybe : set_resource_parent aphelion_starfire_projectile game_objects starfire_projectile - aphelion_starfire_projectile.Damage0 = 12 - aphelion_starfire_projectile.Damage1 = 20 - aphelion_starfire_projectile.Damage2 = 15 - aphelion_starfire_projectile.Damage3 = 19 - aphelion_starfire_projectile.Damage4 = 17 - aphelion_starfire_projectile.Acceleration = 11 - aphelion_starfire_projectile.AccelerationUntil = 5f - aphelion_starfire_projectile.InitialVelocity = 45 - aphelion_starfire_projectile.Lifespan = 7f - aphelion_starfire_projectile.ProjectileDamageType = DamageType.Aggravated - aphelion_starfire_projectile.Aggravated = AggravatedDamage( - AggravatedInfo(DamageType.Direct, 0.25f, 250), - Aura.None, - 2000, - 0f, - true, - List(TargetValidation(EffectTarget.Category.Aircraft, EffectTarget.Validation.Aircraft)) - ) - aphelion_starfire_projectile.registerAs = "rc-projectiles" - aphelion_starfire_projectile.ExistsOnRemoteClients = true - aphelion_starfire_projectile.RemoteClientData = (39577, 249) //starfire_projectile data - aphelion_starfire_projectile.AutoLock = true - aphelion_starfire_projectile.Packet = projectileConverter - ProjectileDefinition.CalculateDerivedFields(aphelion_starfire_projectile) - aphelion_starfire_projectile.Modifiers = List( - StarfireAggravated, - StarfireAggravatedBurn - ) - - colossus_100mm_projectile.Name = "colossus_100mm_projectile" - colossus_100mm_projectile.Damage0 = 58 - colossus_100mm_projectile.Damage1 = 330 - colossus_100mm_projectile.Damage2 = 300 - colossus_100mm_projectile.Damage3 = 165 - colossus_100mm_projectile.Damage4 = 190 - colossus_100mm_projectile.DamageAtEdge = 0.1f - colossus_100mm_projectile.DamageRadius = 5f - colossus_100mm_projectile.ProjectileDamageType = DamageType.Splash - colossus_100mm_projectile.InitialVelocity = 100 - colossus_100mm_projectile.Lifespan = 4f - ProjectileDefinition.CalculateDerivedFields(colossus_100mm_projectile) - colossus_100mm_projectile.Modifiers = RadialDegrade - - colossus_burster_projectile.Name = "colossus_burster_projectile" - // TODO for later, maybe : set_resource_parent colossus_burster_projectile game_objects burster_projectile - colossus_burster_projectile.Damage0 = 18 - colossus_burster_projectile.Damage1 = 26 - colossus_burster_projectile.Damage2 = 18 - colossus_burster_projectile.Damage3 = 22 - colossus_burster_projectile.Damage4 = 20 - colossus_burster_projectile.DamageAtEdge = 0.1f - colossus_burster_projectile.DamageRadius = 7f - colossus_burster_projectile.ProjectileDamageType = DamageType.Direct - colossus_burster_projectile.ProjectileDamageTypeSecondary = DamageType.Splash - colossus_burster_projectile.InitialVelocity = 175 - colossus_burster_projectile.Lifespan = 2.5f - ProjectileDefinition.CalculateDerivedFields(colossus_burster_projectile) - colossus_burster_projectile.Modifiers = List( - //FlakHit, - FlakBurst, - MaxDistanceCutoff - ) - - colossus_chaingun_projectile.Name = "colossus_chaingun_projectile" - // TODO for later, maybe : set_resource_parent colossus_chaingun_projectile game_objects 35mmbullet_projectile - colossus_chaingun_projectile.Damage0 = 15 - colossus_chaingun_projectile.Damage1 = 14 - colossus_chaingun_projectile.Damage2 = 15 - colossus_chaingun_projectile.Damage3 = 13 - colossus_chaingun_projectile.Damage4 = 11 - colossus_chaingun_projectile.ProjectileDamageType = DamageType.Direct - colossus_chaingun_projectile.DegradeDelay = .100f - colossus_chaingun_projectile.DegradeMultiplier = 0.44f - colossus_chaingun_projectile.InitialVelocity = 500 - colossus_chaingun_projectile.Lifespan = .50f - ProjectileDefinition.CalculateDerivedFields(colossus_chaingun_projectile) - - colossus_cluster_bomb_projectile.Name = "colossus_cluster_bomb_projectile" - colossus_cluster_bomb_projectile.Damage0 = 40 - colossus_cluster_bomb_projectile.Damage1 = 88 - colossus_cluster_bomb_projectile.Damage2 = 100 - colossus_cluster_bomb_projectile.Damage3 = 83 - colossus_cluster_bomb_projectile.Damage4 = 88 - colossus_cluster_bomb_projectile.DamageAtEdge = 0.1f - colossus_cluster_bomb_projectile.DamageRadius = 8f - colossus_cluster_bomb_projectile.ProjectileDamageType = DamageType.Splash - colossus_cluster_bomb_projectile.InitialVelocity = 75 - colossus_cluster_bomb_projectile.Lifespan = 5f - ProjectileDefinition.CalculateDerivedFields(colossus_cluster_bomb_projectile) - colossus_cluster_bomb_projectile.Modifiers = RadialDegrade - - colossus_tank_cannon_projectile.Name = "colossus_tank_cannon_projectile" - // TODO for later, maybe : set_resource_parent colossus_tank_cannon_projectile game_objects 75mmbullet_projectile - colossus_tank_cannon_projectile.Damage0 = 33 - colossus_tank_cannon_projectile.Damage1 = 90 - colossus_tank_cannon_projectile.Damage2 = 95 - colossus_tank_cannon_projectile.Damage3 = 71 - colossus_tank_cannon_projectile.Damage4 = 66 - colossus_tank_cannon_projectile.DamageAtEdge = 0.1f - colossus_tank_cannon_projectile.DamageRadius = 2f - colossus_tank_cannon_projectile.ProjectileDamageType = DamageType.Splash - colossus_tank_cannon_projectile.InitialVelocity = 165 - colossus_tank_cannon_projectile.Lifespan = 2f - ProjectileDefinition.CalculateDerivedFields(colossus_tank_cannon_projectile) - colossus_tank_cannon_projectile.Modifiers = RadialDegrade - - peregrine_dual_machine_gun_projectile.Name = "peregrine_dual_machine_gun_projectile" - // TODO for later, maybe : set_resource_parent peregrine_dual_machine_gun_projectile game_objects 35mmbullet_projectile - peregrine_dual_machine_gun_projectile.Damage0 = 16 - peregrine_dual_machine_gun_projectile.Damage1 = 44 - peregrine_dual_machine_gun_projectile.Damage2 = 30 - peregrine_dual_machine_gun_projectile.Damage3 = 27 - peregrine_dual_machine_gun_projectile.Damage4 = 32 - peregrine_dual_machine_gun_projectile.ProjectileDamageType = DamageType.Direct - peregrine_dual_machine_gun_projectile.DegradeDelay = .25f - peregrine_dual_machine_gun_projectile.DegradeMultiplier = 0.65f - peregrine_dual_machine_gun_projectile.InitialVelocity = 250 - peregrine_dual_machine_gun_projectile.Lifespan = 1.1f - ProjectileDefinition.CalculateDerivedFields(peregrine_dual_machine_gun_projectile) - - peregrine_mechhammer_projectile.Name = "peregrine_mechhammer_projectile" - peregrine_mechhammer_projectile.Damage0 = 5 - peregrine_mechhammer_projectile.Damage1 = 4 - peregrine_mechhammer_projectile.Damage2 = 4 - peregrine_mechhammer_projectile.Damage3 = 5 - peregrine_mechhammer_projectile.Damage4 = 3 - peregrine_mechhammer_projectile.ProjectileDamageType = DamageType.Direct - peregrine_mechhammer_projectile.InitialVelocity = 500 - peregrine_mechhammer_projectile.Lifespan = 0.4f - ProjectileDefinition.CalculateDerivedFields(peregrine_mechhammer_projectile) - - peregrine_particle_cannon_projectile.Name = "peregrine_particle_cannon_projectile" - peregrine_particle_cannon_projectile.Damage0 = 70 - peregrine_particle_cannon_projectile.Damage1 = 525 - peregrine_particle_cannon_projectile.Damage2 = 350 - peregrine_particle_cannon_projectile.Damage3 = 318 - peregrine_particle_cannon_projectile.Damage4 = 310 - 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.InitialVelocity = 500 - peregrine_particle_cannon_projectile.Lifespan = .6f - ProjectileDefinition.CalculateDerivedFields(peregrine_particle_cannon_projectile) - peregrine_particle_cannon_projectile.Modifiers = RadialDegrade - - peregrine_particle_cannon_radiation_cloud.Name = "peregrine_particle_cannon_radiation_cloud" - peregrine_particle_cannon_radiation_cloud.Damage0 = 1 - peregrine_particle_cannon_radiation_cloud.DamageAtEdge = 1.0f - peregrine_particle_cannon_radiation_cloud.DamageRadius = 3f - peregrine_particle_cannon_radiation_cloud.radiation_cloud = true - peregrine_particle_cannon_radiation_cloud.ProjectileDamageType = DamageType.Radiation - peregrine_particle_cannon_radiation_cloud.Lifespan = 5.0f - ProjectileDefinition.CalculateDerivedFields(peregrine_particle_cannon_radiation_cloud) - peregrine_particle_cannon_radiation_cloud.registerAs = "rc-projectiles" - peregrine_particle_cannon_radiation_cloud.ExistsOnRemoteClients = true - peregrine_particle_cannon_radiation_cloud.Packet = radCloudConverter - //peregrine_particle_cannon_radiation_cloud.Geometry = GeometryForm.representProjectileBySphere() - peregrine_particle_cannon_radiation_cloud.Modifiers = List( - MaxDistanceCutoff, - ShieldAgainstRadiation - ) - - peregrine_rocket_pod_projectile.Name = "peregrine_rocket_pod_projectile" - peregrine_rocket_pod_projectile.Damage0 = 30 - peregrine_rocket_pod_projectile.Damage1 = 50 - peregrine_rocket_pod_projectile.Damage2 = 50 - peregrine_rocket_pod_projectile.Damage3 = 45 - peregrine_rocket_pod_projectile.Damage4 = 40 - peregrine_rocket_pod_projectile.Acceleration = 10 - peregrine_rocket_pod_projectile.AccelerationUntil = 2f - peregrine_rocket_pod_projectile.DamageAtEdge = 0.1f - peregrine_rocket_pod_projectile.DamageRadius = 3f - peregrine_rocket_pod_projectile.ProjectileDamageType = DamageType.Splash - peregrine_rocket_pod_projectile.InitialVelocity = 200 - peregrine_rocket_pod_projectile.Lifespan = 1.85f - ProjectileDefinition.CalculateDerivedFields(peregrine_rocket_pod_projectile) - peregrine_rocket_pod_projectile.Modifiers = RadialDegrade - - peregrine_sparrow_projectile.Name = "peregrine_sparrow_projectile" - // TODO for later, maybe : set_resource_parent peregrine_sparrow_projectile game_objects sparrow_projectile - peregrine_sparrow_projectile.Damage0 = 20 - peregrine_sparrow_projectile.Damage1 = 40 - peregrine_sparrow_projectile.Damage2 = 30 - peregrine_sparrow_projectile.Damage3 = 30 - peregrine_sparrow_projectile.Damage4 = 31 - peregrine_sparrow_projectile.Acceleration = 12 - peregrine_sparrow_projectile.AccelerationUntil = 5f - peregrine_sparrow_projectile.DamageAtEdge = 0.1f - peregrine_sparrow_projectile.DamageRadius = 2f - peregrine_sparrow_projectile.ProjectileDamageType = DamageType.Splash - peregrine_sparrow_projectile.InitialVelocity = 45 - peregrine_sparrow_projectile.Lifespan = 7.5f - peregrine_sparrow_projectile.registerAs = "rc-projectiles" - peregrine_sparrow_projectile.ExistsOnRemoteClients = true - peregrine_sparrow_projectile.RemoteClientData = (13107, 187) //sparrow_projectile data - peregrine_sparrow_projectile.AutoLock = true - peregrine_sparrow_projectile.Packet = projectileConverter - ProjectileDefinition.CalculateDerivedFields(peregrine_sparrow_projectile) - peregrine_sparrow_projectile.Modifiers = RadialDegrade - - armor_siphon_projectile.Name = "armor_siphon_projectile" - armor_siphon_projectile.Damage0 = 0 - armor_siphon_projectile.Damage1 = 20 //ground vehicles, siphon drain - armor_siphon_projectile.Damage2 = 20 //aircraft, siphon drain - armor_siphon_projectile.Damage3 = 0 - armor_siphon_projectile.Damage4 = 20 //bfr's, siphon drain - armor_siphon_projectile.DamageToVehicleOnly = true - armor_siphon_projectile.DamageToBattleframeOnly = true - armor_siphon_projectile.DamageRadius = 35f - armor_siphon_projectile.ProjectileDamageType = DamageType.Siphon - ProjectileDefinition.CalculateDerivedFields(armor_siphon_projectile) - armor_siphon_projectile.Modifiers = List( - ArmorSiphonMaxDistanceCutoff, - ArmorSiphonRepairHost - ) - - ntu_siphon_emp.Name = "ntu_siphon_emp" - ntu_siphon_emp.Damage0 = 1 - ntu_siphon_emp.Damage1 = 1 - ntu_siphon_emp.DamageAtEdge = 0.1f - ntu_siphon_emp.DamageRadius = 50f - ntu_siphon_emp.ProjectileDamageType = DamageType.Splash - ntu_siphon_emp.AdditionalEffect = true - ntu_siphon_emp.SympatheticExplosion = true - ntu_siphon_emp.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Player, - EffectTarget.Validation.Player - ) -> 1000 - ntu_siphon_emp.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Vehicle, - EffectTarget.Validation.AMS - ) -> 5000 - ntu_siphon_emp.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Deployable, - EffectTarget.Validation.MotionSensor - ) -> 30000 - ntu_siphon_emp.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Deployable, - EffectTarget.Validation.Spitfire - ) -> 30000 - ntu_siphon_emp.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Turret, - EffectTarget.Validation.Turret - ) -> 30000 - ntu_siphon_emp.JammedEffectDuration += TargetValidation( - EffectTarget.Category.Vehicle, - EffectTarget.Validation.VehicleNotAMS - ) -> 10000 - ProjectileDefinition.CalculateDerivedFields(ntu_siphon_emp) - ntu_siphon_emp.Modifiers = MaxDistanceCutoff - } - - /** - * Initialize `ToolDefinition` globals. - */ - private def init_tools(): Unit = { - init_infantry_tools() - init_vehicle_tools() - } - - /** - * Initialize `ToolDefinition` globals. - */ - private def init_infantry_tools(): Unit = { - chainblade.Name = "chainblade" - chainblade.Size = EquipmentSize.Melee - chainblade.AmmoTypes += melee_ammo - chainblade.ProjectileTypes += melee_ammo_projectile - chainblade.ProjectileTypes += chainblade_projectile - chainblade.FireModes += new InfiniteFireModeDefinition - chainblade.FireModes.head.AmmoTypeIndices += 0 - chainblade.FireModes.head.AmmoSlotIndex = 0 - chainblade.FireModes.head.Magazine = 1 - chainblade.FireModes += new InfiniteFireModeDefinition - chainblade.FireModes(1).AmmoTypeIndices += 0 - chainblade.FireModes(1).ProjectileTypeIndices += 1 - chainblade.FireModes(1).AmmoSlotIndex = 0 - chainblade.FireModes(1).Magazine = 1 - - magcutter.Name = "magcutter" - magcutter.Size = EquipmentSize.Melee - magcutter.AmmoTypes += melee_ammo - magcutter.ProjectileTypes += melee_ammo_projectile - magcutter.ProjectileTypes += magcutter_projectile - magcutter.FireModes += new InfiniteFireModeDefinition - magcutter.FireModes.head.AmmoTypeIndices += 0 - magcutter.FireModes.head.AmmoSlotIndex = 0 - magcutter.FireModes.head.Magazine = 1 - magcutter.FireModes += new InfiniteFireModeDefinition - magcutter.FireModes(1).AmmoTypeIndices += 0 - magcutter.FireModes(1).ProjectileTypeIndices += 1 - magcutter.FireModes(1).AmmoSlotIndex = 0 - magcutter.FireModes(1).Magazine = 1 - - forceblade.Name = "forceblade" - forceblade.Size = EquipmentSize.Melee - forceblade.AmmoTypes += melee_ammo - forceblade.ProjectileTypes += melee_ammo_projectile - forceblade.ProjectileTypes += forceblade_projectile - forceblade.FireModes += new InfiniteFireModeDefinition - forceblade.FireModes.head.AmmoTypeIndices += 0 - forceblade.FireModes.head.AmmoSlotIndex = 0 - forceblade.FireModes.head.Magazine = 1 - forceblade.FireModes += new InfiniteFireModeDefinition - forceblade.FireModes(1).AmmoTypeIndices += 0 - forceblade.FireModes(1).ProjectileTypeIndices += 1 - forceblade.FireModes(1).AmmoSlotIndex = 0 - forceblade.FireModes(1).Magazine = 1 - - katana.Name = "katana" - katana.Size = EquipmentSize.Melee - katana.AmmoTypes += melee_ammo - katana.ProjectileTypes += katana_projectile - katana.ProjectileTypes += katana_projectileb - katana.FireModes += new InfiniteFireModeDefinition - katana.FireModes.head.AmmoTypeIndices += 0 - katana.FireModes.head.AmmoSlotIndex = 0 - katana.FireModes.head.Magazine = 1 - katana.FireModes += new InfiniteFireModeDefinition - katana.FireModes(1).AmmoTypeIndices += 0 - katana.FireModes(1).ProjectileTypeIndices += 1 - katana.FireModes(1).AmmoSlotIndex = 0 - katana.FireModes(1).Magazine = 1 - - frag_grenade.Name = "frag_grenade" - frag_grenade.Size = EquipmentSize.Pistol - frag_grenade.AmmoTypes += frag_grenade_ammo - frag_grenade.ProjectileTypes += frag_grenade_projectile - frag_grenade.FireModes += new FireModeDefinition - frag_grenade.FireModes.head.AmmoTypeIndices += 0 - frag_grenade.FireModes.head.AmmoSlotIndex = 0 - frag_grenade.FireModes.head.Magazine = 3 - frag_grenade.FireModes += new FireModeDefinition - frag_grenade.FireModes(1).AmmoTypeIndices += 0 - frag_grenade.FireModes(1).AmmoSlotIndex = 0 - frag_grenade.FireModes(1).Magazine = 3 - frag_grenade.Tile = InventoryTile.Tile22 - - plasma_grenade.Name = "plasma_grenade" - plasma_grenade.Size = EquipmentSize.Pistol - plasma_grenade.AmmoTypes += plasma_grenade_ammo - plasma_grenade.ProjectileTypes += plasma_grenade_projectile - plasma_grenade.FireModes += new FireModeDefinition - plasma_grenade.FireModes.head.AmmoTypeIndices += 0 - plasma_grenade.FireModes.head.AmmoSlotIndex = 0 - plasma_grenade.FireModes.head.Magazine = 3 - plasma_grenade.FireModes += new FireModeDefinition - plasma_grenade.FireModes(1).AmmoTypeIndices += 0 - plasma_grenade.FireModes(1).AmmoSlotIndex = 0 - plasma_grenade.FireModes(1).Magazine = 3 - plasma_grenade.Tile = InventoryTile.Tile22 - - jammer_grenade.Name = "jammer_grenade" - jammer_grenade.Size = EquipmentSize.Pistol - jammer_grenade.AmmoTypes += jammer_grenade_ammo - jammer_grenade.ProjectileTypes += jammer_grenade_projectile - jammer_grenade.FireModes += new FireModeDefinition - jammer_grenade.FireModes.head.AmmoTypeIndices += 0 - jammer_grenade.FireModes.head.AmmoSlotIndex = 0 - jammer_grenade.FireModes.head.Magazine = 3 - jammer_grenade.FireModes += new FireModeDefinition - jammer_grenade.FireModes(1).AmmoTypeIndices += 0 - jammer_grenade.FireModes(1).AmmoSlotIndex = 0 - jammer_grenade.FireModes(1).Magazine = 3 - jammer_grenade.Tile = InventoryTile.Tile22 - - repeater.Name = "repeater" - repeater.Size = EquipmentSize.Pistol - repeater.AmmoTypes += bullet_9mm - repeater.AmmoTypes += bullet_9mm_AP - repeater.ProjectileTypes += bullet_9mm_projectile - repeater.ProjectileTypes += bullet_9mm_AP_projectile - repeater.FireModes += new FireModeDefinition - repeater.FireModes.head.AmmoTypeIndices += 0 - repeater.FireModes.head.AmmoTypeIndices += 1 - repeater.FireModes.head.AmmoSlotIndex = 0 - repeater.FireModes.head.Magazine = 20 - repeater.FireModes.head.Add.Damage0 = 2 - repeater.FireModes.head.Add.Damage1 = -3 - repeater.FireModes.head.Add.Damage2 = -3 - repeater.FireModes.head.Add.Damage3 = -3 - repeater.FireModes.head.Add.Damage4 = -3 - repeater.Tile = InventoryTile.Tile33 - - isp.Name = "isp" - isp.Size = EquipmentSize.Pistol - isp.AmmoTypes += shotgun_shell - isp.AmmoTypes += shotgun_shell_AP - isp.ProjectileTypes += shotgun_shell_projectile - isp.ProjectileTypes += shotgun_shell_AP_projectile - isp.FireModes += new PelletFireModeDefinition - isp.FireModes.head.AmmoTypeIndices += 0 - isp.FireModes.head.AmmoTypeIndices += 1 - isp.FireModes.head.AmmoSlotIndex = 0 - isp.FireModes.head.Chamber = 6 //8 shells x 6 pellets = 36 - isp.FireModes.head.Magazine = 8 - isp.FireModes.head.Add.Damage0 = 1 - isp.FireModes.head.Add.Damage2 = 1 - isp.FireModes.head.Add.Damage3 = 1 - isp.Tile = InventoryTile.Tile33 - - beamer.Name = "beamer" - beamer.Size = EquipmentSize.Pistol - beamer.AmmoTypes += energy_cell - beamer.ProjectileTypes += energy_cell_projectile - beamer.ProjectileTypes += enhanced_energy_cell_projectile - beamer.FireModes += new FireModeDefinition - beamer.FireModes.head.AmmoTypeIndices += 0 - beamer.FireModes.head.AmmoSlotIndex = 0 - beamer.FireModes.head.Magazine = 16 - beamer.FireModes.head.Add.Damage0 = 4 - beamer.FireModes.head.Add.Damage1 = -1 - beamer.FireModes.head.Add.Damage2 = -1 - beamer.FireModes.head.Add.Damage3 = -1 - beamer.FireModes.head.Add.Damage4 = -1 - beamer.FireModes += new FireModeDefinition - beamer.FireModes(1).AmmoTypeIndices += 0 - beamer.FireModes(1).ProjectileTypeIndices += 1 - beamer.FireModes(1).AmmoSlotIndex = 0 - beamer.FireModes(1).Magazine = 16 - beamer.FireModes(1).Add.Damage0 = -3 - beamer.FireModes(1).Add.Damage1 = -3 - beamer.FireModes(1).Add.Damage2 = -3 - beamer.FireModes(1).Add.Damage3 = -3 - beamer.FireModes(1).Add.Damage4 = -3 - beamer.Tile = InventoryTile.Tile33 - - ilc9.Name = "ilc9" - ilc9.Size = EquipmentSize.Pistol - ilc9.AmmoTypes += bullet_9mm - ilc9.AmmoTypes += bullet_9mm_AP - ilc9.ProjectileTypes += bullet_9mm_projectile - ilc9.ProjectileTypes += bullet_9mm_AP_projectile - ilc9.FireModes += new FireModeDefinition - ilc9.FireModes.head.AmmoTypeIndices += 0 - ilc9.FireModes.head.AmmoTypeIndices += 1 - ilc9.FireModes.head.AmmoSlotIndex = 0 - ilc9.FireModes.head.Magazine = 30 - ilc9.FireModes.head.Add.Damage1 = -3 - ilc9.FireModes.head.Add.Damage4 = -3 - ilc9.Tile = InventoryTile.Tile33 - - suppressor.Name = "suppressor" - suppressor.Size = EquipmentSize.Rifle - suppressor.AmmoTypes += bullet_9mm - suppressor.AmmoTypes += bullet_9mm_AP - suppressor.ProjectileTypes += bullet_9mm_projectile - suppressor.ProjectileTypes += bullet_9mm_AP_projectile - suppressor.FireModes += new FireModeDefinition - suppressor.FireModes.head.AmmoTypeIndices += 0 - suppressor.FireModes.head.AmmoTypeIndices += 1 - suppressor.FireModes.head.AmmoSlotIndex = 0 - suppressor.FireModes.head.Magazine = 25 - suppressor.FireModes.head.Add.Damage0 = -1 - suppressor.FireModes.head.Add.Damage1 = -1 - suppressor.Tile = InventoryTile.Tile63 - - punisher.Name = "punisher" - punisher.Size = EquipmentSize.Rifle - punisher.AmmoTypes += bullet_9mm - punisher.AmmoTypes += bullet_9mm_AP - punisher.AmmoTypes += rocket - punisher.AmmoTypes += frag_cartridge - punisher.AmmoTypes += jammer_cartridge - punisher.AmmoTypes += plasma_cartridge - punisher.ProjectileTypes += bullet_9mm_projectile - punisher.ProjectileTypes += bullet_9mm_AP_projectile - punisher.ProjectileTypes += rocket_projectile - punisher.ProjectileTypes += frag_cartridge_projectile - punisher.ProjectileTypes += jammer_cartridge_projectile - punisher.ProjectileTypes += plasma_cartridge_projectile - punisher.FireModes += new FireModeDefinition - punisher.FireModes.head.AmmoTypeIndices += 0 - punisher.FireModes.head.AmmoTypeIndices += 1 - punisher.FireModes.head.AmmoSlotIndex = 0 - punisher.FireModes.head.Magazine = 30 - punisher.FireModes.head.Add.Damage0 = 1 - punisher.FireModes.head.Add.Damage3 = 1 - punisher.FireModes += new FireModeDefinition - punisher.FireModes(1).AmmoTypeIndices += 2 - punisher.FireModes(1).AmmoTypeIndices += 3 - punisher.FireModes(1).AmmoTypeIndices += 4 - punisher.FireModes(1).AmmoTypeIndices += 5 - punisher.FireModes(1).AmmoSlotIndex = 1 - punisher.FireModes(1).Magazine = 1 - punisher.Tile = InventoryTile.Tile63 - - flechette.Name = "flechette" - flechette.Size = EquipmentSize.Rifle - flechette.AmmoTypes += shotgun_shell - flechette.AmmoTypes += shotgun_shell_AP - flechette.ProjectileTypes += shotgun_shell_projectile - flechette.ProjectileTypes += shotgun_shell_AP_projectile - flechette.FireModes += new PelletFireModeDefinition - flechette.FireModes.head.AmmoTypeIndices += 0 - flechette.FireModes.head.AmmoTypeIndices += 1 - flechette.FireModes.head.AmmoSlotIndex = 0 - flechette.FireModes.head.Magazine = 12 - flechette.FireModes.head.Chamber = 8 //12 shells * 8 pellets = 96 - flechette.Tile = InventoryTile.Tile63 - - cycler.Name = "cycler" - cycler.Size = EquipmentSize.Rifle - cycler.AmmoTypes += bullet_9mm - cycler.AmmoTypes += bullet_9mm_AP - cycler.ProjectileTypes += bullet_9mm_projectile - cycler.ProjectileTypes += bullet_9mm_AP_projectile - cycler.FireModes += new FireModeDefinition - cycler.FireModes.head.AmmoTypeIndices += 0 - cycler.FireModes.head.AmmoTypeIndices += 1 - cycler.FireModes.head.AmmoSlotIndex = 0 - cycler.FireModes.head.Magazine = 50 - cycler.Tile = InventoryTile.Tile63 - - gauss.Name = "gauss" - gauss.Size = EquipmentSize.Rifle - gauss.AmmoTypes += bullet_9mm - gauss.AmmoTypes += bullet_9mm_AP - gauss.ProjectileTypes += bullet_9mm_projectile - gauss.ProjectileTypes += bullet_9mm_AP_projectile - gauss.FireModes += new FireModeDefinition - gauss.FireModes.head.AmmoTypeIndices += 0 - gauss.FireModes.head.AmmoTypeIndices += 1 - gauss.FireModes.head.AmmoSlotIndex = 0 - gauss.FireModes.head.Magazine = 30 - gauss.FireModes.head.Add.Damage0 = 2 - gauss.FireModes.head.Add.Damage3 = 2 - gauss.Tile = InventoryTile.Tile63 - - pulsar.Name = "pulsar" - pulsar.Size = EquipmentSize.Rifle - pulsar.AmmoTypes += energy_cell - pulsar.ProjectileTypes += pulsar_projectile - pulsar.ProjectileTypes += pulsar_ap_projectile - pulsar.FireModes += new FireModeDefinition - pulsar.FireModes.head.AmmoTypeIndices += 0 - pulsar.FireModes.head.AmmoSlotIndex = 0 - pulsar.FireModes.head.Magazine = 40 - pulsar.FireModes += new FireModeDefinition - pulsar.FireModes(1).AmmoTypeIndices += 0 - pulsar.FireModes(1).ProjectileTypeIndices += 1 - pulsar.FireModes(1).AmmoSlotIndex = 0 - pulsar.FireModes(1).Magazine = 40 - pulsar.Tile = InventoryTile.Tile63 - - anniversary_guna.Name = "anniversary_guna" - anniversary_guna.Size = EquipmentSize.Pistol - anniversary_guna.AmmoTypes += anniversary_ammo - anniversary_guna.ProjectileTypes += anniversary_projectilea - anniversary_guna.ProjectileTypes += anniversary_projectileb - anniversary_guna.FireModes += new FireModeDefinition - anniversary_guna.FireModes.head.AmmoTypeIndices += 0 - anniversary_guna.FireModes.head.AmmoSlotIndex = 0 - anniversary_guna.FireModes.head.Magazine = 6 - anniversary_guna.FireModes += new FireModeDefinition - anniversary_guna.FireModes(1).AmmoTypeIndices += 0 - anniversary_guna.FireModes(1).ProjectileTypeIndices += 1 - anniversary_guna.FireModes(1).AmmoSlotIndex = 0 - anniversary_guna.FireModes(1).Magazine = 6 - anniversary_guna.Tile = InventoryTile.Tile33 - - anniversary_gun.Name = "anniversary_gun" - anniversary_gun.Size = EquipmentSize.Pistol - anniversary_gun.AmmoTypes += anniversary_ammo - anniversary_gun.ProjectileTypes += anniversary_projectilea - anniversary_gun.ProjectileTypes += anniversary_projectileb - anniversary_gun.FireModes += new FireModeDefinition - anniversary_gun.FireModes.head.AmmoTypeIndices += 0 - anniversary_gun.FireModes.head.AmmoSlotIndex = 0 - anniversary_gun.FireModes.head.Magazine = 6 - anniversary_gun.FireModes += new FireModeDefinition - anniversary_gun.FireModes(1).AmmoTypeIndices += 0 - anniversary_gun.FireModes(1).ProjectileTypeIndices += 1 - anniversary_gun.FireModes(1).AmmoSlotIndex = 0 - anniversary_gun.FireModes(1).Magazine = 6 - anniversary_gun.Tile = InventoryTile.Tile33 - - anniversary_gunb.Name = "anniversary_gunb" - anniversary_gunb.Size = EquipmentSize.Pistol - anniversary_gunb.AmmoTypes += anniversary_ammo - anniversary_gunb.ProjectileTypes += anniversary_projectilea - anniversary_gunb.ProjectileTypes += anniversary_projectileb - anniversary_gunb.FireModes += new FireModeDefinition - anniversary_gunb.FireModes.head.AmmoTypeIndices += 0 - anniversary_gunb.FireModes.head.AmmoSlotIndex = 0 - anniversary_gunb.FireModes.head.Magazine = 6 - anniversary_gunb.FireModes += new FireModeDefinition - anniversary_gunb.FireModes(1).AmmoTypeIndices += 0 - anniversary_gunb.FireModes(1).ProjectileTypeIndices += 1 - anniversary_gunb.FireModes(1).AmmoSlotIndex = 0 - anniversary_gunb.FireModes(1).Magazine = 6 - anniversary_gunb.Tile = InventoryTile.Tile33 - - spiker.Name = "spiker" - spiker.Size = EquipmentSize.Pistol - spiker.AmmoTypes += ancient_ammo_combo - spiker.ProjectileTypes += spiker_projectile - spiker.FireModes += new ChargeFireModeDefinition(time = 1000, drainInterval = 500) - spiker.FireModes.head.AmmoTypeIndices += 0 - spiker.FireModes.head.AmmoSlotIndex = 0 - spiker.FireModes.head.Magazine = 25 - spiker.Tile = InventoryTile.Tile33 - - mini_chaingun.Name = "mini_chaingun" - mini_chaingun.Size = EquipmentSize.Rifle - mini_chaingun.AmmoTypes += bullet_9mm - mini_chaingun.AmmoTypes += bullet_9mm_AP - mini_chaingun.ProjectileTypes += bullet_9mm_projectile - mini_chaingun.ProjectileTypes += bullet_9mm_AP_projectile - mini_chaingun.FireModes += new FireModeDefinition - mini_chaingun.FireModes.head.AmmoTypeIndices += 0 - mini_chaingun.FireModes.head.AmmoTypeIndices += 1 - mini_chaingun.FireModes.head.AmmoSlotIndex = 0 - mini_chaingun.FireModes.head.Magazine = 100 - mini_chaingun.Tile = InventoryTile.Tile93 - - r_shotgun.Name = "r_shotgun" - r_shotgun.Size = EquipmentSize.Rifle - r_shotgun.AmmoTypes += shotgun_shell - r_shotgun.AmmoTypes += shotgun_shell_AP - r_shotgun.ProjectileTypes += shotgun_shell_projectile - r_shotgun.ProjectileTypes += shotgun_shell_AP_projectile - r_shotgun.FireModes += new PelletFireModeDefinition - r_shotgun.FireModes.head.AmmoTypeIndices += 0 - r_shotgun.FireModes.head.AmmoTypeIndices += 1 - r_shotgun.FireModes.head.AmmoSlotIndex = 0 - r_shotgun.FireModes.head.Magazine = 16 - r_shotgun.FireModes.head.Chamber = 8 //16 shells * 8 pellets = 128 - r_shotgun.FireModes.head.Add.Damage0 = 1 - r_shotgun.FireModes += new PelletFireModeDefinition - r_shotgun.FireModes(1).AmmoTypeIndices += 0 - r_shotgun.FireModes(1).AmmoTypeIndices += 1 - r_shotgun.FireModes(1).AmmoSlotIndex = 0 - r_shotgun.FireModes(1).Magazine = 16 - r_shotgun.FireModes(1).Chamber = 8 //16 shells * 8 pellets = 128 - r_shotgun.FireModes(1).Add.Damage0 = -3 - r_shotgun.Tile = InventoryTile.Tile93 - - lasher.Name = "lasher" - lasher.Size = EquipmentSize.Rifle - lasher.AmmoTypes += energy_cell - lasher.ProjectileTypes += lasher_projectile - lasher.ProjectileTypes += lasher_projectile_ap - lasher.FireModes += new FireModeDefinition - lasher.FireModes.head.AmmoTypeIndices += 0 - lasher.FireModes.head.AmmoSlotIndex = 0 - lasher.FireModes.head.Magazine = 35 - lasher.FireModes += new FireModeDefinition - lasher.FireModes(1).AmmoTypeIndices += 0 - lasher.FireModes(1).ProjectileTypeIndices += 1 - lasher.FireModes(1).AmmoSlotIndex = 0 - lasher.FireModes(1).Magazine = 35 - lasher.Tile = InventoryTile.Tile93 - - maelstrom.Name = "maelstrom" - maelstrom.Size = EquipmentSize.Rifle - maelstrom.AmmoTypes += maelstrom_ammo - maelstrom.ProjectileTypes += maelstrom_stream_projectile - maelstrom.ProjectileTypes += maelstrom_grenade_projectile_contact - maelstrom.ProjectileTypes += maelstrom_grenade_projectile - maelstrom.FireModes += new FireModeDefinition - maelstrom.FireModes.head.AmmoTypeIndices += 0 - maelstrom.FireModes.head.AmmoSlotIndex = 0 - maelstrom.FireModes.head.Magazine = 150 - maelstrom.FireModes += new FireModeDefinition - maelstrom.FireModes(1).AmmoTypeIndices += 0 - maelstrom.FireModes(1).ProjectileTypeIndices += 1 - maelstrom.FireModes(1).AmmoSlotIndex = 0 - maelstrom.FireModes(1).Magazine = 150 - maelstrom.FireModes(1).RoundsPerShot = 10 - maelstrom.FireModes += new FireModeDefinition - maelstrom.FireModes(2).AmmoTypeIndices += 0 - maelstrom.FireModes(2).ProjectileTypeIndices += 2 - maelstrom.FireModes(2).AmmoSlotIndex = 0 - maelstrom.FireModes(2).Magazine = 150 - maelstrom.FireModes(2).RoundsPerShot = 10 - maelstrom.Tile = InventoryTile.Tile93 - - phoenix.Name = "phoenix" - phoenix.Size = EquipmentSize.Rifle - phoenix.AmmoTypes += phoenix_missile - phoenix.ProjectileTypes += phoenix_missile_projectile - phoenix.ProjectileTypes += phoenix_missile_guided_projectile - phoenix.FireModes += new FireModeDefinition - phoenix.FireModes.head.AmmoTypeIndices += 0 - phoenix.FireModes.head.AmmoSlotIndex = 0 - phoenix.FireModes.head.Magazine = 3 - phoenix.FireModes += new FireModeDefinition - phoenix.FireModes(1).AmmoTypeIndices += 0 - phoenix.FireModes(1).ProjectileTypeIndices += 1 - phoenix.FireModes(1).AmmoSlotIndex = 0 - phoenix.FireModes(1).Magazine = 3 - phoenix.Tile = InventoryTile.Tile93 - - striker.Name = "striker" - striker.Size = EquipmentSize.Rifle - striker.AmmoTypes += striker_missile_ammo - striker.ProjectileTypes += striker_missile_targeting_projectile - striker.ProjectileTypes += striker_missile_projectile - striker.FireModes += new FireModeDefinition - striker.FireModes.head.AmmoTypeIndices += 0 - striker.FireModes.head.AmmoSlotIndex = 0 - striker.FireModes.head.Magazine = 5 - striker.FireModes += new FireModeDefinition - striker.FireModes(1).AmmoTypeIndices += 0 - striker.FireModes(1).ProjectileTypeIndices += 1 - striker.FireModes(1).AmmoSlotIndex = 0 - striker.FireModes(1).Magazine = 5 - striker.Tile = InventoryTile.Tile93 - - hunterseeker.Name = "hunterseeker" - hunterseeker.Size = EquipmentSize.Rifle - hunterseeker.AmmoTypes += hunter_seeker_missile - hunterseeker.ProjectileTypes += hunter_seeker_missile_projectile - hunterseeker.ProjectileTypes += hunter_seeker_missile_dumbfire - hunterseeker.FireModes += new FireModeDefinition - hunterseeker.FireModes.head.AmmoTypeIndices += 0 - hunterseeker.FireModes.head.AmmoSlotIndex = 0 - hunterseeker.FireModes.head.Magazine = 1 - hunterseeker.FireModes += new FireModeDefinition - hunterseeker.FireModes(1).AmmoTypeIndices += 0 - hunterseeker.FireModes(1).ProjectileTypeIndices += 1 - hunterseeker.FireModes(1).AmmoSlotIndex = 0 - hunterseeker.FireModes(1).Magazine = 1 - hunterseeker.Tile = InventoryTile.Tile93 - - lancer.Name = "lancer" - lancer.Size = EquipmentSize.Rifle - lancer.AmmoTypes += lancer_cartridge - lancer.ProjectileTypes += lancer_projectile - lancer.FireModes += new FireModeDefinition - lancer.FireModes.head.AmmoTypeIndices += 0 - lancer.FireModes.head.AmmoSlotIndex = 0 - lancer.FireModes.head.Magazine = 6 - lancer.Tile = InventoryTile.Tile93 - - rocklet.Name = "rocklet" - rocklet.Size = EquipmentSize.Rifle - rocklet.AmmoTypes += rocket - rocklet.AmmoTypes += frag_cartridge - rocklet.ProjectileTypes += rocket_projectile - rocklet.ProjectileTypes += rocklet_flak_projectile - rocklet.FireModes += new FireModeDefinition - rocklet.FireModes.head.AmmoTypeIndices += 0 - rocklet.FireModes.head.AmmoTypeIndices += 1 - rocklet.FireModes.head.AmmoSlotIndex = 0 - rocklet.FireModes.head.Magazine = 6 - rocklet.FireModes += new FireModeDefinition - rocklet.FireModes(1).AmmoTypeIndices += 0 - rocklet.FireModes(1).AmmoTypeIndices += 1 - rocklet.FireModes(1).AmmoSlotIndex = 0 - rocklet.FireModes(1).Magazine = 6 - rocklet.Tile = InventoryTile.Tile63 - - thumper.Name = "thumper" - thumper.Size = EquipmentSize.Rifle - thumper.AmmoTypes += frag_cartridge - thumper.AmmoTypes += plasma_cartridge - thumper.AmmoTypes += jammer_cartridge - thumper.ProjectileTypes += frag_cartridge_projectile_b - thumper.ProjectileTypes += plasma_cartridge_projectile_b - thumper.ProjectileTypes += jammer_cartridge_projectile_b - thumper.FireModes += new FireModeDefinition - thumper.FireModes.head.AmmoTypeIndices += 0 - thumper.FireModes.head.AmmoTypeIndices += 1 - thumper.FireModes.head.AmmoTypeIndices += 2 - thumper.FireModes.head.AmmoSlotIndex = 0 - thumper.FireModes.head.Magazine = 6 - thumper.FireModes += new FireModeDefinition - thumper.FireModes(1).AmmoTypeIndices += 0 - thumper.FireModes(1).AmmoTypeIndices += 1 - thumper.FireModes(1).AmmoTypeIndices += 2 - thumper.FireModes(1).AmmoSlotIndex = 0 - thumper.FireModes(1).Magazine = 6 - thumper.Tile = InventoryTile.Tile63 - - radiator.Name = "radiator" - radiator.Size = EquipmentSize.Rifle - radiator.AmmoTypes += ancient_ammo_combo - radiator.ProjectileTypes += radiator_grenade_projectile - radiator.ProjectileTypes += radiator_sticky_projectile - radiator.FireModes += new FireModeDefinition - radiator.FireModes.head.AmmoTypeIndices += 0 - radiator.FireModes.head.AmmoSlotIndex = 0 - radiator.FireModes.head.Magazine = 25 - radiator.FireModes += new FireModeDefinition - radiator.FireModes(1).AmmoTypeIndices += 0 - radiator.FireModes(1).ProjectileTypeIndices += 1 - radiator.FireModes(1).AmmoSlotIndex = 0 - radiator.FireModes(1).Magazine = 25 - radiator.Tile = InventoryTile.Tile63 - - heavy_sniper.Name = "heavy_sniper" - heavy_sniper.Size = EquipmentSize.Rifle - heavy_sniper.AmmoTypes += bolt - heavy_sniper.ProjectileTypes += heavy_sniper_projectile - heavy_sniper.FireModes += new FireModeDefinition - heavy_sniper.FireModes.head.AmmoTypeIndices += 0 - heavy_sniper.FireModes.head.AmmoSlotIndex = 0 - heavy_sniper.FireModes.head.Magazine = 10 - heavy_sniper.Tile = InventoryTile.Tile93 - - bolt_driver.Name = "bolt_driver" - bolt_driver.Size = EquipmentSize.Rifle - bolt_driver.AmmoTypes += bolt - bolt_driver.ProjectileTypes += bolt_projectile - bolt_driver.FireModes += new FireModeDefinition - bolt_driver.FireModes.head.AmmoTypeIndices += 0 - bolt_driver.FireModes.head.AmmoSlotIndex = 0 - bolt_driver.FireModes.head.Magazine = 1 - bolt_driver.Tile = InventoryTile.Tile93 - - oicw.Name = "oicw" - oicw.Size = EquipmentSize.Rifle - oicw.AmmoTypes += oicw_ammo - oicw.ProjectileTypes += oicw_projectile - oicw.FireModes += new FireModeDefinition - oicw.FireModes.head.AmmoTypeIndices += 0 - oicw.FireModes.head.AmmoSlotIndex = 0 - oicw.FireModes.head.Magazine = 1 - oicw.FireModes += new FireModeDefinition - oicw.FireModes(1).AmmoTypeIndices += 0 - oicw.FireModes(1).AmmoSlotIndex = 0 - oicw.FireModes(1).Magazine = 1 - oicw.Tile = InventoryTile.Tile93 - - flamethrower.Name = "flamethrower" - flamethrower.Size = EquipmentSize.Rifle - flamethrower.AmmoTypes += flamethrower_ammo - flamethrower.ProjectileTypes += flamethrower_projectile - flamethrower.ProjectileTypes += flamethrower_fireball - flamethrower.FireModes += new FireModeDefinition - flamethrower.FireModes.head.AmmoTypeIndices += 0 - flamethrower.FireModes.head.AmmoSlotIndex = 0 - flamethrower.FireModes.head.Magazine = 100 - flamethrower.FireModes += new FireModeDefinition - flamethrower.FireModes(1).AmmoTypeIndices += 0 - flamethrower.FireModes(1).ProjectileTypeIndices += 1 - flamethrower.FireModes(1).AmmoSlotIndex = 0 - flamethrower.FireModes(1).Magazine = 100 - flamethrower.FireModes(1).RoundsPerShot = 50 - flamethrower.Tile = InventoryTile.Tile93 - - winchester.Name = "winchester" - winchester.Size = EquipmentSize.Rifle - winchester.AmmoTypes += winchester_ammo - winchester.ProjectileTypes += winchester_projectile - winchester.FireModes += new FireModeDefinition - winchester.FireModes.head.AmmoTypeIndices += 0 - winchester.FireModes.head.AmmoSlotIndex = 0 - winchester.FireModes.head.Magazine = 1 - winchester.Tile = InventoryTile.Tile93 - - pellet_gun.Name = "pellet_gun" - pellet_gun.Size = EquipmentSize.Rifle - pellet_gun.AmmoTypes += pellet_gun_ammo - pellet_gun.ProjectileTypes += pellet_gun_projectile - pellet_gun.FireModes += new PelletFireModeDefinition - pellet_gun.FireModes.head.AmmoTypeIndices += 0 - pellet_gun.FireModes.head.AmmoSlotIndex = 0 - pellet_gun.FireModes.head.Magazine = 1 //what is this? - pellet_gun.FireModes.head.Chamber = 8 //1 shell * 8 pellets = 8 - pellet_gun.Tile = InventoryTile.Tile63 - - six_shooter.Name = "six_shooter" - six_shooter.Size = EquipmentSize.Pistol - six_shooter.AmmoTypes += six_shooter_ammo - six_shooter.ProjectileTypes += six_shooter_projectile - six_shooter.FireModes += new FireModeDefinition - six_shooter.FireModes.head.AmmoTypeIndices += 0 - six_shooter.FireModes.head.AmmoSlotIndex = 0 - six_shooter.FireModes.head.Magazine = 6 - six_shooter.Tile = InventoryTile.Tile33 - - dynomite.Name = "dynomite" - dynomite.Size = EquipmentSize.Pistol - dynomite.AmmoTypes += frag_grenade_ammo - dynomite.ProjectileTypes += dynomite_projectile - dynomite.FireModes += new FireModeDefinition - dynomite.FireModes.head.AmmoTypeIndices += 0 - dynomite.FireModes.head.AmmoSlotIndex = 0 - dynomite.FireModes.head.Magazine = 1 - dynomite.Tile = InventoryTile.Tile22 - - trhev_dualcycler.Name = "trhev_dualcycler" - trhev_dualcycler.Descriptor = "trhev_antipersonnel" - trhev_dualcycler.Size = EquipmentSize.Max - trhev_dualcycler.AmmoTypes += dualcycler_ammo - trhev_dualcycler.ProjectileTypes += dualcycler_projectile - trhev_dualcycler.FireModes += new FireModeDefinition - trhev_dualcycler.FireModes.head.AmmoTypeIndices += 0 - trhev_dualcycler.FireModes.head.AmmoSlotIndex = 0 - trhev_dualcycler.FireModes.head.Magazine = 200 - trhev_dualcycler.FireModes += new FireModeDefinition //anchored - trhev_dualcycler.FireModes(1).AmmoTypeIndices += 0 - trhev_dualcycler.FireModes(1).AmmoSlotIndex = 0 - trhev_dualcycler.FireModes(1).Magazine = 200 - trhev_dualcycler.FireModes += new FireModeDefinition //overdrive? - trhev_dualcycler.FireModes(2).AmmoTypeIndices += 0 - trhev_dualcycler.FireModes(2).AmmoSlotIndex = 0 - trhev_dualcycler.FireModes(2).Magazine = 200 - - trhev_pounder.Name = "trhev_pounder" - trhev_pounder.Descriptor = "trhev_antivehicular" - trhev_pounder.Size = EquipmentSize.Max - trhev_pounder.AmmoTypes += pounder_ammo - trhev_pounder.ProjectileTypes += pounder_projectile - trhev_pounder.ProjectileTypes += pounder_projectile_enh - trhev_pounder.FireModes += new FireModeDefinition - trhev_pounder.FireModes.head.AmmoTypeIndices += 0 //explode on contact - trhev_pounder.FireModes.head.AmmoSlotIndex = 0 - trhev_pounder.FireModes.head.Magazine = 30 - trhev_pounder.FireModes += new FireModeDefinition //explode on contact, anchored - trhev_pounder.FireModes(1).AmmoTypeIndices += 0 - trhev_pounder.FireModes(1).AmmoSlotIndex = 0 - trhev_pounder.FireModes(1).Magazine = 30 - trhev_pounder.FireModes += new FireModeDefinition //explode on contact, overdrive? - trhev_pounder.FireModes(2).AmmoTypeIndices += 0 - trhev_pounder.FireModes(2).AmmoSlotIndex = 0 - trhev_pounder.FireModes(2).Magazine = 30 - trhev_pounder.FireModes += new FireModeDefinition //3-second fuse - trhev_pounder.FireModes(3).AmmoTypeIndices += 0 - trhev_pounder.FireModes(3).ProjectileTypeIndices += 1 - trhev_pounder.FireModes(3).AmmoSlotIndex = 0 - trhev_pounder.FireModes(3).Magazine = 30 - trhev_pounder.FireModes += new FireModeDefinition //3-second fuse, anchored - trhev_pounder.FireModes(4).AmmoTypeIndices += 0 - trhev_pounder.FireModes(4).ProjectileTypeIndices += 1 - trhev_pounder.FireModes(4).AmmoSlotIndex = 0 - trhev_pounder.FireModes(4).Magazine = 30 - trhev_pounder.FireModes += new FireModeDefinition //3-second fuse, overdrive? - trhev_pounder.FireModes(5).AmmoTypeIndices += 0 - trhev_pounder.FireModes(5).ProjectileTypeIndices += 1 - trhev_pounder.FireModes(5).AmmoSlotIndex = 0 - trhev_pounder.FireModes(5).Magazine = 30 - - trhev_burster.Name = "trhev_burster" - trhev_burster.Descriptor = "trhev_antiaircraft" - trhev_burster.Size = EquipmentSize.Max - trhev_burster.AmmoTypes += burster_ammo - trhev_burster.ProjectileTypes += burster_projectile - trhev_burster.FireModes += new FireModeDefinition - trhev_burster.FireModes.head.AmmoTypeIndices += 0 - trhev_burster.FireModes.head.AmmoSlotIndex = 0 - trhev_burster.FireModes.head.Magazine = 40 - - nchev_scattercannon.Name = "nchev_scattercannon" - nchev_scattercannon.Descriptor = "nchev_antipersonnel" - nchev_scattercannon.Size = EquipmentSize.Max - nchev_scattercannon.AmmoTypes += scattercannon_ammo - nchev_scattercannon.ProjectileTypes += scattercannon_projectile - nchev_scattercannon.FireModes += new PelletFireModeDefinition - nchev_scattercannon.FireModes.head.AmmoTypeIndices += 0 - nchev_scattercannon.FireModes.head.AmmoSlotIndex = 0 - nchev_scattercannon.FireModes.head.Magazine = 40 - nchev_scattercannon.FireModes.head.Chamber = 10 //40 shells * 10 pellets = 400 - nchev_scattercannon.FireModes += new PelletFireModeDefinition - nchev_scattercannon.FireModes(1).AmmoTypeIndices += 0 - nchev_scattercannon.FireModes(1).AmmoSlotIndex = 0 - nchev_scattercannon.FireModes(1).Magazine = 40 - nchev_scattercannon.FireModes(1).Chamber = 10 //40 shells * 10 pellets = 400 - nchev_scattercannon.FireModes += new PelletFireModeDefinition - nchev_scattercannon.FireModes(2).AmmoTypeIndices += 0 - nchev_scattercannon.FireModes(2).AmmoSlotIndex = 0 - nchev_scattercannon.FireModes(2).Magazine = 40 - nchev_scattercannon.FireModes(2).Chamber = 10 //40 shells * 10 pellets = 400 - - nchev_falcon.Name = "nchev_falcon" - nchev_falcon.Descriptor = "nchev_antivehicular" - nchev_falcon.Size = EquipmentSize.Max - nchev_falcon.AmmoTypes += falcon_ammo - nchev_falcon.ProjectileTypes += falcon_projectile - nchev_falcon.FireModes += new FireModeDefinition - nchev_falcon.FireModes.head.AmmoTypeIndices += 0 - nchev_falcon.FireModes.head.AmmoSlotIndex = 0 - nchev_falcon.FireModes.head.Magazine = 20 - - nchev_sparrow.Name = "nchev_sparrow" - nchev_sparrow.Descriptor = "nchev_antiaircraft" - nchev_sparrow.Size = EquipmentSize.Max - nchev_sparrow.AmmoTypes += sparrow_ammo - nchev_sparrow.ProjectileTypes += sparrow_projectile - nchev_sparrow.FireModes += new FireModeDefinition - nchev_sparrow.FireModes.head.AmmoTypeIndices += 0 - nchev_sparrow.FireModes.head.AmmoSlotIndex = 0 - nchev_sparrow.FireModes.head.Magazine = 12 - - vshev_quasar.Name = "vshev_quasar" - vshev_quasar.Descriptor = "vshev_antipersonnel" - vshev_quasar.Size = EquipmentSize.Max - vshev_quasar.AmmoTypes += quasar_ammo - vshev_quasar.ProjectileTypes += quasar_projectile - vshev_quasar.ProjectileTypes += enhanced_quasar_projectile - vshev_quasar.FireModes += new FireModeDefinition - vshev_quasar.FireModes.head.AmmoTypeIndices += 0 - vshev_quasar.FireModes.head.AmmoSlotIndex = 0 - vshev_quasar.FireModes.head.Magazine = 120 - vshev_quasar.FireModes += new FireModeDefinition - vshev_quasar.FireModes(1).AmmoTypeIndices += 0 - vshev_quasar.FireModes(1).ProjectileTypeIndices += 1 - vshev_quasar.FireModes(1).AmmoSlotIndex = 0 - vshev_quasar.FireModes(1).Magazine = 120 - - vshev_comet.Name = "vshev_comet" - vshev_comet.Descriptor = "vshev_antivehicular" - vshev_comet.Size = EquipmentSize.Max - vshev_comet.AmmoTypes += comet_ammo - vshev_comet.ProjectileTypes += comet_projectile - vshev_comet.FireModes += new FireModeDefinition - vshev_comet.FireModes.head.AmmoTypeIndices += 0 - vshev_comet.FireModes.head.AmmoSlotIndex = 0 - vshev_comet.FireModes.head.Magazine = 10 - - vshev_starfire.Name = "vshev_starfire" - vshev_starfire.Descriptor = "vshev_antiaircraft" - vshev_starfire.Size = EquipmentSize.Max - vshev_starfire.AmmoTypes += starfire_ammo - vshev_starfire.ProjectileTypes += starfire_projectile - vshev_starfire.FireModes += new FireModeDefinition - vshev_starfire.FireModes.head.AmmoTypeIndices += 0 - vshev_starfire.FireModes.head.AmmoSlotIndex = 0 - vshev_starfire.FireModes.head.Magazine = 8 - - medicalapplicator.Name = "medicalapplicator" - medicalapplicator.Size = EquipmentSize.Pistol - medicalapplicator.AmmoTypes += health_canister - medicalapplicator.ProjectileTypes += no_projectile - medicalapplicator.FireModes += new FireModeDefinition - medicalapplicator.FireModes.head.AmmoTypeIndices += 0 - medicalapplicator.FireModes.head.AmmoSlotIndex = 0 - medicalapplicator.FireModes.head.Magazine = 100 - medicalapplicator.FireModes += new FireModeDefinition - medicalapplicator.FireModes(1).AmmoTypeIndices += 0 - medicalapplicator.FireModes(1).AmmoSlotIndex = 0 - medicalapplicator.FireModes(1).Magazine = 100 - medicalapplicator.Tile = InventoryTile.Tile33 - - nano_dispenser.Name = "nano_dispenser" - nano_dispenser.Size = EquipmentSize.Rifle - nano_dispenser.AmmoTypes += armor_canister - nano_dispenser.AmmoTypes += upgrade_canister - nano_dispenser.ProjectileTypes += no_projectile - nano_dispenser.FireModes += new FireModeDefinition - nano_dispenser.FireModes.head.AmmoTypeIndices += 0 - nano_dispenser.FireModes.head.AmmoTypeIndices += 1 - nano_dispenser.FireModes.head.ProjectileTypeIndices += 0 //armor_canister - nano_dispenser.FireModes.head.ProjectileTypeIndices += 0 //upgrade_canister - nano_dispenser.FireModes.head.AmmoSlotIndex = 0 - nano_dispenser.FireModes.head.Magazine = 100 - nano_dispenser.FireModes.head.CustomMagazine = Ammo.upgrade_canister -> 1 - nano_dispenser.FireModes.head.Add.Damage0 = 0 - nano_dispenser.FireModes.head.Add.Damage1 = 20 - nano_dispenser.FireModes.head.Add.Damage2 = 0 - nano_dispenser.FireModes.head.Add.Damage3 = 0 - nano_dispenser.FireModes.head.Add.Damage4 = 20 - nano_dispenser.AddRepairMultiplier(level = 3, value = 2.0f) - nano_dispenser.AddRepairMultiplier(level = 2, value = 1.5f) - nano_dispenser.AddRepairMultiplier(level = 1, value = 1.0f) - nano_dispenser.Tile = InventoryTile.Tile63 - - bank.Name = "bank" - bank.Size = EquipmentSize.Pistol - bank.AmmoTypes += armor_canister - bank.ProjectileTypes += no_projectile - bank.FireModes += new FireModeDefinition - bank.FireModes.head.AmmoTypeIndices += 0 - bank.FireModes.head.AmmoSlotIndex = 0 - bank.FireModes.head.Magazine = 100 - bank.FireModes += new FireModeDefinition - bank.FireModes(1).AmmoTypeIndices += 0 - bank.FireModes(1).AmmoSlotIndex = 0 - bank.FireModes(1).Magazine = 100 - bank.AddRepairMultiplier(level = 3, value = 1.5f) - bank.AddRepairMultiplier(level = 2, value = 1.2f) - bank.AddRepairMultiplier(level = 1, value = 1.0f) - bank.Tile = InventoryTile.Tile33 - - remote_electronics_kit.Name = "remote_electronics_kit" - remote_electronics_kit.Packet = new REKConverter - remote_electronics_kit.Tile = InventoryTile.Tile33 - - boomer_trigger.Name = "boomer_trigger" - boomer_trigger.Packet = new BoomerTriggerConverter - boomer_trigger.Tile = InventoryTile.Tile22 - - trek.Name = "trek" - trek.Size = EquipmentSize.Pistol - trek.AmmoTypes += trek_ammo - trek.ProjectileTypes += trek_projectile - trek.FireModes += new FireModeDefinition - trek.FireModes.head.AmmoTypeIndices += 0 - trek.FireModes.head.AmmoSlotIndex = 0 - trek.FireModes.head.Magazine = 4 - trek.FireModes += new InfiniteFireModeDefinition - trek.FireModes(1).AmmoTypeIndices += 0 - trek.FireModes(1).AmmoSlotIndex = 0 - trek.FireModes(1).Magazine = 1 - trek.Tile = InventoryTile.Tile33 - - flail_targeting_laser.Name = "flail_targeting_laser" - flail_targeting_laser.Packet = new CommandDetonaterConverter - flail_targeting_laser.Tile = InventoryTile.Tile33 - - command_detonater.Name = "command_detonater" - command_detonater.Packet = new CommandDetonaterConverter - command_detonater.Tile = InventoryTile.Tile33 - - ace.Name = "ace" - ace.Size = EquipmentSize.Pistol - ace.Modes += new ConstructionFireMode { - Item(DeployedItem.boomer, Set(Certification.CombatEngineering)) - } - ace.Modes += new ConstructionFireMode { - Item(DeployedItem.he_mine, Set(Certification.CombatEngineering)) - Item(DeployedItem.jammer_mine, Set(Certification.AssaultEngineering)) - } - ace.Modes += new ConstructionFireMode { - Item(DeployedItem.spitfire_turret, Set(Certification.CombatEngineering)) - Item(DeployedItem.spitfire_cloaked, Set(Certification.FortificationEngineering)) - Item(DeployedItem.spitfire_aa, Set(Certification.FortificationEngineering)) - } - ace.Modes += new ConstructionFireMode { - Item(DeployedItem.motionalarmsensor, Set(Certification.CombatEngineering)) - Item(DeployedItem.sensor_shield, Set(Certification.AdvancedHacking, Certification.CombatEngineering)) - } - ace.Tile = InventoryTile.Tile33 - - advanced_ace.Name = "advanced_ace" - advanced_ace.Size = EquipmentSize.Rifle - advanced_ace.Modes += new ConstructionFireMode { - Item(DeployedItem.tank_traps, Set(Certification.FortificationEngineering)) - } - advanced_ace.Modes += new ConstructionFireMode { - Item(DeployedItem.portable_manned_turret, Set(Certification.AssaultEngineering)) - } - advanced_ace.Modes += new ConstructionFireMode { - Item(DeployedItem.deployable_shield_generator, Set(Certification.AssaultEngineering)) - } - advanced_ace.Tile = InventoryTile.Tile93 - - router_telepad.Name = "router_telepad" - router_telepad.Size = EquipmentSize.Pistol - router_telepad.Modes += new ConstructionFireMode - router_telepad.Modes.head.Item(DeployedItem.router_telepad_deployable, Set(Certification.GroundSupport)) - router_telepad.Tile = InventoryTile.Tile33 - router_telepad.Packet = new TelepadConverter - } - - /** - * Initialize `ToolDefinition` globals. - */ - private def init_vehicle_tools(): Unit = { - fury_weapon_systema.Name = "fury_weapon_systema" - fury_weapon_systema.Size = EquipmentSize.VehicleWeapon - fury_weapon_systema.AmmoTypes += hellfire_ammo - fury_weapon_systema.ProjectileTypes += hellfire_projectile - fury_weapon_systema.FireModes += new FireModeDefinition - fury_weapon_systema.FireModes.head.AmmoTypeIndices += 0 - fury_weapon_systema.FireModes.head.AmmoSlotIndex = 0 - fury_weapon_systema.FireModes.head.Magazine = 2 - - quadassault_weapon_system.Name = "quadassault_weapon_system" - quadassault_weapon_system.Size = EquipmentSize.VehicleWeapon - quadassault_weapon_system.AmmoTypes += bullet_12mm - quadassault_weapon_system.ProjectileTypes += bullet_12mm_projectile - quadassault_weapon_system.FireModes += new FireModeDefinition - quadassault_weapon_system.FireModes.head.AmmoTypeIndices += 0 - quadassault_weapon_system.FireModes.head.AmmoSlotIndex = 0 - quadassault_weapon_system.FireModes.head.Magazine = 150 - - scythe.Name = "scythe" - scythe.Size = EquipmentSize.VehicleWeapon - scythe.AmmoTypes += ancient_ammo_vehicle - scythe.AmmoTypes += ancient_ammo_vehicle - scythe.ProjectileTypes += scythe_projectile - scythe.FireModes += new FireModeDefinition - scythe.FireModes.head.AmmoTypeIndices += 0 - scythe.FireModes.head.AmmoSlotIndex = 0 - scythe.FireModes.head.Magazine = 250 - scythe.FireModes += new FireModeDefinition - scythe.FireModes(1).AmmoTypeIndices += 0 - scythe.FireModes(1).ProjectileTypeIndices += 0 - scythe.FireModes(1).AmmoSlotIndex = - 1 //note: the scythe has two magazines using a single pool; however, it can not ammo-switch or mode-switch - scythe.FireModes(1).Magazine = 250 - - chaingun_p.Name = "chaingun_p" - chaingun_p.Size = EquipmentSize.VehicleWeapon - chaingun_p.AmmoTypes += bullet_12mm - chaingun_p.ProjectileTypes += bullet_12mm_projectile - chaingun_p.FireModes += new FireModeDefinition - chaingun_p.FireModes.head.AmmoTypeIndices += 0 - chaingun_p.FireModes.head.AmmoSlotIndex = 0 - chaingun_p.FireModes.head.Magazine = 150 - - skyguard_weapon_system.Name = "skyguard_weapon_system" - skyguard_weapon_system.Size = EquipmentSize.VehicleWeapon - skyguard_weapon_system.AmmoTypes += skyguard_flak_cannon_ammo - skyguard_weapon_system.AmmoTypes += bullet_12mm - skyguard_weapon_system.ProjectileTypes += skyguard_flak_cannon_projectile - skyguard_weapon_system.ProjectileTypes += bullet_12mm_projectile - skyguard_weapon_system.FireModes += new FireModeDefinition - skyguard_weapon_system.FireModes.head.AmmoTypeIndices += 0 - skyguard_weapon_system.FireModes.head.AmmoSlotIndex = 0 - skyguard_weapon_system.FireModes.head.Magazine = 40 - skyguard_weapon_system.FireModes += new FireModeDefinition - skyguard_weapon_system.FireModes(1).AmmoTypeIndices += 1 - skyguard_weapon_system.FireModes(1).AmmoSlotIndex = 1 - skyguard_weapon_system.FireModes(1).Magazine = 250 - - grenade_launcher_marauder.Name = "grenade_launcher_marauder" - grenade_launcher_marauder.Size = EquipmentSize.VehicleWeapon - grenade_launcher_marauder.AmmoTypes += heavy_grenade_mortar - grenade_launcher_marauder.ProjectileTypes += heavy_grenade_projectile - grenade_launcher_marauder.FireModes += new FireModeDefinition - grenade_launcher_marauder.FireModes.head.AmmoTypeIndices += 0 - grenade_launcher_marauder.FireModes.head.AmmoSlotIndex = 0 - grenade_launcher_marauder.FireModes.head.Magazine = 50 - - advanced_missile_launcher_t.Name = "advanced_missile_launcher_t" - advanced_missile_launcher_t.Size = EquipmentSize.VehicleWeapon - advanced_missile_launcher_t.AmmoTypes += firebird_missile - advanced_missile_launcher_t.ProjectileTypes += firebird_missile_projectile - advanced_missile_launcher_t.FireModes += new FireModeDefinition - advanced_missile_launcher_t.FireModes.head.AmmoTypeIndices += 0 - advanced_missile_launcher_t.FireModes.head.AmmoSlotIndex = 0 - advanced_missile_launcher_t.FireModes.head.Magazine = 40 - - flux_cannon_thresher.Name = "flux_cannon_thresher" - flux_cannon_thresher.Size = EquipmentSize.VehicleWeapon - flux_cannon_thresher.AmmoTypes += flux_cannon_thresher_battery - flux_cannon_thresher.ProjectileTypes += flux_cannon_thresher_projectile - flux_cannon_thresher.FireModes += new FireModeDefinition - flux_cannon_thresher.FireModes.head.AmmoTypeIndices += 0 - flux_cannon_thresher.FireModes.head.AmmoSlotIndex = 0 - flux_cannon_thresher.FireModes.head.Magazine = 100 - - mediumtransport_weapon_systemA.Name = "mediumtransport_weapon_systemA" - mediumtransport_weapon_systemA.Size = EquipmentSize.VehicleWeapon - mediumtransport_weapon_systemA.AmmoTypes += bullet_20mm - mediumtransport_weapon_systemA.ProjectileTypes += bullet_20mm_projectile - mediumtransport_weapon_systemA.FireModes += new FireModeDefinition - mediumtransport_weapon_systemA.FireModes.head.AmmoTypeIndices += 0 - mediumtransport_weapon_systemA.FireModes.head.AmmoSlotIndex = 0 - mediumtransport_weapon_systemA.FireModes.head.Magazine = 150 - - mediumtransport_weapon_systemB.Name = "mediumtransport_weapon_systemB" - mediumtransport_weapon_systemB.Size = EquipmentSize.VehicleWeapon - mediumtransport_weapon_systemB.AmmoTypes += bullet_20mm - mediumtransport_weapon_systemB.ProjectileTypes += bullet_20mm_projectile - mediumtransport_weapon_systemB.FireModes += new FireModeDefinition - mediumtransport_weapon_systemB.FireModes.head.AmmoTypeIndices += 0 - mediumtransport_weapon_systemB.FireModes.head.AmmoSlotIndex = 0 - mediumtransport_weapon_systemB.FireModes.head.Magazine = 150 - - battlewagon_weapon_systema.Name = "battlewagon_weapon_systema" - battlewagon_weapon_systema.Size = EquipmentSize.VehicleWeapon - battlewagon_weapon_systema.AmmoTypes += bullet_15mm - battlewagon_weapon_systema.ProjectileTypes += bullet_15mm_projectile - battlewagon_weapon_systema.FireModes += new FireModeDefinition - battlewagon_weapon_systema.FireModes.head.AmmoTypeIndices += 0 - battlewagon_weapon_systema.FireModes.head.AmmoSlotIndex = 0 - battlewagon_weapon_systema.FireModes.head.Magazine = 240 - - battlewagon_weapon_systemb.Name = "battlewagon_weapon_systemb" - battlewagon_weapon_systemb.Size = EquipmentSize.VehicleWeapon - battlewagon_weapon_systemb.AmmoTypes += bullet_15mm - battlewagon_weapon_systemb.ProjectileTypes += bullet_15mm_projectile - battlewagon_weapon_systemb.FireModes += new FireModeDefinition - battlewagon_weapon_systemb.FireModes.head.AmmoTypeIndices += 0 - battlewagon_weapon_systemb.FireModes.head.AmmoSlotIndex = 0 - battlewagon_weapon_systemb.FireModes.head.Magazine = 240 - - battlewagon_weapon_systemc.Name = "battlewagon_weapon_systemc" - battlewagon_weapon_systemc.Size = EquipmentSize.VehicleWeapon - battlewagon_weapon_systemc.AmmoTypes += bullet_15mm - battlewagon_weapon_systemc.ProjectileTypes += bullet_15mm_projectile - battlewagon_weapon_systemc.FireModes += new FireModeDefinition - battlewagon_weapon_systemc.FireModes.head.AmmoTypeIndices += 0 - battlewagon_weapon_systemc.FireModes.head.AmmoSlotIndex = 0 - battlewagon_weapon_systemc.FireModes.head.Magazine = 240 - - battlewagon_weapon_systemd.Name = "battlewagon_weapon_systemd" - battlewagon_weapon_systemd.Size = EquipmentSize.VehicleWeapon - battlewagon_weapon_systemd.AmmoTypes += bullet_15mm - battlewagon_weapon_systemd.ProjectileTypes += bullet_15mm_projectile - battlewagon_weapon_systemd.FireModes += new FireModeDefinition - battlewagon_weapon_systemd.FireModes.head.AmmoTypeIndices += 0 - battlewagon_weapon_systemd.FireModes.head.AmmoSlotIndex = 0 - battlewagon_weapon_systemd.FireModes.head.Magazine = 240 - - thunderer_weapon_systema.Name = "thunderer_weapon_systema" - thunderer_weapon_systema.Size = EquipmentSize.VehicleWeapon - thunderer_weapon_systema.AmmoTypes += gauss_cannon_ammo - thunderer_weapon_systema.ProjectileTypes += gauss_cannon_projectile - thunderer_weapon_systema.FireModes += new FireModeDefinition - thunderer_weapon_systema.FireModes.head.AmmoTypeIndices += 0 - thunderer_weapon_systema.FireModes.head.AmmoSlotIndex = 0 - thunderer_weapon_systema.FireModes.head.Magazine = 15 - - thunderer_weapon_systemb.Name = "thunderer_weapon_systemb" - thunderer_weapon_systemb.Size = EquipmentSize.VehicleWeapon - thunderer_weapon_systemb.AmmoTypes += gauss_cannon_ammo - thunderer_weapon_systemb.ProjectileTypes += gauss_cannon_projectile - thunderer_weapon_systemb.FireModes += new FireModeDefinition - thunderer_weapon_systemb.FireModes.head.AmmoTypeIndices += 0 - thunderer_weapon_systemb.FireModes.head.AmmoSlotIndex = 0 - thunderer_weapon_systemb.FireModes.head.Magazine = 15 - - aurora_weapon_systema.Name = "aurora_weapon_systema" - aurora_weapon_systema.Size = EquipmentSize.VehicleWeapon - aurora_weapon_systema.AmmoTypes += fluxpod_ammo - aurora_weapon_systema.ProjectileTypes += fluxpod_projectile - aurora_weapon_systema.FireModes += new FireModeDefinition - aurora_weapon_systema.FireModes.head.AmmoTypeIndices += 0 - aurora_weapon_systema.FireModes.head.AmmoSlotIndex = 0 - aurora_weapon_systema.FireModes.head.Magazine = 12 - aurora_weapon_systema.FireModes += new FireModeDefinition - aurora_weapon_systema.FireModes(1).AmmoTypeIndices += 0 - aurora_weapon_systema.FireModes(1).AmmoSlotIndex = 0 - aurora_weapon_systema.FireModes(1).Magazine = 12 - - aurora_weapon_systemb.Name = "aurora_weapon_systemb" - aurora_weapon_systemb.Size = EquipmentSize.VehicleWeapon - aurora_weapon_systemb.AmmoTypes += fluxpod_ammo - aurora_weapon_systemb.ProjectileTypes += fluxpod_projectile - aurora_weapon_systemb.FireModes += new FireModeDefinition - aurora_weapon_systemb.FireModes.head.AmmoTypeIndices += 0 - aurora_weapon_systemb.FireModes.head.AmmoSlotIndex = 0 - aurora_weapon_systemb.FireModes.head.Magazine = 12 - aurora_weapon_systemb.FireModes += new FireModeDefinition - aurora_weapon_systemb.FireModes(1).AmmoTypeIndices += 0 - aurora_weapon_systemb.FireModes(1).AmmoSlotIndex = 0 - aurora_weapon_systemb.FireModes(1).Magazine = 12 - - apc_weapon_systema.Name = "apc_weapon_systema" - apc_weapon_systema.Size = EquipmentSize.VehicleWeapon - apc_weapon_systema.AmmoTypes += bullet_75mm - apc_weapon_systema.ProjectileTypes += bullet_75mm_apc_projectile - apc_weapon_systema.FireModes += new FireModeDefinition - apc_weapon_systema.FireModes.head.AmmoTypeIndices += 0 - apc_weapon_systema.FireModes.head.AmmoSlotIndex = 0 - apc_weapon_systema.FireModes.head.Magazine = 50 - - apc_weapon_systemb.Name = "apc_weapon_systemb" - apc_weapon_systemb.Size = EquipmentSize.VehicleWeapon - apc_weapon_systemb.AmmoTypes += bullet_75mm - apc_weapon_systemb.ProjectileTypes += bullet_75mm_apc_projectile - apc_weapon_systemb.FireModes += new FireModeDefinition - apc_weapon_systemb.FireModes.head.AmmoTypeIndices += 0 - apc_weapon_systemb.FireModes.head.AmmoSlotIndex = 0 - apc_weapon_systemb.FireModes.head.Magazine = 50 - - apc_ballgun_r.Name = "apc_ballgun_r" - apc_ballgun_r.Size = EquipmentSize.VehicleWeapon - apc_ballgun_r.AmmoTypes += bullet_12mm - apc_ballgun_r.ProjectileTypes += bullet_12mm_projectile - apc_ballgun_r.FireModes += new FireModeDefinition - apc_ballgun_r.FireModes.head.AmmoTypeIndices += 0 - apc_ballgun_r.FireModes.head.AmmoSlotIndex = 0 - apc_ballgun_r.FireModes.head.Magazine = 150 - - apc_ballgun_l.Name = "apc_ballgun_l" - apc_ballgun_l.Size = EquipmentSize.VehicleWeapon - apc_ballgun_l.AmmoTypes += bullet_12mm - apc_ballgun_l.ProjectileTypes += bullet_12mm_projectile - apc_ballgun_l.FireModes += new FireModeDefinition - apc_ballgun_l.FireModes.head.AmmoTypeIndices += 0 - apc_ballgun_l.FireModes.head.AmmoSlotIndex = 0 - apc_ballgun_l.FireModes.head.Magazine = 150 - - apc_weapon_systemc_tr.Name = "apc_weapon_systemc_tr" - apc_weapon_systemc_tr.Size = EquipmentSize.VehicleWeapon - apc_weapon_systemc_tr.AmmoTypes += bullet_15mm - apc_weapon_systemc_tr.ProjectileTypes += bullet_15mm_apc_projectile - apc_weapon_systemc_tr.FireModes += new FireModeDefinition - apc_weapon_systemc_tr.FireModes.head.AmmoTypeIndices += 0 - apc_weapon_systemc_tr.FireModes.head.AmmoSlotIndex = 0 - apc_weapon_systemc_tr.FireModes.head.Magazine = 150 - - apc_weapon_systemd_tr.Name = "apc_weapon_systemd_tr" - apc_weapon_systemd_tr.Size = EquipmentSize.VehicleWeapon - apc_weapon_systemd_tr.AmmoTypes += bullet_15mm - apc_weapon_systemd_tr.ProjectileTypes += bullet_15mm_apc_projectile - apc_weapon_systemd_tr.FireModes += new FireModeDefinition - apc_weapon_systemd_tr.FireModes.head.AmmoTypeIndices += 0 - apc_weapon_systemd_tr.FireModes.head.AmmoSlotIndex = 0 - apc_weapon_systemd_tr.FireModes.head.Magazine = 150 - - apc_weapon_systemc_nc.Name = "apc_weapon_systemc_nc" - apc_weapon_systemc_nc.Size = EquipmentSize.VehicleWeapon - apc_weapon_systemc_nc.AmmoTypes += bullet_20mm - apc_weapon_systemc_nc.ProjectileTypes += bullet_20mm_apc_projectile - apc_weapon_systemc_nc.FireModes += new FireModeDefinition - apc_weapon_systemc_nc.FireModes.head.AmmoTypeIndices += 0 - apc_weapon_systemc_nc.FireModes.head.AmmoSlotIndex = 0 - apc_weapon_systemc_nc.FireModes.head.Magazine = 150 - - apc_weapon_systemd_nc.Name = "apc_weapon_systemd_nc" - apc_weapon_systemd_nc.Size = EquipmentSize.VehicleWeapon - apc_weapon_systemd_nc.AmmoTypes += bullet_20mm - apc_weapon_systemd_nc.ProjectileTypes += bullet_20mm_apc_projectile - apc_weapon_systemd_nc.FireModes += new FireModeDefinition - apc_weapon_systemd_nc.FireModes.head.AmmoTypeIndices += 0 - apc_weapon_systemd_nc.FireModes.head.AmmoSlotIndex = 0 - apc_weapon_systemd_nc.FireModes.head.Magazine = 150 - - apc_weapon_systemc_vs.Name = "apc_weapon_systemc_vs" - apc_weapon_systemc_vs.Size = EquipmentSize.VehicleWeapon - apc_weapon_systemc_vs.AmmoTypes += flux_cannon_thresher_battery - apc_weapon_systemc_vs.ProjectileTypes += flux_cannon_apc_projectile - apc_weapon_systemc_vs.FireModes += new FireModeDefinition - apc_weapon_systemc_vs.FireModes.head.AmmoTypeIndices += 0 - apc_weapon_systemc_vs.FireModes.head.AmmoSlotIndex = 0 - apc_weapon_systemc_vs.FireModes.head.Magazine = 100 - - apc_weapon_systemd_vs.Name = "apc_weapon_systemd_vs" - apc_weapon_systemd_vs.Size = EquipmentSize.VehicleWeapon - apc_weapon_systemd_vs.AmmoTypes += flux_cannon_thresher_battery - apc_weapon_systemd_vs.ProjectileTypes += flux_cannon_apc_projectile - apc_weapon_systemd_vs.FireModes += new FireModeDefinition - apc_weapon_systemd_vs.FireModes.head.AmmoTypeIndices += 0 - apc_weapon_systemd_vs.FireModes.head.AmmoSlotIndex = 0 - apc_weapon_systemd_vs.FireModes.head.Magazine = 100 - - lightning_weapon_system.Name = "lightning_weapon_system" - lightning_weapon_system.Size = EquipmentSize.VehicleWeapon - lightning_weapon_system.AmmoTypes += bullet_75mm - lightning_weapon_system.AmmoTypes += bullet_12mm - lightning_weapon_system.ProjectileTypes += bullet_75mm_projectile - lightning_weapon_system.ProjectileTypes += bullet_12mm_projectile - lightning_weapon_system.FireModes += new FireModeDefinition - lightning_weapon_system.FireModes.head.AmmoTypeIndices += 0 - lightning_weapon_system.FireModes.head.AmmoSlotIndex = 0 - lightning_weapon_system.FireModes.head.Magazine = 20 - lightning_weapon_system.FireModes += new FireModeDefinition - lightning_weapon_system.FireModes(1).AmmoTypeIndices += 1 - lightning_weapon_system.FireModes(1).AmmoSlotIndex = 1 - lightning_weapon_system.FireModes(1).Magazine = 150 - - prowler_weapon_systemA.Name = "prowler_weapon_systemA" - prowler_weapon_systemA.Size = EquipmentSize.VehicleWeapon - prowler_weapon_systemA.AmmoTypes += bullet_105mm - prowler_weapon_systemA.ProjectileTypes += bullet_105mm_projectile - prowler_weapon_systemA.FireModes += new FireModeDefinition - prowler_weapon_systemA.FireModes.head.AmmoTypeIndices += 0 - prowler_weapon_systemA.FireModes.head.AmmoSlotIndex = 0 - prowler_weapon_systemA.FireModes.head.Magazine = 20 - - prowler_weapon_systemB.Name = "prowler_weapon_systemB" - prowler_weapon_systemB.Size = EquipmentSize.VehicleWeapon - prowler_weapon_systemB.AmmoTypes += bullet_15mm - prowler_weapon_systemB.ProjectileTypes += bullet_15mm_projectile - prowler_weapon_systemB.FireModes += new FireModeDefinition - prowler_weapon_systemB.FireModes.head.AmmoTypeIndices += 0 - prowler_weapon_systemB.FireModes.head.AmmoSlotIndex = 0 - prowler_weapon_systemB.FireModes.head.Magazine = 240 - - vanguard_weapon_system.Name = "vanguard_weapon_system" - vanguard_weapon_system.Size = EquipmentSize.VehicleWeapon - vanguard_weapon_system.AmmoTypes += bullet_150mm - vanguard_weapon_system.AmmoTypes += bullet_20mm - vanguard_weapon_system.ProjectileTypes += bullet_150mm_projectile - vanguard_weapon_system.ProjectileTypes += bullet_20mm_projectile - vanguard_weapon_system.FireModes += new FireModeDefinition - vanguard_weapon_system.FireModes.head.AmmoTypeIndices += 0 - vanguard_weapon_system.FireModes.head.AmmoSlotIndex = 0 - vanguard_weapon_system.FireModes.head.Magazine = 10 - vanguard_weapon_system.FireModes += new FireModeDefinition - vanguard_weapon_system.FireModes(1).AmmoTypeIndices += 1 - vanguard_weapon_system.FireModes(1).AmmoSlotIndex = 1 - vanguard_weapon_system.FireModes(1).Magazine = 200 - - particle_beam_magrider.Name = "particle_beam_magrider" - particle_beam_magrider.Size = EquipmentSize.VehicleWeapon - particle_beam_magrider.AmmoTypes += pulse_battery - particle_beam_magrider.ProjectileTypes += ppa_projectile - particle_beam_magrider.FireModes += new FireModeDefinition - particle_beam_magrider.FireModes.head.AmmoTypeIndices += 0 - particle_beam_magrider.FireModes.head.AmmoSlotIndex = 0 - particle_beam_magrider.FireModes.head.Magazine = 150 - - heavy_rail_beam_magrider.Name = "heavy_rail_beam_magrider" - heavy_rail_beam_magrider.Size = EquipmentSize.VehicleWeapon - heavy_rail_beam_magrider.AmmoTypes += heavy_rail_beam_battery - heavy_rail_beam_magrider.ProjectileTypes += heavy_rail_beam_projectile - heavy_rail_beam_magrider.FireModes += new FireModeDefinition - heavy_rail_beam_magrider.FireModes.head.AmmoTypeIndices += 0 - heavy_rail_beam_magrider.FireModes.head.AmmoSlotIndex = 0 - heavy_rail_beam_magrider.FireModes.head.Magazine = 25 - - flail_weapon.Name = "flail_weapon" - flail_weapon.Size = EquipmentSize.VehicleWeapon - flail_weapon.AmmoTypes += ancient_ammo_vehicle - flail_weapon.ProjectileTypes += flail_projectile - flail_weapon.FireModes += new FireModeDefinition - flail_weapon.FireModes.head.AmmoTypeIndices += 0 - flail_weapon.FireModes.head.AmmoSlotIndex = 0 - flail_weapon.FireModes.head.Magazine = 100 - - rotarychaingun_mosquito.Name = "rotarychaingun_mosquito" - rotarychaingun_mosquito.Size = EquipmentSize.VehicleWeapon - rotarychaingun_mosquito.AmmoTypes += bullet_12mm - rotarychaingun_mosquito.ProjectileTypes += bullet_12mm_projectile - rotarychaingun_mosquito.FireModes += new FireModeDefinition - rotarychaingun_mosquito.FireModes.head.AmmoTypeIndices += 0 - rotarychaingun_mosquito.FireModes.head.AmmoSlotIndex = 0 - rotarychaingun_mosquito.FireModes.head.Magazine = 150 - - lightgunship_weapon_system.Name = "lightgunship_weapon_system" - lightgunship_weapon_system.Size = EquipmentSize.VehicleWeapon - lightgunship_weapon_system.AmmoTypes += bullet_20mm - lightgunship_weapon_system.AmmoTypes += reaver_rocket - lightgunship_weapon_system.ProjectileTypes += bullet_20mm_projectile - lightgunship_weapon_system.ProjectileTypes += reaver_rocket_projectile - lightgunship_weapon_system.FireModes += new FireModeDefinition - lightgunship_weapon_system.FireModes.head.AmmoTypeIndices += 0 - lightgunship_weapon_system.FireModes.head.AmmoSlotIndex = 0 - lightgunship_weapon_system.FireModes.head.Magazine = 245 - lightgunship_weapon_system.FireModes += new FireModeDefinition - lightgunship_weapon_system.FireModes(1).AmmoTypeIndices += 1 - lightgunship_weapon_system.FireModes(1).AmmoSlotIndex = 1 - lightgunship_weapon_system.FireModes(1).Magazine = 16 - - wasp_weapon_system.Name = "wasp_weapon_system" - wasp_weapon_system.Size = EquipmentSize.VehicleWeapon - wasp_weapon_system.AmmoTypes += wasp_gun_ammo - wasp_weapon_system.AmmoTypes += wasp_rocket_ammo - wasp_weapon_system.ProjectileTypes += wasp_gun_projectile - wasp_weapon_system.ProjectileTypes += wasp_rocket_projectile - wasp_weapon_system.FireModes += new FireModeDefinition - wasp_weapon_system.FireModes.head.AmmoTypeIndices += 0 - wasp_weapon_system.FireModes.head.AmmoSlotIndex = 0 - wasp_weapon_system.FireModes.head.Magazine = 30 - wasp_weapon_system.FireModes += new FireModeDefinition - wasp_weapon_system.FireModes(1).AmmoTypeIndices += 1 - wasp_weapon_system.FireModes(1).AmmoSlotIndex = 1 - wasp_weapon_system.FireModes(1).Magazine = 2 - - liberator_weapon_system.Name = "liberator_weapon_system" - liberator_weapon_system.Size = EquipmentSize.VehicleWeapon - liberator_weapon_system.AmmoTypes += bullet_35mm - liberator_weapon_system.ProjectileTypes += bullet_35mm_projectile - liberator_weapon_system.FireModes += new FireModeDefinition - liberator_weapon_system.FireModes.head.AmmoTypeIndices += 0 - liberator_weapon_system.FireModes.head.AmmoSlotIndex = 0 - liberator_weapon_system.FireModes.head.Magazine = 100 - - liberator_bomb_bay.Name = "liberator_bomb_bay" - liberator_bomb_bay.Size = EquipmentSize.VehicleWeapon - liberator_bomb_bay.AmmoTypes += liberator_bomb - liberator_bomb_bay.ProjectileTypes += liberator_bomb_projectile - liberator_bomb_bay.ProjectileTypes += liberator_bomb_cluster_projectile - liberator_bomb_bay.FireModes += new FireModeDefinition - liberator_bomb_bay.FireModes.head.AmmoTypeIndices += 0 - liberator_bomb_bay.FireModes.head.AmmoSlotIndex = 0 - liberator_bomb_bay.FireModes.head.Magazine = 10 - liberator_bomb_bay.FireModes += new FireModeDefinition - liberator_bomb_bay.FireModes(1).AmmoTypeIndices += 0 - liberator_bomb_bay.FireModes(1).ProjectileTypeIndices += 1 - liberator_bomb_bay.FireModes(1).AmmoSlotIndex = 0 - liberator_bomb_bay.FireModes(1).Magazine = 10 - - liberator_25mm_cannon.Name = "liberator_25mm_cannon" - liberator_25mm_cannon.Size = EquipmentSize.VehicleWeapon - liberator_25mm_cannon.AmmoTypes += bullet_25mm - liberator_25mm_cannon.ProjectileTypes += bullet_25mm_projectile - liberator_25mm_cannon.FireModes += new FireModeDefinition - liberator_25mm_cannon.FireModes.head.AmmoTypeIndices += 0 - liberator_25mm_cannon.FireModes.head.AmmoSlotIndex = 0 - liberator_25mm_cannon.FireModes.head.Magazine = 150 - - vulture_nose_weapon_system.Name = "vulture_nose_weapon_system" - vulture_nose_weapon_system.Size = EquipmentSize.VehicleWeapon - vulture_nose_weapon_system.AmmoTypes += bullet_35mm - vulture_nose_weapon_system.ProjectileTypes += vulture_nose_bullet_projectile - vulture_nose_weapon_system.FireModes += new FireModeDefinition - vulture_nose_weapon_system.FireModes.head.AmmoTypeIndices += 0 - vulture_nose_weapon_system.FireModes.head.AmmoSlotIndex = 0 - vulture_nose_weapon_system.FireModes.head.Magazine = 75 - - vulture_bomb_bay.Name = "vulture_bomb_bay" - vulture_bomb_bay.Size = EquipmentSize.VehicleWeapon - vulture_bomb_bay.AmmoTypes += liberator_bomb - vulture_bomb_bay.ProjectileTypes += vulture_bomb_projectile - vulture_bomb_bay.FireModes += new FireModeDefinition - vulture_bomb_bay.FireModes.head.AmmoTypeIndices += 0 - vulture_bomb_bay.FireModes.head.AmmoSlotIndex = 0 - vulture_bomb_bay.FireModes.head.Magazine = 10 - - vulture_tail_cannon.Name = "vulture_tail_cannon" - vulture_tail_cannon.Size = EquipmentSize.VehicleWeapon - vulture_tail_cannon.AmmoTypes += bullet_25mm - vulture_tail_cannon.ProjectileTypes += vulture_tail_bullet_projectile - vulture_tail_cannon.FireModes += new FireModeDefinition - vulture_tail_cannon.FireModes.head.AmmoTypeIndices += 0 - vulture_tail_cannon.FireModes.head.AmmoSlotIndex = 0 - vulture_tail_cannon.FireModes.head.Magazine = 100 - - cannon_dropship_20mm.Name = "cannon_dropship_20mm" - cannon_dropship_20mm.Size = EquipmentSize.VehicleWeapon - cannon_dropship_20mm.AmmoTypes += bullet_20mm - cannon_dropship_20mm.ProjectileTypes += bullet_20mm_projectile - cannon_dropship_20mm.FireModes += new FireModeDefinition - cannon_dropship_20mm.FireModes.head.AmmoTypeIndices += 0 - cannon_dropship_20mm.FireModes.head.AmmoSlotIndex = 0 - cannon_dropship_20mm.FireModes.head.Magazine = 250 - - dropship_rear_turret.Name = "dropship_rear_turret" - dropship_rear_turret.Size = EquipmentSize.VehicleWeapon - dropship_rear_turret.AmmoTypes += bullet_20mm - dropship_rear_turret.ProjectileTypes += bullet_20mm_projectile - dropship_rear_turret.FireModes += new FireModeDefinition - dropship_rear_turret.FireModes.head.AmmoTypeIndices += 0 - dropship_rear_turret.FireModes.head.AmmoSlotIndex = 0 - dropship_rear_turret.FireModes.head.Magazine = 250 - - galaxy_gunship_cannon.Name = "galaxy_gunship_cannon" - galaxy_gunship_cannon.Size = EquipmentSize.VehicleWeapon - galaxy_gunship_cannon.AmmoTypes += heavy_grenade_mortar - galaxy_gunship_cannon.ProjectileTypes += heavy_grenade_projectile - galaxy_gunship_cannon.FireModes += new FireModeDefinition - galaxy_gunship_cannon.FireModes.head.AmmoTypeIndices += 0 - galaxy_gunship_cannon.FireModes.head.AmmoSlotIndex = 0 - galaxy_gunship_cannon.FireModes.head.Magazine = 50 - galaxy_gunship_cannon.FireModes.head.Add.Damage1 = 50 - galaxy_gunship_cannon.FireModes.head.Add.Damage2 = 50 - galaxy_gunship_cannon.FireModes.head.Add.Damage3 = 10 - galaxy_gunship_cannon.FireModes.head.Add.Damage4 = 50 - - galaxy_gunship_tailgun.Name = "galaxy_gunship_tailgun" - galaxy_gunship_tailgun.Size = EquipmentSize.VehicleWeapon - galaxy_gunship_tailgun.AmmoTypes += bullet_35mm - galaxy_gunship_tailgun.ProjectileTypes += galaxy_gunship_gun_projectile - galaxy_gunship_tailgun.FireModes += new FireModeDefinition - galaxy_gunship_tailgun.FireModes.head.AmmoTypeIndices += 0 - galaxy_gunship_tailgun.FireModes.head.AmmoSlotIndex = 0 - galaxy_gunship_tailgun.FireModes.head.Magazine = 200 - - galaxy_gunship_gun.Name = "galaxy_gunship_gun" - galaxy_gunship_gun.Size = EquipmentSize.VehicleWeapon - galaxy_gunship_gun.AmmoTypes += bullet_35mm - galaxy_gunship_gun.ProjectileTypes += galaxy_gunship_gun_projectile - galaxy_gunship_gun.FireModes += new FireModeDefinition - galaxy_gunship_gun.FireModes.head.AmmoTypeIndices += 0 - galaxy_gunship_gun.FireModes.head.AmmoSlotIndex = 0 - galaxy_gunship_gun.FireModes.head.Magazine = 200 - - phalanx_sgl_hevgatcan.Name = "phalanx_sgl_hevgatcan" - phalanx_sgl_hevgatcan.Size = EquipmentSize.BaseTurretWeapon - phalanx_sgl_hevgatcan.AmmoTypes += phalanx_ammo - phalanx_sgl_hevgatcan.ProjectileTypes += phalanx_projectile - phalanx_sgl_hevgatcan.FireModes += new InfiniteFireModeDefinition - phalanx_sgl_hevgatcan.FireModes.head.AmmoTypeIndices += 0 - phalanx_sgl_hevgatcan.FireModes.head.AmmoSlotIndex = 0 - phalanx_sgl_hevgatcan.FireModes.head.Magazine = 4000 - - phalanx_avcombo.Name = "phalanx_avcombo" - phalanx_avcombo.Size = EquipmentSize.BaseTurretWeapon - phalanx_avcombo.AmmoTypes += phalanx_ammo - phalanx_avcombo.ProjectileTypes += phalanx_projectile - phalanx_avcombo.ProjectileTypes += phalanx_av_projectile - phalanx_avcombo.FireModes += new InfiniteFireModeDefinition - phalanx_avcombo.FireModes.head.AmmoTypeIndices += 0 - phalanx_avcombo.FireModes.head.AmmoSlotIndex = 0 - phalanx_avcombo.FireModes.head.Magazine = 4000 - phalanx_avcombo.FireModes += new InfiniteFireModeDefinition - phalanx_avcombo.FireModes(1).AmmoTypeIndices += 0 - phalanx_avcombo.FireModes(1).ProjectileTypeIndices += 1 - phalanx_avcombo.FireModes(1).AmmoSlotIndex = 0 - phalanx_avcombo.FireModes(1).Magazine = 4000 - - phalanx_flakcombo.Name = "phalanx_flakcombo" - phalanx_flakcombo.Size = EquipmentSize.BaseTurretWeapon - phalanx_flakcombo.AmmoTypes += phalanx_ammo - phalanx_flakcombo.ProjectileTypes += phalanx_projectile - phalanx_flakcombo.ProjectileTypes += phalanx_flak_projectile - phalanx_flakcombo.FireModes += new InfiniteFireModeDefinition - phalanx_flakcombo.FireModes.head.AmmoTypeIndices += 0 - phalanx_flakcombo.FireModes.head.AmmoSlotIndex = 0 - phalanx_flakcombo.FireModes.head.Magazine = 4000 - phalanx_flakcombo.FireModes += new InfiniteFireModeDefinition - phalanx_flakcombo.FireModes(1).AmmoTypeIndices += 0 - phalanx_flakcombo.FireModes(1).ProjectileTypeIndices += 1 - phalanx_flakcombo.FireModes(1).AmmoSlotIndex = 0 - phalanx_flakcombo.FireModes(1).Magazine = 4000 - - vanu_sentry_turret_weapon.Name = "vanu_sentry_turret_weapon" - vanu_sentry_turret_weapon.Size = EquipmentSize.BaseTurretWeapon - vanu_sentry_turret_weapon.AmmoTypes += ancient_ammo_vehicle - vanu_sentry_turret_weapon.ProjectileTypes += vanu_sentry_turret_projectile - vanu_sentry_turret_weapon.FireModes += new FireModeDefinition - vanu_sentry_turret_weapon.FireModes.head.AmmoTypeIndices += 0 - vanu_sentry_turret_weapon.FireModes.head.AmmoSlotIndex = 0 - vanu_sentry_turret_weapon.FireModes.head.Magazine = 100 - - spitfire_weapon.Name = "spitfire_weapon" - spitfire_weapon.Size = EquipmentSize.BaseTurretWeapon - spitfire_weapon.AmmoTypes += spitfire_ammo - spitfire_weapon.ProjectileTypes += spitfire_ammo_projectile - spitfire_weapon.FireModes += new InfiniteFireModeDefinition - spitfire_weapon.FireModes.head.AmmoTypeIndices += 0 - spitfire_weapon.FireModes.head.AmmoSlotIndex = 0 - spitfire_weapon.FireModes.head.Magazine = 4000 - - spitfire_aa_weapon.Name = "spitfire_aa_weapon" - spitfire_aa_weapon.Size = EquipmentSize.BaseTurretWeapon - spitfire_aa_weapon.AmmoTypes += spitfire_aa_ammo - spitfire_aa_weapon.ProjectileTypes += spitfire_aa_ammo_projectile - spitfire_aa_weapon.FireModes += new InfiniteFireModeDefinition - spitfire_aa_weapon.FireModes.head.AmmoTypeIndices += 0 - spitfire_aa_weapon.FireModes.head.AmmoSlotIndex = 0 - spitfire_aa_weapon.FireModes.head.Magazine = 4000 - - energy_gun.Name = "energy_gun" - energy_gun.Size = EquipmentSize.BaseTurretWeapon - energy_gun.AmmoTypes += energy_gun_ammo - energy_gun.ProjectileTypes += bullet_9mm_projectile //fallback - energy_gun.FireModes += new FireModeDefinition - energy_gun.FireModes.head.AmmoTypeIndices += 0 - energy_gun.FireModes.head.AmmoSlotIndex = 0 - energy_gun.FireModes.head.Magazine = 4000 - - energy_gun_nc.Name = "energy_gun_nc" - energy_gun_nc.Size = EquipmentSize.BaseTurretWeapon - energy_gun_nc.AmmoTypes += energy_gun_ammo - energy_gun_nc.ProjectileTypes += energy_gun_nc_projectile - energy_gun_nc.FireModes += new PelletFireModeDefinition - energy_gun_nc.FireModes.head.AmmoTypeIndices += 0 - energy_gun_nc.FireModes.head.AmmoSlotIndex = 0 - energy_gun_nc.FireModes.head.Magazine = 35 - energy_gun_nc.FireModes.head.Chamber = 8 //35 shots * 8 pellets = 280 - - energy_gun_tr.Name = "energy_gun_tr" - energy_gun_tr.Size = EquipmentSize.BaseTurretWeapon - energy_gun_tr.AmmoTypes += energy_gun_ammo - energy_gun_tr.ProjectileTypes += energy_gun_tr_projectile - energy_gun_tr.FireModes += new FireModeDefinition - energy_gun_tr.FireModes.head.AmmoTypeIndices += 0 - energy_gun_tr.FireModes.head.AmmoSlotIndex = 0 - energy_gun_tr.FireModes.head.Magazine = 200 - - energy_gun_vs.Name = "energy_gun_vs" - energy_gun_vs.Size = EquipmentSize.BaseTurretWeapon - energy_gun_vs.AmmoTypes += energy_gun_ammo - energy_gun_vs.ProjectileTypes += energy_gun_tr_projectile - energy_gun_vs.FireModes += new FireModeDefinition - energy_gun_vs.FireModes.head.AmmoTypeIndices += 0 - energy_gun_vs.FireModes.head.AmmoSlotIndex = 0 - energy_gun_vs.FireModes.head.Magazine = 100 - - val battleFrameToolConverter = new BattleFrameToolConverter - aphelion_armor_siphon.Name = "aphelion_armor_siphon" - aphelion_armor_siphon.Size = EquipmentSize.BFRArmWeapon - aphelion_armor_siphon.AmmoTypes += armor_siphon_ammo - aphelion_armor_siphon.ProjectileTypes += armor_siphon_projectile - aphelion_armor_siphon.FireModes += new FireModeDefinition - aphelion_armor_siphon.FireModes.head.AmmoTypeIndices += 0 - aphelion_armor_siphon.FireModes.head.AmmoSlotIndex = 0 - aphelion_armor_siphon.FireModes.head.Magazine = 100 - aphelion_armor_siphon.Packet = battleFrameToolConverter - aphelion_armor_siphon.Tile = InventoryTile.Tile84 - - aphelion_armor_siphon_left.Name = "aphelion_armor_siphon_left" - aphelion_armor_siphon_left.Size = EquipmentSize.BFRArmWeapon - aphelion_armor_siphon_left.AmmoTypes += armor_siphon_ammo - aphelion_armor_siphon_left.ProjectileTypes += armor_siphon_projectile - aphelion_armor_siphon_left.FireModes += new FireModeDefinition - aphelion_armor_siphon_left.FireModes.head.AmmoTypeIndices += 0 - aphelion_armor_siphon_left.FireModes.head.AmmoSlotIndex = 0 - aphelion_armor_siphon_left.FireModes.head.Magazine = 100 - aphelion_armor_siphon_left.Packet = battleFrameToolConverter - aphelion_armor_siphon_left.Tile = InventoryTile.Tile84 - - aphelion_armor_siphon_right.Name = "aphelion_armor_siphon_right" - aphelion_armor_siphon_right.Size = EquipmentSize.BFRArmWeapon - aphelion_armor_siphon_right.AmmoTypes += armor_siphon_ammo - aphelion_armor_siphon_right.ProjectileTypes += armor_siphon_projectile - aphelion_armor_siphon_right.FireModes += new FireModeDefinition - aphelion_armor_siphon_right.FireModes.head.AmmoTypeIndices += 0 - aphelion_armor_siphon_right.FireModes.head.AmmoSlotIndex = 0 - aphelion_armor_siphon_right.FireModes.head.Magazine = 100 - aphelion_armor_siphon_right.Packet = battleFrameToolConverter - aphelion_armor_siphon_right.Tile = InventoryTile.Tile84 - - aphelion_laser.Name = "aphelion_laser" - aphelion_laser.Size = EquipmentSize.BFRArmWeapon - aphelion_laser.AmmoTypes += aphelion_laser_ammo - aphelion_laser.ProjectileTypes += aphelion_laser_projectile - aphelion_laser.FireModes += new FireModeDefinition - aphelion_laser.FireModes.head.AmmoTypeIndices += 0 - aphelion_laser.FireModes.head.AmmoSlotIndex = 0 - aphelion_laser.FireModes.head.Magazine = 350 - aphelion_laser.Packet = battleFrameToolConverter - aphelion_laser.Tile = InventoryTile.Tile84 - - aphelion_laser_left.Name = "aphelion_laser_left" - aphelion_laser_left.Size = EquipmentSize.BFRArmWeapon - aphelion_laser_left.AmmoTypes += aphelion_laser_ammo - aphelion_laser_left.ProjectileTypes += aphelion_laser_projectile - aphelion_laser_left.FireModes += new FireModeDefinition - aphelion_laser_left.FireModes.head.AmmoTypeIndices += 0 - aphelion_laser_left.FireModes.head.AmmoSlotIndex = 0 - aphelion_laser_left.FireModes.head.Magazine = 350 - aphelion_laser_left.Packet = battleFrameToolConverter - aphelion_laser_left.Tile = InventoryTile.Tile84 - - aphelion_laser_right.Name = "aphelion_laser_right" - aphelion_laser_right.Size = EquipmentSize.BFRArmWeapon - aphelion_laser_right.AmmoTypes += aphelion_laser_ammo - aphelion_laser_right.ProjectileTypes += aphelion_laser_projectile - aphelion_laser_right.FireModes += new FireModeDefinition - aphelion_laser_right.FireModes.head.AmmoTypeIndices += 0 - aphelion_laser_right.FireModes.head.AmmoSlotIndex = 0 - aphelion_laser_right.FireModes.head.Magazine = 350 - aphelion_laser_right.Packet = battleFrameToolConverter - aphelion_laser_right.Tile = InventoryTile.Tile84 - - aphelion_ntu_siphon.Name = "aphelion_ntu_siphon" - aphelion_ntu_siphon.Size = EquipmentSize.BFRArmWeapon - aphelion_ntu_siphon.AmmoTypes += ntu_siphon_ammo - aphelion_ntu_siphon.ProjectileTypes += no_projectile - aphelion_ntu_siphon.ProjectileTypes += ntu_siphon_emp - aphelion_ntu_siphon.FireModes += new FireModeDefinition - aphelion_ntu_siphon.FireModes.head.AmmoTypeIndices += 0 - aphelion_ntu_siphon.FireModes.head.AmmoSlotIndex = 0 - aphelion_ntu_siphon.FireModes.head.RoundsPerShot = 5 - aphelion_ntu_siphon.FireModes.head.Magazine = 150 - aphelion_ntu_siphon.FireModes.head.DefaultMagazine = 0 - aphelion_ntu_siphon.FireModes += new FireModeDefinition - aphelion_ntu_siphon.FireModes(1).AmmoTypeIndices += 0 - aphelion_ntu_siphon.FireModes(1).AmmoSlotIndex = 0 - aphelion_ntu_siphon.FireModes(1).ProjectileTypeIndices += 1 - aphelion_ntu_siphon.FireModes(1).RoundsPerShot = 30 - aphelion_ntu_siphon.FireModes(1).Magazine = 150 - aphelion_ntu_siphon.FireModes(1).DefaultMagazine = 0 - aphelion_ntu_siphon.Packet = battleFrameToolConverter - aphelion_ntu_siphon.Tile = InventoryTile.Tile84 - - aphelion_ntu_siphon_left.Name = "aphelion_ntu_siphon_left" - aphelion_ntu_siphon_left.Size = EquipmentSize.BFRArmWeapon - aphelion_ntu_siphon_left.AmmoTypes += ntu_siphon_ammo - aphelion_ntu_siphon_left.ProjectileTypes += no_projectile - aphelion_ntu_siphon_left.ProjectileTypes += ntu_siphon_emp - aphelion_ntu_siphon_left.FireModes += new FireModeDefinition - aphelion_ntu_siphon_left.FireModes.head.AmmoTypeIndices += 0 - aphelion_ntu_siphon_left.FireModes.head.AmmoSlotIndex = 0 - aphelion_ntu_siphon_left.FireModes.head.RoundsPerShot = 5 - aphelion_ntu_siphon_left.FireModes.head.Magazine = 150 - aphelion_ntu_siphon_left.FireModes.head.DefaultMagazine = 0 - aphelion_ntu_siphon_left.FireModes += new FireModeDefinition - aphelion_ntu_siphon_left.FireModes(1).AmmoTypeIndices += 0 - aphelion_ntu_siphon_left.FireModes(1).AmmoSlotIndex = 0 - aphelion_ntu_siphon_left.FireModes(1).ProjectileTypeIndices += 1 - aphelion_ntu_siphon_left.FireModes(1).RoundsPerShot = 30 - aphelion_ntu_siphon_left.FireModes(1).Magazine = 150 - aphelion_ntu_siphon_left.FireModes(1).DefaultMagazine = 0 - aphelion_ntu_siphon_left.Packet = battleFrameToolConverter - aphelion_ntu_siphon_left.Tile = InventoryTile.Tile84 - - aphelion_ntu_siphon_right.Name = "aphelion_ntu_siphon_right" - aphelion_ntu_siphon_right.Size = EquipmentSize.BFRArmWeapon - aphelion_ntu_siphon_right.AmmoTypes += ntu_siphon_ammo - aphelion_ntu_siphon_right.ProjectileTypes += no_projectile - aphelion_ntu_siphon_right.ProjectileTypes += ntu_siphon_emp - aphelion_ntu_siphon_right.FireModes += new FireModeDefinition - aphelion_ntu_siphon_right.FireModes.head.AmmoTypeIndices += 0 - aphelion_ntu_siphon_right.FireModes.head.AmmoSlotIndex = 0 - aphelion_ntu_siphon_right.FireModes.head.RoundsPerShot = 5 - aphelion_ntu_siphon_right.FireModes.head.Magazine = 150 - aphelion_ntu_siphon_right.FireModes.head.DefaultMagazine = 0 - aphelion_ntu_siphon_right.FireModes += new FireModeDefinition - aphelion_ntu_siphon_right.FireModes(1).AmmoTypeIndices += 0 - aphelion_ntu_siphon_right.FireModes(1).AmmoSlotIndex = 0 - aphelion_ntu_siphon_right.FireModes(1).ProjectileTypeIndices += 1 - aphelion_ntu_siphon_right.FireModes(1).RoundsPerShot = 30 - aphelion_ntu_siphon_right.FireModes(1).Magazine = 150 - aphelion_ntu_siphon_right.FireModes(1).DefaultMagazine = 0 - aphelion_ntu_siphon_right.Packet = battleFrameToolConverter - aphelion_ntu_siphon_right.Tile = InventoryTile.Tile84 - - aphelion_ppa.Name = "aphelion_ppa" - aphelion_ppa.Size = EquipmentSize.BFRArmWeapon - aphelion_ppa.AmmoTypes += aphelion_ppa_ammo - aphelion_ppa.ProjectileTypes += aphelion_ppa_projectile - aphelion_ppa.FireModes += new FireModeDefinition - aphelion_ppa.FireModes.head.AmmoTypeIndices += 0 - aphelion_ppa.FireModes.head.AmmoSlotIndex = 0 - aphelion_ppa.FireModes.head.Magazine = 25 - aphelion_ppa.Packet = battleFrameToolConverter - aphelion_ppa.Tile = InventoryTile.Tile84 - - aphelion_ppa_left.Name = "aphelion_ppa_left" - aphelion_ppa_left.Size = EquipmentSize.BFRArmWeapon - aphelion_ppa_left.AmmoTypes += aphelion_ppa_ammo - aphelion_ppa_left.ProjectileTypes += aphelion_ppa_projectile - aphelion_ppa_left.FireModes += new FireModeDefinition - aphelion_ppa_left.FireModes.head.AmmoTypeIndices += 0 - aphelion_ppa_left.FireModes.head.AmmoSlotIndex = 0 - aphelion_ppa_left.FireModes.head.Magazine = 25 - aphelion_ppa_left.Packet = battleFrameToolConverter - aphelion_ppa_left.Tile = InventoryTile.Tile84 - - aphelion_ppa_right.Name = "aphelion_ppa_right" - aphelion_ppa_right.Size = EquipmentSize.BFRArmWeapon - aphelion_ppa_right.AmmoTypes += aphelion_ppa_ammo - aphelion_ppa_right.ProjectileTypes += aphelion_ppa_projectile - aphelion_ppa_right.FireModes += new FireModeDefinition - aphelion_ppa_right.FireModes.head.AmmoTypeIndices += 0 - aphelion_ppa_right.FireModes.head.AmmoSlotIndex = 0 - aphelion_ppa_right.FireModes.head.Magazine = 25 - aphelion_ppa_right.Packet = battleFrameToolConverter - aphelion_ppa_right.Tile = InventoryTile.Tile84 - - aphelion_starfire.Name = "aphelion_starfire" - aphelion_starfire.Size = EquipmentSize.BFRArmWeapon - aphelion_starfire.AmmoTypes += aphelion_starfire_ammo - aphelion_starfire.ProjectileTypes += aphelion_starfire_projectile - aphelion_starfire.FireModes += new FireModeDefinition - aphelion_starfire.FireModes.head.AmmoTypeIndices += 0 - aphelion_starfire.FireModes.head.AmmoSlotIndex = 0 - aphelion_starfire.FireModes.head.Magazine = 20 - aphelion_starfire.Packet = battleFrameToolConverter - aphelion_starfire.Tile = InventoryTile.Tile84 - - aphelion_starfire_left.Name = "aphelion_starfire_left" - aphelion_starfire_left.Size = EquipmentSize.BFRArmWeapon - aphelion_starfire_left.AmmoTypes += aphelion_starfire_ammo - aphelion_starfire_left.ProjectileTypes += aphelion_starfire_projectile - aphelion_starfire_left.FireModes += new FireModeDefinition - aphelion_starfire_left.FireModes.head.AmmoTypeIndices += 0 - aphelion_starfire_left.FireModes.head.AmmoSlotIndex = 0 - aphelion_starfire_left.FireModes.head.Magazine = 20 - aphelion_starfire_left.Packet = battleFrameToolConverter - aphelion_starfire_left.Tile = InventoryTile.Tile84 - - aphelion_starfire_right.Name = "aphelion_starfire_right" - aphelion_starfire_right.Size = EquipmentSize.BFRArmWeapon - aphelion_starfire_right.AmmoTypes += aphelion_starfire_ammo - aphelion_starfire_right.ProjectileTypes += aphelion_starfire_projectile - aphelion_starfire_right.FireModes += new FireModeDefinition - aphelion_starfire_right.FireModes.head.AmmoTypeIndices += 0 - aphelion_starfire_right.FireModes.head.AmmoSlotIndex = 0 - aphelion_starfire_right.FireModes.head.Magazine = 20 - aphelion_starfire_right.Packet = battleFrameToolConverter - aphelion_starfire_right.Tile = InventoryTile.Tile84 - - aphelion_plasma_rocket_pod.Name = "aphelion_plasma_rocket_pod" - aphelion_plasma_rocket_pod.Size = EquipmentSize.BFRGunnerWeapon - aphelion_plasma_rocket_pod.AmmoTypes += aphelion_plasma_rocket_ammo - aphelion_plasma_rocket_pod.ProjectileTypes += aphelion_plasma_rocket_projectile - aphelion_plasma_rocket_pod.FireModes += new FireModeDefinition - aphelion_plasma_rocket_pod.FireModes.head.AmmoTypeIndices += 0 - aphelion_plasma_rocket_pod.FireModes.head.AmmoSlotIndex = 0 - aphelion_plasma_rocket_pod.FireModes.head.Magazine = 40 - aphelion_plasma_rocket_pod.Packet = battleFrameToolConverter - aphelion_plasma_rocket_pod.Tile = InventoryTile.Tile1004 - - aphelion_immolation_cannon.Name = "aphelion_immolation_cannon" - aphelion_immolation_cannon.Size = EquipmentSize.BFRGunnerWeapon - aphelion_immolation_cannon.AmmoTypes += aphelion_immolation_cannon_ammo - aphelion_immolation_cannon.ProjectileTypes += aphelion_immolation_cannon_projectile - aphelion_immolation_cannon.FireModes += new FireModeDefinition - aphelion_immolation_cannon.FireModes.head.AmmoTypeIndices += 0 - aphelion_immolation_cannon.FireModes.head.AmmoSlotIndex = 0 - aphelion_immolation_cannon.FireModes.head.Magazine = 25 - aphelion_immolation_cannon.Packet = battleFrameToolConverter - aphelion_immolation_cannon.Tile = InventoryTile.Tile1004 - - colossus_armor_siphon.Name = "colossus_armor_siphon" - colossus_armor_siphon.Size = EquipmentSize.BFRArmWeapon - colossus_armor_siphon.AmmoTypes += armor_siphon_ammo - colossus_armor_siphon.ProjectileTypes += armor_siphon_projectile - colossus_armor_siphon.FireModes += new FireModeDefinition - colossus_armor_siphon.FireModes.head.AmmoTypeIndices += 0 - colossus_armor_siphon.FireModes.head.AmmoSlotIndex = 0 - colossus_armor_siphon.FireModes.head.Magazine = 100 - colossus_armor_siphon.Packet = battleFrameToolConverter - colossus_armor_siphon.Tile = InventoryTile.Tile84 - - colossus_armor_siphon_left.Name = "colossus_armor_siphon_left" - colossus_armor_siphon_left.Size = EquipmentSize.BFRArmWeapon - colossus_armor_siphon_left.AmmoTypes += armor_siphon_ammo - colossus_armor_siphon_left.ProjectileTypes += armor_siphon_projectile - colossus_armor_siphon_left.FireModes += new FireModeDefinition - colossus_armor_siphon_left.FireModes.head.AmmoTypeIndices += 0 - colossus_armor_siphon_left.FireModes.head.AmmoSlotIndex = 0 - colossus_armor_siphon_left.FireModes.head.Magazine = 100 - colossus_armor_siphon_left.Packet = battleFrameToolConverter - colossus_armor_siphon_left.Tile = InventoryTile.Tile84 - - colossus_armor_siphon_right.Name = "colossus_armor_siphon_right" - colossus_armor_siphon_right.Size = EquipmentSize.BFRArmWeapon - colossus_armor_siphon_right.AmmoTypes += armor_siphon_ammo - colossus_armor_siphon_right.ProjectileTypes += armor_siphon_projectile - colossus_armor_siphon_right.FireModes += new FireModeDefinition - colossus_armor_siphon_right.FireModes.head.AmmoTypeIndices += 0 - colossus_armor_siphon_right.FireModes.head.AmmoSlotIndex = 0 - colossus_armor_siphon_right.FireModes.head.Magazine = 100 - colossus_armor_siphon_right.Packet = battleFrameToolConverter - colossus_armor_siphon_right.Tile = InventoryTile.Tile84 - - colossus_burster.Name = "colossus_burster" - colossus_burster.Size = EquipmentSize.BFRArmWeapon - colossus_burster.AmmoTypes += colossus_burster_ammo - colossus_burster.ProjectileTypes += colossus_burster_projectile - colossus_burster.FireModes += new FireModeDefinition - colossus_burster.FireModes.head.AmmoTypeIndices += 0 - colossus_burster.FireModes.head.AmmoSlotIndex = 0 - colossus_burster.FireModes.head.Magazine = 25 - colossus_burster.Packet = battleFrameToolConverter - colossus_burster.Tile = InventoryTile.Tile84 - - colossus_burster_left.Name = "colossus_burster_left" - colossus_burster_left.Size = EquipmentSize.BFRArmWeapon - colossus_burster_left.AmmoTypes += colossus_burster_ammo - colossus_burster_left.ProjectileTypes += colossus_burster_projectile - colossus_burster_left.FireModes += new FireModeDefinition - colossus_burster_left.FireModes.head.AmmoTypeIndices += 0 - colossus_burster_left.FireModes.head.AmmoSlotIndex = 0 - colossus_burster_left.FireModes.head.Magazine = 25 - colossus_burster_left.Packet = battleFrameToolConverter - colossus_burster_left.Tile = InventoryTile.Tile84 - - colossus_burster_right.Name = "colossus_burster_right" - colossus_burster_right.Size = EquipmentSize.BFRArmWeapon - colossus_burster_right.AmmoTypes += colossus_burster_ammo - colossus_burster_right.ProjectileTypes += colossus_burster_projectile - colossus_burster_right.FireModes += new FireModeDefinition - colossus_burster_right.FireModes.head.AmmoTypeIndices += 0 - colossus_burster_right.FireModes.head.AmmoSlotIndex = 0 - colossus_burster_right.FireModes.head.Magazine = 25 - colossus_burster_right.Packet = battleFrameToolConverter - colossus_burster_right.Tile = InventoryTile.Tile84 - - colossus_chaingun.Name = "colossus_chaingun" - colossus_chaingun.Size = EquipmentSize.BFRArmWeapon - colossus_chaingun.AmmoTypes += colossus_chaingun_ammo - colossus_chaingun.ProjectileTypes += colossus_chaingun_projectile - colossus_chaingun.FireModes += new FireModeDefinition - colossus_chaingun.FireModes.head.AmmoTypeIndices += 0 - colossus_chaingun.FireModes.head.AmmoSlotIndex = 0 - colossus_chaingun.FireModes.head.Magazine = 125 - colossus_chaingun.Packet = battleFrameToolConverter - colossus_chaingun.Tile = InventoryTile.Tile84 - - colossus_chaingun_left.Name = "colossus_chaingun_left" - colossus_chaingun_left.Size = EquipmentSize.BFRArmWeapon - colossus_chaingun_left.AmmoTypes += colossus_chaingun_ammo - colossus_chaingun_left.ProjectileTypes += colossus_chaingun_projectile - colossus_chaingun_left.FireModes += new FireModeDefinition - colossus_chaingun_left.FireModes.head.AmmoTypeIndices += 0 - colossus_chaingun_left.FireModes.head.AmmoSlotIndex = 0 - colossus_chaingun_left.FireModes.head.Magazine = 125 - colossus_chaingun_left.Packet = battleFrameToolConverter - colossus_chaingun_left.Tile = InventoryTile.Tile84 - - colossus_chaingun_right.Name = "colossus_chaingun_right" - colossus_chaingun_right.Size = EquipmentSize.BFRArmWeapon - colossus_chaingun_right.AmmoTypes += colossus_chaingun_ammo - colossus_chaingun_right.ProjectileTypes += colossus_chaingun_projectile - colossus_chaingun_right.FireModes += new FireModeDefinition - colossus_chaingun_right.FireModes.head.AmmoTypeIndices += 0 - colossus_chaingun_right.FireModes.head.AmmoSlotIndex = 0 - colossus_chaingun_right.FireModes.head.Magazine = 125 - colossus_chaingun_right.Packet = battleFrameToolConverter - colossus_chaingun_right.Tile = InventoryTile.Tile84 - - colossus_ntu_siphon.Name = "colossus_ntu_siphon" - colossus_ntu_siphon.Size = EquipmentSize.BFRArmWeapon - colossus_ntu_siphon.AmmoTypes += ntu_siphon_ammo - colossus_ntu_siphon.ProjectileTypes += no_projectile - colossus_ntu_siphon.ProjectileTypes += ntu_siphon_emp - colossus_ntu_siphon.FireModes += new FireModeDefinition - colossus_ntu_siphon.FireModes.head.AmmoTypeIndices += 0 - colossus_ntu_siphon.FireModes.head.AmmoSlotIndex = 0 - colossus_ntu_siphon.FireModes.head.RoundsPerShot = 5 - colossus_ntu_siphon.FireModes.head.Magazine = 150 - colossus_ntu_siphon.FireModes.head.DefaultMagazine = 0 - colossus_ntu_siphon.FireModes += new FireModeDefinition - colossus_ntu_siphon.FireModes(1).AmmoTypeIndices += 0 - colossus_ntu_siphon.FireModes(1).AmmoSlotIndex = 0 - colossus_ntu_siphon.FireModes(1).ProjectileTypeIndices += 1 - colossus_ntu_siphon.FireModes(1).RoundsPerShot = 30 - colossus_ntu_siphon.FireModes(1).Magazine = 150 - colossus_ntu_siphon.FireModes(1).DefaultMagazine = 0 - colossus_ntu_siphon.FireModes(1).AmmoSlotIndex = 0 - colossus_ntu_siphon.Packet = battleFrameToolConverter - colossus_ntu_siphon.Tile = InventoryTile.Tile84 - - colossus_ntu_siphon_left.Name = "colossus_ntu_siphon_left" - colossus_ntu_siphon_left.Size = EquipmentSize.BFRArmWeapon - colossus_ntu_siphon_left.AmmoTypes += ntu_siphon_ammo - colossus_ntu_siphon_left.ProjectileTypes += no_projectile - colossus_ntu_siphon_left.ProjectileTypes += ntu_siphon_emp - colossus_ntu_siphon_left.FireModes += new FireModeDefinition - colossus_ntu_siphon_left.FireModes.head.AmmoTypeIndices += 0 - colossus_ntu_siphon_left.FireModes.head.AmmoSlotIndex = 0 - colossus_ntu_siphon_left.FireModes.head.RoundsPerShot = 5 - colossus_ntu_siphon_left.FireModes.head.Magazine = 150 - colossus_ntu_siphon_left.FireModes.head.DefaultMagazine = 0 - colossus_ntu_siphon_left.FireModes += new FireModeDefinition - colossus_ntu_siphon_left.FireModes(1).AmmoTypeIndices += 0 - colossus_ntu_siphon_left.FireModes(1).AmmoSlotIndex = 0 - colossus_ntu_siphon_left.FireModes(1).ProjectileTypeIndices += 1 - colossus_ntu_siphon_left.FireModes(1).RoundsPerShot = 30 - colossus_ntu_siphon_left.FireModes(1).Magazine = 150 - colossus_ntu_siphon_left.FireModes(1).DefaultMagazine = 0 - colossus_ntu_siphon_left.FireModes(1).AmmoSlotIndex = 0 - colossus_ntu_siphon_left.Packet = battleFrameToolConverter - colossus_ntu_siphon_left.Tile = InventoryTile.Tile84 - - colossus_ntu_siphon_right.Name = "colossus_ntu_siphon_right" - colossus_ntu_siphon_right.Size = EquipmentSize.BFRArmWeapon - colossus_ntu_siphon_right.AmmoTypes += ntu_siphon_ammo - colossus_ntu_siphon_right.ProjectileTypes += no_projectile - colossus_ntu_siphon_right.ProjectileTypes += ntu_siphon_emp - colossus_ntu_siphon_right.FireModes += new FireModeDefinition - colossus_ntu_siphon_right.FireModes.head.AmmoTypeIndices += 0 - colossus_ntu_siphon_right.FireModes.head.AmmoSlotIndex = 0 - colossus_ntu_siphon_right.FireModes.head.RoundsPerShot = 5 - colossus_ntu_siphon_right.FireModes.head.Magazine = 150 - colossus_ntu_siphon_right.FireModes.head.DefaultMagazine = 0 - colossus_ntu_siphon_right.FireModes += new FireModeDefinition - colossus_ntu_siphon_right.FireModes(1).AmmoTypeIndices += 0 - colossus_ntu_siphon_right.FireModes(1).AmmoSlotIndex = 0 - colossus_ntu_siphon_right.FireModes(1).ProjectileTypeIndices += 1 - colossus_ntu_siphon_right.FireModes(1).RoundsPerShot = 30 - colossus_ntu_siphon_right.FireModes(1).Magazine = 150 - colossus_ntu_siphon_right.FireModes(1).DefaultMagazine = 0 - colossus_ntu_siphon_right.FireModes(1).AmmoSlotIndex = 0 - colossus_ntu_siphon_right.Packet = battleFrameToolConverter - colossus_ntu_siphon_right.Tile = InventoryTile.Tile84 - - colossus_tank_cannon.Name = "colossus_tank_cannon" - colossus_tank_cannon.Size = EquipmentSize.BFRArmWeapon - colossus_tank_cannon.AmmoTypes += colossus_tank_cannon_ammo - colossus_tank_cannon.ProjectileTypes += colossus_tank_cannon_projectile - colossus_tank_cannon.FireModes += new FireModeDefinition - colossus_tank_cannon.FireModes.head.AmmoTypeIndices += 0 - colossus_tank_cannon.FireModes.head.AmmoSlotIndex = 0 - colossus_tank_cannon.FireModes.head.Magazine = 25 - colossus_tank_cannon.Packet = battleFrameToolConverter - colossus_tank_cannon.Tile = InventoryTile.Tile84 - - colossus_tank_cannon_left.Name = "colossus_tank_cannon_left" - colossus_tank_cannon_left.Size = EquipmentSize.BFRArmWeapon - colossus_tank_cannon_left.AmmoTypes += colossus_tank_cannon_ammo - colossus_tank_cannon_left.ProjectileTypes += colossus_tank_cannon_projectile - colossus_tank_cannon_left.FireModes += new FireModeDefinition - colossus_tank_cannon_left.FireModes.head.AmmoTypeIndices += 0 - colossus_tank_cannon_left.FireModes.head.AmmoSlotIndex = 0 - colossus_tank_cannon_left.FireModes.head.Magazine = 25 - colossus_tank_cannon_left.Packet = battleFrameToolConverter - colossus_tank_cannon_left.Tile = InventoryTile.Tile84 - - colossus_tank_cannon_right.Name = "colossus_tank_cannon_right" - colossus_tank_cannon_right.Size = EquipmentSize.BFRArmWeapon - colossus_tank_cannon_right.AmmoTypes += colossus_tank_cannon_ammo - colossus_tank_cannon_right.ProjectileTypes += colossus_tank_cannon_projectile - colossus_tank_cannon_right.FireModes += new FireModeDefinition - colossus_tank_cannon_right.FireModes.head.AmmoTypeIndices += 0 - colossus_tank_cannon_right.FireModes.head.AmmoSlotIndex = 0 - colossus_tank_cannon_right.FireModes.head.Magazine = 25 - colossus_tank_cannon_right.Packet = battleFrameToolConverter - colossus_tank_cannon_right.Tile = InventoryTile.Tile84 - - colossus_dual_100mm_cannons.Name = "colossus_dual_100mm_cannons" - colossus_dual_100mm_cannons.Size = EquipmentSize.BFRGunnerWeapon - colossus_dual_100mm_cannons.AmmoTypes += colossus_100mm_cannon_ammo - colossus_dual_100mm_cannons.ProjectileTypes += colossus_100mm_projectile - colossus_dual_100mm_cannons.FireModes += new FireModeDefinition - colossus_dual_100mm_cannons.FireModes.head.AmmoTypeIndices += 0 - colossus_dual_100mm_cannons.FireModes.head.AmmoSlotIndex = 0 - colossus_dual_100mm_cannons.FireModes.head.Magazine = 22 - colossus_dual_100mm_cannons.Packet = battleFrameToolConverter - colossus_dual_100mm_cannons.Tile = InventoryTile.Tile1004 - - colossus_cluster_bomb_pod.Name = "colossus_cluster_bomb_pod" - colossus_cluster_bomb_pod.Size = EquipmentSize.BFRGunnerWeapon - colossus_cluster_bomb_pod.AmmoTypes += colossus_cluster_bomb_ammo - colossus_cluster_bomb_pod.ProjectileTypes += colossus_cluster_bomb_projectile - colossus_cluster_bomb_pod.FireModes += new FireModeDefinition - colossus_cluster_bomb_pod.FireModes.head.AmmoTypeIndices += 0 - colossus_cluster_bomb_pod.FireModes.head.AmmoSlotIndex = 0 - colossus_cluster_bomb_pod.FireModes.head.Magazine = 125 - colossus_cluster_bomb_pod.FireModes += new FireModeDefinition - colossus_cluster_bomb_pod.FireModes(1).AmmoTypeIndices += 0 - colossus_cluster_bomb_pod.FireModes(1).AmmoSlotIndex = 0 - colossus_cluster_bomb_pod.FireModes(1).Magazine = 125 - colossus_cluster_bomb_pod.Packet = battleFrameToolConverter - colossus_cluster_bomb_pod.Tile = InventoryTile.Tile1004 - - peregrine_armor_siphon.Name = "peregrine_armor_siphon" - peregrine_armor_siphon.Size = EquipmentSize.BFRArmWeapon - peregrine_armor_siphon.AmmoTypes += armor_siphon_ammo - peregrine_armor_siphon.ProjectileTypes += armor_siphon_projectile - peregrine_armor_siphon.FireModes += new FireModeDefinition - peregrine_armor_siphon.FireModes.head.AmmoTypeIndices += 0 - peregrine_armor_siphon.FireModes.head.AmmoSlotIndex = 0 - peregrine_armor_siphon.FireModes.head.Magazine = 100 - peregrine_armor_siphon.Packet = battleFrameToolConverter - peregrine_armor_siphon.Tile = InventoryTile.Tile84 - - peregrine_armor_siphon_left.Name = "peregrine_armor_siphon_left" - peregrine_armor_siphon_left.Size = EquipmentSize.BFRArmWeapon - peregrine_armor_siphon_left.AmmoTypes += armor_siphon_ammo - peregrine_armor_siphon_left.ProjectileTypes += armor_siphon_projectile - peregrine_armor_siphon_left.FireModes += new FireModeDefinition - peregrine_armor_siphon_left.FireModes.head.AmmoTypeIndices += 0 - peregrine_armor_siphon_left.FireModes.head.AmmoSlotIndex = 0 - peregrine_armor_siphon_left.FireModes.head.Magazine = 100 - peregrine_armor_siphon_left.Packet = battleFrameToolConverter - peregrine_armor_siphon_left.Tile = InventoryTile.Tile84 - - peregrine_armor_siphon_right.Name = "peregrine_armor_siphon_right" - peregrine_armor_siphon_right.Size = EquipmentSize.BFRArmWeapon - peregrine_armor_siphon_right.AmmoTypes += armor_siphon_ammo - peregrine_armor_siphon_right.ProjectileTypes += armor_siphon_projectile - peregrine_armor_siphon_right.FireModes += new FireModeDefinition - peregrine_armor_siphon_right.FireModes.head.AmmoTypeIndices += 0 - peregrine_armor_siphon_right.FireModes.head.AmmoSlotIndex = 0 - peregrine_armor_siphon_right.FireModes.head.Magazine = 100 - peregrine_armor_siphon_right.Packet = battleFrameToolConverter - peregrine_armor_siphon_right.Tile = InventoryTile.Tile84 - - peregrine_dual_machine_gun.Name = "peregrine_dual_machine_gun" - peregrine_dual_machine_gun.Size = EquipmentSize.BFRArmWeapon - peregrine_dual_machine_gun.AmmoTypes += peregrine_dual_machine_gun_ammo - peregrine_dual_machine_gun.ProjectileTypes += peregrine_dual_machine_gun_projectile - peregrine_dual_machine_gun.FireModes += new FireModeDefinition - peregrine_dual_machine_gun.FireModes.head.AmmoTypeIndices += 0 - peregrine_dual_machine_gun.FireModes.head.AmmoSlotIndex = 0 - peregrine_dual_machine_gun.FireModes.head.Magazine = 55 - peregrine_dual_machine_gun.Packet = battleFrameToolConverter - peregrine_dual_machine_gun.Tile = InventoryTile.Tile84 - - peregrine_dual_machine_gun_left.Name = "peregrine_dual_machine_gun_left" - peregrine_dual_machine_gun_left.Size = EquipmentSize.BFRArmWeapon - peregrine_dual_machine_gun_left.AmmoTypes += peregrine_dual_machine_gun_ammo - peregrine_dual_machine_gun_left.ProjectileTypes += peregrine_dual_machine_gun_projectile - peregrine_dual_machine_gun_left.FireModes += new FireModeDefinition - peregrine_dual_machine_gun_left.FireModes.head.AmmoTypeIndices += 0 - peregrine_dual_machine_gun_left.FireModes.head.AmmoSlotIndex = 0 - peregrine_dual_machine_gun_left.FireModes.head.Magazine = 55 - peregrine_dual_machine_gun_left.Packet = battleFrameToolConverter - peregrine_dual_machine_gun_left.Tile = InventoryTile.Tile84 - - peregrine_dual_machine_gun_right.Name = "peregrine_dual_machine_gun_right" - peregrine_dual_machine_gun_right.Size = EquipmentSize.BFRArmWeapon - peregrine_dual_machine_gun_right.AmmoTypes += peregrine_dual_machine_gun_ammo - peregrine_dual_machine_gun_right.ProjectileTypes += peregrine_dual_machine_gun_projectile - peregrine_dual_machine_gun_right.FireModes += new FireModeDefinition - peregrine_dual_machine_gun_right.FireModes.head.AmmoTypeIndices += 0 - peregrine_dual_machine_gun_right.FireModes.head.AmmoSlotIndex = 0 - peregrine_dual_machine_gun_right.FireModes.head.Magazine = 55 - peregrine_dual_machine_gun_right.Packet = battleFrameToolConverter - peregrine_dual_machine_gun_right.Tile = InventoryTile.Tile84 - - peregrine_mechhammer.Name = "peregrine_mechhammer" - peregrine_mechhammer.Size = EquipmentSize.BFRArmWeapon - peregrine_mechhammer.AmmoTypes += peregrine_mechhammer_ammo - peregrine_mechhammer.ProjectileTypes += peregrine_mechhammer_projectile - peregrine_mechhammer.FireModes += new PelletFireModeDefinition - peregrine_mechhammer.FireModes.head.AmmoTypeIndices += 0 - peregrine_mechhammer.FireModes.head.AmmoSlotIndex = 0 - peregrine_mechhammer.FireModes.head.Magazine = 30 - peregrine_mechhammer.FireModes.head.Chamber = 16 //30 shells * 12 pellets = 480 - peregrine_mechhammer.FireModes += new PelletFireModeDefinition - peregrine_mechhammer.FireModes(1).AmmoTypeIndices += 0 - peregrine_mechhammer.FireModes(1).AmmoSlotIndex = 0 - peregrine_mechhammer.FireModes(1).Magazine = 30 - peregrine_mechhammer.FireModes(1).Chamber = 12 //30 shells * 12 pellets = 360 - peregrine_mechhammer.Packet = battleFrameToolConverter - peregrine_mechhammer.Tile = InventoryTile.Tile84 - - peregrine_mechhammer_left.Name = "peregrine_mechhammer_left" - peregrine_mechhammer_left.Size = EquipmentSize.BFRArmWeapon - peregrine_mechhammer_left.AmmoTypes += peregrine_mechhammer_ammo - peregrine_mechhammer_left.ProjectileTypes += peregrine_mechhammer_projectile - peregrine_mechhammer_left.FireModes += new PelletFireModeDefinition - peregrine_mechhammer_left.FireModes.head.AmmoTypeIndices += 0 - peregrine_mechhammer_left.FireModes.head.AmmoSlotIndex = 0 - peregrine_mechhammer_left.FireModes.head.Magazine = 30 - peregrine_mechhammer_left.FireModes.head.Chamber = 16 //30 shells * 12 pellets = 480 - peregrine_mechhammer_left.FireModes += new PelletFireModeDefinition - peregrine_mechhammer_left.FireModes(1).AmmoTypeIndices += 0 - peregrine_mechhammer_left.FireModes(1).AmmoSlotIndex = 0 - peregrine_mechhammer_left.FireModes(1).Magazine = 30 - peregrine_mechhammer_left.FireModes(1).Chamber = 12 //30 shells * 12 pellets = 360 - peregrine_mechhammer_left.Packet = battleFrameToolConverter - peregrine_mechhammer_left.Tile = InventoryTile.Tile84 - - peregrine_mechhammer_right.Name = "peregrine_mechhammer_right" - peregrine_mechhammer_right.Size = EquipmentSize.BFRArmWeapon - peregrine_mechhammer_right.AmmoTypes += peregrine_mechhammer_ammo - peregrine_mechhammer_right.ProjectileTypes += peregrine_mechhammer_projectile - peregrine_mechhammer_right.FireModes += new PelletFireModeDefinition - peregrine_mechhammer_right.FireModes.head.AmmoTypeIndices += 0 - peregrine_mechhammer_right.FireModes.head.AmmoSlotIndex = 0 - peregrine_mechhammer_right.FireModes.head.Magazine = 30 - peregrine_mechhammer_right.FireModes.head.Chamber = 16 //30 shells * 12 pellets = 480 - peregrine_mechhammer_right.FireModes += new PelletFireModeDefinition - peregrine_mechhammer_right.FireModes(1).AmmoTypeIndices += 0 - peregrine_mechhammer_right.FireModes(1).AmmoSlotIndex = 0 - peregrine_mechhammer_right.FireModes(1).Magazine = 30 - peregrine_mechhammer_right.FireModes(1).Chamber = 12 //30 shells * 12 pellets = 360 - peregrine_mechhammer_right.Packet = battleFrameToolConverter - peregrine_mechhammer_right.Tile = InventoryTile.Tile84 - - peregrine_ntu_siphon.Name = "peregrine_ntu_siphon" - peregrine_ntu_siphon.Size = EquipmentSize.BFRArmWeapon - peregrine_ntu_siphon.AmmoTypes += ntu_siphon_ammo - peregrine_ntu_siphon.ProjectileTypes += no_projectile - peregrine_ntu_siphon.ProjectileTypes += ntu_siphon_emp - peregrine_ntu_siphon.FireModes += new FireModeDefinition - peregrine_ntu_siphon.FireModes.head.AmmoTypeIndices += 0 - peregrine_ntu_siphon.FireModes.head.AmmoSlotIndex = 0 - peregrine_ntu_siphon.FireModes.head.RoundsPerShot = 5 - peregrine_ntu_siphon.FireModes.head.Magazine = 150 - peregrine_ntu_siphon.FireModes.head.DefaultMagazine = 0 - peregrine_ntu_siphon.FireModes += new FireModeDefinition - peregrine_ntu_siphon.FireModes(1).AmmoTypeIndices += 0 - peregrine_ntu_siphon.FireModes(1).AmmoSlotIndex = 0 - peregrine_ntu_siphon.FireModes(1).ProjectileTypeIndices += 1 - peregrine_ntu_siphon.FireModes(1).RoundsPerShot = 30 - peregrine_ntu_siphon.FireModes(1).Magazine = 150 - peregrine_ntu_siphon.FireModes(1).DefaultMagazine = 0 - peregrine_ntu_siphon.FireModes(1).AmmoSlotIndex = 0 - peregrine_ntu_siphon.Packet = battleFrameToolConverter - peregrine_ntu_siphon.Tile = InventoryTile.Tile84 - - peregrine_ntu_siphon_left.Name = "peregrine_ntu_siphon_left" - peregrine_ntu_siphon_left.Size = EquipmentSize.BFRArmWeapon - peregrine_ntu_siphon_left.AmmoTypes += ntu_siphon_ammo - peregrine_ntu_siphon_left.ProjectileTypes += no_projectile - peregrine_ntu_siphon_left.ProjectileTypes += ntu_siphon_emp - peregrine_ntu_siphon_left.FireModes += new FireModeDefinition - peregrine_ntu_siphon_left.FireModes.head.AmmoTypeIndices += 0 - peregrine_ntu_siphon_left.FireModes.head.AmmoSlotIndex = 0 - peregrine_ntu_siphon_left.FireModes.head.RoundsPerShot = 5 - peregrine_ntu_siphon_left.FireModes.head.Magazine = 150 - peregrine_ntu_siphon_left.FireModes.head.DefaultMagazine = 0 - peregrine_ntu_siphon_left.FireModes += new FireModeDefinition - peregrine_ntu_siphon_left.FireModes(1).AmmoTypeIndices += 0 - peregrine_ntu_siphon_left.FireModes(1).AmmoSlotIndex = 0 - peregrine_ntu_siphon_left.FireModes(1).ProjectileTypeIndices += 1 - peregrine_ntu_siphon_left.FireModes(1).RoundsPerShot = 30 - peregrine_ntu_siphon_left.FireModes(1).Magazine = 150 - peregrine_ntu_siphon_left.FireModes(1).DefaultMagazine = 0 - peregrine_ntu_siphon_left.FireModes(1).AmmoSlotIndex = 0 - peregrine_ntu_siphon_left.Packet = battleFrameToolConverter - peregrine_ntu_siphon_left.Tile = InventoryTile.Tile84 - - peregrine_ntu_siphon_right.Name = "peregrine_ntu_siphon_right" - peregrine_ntu_siphon_right.Size = EquipmentSize.BFRArmWeapon - peregrine_ntu_siphon_right.AmmoTypes += ntu_siphon_ammo - peregrine_ntu_siphon_right.ProjectileTypes += no_projectile - peregrine_ntu_siphon_right.ProjectileTypes += ntu_siphon_emp - peregrine_ntu_siphon_right.FireModes += new FireModeDefinition - peregrine_ntu_siphon_right.FireModes.head.AmmoTypeIndices += 0 - peregrine_ntu_siphon_right.FireModes.head.AmmoSlotIndex = 0 - peregrine_ntu_siphon_right.FireModes.head.RoundsPerShot = 5 - peregrine_ntu_siphon_right.FireModes.head.Magazine = 150 - peregrine_ntu_siphon_right.FireModes.head.DefaultMagazine = 0 - peregrine_ntu_siphon_right.FireModes += new FireModeDefinition - peregrine_ntu_siphon_right.FireModes(1).AmmoTypeIndices += 0 - peregrine_ntu_siphon_right.FireModes(1).AmmoSlotIndex = 0 - peregrine_ntu_siphon_right.FireModes(1).ProjectileTypeIndices += 1 - peregrine_ntu_siphon_right.FireModes(1).RoundsPerShot = 30 - peregrine_ntu_siphon_right.FireModes(1).Magazine = 150 - peregrine_ntu_siphon_right.FireModes(1).DefaultMagazine = 0 - peregrine_ntu_siphon_right.FireModes(1).AmmoSlotIndex = 0 - peregrine_ntu_siphon_right.Packet = battleFrameToolConverter - peregrine_ntu_siphon_right.Tile = InventoryTile.Tile84 - - peregrine_sparrow.Name = "peregrine_sparrow" - peregrine_sparrow.Size = EquipmentSize.BFRArmWeapon - peregrine_sparrow.AmmoTypes += peregrine_sparrow_ammo - peregrine_sparrow.ProjectileTypes += peregrine_sparrow_projectile - peregrine_sparrow.FireModes += new FireModeDefinition - peregrine_sparrow.FireModes.head.AmmoTypeIndices += 0 - peregrine_sparrow.FireModes.head.AmmoSlotIndex = 0 - peregrine_sparrow.FireModes.head.Magazine = 12 - peregrine_sparrow.Packet = battleFrameToolConverter - peregrine_sparrow.Tile = InventoryTile.Tile84 - - peregrine_sparrow_left.Name = "peregrine_sparrow_left" - peregrine_sparrow_left.Size = EquipmentSize.BFRArmWeapon - peregrine_sparrow_left.AmmoTypes += peregrine_sparrow_ammo - peregrine_sparrow_left.ProjectileTypes += peregrine_sparrow_projectile - peregrine_sparrow_left.FireModes += new FireModeDefinition - peregrine_sparrow_left.FireModes.head.AmmoTypeIndices += 0 - peregrine_sparrow_left.FireModes.head.AmmoSlotIndex = 0 - peregrine_sparrow_left.FireModes.head.Magazine = 12 - peregrine_sparrow_left.Packet = battleFrameToolConverter - peregrine_sparrow_left.Tile = InventoryTile.Tile84 - - peregrine_sparrow_right.Name = "peregrine_sparrow_right" - peregrine_sparrow_right.Size = EquipmentSize.BFRArmWeapon - peregrine_sparrow_right.AmmoTypes += peregrine_sparrow_ammo - peregrine_sparrow_right.ProjectileTypes += peregrine_sparrow_projectile - peregrine_sparrow_right.FireModes += new FireModeDefinition - peregrine_sparrow_right.FireModes.head.AmmoTypeIndices += 0 - peregrine_sparrow_right.FireModes.head.AmmoSlotIndex = 0 - peregrine_sparrow_right.FireModes.head.Magazine = 12 - peregrine_sparrow_right.Packet = battleFrameToolConverter - peregrine_sparrow_right.Tile = InventoryTile.Tile84 - - peregrine_particle_cannon.Name = "peregrine_particle_cannon" - peregrine_particle_cannon.Size = EquipmentSize.BFRGunnerWeapon - peregrine_particle_cannon.AmmoTypes += peregrine_particle_cannon_ammo - peregrine_particle_cannon.ProjectileTypes += peregrine_particle_cannon_projectile - peregrine_particle_cannon.FireModes += new FireModeDefinition - peregrine_particle_cannon.FireModes.head.AmmoTypeIndices += 0 - peregrine_particle_cannon.FireModes.head.AmmoSlotIndex = 0 - peregrine_particle_cannon.FireModes.head.Magazine = 10 - peregrine_particle_cannon.Packet = battleFrameToolConverter - peregrine_particle_cannon.Tile = InventoryTile.Tile1004 - - peregrine_dual_rocket_pods.Name = "peregrine_dual_rocket_pods" - peregrine_dual_rocket_pods.Size = EquipmentSize.BFRGunnerWeapon - peregrine_dual_rocket_pods.AmmoTypes += peregrine_rocket_pod_ammo - peregrine_dual_rocket_pods.ProjectileTypes += peregrine_rocket_pod_projectile - peregrine_dual_rocket_pods.FireModes += new FireModeDefinition - peregrine_dual_rocket_pods.FireModes.head.AmmoTypeIndices += 0 - peregrine_dual_rocket_pods.FireModes.head.AmmoSlotIndex = 0 - peregrine_dual_rocket_pods.FireModes.head.Magazine = 24 - peregrine_dual_rocket_pods.FireModes += new FireModeDefinition - peregrine_dual_rocket_pods.FireModes(1).AmmoTypeIndices += 0 - peregrine_dual_rocket_pods.FireModes(1).AmmoSlotIndex = 0 - peregrine_dual_rocket_pods.FireModes(1).Magazine = 24 - peregrine_dual_rocket_pods.Packet = battleFrameToolConverter - peregrine_dual_rocket_pods.Tile = InventoryTile.Tile1004 - } - - /** - * Initialize `VehicleDefinition` globals. - */ - private def init_vehicles(): Unit = { - init_ground_vehicles() - init_flight_vehicles() - init_bfr_vehicles() - } - - /** - * Initialize land-based `VehicleDefinition` globals. - */ - private def init_ground_vehicles(): Unit = { - val atvForm = GeometryForm.representByCylinder(radius = 1.1797f, height = 1.1875f) _ - val delivererForm = GeometryForm.representByCylinder(radius = 2.46095f, height = 2.40626f) _ //TODO hexahedron - val apcForm = GeometryForm.representByCylinder(radius = 4.6211f, height = 3.90626f) _ //TODO hexahedron - - val driverSeat = new SeatDefinition() { - restriction = NoReinforcedOrMax - } - val normalSeat = new SeatDefinition() - val bailableSeat = new SeatDefinition() { - bailable = true - } - val maxOnlySeat = new SeatDefinition() { - restriction = MaxOnly - } - - val controlSubsystem = List(VehicleSubsystemEntry.Controls) - - fury.Name = "fury" - fury.MaxHealth = 650 - fury.Damageable = true - fury.Repairable = true - fury.RepairIfDestroyed = false - fury.MaxShields = 130 - fury.Seats += 0 -> bailableSeat - fury.controlledWeapons(seat = 0, weapon = 1) - fury.Weapons += 1 -> fury_weapon_systema - fury.MountPoints += 1 -> MountInfo(0) - fury.MountPoints += 2 -> MountInfo(0) - fury.subsystems = controlSubsystem - fury.TrunkSize = InventoryTile.Tile1111 - fury.TrunkOffset = 30 - fury.TrunkLocation = Vector3(-1.71f, 0f, 0f) - fury.AutoPilotSpeeds = (24, 10) - fury.DestroyedModel = Some(DestroyedVehicle.QuadAssault) - fury.JackingDuration = Array(0, 10, 3, 2) - fury.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 150 - Damage1 = 225 - DamageRadius = 5 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - fury.DrownAtMaxDepth = true - fury.MaxDepth = 1.3f - fury.UnderwaterLifespan(suffocation = 5000L, recovery = 2500L) - fury.Geometry = atvForm - fury.collision.avatarCollisionDamageMax = 35 - fury.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 5), (0.5f, 20), (0.75f, 40), (1f, 60))) - fury.collision.z = CollisionZData(Array((8f, 1), (24f, 35), (40f, 100), (48f, 175), (52f, 350))) - fury.maxForwardSpeed = 90f - fury.mass = 32.1f - - quadassault.Name = "quadassault" // Basilisk - quadassault.MaxHealth = 650 - quadassault.Damageable = true - quadassault.Repairable = true - quadassault.RepairIfDestroyed = false - quadassault.MaxShields = 130 - quadassault.Seats += 0 -> bailableSeat - quadassault.controlledWeapons(seat = 0, weapon = 1) - quadassault.Weapons += 1 -> quadassault_weapon_system - quadassault.MountPoints += 1 -> MountInfo(0) - quadassault.MountPoints += 2 -> MountInfo(0) - quadassault.subsystems = controlSubsystem - quadassault.TrunkSize = InventoryTile.Tile1111 - quadassault.TrunkOffset = 30 - quadassault.TrunkLocation = Vector3(-1.71f, 0f, 0f) - quadassault.AutoPilotSpeeds = (24, 10) - quadassault.DestroyedModel = Some(DestroyedVehicle.QuadAssault) - quadassault.JackingDuration = Array(0, 10, 3, 2) - quadassault.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 150 - Damage1 = 225 - DamageRadius = 5 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - quadassault.DrownAtMaxDepth = true - quadassault.MaxDepth = 1.3f - quadassault.UnderwaterLifespan(suffocation = 5000L, recovery = 2500L) - quadassault.Geometry = atvForm - quadassault.collision.avatarCollisionDamageMax = 35 - quadassault.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 5), (0.5f, 20), (0.75f, 40), (1f, 60))) - quadassault.collision.z = CollisionZData(Array((8f, 1), (24f, 35), (40f, 100), (48f, 175), (52f, 350))) - quadassault.maxForwardSpeed = 90f - quadassault.mass = 32.1f - - quadstealth.Name = "quadstealth" // Wraith - quadstealth.MaxHealth = 650 - quadstealth.Damageable = true - quadstealth.Repairable = true - quadstealth.RepairIfDestroyed = false - quadstealth.MaxShields = 130 - quadstealth.CanCloak = true - quadstealth.Seats += 0 -> bailableSeat - quadstealth.CanCloak = true - quadstealth.MountPoints += 1 -> MountInfo(0) - quadstealth.MountPoints += 2 -> MountInfo(0) - quadstealth.subsystems = controlSubsystem - quadstealth.TrunkSize = InventoryTile.Tile1111 - quadstealth.TrunkOffset = 30 - quadstealth.TrunkLocation = Vector3(-1.71f, 0f, 0f) - quadstealth.AutoPilotSpeeds = (24, 10) - quadstealth.DestroyedModel = Some(DestroyedVehicle.QuadStealth) - quadstealth.JackingDuration = Array(0, 10, 3, 2) - quadstealth.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 150 - Damage1 = 225 - DamageRadius = 5 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - quadstealth.DrownAtMaxDepth = true - quadstealth.MaxDepth = 1.25f - quadstealth.UnderwaterLifespan(suffocation = 5000L, recovery = 2500L) - quadstealth.Geometry = atvForm - quadstealth.collision.avatarCollisionDamageMax = 35 - quadstealth.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 5), (0.5f, 20), (0.75f, 40), (1f, 60))) - quadstealth.collision.z = CollisionZData(Array((8f, 1), (24f, 35), (40f, 100), (48f, 175), (52f, 350))) - quadstealth.maxForwardSpeed = 90f - quadstealth.mass = 32.1f - - two_man_assault_buggy.Name = "two_man_assault_buggy" // Harasser - two_man_assault_buggy.MaxHealth = 1250 - two_man_assault_buggy.Damageable = true - two_man_assault_buggy.Repairable = true - two_man_assault_buggy.RepairIfDestroyed = false - two_man_assault_buggy.MaxShields = 250 - two_man_assault_buggy.Seats += 0 -> bailableSeat - two_man_assault_buggy.Seats += 1 -> bailableSeat - two_man_assault_buggy.controlledWeapons(seat = 1, weapon = 2) - two_man_assault_buggy.Weapons += 2 -> chaingun_p - two_man_assault_buggy.MountPoints += 1 -> MountInfo(0) - two_man_assault_buggy.MountPoints += 2 -> MountInfo(1) - two_man_assault_buggy.subsystems = controlSubsystem - two_man_assault_buggy.TrunkSize = InventoryTile.Tile1511 - two_man_assault_buggy.TrunkOffset = 30 - two_man_assault_buggy.TrunkLocation = Vector3(-2.5f, 0f, 0f) - two_man_assault_buggy.AutoPilotSpeeds = (22, 8) - two_man_assault_buggy.DestroyedModel = Some(DestroyedVehicle.TwoManAssaultBuggy) - two_man_assault_buggy.RadiationShielding = 0.5f - two_man_assault_buggy.JackingDuration = Array(0, 15, 5, 3) - two_man_assault_buggy.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 200 - Damage1 = 300 - DamageRadius = 8 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - two_man_assault_buggy.DrownAtMaxDepth = true - two_man_assault_buggy.MaxDepth = 1.5f - two_man_assault_buggy.UnderwaterLifespan(suffocation = 5000L, recovery = 2500L) - two_man_assault_buggy.Geometry = GeometryForm.representByCylinder(radius = 2.10545f, height = 1.59376f) - two_man_assault_buggy.collision.avatarCollisionDamageMax = 75 - two_man_assault_buggy.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 5), (0.5f, 20), (0.75f, 40), (1f, 60))) - two_man_assault_buggy.collision.z = CollisionZData(Array((7f, 1), (21f, 50), (35f, 150), (42f, 300), (45.5f, 600))) - two_man_assault_buggy.maxForwardSpeed = 85f - two_man_assault_buggy.mass = 52.4f - - skyguard.Name = "skyguard" - skyguard.MaxHealth = 1000 - skyguard.Damageable = true - skyguard.Repairable = true - skyguard.RepairIfDestroyed = false - skyguard.MaxShields = 200 - skyguard.Seats += 0 -> bailableSeat - skyguard.Seats += 1 -> bailableSeat - skyguard.controlledWeapons(seat = 1, weapon = 2) - skyguard.Weapons += 2 -> skyguard_weapon_system - skyguard.MountPoints += 1 -> MountInfo(0) - skyguard.MountPoints += 2 -> MountInfo(0) - skyguard.MountPoints += 3 -> MountInfo(1) - skyguard.subsystems = controlSubsystem - skyguard.TrunkSize = InventoryTile.Tile1511 - skyguard.TrunkOffset = 30 - skyguard.TrunkLocation = Vector3(2.5f, 0f, 0f) - skyguard.AutoPilotSpeeds = (22, 8) - skyguard.DestroyedModel = Some(DestroyedVehicle.Skyguard) - skyguard.JackingDuration = Array(0, 15, 5, 3) - skyguard.RadiationShielding = 0.5f - skyguard.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 200 - Damage1 = 300 - DamageRadius = 8 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - skyguard.DrownAtMaxDepth = true - skyguard.MaxDepth = 1.5f - skyguard.UnderwaterLifespan(suffocation = 5000L, recovery = 2500L) - skyguard.Geometry = GeometryForm.representByCylinder(radius = 1.8867f, height = 1.4375f) - skyguard.collision.avatarCollisionDamageMax = 100 - skyguard.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 5), (0.5f, 20), (0.75f, 40), (1f, 60))) - skyguard.collision.z = CollisionZData(Array((7f, 1), (21f, 50), (35f, 150), (42f, 300), (45.4f, 600))) - skyguard.maxForwardSpeed = 90f - skyguard.mass = 78.9f - - threemanheavybuggy.Name = "threemanheavybuggy" // Marauder - threemanheavybuggy.MaxHealth = 1700 - threemanheavybuggy.Damageable = true - threemanheavybuggy.Repairable = true - threemanheavybuggy.RepairIfDestroyed = false - threemanheavybuggy.MaxShields = 340 - threemanheavybuggy.Seats += 0 -> bailableSeat - threemanheavybuggy.Seats += 1 -> bailableSeat - threemanheavybuggy.Seats += 2 -> bailableSeat - threemanheavybuggy.controlledWeapons(seat = 1, weapon = 3) - threemanheavybuggy.controlledWeapons(seat = 2, weapon = 4) - threemanheavybuggy.Weapons += 3 -> chaingun_p - threemanheavybuggy.Weapons += 4 -> grenade_launcher_marauder - threemanheavybuggy.MountPoints += 1 -> MountInfo(0) - threemanheavybuggy.MountPoints += 2 -> MountInfo(1) - threemanheavybuggy.MountPoints += 3 -> MountInfo(2) - threemanheavybuggy.subsystems = controlSubsystem - threemanheavybuggy.TrunkSize = InventoryTile.Tile1511 - threemanheavybuggy.TrunkOffset = 30 - threemanheavybuggy.TrunkLocation = Vector3(3.01f, 0f, 0f) - threemanheavybuggy.AutoPilotSpeeds = (22, 8) - threemanheavybuggy.DestroyedModel = Some(DestroyedVehicle.ThreeManHeavyBuggy) - threemanheavybuggy.Subtract.Damage1 = 5 - threemanheavybuggy.JackingDuration = Array(0, 20, 7, 5) - threemanheavybuggy.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 200 - Damage1 = 300 - DamageRadius = 10 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - threemanheavybuggy.DrownAtMaxDepth = true - threemanheavybuggy.MaxDepth = 1.83f - threemanheavybuggy.UnderwaterLifespan(suffocation = 5000L, recovery = 2500L) - threemanheavybuggy.Geometry = GeometryForm.representByCylinder(radius = 2.1953f, height = 2.03125f) - threemanheavybuggy.collision.avatarCollisionDamageMax = 100 - threemanheavybuggy.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 15), (0.5f, 30), (0.75f, 60), (1f, 80))) - threemanheavybuggy.collision.z = CollisionZData(Array((6f, 1), (18f, 50), (30f, 150), (36f, 300), (39f, 900))) - threemanheavybuggy.maxForwardSpeed = 80f - threemanheavybuggy.mass = 96.3f - - twomanheavybuggy.Name = "twomanheavybuggy" // Enforcer - twomanheavybuggy.MaxHealth = 1800 - twomanheavybuggy.Damageable = true - twomanheavybuggy.Repairable = true - twomanheavybuggy.RepairIfDestroyed = false - twomanheavybuggy.MaxShields = 360 - twomanheavybuggy.Seats += 0 -> bailableSeat - twomanheavybuggy.Seats += 1 -> bailableSeat - twomanheavybuggy.controlledWeapons(seat = 1, weapon = 2) - twomanheavybuggy.Weapons += 2 -> advanced_missile_launcher_t - twomanheavybuggy.MountPoints += 1 -> MountInfo(0) - twomanheavybuggy.MountPoints += 2 -> MountInfo(1) - twomanheavybuggy.subsystems = controlSubsystem - twomanheavybuggy.TrunkSize = InventoryTile.Tile1511 - twomanheavybuggy.TrunkOffset = 30 - twomanheavybuggy.TrunkLocation = Vector3(-0.23f, -2.05f, 0f) - twomanheavybuggy.AutoPilotSpeeds = (22, 8) - twomanheavybuggy.DestroyedModel = Some(DestroyedVehicle.TwoManHeavyBuggy) - twomanheavybuggy.RadiationShielding = 0.5f - twomanheavybuggy.Subtract.Damage1 = 5 - twomanheavybuggy.JackingDuration = Array(0, 20, 7, 5) - twomanheavybuggy.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 200 - Damage1 = 300 - DamageRadius = 8 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - twomanheavybuggy.DrownAtMaxDepth = true - twomanheavybuggy.MaxDepth = 1.95f - twomanheavybuggy.UnderwaterLifespan(suffocation = 5000L, recovery = 2500L) - twomanheavybuggy.Geometry = GeometryForm.representByCylinder(radius = 2.60935f, height = 1.79688f) - twomanheavybuggy.collision.avatarCollisionDamageMax = 100 - twomanheavybuggy.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 12), (0.5f, 30), (0.75f, 55), (1f, 80))) - twomanheavybuggy.collision.z = CollisionZData(Array((6f, 1), (18f, 50), (30f, 150), (36f, 300), (39f, 900))) - twomanheavybuggy.maxForwardSpeed = 80f - twomanheavybuggy.mass = 83.2f - - twomanhoverbuggy.Name = "twomanhoverbuggy" // Thresher - twomanhoverbuggy.MaxHealth = 1600 - twomanhoverbuggy.Damageable = true - twomanhoverbuggy.Repairable = true - twomanhoverbuggy.RepairIfDestroyed = false - twomanhoverbuggy.MaxShields = 320 - twomanhoverbuggy.Seats += 0 -> bailableSeat - twomanhoverbuggy.Seats += 1 -> bailableSeat - twomanhoverbuggy.controlledWeapons(seat = 1, weapon = 2) - twomanhoverbuggy.Weapons += 2 -> flux_cannon_thresher - twomanhoverbuggy.MountPoints += 1 -> MountInfo(0) - twomanhoverbuggy.MountPoints += 2 -> MountInfo(1) - twomanhoverbuggy.subsystems = controlSubsystem - twomanhoverbuggy.TrunkSize = InventoryTile.Tile1511 - twomanhoverbuggy.TrunkOffset = 30 - twomanhoverbuggy.TrunkLocation = Vector3(-3.39f, 0f, 0f) - twomanhoverbuggy.AutoPilotSpeeds = (22, 10) - twomanhoverbuggy.DestroyedModel = Some(DestroyedVehicle.TwoManHoverBuggy) - twomanhoverbuggy.RadiationShielding = 0.5f - twomanhoverbuggy.Subtract.Damage1 = 5 - twomanhoverbuggy.JackingDuration = Array(0, 20, 7, 5) - twomanhoverbuggy.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 200 - Damage1 = 300 - DamageRadius = 10 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - twomanhoverbuggy.DrownAtMaxDepth = false //true? - twomanhoverbuggy.MaxDepth = 2f - twomanhoverbuggy.UnderwaterLifespan( - suffocation = 45000L, - recovery = 5000L - ) //but the thresher hovers over water, so ...? - twomanhoverbuggy.Geometry = GeometryForm.representByCylinder(radius = 2.1875f, height = 2.01563f) - twomanhoverbuggy.collision.avatarCollisionDamageMax = 125 - twomanhoverbuggy.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 13), (0.5f, 35), (0.75f, 65), (1f, 90))) - twomanhoverbuggy.collision.z = CollisionZData(Array((6f, 1), (18f, 50), (30f, 150), (36f, 300), (39f, 900))) - twomanhoverbuggy.maxForwardSpeed = 85f - twomanhoverbuggy.mass = 55.5f - - mediumtransport.Name = "mediumtransport" // Deliverer - mediumtransport.MaxHealth = 2500 - mediumtransport.Damageable = true - mediumtransport.Repairable = true - mediumtransport.RepairIfDestroyed = false - mediumtransport.MaxShields = 500 - mediumtransport.Seats += 0 -> driverSeat - mediumtransport.Seats += 1 -> normalSeat - mediumtransport.Seats += 2 -> normalSeat - mediumtransport.Seats += 3 -> normalSeat - mediumtransport.Seats += 4 -> normalSeat - mediumtransport.controlledWeapons(seat = 1, weapon = 5) - mediumtransport.controlledWeapons(seat = 2, weapon = 6) - mediumtransport.Weapons += 5 -> mediumtransport_weapon_systemA - mediumtransport.Weapons += 6 -> mediumtransport_weapon_systemB - mediumtransport.MountPoints += 1 -> MountInfo(0) - mediumtransport.MountPoints += 2 -> MountInfo(1) - mediumtransport.MountPoints += 3 -> MountInfo(2) - mediumtransport.MountPoints += 4 -> MountInfo(3) - mediumtransport.MountPoints += 5 -> MountInfo(4) - mediumtransport.subsystems = controlSubsystem - mediumtransport.TrunkSize = InventoryTile.Tile1515 - mediumtransport.TrunkOffset = 30 - mediumtransport.TrunkLocation = Vector3(-3.46f, 0f, 0f) - mediumtransport.AutoPilotSpeeds = (18, 6) - mediumtransport.DestroyedModel = Some(DestroyedVehicle.MediumTransport) - mediumtransport.Subtract.Damage1 = 7 - mediumtransport.JackingDuration = Array(0, 25, 8, 5) - mediumtransport.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 200 - Damage1 = 300 - DamageRadius = 12 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - mediumtransport.DrownAtMaxDepth = false - mediumtransport.MaxDepth = 2f - mediumtransport.UnderwaterLifespan(suffocation = -1, recovery = -1) - mediumtransport.Geometry = delivererForm - mediumtransport.collision.avatarCollisionDamageMax = 120 - mediumtransport.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 35), (0.5f, 60), (0.75f, 110), (1f, 175))) - mediumtransport.collision.z = CollisionZData(Array((5f, 1), (15f, 50), (25f, 200), (30f, 750), (32.5f, 2000))) - mediumtransport.maxForwardSpeed = 70f - mediumtransport.mass = 108.5f - - battlewagon.Name = "battlewagon" // Raider - battlewagon.MaxHealth = 2500 - battlewagon.Damageable = true - battlewagon.Repairable = true - battlewagon.RepairIfDestroyed = false - battlewagon.MaxShields = 500 - battlewagon.Seats += 0 -> driverSeat - battlewagon.Seats += 1 -> normalSeat - battlewagon.Seats += 2 -> normalSeat - battlewagon.Seats += 3 -> normalSeat - battlewagon.Seats += 4 -> normalSeat - battlewagon.controlledWeapons(seat = 1, weapon = 5) - battlewagon.controlledWeapons(seat = 2, weapon = 6) - battlewagon.controlledWeapons(seat = 3, weapon = 7) - battlewagon.controlledWeapons(seat = 4, weapon = 8) - battlewagon.Weapons += 5 -> battlewagon_weapon_systema - battlewagon.Weapons += 6 -> battlewagon_weapon_systemb - battlewagon.Weapons += 7 -> battlewagon_weapon_systemc - battlewagon.Weapons += 8 -> battlewagon_weapon_systemd - battlewagon.MountPoints += 1 -> MountInfo(0) - battlewagon.MountPoints += 2 -> MountInfo(1) - battlewagon.MountPoints += 3 -> MountInfo(2) - battlewagon.MountPoints += 4 -> MountInfo(3) - battlewagon.MountPoints += 5 -> MountInfo(4) - battlewagon.subsystems = controlSubsystem - battlewagon.TrunkSize = InventoryTile.Tile1515 - battlewagon.TrunkOffset = 30 - battlewagon.TrunkLocation = Vector3(-3.46f, 0f, 0f) - battlewagon.AutoPilotSpeeds = (18, 6) - battlewagon.DestroyedModel = Some(DestroyedVehicle.MediumTransport) - battlewagon.JackingDuration = Array(0, 25, 8, 5) - battlewagon.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 200 - Damage1 = 300 - DamageRadius = 12 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - battlewagon.DrownAtMaxDepth = false - battlewagon.MaxDepth = 2f - battlewagon.UnderwaterLifespan(suffocation = -1, recovery = -1) - battlewagon.Geometry = delivererForm - battlewagon.collision.avatarCollisionDamageMax = 120 - battlewagon.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 35), (0.5f, 60), (0.75f, 110), (1f, 175))) //inherited from mediumtransport - battlewagon.collision.z = CollisionZData(Array((5f, 1), (15f, 50), (25f, 200), (30f, 750), (32.5f, 2000))) //inherited from mediumtransport - battlewagon.maxForwardSpeed = 65f - battlewagon.mass = 108.5f - - thunderer.Name = "thunderer" - thunderer.MaxHealth = 2500 - thunderer.Damageable = true - thunderer.Repairable = true - thunderer.RepairIfDestroyed = false - thunderer.MaxShields = 500 - thunderer.Seats += 0 -> driverSeat - thunderer.Seats += 1 -> normalSeat - thunderer.Seats += 2 -> normalSeat - thunderer.Seats += 3 -> normalSeat - thunderer.Seats += 4 -> normalSeat - thunderer.Weapons += 5 -> thunderer_weapon_systema - thunderer.Weapons += 6 -> thunderer_weapon_systemb - thunderer.controlledWeapons(seat = 1, weapon = 5) - thunderer.controlledWeapons(seat = 2, weapon = 6) - thunderer.MountPoints += 1 -> MountInfo(0) - thunderer.MountPoints += 2 -> MountInfo(1) - thunderer.MountPoints += 3 -> MountInfo(2) - thunderer.MountPoints += 4 -> MountInfo(3) - thunderer.MountPoints += 5 -> MountInfo(4) - thunderer.subsystems = controlSubsystem - thunderer.TrunkSize = InventoryTile.Tile1515 - thunderer.TrunkOffset = 30 - thunderer.TrunkLocation = Vector3(-3.46f, 0f, 0f) - thunderer.AutoPilotSpeeds = (18, 6) - thunderer.DestroyedModel = Some(DestroyedVehicle.MediumTransport) - thunderer.Subtract.Damage1 = 7 - thunderer.JackingDuration = Array(0, 25, 8, 5) - thunderer.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 200 - Damage1 = 300 - DamageRadius = 12 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - thunderer.DrownAtMaxDepth = false - thunderer.MaxDepth = 2f - thunderer.UnderwaterLifespan(suffocation = -1, recovery = -1) - thunderer.Geometry = delivererForm - thunderer.collision.avatarCollisionDamageMax = 120 - thunderer.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 35), (0.5f, 60), (0.75f, 110), (1f, 175))) - thunderer.collision.z = CollisionZData(Array((5f, 1), (15f, 50), (25f, 200), (30f, 750), (32.5f, 2000))) - thunderer.maxForwardSpeed = 65f - thunderer.mass = 108.5f - - aurora.Name = "aurora" - aurora.MaxHealth = 2500 - aurora.Damageable = true - aurora.Repairable = true - aurora.RepairIfDestroyed = false - aurora.MaxShields = 500 - aurora.Seats += 0 -> driverSeat - aurora.Seats += 1 -> normalSeat - aurora.Seats += 2 -> normalSeat - aurora.Seats += 3 -> normalSeat - aurora.Seats += 4 -> normalSeat - aurora.controlledWeapons(seat = 1, weapon = 5) - aurora.controlledWeapons(seat = 2, weapon = 6) - aurora.Weapons += 5 -> aurora_weapon_systema - aurora.Weapons += 6 -> aurora_weapon_systemb - aurora.MountPoints += 1 -> MountInfo(0) - aurora.MountPoints += 2 -> MountInfo(1) - aurora.MountPoints += 3 -> MountInfo(2) - aurora.MountPoints += 4 -> MountInfo(3) - aurora.MountPoints += 5 -> MountInfo(4) - aurora.subsystems = controlSubsystem - aurora.TrunkSize = InventoryTile.Tile1515 - aurora.TrunkOffset = 30 - aurora.TrunkLocation = Vector3(-3.46f, 0f, 0f) - aurora.AutoPilotSpeeds = (18, 6) - aurora.DestroyedModel = Some(DestroyedVehicle.MediumTransport) - aurora.Subtract.Damage1 = 7 - aurora.JackingDuration = Array(0, 25, 8, 5) - aurora.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 200 - Damage1 = 300 - DamageRadius = 12 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - aurora.DrownAtMaxDepth = false - aurora.MaxDepth = 2f - aurora.UnderwaterLifespan(suffocation = -1, recovery = -1) - aurora.Geometry = delivererForm - aurora.collision.avatarCollisionDamageMax = 120 - aurora.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 35), (0.5f, 60), (0.75f, 110), (1f, 175))) - aurora.collision.z = CollisionZData(Array((5f, 1), (15f, 50), (25f, 200), (30f, 750), (32.5f, 2000))) - aurora.maxForwardSpeed = 65f - aurora.mass = 108.5f - - apc_tr.Name = "apc_tr" // Juggernaut - apc_tr.MaxHealth = 6000 - apc_tr.Damageable = true - apc_tr.Repairable = true - apc_tr.RepairIfDestroyed = false - apc_tr.MaxShields = 1200 - apc_tr.Seats += 0 -> normalSeat - apc_tr.Seats += 1 -> normalSeat - apc_tr.Seats += 2 -> normalSeat - apc_tr.Seats += 3 -> normalSeat - apc_tr.Seats += 4 -> normalSeat - apc_tr.Seats += 5 -> normalSeat - apc_tr.Seats += 6 -> normalSeat - apc_tr.Seats += 7 -> normalSeat - apc_tr.Seats += 8 -> normalSeat - apc_tr.Seats += 9 -> maxOnlySeat - apc_tr.Seats += 10 -> maxOnlySeat - apc_tr.controlledWeapons(seat = 1, weapon = 11) - apc_tr.controlledWeapons(seat = 2, weapon = 12) - apc_tr.controlledWeapons(seat = 5, weapon = 15) - apc_tr.controlledWeapons(seat = 6, weapon = 16) - apc_tr.controlledWeapons(seat = 7, weapon = 13) - apc_tr.controlledWeapons(seat = 8, weapon = 14) - apc_tr.Weapons += 11 -> apc_weapon_systemc_tr - apc_tr.Weapons += 12 -> apc_weapon_systemb - apc_tr.Weapons += 13 -> apc_weapon_systema - apc_tr.Weapons += 14 -> apc_weapon_systemd_tr - apc_tr.Weapons += 15 -> apc_ballgun_r - apc_tr.Weapons += 16 -> apc_ballgun_l - apc_tr.MountPoints += 1 -> MountInfo(0) - apc_tr.MountPoints += 2 -> MountInfo(0) - apc_tr.MountPoints += 3 -> MountInfo(1) - apc_tr.MountPoints += 4 -> MountInfo(2) - apc_tr.MountPoints += 5 -> MountInfo(3) - apc_tr.MountPoints += 6 -> MountInfo(4) - apc_tr.MountPoints += 7 -> MountInfo(5) - apc_tr.MountPoints += 8 -> MountInfo(6) - apc_tr.MountPoints += 9 -> MountInfo(7) - apc_tr.MountPoints += 10 -> MountInfo(8) - apc_tr.MountPoints += 11 -> MountInfo(9) - apc_tr.MountPoints += 12 -> MountInfo(10) - apc_tr.subsystems = controlSubsystem - apc_tr.TrunkSize = InventoryTile.Tile2016 - apc_tr.TrunkOffset = 30 - apc_tr.TrunkLocation = Vector3(-5.82f, 0f, 0f) - apc_tr.AutoPilotSpeeds = (16, 6) - apc_tr.DestroyedModel = Some(DestroyedVehicle.Apc) - apc_tr.JackingDuration = Array(0, 45, 15, 10) - apc_tr.RadiationShielding = 0.5f - apc_tr.Subtract.Damage1 = 10 - apc_tr.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 300 - Damage1 = 450 - DamageRadius = 15 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - apc_tr.DrownAtMaxDepth = true - apc_tr.MaxDepth = 3 - apc_tr.UnderwaterLifespan(suffocation = 15000L, recovery = 7500L) - apc_tr.Geometry = apcForm - apc_tr.MaxCapacitor = 300 - apc_tr.CapacitorRecharge = 1 - apc_tr.collision.avatarCollisionDamageMax = 300 - apc_tr.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 10), (0.5f, 40), (0.75f, 70), (1f, 110))) - apc_tr.collision.z = CollisionZData(Array((2f, 1), (6f, 50), (10f, 300), (12f, 1000), (13f, 3000))) - apc_tr.maxForwardSpeed = 60f - apc_tr.mass = 128.4f - - apc_nc.Name = "apc_nc" // Vindicator - apc_nc.MaxHealth = 6000 - apc_nc.Damageable = true - apc_nc.Repairable = true - apc_nc.RepairIfDestroyed = false - apc_nc.MaxShields = 1200 - apc_nc.Seats += 0 -> normalSeat - apc_nc.Seats += 1 -> normalSeat - apc_nc.Seats += 2 -> normalSeat - apc_nc.Seats += 3 -> normalSeat - apc_nc.Seats += 4 -> normalSeat - apc_nc.Seats += 5 -> normalSeat - apc_nc.Seats += 6 -> normalSeat - apc_nc.Seats += 7 -> normalSeat - apc_nc.Seats += 8 -> normalSeat - apc_nc.Seats += 9 -> maxOnlySeat - apc_nc.Seats += 10 -> maxOnlySeat - apc_nc.controlledWeapons(seat = 1, weapon = 11) - apc_nc.controlledWeapons(seat = 2, weapon = 12) - apc_nc.controlledWeapons(seat = 5, weapon = 15) - apc_nc.controlledWeapons(seat = 6, weapon = 16) - apc_nc.controlledWeapons(seat = 7, weapon = 13) - apc_nc.controlledWeapons(seat = 8, weapon = 14) - apc_nc.Weapons += 11 -> apc_weapon_systemc_nc - apc_nc.Weapons += 12 -> apc_weapon_systemb - apc_nc.Weapons += 13 -> apc_weapon_systema - apc_nc.Weapons += 14 -> apc_weapon_systemd_nc - apc_nc.Weapons += 15 -> apc_ballgun_r - apc_nc.Weapons += 16 -> apc_ballgun_l - apc_nc.MountPoints += 1 -> MountInfo(0) - apc_nc.MountPoints += 2 -> MountInfo(0) - apc_nc.MountPoints += 3 -> MountInfo(1) - apc_nc.MountPoints += 4 -> MountInfo(2) - apc_nc.MountPoints += 5 -> MountInfo(3) - apc_nc.MountPoints += 6 -> MountInfo(4) - apc_nc.MountPoints += 7 -> MountInfo(5) - apc_nc.MountPoints += 8 -> MountInfo(6) - apc_nc.MountPoints += 9 -> MountInfo(7) - apc_nc.MountPoints += 10 -> MountInfo(8) - apc_nc.MountPoints += 11 -> MountInfo(9) - apc_nc.MountPoints += 12 -> MountInfo(10) - apc_nc.subsystems = controlSubsystem - apc_nc.TrunkSize = InventoryTile.Tile2016 - apc_nc.TrunkOffset = 30 - apc_nc.TrunkLocation = Vector3(-5.82f, 0f, 0f) - apc_nc.AutoPilotSpeeds = (16, 6) - apc_nc.DestroyedModel = Some(DestroyedVehicle.Apc) - apc_nc.JackingDuration = Array(0, 45, 15, 10) - apc_nc.RadiationShielding = 0.5f - apc_nc.Subtract.Damage1 = 10 - apc_nc.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 300 - Damage1 = 450 - DamageRadius = 15 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - apc_nc.DrownAtMaxDepth = true - apc_nc.MaxDepth = 3 - apc_nc.UnderwaterLifespan(suffocation = 15000L, recovery = 7500L) - apc_nc.Geometry = apcForm - apc_nc.MaxCapacitor = 300 - apc_nc.CapacitorRecharge = 1 - apc_nc.collision.avatarCollisionDamageMax = 300 - apc_nc.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 10), (0.5f, 40), (0.75f, 70), (1f, 110))) - apc_nc.collision.z = CollisionZData(Array((2f, 1), (6f, 50), (10f, 300), (12f, 1000), (13f, 3000))) - apc_nc.maxForwardSpeed = 60f - apc_nc.mass = 128.4f - - apc_vs.Name = "apc_vs" // Leviathan - apc_vs.MaxHealth = 6000 - apc_vs.Damageable = true - apc_vs.Repairable = true - apc_vs.RepairIfDestroyed = false - apc_vs.MaxShields = 1200 - apc_vs.Seats += 0 -> normalSeat - apc_vs.Seats += 1 -> normalSeat - apc_vs.Seats += 2 -> normalSeat - apc_vs.Seats += 3 -> normalSeat - apc_vs.Seats += 4 -> normalSeat - apc_vs.Seats += 5 -> normalSeat - apc_vs.Seats += 6 -> normalSeat - apc_vs.Seats += 7 -> normalSeat - apc_vs.Seats += 8 -> normalSeat - apc_vs.Seats += 9 -> maxOnlySeat - apc_vs.Seats += 10 -> maxOnlySeat - apc_vs.controlledWeapons(seat = 1, weapon = 11) - apc_vs.controlledWeapons(seat = 2, weapon = 12) - apc_vs.controlledWeapons(seat = 5, weapon = 15) - apc_vs.controlledWeapons(seat = 6, weapon = 16) - apc_vs.controlledWeapons(seat = 7, weapon = 13) - apc_vs.controlledWeapons(seat = 8, weapon = 14) - apc_vs.Weapons += 11 -> apc_weapon_systemc_vs - apc_vs.Weapons += 12 -> apc_weapon_systemb - apc_vs.Weapons += 13 -> apc_weapon_systema - apc_vs.Weapons += 14 -> apc_weapon_systemd_vs - apc_vs.Weapons += 15 -> apc_ballgun_r - apc_vs.Weapons += 16 -> apc_ballgun_l - apc_vs.MountPoints += 1 -> MountInfo(0) - apc_vs.MountPoints += 2 -> MountInfo(0) - apc_vs.MountPoints += 3 -> MountInfo(1) - apc_vs.MountPoints += 4 -> MountInfo(2) - apc_vs.MountPoints += 5 -> MountInfo(3) - apc_vs.MountPoints += 6 -> MountInfo(4) - apc_vs.MountPoints += 7 -> MountInfo(5) - apc_vs.MountPoints += 8 -> MountInfo(6) - apc_vs.MountPoints += 9 -> MountInfo(7) - apc_vs.MountPoints += 10 -> MountInfo(8) - apc_vs.MountPoints += 11 -> MountInfo(9) - apc_vs.MountPoints += 12 -> MountInfo(10) - apc_vs.subsystems = controlSubsystem - apc_vs.TrunkSize = InventoryTile.Tile2016 - apc_vs.TrunkOffset = 30 - apc_vs.TrunkLocation = Vector3(-5.82f, 0f, 0f) - apc_vs.AutoPilotSpeeds = (16, 6) - apc_vs.DestroyedModel = Some(DestroyedVehicle.Apc) - apc_vs.JackingDuration = Array(0, 45, 15, 10) - apc_vs.RadiationShielding = 0.5f - apc_vs.Subtract.Damage1 = 10 - apc_vs.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 300 - Damage1 = 450 - DamageRadius = 15 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - apc_vs.DrownAtMaxDepth = true - apc_vs.MaxDepth = 3 - apc_vs.UnderwaterLifespan(suffocation = 15000L, recovery = 7500L) - apc_vs.Geometry = apcForm - apc_vs.MaxCapacitor = 300 - apc_vs.CapacitorRecharge = 1 - apc_vs.collision.avatarCollisionDamageMax = 300 - apc_vs.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 10), (0.5f, 40), (0.75f, 70), (1f, 110))) - apc_vs.collision.z = CollisionZData(Array((2f, 1), (6f, 50), (10f, 300), (12f, 1000), (13f, 3000))) - apc_vs.maxForwardSpeed = 60f - apc_vs.mass = 128.4f - - lightning.Name = "lightning" - lightning.MaxHealth = 2000 - lightning.Damageable = true - lightning.Repairable = true - lightning.RepairIfDestroyed = false - lightning.MaxShields = 400 - lightning.Seats += 0 -> driverSeat - lightning.controlledWeapons(seat = 0, weapon = 1) - lightning.Weapons += 1 -> lightning_weapon_system - lightning.MountPoints += 1 -> MountInfo(0) - lightning.MountPoints += 2 -> MountInfo(0) - lightning.subsystems = controlSubsystem - lightning.TrunkSize = InventoryTile.Tile1511 - lightning.TrunkOffset = 30 - lightning.TrunkLocation = Vector3(-3f, 0f, 0f) - lightning.AutoPilotSpeeds = (20, 8) - lightning.DestroyedModel = Some(DestroyedVehicle.Lightning) - lightning.RadiationShielding = 0.5f - lightning.Subtract.Damage1 = 7 - lightning.JackingDuration = Array(0, 20, 7, 5) - lightning.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 250 - Damage1 = 375 - DamageRadius = 10 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - lightning.DrownAtMaxDepth = true - lightning.MaxDepth = 1.38f - lightning.UnderwaterLifespan(suffocation = 12000L, recovery = 6000L) - lightning.Geometry = GeometryForm.representByCylinder(radius = 2.5078f, height = 1.79688f) - lightning.collision.avatarCollisionDamageMax = 150 - lightning.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 10), (0.5f, 25), (0.75f, 50), (1f, 80))) - lightning.collision.z = CollisionZData(Array((6f, 1), (18f, 50), (30f, 150), (36f, 300), (39f, 750))) - lightning.maxForwardSpeed = 74f - lightning.mass = 100.2f - - prowler.Name = "prowler" - prowler.MaxHealth = 4800 - prowler.Damageable = true - prowler.Repairable = true - prowler.RepairIfDestroyed = false - prowler.MaxShields = 960 - prowler.Seats += 0 -> driverSeat - prowler.Seats += 1 -> normalSeat - prowler.Seats += 2 -> normalSeat - prowler.controlledWeapons(seat = 1, weapon = 3) - prowler.controlledWeapons(seat = 2, weapon = 4) - prowler.Weapons += 3 -> prowler_weapon_systemA - prowler.Weapons += 4 -> prowler_weapon_systemB - prowler.MountPoints += 1 -> MountInfo(0) - prowler.MountPoints += 2 -> MountInfo(1) - prowler.MountPoints += 3 -> MountInfo(2) - prowler.subsystems = controlSubsystem - prowler.TrunkSize = InventoryTile.Tile1511 - prowler.TrunkOffset = 30 - prowler.TrunkLocation = Vector3(-4.71f, 0f, 0f) - prowler.AutoPilotSpeeds = (14, 6) - prowler.DestroyedModel = Some(DestroyedVehicle.Prowler) - prowler.RadiationShielding = 0.5f - prowler.Subtract.Damage1 = 9 - prowler.JackingDuration = Array(0, 30, 10, 5) - prowler.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 250 - Damage1 = 375 - DamageRadius = 12 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - prowler.DrownAtMaxDepth = true - prowler.MaxDepth = 3 - prowler.UnderwaterLifespan(suffocation = 12000L, recovery = 6000L) - prowler.Geometry = GeometryForm.representByCylinder(radius = 3.461f, height = 3.48438f) - prowler.collision.avatarCollisionDamageMax = 300 - prowler.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 15), (0.5f, 40), (0.75f, 75), (1f, 100))) - prowler.collision.z = CollisionZData(Array((5f, 1), (15f, 50), (25f, 250), (30f, 600), (32.5f, 1500))) - prowler.maxForwardSpeed = 57f - prowler.mass = 510.5f - - vanguard.Name = "vanguard" - vanguard.MaxHealth = 5400 - vanguard.Damageable = true - vanguard.Repairable = true - vanguard.RepairIfDestroyed = false - vanguard.MaxShields = 1080 - vanguard.Seats += 0 -> driverSeat - vanguard.Seats += 1 -> normalSeat - vanguard.controlledWeapons(seat = 1, weapon = 2) - vanguard.Weapons += 2 -> vanguard_weapon_system - vanguard.MountPoints += 1 -> MountInfo(0) - vanguard.MountPoints += 2 -> MountInfo(1) - vanguard.subsystems = controlSubsystem - vanguard.TrunkSize = InventoryTile.Tile1511 - vanguard.TrunkOffset = 30 - vanguard.TrunkLocation = Vector3(-4.84f, 0f, 0f) - vanguard.AutoPilotSpeeds = (16, 6) - vanguard.DestroyedModel = Some(DestroyedVehicle.Vanguard) - vanguard.RadiationShielding = 0.5f - vanguard.Subtract.Damage1 = 9 - vanguard.JackingDuration = Array(0, 30, 10, 5) - vanguard.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 250 - Damage1 = 375 - DamageRadius = 12 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - vanguard.DrownAtMaxDepth = true - vanguard.MaxDepth = 2.7f - vanguard.UnderwaterLifespan(suffocation = 12000L, recovery = 6000L) - vanguard.Geometry = GeometryForm.representByCylinder(radius = 3.8554f, height = 2.60938f) - vanguard.collision.avatarCollisionDamageMax = 300 - vanguard.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 5), (0.5f, 20), (0.75f, 40), (1f, 60))) - vanguard.collision.z = CollisionZData(Array((5f, 1), (15f, 50), (25f, 100), (30f, 250), (32.5f, 600))) - vanguard.maxForwardSpeed = 60f - vanguard.mass = 460.4f - - magrider.Name = "magrider" - magrider.MaxHealth = 4200 - magrider.Damageable = true - magrider.Repairable = true - magrider.RepairIfDestroyed = false - magrider.MaxShields = 840 - magrider.Seats += 0 -> driverSeat - magrider.Seats += 1 -> normalSeat - magrider.controlledWeapons(seat = 0, weapon = 2) - magrider.controlledWeapons(seat = 1, weapon = 3) - magrider.Weapons += 2 -> particle_beam_magrider - magrider.Weapons += 3 -> heavy_rail_beam_magrider - magrider.MountPoints += 1 -> MountInfo(0) - magrider.MountPoints += 2 -> MountInfo(1) - magrider.subsystems = controlSubsystem - magrider.TrunkSize = InventoryTile.Tile1511 - magrider.TrunkOffset = 30 - magrider.TrunkLocation = Vector3(5.06f, 0f, 0f) - magrider.AutoPilotSpeeds = (18, 6) - magrider.DestroyedModel = Some(DestroyedVehicle.Magrider) - magrider.RadiationShielding = 0.5f - magrider.Subtract.Damage1 = 9 - magrider.JackingDuration = Array(0, 30, 10, 5) - magrider.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 250 - Damage1 = 375 - DamageRadius = 12 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - magrider.DrownAtMaxDepth = true - magrider.MaxDepth = 2 - magrider.UnderwaterLifespan(suffocation = 45000L, recovery = 5000L) //but the magrider hovers over water, so ...? - magrider.Geometry = GeometryForm.representByCylinder(radius = 3.3008f, height = 3.26562f) - magrider.collision.avatarCollisionDamageMax = 225 - magrider.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 35), (0.5f, 70), (0.75f, 90), (1f, 120))) - magrider.collision.z = CollisionZData(Array((5f, 1), (15f, 50), (25f, 250), (30f, 600), (32.5f, 1500))) - magrider.maxForwardSpeed = 65f - magrider.mass = 75.3f - - val utilityConverter = new UtilityVehicleConverter - ant.Name = "ant" - ant.MaxHealth = 2000 - ant.Damageable = true - ant.Repairable = true - ant.RepairIfDestroyed = false - ant.MaxShields = 400 - ant.Seats += 0 -> driverSeat - ant.MountPoints += 1 -> MountInfo(0) - ant.MountPoints += 2 -> MountInfo(0) - ant.subsystems = controlSubsystem - ant.Deployment = true - ant.DeployTime = 1500 - ant.UndeployTime = 1500 - ant.AutoPilotSpeeds = (18, 6) - ant.MaxNtuCapacitor = 1500 - ant.Packet = utilityConverter - ant.DestroyedModel = Some(DestroyedVehicle.Ant) - ant.RadiationShielding = 0.5f - ant.Subtract.Damage1 = 5 - ant.JackingDuration = Array(0, 60, 20, 15) - ant.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 300 - Damage1 = 450 - DamageRadius = 12 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - ant.DrownAtMaxDepth = true - ant.MaxDepth = 2 - ant.UnderwaterLifespan(suffocation = 12000L, recovery = 6000L) - ant.Geometry = GeometryForm.representByCylinder(radius = 2.16795f, height = 2.09376f) //TODO hexahedron - ant.collision.avatarCollisionDamageMax = 50 - ant.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 10), (0.5f, 30), (0.75f, 50), (1f, 70))) - ant.collision.z = CollisionZData(Array((2f, 1), (6f, 50), (10f, 250), (12f, 500), (13f, 750))) - ant.maxForwardSpeed = 65f - ant.mass = 80.5f - - ams.Name = "ams" - ams.MaxHealth = 3000 - ams.Damageable = true - ams.Repairable = true - ams.RepairIfDestroyed = false - ams.MaxShields = 600 + 1 - ams.Seats += 0 -> driverSeat - ams.MountPoints += 1 -> MountInfo(0) - ams.MountPoints += 2 -> MountInfo(0) - ams.Utilities += 1 -> UtilityType.matrix_terminalc - ams.Utilities += 2 -> UtilityType.ams_respawn_tube - ams.Utilities += 3 -> UtilityType.order_terminala - ams.Utilities += 4 -> UtilityType.order_terminalb - ams.subsystems = controlSubsystem - ams.Deployment = true - ams.DeployTime = 2000 - ams.UndeployTime = 2000 - ams.DeconstructionTime = Some(20 minutes) - ams.AutoPilotSpeeds = (18, 6) - ams.Packet = utilityConverter - ams.DestroyedModel = Some(DestroyedVehicle.Ams) - ams.RadiationShielding = 0.5f - ams.Subtract.Damage1 = 10 - ams.JackingDuration = Array(0, 60, 20, 15) - ams.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.Splash - Damage0 = 300 - Damage1 = 450 - DamageRadius = 15 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - ams.DrownAtMaxDepth = true - ams.MaxDepth = 3 - ams.UnderwaterLifespan(suffocation = 5000L, recovery = 5000L) - ams.Geometry = GeometryForm.representByCylinder(radius = 3.0117f, height = 3.39062f) //TODO hexahedron - ams.collision.avatarCollisionDamageMax = 250 - ams.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 10), (0.5f, 40), (0.75f, 60), (1f, 100))) - ams.collision.z = CollisionZData(Array((2f, 1), (6f, 50), (10f, 250), (12f, 805), (13f, 3000))) - ams.maxForwardSpeed = 70f - ams.mass = 136.8f - - val variantConverter = new VariantVehicleConverter - router.Name = "router" - router.MaxHealth = 4000 - router.Damageable = true - router.Repairable = true - router.RepairIfDestroyed = false - router.MaxShields = 800 - router.Seats += 0 -> normalSeat - router.MountPoints += 1 -> MountInfo(0) - router.Utilities += 1 -> UtilityType.teleportpad_terminal - router.Utilities += 2 -> UtilityType.internal_router_telepad_deployable - router.subsystems = controlSubsystem - router.TrunkSize = InventoryTile.Tile1511 - router.TrunkOffset = 30 - router.TrunkLocation = Vector3(0f, 3.4f, 0f) - router.Deployment = true - router.DeployTime = 2000 - router.UndeployTime = 2000 - router.DeconstructionTime = Duration(20, "minutes") - router.AutoPilotSpeeds = (16, 6) - router.Packet = variantConverter - router.DestroyedModel = Some(DestroyedVehicle.Router) - router.RadiationShielding = 0.5f - router.Subtract.Damage1 = 5 - router.JackingDuration = Array(0, 20, 7, 5) - router.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 200 - Damage1 = 300 - DamageRadius = 10 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - router.DrownAtMaxDepth = true - router.MaxDepth = 2 - router.UnderwaterLifespan(suffocation = 45000L, recovery = 5000L) //but the router hovers over water, so ...? - router.Geometry = GeometryForm.representByCylinder(radius = 3.64845f, height = 3.51563f) //TODO hexahedron - router.collision.avatarCollisionDamageMax = 150 //it has to bonk you on the head when it falls? - router.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 13), (0.5f, 35), (0.75f, 65), (1f, 90))) - router.collision.z = CollisionZData(Array((6f, 1), (18f, 50), (30f, 150), (36f, 350), (39f, 900))) - router.maxForwardSpeed = 60f - router.mass = 60f - - switchblade.Name = "switchblade" - switchblade.MaxHealth = 1750 - switchblade.Damageable = true - switchblade.Repairable = true - switchblade.RepairIfDestroyed = false - switchblade.MaxShields = 350 - switchblade.Seats += 0 -> normalSeat - switchblade.controlledWeapons(seat = 0, weapon = 1) - switchblade.Weapons += 1 -> scythe - switchblade.MountPoints += 1 -> MountInfo(0) - switchblade.MountPoints += 2 -> MountInfo(0) - switchblade.subsystems = controlSubsystem - switchblade.TrunkSize = InventoryTile.Tile1511 - switchblade.TrunkOffset = 30 - switchblade.TrunkLocation = Vector3(-2.5f, 0f, 0f) - switchblade.Deployment = true - switchblade.DeployTime = 2000 - switchblade.UndeployTime = 2000 - switchblade.AutoPilotSpeeds = (22, 8) - switchblade.Packet = variantConverter - switchblade.DestroyedModel = Some(DestroyedVehicle.Switchblade) - switchblade.RadiationShielding = 0.5f - switchblade.Subtract.Damage0 = 5 - switchblade.Subtract.Damage1 = 5 - switchblade.JackingDuration = Array(0, 20, 7, 5) - switchblade.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 200 - Damage1 = 300 - DamageRadius = 10 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - switchblade.DrownAtMaxDepth = true - switchblade.MaxDepth = 2 - switchblade.UnderwaterLifespan( - suffocation = 45000L, - recovery = 5000L - ) //but the switchblade hovers over water, so ...? - switchblade.Geometry = GeometryForm.representByCylinder(radius = 2.4335f, height = 2.73438f) - switchblade.collision.avatarCollisionDamageMax = 35 - switchblade.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 13), (0.5f, 35), (0.75f, 65), (1f, 90))) - switchblade.collision.z = CollisionZData(Array((6f, 1), (18f, 50), (30f, 150), (36f, 350), (39f, 800))) - switchblade.maxForwardSpeed = 80f - switchblade.mass = 63.9f - - flail.Name = "flail" - flail.MaxHealth = 2400 - flail.Damageable = true - flail.Repairable = true - flail.RepairIfDestroyed = false - flail.MaxShields = 480 - flail.Seats += 0 -> normalSeat - flail.controlledWeapons(seat = 0, weapon = 1) - flail.Weapons += 1 -> flail_weapon - flail.Utilities += 2 -> UtilityType.targeting_laser_dispenser - flail.MountPoints += 1 -> MountInfo(0) - flail.subsystems = controlSubsystem - flail.TrunkSize = InventoryTile.Tile1511 - flail.TrunkOffset = 30 - flail.TrunkLocation = Vector3(-3.75f, 0f, 0f) - flail.Deployment = true - flail.DeployTime = 5500 - flail.UndeployTime = 5500 - flail.AutoPilotSpeeds = (14, 6) - flail.Packet = variantConverter - flail.DestroyedModel = Some(DestroyedVehicle.Flail) - flail.RadiationShielding = 0.5f - flail.Subtract.Damage1 = 7 - flail.JackingDuration = Array(0, 20, 7, 5) - flail.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 200 - Damage1 = 300 - DamageRadius = 10 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - flail.DrownAtMaxDepth = true - flail.MaxDepth = 2 - flail.UnderwaterLifespan(suffocation = 45000L, recovery = 5000L) //but the flail hovers over water, so ...? - flail.Geometry = GeometryForm.representByCylinder(radius = 2.1875f, height = 2.21875f) - flail.collision.avatarCollisionDamageMax = 175 - flail.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 12), (0.5f, 35), (0.75f, 65), (1f, 90))) - flail.collision.z = CollisionZData(Array((6f, 1), (18f, 50), (30f, 150), (36f, 350), (39f, 900))) - flail.maxForwardSpeed = 55f - flail.mass = 73.5f - } - - /** - * Initialize flight `VehicleDefinition` globals. - */ - private def init_flight_vehicles(): Unit = { - val liberatorForm = GeometryForm.representByCylinder(radius = 3.74615f, height = 2.51563f) _ - val bailableSeat = new SeatDefinition() { - bailable = true - } - - val flightSubsystems = List(VehicleSubsystemEntry.Controls, VehicleSubsystemEntry.Ejection) - - val variantConverter = new VariantVehicleConverter - mosquito.Name = "mosquito" - mosquito.MaxHealth = 665 - mosquito.Damageable = true - mosquito.Repairable = true - mosquito.RepairIfDestroyed = false - mosquito.MaxShields = 133 - mosquito.CanFly = true - mosquito.Seats += 0 -> bailableSeat - mosquito.controlledWeapons(seat = 0, weapon = 1) - mosquito.Weapons += 1 -> rotarychaingun_mosquito - mosquito.MountPoints += 1 -> MountInfo(0) - mosquito.MountPoints += 2 -> MountInfo(0) - mosquito.subsystems = flightSubsystems :+ VehicleSubsystemEntry.MosquitoRadar - mosquito.TrunkSize = InventoryTile.Tile1111 - mosquito.TrunkOffset = 30 - mosquito.TrunkLocation = Vector3(-4.6f, 0f, 0f) - mosquito.AutoPilotSpeeds = (0, 6) - mosquito.Packet = variantConverter - mosquito.DestroyedModel = Some(DestroyedVehicle.Mosquito) - mosquito.JackingDuration = Array(0, 20, 7, 5) - mosquito.RadiationShielding = 0.5f - mosquito.DamageUsing = DamageCalculations.AgainstAircraft - mosquito.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 200 - Damage1 = 300 - DamageRadius = 10 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - mosquito.DrownAtMaxDepth = true - mosquito.MaxDepth = 2 //flying vehicles will automatically disable - mosquito.Geometry = GeometryForm.representByCylinder(radius = 2.72108f, height = 2.5f) - mosquito.collision.avatarCollisionDamageMax = 50 - mosquito.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 50), (0.5f, 100), (0.75f, 150), (1f, 200))) - mosquito.collision.z = CollisionZData(Array((3f, 1), (9f, 25), (15f, 50), (18f, 75), (19.5f, 100))) - mosquito.maxForwardSpeed = 120f - mosquito.mass = 53.6f - - lightgunship.Name = "lightgunship" // Reaver - lightgunship.MaxHealth = 855 // Temporary - Correct Reaver Health from pre-"Coder Madness 2" Event - lightgunship.Damageable = true - lightgunship.Repairable = true - lightgunship.RepairIfDestroyed = false - lightgunship.MaxShields = 171 // Temporary - Correct Reaver Shields from pre-"Coder Madness 2" Event - lightgunship.CanFly = true - lightgunship.Seats += 0 -> bailableSeat - lightgunship.controlledWeapons(seat = 0, weapon = 1) - lightgunship.Weapons += 1 -> lightgunship_weapon_system - lightgunship.MountPoints += 1 -> MountInfo(0) - lightgunship.MountPoints += 2 -> MountInfo(0) - lightgunship.subsystems = flightSubsystems - lightgunship.TrunkSize = InventoryTile.Tile1511 - lightgunship.TrunkOffset = 30 - lightgunship.TrunkLocation = Vector3(-5.61f, 0f, 0f) - lightgunship.AutoPilotSpeeds = (0, 4) - lightgunship.Packet = variantConverter - lightgunship.DestroyedModel = Some(DestroyedVehicle.LightGunship) - lightgunship.RadiationShielding = 0.5f - lightgunship.Subtract.Damage1 = 3 - lightgunship.JackingDuration = Array(0, 30, 10, 5) - lightgunship.DamageUsing = DamageCalculations.AgainstAircraft - lightgunship.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 250 - Damage1 = 375 - DamageRadius = 12 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - lightgunship.DrownAtMaxDepth = true - lightgunship.MaxDepth = 2 //flying vehicles will automatically disable - lightgunship.Geometry = GeometryForm.representByCylinder(radius = 2.375f, height = 1.98438f) - lightgunship.collision.avatarCollisionDamageMax = 75 - lightgunship.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 60), (0.5f, 120), (0.75f, 180), (1f, 250))) - lightgunship.collision.z = CollisionZData(Array((3f, 1), (9f, 30), (15f, 60), (18f, 90), (19.5f, 125))) - lightgunship.maxForwardSpeed = 104f - lightgunship.mass = 51.1f - - wasp.Name = "wasp" - wasp.MaxHealth = 515 - wasp.Damageable = true - wasp.Repairable = true - wasp.RepairIfDestroyed = false - wasp.MaxShields = 103 - wasp.CanFly = true - wasp.Seats += 0 -> bailableSeat - wasp.controlledWeapons(seat = 0, weapon = 1) - wasp.Weapons += 1 -> wasp_weapon_system - wasp.MountPoints += 1 -> MountInfo(0) - wasp.MountPoints += 2 -> MountInfo(0) - wasp.subsystems = flightSubsystems - wasp.TrunkSize = InventoryTile.Tile1111 - wasp.TrunkOffset = 30 - wasp.TrunkLocation = Vector3(-4.6f, 0f, 0f) - wasp.AutoPilotSpeeds = (0, 6) - wasp.Packet = variantConverter - wasp.DestroyedModel = Some(DestroyedVehicle.Mosquito) //set_resource_parent wasp game_objects mosquito - wasp.JackingDuration = Array(0, 20, 7, 5) - wasp.DamageUsing = DamageCalculations.AgainstAircraft - wasp.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 200 - Damage1 = 300 - DamageRadius = 10 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - wasp.DrownAtMaxDepth = true - wasp.MaxDepth = 2 //flying vehicles will automatically disable - wasp.Geometry = GeometryForm.representByCylinder(radius = 2.88675f, height = 2.5f) - wasp.collision.avatarCollisionDamageMax = 50 //mosquito numbers - wasp.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 50), (0.5f, 100), (0.75f, 150), (1f, 200))) //mosquito numbers - wasp.collision.z = CollisionZData(Array((3f, 1), (9f, 25), (15f, 50), (18f, 75), (19.5f, 100))) //mosquito numbers - wasp.maxForwardSpeed = 120f - wasp.mass = 53.6f - - liberator.Name = "liberator" - liberator.MaxHealth = 2500 - liberator.Damageable = true - liberator.Repairable = true - liberator.RepairIfDestroyed = false - liberator.MaxShields = 500 - liberator.CanFly = true - liberator.Seats += 0 -> bailableSeat //new SeatDefinition() - liberator.Seats += 1 -> bailableSeat - liberator.Seats += 2 -> bailableSeat - liberator.controlledWeapons(seat = 0, weapon = 3) - liberator.controlledWeapons(seat = 1, weapon = 4) - liberator.controlledWeapons(seat = 2, weapon = 5) - liberator.Weapons += 3 -> liberator_weapon_system - liberator.Weapons += 4 -> liberator_bomb_bay - liberator.Weapons += 5 -> liberator_25mm_cannon - liberator.MountPoints += 1 -> MountInfo(0) - liberator.MountPoints += 2 -> MountInfo(1) - liberator.MountPoints += 3 -> MountInfo(1) - liberator.MountPoints += 4 -> MountInfo(2) - liberator.subsystems = flightSubsystems - liberator.TrunkSize = InventoryTile.Tile1515 - liberator.TrunkOffset = 30 - liberator.TrunkLocation = Vector3(-0.76f, -1.88f, 0f) - liberator.AutoPilotSpeeds = (0, 4) - liberator.Packet = variantConverter - liberator.DestroyedModel = Some(DestroyedVehicle.Liberator) - liberator.RadiationShielding = 0.5f - liberator.Subtract.Damage1 = 5 - liberator.JackingDuration = Array(0, 30, 10, 5) - liberator.DamageUsing = DamageCalculations.AgainstAircraft - liberator.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 250 - Damage1 = 375 - DamageRadius = 12 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - liberator.DrownAtMaxDepth = true - liberator.MaxDepth = 2 //flying vehicles will automatically disable - liberator.Geometry = liberatorForm - liberator.collision.avatarCollisionDamageMax = 100 - liberator.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 60), (0.5f, 120), (0.75f, 180), (1f, 250))) - liberator.collision.z = CollisionZData(Array((3f, 1), (9f, 30), (15f, 60), (18f, 90), (19.5f, 125))) - liberator.maxForwardSpeed = 90f - liberator.mass = 82f - - vulture.Name = "vulture" - vulture.MaxHealth = 2500 - vulture.Damageable = true - vulture.Repairable = true - vulture.RepairIfDestroyed = false - vulture.MaxShields = 500 - vulture.CanFly = true - vulture.Seats += 0 -> bailableSeat //new SeatDefinition() - vulture.Seats += 1 -> bailableSeat - vulture.Seats += 2 -> bailableSeat - vulture.controlledWeapons(seat = 0, weapon = 3) - vulture.controlledWeapons(seat = 1, weapon = 4) - vulture.controlledWeapons(seat = 2, weapon = 5) - vulture.Weapons += 3 -> vulture_nose_weapon_system - vulture.Weapons += 4 -> vulture_bomb_bay - vulture.Weapons += 5 -> vulture_tail_cannon - vulture.MountPoints += 1 -> MountInfo(0) - vulture.MountPoints += 2 -> MountInfo(1) - vulture.MountPoints += 3 -> MountInfo(1) - vulture.MountPoints += 4 -> MountInfo(2) - vulture.subsystems = flightSubsystems - vulture.TrunkSize = InventoryTile.Tile1611 - vulture.TrunkOffset = 30 - vulture.TrunkLocation = Vector3(-0.76f, -1.88f, 0f) - vulture.AutoPilotSpeeds = (0, 4) - vulture.Packet = variantConverter - vulture.DestroyedModel = - Some(DestroyedVehicle.Liberator) //add_property vulture destroyedphysics liberator_destroyed - vulture.RadiationShielding = 0.5f - vulture.Subtract.Damage1 = 5 - vulture.JackingDuration = Array(0, 30, 10, 5) - vulture.DamageUsing = DamageCalculations.AgainstAircraft - vulture.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 250 - Damage1 = 375 - DamageRadius = 12 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - vulture.DrownAtMaxDepth = true - vulture.MaxDepth = 2 //flying vehicles will automatically disable - vulture.Geometry = liberatorForm - vulture.collision.avatarCollisionDamageMax = 100 - vulture.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 60), (0.5f, 120), (0.75f, 180), (1f, 250))) - vulture.collision.z = CollisionZData(Array((3f, 1), (9f, 30), (15f, 60), (18f, 90), (19.5f, 125))) - vulture.maxForwardSpeed = 97f - vulture.mass = 82f - - dropship.Name = "dropship" // Galaxy - dropship.MaxHealth = 5000 - dropship.Damageable = true - dropship.Repairable = true - dropship.RepairDistance = 20 - dropship.RepairIfDestroyed = false - dropship.MaxShields = 1000 - dropship.CanFly = true - dropship.Seats += 0 -> bailableSeat //new SeatDefinition() - dropship.Seats += 1 -> bailableSeat - dropship.Seats += 2 -> bailableSeat - dropship.Seats += 3 -> bailableSeat - dropship.Seats += 4 -> bailableSeat - dropship.Seats += 5 -> bailableSeat - dropship.Seats += 6 -> bailableSeat - dropship.Seats += 7 -> bailableSeat - dropship.Seats += 8 -> bailableSeat - dropship.Seats += 9 -> new SeatDefinition() { - bailable = true - restriction = MaxOnly - } - dropship.Seats += 10 -> new SeatDefinition() { - bailable = true - restriction = MaxOnly - } - dropship.Seats += 11 -> bailableSeat - dropship.controlledWeapons(seat = 1, weapon = 12) - dropship.controlledWeapons(seat = 2, weapon = 13) - dropship.controlledWeapons(seat = 11, weapon = 14) - dropship.Weapons += 12 -> cannon_dropship_20mm - dropship.Weapons += 13 -> cannon_dropship_20mm - dropship.Weapons += 14 -> dropship_rear_turret - dropship.Cargo += 15 -> new CargoDefinition() { - restriction = SmallCargo - } - dropship.MountPoints += 1 -> MountInfo(0) - dropship.MountPoints += 2 -> MountInfo(11) - dropship.MountPoints += 3 -> MountInfo(1) - dropship.MountPoints += 4 -> MountInfo(2) - dropship.MountPoints += 5 -> MountInfo(3) - dropship.MountPoints += 6 -> MountInfo(4) - dropship.MountPoints += 7 -> MountInfo(5) - dropship.MountPoints += 8 -> MountInfo(6) - dropship.MountPoints += 9 -> MountInfo(7) - dropship.MountPoints += 10 -> MountInfo(8) - dropship.MountPoints += 11 -> MountInfo(9) - dropship.MountPoints += 12 -> MountInfo(10) - dropship.MountPoints += 13 -> MountInfo(15) - dropship.subsystems = flightSubsystems - dropship.TrunkSize = InventoryTile.Tile1612 - dropship.TrunkOffset = 30 - dropship.TrunkLocation = Vector3(-7.39f, -4.96f, 0f) - dropship.AutoPilotSpeeds = (0, 4) - dropship.Packet = variantConverter - dropship.DestroyedModel = Some(DestroyedVehicle.Dropship) - dropship.RadiationShielding = 0.5f - dropship.Subtract.Damage1 = 7 - dropship.JackingDuration = Array(0, 60, 20, 10) - dropship.DamageUsing = DamageCalculations.AgainstAircraft - dropship.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 300 - Damage1 = 450 - DamageRadius = 30 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - dropship.DrownAtMaxDepth = true - dropship.MaxDepth = 2 - dropship.Geometry = GeometryForm.representByCylinder(radius = 10.52202f, height = 6.23438f) - dropship.collision.avatarCollisionDamageMax = 300 - dropship.collision.xy = CollisionXYData(Array((0.1f, 5), (0.25f, 125), (0.5f, 250), (0.75f, 500), (1f, 1000))) - dropship.collision.z = CollisionZData(Array((3f, 5), (9f, 125), (15f, 250), (18f, 500), (19.5f, 1000))) - dropship.maxForwardSpeed = 80f - dropship.mass = 133f - - galaxy_gunship.Name = "galaxy_gunship" - galaxy_gunship.MaxHealth = 6000 - galaxy_gunship.Damageable = true - galaxy_gunship.Repairable = true - galaxy_gunship.RepairDistance = 20 - galaxy_gunship.RepairIfDestroyed = false - galaxy_gunship.MaxShields = 1200 - galaxy_gunship.CanFly = true - galaxy_gunship.Seats += 0 -> bailableSeat //new SeatDefinition() - galaxy_gunship.Seats += 1 -> bailableSeat - galaxy_gunship.Seats += 2 -> bailableSeat - galaxy_gunship.Seats += 3 -> bailableSeat - galaxy_gunship.Seats += 4 -> bailableSeat - galaxy_gunship.Seats += 5 -> bailableSeat - galaxy_gunship.controlledWeapons(seat = 1, weapon = 6) - galaxy_gunship.controlledWeapons(seat = 2, weapon = 7) - galaxy_gunship.controlledWeapons(seat = 3, weapon = 8) - galaxy_gunship.controlledWeapons(seat = 4, weapon = 9) - galaxy_gunship.controlledWeapons(seat = 5, weapon = 10) - galaxy_gunship.Weapons += 6 -> galaxy_gunship_cannon - galaxy_gunship.Weapons += 7 -> galaxy_gunship_cannon - galaxy_gunship.Weapons += 8 -> galaxy_gunship_tailgun - galaxy_gunship.Weapons += 9 -> galaxy_gunship_gun - galaxy_gunship.Weapons += 10 -> galaxy_gunship_gun - galaxy_gunship.MountPoints += 1 -> MountInfo(0) - galaxy_gunship.MountPoints += 2 -> MountInfo(3) - galaxy_gunship.MountPoints += 3 -> MountInfo(1) - galaxy_gunship.MountPoints += 4 -> MountInfo(2) - galaxy_gunship.MountPoints += 5 -> MountInfo(4) - galaxy_gunship.MountPoints += 6 -> MountInfo(5) - galaxy_gunship.subsystems = flightSubsystems - galaxy_gunship.TrunkSize = InventoryTile.Tile1816 - galaxy_gunship.TrunkOffset = 30 - galaxy_gunship.TrunkLocation = Vector3(-9.85f, 0f, 0f) - galaxy_gunship.AutoPilotSpeeds = (0, 4) - galaxy_gunship.Packet = variantConverter - galaxy_gunship.DestroyedModel = - Some(DestroyedVehicle.Dropship) //the adb calls out a galaxy_gunship_destroyed but no such asset exists - galaxy_gunship.RadiationShielding = 0.5f - galaxy_gunship.Subtract.Damage1 = 7 - galaxy_gunship.JackingDuration = Array(0, 60, 20, 10) - galaxy_gunship.DamageUsing = DamageCalculations.AgainstAircraft - galaxy_gunship.Modifiers = GalaxyGunshipReduction(0.63f) - galaxy_gunship.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 300 - Damage1 = 450 - DamageRadius = 30 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - galaxy_gunship.DrownAtMaxDepth = true - galaxy_gunship.MaxDepth = 2 - galaxy_gunship.Geometry = GeometryForm.representByCylinder(radius = 9.2382f, height = 5.01562f) - galaxy_gunship.collision.avatarCollisionDamageMax = 300 - galaxy_gunship.collision.xy = CollisionXYData(Array((0.1f, 5), (0.25f, 125), (0.5f, 250), (0.75f, 500), (1f, 1000))) - galaxy_gunship.collision.z = CollisionZData(Array((3f, 5), (9f, 125), (15f, 250), (18f, 500), (19.5f, 1000))) - galaxy_gunship.maxForwardSpeed = 85f - galaxy_gunship.mass = 133f - - lodestar.Name = "lodestar" - lodestar.MaxHealth = 5000 - lodestar.Damageable = true - lodestar.Repairable = true - lodestar.RepairDistance = 20 - lodestar.RepairIfDestroyed = false - lodestar.MaxShields = 1000 - lodestar.CanFly = true - lodestar.Seats += 0 -> bailableSeat - lodestar.MountPoints += 1 -> MountInfo(0) - lodestar.MountPoints += 2 -> MountInfo(1) - lodestar.Cargo += 1 -> new CargoDefinition() - lodestar.Utilities += 2 -> UtilityType.lodestar_repair_terminal - lodestar.UtilityOffset += 2 -> Vector3(0, 20, 0) - lodestar.Utilities += 3 -> UtilityType.lodestar_repair_terminal - lodestar.UtilityOffset += 3 -> Vector3(0, -20, 0) - lodestar.Utilities += 4 -> UtilityType.multivehicle_rearm_terminal - lodestar.UtilityOffset += 4 -> Vector3(0, 20, 0) - lodestar.Utilities += 5 -> UtilityType.multivehicle_rearm_terminal - lodestar.UtilityOffset += 5 -> Vector3(0, -20, 0) - lodestar.Utilities += 6 -> UtilityType.bfr_rearm_terminal - lodestar.UtilityOffset += 6 -> Vector3(0, 20, 0) - lodestar.Utilities += 7 -> UtilityType.bfr_rearm_terminal - lodestar.UtilityOffset += 7 -> Vector3(0, -20, 0) - lodestar.subsystems = flightSubsystems - lodestar.TrunkSize = InventoryTile.Tile1612 - lodestar.TrunkOffset = 30 - lodestar.TrunkLocation = Vector3(6.85f, -6.8f, 0f) - lodestar.AutoPilotSpeeds = (0, 4) - lodestar.Packet = variantConverter - lodestar.DestroyedModel = Some(DestroyedVehicle.Lodestar) - lodestar.RadiationShielding = 0.5f - lodestar.Subtract.Damage1 = 7 - lodestar.JackingDuration = Array(0, 60, 20, 10) - lodestar.DamageUsing = DamageCalculations.AgainstAircraft - lodestar.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 300 - Damage1 = 450 - DamageRadius = 30 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - lodestar.DrownAtMaxDepth = true - lodestar.MaxDepth = 2 - lodestar.Geometry = GeometryForm.representByCylinder(radius = 7.8671f, height = 6.79688f) //TODO hexahedron - lodestar.collision.avatarCollisionDamageMax = 300 - lodestar.collision.xy = CollisionXYData(Array((0.1f, 5), (0.25f, 125), (0.5f, 250), (0.75f, 500), (1f, 1000))) - lodestar.collision.z = CollisionZData(Array((3f, 5), (9f, 125), (15f, 250), (18f, 500), (19.5f, 1000))) - lodestar.maxForwardSpeed = 80f - lodestar.mass = 128.2f - - phantasm.Name = "phantasm" - phantasm.MaxHealth = 2500 - phantasm.Damageable = true - phantasm.Repairable = true - phantasm.RepairIfDestroyed = false - phantasm.MaxShields = 500 - phantasm.CanCloak = true - phantasm.CanFly = true - phantasm.Seats += 0 -> bailableSeat - phantasm.Seats += 1 -> bailableSeat - phantasm.Seats += 2 -> bailableSeat - phantasm.Seats += 3 -> bailableSeat - phantasm.Seats += 4 -> bailableSeat - phantasm.MountPoints += 1 -> MountInfo(0) - phantasm.MountPoints += 2 -> MountInfo(1) - phantasm.MountPoints += 3 -> MountInfo(2) - phantasm.MountPoints += 4 -> MountInfo(3) - phantasm.MountPoints += 5 -> MountInfo(4) - phantasm.subsystems = flightSubsystems - phantasm.TrunkSize = InventoryTile.Tile1107 - phantasm.TrunkOffset = 30 - phantasm.TrunkLocation = Vector3(-6.16f, 0f, 0f) - phantasm.AutoPilotSpeeds = (0, 6) - phantasm.Packet = variantConverter - phantasm.DestroyedModel = None //the adb calls out a phantasm_destroyed but no such asset exists - phantasm.JackingDuration = Array(0, 60, 20, 10) - phantasm.RadiationShielding = 0.5f - phantasm.DamageUsing = DamageCalculations.AgainstAircraft - phantasm.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 100 - Damage1 = 150 - DamageRadius = 12 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - phantasm.DrownAtMaxDepth = true - phantasm.MaxDepth = 2 - phantasm.Geometry = GeometryForm.representByCylinder(radius = 5.2618f, height = 3f) - phantasm.collision.avatarCollisionDamageMax = 100 - phantasm.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 60), (0.5f, 120), (0.75f, 180), (1f, 250))) - phantasm.collision.z = CollisionZData(Array((3f, 1), (9f, 30), (15f, 60), (18f, 90), (19.5f, 125))) - phantasm.maxForwardSpeed = 140f - phantasm.mass = 100f - - droppod.Name = "droppod" - droppod.MaxHealth = 20000 - droppod.Damageable = false - droppod.Repairable = false - droppod.CanFly = true - droppod.Seats += 0 -> new SeatDefinition { - restriction = Unrestricted - } - droppod.MountPoints += 1 -> MountInfo(0) - droppod.TrunkSize = InventoryTile.None - droppod.Packet = new DroppodConverter() - droppod.DeconstructionTime = Some(5 seconds) - droppod.DestroyedModel = None //the adb calls out a droppod; the cyclic nature of this confounds me - droppod.DamageUsing = DamageCalculations.AgainstAircraft - droppod.DrownAtMaxDepth = false - droppod.mass = 2500f - - orbital_shuttle.Name = "orbital_shuttle" - orbital_shuttle.MaxHealth = 20000 - orbital_shuttle.Damageable = false - orbital_shuttle.Repairable = false - orbital_shuttle.CanFly = true - orbital_shuttle.CanBeOwned = None - orbital_shuttle.undergoesDecay = false - orbital_shuttle.Seats += 0 -> new SeatDefinition { - occupancy = 300 - restriction = Unrestricted - } - /* - these are close to the mount point offsets in the ADB; - physically, they correlate to positions in the HART building rather than with the shuttle model by itself; - set the shuttle pad based on the zonemap extraction values then position the shuttle relative to that pad; - rotation based on the shuttle should place these offsets in the HART lobby whose gantry hall corresponds to that mount index - */ - orbital_shuttle.MountPoints += 1 -> MountInfo(0, Vector3(-62, 4, -28.2f)) - orbital_shuttle.MountPoints += 2 -> MountInfo(0, Vector3(-62, 28, -28.2f)) - orbital_shuttle.MountPoints += 3 -> MountInfo(0, Vector3(-62, 4, -18.2f)) - orbital_shuttle.MountPoints += 4 -> MountInfo(0, Vector3(-62, 28, -18.2f)) - orbital_shuttle.MountPoints += 5 -> MountInfo(0, Vector3(62, 4, -28.2f)) - orbital_shuttle.MountPoints += 6 -> MountInfo(0, Vector3(62, 28, -28.2f)) - orbital_shuttle.MountPoints += 7 -> MountInfo(0, Vector3(62, 4, -18.2f)) - orbital_shuttle.MountPoints += 8 -> MountInfo(0, Vector3(62, 28, -18.2f)) - orbital_shuttle.TrunkSize = InventoryTile.None - orbital_shuttle.Packet = new OrbitalShuttleConverter - orbital_shuttle.DeconstructionTime = None - orbital_shuttle.DestroyedModel = None - orbital_shuttle.DamageUsing = DamageCalculations.AgainstNothing - orbital_shuttle.DrownAtMaxDepth = false - orbital_shuttle.mass = 25000f - } - - private def init_bfr_vehicles(): Unit = { - val driverSeat = new SeatDefinition() { - restriction = NoReinforcedOrMax - } - val bailableSeat = new SeatDefinition() { - restriction = NoReinforcedOrMax - bailable = true - } - val normalSeat = new SeatDefinition() - val bfrSubsystems = List( - VehicleSubsystemEntry.BattleframeMovementServos, - VehicleSubsystemEntry.BattleframeSensorArray, - VehicleSubsystemEntry.BattleframeShieldGenerator, - VehicleSubsystemEntry.BattleframeTrunk - ) - val bfrGunnerSubsystems = List( - VehicleSubsystemEntry.BattleframeLeftArm, - VehicleSubsystemEntry.BattleframeRightArm, - VehicleSubsystemEntry.BattleframeLeftWeapon, - VehicleSubsystemEntry.BattleframeRightWeapon, - VehicleSubsystemEntry.BattleframeGunnerWeapon - ) ++ bfrSubsystems - val bfrFlightSubsystems = List( - VehicleSubsystemEntry.BattleframeFlightLeftArm, - VehicleSubsystemEntry.BattleframeFlightRightArm, - VehicleSubsystemEntry.BattleframeFlightLeftWeapon, - VehicleSubsystemEntry.BattleframeFlightRightWeapon - ) ++ bfrSubsystems ++ List( - VehicleSubsystemEntry.BattleframeFlightPod - ) - - val battleFrameConverter = new BattleFrameRoboticsConverter - aphelion_gunner.Name = "aphelion_gunner" - aphelion_gunner.MaxHealth = 4500 - aphelion_gunner.Damageable = true - aphelion_gunner.Repairable = true - aphelion_gunner.RepairIfDestroyed = false - aphelion_gunner.shieldUiAttribute = 79 - aphelion_gunner.MaxShields = 3000 - aphelion_gunner.ShieldPeriodicDelay = 500 - aphelion_gunner.ShieldDamageDelay = 3500 - aphelion_gunner.ShieldAutoRecharge = 45 - aphelion_gunner.ShieldAutoRechargeSpecial = 85 - aphelion_gunner.DefaultShields = aphelion_gunner.MaxShields - aphelion_gunner.Seats += 0 -> driverSeat - aphelion_gunner.Seats += 1 -> normalSeat - aphelion_gunner.controlledWeapons(seat = 0, weapons = Set(2, 3)) - aphelion_gunner.controlledWeapons(seat = 1, weapon = 4) - aphelion_gunner.Weapons += 2 -> aphelion_ppa_left - aphelion_gunner.Weapons += 3 -> aphelion_ppa_right - aphelion_gunner.Weapons += 4 -> aphelion_plasma_rocket_pod - aphelion_gunner.MountPoints += 1 -> MountInfo(0) - aphelion_gunner.MountPoints += 2 -> MountInfo(1) - aphelion_gunner.subsystems = bfrGunnerSubsystems - aphelion_gunner.TrunkSize = InventoryTile.Tile1518 - aphelion_gunner.TrunkOffset = 30 - aphelion_gunner.TrunkLocation = Vector3(0f, -2f, 0f) - aphelion_gunner.AutoPilotSpeeds = (5, 1) - aphelion_gunner.Packet = battleFrameConverter - aphelion_gunner.DestroyedModel = None - aphelion_gunner.destructionDelay = Some(4000L) - aphelion_gunner.JackingDuration = Array(0, 62, 60, 30) - aphelion_gunner.RadiationShielding = 0.5f - aphelion_gunner.DamageUsing = DamageCalculations.AgainstBfr - aphelion_gunner.Model = BfrResolutions.calculate - aphelion_gunner.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 400 - Damage1 = 500 - DamageRadius = 10 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - aphelion_gunner.DrownAtMaxDepth = true - aphelion_gunner.MaxDepth = 5.09375f - aphelion_gunner.UnderwaterLifespan(suffocation = 60000L, recovery = 30000L) - aphelion_gunner.Geometry = GeometryForm.representByCylinder(radius = 1.2618f, height = 6.01562f) - aphelion_gunner.collision.avatarCollisionDamageMax = 300 - aphelion_gunner.collision.xy = CollisionXYData(Array((0.2f, 1), (0.35f, 5), (0.55f, 20), (0.75f, 40), (1f, 60))) - aphelion_gunner.collision.z = CollisionZData(Array((25f, 2), (40f, 4), (60f, 8), (85f, 16), (115f, 32))) - aphelion_gunner.maxForwardSpeed = 17 - aphelion_gunner.mass = 615.1f - - colossus_gunner.Name = "colossus_gunner" - colossus_gunner.MaxHealth = 4500 - colossus_gunner.Damageable = true - colossus_gunner.Repairable = true - colossus_gunner.RepairIfDestroyed = false - colossus_gunner.shieldUiAttribute = 79 - colossus_gunner.MaxShields = 3000 - colossus_gunner.ShieldPeriodicDelay = 500 - colossus_gunner.ShieldDamageDelay = 3500 - colossus_gunner.ShieldAutoRecharge = 45 - colossus_gunner.ShieldAutoRechargeSpecial = 85 - colossus_gunner.DefaultShields = colossus_gunner.MaxShields - colossus_gunner.Seats += 0 -> driverSeat - colossus_gunner.Seats += 1 -> normalSeat - colossus_gunner.controlledWeapons(seat = 0, weapons = Set(2, 3)) - colossus_gunner.controlledWeapons(seat = 1, weapon = 4) - colossus_gunner.Weapons += 2 -> colossus_tank_cannon_left - colossus_gunner.Weapons += 3 -> colossus_tank_cannon_right - colossus_gunner.Weapons += 4 -> colossus_dual_100mm_cannons - colossus_gunner.MountPoints += 1 -> MountInfo(0) - colossus_gunner.MountPoints += 2 -> MountInfo(1) - colossus_gunner.subsystems = bfrGunnerSubsystems - colossus_gunner.TrunkSize = InventoryTile.Tile1518 - colossus_gunner.TrunkOffset = 30 - colossus_gunner.TrunkLocation = Vector3(0f, -5f, 0f) - colossus_gunner.AutoPilotSpeeds = (5, 1) - colossus_gunner.Packet = battleFrameConverter - colossus_gunner.DestroyedModel = None - colossus_gunner.destructionDelay = Some(4000L) - colossus_gunner.JackingDuration = Array(0, 62, 60, 30) - colossus_gunner.RadiationShielding = 0.5f - colossus_gunner.DamageUsing = DamageCalculations.AgainstBfr - colossus_gunner.Model = BfrResolutions.calculate - colossus_gunner.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 400 - Damage1 = 500 - DamageRadius = 10 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - colossus_gunner.DrownAtMaxDepth = true - colossus_gunner.MaxDepth = 5.515625f - colossus_gunner.UnderwaterLifespan(suffocation = 60000L, recovery = 30000L) - colossus_gunner.Geometry = GeometryForm.representByCylinder(radius = 3.60935f, height = 5.984375f) - colossus_gunner.collision.avatarCollisionDamageMax = 300 - colossus_gunner.collision.xy = CollisionXYData(Array((0.2f, 1), (0.35f, 5), (0.55f, 20), (0.75f, 40), (1f, 60))) - colossus_gunner.collision.z = CollisionZData(Array((25f, 2), (40f, 4), (60f, 8), (85f, 16), (115f, 32))) - colossus_gunner.maxForwardSpeed = 17 - colossus_gunner.mass = 709.7f - - peregrine_gunner.Name = "peregrine_gunner" - peregrine_gunner.MaxHealth = 4500 - peregrine_gunner.Damageable = true - peregrine_gunner.Repairable = true - peregrine_gunner.RepairIfDestroyed = false - peregrine_gunner.shieldUiAttribute = 79 - peregrine_gunner.MaxShields = 3000 - peregrine_gunner.ShieldPeriodicDelay = 500 - peregrine_gunner.ShieldDamageDelay = 3500 - peregrine_gunner.ShieldAutoRecharge = 45 - peregrine_gunner.ShieldAutoRechargeSpecial = 85 - peregrine_gunner.DefaultShields = peregrine_gunner.MaxShields - peregrine_gunner.Seats += 0 -> driverSeat - peregrine_gunner.Seats += 1 -> normalSeat - peregrine_gunner.controlledWeapons(seat = 0, weapons = Set(2, 3)) - peregrine_gunner.controlledWeapons(seat = 1, weapon = 4) - peregrine_gunner.Weapons += 2 -> peregrine_dual_machine_gun_left - peregrine_gunner.Weapons += 3 -> peregrine_dual_machine_gun_right - peregrine_gunner.Weapons += 4 -> peregrine_particle_cannon - peregrine_gunner.MountPoints += 1 -> MountInfo(0) - peregrine_gunner.MountPoints += 2 -> MountInfo(1) - peregrine_gunner.subsystems = bfrGunnerSubsystems - peregrine_gunner.TrunkSize = InventoryTile.Tile1518 - peregrine_gunner.TrunkOffset = 30 - peregrine_gunner.TrunkLocation = Vector3(0f, -5f, 0f) - peregrine_gunner.AutoPilotSpeeds = (5, 1) - peregrine_gunner.Packet = battleFrameConverter - peregrine_gunner.DestroyedModel = None - peregrine_gunner.destructionDelay = Some(4000L) - peregrine_gunner.JackingDuration = Array(0, 62, 60, 30) - peregrine_gunner.RadiationShielding = 0.5f - peregrine_gunner.DamageUsing = DamageCalculations.AgainstBfr - peregrine_gunner.Model = BfrResolutions.calculate - peregrine_gunner.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 400 - Damage1 = 500 - DamageRadius = 10 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - peregrine_gunner.DrownAtMaxDepth = true - peregrine_gunner.MaxDepth = 6.03125f - peregrine_gunner.UnderwaterLifespan(suffocation = 60000L, recovery = 30000L) - peregrine_gunner.Geometry = GeometryForm.representByCylinder(radius = 3.60935f, height = 6.421875f) - peregrine_gunner.collision.avatarCollisionDamageMax = 300 - peregrine_gunner.collision.xy = CollisionXYData(Array((0.2f, 1), (0.35f, 5), (0.55f, 20), (0.75f, 40), (1f, 60))) - peregrine_gunner.collision.z = CollisionZData(Array((25f, 2), (40f, 4), (60f, 8), (85f, 16), (115f, 32))) - peregrine_gunner.maxForwardSpeed = 17 - peregrine_gunner.mass = 713f - - val battleFrameFlightConverter = new BattleFrameFlightConverter - aphelion_flight.Name = "aphelion_flight" - aphelion_flight.MaxHealth = 3500 - aphelion_flight.Damageable = true - aphelion_flight.Repairable = true - aphelion_flight.RepairIfDestroyed = false - aphelion_flight.CanFly = true - aphelion_flight.shieldUiAttribute = 79 - aphelion_flight.MaxShields = 2500 - aphelion_flight.ShieldPeriodicDelay = 500 - aphelion_flight.ShieldDamageDelay = 3500 - aphelion_flight.ShieldAutoRecharge = 12 //12.5 - aphelion_flight.ShieldAutoRechargeSpecial = 25 - aphelion_flight.ShieldDrain = 30 - aphelion_flight.DefaultShields = aphelion_flight.MaxShields - aphelion_flight.Seats += 0 -> bailableSeat - aphelion_flight.controlledWeapons(seat = 0, weapons = Set(1, 2)) - aphelion_flight.Weapons += 1 -> aphelion_ppa_left - aphelion_flight.Weapons += 2 -> aphelion_ppa_right - aphelion_flight.MountPoints += 1 -> MountInfo(0) - aphelion_flight.subsystems = bfrFlightSubsystems - aphelion_flight.TrunkSize = InventoryTile.Tile1511 - aphelion_flight.TrunkOffset = 30 - aphelion_flight.TrunkLocation = Vector3(0f, -2f, 0f) - aphelion_flight.AutoPilotSpeeds = (5, 1) - aphelion_flight.Packet = battleFrameFlightConverter - aphelion_flight.DestroyedModel = None - aphelion_flight.destructionDelay = Some(4000L) - aphelion_flight.JackingDuration = Array(0, 62, 60, 30) - aphelion_flight.RadiationShielding = 0.5f - aphelion_flight.DamageUsing = DamageCalculations.AgainstBfr - aphelion_flight.Model = BfrResolutions.calculate - aphelion_flight.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 400 - Damage1 = 500 - DamageRadius = 10 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - aphelion_flight.DrownAtMaxDepth = true - aphelion_flight.MaxDepth = 5.09375f - aphelion_flight.UnderwaterLifespan(suffocation = 60000L, recovery = 30000L) - aphelion_flight.Geometry = GeometryForm.representByCylinder(radius = 1.98045f, height = 6.03125f) - aphelion_flight.MaxCapacitor = 156 - aphelion_flight.DefaultCapacitor = aphelion_flight.MaxCapacitor - aphelion_flight.CapacitorDrain = 16 - aphelion_flight.CapacitorDrainSpecial = 3 - aphelion_flight.CapacitorRecharge = 42 - aphelion_flight.collision.avatarCollisionDamageMax = 300 - aphelion_flight.collision.xy = CollisionXYData(Array((0.2f, 1), (0.35f, 5), (0.55f, 20), (0.75f, 40), (1f, 60))) - aphelion_flight.collision.z = CollisionZData(Array((25f, 2), (40f, 4), (60f, 8), (85f, 16), (115f, 32))) - aphelion_flight.maxForwardSpeed = 35 - aphelion_flight.mass = 615.1f - - colossus_flight.Name = "colossus_flight" - colossus_flight.MaxHealth = 3500 - colossus_flight.Damageable = true - colossus_flight.Repairable = true - colossus_flight.RepairIfDestroyed = false - colossus_flight.CanFly = true - colossus_flight.shieldUiAttribute = 79 - colossus_flight.MaxShields = 2500 - colossus_flight.ShieldPeriodicDelay = 500 - colossus_flight.ShieldDamageDelay = 3500 - colossus_flight.ShieldAutoRecharge = 12 //12.5 - colossus_flight.ShieldAutoRechargeSpecial = 25 - colossus_flight.ShieldDrain = 30 - colossus_flight.DefaultShields = colossus_flight.MaxShields - colossus_flight.Seats += 0 -> bailableSeat - colossus_flight.controlledWeapons(seat = 0, weapons = Set(1, 2)) - colossus_flight.Weapons += 1 -> colossus_tank_cannon_left - colossus_flight.Weapons += 2 -> colossus_tank_cannon_right - colossus_flight.MountPoints += 1 -> MountInfo(0) - colossus_flight.subsystems = bfrFlightSubsystems - colossus_flight.TrunkSize = InventoryTile.Tile1511 - colossus_flight.TrunkOffset = 30 - colossus_flight.TrunkLocation = Vector3(0f, -5f, 0f) - colossus_flight.AutoPilotSpeeds = (5, 1) - colossus_flight.Packet = battleFrameFlightConverter - colossus_flight.DestroyedModel = None - colossus_flight.destructionDelay = Some(4000L) - colossus_flight.JackingDuration = Array(0, 62, 60, 30) - colossus_flight.RadiationShielding = 0.5f - colossus_flight.DamageUsing = DamageCalculations.AgainstBfr - colossus_flight.Model = BfrResolutions.calculate - colossus_flight.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 400 - Damage1 = 500 - DamageRadius = 10 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - colossus_flight.DrownAtMaxDepth = true - colossus_flight.MaxDepth = 5.515625f - colossus_flight.UnderwaterLifespan(suffocation = 60000L, recovery = 30000L) - colossus_flight.Geometry = GeometryForm.representByCylinder(radius = 3.60935f, height = 5.984375f) - colossus_flight.MaxCapacitor = 156 - colossus_flight.DefaultCapacitor = colossus_flight.MaxCapacitor - colossus_flight.CapacitorDrain = 16 - colossus_flight.CapacitorDrainSpecial = 3 - colossus_flight.CapacitorRecharge = 42 - colossus_flight.collision.avatarCollisionDamageMax = 300 - colossus_flight.collision.xy = CollisionXYData(Array((0.2f, 1), (0.35f, 5), (0.55f, 20), (0.75f, 40), (1f, 60))) - colossus_flight.collision.z = CollisionZData(Array((25f, 2), (40f, 4), (60f, 8), (85f, 16), (115f, 32))) - colossus_flight.maxForwardSpeed = 34 - colossus_flight.mass = 709.7f - - peregrine_flight.Name = "peregrine_flight" - peregrine_flight.MaxHealth = 3500 - peregrine_flight.Damageable = true - peregrine_flight.Repairable = true - peregrine_flight.RepairIfDestroyed = false - peregrine_flight.CanFly = true - peregrine_flight.shieldUiAttribute = 79 - peregrine_flight.MaxShields = 2500 - peregrine_flight.ShieldPeriodicDelay = 500 - peregrine_flight.ShieldDamageDelay = 3500 - peregrine_flight.ShieldAutoRecharge = 12 //12.5 - peregrine_flight.ShieldAutoRechargeSpecial = 25 - peregrine_flight.ShieldDrain = 30 - peregrine_flight.DefaultShields = peregrine_flight.MaxShields - peregrine_flight.Seats += 0 -> bailableSeat - peregrine_flight.controlledWeapons(seat = 0, weapons = Set(1, 2)) - peregrine_flight.Weapons += 1 -> peregrine_dual_machine_gun_left - peregrine_flight.Weapons += 2 -> peregrine_dual_machine_gun_right - peregrine_flight.MountPoints += 1 -> MountInfo(0) - peregrine_flight.subsystems = bfrFlightSubsystems - peregrine_flight.TrunkSize = InventoryTile.Tile1511 - peregrine_flight.TrunkOffset = 30 - peregrine_flight.TrunkLocation = Vector3(0f, -5f, 0f) - peregrine_flight.AutoPilotSpeeds = (5, 1) - peregrine_flight.Packet = battleFrameFlightConverter - peregrine_flight.DestroyedModel = None - peregrine_flight.destructionDelay = Some(4000L) - peregrine_flight.JackingDuration = Array(0, 62, 60, 30) - peregrine_flight.RadiationShielding = 0.5f - peregrine_flight.DamageUsing = DamageCalculations.AgainstBfr - peregrine_flight.Model = BfrResolutions.calculate - peregrine_flight.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 400 - Damage1 = 500 - DamageRadius = 10 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - peregrine_flight.DrownAtMaxDepth = true - peregrine_flight.MaxDepth = 6.03125f - peregrine_flight.UnderwaterLifespan(suffocation = 60000L, recovery = 30000L) - peregrine_flight.Geometry = GeometryForm.representByCylinder(radius = 3.60935f, height = 6.421875f) - peregrine_flight.MaxCapacitor = 156 - peregrine_flight.DefaultCapacitor = peregrine_flight.MaxCapacitor - peregrine_flight.CapacitorDrain = 16 - peregrine_flight.CapacitorDrainSpecial = 3 - peregrine_flight.CapacitorRecharge = 42 - peregrine_flight.collision.avatarCollisionDamageMax = 300 - peregrine_flight.collision.xy = CollisionXYData(Array((0.2f, 1), (0.35f, 5), (0.55f, 20), (0.75f, 40), (1f, 60))) - peregrine_flight.collision.z = CollisionZData(Array((25f, 2), (40f, 4), (60f, 8), (85f, 16), (115f, 32))) - peregrine_flight.maxForwardSpeed = 35 - peregrine_flight.mass = 713f - } - - /** - * Initialize `Deployable` globals. - */ - private def init_deployables(): Unit = { - val mine = GeometryForm.representByCylinder(radius = 0.1914f, height = 0.0957f) _ - val smallTurret = GeometryForm.representByCylinder(radius = 0.48435f, height = 1.23438f) _ - val sensor = GeometryForm.representByCylinder(radius = 0.1914f, height = 1.21875f) _ - val largeTurret = GeometryForm.representByCylinder(radius = 0.8437f, height = 2.29687f) _ - - boomer.Name = "boomer" - boomer.Descriptor = "Boomers" - boomer.MaxHealth = 100 - boomer.Damageable = true - boomer.DamageableByFriendlyFire = false - boomer.Repairable = false - boomer.DeployCategory = DeployableCategory.Boomers - boomer.DeployTime = Duration.create(1000, "ms") - boomer.deployAnimation = DeployAnimation.Standard - boomer.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.Splash - SympatheticExplosion = true - Damage0 = 250 - Damage1 = 750 - Damage2 = 400 - Damage3 = 400 - Damage4 = 1850 - DamageRadius = 5.1f - DamageAtEdge = 0.1f - Modifiers = ExplodingRadialDegrade - } - boomer.Geometry = mine - - he_mine.Name = "he_mine" - he_mine.Descriptor = "Mines" - he_mine.MaxHealth = 100 - he_mine.Damageable = true - he_mine.DamageableByFriendlyFire = false - he_mine.Repairable = false - he_mine.DeployTime = Duration.create(1000, "ms") - he_mine.deployAnimation = DeployAnimation.Standard - he_mine.triggerRadius = 3f - he_mine.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.Splash - SympatheticExplosion = true - Damage0 = 100 - Damage1 = 750 - Damage2 = 400 - Damage3 = 565 - Damage4 = 1600 - DamageRadius = 6.6f - DamageAtEdge = 0.25f - Modifiers = ExplodingRadialDegrade - } - he_mine.Geometry = mine - - jammer_mine.Name = "jammer_mine" - jammer_mine.Descriptor = "JammerMines" - jammer_mine.MaxHealth = 100 - jammer_mine.Damageable = true - jammer_mine.DamageableByFriendlyFire = false - jammer_mine.Repairable = false - jammer_mine.DeployTime = Duration.create(1000, "ms") - jammer_mine.deployAnimation = DeployAnimation.Standard - jammer_mine.DetonateOnJamming = false - jammer_mine.triggerRadius = 3f - jammer_mine.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.Splash - Damage0 = 0 - DamageRadius = 10f - DamageAtEdge = 1.0f - AdditionalEffect = true - JammedEffectDuration += TargetValidation( - EffectTarget.Category.Player, - EffectTarget.Validation.Player - ) -> 1000 - JammedEffectDuration += TargetValidation( - EffectTarget.Category.Vehicle, - EffectTarget.Validation.AMS - ) -> 5000 - JammedEffectDuration += TargetValidation( - EffectTarget.Category.Deployable, - EffectTarget.Validation.MotionSensor - ) -> 30000 - JammedEffectDuration += TargetValidation( - EffectTarget.Category.Deployable, - EffectTarget.Validation.Spitfire - ) -> 30000 - JammedEffectDuration += TargetValidation( - EffectTarget.Category.Turret, - EffectTarget.Validation.Turret - ) -> 30000 - JammedEffectDuration += TargetValidation( - EffectTarget.Category.Vehicle, - EffectTarget.Validation.VehicleNotAMS - ) -> 10000 - } - jammer_mine.Geometry = mine - - spitfire_turret.Name = "spitfire_turret" - spitfire_turret.Descriptor = "Spitfires" - spitfire_turret.MaxHealth = 100 - spitfire_turret.Damageable = true - spitfire_turret.Repairable = true - spitfire_turret.RepairIfDestroyed = false - spitfire_turret.WeaponPaths += 1 -> new mutable.HashMap() - spitfire_turret.WeaponPaths(1) += TurretUpgrade.None -> spitfire_weapon - spitfire_turret.ReserveAmmunition = false - spitfire_turret.DeployCategory = DeployableCategory.SmallTurrets - spitfire_turret.DeployTime = Duration.create(5000, "ms") - spitfire_turret.Model = ComplexDeployableResolutions.calculate - spitfire_turret.deployAnimation = DeployAnimation.Standard - spitfire_turret.AutoFire = Automation( - AutoRanges( - detection = 75f, - trigger = 50f, - escape = 50f - ), - AutoChecks( - validation = List( - EffectTarget.Validation.SmallRoboticsTurretValidatePlayerTarget, - EffectTarget.Validation.SmallRoboticsTurretValidateMaxTarget, - EffectTarget.Validation.SmallRoboticsTurretValidateGroundVehicleTarget, - EffectTarget.Validation.SmallRoboticsTurretValidateAircraftTarget, - EffectTarget.Validation.AutoTurretValidateMountableEntityTarget - ) - ), - retaliatoryDelay = 2000L, //8000L - refireTime = 200.milliseconds //150.milliseconds - ) - spitfire_turret.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 200 - Damage1 = 300 - DamageRadius = 8 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - spitfire_turret.Geometry = smallTurret - spitfire_turret.collision.xy = CollisionXYData(Array((0.01f, 10), (0.02f, 40), (0.03f, 60), (0.04f, 80), (0.05f, 100))) - spitfire_turret.collision.z = CollisionZData(Array((4f, 10), (4.25f, 40), (4.5f, 60), (4.75f, 80), (5f, 100))) - spitfire_turret.mass = 5f - - spitfire_cloaked.Name = "spitfire_cloaked" - spitfire_cloaked.Descriptor = "CloakingSpitfires" - spitfire_cloaked.MaxHealth = 100 - spitfire_cloaked.Damageable = true - spitfire_cloaked.Repairable = true - spitfire_cloaked.RepairIfDestroyed = false - spitfire_cloaked.WeaponPaths += 1 -> new mutable.HashMap() - spitfire_cloaked.WeaponPaths(1) += TurretUpgrade.None -> spitfire_weapon - spitfire_cloaked.ReserveAmmunition = false - spitfire_cloaked.DeployCategory = DeployableCategory.SmallTurrets - spitfire_cloaked.DeployTime = Duration.create(5000, "ms") - spitfire_cloaked.deployAnimation = DeployAnimation.Standard - spitfire_cloaked.Model = ComplexDeployableResolutions.calculate - spitfire_cloaked.AutoFire = Automation( - AutoRanges( - detection = 75f, - trigger = 50f, - escape = 75f - ), - AutoChecks( - validation = List( - EffectTarget.Validation.SmallRoboticsTurretValidatePlayerTarget, - EffectTarget.Validation.SmallRoboticsTurretValidateMaxTarget, - EffectTarget.Validation.SmallRoboticsTurretValidateGroundVehicleTarget, - EffectTarget.Validation.SmallRoboticsTurretValidateAircraftTarget, - EffectTarget.Validation.AutoTurretValidateMountableEntityTarget - ) - ), - cooldowns = AutoCooldowns( - targetSelect = 0L, - missedShot = 0L - ), - detectionSweepTime = 500.milliseconds, - retaliatoryDelay = 1L, //8000L - retaliationOverridesTarget = false, - refireTime = 200.milliseconds //150.milliseconds - ) - spitfire_cloaked.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 50 - Damage1 = 75 - DamageRadius = 8 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - spitfire_cloaked.Geometry = smallTurret - spitfire_cloaked.collision.xy = CollisionXYData(Array((0.01f, 10), (0.02f, 40), (0.03f, 60), (0.04f, 80), (0.05f, 100))) - spitfire_cloaked.collision.z = CollisionZData(Array((4f, 10), (4.25f, 40), (4.5f, 60), (4.75f, 80), (5f, 100))) - spitfire_cloaked.mass = 5f - - spitfire_aa.Name = "spitfire_aa" - spitfire_aa.Descriptor = "FlakSpitfires" - spitfire_aa.MaxHealth = 100 - spitfire_aa.Damageable = true - spitfire_aa.Repairable = true - spitfire_aa.RepairIfDestroyed = false - spitfire_aa.WeaponPaths += 1 -> new mutable.HashMap() - spitfire_aa.WeaponPaths(1) += TurretUpgrade.None -> spitfire_aa_weapon - spitfire_aa.ReserveAmmunition = false - spitfire_aa.DeployCategory = DeployableCategory.SmallTurrets - spitfire_aa.DeployTime = Duration.create(5000, "ms") - spitfire_aa.deployAnimation = DeployAnimation.Standard - spitfire_aa.Model = ComplexDeployableResolutions.calculate - spitfire_aa.AutoFire = Automation( - AutoRanges( - detection = 125f, - trigger = 100f, - escape = 200f - ), - AutoChecks( - validation = List(EffectTarget.Validation.SmallRoboticsTurretValidateAircraftTarget) - ), - retaliatoryDelay = 2000L, //8000L - retaliationOverridesTarget = false, - refireTime = 0.seconds, //300.milliseconds - cylindrical = true, - cylindricalExtraHeight = 50f - ) - spitfire_aa.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 200 - Damage1 = 300 - DamageRadius = 8 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - spitfire_aa.Geometry = smallTurret - spitfire_aa.collision.xy = CollisionXYData(Array((0.01f, 10), (0.02f, 40), (0.03f, 60), (0.04f, 80), (0.05f, 100))) - spitfire_aa.collision.z = CollisionZData(Array((4f, 10), (4.25f, 40), (4.5f, 60), (4.75f, 80), (5f, 100))) - spitfire_aa.mass = 5f - - motionalarmsensor.Name = "motionalarmsensor" - motionalarmsensor.Descriptor = "MotionSensors" - motionalarmsensor.MaxHealth = 100 - motionalarmsensor.Damageable = true - motionalarmsensor.Repairable = true - motionalarmsensor.RepairIfDestroyed = false - motionalarmsensor.DeployTime = Duration.create(1000, "ms") - motionalarmsensor.deployAnimation = DeployAnimation.Standard - motionalarmsensor.Geometry = sensor - - sensor_shield.Name = "sensor_shield" - sensor_shield.Descriptor = "SensorShields" - sensor_shield.MaxHealth = 100 - sensor_shield.Damageable = true - sensor_shield.Repairable = true - sensor_shield.RepairIfDestroyed = false - sensor_shield.DeployTime = Duration.create(5000, "ms") - sensor_shield.deployAnimation = DeployAnimation.Standard - sensor_shield.Geometry = sensor - - tank_traps.Name = "tank_traps" - tank_traps.Descriptor = "TankTraps" - tank_traps.MaxHealth = 5000 - tank_traps.Damageable = true - tank_traps.Repairable = true - tank_traps.RepairIfDestroyed = false - tank_traps.DeployCategory = DeployableCategory.TankTraps - tank_traps.DeployTime = Duration.create(6000, "ms") - tank_traps.deployAnimation = DeployAnimation.Fdu - //tank_traps do not explode - tank_traps.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 10 - Damage1 = 10 - DamageRadius = 8 - DamageAtEdge = 0.2f - Modifiers = ExplodingRadialDegrade - } - tank_traps.Geometry = GeometryForm.representByCylinder(radius = 2.89680997f, height = 3.57812f) - tank_traps.collision.xy = CollisionXYData(Array((0.01f, 5), (0.02f, 10), (0.03f, 15), (0.04f, 20), (0.05f, 25))) - tank_traps.collision.z = CollisionZData(Array((4f, 10), (4.25f, 40), (4.5f, 60), (4.75f, 80), (5f, 100))) - tank_traps.Modifiers = TrapCollisionDamageMultiplier(5f) //10f - tank_traps.mass = 600f - - val fieldTurretConverter = new FieldTurretConverter - portable_manned_turret.Name = "portable_manned_turret" - portable_manned_turret.Descriptor = "FieldTurrets" - portable_manned_turret.MaxHealth = 1000 - portable_manned_turret.Damageable = true - portable_manned_turret.Repairable = true - portable_manned_turret.RepairIfDestroyed = false - portable_manned_turret.WeaponPaths += 1 -> new mutable.HashMap() - portable_manned_turret.WeaponPaths(1) += TurretUpgrade.None -> energy_gun - portable_manned_turret.Seats += 0 -> new SeatDefinition() - portable_manned_turret.controlledWeapons(seat = 0, weapon = 1) - portable_manned_turret.MountPoints += 1 -> MountInfo(0) - portable_manned_turret.MountPoints += 2 -> MountInfo(0) - portable_manned_turret.ReserveAmmunition = true - portable_manned_turret.FactionLocked = true - portable_manned_turret.Packet = fieldTurretConverter - portable_manned_turret.DeployCategory = DeployableCategory.FieldTurrets - portable_manned_turret.DeployTime = Duration.create(6000, "ms") - portable_manned_turret.deployAnimation = DeployAnimation.Fdu - portable_manned_turret.Model = ComplexDeployableResolutions.calculate - portable_manned_turret.RadiationShielding = 0.5f - portable_manned_turret.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 150 - Damage1 = 300 - DamageRadius = 8 - DamageAtEdge = 0.1f - Modifiers = ExplodingRadialDegrade - } - portable_manned_turret.Geometry = largeTurret - portable_manned_turret.collision.xy = CollisionXYData(Array((0.01f, 10), (0.02f, 40), (0.03f, 60), (0.04f, 80), (0.05f, 100))) - portable_manned_turret.collision.z = CollisionZData(Array((4f, 10), (4.25f, 40), (4.5f, 60), (4.75f, 80), (5f, 100))) - portable_manned_turret.mass = 100f - - portable_manned_turret_nc.Name = "portable_manned_turret_nc" - portable_manned_turret_nc.Descriptor = "FieldTurrets" - portable_manned_turret_nc.MaxHealth = 1000 - portable_manned_turret_nc.Damageable = true - portable_manned_turret_nc.Repairable = true - portable_manned_turret_nc.RepairIfDestroyed = false - portable_manned_turret_nc.WeaponPaths += 1 -> new mutable.HashMap() - portable_manned_turret_nc.WeaponPaths(1) += TurretUpgrade.None -> energy_gun_nc - portable_manned_turret_nc.Seats += 0 -> new SeatDefinition() - portable_manned_turret_nc.controlledWeapons(seat = 0, weapon = 1) - portable_manned_turret_nc.MountPoints += 1 -> MountInfo(0) - portable_manned_turret_nc.MountPoints += 2 -> MountInfo(0) - portable_manned_turret_nc.ReserveAmmunition = true - portable_manned_turret_nc.FactionLocked = true - portable_manned_turret_nc.Packet = fieldTurretConverter - portable_manned_turret_nc.DeployCategory = DeployableCategory.FieldTurrets - portable_manned_turret_nc.DeployTime = Duration.create(6000, "ms") - portable_manned_turret_nc.deployAnimation = DeployAnimation.Fdu - portable_manned_turret_nc.Model = ComplexDeployableResolutions.calculate - portable_manned_turret_nc.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 150 - Damage1 = 300 - DamageRadius = 8 - DamageAtEdge = 0.1f - Modifiers = ExplodingRadialDegrade - } - portable_manned_turret_nc.Geometry = largeTurret - portable_manned_turret_nc.collision.xy = CollisionXYData(Array((0.01f, 10), (0.02f, 40), (0.03f, 60), (0.04f, 80), (0.05f, 100))) - portable_manned_turret_nc.collision.z = CollisionZData(Array((4f, 10), (4.25f, 40), (4.5f, 60), (4.75f, 80), (5f, 100))) - portable_manned_turret_nc.mass = 100f - - portable_manned_turret_tr.Name = "portable_manned_turret_tr" - portable_manned_turret_tr.Descriptor = "FieldTurrets" - portable_manned_turret_tr.MaxHealth = 1000 - portable_manned_turret_tr.Damageable = true - portable_manned_turret_tr.Repairable = true - portable_manned_turret_tr.RepairIfDestroyed = false - portable_manned_turret_tr.WeaponPaths += 1 -> new mutable.HashMap() - portable_manned_turret_tr.WeaponPaths(1) += TurretUpgrade.None -> energy_gun_tr - portable_manned_turret_tr.Seats += 0 -> new SeatDefinition() - portable_manned_turret_tr.controlledWeapons(seat = 0, weapon = 1) - portable_manned_turret_tr.MountPoints += 1 -> MountInfo(0) - portable_manned_turret_tr.MountPoints += 2 -> MountInfo(0) - portable_manned_turret_tr.ReserveAmmunition = true - portable_manned_turret_tr.FactionLocked = true - portable_manned_turret_tr.Packet = fieldTurretConverter - portable_manned_turret_tr.DeployCategory = DeployableCategory.FieldTurrets - portable_manned_turret_tr.DeployTime = Duration.create(6000, "ms") - portable_manned_turret_tr.deployAnimation = DeployAnimation.Fdu - portable_manned_turret_tr.Model = ComplexDeployableResolutions.calculate - portable_manned_turret_tr.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 150 - Damage1 = 300 - DamageRadius = 8 - DamageAtEdge = 0.1f - Modifiers = ExplodingRadialDegrade - } - portable_manned_turret_tr.Geometry = largeTurret - portable_manned_turret_tr.collision.xy = CollisionXYData(Array((0.01f, 10), (0.02f, 40), (0.03f, 60), (0.04f, 80), (0.05f, 100))) - portable_manned_turret_tr.collision.z = CollisionZData(Array((4f, 10), (4.25f, 40), (4.5f, 60), (4.75f, 80), (5f, 100))) - portable_manned_turret_tr.mass = 100f - - portable_manned_turret_vs.Name = "portable_manned_turret_vs" - portable_manned_turret_vs.Descriptor = "FieldTurrets" - portable_manned_turret_vs.MaxHealth = 1000 - portable_manned_turret_vs.Damageable = true - portable_manned_turret_vs.Repairable = true - portable_manned_turret_vs.RepairIfDestroyed = false - portable_manned_turret_vs.WeaponPaths += 1 -> new mutable.HashMap() - portable_manned_turret_vs.WeaponPaths(1) += TurretUpgrade.None -> energy_gun_vs - portable_manned_turret_vs.Seats += 0 -> new SeatDefinition() - portable_manned_turret_vs.controlledWeapons(seat = 0, weapon = 1) - portable_manned_turret_vs.MountPoints += 1 -> MountInfo(0) - portable_manned_turret_vs.MountPoints += 2 -> MountInfo(0) - portable_manned_turret_vs.ReserveAmmunition = true - portable_manned_turret_vs.FactionLocked = true - portable_manned_turret_vs.Packet = fieldTurretConverter - portable_manned_turret_vs.DeployCategory = DeployableCategory.FieldTurrets - portable_manned_turret_vs.DeployTime = Duration.create(6000, "ms") - portable_manned_turret_vs.deployAnimation = DeployAnimation.Fdu - portable_manned_turret_vs.Model = ComplexDeployableResolutions.calculate - portable_manned_turret_vs.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 150 - Damage1 = 300 - DamageRadius = 8 - DamageAtEdge = 0.1f - Modifiers = ExplodingRadialDegrade - } - portable_manned_turret_vs.Geometry = largeTurret - portable_manned_turret_vs.collision.xy = CollisionXYData(Array((0.01f, 10), (0.02f, 40), (0.03f, 60), (0.04f, 80), (0.05f, 100))) - portable_manned_turret_vs.collision.z = CollisionZData(Array((4f, 10), (4.25f, 40), (4.5f, 60), (4.75f, 80), (5f, 100))) - portable_manned_turret_vs.mass = 100f - - deployable_shield_generator.Name = "deployable_shield_generator" - deployable_shield_generator.Descriptor = "ShieldGenerators" - deployable_shield_generator.MaxHealth = 1700 - deployable_shield_generator.Damageable = true - deployable_shield_generator.Repairable = true - deployable_shield_generator.RepairIfDestroyed = false - deployable_shield_generator.DeployTime = Duration.create(6000, "ms") - deployable_shield_generator.deployAnimation = DeployAnimation.Fdu - deployable_shield_generator.Model = ComplexDeployableResolutions.calculate - deployable_shield_generator.Geometry = GeometryForm.representByCylinder(radius = 0.6562f, height = 2.17188f) - - router_telepad_deployable.Name = "router_telepad_deployable" - router_telepad_deployable.MaxHealth = 100 - router_telepad_deployable.Damageable = true - router_telepad_deployable.Repairable = false - router_telepad_deployable.DeployTime = Duration.create(1, "ms") - router_telepad_deployable.DeployCategory = DeployableCategory.Telepads - router_telepad_deployable.Packet = new TelepadDeployableConverter - router_telepad_deployable.Model = SimpleResolutions.calculate - router_telepad_deployable.Geometry = GeometryForm.representByRaisedSphere(radius = 1.2344f) - - internal_router_telepad_deployable.Name = "router_telepad_deployable" - internal_router_telepad_deployable.MaxHealth = 1 - internal_router_telepad_deployable.Damageable = false - internal_router_telepad_deployable.Repairable = false - internal_router_telepad_deployable.DeployTime = Duration.create(1, "ms") - internal_router_telepad_deployable.DeployCategory = DeployableCategory.Telepads - internal_router_telepad_deployable.Packet = new InternalTelepadDeployableConverter - } - - /** - * Initialize `Miscellaneous` globals. - */ - private def initMiscellaneous(): Unit = { - val vterm = GeometryForm.representByCylinder(radius = 1.03515f, height = 1.09374f) _ - - ams_respawn_tube.Name = "ams_respawn_tube" - ams_respawn_tube.Delay = 10 // Temporary -- Default value is 15 - ams_respawn_tube.SpecificPointFunc = SpawnPoint.AMS - ams_respawn_tube.Damageable = false - ams_respawn_tube.Repairable = false - - matrix_terminala.Name = "matrix_terminala" - matrix_terminala.Damageable = false - matrix_terminala.Repairable = false - - matrix_terminalb.Name = "matrix_terminalb" - matrix_terminalb.Damageable = false - matrix_terminalb.Repairable = false - - matrix_terminalc.Name = "matrix_terminalc" - matrix_terminalc.Damageable = false - matrix_terminalc.Repairable = false - - spawn_terminal.Name = "spawn_terminal" - spawn_terminal.Damageable = false - spawn_terminal.Repairable = false - spawn_terminal.autoRepair = AutoRepairStats(1, 5000, 200, 1) - - order_terminal.Name = "order_terminal" - order_terminal.Tab += 0 -> { - val tab = EquipmentPage( - EquipmentTerminalDefinition.infantryAmmunition ++ EquipmentTerminalDefinition.infantryWeapons - ) - tab.Exclude = List(CavernEquipmentQuestion) - tab - } - order_terminal.Tab += 1 -> ArmorWithAmmoPage( - EquipmentTerminalDefinition.suits ++ EquipmentTerminalDefinition.maxSuits, - EquipmentTerminalDefinition.maxAmmo - ) - order_terminal.Tab += 2 -> EquipmentPage( - EquipmentTerminalDefinition.supportAmmunition ++ EquipmentTerminalDefinition.supportWeapons - ) - order_terminal.Tab += 3 -> EquipmentPage(EquipmentTerminalDefinition.vehicleAmmunition) - order_terminal.Tab += 4 -> { - val tab = InfantryLoadoutPage() - tab.Exclude = List(CavernEquipmentQuestion) - tab - } - order_terminal.SellEquipmentByDefault = true - order_terminal.MaxHealth = 500 - order_terminal.Damageable = true - order_terminal.Repairable = true - order_terminal.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f) - order_terminal.RepairIfDestroyed = true - order_terminal.Subtract.Damage1 = 8 - order_terminal.Geometry = GeometryForm.representByCylinder(radius = 0.8438f, height = 1.3f) - - order_terminala.Name = "order_terminala" - order_terminala.Tab += 0 -> { - val tab = EquipmentPage( - EquipmentTerminalDefinition.infantryAmmunition ++ EquipmentTerminalDefinition.infantryWeapons - ) - tab.Exclude = List(NoCavernEquipmentRule) - tab - } - order_terminala.Tab += 1 -> ArmorWithAmmoPage( - EquipmentTerminalDefinition.suits, - EquipmentTerminalDefinition.maxAmmo - ) - order_terminala.Tab += 2 -> EquipmentPage( - EquipmentTerminalDefinition.supportAmmunition ++ EquipmentTerminalDefinition.supportWeapons - ) - order_terminala.Tab += 3 -> EquipmentPage(EquipmentTerminalDefinition.vehicleAmmunition) - order_terminala.Tab += 4 -> { - val tab = InfantryLoadoutPage() - tab.Exclude = List(NoExoSuitRule(ExoSuitType.MAX), NoCavernEquipmentRule) - tab - } - order_terminala.SellEquipmentByDefault = true - order_terminala.Damageable = false - order_terminala.Repairable = false - - order_terminalb.Name = "order_terminalb" - order_terminalb.Tab += 0 -> { - val tab = EquipmentPage( - EquipmentTerminalDefinition.infantryAmmunition ++ EquipmentTerminalDefinition.infantryWeapons - ) - tab.Exclude = List(NoCavernEquipmentRule) - tab - } - order_terminalb.Tab += 1 -> ArmorWithAmmoPage( - EquipmentTerminalDefinition.suits, - EquipmentTerminalDefinition.maxAmmo - ) - order_terminalb.Tab += 2 -> EquipmentPage( - EquipmentTerminalDefinition.supportAmmunition ++ EquipmentTerminalDefinition.supportWeapons - ) - order_terminalb.Tab += 3 -> EquipmentPage(EquipmentTerminalDefinition.vehicleAmmunition) - order_terminalb.Tab += 4 -> { - val tab = InfantryLoadoutPage() - tab.Exclude = List(NoExoSuitRule(ExoSuitType.MAX), NoCavernEquipmentRule) - tab - } - order_terminalb.SellEquipmentByDefault = true - order_terminalb.Damageable = false - order_terminalb.Repairable = false - - vanu_equipment_term.Name = "vanu_equipment_term" - vanu_equipment_term.Tab += 0 -> EquipmentPage( - EquipmentTerminalDefinition.infantryAmmunition ++ EquipmentTerminalDefinition.infantryWeapons - ) - vanu_equipment_term.Tab += 1 -> ArmorWithAmmoPage( - EquipmentTerminalDefinition.suits ++ EquipmentTerminalDefinition.maxSuits, - EquipmentTerminalDefinition.maxAmmo - ) - vanu_equipment_term.Tab += 2 -> EquipmentPage( - EquipmentTerminalDefinition.supportAmmunition ++ EquipmentTerminalDefinition.supportWeapons - ) - vanu_equipment_term.Tab += 3 -> EquipmentPage(EquipmentTerminalDefinition.vehicleAmmunition) - vanu_equipment_term.Tab += 4 -> InfantryLoadoutPage() - vanu_equipment_term.SellEquipmentByDefault = true - vanu_equipment_term.Damageable = false - vanu_equipment_term.Repairable = false - - cert_terminal.Name = "cert_terminal" - val certs = Certification.values.filter(_.cost != 0) - val page = CertificationPage(certs) - cert_terminal.Tab += 0 -> page - cert_terminal.MaxHealth = 500 - cert_terminal.Damageable = true - cert_terminal.Repairable = true - cert_terminal.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f) - cert_terminal.RepairIfDestroyed = true - cert_terminal.Subtract.Damage1 = 8 - cert_terminal.Geometry = GeometryForm.representByCylinder(radius = 0.66405f, height = 1.09374f) - - implant_terminal_mech.Name = "implant_terminal_mech" - implant_terminal_mech.MaxHealth = 1500 //TODO 1000; right now, 1000 (mech) + 500 (interface) - implant_terminal_mech.Damageable = true - implant_terminal_mech.Repairable = true - implant_terminal_mech.autoRepair = AutoRepairStats(1.6f, 5000, 2400, 0.05f) - implant_terminal_mech.RepairIfDestroyed = true - implant_terminal_mech.RadiationShielding = 0.5f - implant_terminal_mech.Geometry = GeometryForm.representByCylinder(radius = 2.7813f, height = 6.4375f) - - implant_terminal_interface.Name = "implant_terminal_interface" - implant_terminal_interface.Tab += 0 -> ImplantPage(ImplantTerminalDefinition.implants) - implant_terminal_interface.MaxHealth = 500 - implant_terminal_interface.Damageable = false //TODO true - implant_terminal_interface.Repairable = true - implant_terminal_interface.autoRepair = AutoRepairStats(1, 5000, 200, 1) - implant_terminal_interface.RepairIfDestroyed = true - //TODO will need geometry when Damageable = true - - ground_vehicle_terminal.Name = "ground_vehicle_terminal" - ground_vehicle_terminal.Tab += 46769 -> { - val tab = VehiclePage( - VehicleTerminalDefinition.groundVehicles, - VehicleTerminalDefinition.trunk - ) - tab.Exclude = List(CavernVehicleQuestion) - tab - } - ground_vehicle_terminal.Tab += 4 -> { - val tab = VehicleLoadoutPage(10) - tab.Exclude = List(CavernEquipmentQuestion) - tab - } - ground_vehicle_terminal.MaxHealth = 500 - ground_vehicle_terminal.Damageable = true - ground_vehicle_terminal.Repairable = true - ground_vehicle_terminal.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f) - ground_vehicle_terminal.RepairIfDestroyed = true - ground_vehicle_terminal.Subtract.Damage1 = 8 - ground_vehicle_terminal.Geometry = vterm - - air_vehicle_terminal.Name = "air_vehicle_terminal" - air_vehicle_terminal.Tab += 46769 -> VehiclePage( - VehicleTerminalDefinition.flight1Vehicles, - VehicleTerminalDefinition.trunk - ) - air_vehicle_terminal.Tab += 4 -> { - val tab = VehicleLoadoutPage(10) - tab.Exclude = List(CavernVehicleQuestion, CavernEquipmentQuestion) - tab - } - air_vehicle_terminal.MaxHealth = 500 - air_vehicle_terminal.Damageable = true - air_vehicle_terminal.Repairable = true - air_vehicle_terminal.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f) - air_vehicle_terminal.RepairIfDestroyed = true - air_vehicle_terminal.Subtract.Damage1 = 8 - air_vehicle_terminal.Geometry = vterm - - dropship_vehicle_terminal.Name = "dropship_vehicle_terminal" - dropship_vehicle_terminal.Tab += 46769 -> VehiclePage( - VehicleTerminalDefinition.flight1Vehicles ++ VehicleTerminalDefinition.flight2Vehicles, - VehicleTerminalDefinition.trunk - ) - dropship_vehicle_terminal.Tab += 4 -> { - val tab = VehicleLoadoutPage(10) - tab.Exclude = List(CavernEquipmentQuestion) - tab - } - dropship_vehicle_terminal.MaxHealth = 500 - dropship_vehicle_terminal.Damageable = true - dropship_vehicle_terminal.Repairable = true - dropship_vehicle_terminal.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f) - dropship_vehicle_terminal.RepairIfDestroyed = true - dropship_vehicle_terminal.Subtract.Damage1 = 8 - dropship_vehicle_terminal.Geometry = vterm - - vehicle_terminal_combined.Name = "vehicle_terminal_combined" - vehicle_terminal_combined.Tab += 46769 -> { - val tab = VehiclePage( - VehicleTerminalDefinition.flight1Vehicles ++ VehicleTerminalDefinition.groundVehicles, - VehicleTerminalDefinition.trunk - ) - tab.Exclude = List(CavernVehicleQuestion) - tab - } - vehicle_terminal_combined.Tab += 4 -> { - val tab = VehicleLoadoutPage(10) - tab.Exclude = List(CavernEquipmentQuestion) - tab - } - vehicle_terminal_combined.MaxHealth = 500 - vehicle_terminal_combined.Damageable = true - vehicle_terminal_combined.Repairable = true - vehicle_terminal_combined.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f) - vehicle_terminal_combined.RepairIfDestroyed = true - vehicle_terminal_combined.Subtract.Damage1 = 8 - vehicle_terminal_combined.Geometry = vterm - - vanu_air_vehicle_term.Name = "vanu_air_vehicle_term" - vanu_air_vehicle_term.Tab += 46769 -> VehiclePage( - VehicleTerminalDefinition.flight1Vehicles, - VehicleTerminalDefinition.trunk - ) - vanu_air_vehicle_term.Tab += 4 -> VehicleLoadoutPage(10) - vanu_air_vehicle_term.MaxHealth = 500 - vanu_air_vehicle_term.Damageable = true - vanu_air_vehicle_term.Repairable = true - vanu_air_vehicle_term.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f) - vanu_air_vehicle_term.RepairIfDestroyed = true - vanu_air_vehicle_term.Subtract.Damage1 = 8 - - vanu_vehicle_term.Name = "vanu_vehicle_term" - vanu_vehicle_term.Tab += 46769 -> VehiclePage( - VehicleTerminalDefinition.groundVehicles, - VehicleTerminalDefinition.trunk - ) - vanu_vehicle_term.Tab += 4 -> VehicleLoadoutPage(10) - vanu_vehicle_term.MaxHealth = 500 - vanu_vehicle_term.Damageable = true - vanu_vehicle_term.Repairable = true - vanu_vehicle_term.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f) - vanu_vehicle_term.RepairIfDestroyed = true - vanu_vehicle_term.Subtract.Damage1 = 8 - - bfr_terminal.Name = "bfr_terminal" - bfr_terminal.Tab += 0 -> VehiclePage( - VehicleTerminalDefinition.bfrVehicles, - VehicleTerminalDefinition.trunk - ) - bfr_terminal.Tab += 1 -> EquipmentPage( - EquipmentTerminalDefinition.bfrAmmunition ++ EquipmentTerminalDefinition.bfrArmWeapons - ) //inaccessible? - bfr_terminal.Tab += 2 -> EquipmentPage( - EquipmentTerminalDefinition.bfrAmmunition ++ EquipmentTerminalDefinition.bfrGunnerWeapons - ) //inaccessible? - bfr_terminal.Tab += 3 -> { - val tab = BattleframeSpawnLoadoutPage(VehicleTerminalDefinition.bfrVehicles) - tab.Exclude = List(CavernEquipmentQuestion) - tab - } - bfr_terminal.MaxHealth = 500 - bfr_terminal.Damageable = true - bfr_terminal.Repairable = true - bfr_terminal.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f) - bfr_terminal.RepairIfDestroyed = true - bfr_terminal.Subtract.Damage1 = 8 - bfr_terminal.Geometry = GeometryForm.representByCylinder(radius = 0.92185f, height = 2.64693f) - - respawn_tube.Name = "respawn_tube" - respawn_tube.Delay = 10 - respawn_tube.SpecificPointFunc = SpawnPoint.Tube - respawn_tube.MaxHealth = 1000 - respawn_tube.Damageable = true - respawn_tube.DamageableByFriendlyFire = false - respawn_tube.Repairable = true - respawn_tube.autoRepair = AutoRepairStats(1.6f, 10000, 2400, 1) - respawn_tube.RepairIfDestroyed = true - respawn_tube.Subtract.Damage1 = 8 - respawn_tube.Geometry = GeometryForm.representByCylinder(radius = 0.9336f, height = 2.84375f) - - respawn_tube_sanctuary.Name = "respawn_tube" - respawn_tube_sanctuary.Delay = 10 - respawn_tube_sanctuary.SpecificPointFunc = SpawnPoint.Default - respawn_tube_sanctuary.MaxHealth = 1000 - respawn_tube_sanctuary.Damageable = false //true? - respawn_tube_sanctuary.DamageableByFriendlyFire = false - respawn_tube_sanctuary.Repairable = true - respawn_tube_sanctuary.autoRepair = AutoRepairStats(1.6f, 10000, 2400, 1) - //TODO will need geometry when Damageable = true - - respawn_tube_tower.Name = "respawn_tube_tower" - respawn_tube_tower.Delay = 10 // Temporary -- Default value is 20 - respawn_tube_tower.SpecificPointFunc = SpawnPoint.Tube - respawn_tube_tower.MaxHealth = 1000 - respawn_tube_tower.Damageable = true - respawn_tube_tower.DamageableByFriendlyFire = false - respawn_tube_tower.Repairable = true - respawn_tube_tower.autoRepair = AutoRepairStats(1.6f, 10000, 2400, 1) - respawn_tube_tower.RepairIfDestroyed = true - respawn_tube_tower.Subtract.Damage1 = 8 - respawn_tube_tower.Geometry = GeometryForm.representByCylinder(radius = 0.9336f, height = 2.84375f) - - teleportpad_terminal.Name = "teleportpad_terminal" - teleportpad_terminal.Tab += 0 -> EquipmentPage(EquipmentTerminalDefinition.routerTerminal) - teleportpad_terminal.Damageable = false - teleportpad_terminal.Repairable = false - - targeting_laser_dispenser.Name = "targeting_laser_dispenser" - targeting_laser_dispenser.Tab += 0 -> EquipmentPage(EquipmentTerminalDefinition.flailTerminal) - targeting_laser_dispenser.Damageable = false - targeting_laser_dispenser.Repairable = false - - medical_terminal.Name = "medical_terminal" - medical_terminal.Interval = 500 - medical_terminal.HealAmount = 5 - medical_terminal.ArmorAmount = 10 - medical_terminal.UseRadius = 0.75f - medical_terminal.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.Medical - medical_terminal.MaxHealth = 500 - medical_terminal.Damageable = true - medical_terminal.Repairable = true - medical_terminal.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f) - medical_terminal.RepairIfDestroyed = true - medical_terminal.Geometry = GeometryForm.representByCylinder(radius = 0.711f, height = 1.75f) - - adv_med_terminal.Name = "adv_med_terminal" - adv_med_terminal.Interval = 500 - adv_med_terminal.HealAmount = 8 - adv_med_terminal.ArmorAmount = 15 - adv_med_terminal.UseRadius = 0.75f - adv_med_terminal.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.Medical - adv_med_terminal.MaxHealth = 750 - adv_med_terminal.Damageable = true - adv_med_terminal.Repairable = true - adv_med_terminal.autoRepair = AutoRepairStats(1.57894f, 5000, 2400, 0.05f) - adv_med_terminal.RepairIfDestroyed = true - adv_med_terminal.Geometry = GeometryForm.representByCylinder(radius = 0.8662125f, height = 3.47f) - - crystals_health_a.Name = "crystals_health_a" - crystals_health_a.Interval = 500 - crystals_health_a.HealAmount = 4 - crystals_health_a.UseRadius = 5 - crystals_health_a.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.HealthCrystal - crystals_health_a.Damageable = false - crystals_health_a.Repairable = false - - crystals_health_b.Name = "crystals_health_b" - crystals_health_b.Interval = 500 - crystals_health_b.HealAmount = 4 - crystals_health_b.UseRadius = 5 - crystals_health_b.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.HealthCrystal - crystals_health_b.Damageable = false - crystals_health_b.Repairable = false - - crystals_repair_a.Name = "crystals_repair_a" - crystals_repair_a.Interval = 500 - crystals_repair_a.ArmorAmount = 4 - crystals_repair_a.UseRadius = 5 - crystals_repair_a.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.RepairCrystal - crystals_repair_a.Damageable = false - crystals_repair_a.Repairable = false - - crystals_repair_b.Name = "crystals_repair_b" - crystals_repair_b.Interval = 500 - crystals_repair_b.ArmorAmount = 4 - crystals_repair_b.UseRadius = 5 - crystals_repair_b.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.RepairCrystal - crystals_repair_b.Damageable = false - crystals_repair_b.Repairable = false - - crystals_vehicle_a.Name = "crystals_vehicle_a" - crystals_vehicle_a.Interval = 1000 - crystals_vehicle_a.HealAmount = 60 - crystals_vehicle_a.UseRadius = 15 - crystals_vehicle_a.TargetValidation += EffectTarget.Category.Vehicle -> EffectTarget.Validation.VehicleCrystal - crystals_vehicle_a.Damageable = false - crystals_vehicle_a.Repairable = false - - crystals_vehicle_b.Name = "crystals_vehicle_b" - crystals_vehicle_b.Interval = 1000 - crystals_vehicle_b.HealAmount = 60 - crystals_vehicle_b.UseRadius = 15 - crystals_vehicle_b.TargetValidation += EffectTarget.Category.Vehicle -> EffectTarget.Validation.VehicleCrystal - crystals_vehicle_b.Damageable = false - crystals_vehicle_b.Repairable = false - - crystals_energy_a.Name = "crystals_energy_a" - crystals_energy_a.Interval = 1000 - crystals_energy_a.UseRadius = 5 - crystals_energy_a.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.AncientWeaponRecharge - crystals_energy_a.Damageable = false - crystals_energy_a.Repairable = false - - crystals_energy_b.Name = "crystals_energy_b" - crystals_energy_b.Interval = 1000 - crystals_energy_b.UseRadius = 5 - crystals_energy_b.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.AncientWeaponRecharge - crystals_energy_b.Damageable = false - crystals_energy_b.Repairable = false - - crystals_energy.Name = "crystals_energy" - crystals_energy.Interval = 1000 - crystals_energy.UseRadius = 5 - crystals_energy.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.AncientWeaponRecharge - crystals_energy.Damageable = false - crystals_energy.Repairable = false - - portable_med_terminal.Name = "portable_med_terminal" - portable_med_terminal.Interval = 500 - portable_med_terminal.HealAmount = 5 - portable_med_terminal.ArmorAmount = 10 - portable_med_terminal.UseRadius = 3 - portable_med_terminal.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.Medical - portable_med_terminal.MaxHealth = 500 - portable_med_terminal.Damageable = false //TODO actually true - portable_med_terminal.Repairable = false - portable_med_terminal.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f) - - pad_landing_frame.Name = "pad_landing_frame" - pad_landing_frame.Interval = 1000 - pad_landing_frame.HealAmount = 60 - pad_landing_frame.UseRadius = 20 - pad_landing_frame.TargetValidation += EffectTarget.Category.Aircraft -> EffectTarget.Validation.PadLanding - pad_landing_frame.Damageable = false - pad_landing_frame.Repairable = false - - pad_landing_tower_frame.Name = "pad_landing_tower_frame" - pad_landing_tower_frame.Interval = 1000 - pad_landing_tower_frame.HealAmount = 60 - pad_landing_tower_frame.UseRadius = 20 - pad_landing_tower_frame.TargetValidation += EffectTarget.Category.Aircraft -> EffectTarget.Validation.PadLanding - pad_landing_tower_frame.Damageable = false - pad_landing_tower_frame.Repairable = false - - repair_silo.Name = "repair_silo" - repair_silo.Interval = 1000 - repair_silo.HealAmount = 60 - repair_silo.UseRadius = 20 - repair_silo.TargetValidation += EffectTarget.Category.Vehicle -> EffectTarget.Validation.RepairSilo - repair_silo.Damageable = false - repair_silo.Repairable = false - - recharge_terminal.Name = "recharge_terminal" - recharge_terminal.Interval = 1000 - recharge_terminal.UseRadius = 20 - recharge_terminal.TargetValidation += EffectTarget.Category.Vehicle -> EffectTarget.Validation.AncientVehicleWeaponRecharge - recharge_terminal.Damageable = false - recharge_terminal.Repairable = false - - recharge_terminal_weapon_module.Name = "recharge_terminal_weapon_module" - recharge_terminal_weapon_module.Interval = 1000 - recharge_terminal_weapon_module.UseRadius = 300 - recharge_terminal_weapon_module.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.AncientWeaponRecharge - recharge_terminal_weapon_module.Damageable = false - recharge_terminal_weapon_module.Repairable = false - - mb_pad_creation.Name = "mb_pad_creation" - mb_pad_creation.Damageable = false - mb_pad_creation.Repairable = false - mb_pad_creation.VehicleCreationZOffset = 2.52604f - mb_pad_creation.killBox = VehicleSpawnPadDefinition.prepareKillBox( - forwardLimit = 14, - backLimit = 10, - sideLimit = 7.5f, - aboveLimit = 5 //double to 10 when spawning a flying vehicle - ) - mb_pad_creation.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 99999 - DamageRadiusMin = 14 - DamageRadius = 14.5f - DamageAtEdge = 0.00002f - //damage is 99999 at 14m, dropping rapidly to ~1 at 14.5m - } - - dropship_pad_doors.Name = "dropship_pad_doors" - dropship_pad_doors.Damageable = false - dropship_pad_doors.Repairable = false - dropship_pad_doors.VehicleCreationZOffset = 4.89507f - dropship_pad_doors.VehicleCreationZOrientOffset = -90f - dropship_pad_doors.killBox = VehicleSpawnPadDefinition.prepareKillBox( - forwardLimit = 14, - backLimit = 14, - sideLimit = 13.5f, - aboveLimit = 5 //doubles to 10 - ) - dropship_pad_doors.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 99999 - DamageRadiusMin = 14 - DamageRadius = 14.5f - DamageAtEdge = 0.00002f - //damage is 99999 at 14m, dropping rapidly to ~1 at 14.5m - } - - vanu_vehicle_creation_pad.Name = "vanu_vehicle_creation_pad" - vanu_vehicle_creation_pad.Damageable = false - vanu_vehicle_creation_pad.Repairable = false - vanu_vehicle_creation_pad.killBox = VehicleSpawnPadDefinition.prepareVanuKillBox( - radius = 8.5f, - aboveLimit = 5 - ) - vanu_vehicle_creation_pad.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 99999 - DamageRadiusMin = 14 - DamageRadius = 14.5f - DamageAtEdge = 0.00002f - //damage is 99999 at 14m, dropping rapidly to ~1 at 14.5m - } - - bfr_door.Name = "bfr_door" - bfr_door.Damageable = false - bfr_door.Repairable = false - //bfr_door.VehicleCreationZOffset = -4.5f - bfr_door.VehicleCreationZOrientOffset = 0f //90f - bfr_door.killBox = VehicleSpawnPadDefinition.prepareBfrShedKillBox( - radius = 10f, - aboveLimit = 10f - ) - bfr_door.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 99999 - DamageRadiusMin = 14 //TODO fix this - DamageRadius = 14.5f //TODO fix this - DamageAtEdge = 0.00002f - //damage is 99999 at 14m, dropping rapidly to ~1 at 14.5m - } - - pad_create.Name = "pad_create" - pad_create.Damageable = false - pad_create.Repairable = false - //pad_create.killBox = ... - //pad_create.innateDamage = ... - - pad_creation.Name = "pad_creation" - pad_creation.Damageable = false - pad_creation.Repairable = false - pad_creation.VehicleCreationZOffset = 1.70982f - //pad_creation.killBox = ... - //pad_creation.innateDamage = ... - - spawnpoint_vehicle.Name = "spawnpoint_vehicle" - spawnpoint_vehicle.Damageable = false - spawnpoint_vehicle.Repairable = false - //spawnpoint_vehicle.killBox = ... - //spawnpoint_vehicle.innateDamage = ... - - mb_locker.Name = "mb_locker" - mb_locker.Damageable = false - mb_locker.Repairable = false - - lock_external.Name = "lock_external" - lock_external.Damageable = false - lock_external.Repairable = false - - door.Name = "door" - door.Damageable = false - door.Repairable = false - - door_spawn_mb.Name = "door_spawn_mb" - door_spawn_mb.Damageable = true - door_spawn_mb.Repairable = false - - gr_door_mb_orb.Name = "gr_door_mb_orb" - gr_door_mb_orb.Damageable = false - gr_door_mb_orb.Repairable = false - - spawn_tube_door.Name = "spawn_tube_door" - spawn_tube_door.Damageable = true - spawn_tube_door.Repairable = false - - resource_silo.Name = "resource_silo" - resource_silo.Damageable = false - resource_silo.Repairable = false - resource_silo.MaxNtuCapacitor = 1000 - resource_silo.ChargeTime = 105.seconds //from 0-100% in roughly 105s on live (~20%-100% https://youtu.be/veOWToR2nSk?t=1402) - - capture_terminal.Name = "capture_terminal" - capture_terminal.Damageable = false - capture_terminal.Repairable = false - capture_terminal.FacilityHackTime = 15.minutes - - secondary_capture.Name = "secondary_capture" - secondary_capture.Damageable = false - secondary_capture.Repairable = false - secondary_capture.FacilityHackTime = 1.millisecond - - vanu_control_console.Name = "vanu_control_console" - vanu_control_console.Damageable = false - vanu_control_console.Repairable = false - vanu_control_console.FacilityHackTime = 10.minutes - - lodestar_repair_terminal.Name = "lodestar_repair_terminal" - lodestar_repair_terminal.Interval = 1000 - lodestar_repair_terminal.HealAmount = 60 - lodestar_repair_terminal.UseRadius = 40 - lodestar_repair_terminal.TargetValidation += EffectTarget.Category.Vehicle -> EffectTarget.Validation.LodestarRepair - lodestar_repair_terminal.Damageable = false - lodestar_repair_terminal.Repairable = false - - multivehicle_rearm_terminal.Name = "multivehicle_rearm_terminal" - multivehicle_rearm_terminal.Tab += 3 -> EquipmentPage( - EquipmentTerminalDefinition.vehicleAmmunition - ) - multivehicle_rearm_terminal.Tab += 4 -> { - val tab = VehicleLoadoutPage(10) - tab.Exclude = List(CavernEquipmentQuestion) - tab - } - multivehicle_rearm_terminal.SellEquipmentByDefault = true //TODO ? - multivehicle_rearm_terminal.Damageable = false - multivehicle_rearm_terminal.Repairable = false - - bfr_rearm_terminal.Name = "bfr_rearm_terminal" - bfr_rearm_terminal.Tab += 1 -> EquipmentPage( - EquipmentTerminalDefinition.bfrAmmunition ++ EquipmentTerminalDefinition.bfrArmWeapons - ) - bfr_rearm_terminal.Tab += 2 -> EquipmentPage( - EquipmentTerminalDefinition.bfrAmmunition ++ EquipmentTerminalDefinition.bfrGunnerWeapons - ) - bfr_rearm_terminal.Tab += 3 -> { - val tab = VehicleLoadoutPage(15) - tab.Exclude = List(CavernEquipmentQuestion) - tab - } - bfr_rearm_terminal.SellEquipmentByDefault = true //TODO ? - bfr_rearm_terminal.Damageable = false - bfr_rearm_terminal.Repairable = false - - air_rearm_terminal.Name = "air_rearm_terminal" - air_rearm_terminal.Tab += 3 -> EquipmentPage(EquipmentTerminalDefinition.vehicleAmmunition) - air_rearm_terminal.Tab += 4 -> { - val tab = VehicleLoadoutPage(10) - tab.Exclude = List(CavernEquipmentQuestion) - tab - } - air_rearm_terminal.SellEquipmentByDefault = true //TODO ? - air_rearm_terminal.Damageable = false - air_rearm_terminal.Repairable = false - - ground_rearm_terminal.Name = "ground_rearm_terminal" - ground_rearm_terminal.Tab += 3 -> EquipmentPage( - EquipmentTerminalDefinition.vehicleAmmunition - ) - ground_rearm_terminal.Tab += 4 -> { - val tab = VehicleLoadoutPage(10) - tab.Exclude = List(CavernEquipmentQuestion) - tab - } - ground_rearm_terminal.SellEquipmentByDefault = true //TODO ? - ground_rearm_terminal.Damageable = false - ground_rearm_terminal.Repairable = false - - manned_turret.Name = "manned_turret" - manned_turret.MaxHealth = 3600 - manned_turret.Damageable = true - manned_turret.DamageDisablesAt = 1800 - manned_turret.Repairable = true - manned_turret.autoRepair = AutoRepairStats(1.0909f, 10000, 1600, 0.05f) - manned_turret.RepairIfDestroyed = true - manned_turret.WeaponPaths += 1 -> new mutable.HashMap() - manned_turret.WeaponPaths(1) += TurretUpgrade.None -> phalanx_sgl_hevgatcan - manned_turret.WeaponPaths(1) += TurretUpgrade.AVCombo -> phalanx_avcombo - manned_turret.WeaponPaths(1) += TurretUpgrade.FlakCombo -> phalanx_flakcombo - manned_turret.Seats += 0 -> new SeatDefinition() - manned_turret.controlledWeapons(seat = 0, weapon = 1) - manned_turret.MountPoints += 1 -> MountInfo(0) - manned_turret.FactionLocked = true - manned_turret.ReserveAmmunition = false - manned_turret.RadiationShielding = 0.5f - manned_turret.AutoFire = Automation( - AutoRanges( - detection = 125f, - trigger = 100f, - escape = 200f - ), - AutoChecks( - validation = List( - EffectTarget.Validation.FacilityTurretValidateMaxTarget, - EffectTarget.Validation.FacilityTurretValidateGroundVehicleTarget, - EffectTarget.Validation.FacilityTurretValidateAircraftTarget, - EffectTarget.Validation.AutoTurretValidateMountableEntityTarget - ) - ), - retaliatoryDelay = 4000L, //8000L - cylindrical = true, - cylindricalExtraHeight = 50f, - detectionSweepTime = 2.seconds, - refireTime = 362.milliseconds //312.milliseconds - ) - manned_turret.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 150 - Damage1 = 300 - DamageRadius = 5 - DamageAtEdge = 0.1f - Modifiers = ExplodingRadialDegrade - } - manned_turret.Geometry = GeometryForm.representByCylinder(radius = 1.2695f, height = 4.042f) - - vanu_sentry_turret.Name = "vanu_sentry_turret" - vanu_sentry_turret.MaxHealth = 1500 - vanu_sentry_turret.Damageable = true - vanu_sentry_turret.DamageDisablesAt = 0 - vanu_sentry_turret.Repairable = true - vanu_sentry_turret.autoRepair = AutoRepairStats(3.27272f, 10000, 1000, 0.05f) - vanu_sentry_turret.RepairIfDestroyed = true - vanu_sentry_turret.WeaponPaths += 1 -> new mutable.HashMap() - vanu_sentry_turret.WeaponPaths(1) += TurretUpgrade.None -> vanu_sentry_turret_weapon - vanu_sentry_turret.Seats += 0 -> new SeatDefinition() - vanu_sentry_turret.controlledWeapons(seat = 0, weapon = 1) - vanu_sentry_turret.MountPoints += 1 -> MountInfo(0) - vanu_sentry_turret.MountPoints += 2 -> MountInfo(0) - vanu_sentry_turret.FactionLocked = false - vanu_sentry_turret.ReserveAmmunition = false - vanu_sentry_turret.Geometry = GeometryForm.representByCylinder(radius = 1.76311f, height = 3.984375f) - - painbox.Name = "painbox" - painbox.alwaysOn = false - painbox.sphereOffset = Vector3(0, 0, -0.4f) - painbox.Damageable = false - painbox.Repairable = false - painbox.innateDamage = new DamageWithPosition { - Damage0 = 2 - DamageRadius = 0 - DamageToHealthOnly = true - } - - painbox_continuous.Name = "painbox_continuous" - painbox_continuous.sphereOffset = Vector3(0, 0, -0.4f) - painbox_continuous.Damageable = false - painbox_continuous.Repairable = false - painbox_continuous.innateDamage = new DamageWithPosition { - Damage0 = 2 - DamageRadius = 0 - DamageToHealthOnly = true - } - - painbox_door_radius.Name = "painbox_door_radius" - painbox_door_radius.alwaysOn = false - painbox_door_radius.sphereOffset = Vector3(0, 0, -0.4f) - painbox_door_radius.hasNearestDoorDependency = true - painbox_door_radius.Damageable = false - painbox_door_radius.Repairable = false - painbox_door_radius.innateDamage = new DamageWithPosition { - Damage0 = 2 - DamageRadius = 10f * 0.6928f - DamageToHealthOnly = true - } - - painbox_door_radius_continuous.Name = "painbox_door_radius_continuous" - painbox_door_radius_continuous.sphereOffset = Vector3(0, 0, -0.4f) - painbox_door_radius_continuous.hasNearestDoorDependency = true - painbox_door_radius_continuous.Damageable = false - painbox_door_radius_continuous.Repairable = false - painbox_door_radius_continuous.innateDamage = new DamageWithPosition { - Damage0 = 2 - DamageRadius = 10f * 0.6928f - DamageToHealthOnly = true - } - - painbox_radius.Name = "painbox_radius" - painbox_radius.alwaysOn = false - painbox_radius.sphereOffset = Vector3(0, 0, -0.4f) - painbox_radius.Damageable = false - painbox_radius.Repairable = false - painbox_radius.innateDamage = new DamageWithPosition { - Damage0 = 2 - DamageRadius = 10f * 0.6928f - DamageToHealthOnly = true - } - - painbox_radius_continuous.Name = "painbox_radius_continuous" - painbox_radius_continuous.Damageable = false - painbox_radius_continuous.Repairable = false - painbox_radius_continuous.innateDamage = new DamageWithPosition { - Damage0 = 2 - DamageRadius = 8.55f - DamageToHealthOnly = true - } - - gen_control.Name = "gen_control" - gen_control.Damageable = false - gen_control.Repairable = false - - generator.Name = "generator" - generator.MaxHealth = 4000 - generator.Damageable = true - generator.DamageableByFriendlyFire = false - generator.Repairable = true - generator.autoRepair = AutoRepairStats(0.77775f, 5000, 875, 1) - generator.RepairDistance = 13.5f - generator.RepairIfDestroyed = true - generator.Subtract.Damage1 = 9 - generator.innateDamage = new DamageWithPosition { - CausesDamageType = DamageType.One - Damage0 = 99999 - DamageRadiusMin = 15 - DamageRadius = 15.1f - DamageAtEdge = 0.000011f - Modifiers = ExplodingRadialDegrade - //damage is 99999 at 15m, dropping rapidly to ~1 at 15.1m - } - generator.Geometry = GeometryForm.representByCylinder(radius = 1.2617f, height = 9.14063f) - - obbasemesh.Name = "obbasemesh" - obbasemesh.Descriptor = "orbital_shuttle_pad" - obbasemesh.Damageable = false - obbasemesh.Repairable = false - } + GlobalDefinitionsExoSuit.init() + GlobalDefinitionsKit.init() + GlobalDefinitionsAmmo.init() + GlobalDefinitionsProjectile.init() + GlobalDefinitionsMiscellaneous.init() + GlobalDefinitionsTools.init() + GlobalDefinitionsVehicle.init() + GlobalDefinitionsDeployable.init() } diff --git a/src/main/scala/net/psforever/objects/global/GlobalDefinitionsAmmo.scala b/src/main/scala/net/psforever/objects/global/GlobalDefinitionsAmmo.scala new file mode 100644 index 000000000..b345ecc9b --- /dev/null +++ b/src/main/scala/net/psforever/objects/global/GlobalDefinitionsAmmo.scala @@ -0,0 +1,330 @@ +// Copyright (c) 2024 PSForever +package net.psforever.objects.global + +import net.psforever.objects.GlobalDefinitions +import net.psforever.objects.equipment.EquipmentSize +import net.psforever.objects.inventory.InventoryTile + +object GlobalDefinitionsAmmo { + import GlobalDefinitions._ + + /** + * Initialize `AmmoBoxDefinition` globals. + */ + final def init(): Unit = { + melee_ammo.Name = "melee_ammo" + melee_ammo.Size = EquipmentSize.Blocked + + frag_grenade_ammo.Name = "frag_grenade_ammo" + frag_grenade_ammo.Size = EquipmentSize.Blocked + + jammer_grenade_ammo.Name = "jammer_grenade_ammo" + jammer_grenade_ammo.Size = EquipmentSize.Blocked + + plasma_grenade_ammo.Name = "plasma_grenade_ammo" + plasma_grenade_ammo.Size = EquipmentSize.Blocked + + bullet_9mm.Name = "9mmbullet" + bullet_9mm.Capacity = 50 + bullet_9mm.Tile = InventoryTile.Tile33 + + bullet_9mm_AP.Name = "9mmbullet_AP" + bullet_9mm_AP.Capacity = 50 + bullet_9mm_AP.Tile = InventoryTile.Tile33 + + shotgun_shell.Name = "shotgun_shell" + shotgun_shell.Capacity = 16 + shotgun_shell.Tile = InventoryTile.Tile33 + + shotgun_shell_AP.Name = "shotgun_shell_AP" + shotgun_shell_AP.Capacity = 16 + shotgun_shell_AP.Tile = InventoryTile.Tile33 + + energy_cell.Name = "energy_cell" + energy_cell.Capacity = 50 + energy_cell.Tile = InventoryTile.Tile33 + + anniversary_ammo.Name = "anniversary_ammo" + anniversary_ammo.Capacity = 30 + anniversary_ammo.Tile = InventoryTile.Tile33 + + ancient_ammo_combo.Name = "ancient_ammo_combo" + ancient_ammo_combo.Capacity = 30 + ancient_ammo_combo.Tile = InventoryTile.Tile33 + + maelstrom_ammo.Name = "maelstrom_ammo" + maelstrom_ammo.Capacity = 50 + maelstrom_ammo.Tile = InventoryTile.Tile33 + + phoenix_missile.Name = "phoenix_missile" + phoenix_missile.Size = EquipmentSize.Blocked + + striker_missile_ammo.Name = "striker_missile_ammo" + striker_missile_ammo.Capacity = 15 + striker_missile_ammo.Tile = InventoryTile.Tile44 + + hunter_seeker_missile.Name = "hunter_seeker_missile" + hunter_seeker_missile.Capacity = 9 + hunter_seeker_missile.Tile = InventoryTile.Tile44 + + lancer_cartridge.Name = "lancer_cartridge" + lancer_cartridge.Capacity = 18 + lancer_cartridge.Tile = InventoryTile.Tile44 + + rocket.Name = "rocket" + rocket.Capacity = 15 + rocket.Tile = InventoryTile.Tile33 + + frag_cartridge.Name = "frag_cartridge" + frag_cartridge.Capacity = 12 + frag_cartridge.Tile = InventoryTile.Tile33 + + plasma_cartridge.Name = "plasma_cartridge" + plasma_cartridge.Capacity = 12 + plasma_cartridge.Tile = InventoryTile.Tile33 + + jammer_cartridge.Name = "jammer_cartridge" + jammer_cartridge.Capacity = 12 + jammer_cartridge.Tile = InventoryTile.Tile33 + + bolt.Name = "bolt" + bolt.Capacity = 10 + bolt.Tile = InventoryTile.Tile33 + + oicw_ammo.Name = "oicw_ammo" + oicw_ammo.Capacity = 10 + oicw_ammo.Tile = InventoryTile.Tile44 + + flamethrower_ammo.Name = "flamethrower_ammo" + flamethrower_ammo.Capacity = 100 + flamethrower_ammo.Tile = InventoryTile.Tile44 + + winchester_ammo.Name = "winchester_ammo" + winchester_ammo.Capacity = 10 + winchester_ammo.Tile = InventoryTile.Tile33 + + pellet_gun_ammo.Name = "pellet_gun_ammo" + pellet_gun_ammo.Capacity = 8 + pellet_gun_ammo.Tile = InventoryTile.Tile33 + + six_shooter_ammo.Name = "six_shooter_ammo" + six_shooter_ammo.Capacity = 12 + six_shooter_ammo.Tile = InventoryTile.Tile33 + + dualcycler_ammo.Name = "dualcycler_ammo" + dualcycler_ammo.Capacity = 100 + dualcycler_ammo.Tile = InventoryTile.Tile44 + + pounder_ammo.Name = "pounder_ammo" + pounder_ammo.Capacity = 50 + pounder_ammo.Tile = InventoryTile.Tile44 + + burster_ammo.Name = "burster_ammo" + burster_ammo.Capacity = 100 + burster_ammo.Tile = InventoryTile.Tile44 + + scattercannon_ammo.Name = "scattercannon_ammo" + scattercannon_ammo.Capacity = 50 + scattercannon_ammo.Tile = InventoryTile.Tile44 + + falcon_ammo.Name = "falcon_ammo" + falcon_ammo.Capacity = 50 + falcon_ammo.Tile = InventoryTile.Tile44 + + sparrow_ammo.Name = "sparrow_ammo" + sparrow_ammo.Capacity = 50 + sparrow_ammo.Tile = InventoryTile.Tile44 + + quasar_ammo.Name = "quasar_ammo" + quasar_ammo.Capacity = 60 + quasar_ammo.Tile = InventoryTile.Tile44 + + comet_ammo.Name = "comet_ammo" + comet_ammo.Capacity = 50 + comet_ammo.Tile = InventoryTile.Tile44 + + starfire_ammo.Name = "starfire_ammo" + starfire_ammo.Capacity = 50 + starfire_ammo.Tile = InventoryTile.Tile44 + + health_canister.Name = "health_canister" + health_canister.Capacity = 100 + health_canister.Tile = InventoryTile.Tile23 + + armor_canister.Name = "armor_canister" + armor_canister.Capacity = 100 + armor_canister.repairAmount = 12f //ADB says 12.5, but 12 is better for the math + armor_canister.Tile = InventoryTile.Tile23 + + upgrade_canister.Name = "upgrade_canister" + upgrade_canister.Capacity = 1 + upgrade_canister.Tile = InventoryTile.Tile23 + + trek_ammo.Name = "trek_ammo" + trek_ammo.Size = EquipmentSize.Blocked + + bullet_35mm.Name = "35mmbullet" + bullet_35mm.Capacity = 100 + bullet_35mm.Tile = InventoryTile.Tile44 + + aphelion_laser_ammo.Name = "aphelion_laser_ammo" + aphelion_laser_ammo.Capacity = 165 + aphelion_laser_ammo.Tile = InventoryTile.Tile44 + + aphelion_immolation_cannon_ammo.Name = "aphelion_immolation_cannon_ammo" + aphelion_immolation_cannon_ammo.Capacity = 100 + aphelion_immolation_cannon_ammo.Tile = InventoryTile.Tile55 + + aphelion_plasma_rocket_ammo.Name = "aphelion_plasma_rocket_ammo" + aphelion_plasma_rocket_ammo.Capacity = 195 + aphelion_plasma_rocket_ammo.Tile = InventoryTile.Tile55 + + aphelion_ppa_ammo.Name = "aphelion_ppa_ammo" + aphelion_ppa_ammo.Capacity = 110 + aphelion_ppa_ammo.Tile = InventoryTile.Tile44 + + aphelion_starfire_ammo.Name = "aphelion_starfire_ammo" + aphelion_starfire_ammo.Capacity = 132 + aphelion_starfire_ammo.Tile = InventoryTile.Tile44 + + skyguard_flak_cannon_ammo.Name = "skyguard_flak_cannon_ammo" + skyguard_flak_cannon_ammo.Capacity = 200 + skyguard_flak_cannon_ammo.Tile = InventoryTile.Tile44 + + firebird_missile.Name = "firebird_missile" + firebird_missile.Capacity = 50 + firebird_missile.Tile = InventoryTile.Tile44 + + flux_cannon_thresher_battery.Name = "flux_cannon_thresher_battery" + flux_cannon_thresher_battery.Capacity = 150 + flux_cannon_thresher_battery.Tile = InventoryTile.Tile44 + + fluxpod_ammo.Name = "fluxpod_ammo" + fluxpod_ammo.Capacity = 80 + fluxpod_ammo.Tile = InventoryTile.Tile44 + + hellfire_ammo.Name = "hellfire_ammo" + hellfire_ammo.Capacity = 24 + hellfire_ammo.Tile = InventoryTile.Tile44 + + liberator_bomb.Name = "liberator_bomb" + liberator_bomb.Capacity = 20 + liberator_bomb.Tile = InventoryTile.Tile44 + + bullet_25mm.Name = "25mmbullet" + bullet_25mm.Capacity = 150 + bullet_25mm.Tile = InventoryTile.Tile44 + + bullet_75mm.Name = "75mmbullet" + bullet_75mm.Capacity = 100 + bullet_75mm.Tile = InventoryTile.Tile44 + + heavy_grenade_mortar.Name = "heavy_grenade_mortar" + heavy_grenade_mortar.Capacity = 100 + heavy_grenade_mortar.Tile = InventoryTile.Tile44 + + pulse_battery.Name = "pulse_battery" + pulse_battery.Capacity = 100 + pulse_battery.Tile = InventoryTile.Tile44 + + heavy_rail_beam_battery.Name = "heavy_rail_beam_battery" + heavy_rail_beam_battery.Capacity = 100 + heavy_rail_beam_battery.Tile = InventoryTile.Tile44 + + reaver_rocket.Name = "reaver_rocket" + reaver_rocket.Capacity = 12 + reaver_rocket.Tile = InventoryTile.Tile44 + + bullet_20mm.Name = "20mmbullet" + bullet_20mm.Capacity = 200 + bullet_20mm.Tile = InventoryTile.Tile44 + + bullet_12mm.Name = "12mmbullet" + bullet_12mm.Capacity = 300 + bullet_12mm.Tile = InventoryTile.Tile44 + + wasp_rocket_ammo.Name = "wasp_rocket_ammo" + wasp_rocket_ammo.Capacity = 6 + wasp_rocket_ammo.Tile = InventoryTile.Tile44 + + wasp_gun_ammo.Name = "wasp_gun_ammo" + wasp_gun_ammo.Capacity = 150 + wasp_gun_ammo.Tile = InventoryTile.Tile44 + + bullet_15mm.Name = "15mmbullet" + bullet_15mm.Capacity = 360 + bullet_15mm.Tile = InventoryTile.Tile44 + + colossus_100mm_cannon_ammo.Name = "colossus_100mm_cannon_ammo" + colossus_100mm_cannon_ammo.Capacity = 90 + colossus_100mm_cannon_ammo.Tile = InventoryTile.Tile55 + + colossus_burster_ammo.Name = "colossus_burster_ammo" + colossus_burster_ammo.Capacity = 235 + colossus_burster_ammo.Tile = InventoryTile.Tile44 + + colossus_cluster_bomb_ammo.Name = "colossus_cluster_bomb_ammo" + colossus_cluster_bomb_ammo.Capacity = 150 + colossus_cluster_bomb_ammo.Tile = InventoryTile.Tile55 + + colossus_chaingun_ammo.Name = "colossus_chaingun_ammo" + colossus_chaingun_ammo.Capacity = 600 + colossus_chaingun_ammo.Tile = InventoryTile.Tile44 + + colossus_tank_cannon_ammo.Name = "colossus_tank_cannon_ammo" + colossus_tank_cannon_ammo.Capacity = 110 + colossus_tank_cannon_ammo.Tile = InventoryTile.Tile44 + + bullet_105mm.Name = "105mmbullet" + bullet_105mm.Capacity = 100 + bullet_105mm.Tile = InventoryTile.Tile44 + + gauss_cannon_ammo.Name = "gauss_cannon_ammo" + gauss_cannon_ammo.Capacity = 15 + gauss_cannon_ammo.Tile = InventoryTile.Tile44 + + peregrine_dual_machine_gun_ammo.Name = "peregrine_dual_machine_gun_ammo" + peregrine_dual_machine_gun_ammo.Capacity = 240 + peregrine_dual_machine_gun_ammo.Tile = InventoryTile.Tile44 + + peregrine_mechhammer_ammo.Name = "peregrine_mechhammer_ammo" + peregrine_mechhammer_ammo.Capacity = 30 + peregrine_mechhammer_ammo.Tile = InventoryTile.Tile44 + + peregrine_particle_cannon_ammo.Name = "peregrine_particle_cannon_ammo" + peregrine_particle_cannon_ammo.Capacity = 40 + peregrine_particle_cannon_ammo.Tile = InventoryTile.Tile55 + + peregrine_rocket_pod_ammo.Name = "peregrine_rocket_pod_ammo" + peregrine_rocket_pod_ammo.Capacity = 275 + peregrine_rocket_pod_ammo.Tile = InventoryTile.Tile55 + + peregrine_sparrow_ammo.Name = "peregrine_sparrow_ammo" + peregrine_sparrow_ammo.Capacity = 150 + peregrine_sparrow_ammo.Tile = InventoryTile.Tile44 + + bullet_150mm.Name = "150mmbullet" + bullet_150mm.Capacity = 50 + bullet_150mm.Tile = InventoryTile.Tile44 + + phalanx_ammo.Name = "phalanx_ammo" + phalanx_ammo.Size = EquipmentSize.Inventory + + spitfire_ammo.Name = "spitfire_ammo" + spitfire_ammo.Size = EquipmentSize.Inventory + + spitfire_aa_ammo.Name = "spitfire_aa_ammo" + spitfire_aa_ammo.Size = EquipmentSize.Inventory + + energy_gun_ammo.Name = "energy_gun_ammo" + energy_gun_ammo.Size = EquipmentSize.Inventory + + armor_siphon_ammo.Name = "armor_siphon_ammo" + armor_siphon_ammo.Capacity = 0 + armor_siphon_ammo.Size = EquipmentSize.Blocked + + ntu_siphon_ammo.Name = "ntu_siphon_ammo" + ntu_siphon_ammo.Capacity = 0 + ntu_siphon_ammo.Size = EquipmentSize.Blocked + } +} diff --git a/src/main/scala/net/psforever/objects/global/GlobalDefinitionsDeployable.scala b/src/main/scala/net/psforever/objects/global/GlobalDefinitionsDeployable.scala new file mode 100644 index 000000000..e59828e23 --- /dev/null +++ b/src/main/scala/net/psforever/objects/global/GlobalDefinitionsDeployable.scala @@ -0,0 +1,461 @@ +// Copyright (c) 2024 PSForever +package net.psforever.objects.global + +import net.psforever.objects.GlobalDefinitions +import net.psforever.objects.ce.DeployableCategory +import net.psforever.objects.definition.DeployAnimation +import net.psforever.objects.definition.converter.{FieldTurretConverter, InternalTelepadDeployableConverter, TelepadDeployableConverter} +import net.psforever.objects.equipment.{EffectTarget, TargetValidation} +import net.psforever.objects.geometry.GeometryForm +import net.psforever.objects.geometry.d3.VolumetricGeometry +import net.psforever.objects.serverobject.mount.{MountInfo, SeatDefinition} +import net.psforever.objects.serverobject.turret.{AutoChecks, AutoCooldowns, AutoRanges, Automation, TurretUpgrade} +import net.psforever.objects.vital.{CollisionXYData, CollisionZData, ComplexDeployableResolutions, SimpleResolutions} +import net.psforever.objects.vital.base.DamageType +import net.psforever.objects.vital.collision.TrapCollisionDamageMultiplier +import net.psforever.objects.vital.etc.ExplodingRadialDegrade +import net.psforever.objects.vital.prop.DamageWithPosition + +import scala.collection.mutable +import scala.concurrent.duration._ + +object GlobalDefinitionsDeployable { + import GlobalDefinitions._ + + /** + * Initialize `Deployable` globals. + */ + def init(): Unit = { + val mine: Any => VolumetricGeometry = GeometryForm.representByCylinder(radius = 0.1914f, height = 0.0957f) + val smallTurret: Any => VolumetricGeometry = GeometryForm.representByCylinder(radius = 0.48435f, height = 1.23438f) + val sensor: Any => VolumetricGeometry = GeometryForm.representByCylinder(radius = 0.1914f, height = 1.21875f) + val largeTurret: Any => VolumetricGeometry = GeometryForm.representByCylinder(radius = 0.8437f, height = 2.29687f) + + boomer.Name = "boomer" + boomer.Descriptor = "Boomers" + boomer.MaxHealth = 100 + boomer.Damageable = true + boomer.DamageableByFriendlyFire = false + boomer.Repairable = false + boomer.DeployCategory = DeployableCategory.Boomers + boomer.DeployTime = Duration.create(1000, "ms") + boomer.deployAnimation = DeployAnimation.Standard + boomer.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.Splash + SympatheticExplosion = true + Damage0 = 250 + Damage1 = 750 + Damage2 = 400 + Damage3 = 400 + Damage4 = 1850 + DamageRadius = 5.1f + DamageAtEdge = 0.1f + Modifiers = ExplodingRadialDegrade + } + boomer.Geometry = mine + + he_mine.Name = "he_mine" + he_mine.Descriptor = "Mines" + he_mine.MaxHealth = 100 + he_mine.Damageable = true + he_mine.DamageableByFriendlyFire = false + he_mine.Repairable = false + he_mine.DeployTime = Duration.create(1000, "ms") + he_mine.deployAnimation = DeployAnimation.Standard + he_mine.triggerRadius = 3f + he_mine.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.Splash + SympatheticExplosion = true + Damage0 = 100 + Damage1 = 750 + Damage2 = 400 + Damage3 = 565 + Damage4 = 1600 + DamageRadius = 6.6f + DamageAtEdge = 0.25f + Modifiers = ExplodingRadialDegrade + } + he_mine.Geometry = mine + + jammer_mine.Name = "jammer_mine" + jammer_mine.Descriptor = "JammerMines" + jammer_mine.MaxHealth = 100 + jammer_mine.Damageable = true + jammer_mine.DamageableByFriendlyFire = false + jammer_mine.Repairable = false + jammer_mine.DeployTime = Duration.create(1000, "ms") + jammer_mine.deployAnimation = DeployAnimation.Standard + jammer_mine.DetonateOnJamming = false + jammer_mine.triggerRadius = 3f + jammer_mine.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.Splash + Damage0 = 0 + DamageRadius = 10f + DamageAtEdge = 1.0f + AdditionalEffect = true + JammedEffectDuration += TargetValidation( + EffectTarget.Category.Player, + EffectTarget.Validation.Player + ) -> 1000 + JammedEffectDuration += TargetValidation( + EffectTarget.Category.Vehicle, + EffectTarget.Validation.AMS + ) -> 5000 + JammedEffectDuration += TargetValidation( + EffectTarget.Category.Deployable, + EffectTarget.Validation.MotionSensor + ) -> 30000 + JammedEffectDuration += TargetValidation( + EffectTarget.Category.Deployable, + EffectTarget.Validation.Spitfire + ) -> 30000 + JammedEffectDuration += TargetValidation( + EffectTarget.Category.Turret, + EffectTarget.Validation.Turret + ) -> 30000 + JammedEffectDuration += TargetValidation( + EffectTarget.Category.Vehicle, + EffectTarget.Validation.VehicleNotAMS + ) -> 10000 + } + jammer_mine.Geometry = mine + + spitfire_turret.Name = "spitfire_turret" + spitfire_turret.Descriptor = "Spitfires" + spitfire_turret.MaxHealth = 100 + spitfire_turret.Damageable = true + spitfire_turret.Repairable = true + spitfire_turret.RepairIfDestroyed = false + spitfire_turret.WeaponPaths += 1 -> new mutable.HashMap() + spitfire_turret.WeaponPaths(1) += TurretUpgrade.None -> spitfire_weapon + spitfire_turret.ReserveAmmunition = false + spitfire_turret.DeployCategory = DeployableCategory.SmallTurrets + spitfire_turret.DeployTime = Duration.create(5000, "ms") + spitfire_turret.Model = ComplexDeployableResolutions.calculate + spitfire_turret.deployAnimation = DeployAnimation.Standard + spitfire_turret.AutoFire = Automation( + AutoRanges( + detection = 75f, + trigger = 50f, + escape = 50f + ), + AutoChecks( + validation = List( + EffectTarget.Validation.SmallRoboticsTurretValidatePlayerTarget, + EffectTarget.Validation.SmallRoboticsTurretValidateMaxTarget, + EffectTarget.Validation.SmallRoboticsTurretValidateGroundVehicleTarget, + EffectTarget.Validation.SmallRoboticsTurretValidateAircraftTarget, + EffectTarget.Validation.AutoTurretValidateMountableEntityTarget + ) + ), + retaliatoryDelay = 2000L, //8000L + refireTime = 200.milliseconds //150.milliseconds + ) + spitfire_turret.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 200 + Damage1 = 300 + DamageRadius = 8 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + spitfire_turret.Geometry = smallTurret + spitfire_turret.collision.xy = CollisionXYData(Array((0.01f, 10), (0.02f, 40), (0.03f, 60), (0.04f, 80), (0.05f, 100))) + spitfire_turret.collision.z = CollisionZData(Array((4f, 10), (4.25f, 40), (4.5f, 60), (4.75f, 80), (5f, 100))) + spitfire_turret.mass = 5f + + spitfire_cloaked.Name = "spitfire_cloaked" + spitfire_cloaked.Descriptor = "CloakingSpitfires" + spitfire_cloaked.MaxHealth = 100 + spitfire_cloaked.Damageable = true + spitfire_cloaked.Repairable = true + spitfire_cloaked.RepairIfDestroyed = false + spitfire_cloaked.WeaponPaths += 1 -> new mutable.HashMap() + spitfire_cloaked.WeaponPaths(1) += TurretUpgrade.None -> spitfire_weapon + spitfire_cloaked.ReserveAmmunition = false + spitfire_cloaked.DeployCategory = DeployableCategory.SmallTurrets + spitfire_cloaked.DeployTime = Duration.create(5000, "ms") + spitfire_cloaked.deployAnimation = DeployAnimation.Standard + spitfire_cloaked.Model = ComplexDeployableResolutions.calculate + spitfire_cloaked.AutoFire = Automation( + AutoRanges( + detection = 75f, + trigger = 50f, + escape = 75f + ), + AutoChecks( + validation = List( + EffectTarget.Validation.SmallRoboticsTurretValidatePlayerTarget, + EffectTarget.Validation.SmallRoboticsTurretValidateMaxTarget, + EffectTarget.Validation.SmallRoboticsTurretValidateGroundVehicleTarget, + EffectTarget.Validation.SmallRoboticsTurretValidateAircraftTarget, + EffectTarget.Validation.AutoTurretValidateMountableEntityTarget + ) + ), + cooldowns = AutoCooldowns( + targetSelect = 0L, + missedShot = 0L + ), + detectionSweepTime = 500.milliseconds, + retaliatoryDelay = 1L, //8000L + retaliationOverridesTarget = false, + refireTime = 200.milliseconds //150.milliseconds + ) + spitfire_cloaked.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 50 + Damage1 = 75 + DamageRadius = 8 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + spitfire_cloaked.Geometry = smallTurret + spitfire_cloaked.collision.xy = CollisionXYData(Array((0.01f, 10), (0.02f, 40), (0.03f, 60), (0.04f, 80), (0.05f, 100))) + spitfire_cloaked.collision.z = CollisionZData(Array((4f, 10), (4.25f, 40), (4.5f, 60), (4.75f, 80), (5f, 100))) + spitfire_cloaked.mass = 5f + + spitfire_aa.Name = "spitfire_aa" + spitfire_aa.Descriptor = "FlakSpitfires" + spitfire_aa.MaxHealth = 100 + spitfire_aa.Damageable = true + spitfire_aa.Repairable = true + spitfire_aa.RepairIfDestroyed = false + spitfire_aa.WeaponPaths += 1 -> new mutable.HashMap() + spitfire_aa.WeaponPaths(1) += TurretUpgrade.None -> spitfire_aa_weapon + spitfire_aa.ReserveAmmunition = false + spitfire_aa.DeployCategory = DeployableCategory.SmallTurrets + spitfire_aa.DeployTime = Duration.create(5000, "ms") + spitfire_aa.deployAnimation = DeployAnimation.Standard + spitfire_aa.Model = ComplexDeployableResolutions.calculate + spitfire_aa.AutoFire = Automation( + AutoRanges( + detection = 125f, + trigger = 100f, + escape = 200f + ), + AutoChecks( + validation = List(EffectTarget.Validation.SmallRoboticsTurretValidateAircraftTarget) + ), + retaliatoryDelay = 2000L, //8000L + retaliationOverridesTarget = false, + refireTime = 0.seconds, //300.milliseconds + cylindrical = true, + cylindricalExtraHeight = 50f + ) + spitfire_aa.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 200 + Damage1 = 300 + DamageRadius = 8 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + spitfire_aa.Geometry = smallTurret + spitfire_aa.collision.xy = CollisionXYData(Array((0.01f, 10), (0.02f, 40), (0.03f, 60), (0.04f, 80), (0.05f, 100))) + spitfire_aa.collision.z = CollisionZData(Array((4f, 10), (4.25f, 40), (4.5f, 60), (4.75f, 80), (5f, 100))) + spitfire_aa.mass = 5f + + motionalarmsensor.Name = "motionalarmsensor" + motionalarmsensor.Descriptor = "MotionSensors" + motionalarmsensor.MaxHealth = 100 + motionalarmsensor.Damageable = true + motionalarmsensor.Repairable = true + motionalarmsensor.RepairIfDestroyed = false + motionalarmsensor.DeployTime = Duration.create(1000, "ms") + motionalarmsensor.deployAnimation = DeployAnimation.Standard + motionalarmsensor.Geometry = sensor + + sensor_shield.Name = "sensor_shield" + sensor_shield.Descriptor = "SensorShields" + sensor_shield.MaxHealth = 100 + sensor_shield.Damageable = true + sensor_shield.Repairable = true + sensor_shield.RepairIfDestroyed = false + sensor_shield.DeployTime = Duration.create(5000, "ms") + sensor_shield.deployAnimation = DeployAnimation.Standard + sensor_shield.Geometry = sensor + + tank_traps.Name = "tank_traps" + tank_traps.Descriptor = "TankTraps" + tank_traps.MaxHealth = 5000 + tank_traps.Damageable = true + tank_traps.Repairable = true + tank_traps.RepairIfDestroyed = false + tank_traps.DeployCategory = DeployableCategory.TankTraps + tank_traps.DeployTime = Duration.create(6000, "ms") + tank_traps.deployAnimation = DeployAnimation.Fdu + //tank_traps do not explode + tank_traps.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 10 + Damage1 = 10 + DamageRadius = 8 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + tank_traps.Geometry = GeometryForm.representByCylinder(radius = 2.89680997f, height = 3.57812f) + tank_traps.collision.xy = CollisionXYData(Array((0.01f, 5), (0.02f, 10), (0.03f, 15), (0.04f, 20), (0.05f, 25))) + tank_traps.collision.z = CollisionZData(Array((4f, 10), (4.25f, 40), (4.5f, 60), (4.75f, 80), (5f, 100))) + tank_traps.Modifiers = TrapCollisionDamageMultiplier(5f) //10f + tank_traps.mass = 600f + + val fieldTurretConverter = new FieldTurretConverter + portable_manned_turret.Name = "portable_manned_turret" + portable_manned_turret.Descriptor = "FieldTurrets" + portable_manned_turret.MaxHealth = 1000 + portable_manned_turret.Damageable = true + portable_manned_turret.Repairable = true + portable_manned_turret.RepairIfDestroyed = false + portable_manned_turret.WeaponPaths += 1 -> new mutable.HashMap() + portable_manned_turret.WeaponPaths(1) += TurretUpgrade.None -> energy_gun + portable_manned_turret.Seats += 0 -> new SeatDefinition() + portable_manned_turret.controlledWeapons(seat = 0, weapon = 1) + portable_manned_turret.MountPoints += 1 -> MountInfo(0) + portable_manned_turret.MountPoints += 2 -> MountInfo(0) + portable_manned_turret.ReserveAmmunition = true + portable_manned_turret.FactionLocked = true + portable_manned_turret.Packet = fieldTurretConverter + portable_manned_turret.DeployCategory = DeployableCategory.FieldTurrets + portable_manned_turret.DeployTime = Duration.create(6000, "ms") + portable_manned_turret.deployAnimation = DeployAnimation.Fdu + portable_manned_turret.Model = ComplexDeployableResolutions.calculate + portable_manned_turret.RadiationShielding = 0.5f + portable_manned_turret.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 150 + Damage1 = 300 + DamageRadius = 8 + DamageAtEdge = 0.1f + Modifiers = ExplodingRadialDegrade + } + portable_manned_turret.Geometry = largeTurret + portable_manned_turret.collision.xy = CollisionXYData(Array((0.01f, 10), (0.02f, 40), (0.03f, 60), (0.04f, 80), (0.05f, 100))) + portable_manned_turret.collision.z = CollisionZData(Array((4f, 10), (4.25f, 40), (4.5f, 60), (4.75f, 80), (5f, 100))) + portable_manned_turret.mass = 100f + + portable_manned_turret_nc.Name = "portable_manned_turret_nc" + portable_manned_turret_nc.Descriptor = "FieldTurrets" + portable_manned_turret_nc.MaxHealth = 1000 + portable_manned_turret_nc.Damageable = true + portable_manned_turret_nc.Repairable = true + portable_manned_turret_nc.RepairIfDestroyed = false + portable_manned_turret_nc.WeaponPaths += 1 -> new mutable.HashMap() + portable_manned_turret_nc.WeaponPaths(1) += TurretUpgrade.None -> energy_gun_nc + portable_manned_turret_nc.Seats += 0 -> new SeatDefinition() + portable_manned_turret_nc.controlledWeapons(seat = 0, weapon = 1) + portable_manned_turret_nc.MountPoints += 1 -> MountInfo(0) + portable_manned_turret_nc.MountPoints += 2 -> MountInfo(0) + portable_manned_turret_nc.ReserveAmmunition = true + portable_manned_turret_nc.FactionLocked = true + portable_manned_turret_nc.Packet = fieldTurretConverter + portable_manned_turret_nc.DeployCategory = DeployableCategory.FieldTurrets + portable_manned_turret_nc.DeployTime = Duration.create(6000, "ms") + portable_manned_turret_nc.deployAnimation = DeployAnimation.Fdu + portable_manned_turret_nc.Model = ComplexDeployableResolutions.calculate + portable_manned_turret_nc.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 150 + Damage1 = 300 + DamageRadius = 8 + DamageAtEdge = 0.1f + Modifiers = ExplodingRadialDegrade + } + portable_manned_turret_nc.Geometry = largeTurret + portable_manned_turret_nc.collision.xy = CollisionXYData(Array((0.01f, 10), (0.02f, 40), (0.03f, 60), (0.04f, 80), (0.05f, 100))) + portable_manned_turret_nc.collision.z = CollisionZData(Array((4f, 10), (4.25f, 40), (4.5f, 60), (4.75f, 80), (5f, 100))) + portable_manned_turret_nc.mass = 100f + + portable_manned_turret_tr.Name = "portable_manned_turret_tr" + portable_manned_turret_tr.Descriptor = "FieldTurrets" + portable_manned_turret_tr.MaxHealth = 1000 + portable_manned_turret_tr.Damageable = true + portable_manned_turret_tr.Repairable = true + portable_manned_turret_tr.RepairIfDestroyed = false + portable_manned_turret_tr.WeaponPaths += 1 -> new mutable.HashMap() + portable_manned_turret_tr.WeaponPaths(1) += TurretUpgrade.None -> energy_gun_tr + portable_manned_turret_tr.Seats += 0 -> new SeatDefinition() + portable_manned_turret_tr.controlledWeapons(seat = 0, weapon = 1) + portable_manned_turret_tr.MountPoints += 1 -> MountInfo(0) + portable_manned_turret_tr.MountPoints += 2 -> MountInfo(0) + portable_manned_turret_tr.ReserveAmmunition = true + portable_manned_turret_tr.FactionLocked = true + portable_manned_turret_tr.Packet = fieldTurretConverter + portable_manned_turret_tr.DeployCategory = DeployableCategory.FieldTurrets + portable_manned_turret_tr.DeployTime = Duration.create(6000, "ms") + portable_manned_turret_tr.deployAnimation = DeployAnimation.Fdu + portable_manned_turret_tr.Model = ComplexDeployableResolutions.calculate + portable_manned_turret_tr.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 150 + Damage1 = 300 + DamageRadius = 8 + DamageAtEdge = 0.1f + Modifiers = ExplodingRadialDegrade + } + portable_manned_turret_tr.Geometry = largeTurret + portable_manned_turret_tr.collision.xy = CollisionXYData(Array((0.01f, 10), (0.02f, 40), (0.03f, 60), (0.04f, 80), (0.05f, 100))) + portable_manned_turret_tr.collision.z = CollisionZData(Array((4f, 10), (4.25f, 40), (4.5f, 60), (4.75f, 80), (5f, 100))) + portable_manned_turret_tr.mass = 100f + + portable_manned_turret_vs.Name = "portable_manned_turret_vs" + portable_manned_turret_vs.Descriptor = "FieldTurrets" + portable_manned_turret_vs.MaxHealth = 1000 + portable_manned_turret_vs.Damageable = true + portable_manned_turret_vs.Repairable = true + portable_manned_turret_vs.RepairIfDestroyed = false + portable_manned_turret_vs.WeaponPaths += 1 -> new mutable.HashMap() + portable_manned_turret_vs.WeaponPaths(1) += TurretUpgrade.None -> energy_gun_vs + portable_manned_turret_vs.Seats += 0 -> new SeatDefinition() + portable_manned_turret_vs.controlledWeapons(seat = 0, weapon = 1) + portable_manned_turret_vs.MountPoints += 1 -> MountInfo(0) + portable_manned_turret_vs.MountPoints += 2 -> MountInfo(0) + portable_manned_turret_vs.ReserveAmmunition = true + portable_manned_turret_vs.FactionLocked = true + portable_manned_turret_vs.Packet = fieldTurretConverter + portable_manned_turret_vs.DeployCategory = DeployableCategory.FieldTurrets + portable_manned_turret_vs.DeployTime = Duration.create(6000, "ms") + portable_manned_turret_vs.deployAnimation = DeployAnimation.Fdu + portable_manned_turret_vs.Model = ComplexDeployableResolutions.calculate + portable_manned_turret_vs.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 150 + Damage1 = 300 + DamageRadius = 8 + DamageAtEdge = 0.1f + Modifiers = ExplodingRadialDegrade + } + portable_manned_turret_vs.Geometry = largeTurret + portable_manned_turret_vs.collision.xy = CollisionXYData(Array((0.01f, 10), (0.02f, 40), (0.03f, 60), (0.04f, 80), (0.05f, 100))) + portable_manned_turret_vs.collision.z = CollisionZData(Array((4f, 10), (4.25f, 40), (4.5f, 60), (4.75f, 80), (5f, 100))) + portable_manned_turret_vs.mass = 100f + + deployable_shield_generator.Name = "deployable_shield_generator" + deployable_shield_generator.Descriptor = "ShieldGenerators" + deployable_shield_generator.MaxHealth = 1700 + deployable_shield_generator.Damageable = true + deployable_shield_generator.Repairable = true + deployable_shield_generator.RepairIfDestroyed = false + deployable_shield_generator.DeployTime = Duration.create(6000, "ms") + deployable_shield_generator.deployAnimation = DeployAnimation.Fdu + deployable_shield_generator.Model = ComplexDeployableResolutions.calculate + deployable_shield_generator.Geometry = GeometryForm.representByCylinder(radius = 0.6562f, height = 2.17188f) + + router_telepad_deployable.Name = "router_telepad_deployable" + router_telepad_deployable.MaxHealth = 100 + router_telepad_deployable.Damageable = true + router_telepad_deployable.Repairable = false + router_telepad_deployable.DeployTime = Duration.create(1, "ms") + router_telepad_deployable.DeployCategory = DeployableCategory.Telepads + router_telepad_deployable.Packet = new TelepadDeployableConverter + router_telepad_deployable.Model = SimpleResolutions.calculate + router_telepad_deployable.Geometry = GeometryForm.representByRaisedSphere(radius = 1.2344f) + + internal_router_telepad_deployable.Name = "router_telepad_deployable" + internal_router_telepad_deployable.MaxHealth = 1 + internal_router_telepad_deployable.Damageable = false + internal_router_telepad_deployable.Repairable = false + internal_router_telepad_deployable.DeployTime = Duration.create(1, "ms") + internal_router_telepad_deployable.DeployCategory = DeployableCategory.Telepads + internal_router_telepad_deployable.Packet = new InternalTelepadDeployableConverter + } +} diff --git a/src/main/scala/net/psforever/objects/global/GlobalDefinitionsExoSuit.scala b/src/main/scala/net/psforever/objects/global/GlobalDefinitionsExoSuit.scala new file mode 100644 index 000000000..7e88bac80 --- /dev/null +++ b/src/main/scala/net/psforever/objects/global/GlobalDefinitionsExoSuit.scala @@ -0,0 +1,111 @@ +// Copyright (c) 2024 PSForever +package net.psforever.objects.global + +import net.psforever.objects.GlobalDefinitions +import net.psforever.objects.avatar.Certification +import net.psforever.objects.definition.SpecialExoSuitDefinition +import net.psforever.objects.equipment.EquipmentSize +import net.psforever.objects.inventory.InventoryTile +import net.psforever.objects.vital.MaxResolutions +import net.psforever.objects.vital.damage.DamageCalculations + +object GlobalDefinitionsExoSuit { + import GlobalDefinitions._ + + /** + * Initialize `ExoSuitType` globals. + */ + def init(): Unit = { + Standard.Name = "standard" + Standard.MaxArmor = 50 + Standard.InventoryScale = InventoryTile.Tile96 + Standard.InventoryOffset = 6 + Standard.Holster(0, EquipmentSize.Pistol) + Standard.Holster(2, EquipmentSize.Rifle) + Standard.Holster(4, EquipmentSize.Melee) + Standard.ResistanceDirectHit = 4 + Standard.ResistanceSplash = 15 + Standard.ResistanceAggravated = 8 + Standard.collision.forceFactor = 1.5f + Standard.collision.massFactor = 2f + + Agile.Name = "lite_armor" + Agile.Descriptor = "agile" + Agile.MaxArmor = 100 + Agile.InventoryScale = InventoryTile.Tile99 + Agile.InventoryOffset = 6 + Agile.Holster(0, EquipmentSize.Pistol) + Agile.Holster(1, EquipmentSize.Pistol) + Agile.Holster(2, EquipmentSize.Rifle) + Agile.Holster(4, EquipmentSize.Melee) + Agile.ResistanceDirectHit = 6 + Agile.ResistanceSplash = 25 + Agile.ResistanceAggravated = 10 + Agile.collision.forceFactor = 1.5f + Agile.collision.massFactor = 2f + + Reinforced.Name = "med_armor" + Reinforced.Descriptor = "reinforced" + Reinforced.Permissions = List(Certification.ReinforcedExoSuit) + Reinforced.MaxArmor = 200 + Reinforced.InventoryScale = InventoryTile.Tile1209 + Reinforced.InventoryOffset = 6 + Reinforced.Holster(0, EquipmentSize.Pistol) + Reinforced.Holster(1, EquipmentSize.Pistol) + Reinforced.Holster(2, EquipmentSize.Rifle) + Reinforced.Holster(3, EquipmentSize.Rifle) + Reinforced.Holster(4, EquipmentSize.Melee) + Reinforced.ResistanceDirectHit = 10 + Reinforced.ResistanceSplash = 35 + Reinforced.ResistanceAggravated = 12 + Reinforced.collision.forceFactor = 2f + Reinforced.collision.massFactor = 3f + + Infiltration.Name = "infiltration_suit" + Infiltration.Permissions = List(Certification.InfiltrationSuit) + Infiltration.MaxArmor = 0 + Infiltration.InventoryScale = InventoryTile.Tile66 + Infiltration.InventoryOffset = 6 + Infiltration.Holster(0, EquipmentSize.Pistol) + Infiltration.Holster(4, EquipmentSize.Melee) + + def CommonMaxConfig(max: SpecialExoSuitDefinition): Unit = { + max.Permissions = List(Certification.AIMAX, Certification.AVMAX, Certification.AAMAX, Certification.UniMAX) + max.MaxArmor = 650 + max.InventoryScale = InventoryTile.Tile1612 + max.InventoryOffset = 6 + max.Holster(0, EquipmentSize.Max) + max.Holster(4, EquipmentSize.Melee) + max.Subtract.Damage1 = 2 + max.ResistanceDirectHit = 6 + max.ResistanceSplash = 35 + max.ResistanceAggravated = 10 + max.RadiationShielding = 0.5f + max.collision.forceFactor = 4f + max.collision.massFactor = 10f + max.DamageUsing = DamageCalculations.AgainstMaxSuit + max.Model = MaxResolutions.calculate + } + + CommonMaxConfig(VSMAX) + VSMAX.Name = "vshev" + VSMAX.MaxCapacitor = 50 + VSMAX.CapacitorRechargeDelayMillis = 5000 + VSMAX.CapacitorRechargePerSecond = 3 + VSMAX.CapacitorDrainPerSecond = 20 + + CommonMaxConfig(TRMAX) + TRMAX.Name = "trhev" + TRMAX.MaxCapacitor = 300 + TRMAX.CapacitorRechargeDelayMillis = 10000 + TRMAX.CapacitorRechargePerSecond = 10 + TRMAX.CapacitorDrainPerSecond = 30 + + CommonMaxConfig(NCMAX) + NCMAX.Name = "nchev" + NCMAX.MaxCapacitor = 400 + NCMAX.CapacitorRechargeDelayMillis = 10000 + NCMAX.CapacitorRechargePerSecond = 4 + NCMAX.CapacitorDrainPerSecond = 4 + } +} diff --git a/src/main/scala/net/psforever/objects/global/GlobalDefinitionsKit.scala b/src/main/scala/net/psforever/objects/global/GlobalDefinitionsKit.scala new file mode 100644 index 000000000..54fe364b9 --- /dev/null +++ b/src/main/scala/net/psforever/objects/global/GlobalDefinitionsKit.scala @@ -0,0 +1,21 @@ +// Copyright (c) 2024 PSForever +package net.psforever.objects.global + +import net.psforever.objects.GlobalDefinitions + +object GlobalDefinitionsKit { + import GlobalDefinitions._ + + /** + * Initialize `KitDefinition` globals. + */ + def init(): Unit = { + medkit.Name = "medkit" + + super_medkit.Name = "super_medkit" + + super_armorkit.Name = "super_armorkit" + + super_staminakit.Name = "super_staminakit" + } +} diff --git a/src/main/scala/net/psforever/objects/global/GlobalDefinitionsMiscellaneous.scala b/src/main/scala/net/psforever/objects/global/GlobalDefinitionsMiscellaneous.scala new file mode 100644 index 000000000..ad6909922 --- /dev/null +++ b/src/main/scala/net/psforever/objects/global/GlobalDefinitionsMiscellaneous.scala @@ -0,0 +1,856 @@ +// Copyright (c) 2024 PSForever +package net.psforever.objects.global + +import net.psforever.objects.{GlobalDefinitions, SpawnPoint} +import net.psforever.objects.avatar.Certification +import net.psforever.objects.equipment.EffectTarget +import net.psforever.objects.geometry.GeometryForm +import net.psforever.objects.geometry.d3.VolumetricGeometry +import net.psforever.objects.serverobject.mount.{MountInfo, SeatDefinition} +import net.psforever.objects.serverobject.pad.VehicleSpawnPadDefinition +import net.psforever.objects.serverobject.structures.AutoRepairStats +import net.psforever.objects.serverobject.terminals.implant.ImplantTerminalDefinition +import net.psforever.objects.serverobject.terminals.{EquipmentTerminalDefinition, VehicleTerminalDefinition} +import net.psforever.objects.serverobject.terminals.tabs.{ArmorWithAmmoPage, BattleframeSpawnLoadoutPage, CavernEquipmentQuestion, CavernVehicleQuestion, CertificationPage, EquipmentPage, ImplantPage, InfantryLoadoutPage, NoCavernEquipmentRule, NoExoSuitRule, VehicleLoadoutPage, VehiclePage} +import net.psforever.objects.serverobject.turret.{AutoChecks, AutoRanges, Automation, TurretUpgrade} +import net.psforever.objects.vital.base.DamageType +import net.psforever.objects.vital.etc.ExplodingRadialDegrade +import net.psforever.objects.vital.prop.DamageWithPosition +import net.psforever.types.{ExoSuitType, Vector3} + +import scala.collection.mutable +import scala.concurrent.duration._ + +object GlobalDefinitionsMiscellaneous { + import GlobalDefinitions._ + + /** + * Initialize `Miscellaneous` globals. + */ + def init(): Unit = { + val vterm: Any => VolumetricGeometry = GeometryForm.representByCylinder(radius = 1.03515f, height = 1.09374f) + val certs: Seq[Certification] = Certification.values.filter(_.cost != 0) + val page: CertificationPage = CertificationPage(certs) + + ams_respawn_tube.Name = "ams_respawn_tube" + ams_respawn_tube.Delay = 10 // Temporary -- Default value is 15 + ams_respawn_tube.SpecificPointFunc = SpawnPoint.AMS + ams_respawn_tube.Damageable = false + ams_respawn_tube.Repairable = false + + matrix_terminala.Name = "matrix_terminala" + matrix_terminala.Damageable = false + matrix_terminala.Repairable = false + + matrix_terminalb.Name = "matrix_terminalb" + matrix_terminalb.Damageable = false + matrix_terminalb.Repairable = false + + matrix_terminalc.Name = "matrix_terminalc" + matrix_terminalc.Damageable = false + matrix_terminalc.Repairable = false + + spawn_terminal.Name = "spawn_terminal" + spawn_terminal.Damageable = false + spawn_terminal.Repairable = false + spawn_terminal.autoRepair = AutoRepairStats(1, 5000, 200, 1) + + order_terminal.Name = "order_terminal" + order_terminal.Tab += 0 -> { + val tab = EquipmentPage( + EquipmentTerminalDefinition.infantryAmmunition ++ EquipmentTerminalDefinition.infantryWeapons + ) + tab.Exclude = List(CavernEquipmentQuestion) + tab + } + order_terminal.Tab += 1 -> ArmorWithAmmoPage( + EquipmentTerminalDefinition.suits ++ EquipmentTerminalDefinition.maxSuits, + EquipmentTerminalDefinition.maxAmmo + ) + order_terminal.Tab += 2 -> EquipmentPage( + EquipmentTerminalDefinition.supportAmmunition ++ EquipmentTerminalDefinition.supportWeapons + ) + order_terminal.Tab += 3 -> EquipmentPage(EquipmentTerminalDefinition.vehicleAmmunition) + order_terminal.Tab += 4 -> { + val tab = InfantryLoadoutPage() + tab.Exclude = List(CavernEquipmentQuestion) + tab + } + order_terminal.SellEquipmentByDefault = true + order_terminal.MaxHealth = 500 + order_terminal.Damageable = true + order_terminal.Repairable = true + order_terminal.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f) + order_terminal.RepairIfDestroyed = true + order_terminal.Subtract.Damage1 = 8 + order_terminal.Geometry = GeometryForm.representByCylinder(radius = 0.8438f, height = 1.3f) + + order_terminala.Name = "order_terminala" + order_terminala.Tab += 0 -> { + val tab = EquipmentPage( + EquipmentTerminalDefinition.infantryAmmunition ++ EquipmentTerminalDefinition.infantryWeapons + ) + tab.Exclude = List(NoCavernEquipmentRule) + tab + } + order_terminala.Tab += 1 -> ArmorWithAmmoPage( + EquipmentTerminalDefinition.suits, + EquipmentTerminalDefinition.maxAmmo + ) + order_terminala.Tab += 2 -> EquipmentPage( + EquipmentTerminalDefinition.supportAmmunition ++ EquipmentTerminalDefinition.supportWeapons + ) + order_terminala.Tab += 3 -> EquipmentPage(EquipmentTerminalDefinition.vehicleAmmunition) + order_terminala.Tab += 4 -> { + val tab = InfantryLoadoutPage() + tab.Exclude = List(NoExoSuitRule(ExoSuitType.MAX), NoCavernEquipmentRule) + tab + } + order_terminala.SellEquipmentByDefault = true + order_terminala.Damageable = false + order_terminala.Repairable = false + + order_terminalb.Name = "order_terminalb" + order_terminalb.Tab += 0 -> { + val tab = EquipmentPage( + EquipmentTerminalDefinition.infantryAmmunition ++ EquipmentTerminalDefinition.infantryWeapons + ) + tab.Exclude = List(NoCavernEquipmentRule) + tab + } + order_terminalb.Tab += 1 -> ArmorWithAmmoPage( + EquipmentTerminalDefinition.suits, + EquipmentTerminalDefinition.maxAmmo + ) + order_terminalb.Tab += 2 -> EquipmentPage( + EquipmentTerminalDefinition.supportAmmunition ++ EquipmentTerminalDefinition.supportWeapons + ) + order_terminalb.Tab += 3 -> EquipmentPage(EquipmentTerminalDefinition.vehicleAmmunition) + order_terminalb.Tab += 4 -> { + val tab = InfantryLoadoutPage() + tab.Exclude = List(NoExoSuitRule(ExoSuitType.MAX), NoCavernEquipmentRule) + tab + } + order_terminalb.SellEquipmentByDefault = true + order_terminalb.Damageable = false + order_terminalb.Repairable = false + + vanu_equipment_term.Name = "vanu_equipment_term" + vanu_equipment_term.Tab += 0 -> EquipmentPage( + EquipmentTerminalDefinition.infantryAmmunition ++ EquipmentTerminalDefinition.infantryWeapons + ) + vanu_equipment_term.Tab += 1 -> ArmorWithAmmoPage( + EquipmentTerminalDefinition.suits ++ EquipmentTerminalDefinition.maxSuits, + EquipmentTerminalDefinition.maxAmmo + ) + vanu_equipment_term.Tab += 2 -> EquipmentPage( + EquipmentTerminalDefinition.supportAmmunition ++ EquipmentTerminalDefinition.supportWeapons + ) + vanu_equipment_term.Tab += 3 -> EquipmentPage(EquipmentTerminalDefinition.vehicleAmmunition) + vanu_equipment_term.Tab += 4 -> InfantryLoadoutPage() + vanu_equipment_term.SellEquipmentByDefault = true + vanu_equipment_term.Damageable = false + vanu_equipment_term.Repairable = false + + cert_terminal.Name = "cert_terminal" + cert_terminal.Tab += 0 -> page + cert_terminal.MaxHealth = 500 + cert_terminal.Damageable = true + cert_terminal.Repairable = true + cert_terminal.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f) + cert_terminal.RepairIfDestroyed = true + cert_terminal.Subtract.Damage1 = 8 + cert_terminal.Geometry = GeometryForm.representByCylinder(radius = 0.66405f, height = 1.09374f) + + implant_terminal_mech.Name = "implant_terminal_mech" + implant_terminal_mech.MaxHealth = 1500 //TODO 1000; right now, 1000 (mech) + 500 (interface) + implant_terminal_mech.Damageable = true + implant_terminal_mech.Repairable = true + implant_terminal_mech.autoRepair = AutoRepairStats(1.6f, 5000, 2400, 0.05f) + implant_terminal_mech.RepairIfDestroyed = true + implant_terminal_mech.RadiationShielding = 0.5f + implant_terminal_mech.Geometry = GeometryForm.representByCylinder(radius = 2.7813f, height = 6.4375f) + + implant_terminal_interface.Name = "implant_terminal_interface" + implant_terminal_interface.Tab += 0 -> ImplantPage(ImplantTerminalDefinition.implants) + implant_terminal_interface.MaxHealth = 500 + implant_terminal_interface.Damageable = false //TODO true + implant_terminal_interface.Repairable = true + implant_terminal_interface.autoRepair = AutoRepairStats(1, 5000, 200, 1) + implant_terminal_interface.RepairIfDestroyed = true + //TODO will need geometry when Damageable = true + + ground_vehicle_terminal.Name = "ground_vehicle_terminal" + ground_vehicle_terminal.Tab += 46769 -> { + val tab = VehiclePage( + VehicleTerminalDefinition.groundVehicles, + VehicleTerminalDefinition.trunk + ) + tab.Exclude = List(CavernVehicleQuestion) + tab + } + ground_vehicle_terminal.Tab += 4 -> { + val tab = VehicleLoadoutPage(10) + tab.Exclude = List(CavernEquipmentQuestion) + tab + } + ground_vehicle_terminal.MaxHealth = 500 + ground_vehicle_terminal.Damageable = true + ground_vehicle_terminal.Repairable = true + ground_vehicle_terminal.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f) + ground_vehicle_terminal.RepairIfDestroyed = true + ground_vehicle_terminal.Subtract.Damage1 = 8 + ground_vehicle_terminal.Geometry = vterm + + air_vehicle_terminal.Name = "air_vehicle_terminal" + air_vehicle_terminal.Tab += 46769 -> VehiclePage( + VehicleTerminalDefinition.flight1Vehicles, + VehicleTerminalDefinition.trunk + ) + air_vehicle_terminal.Tab += 4 -> { + val tab = VehicleLoadoutPage(10) + tab.Exclude = List(CavernVehicleQuestion, CavernEquipmentQuestion) + tab + } + air_vehicle_terminal.MaxHealth = 500 + air_vehicle_terminal.Damageable = true + air_vehicle_terminal.Repairable = true + air_vehicle_terminal.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f) + air_vehicle_terminal.RepairIfDestroyed = true + air_vehicle_terminal.Subtract.Damage1 = 8 + air_vehicle_terminal.Geometry = vterm + + dropship_vehicle_terminal.Name = "dropship_vehicle_terminal" + dropship_vehicle_terminal.Tab += 46769 -> VehiclePage( + VehicleTerminalDefinition.flight1Vehicles ++ VehicleTerminalDefinition.flight2Vehicles, + VehicleTerminalDefinition.trunk + ) + dropship_vehicle_terminal.Tab += 4 -> { + val tab = VehicleLoadoutPage(10) + tab.Exclude = List(CavernEquipmentQuestion) + tab + } + dropship_vehicle_terminal.MaxHealth = 500 + dropship_vehicle_terminal.Damageable = true + dropship_vehicle_terminal.Repairable = true + dropship_vehicle_terminal.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f) + dropship_vehicle_terminal.RepairIfDestroyed = true + dropship_vehicle_terminal.Subtract.Damage1 = 8 + dropship_vehicle_terminal.Geometry = vterm + + vehicle_terminal_combined.Name = "vehicle_terminal_combined" + vehicle_terminal_combined.Tab += 46769 -> { + val tab = VehiclePage( + VehicleTerminalDefinition.flight1Vehicles ++ VehicleTerminalDefinition.groundVehicles, + VehicleTerminalDefinition.trunk + ) + tab.Exclude = List(CavernVehicleQuestion) + tab + } + vehicle_terminal_combined.Tab += 4 -> { + val tab = VehicleLoadoutPage(10) + tab.Exclude = List(CavernEquipmentQuestion) + tab + } + vehicle_terminal_combined.MaxHealth = 500 + vehicle_terminal_combined.Damageable = true + vehicle_terminal_combined.Repairable = true + vehicle_terminal_combined.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f) + vehicle_terminal_combined.RepairIfDestroyed = true + vehicle_terminal_combined.Subtract.Damage1 = 8 + vehicle_terminal_combined.Geometry = vterm + + vanu_air_vehicle_term.Name = "vanu_air_vehicle_term" + vanu_air_vehicle_term.Tab += 46769 -> VehiclePage( + VehicleTerminalDefinition.flight1Vehicles, + VehicleTerminalDefinition.trunk + ) + vanu_air_vehicle_term.Tab += 4 -> VehicleLoadoutPage(10) + vanu_air_vehicle_term.MaxHealth = 500 + vanu_air_vehicle_term.Damageable = true + vanu_air_vehicle_term.Repairable = true + vanu_air_vehicle_term.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f) + vanu_air_vehicle_term.RepairIfDestroyed = true + vanu_air_vehicle_term.Subtract.Damage1 = 8 + + vanu_vehicle_term.Name = "vanu_vehicle_term" + vanu_vehicle_term.Tab += 46769 -> VehiclePage( + VehicleTerminalDefinition.groundVehicles, + VehicleTerminalDefinition.trunk + ) + vanu_vehicle_term.Tab += 4 -> VehicleLoadoutPage(10) + vanu_vehicle_term.MaxHealth = 500 + vanu_vehicle_term.Damageable = true + vanu_vehicle_term.Repairable = true + vanu_vehicle_term.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f) + vanu_vehicle_term.RepairIfDestroyed = true + vanu_vehicle_term.Subtract.Damage1 = 8 + + bfr_terminal.Name = "bfr_terminal" + bfr_terminal.Tab += 0 -> VehiclePage( + VehicleTerminalDefinition.bfrVehicles, + VehicleTerminalDefinition.trunk + ) + bfr_terminal.Tab += 1 -> EquipmentPage( + EquipmentTerminalDefinition.bfrAmmunition ++ EquipmentTerminalDefinition.bfrArmWeapons + ) //inaccessible? + bfr_terminal.Tab += 2 -> EquipmentPage( + EquipmentTerminalDefinition.bfrAmmunition ++ EquipmentTerminalDefinition.bfrGunnerWeapons + ) //inaccessible? + bfr_terminal.Tab += 3 -> { + val tab = BattleframeSpawnLoadoutPage(VehicleTerminalDefinition.bfrVehicles) + tab.Exclude = List(CavernEquipmentQuestion) + tab + } + bfr_terminal.MaxHealth = 500 + bfr_terminal.Damageable = true + bfr_terminal.Repairable = true + bfr_terminal.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f) + bfr_terminal.RepairIfDestroyed = true + bfr_terminal.Subtract.Damage1 = 8 + bfr_terminal.Geometry = GeometryForm.representByCylinder(radius = 0.92185f, height = 2.64693f) + + respawn_tube.Name = "respawn_tube" + respawn_tube.Delay = 10 + respawn_tube.SpecificPointFunc = SpawnPoint.Tube + respawn_tube.MaxHealth = 1000 + respawn_tube.Damageable = true + respawn_tube.DamageableByFriendlyFire = false + respawn_tube.Repairable = true + respawn_tube.autoRepair = AutoRepairStats(1.6f, 10000, 2400, 1) + respawn_tube.RepairIfDestroyed = true + respawn_tube.Subtract.Damage1 = 8 + respawn_tube.Geometry = GeometryForm.representByCylinder(radius = 0.9336f, height = 2.84375f) + + respawn_tube_sanctuary.Name = "respawn_tube" + respawn_tube_sanctuary.Delay = 10 + respawn_tube_sanctuary.SpecificPointFunc = SpawnPoint.Default + respawn_tube_sanctuary.MaxHealth = 1000 + respawn_tube_sanctuary.Damageable = false //true? + respawn_tube_sanctuary.DamageableByFriendlyFire = false + respawn_tube_sanctuary.Repairable = true + respawn_tube_sanctuary.autoRepair = AutoRepairStats(1.6f, 10000, 2400, 1) + //TODO will need geometry when Damageable = true + + respawn_tube_tower.Name = "respawn_tube_tower" + respawn_tube_tower.Delay = 10 // Temporary -- Default value is 20 + respawn_tube_tower.SpecificPointFunc = SpawnPoint.Tube + respawn_tube_tower.MaxHealth = 1000 + respawn_tube_tower.Damageable = true + respawn_tube_tower.DamageableByFriendlyFire = false + respawn_tube_tower.Repairable = true + respawn_tube_tower.autoRepair = AutoRepairStats(1.6f, 10000, 2400, 1) + respawn_tube_tower.RepairIfDestroyed = true + respawn_tube_tower.Subtract.Damage1 = 8 + respawn_tube_tower.Geometry = GeometryForm.representByCylinder(radius = 0.9336f, height = 2.84375f) + + teleportpad_terminal.Name = "teleportpad_terminal" + teleportpad_terminal.Tab += 0 -> EquipmentPage(EquipmentTerminalDefinition.routerTerminal) + teleportpad_terminal.Damageable = false + teleportpad_terminal.Repairable = false + + targeting_laser_dispenser.Name = "targeting_laser_dispenser" + targeting_laser_dispenser.Tab += 0 -> EquipmentPage(EquipmentTerminalDefinition.flailTerminal) + targeting_laser_dispenser.Damageable = false + targeting_laser_dispenser.Repairable = false + + medical_terminal.Name = "medical_terminal" + medical_terminal.Interval = 500 + medical_terminal.HealAmount = 5 + medical_terminal.ArmorAmount = 10 + medical_terminal.UseRadius = 0.75f + medical_terminal.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.Medical + medical_terminal.MaxHealth = 500 + medical_terminal.Damageable = true + medical_terminal.Repairable = true + medical_terminal.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f) + medical_terminal.RepairIfDestroyed = true + medical_terminal.Geometry = GeometryForm.representByCylinder(radius = 0.711f, height = 1.75f) + + adv_med_terminal.Name = "adv_med_terminal" + adv_med_terminal.Interval = 500 + adv_med_terminal.HealAmount = 8 + adv_med_terminal.ArmorAmount = 15 + adv_med_terminal.UseRadius = 0.75f + adv_med_terminal.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.Medical + adv_med_terminal.MaxHealth = 750 + adv_med_terminal.Damageable = true + adv_med_terminal.Repairable = true + adv_med_terminal.autoRepair = AutoRepairStats(1.57894f, 5000, 2400, 0.05f) + adv_med_terminal.RepairIfDestroyed = true + adv_med_terminal.Geometry = GeometryForm.representByCylinder(radius = 0.8662125f, height = 3.47f) + + crystals_health_a.Name = "crystals_health_a" + crystals_health_a.Interval = 500 + crystals_health_a.HealAmount = 4 + crystals_health_a.UseRadius = 5 + crystals_health_a.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.HealthCrystal + crystals_health_a.Damageable = false + crystals_health_a.Repairable = false + + crystals_health_b.Name = "crystals_health_b" + crystals_health_b.Interval = 500 + crystals_health_b.HealAmount = 4 + crystals_health_b.UseRadius = 5 + crystals_health_b.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.HealthCrystal + crystals_health_b.Damageable = false + crystals_health_b.Repairable = false + + crystals_repair_a.Name = "crystals_repair_a" + crystals_repair_a.Interval = 500 + crystals_repair_a.ArmorAmount = 4 + crystals_repair_a.UseRadius = 5 + crystals_repair_a.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.RepairCrystal + crystals_repair_a.Damageable = false + crystals_repair_a.Repairable = false + + crystals_repair_b.Name = "crystals_repair_b" + crystals_repair_b.Interval = 500 + crystals_repair_b.ArmorAmount = 4 + crystals_repair_b.UseRadius = 5 + crystals_repair_b.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.RepairCrystal + crystals_repair_b.Damageable = false + crystals_repair_b.Repairable = false + + crystals_vehicle_a.Name = "crystals_vehicle_a" + crystals_vehicle_a.Interval = 1000 + crystals_vehicle_a.HealAmount = 60 + crystals_vehicle_a.UseRadius = 15 + crystals_vehicle_a.TargetValidation += EffectTarget.Category.Vehicle -> EffectTarget.Validation.VehicleCrystal + crystals_vehicle_a.Damageable = false + crystals_vehicle_a.Repairable = false + + crystals_vehicle_b.Name = "crystals_vehicle_b" + crystals_vehicle_b.Interval = 1000 + crystals_vehicle_b.HealAmount = 60 + crystals_vehicle_b.UseRadius = 15 + crystals_vehicle_b.TargetValidation += EffectTarget.Category.Vehicle -> EffectTarget.Validation.VehicleCrystal + crystals_vehicle_b.Damageable = false + crystals_vehicle_b.Repairable = false + + crystals_energy_a.Name = "crystals_energy_a" + crystals_energy_a.Interval = 1000 + crystals_energy_a.UseRadius = 5 + crystals_energy_a.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.AncientWeaponRecharge + crystals_energy_a.Damageable = false + crystals_energy_a.Repairable = false + + crystals_energy_b.Name = "crystals_energy_b" + crystals_energy_b.Interval = 1000 + crystals_energy_b.UseRadius = 5 + crystals_energy_b.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.AncientWeaponRecharge + crystals_energy_b.Damageable = false + crystals_energy_b.Repairable = false + + crystals_energy.Name = "crystals_energy" + crystals_energy.Interval = 1000 + crystals_energy.UseRadius = 5 + crystals_energy.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.AncientWeaponRecharge + crystals_energy.Damageable = false + crystals_energy.Repairable = false + + portable_med_terminal.Name = "portable_med_terminal" + portable_med_terminal.Interval = 500 + portable_med_terminal.HealAmount = 5 + portable_med_terminal.ArmorAmount = 10 + portable_med_terminal.UseRadius = 3 + portable_med_terminal.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.Medical + portable_med_terminal.MaxHealth = 500 + portable_med_terminal.Damageable = false //TODO actually true + portable_med_terminal.Repairable = false + portable_med_terminal.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f) + + pad_landing_frame.Name = "pad_landing_frame" + pad_landing_frame.Interval = 1000 + pad_landing_frame.HealAmount = 60 + pad_landing_frame.UseRadius = 20 + pad_landing_frame.TargetValidation += EffectTarget.Category.Aircraft -> EffectTarget.Validation.PadLanding + pad_landing_frame.Damageable = false + pad_landing_frame.Repairable = false + + pad_landing_tower_frame.Name = "pad_landing_tower_frame" + pad_landing_tower_frame.Interval = 1000 + pad_landing_tower_frame.HealAmount = 60 + pad_landing_tower_frame.UseRadius = 20 + pad_landing_tower_frame.TargetValidation += EffectTarget.Category.Aircraft -> EffectTarget.Validation.PadLanding + pad_landing_tower_frame.Damageable = false + pad_landing_tower_frame.Repairable = false + + repair_silo.Name = "repair_silo" + repair_silo.Interval = 1000 + repair_silo.HealAmount = 60 + repair_silo.UseRadius = 20 + repair_silo.TargetValidation += EffectTarget.Category.Vehicle -> EffectTarget.Validation.RepairSilo + repair_silo.Damageable = false + repair_silo.Repairable = false + + recharge_terminal.Name = "recharge_terminal" + recharge_terminal.Interval = 1000 + recharge_terminal.UseRadius = 20 + recharge_terminal.TargetValidation += EffectTarget.Category.Vehicle -> EffectTarget.Validation.AncientVehicleWeaponRecharge + recharge_terminal.Damageable = false + recharge_terminal.Repairable = false + + recharge_terminal_weapon_module.Name = "recharge_terminal_weapon_module" + recharge_terminal_weapon_module.Interval = 1000 + recharge_terminal_weapon_module.UseRadius = 300 + recharge_terminal_weapon_module.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.AncientWeaponRecharge + recharge_terminal_weapon_module.Damageable = false + recharge_terminal_weapon_module.Repairable = false + + mb_pad_creation.Name = "mb_pad_creation" + mb_pad_creation.Damageable = false + mb_pad_creation.Repairable = false + mb_pad_creation.VehicleCreationZOffset = 2.52604f + mb_pad_creation.killBox = VehicleSpawnPadDefinition.prepareKillBox( + forwardLimit = 14, + backLimit = 10, + sideLimit = 7.5f, + aboveLimit = 5 //double to 10 when spawning a flying vehicle + ) + mb_pad_creation.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 99999 + DamageRadiusMin = 14 + DamageRadius = 14.5f + DamageAtEdge = 0.00002f + //damage is 99999 at 14m, dropping rapidly to ~1 at 14.5m + } + + dropship_pad_doors.Name = "dropship_pad_doors" + dropship_pad_doors.Damageable = false + dropship_pad_doors.Repairable = false + dropship_pad_doors.VehicleCreationZOffset = 4.89507f + dropship_pad_doors.VehicleCreationZOrientOffset = -90f + dropship_pad_doors.killBox = VehicleSpawnPadDefinition.prepareKillBox( + forwardLimit = 14, + backLimit = 14, + sideLimit = 13.5f, + aboveLimit = 5 //doubles to 10 + ) + dropship_pad_doors.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 99999 + DamageRadiusMin = 14 + DamageRadius = 14.5f + DamageAtEdge = 0.00002f + //damage is 99999 at 14m, dropping rapidly to ~1 at 14.5m + } + + vanu_vehicle_creation_pad.Name = "vanu_vehicle_creation_pad" + vanu_vehicle_creation_pad.Damageable = false + vanu_vehicle_creation_pad.Repairable = false + vanu_vehicle_creation_pad.killBox = VehicleSpawnPadDefinition.prepareVanuKillBox( + radius = 8.5f, + aboveLimit = 5 + ) + vanu_vehicle_creation_pad.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 99999 + DamageRadiusMin = 14 + DamageRadius = 14.5f + DamageAtEdge = 0.00002f + //damage is 99999 at 14m, dropping rapidly to ~1 at 14.5m + } + + bfr_door.Name = "bfr_door" + bfr_door.Damageable = false + bfr_door.Repairable = false + //bfr_door.VehicleCreationZOffset = -4.5f + bfr_door.VehicleCreationZOrientOffset = 0f //90f + bfr_door.killBox = VehicleSpawnPadDefinition.prepareBfrShedKillBox( + radius = 10f, + aboveLimit = 10f + ) + bfr_door.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 99999 + DamageRadiusMin = 14 //TODO fix this + DamageRadius = 14.5f //TODO fix this + DamageAtEdge = 0.00002f + //damage is 99999 at 14m, dropping rapidly to ~1 at 14.5m + } + + pad_create.Name = "pad_create" + pad_create.Damageable = false + pad_create.Repairable = false + //pad_create.killBox = ... + //pad_create.innateDamage = ... + + pad_creation.Name = "pad_creation" + pad_creation.Damageable = false + pad_creation.Repairable = false + pad_creation.VehicleCreationZOffset = 1.70982f + //pad_creation.killBox = ... + //pad_creation.innateDamage = ... + + spawnpoint_vehicle.Name = "spawnpoint_vehicle" + spawnpoint_vehicle.Damageable = false + spawnpoint_vehicle.Repairable = false + //spawnpoint_vehicle.killBox = ... + //spawnpoint_vehicle.innateDamage = ... + + mb_locker.Name = "mb_locker" + mb_locker.Damageable = false + mb_locker.Repairable = false + + lock_external.Name = "lock_external" + lock_external.Damageable = false + lock_external.Repairable = false + + door.Name = "door" + door.Damageable = false + door.Repairable = false + + door_spawn_mb.Name = "door_spawn_mb" + door_spawn_mb.Damageable = true + door_spawn_mb.Repairable = false + + gr_door_mb_orb.Name = "gr_door_mb_orb" + gr_door_mb_orb.Damageable = false + gr_door_mb_orb.Repairable = false + + spawn_tube_door.Name = "spawn_tube_door" + spawn_tube_door.Damageable = true + spawn_tube_door.Repairable = false + + resource_silo.Name = "resource_silo" + resource_silo.Damageable = false + resource_silo.Repairable = false + resource_silo.MaxNtuCapacitor = 1000 + resource_silo.ChargeTime = 105.seconds //from 0-100% in roughly 105s on live (~20%-100% https://youtu.be/veOWToR2nSk?t=1402) + + capture_terminal.Name = "capture_terminal" + capture_terminal.Damageable = false + capture_terminal.Repairable = false + capture_terminal.FacilityHackTime = 15.minutes + + secondary_capture.Name = "secondary_capture" + secondary_capture.Damageable = false + secondary_capture.Repairable = false + secondary_capture.FacilityHackTime = 1.millisecond + + vanu_control_console.Name = "vanu_control_console" + vanu_control_console.Damageable = false + vanu_control_console.Repairable = false + vanu_control_console.FacilityHackTime = 10.minutes + + lodestar_repair_terminal.Name = "lodestar_repair_terminal" + lodestar_repair_terminal.Interval = 1000 + lodestar_repair_terminal.HealAmount = 60 + lodestar_repair_terminal.UseRadius = 40 + lodestar_repair_terminal.TargetValidation += EffectTarget.Category.Vehicle -> EffectTarget.Validation.LodestarRepair + lodestar_repair_terminal.Damageable = false + lodestar_repair_terminal.Repairable = false + + multivehicle_rearm_terminal.Name = "multivehicle_rearm_terminal" + multivehicle_rearm_terminal.Tab += 3 -> EquipmentPage( + EquipmentTerminalDefinition.vehicleAmmunition + ) + multivehicle_rearm_terminal.Tab += 4 -> { + val tab = VehicleLoadoutPage(10) + tab.Exclude = List(CavernEquipmentQuestion) + tab + } + multivehicle_rearm_terminal.SellEquipmentByDefault = true //TODO ? + multivehicle_rearm_terminal.Damageable = false + multivehicle_rearm_terminal.Repairable = false + + bfr_rearm_terminal.Name = "bfr_rearm_terminal" + bfr_rearm_terminal.Tab += 1 -> EquipmentPage( + EquipmentTerminalDefinition.bfrAmmunition ++ EquipmentTerminalDefinition.bfrArmWeapons + ) + bfr_rearm_terminal.Tab += 2 -> EquipmentPage( + EquipmentTerminalDefinition.bfrAmmunition ++ EquipmentTerminalDefinition.bfrGunnerWeapons + ) + bfr_rearm_terminal.Tab += 3 -> { + val tab = VehicleLoadoutPage(15) + tab.Exclude = List(CavernEquipmentQuestion) + tab + } + bfr_rearm_terminal.SellEquipmentByDefault = true //TODO ? + bfr_rearm_terminal.Damageable = false + bfr_rearm_terminal.Repairable = false + + air_rearm_terminal.Name = "air_rearm_terminal" + air_rearm_terminal.Tab += 3 -> EquipmentPage(EquipmentTerminalDefinition.vehicleAmmunition) + air_rearm_terminal.Tab += 4 -> { + val tab = VehicleLoadoutPage(10) + tab.Exclude = List(CavernEquipmentQuestion) + tab + } + air_rearm_terminal.SellEquipmentByDefault = true //TODO ? + air_rearm_terminal.Damageable = false + air_rearm_terminal.Repairable = false + + ground_rearm_terminal.Name = "ground_rearm_terminal" + ground_rearm_terminal.Tab += 3 -> EquipmentPage( + EquipmentTerminalDefinition.vehicleAmmunition + ) + ground_rearm_terminal.Tab += 4 -> { + val tab = VehicleLoadoutPage(10) + tab.Exclude = List(CavernEquipmentQuestion) + tab + } + ground_rearm_terminal.SellEquipmentByDefault = true //TODO ? + ground_rearm_terminal.Damageable = false + ground_rearm_terminal.Repairable = false + + manned_turret.Name = "manned_turret" + manned_turret.MaxHealth = 3600 + manned_turret.Damageable = true + manned_turret.DamageDisablesAt = 1800 + manned_turret.Repairable = true + manned_turret.autoRepair = AutoRepairStats(1.0909f, 10000, 1600, 0.05f) + manned_turret.RepairIfDestroyed = true + manned_turret.WeaponPaths += 1 -> new mutable.HashMap() + manned_turret.WeaponPaths(1) += TurretUpgrade.None -> phalanx_sgl_hevgatcan + manned_turret.WeaponPaths(1) += TurretUpgrade.AVCombo -> phalanx_avcombo + manned_turret.WeaponPaths(1) += TurretUpgrade.FlakCombo -> phalanx_flakcombo + manned_turret.Seats += 0 -> new SeatDefinition() + manned_turret.controlledWeapons(seat = 0, weapon = 1) + manned_turret.MountPoints += 1 -> MountInfo(0) + manned_turret.FactionLocked = true + manned_turret.ReserveAmmunition = false + manned_turret.RadiationShielding = 0.5f + manned_turret.AutoFire = Automation( + AutoRanges( + detection = 125f, + trigger = 100f, + escape = 200f + ), + AutoChecks( + validation = List( + EffectTarget.Validation.FacilityTurretValidateMaxTarget, + EffectTarget.Validation.FacilityTurretValidateGroundVehicleTarget, + EffectTarget.Validation.FacilityTurretValidateAircraftTarget, + EffectTarget.Validation.AutoTurretValidateMountableEntityTarget + ) + ), + retaliatoryDelay = 4000L, //8000L + cylindrical = true, + cylindricalExtraHeight = 50f, + detectionSweepTime = 2.seconds, + refireTime = 362.milliseconds //312.milliseconds + ) + manned_turret.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 150 + Damage1 = 300 + DamageRadius = 5 + DamageAtEdge = 0.1f + Modifiers = ExplodingRadialDegrade + } + manned_turret.Geometry = GeometryForm.representByCylinder(radius = 1.2695f, height = 4.042f) + + vanu_sentry_turret.Name = "vanu_sentry_turret" + vanu_sentry_turret.MaxHealth = 1500 + vanu_sentry_turret.Damageable = true + vanu_sentry_turret.DamageDisablesAt = 0 + vanu_sentry_turret.Repairable = true + vanu_sentry_turret.autoRepair = AutoRepairStats(3.27272f, 10000, 1000, 0.05f) + vanu_sentry_turret.RepairIfDestroyed = true + vanu_sentry_turret.WeaponPaths += 1 -> new mutable.HashMap() + vanu_sentry_turret.WeaponPaths(1) += TurretUpgrade.None -> vanu_sentry_turret_weapon + vanu_sentry_turret.Seats += 0 -> new SeatDefinition() + vanu_sentry_turret.controlledWeapons(seat = 0, weapon = 1) + vanu_sentry_turret.MountPoints += 1 -> MountInfo(0) + vanu_sentry_turret.MountPoints += 2 -> MountInfo(0) + vanu_sentry_turret.FactionLocked = false + vanu_sentry_turret.ReserveAmmunition = false + vanu_sentry_turret.Geometry = GeometryForm.representByCylinder(radius = 1.76311f, height = 3.984375f) + + painbox.Name = "painbox" + painbox.alwaysOn = false + painbox.sphereOffset = Vector3(0, 0, -0.4f) + painbox.Damageable = false + painbox.Repairable = false + painbox.innateDamage = new DamageWithPosition { + Damage0 = 2 + DamageRadius = 0 + DamageToHealthOnly = true + } + + painbox_continuous.Name = "painbox_continuous" + painbox_continuous.sphereOffset = Vector3(0, 0, -0.4f) + painbox_continuous.Damageable = false + painbox_continuous.Repairable = false + painbox_continuous.innateDamage = new DamageWithPosition { + Damage0 = 2 + DamageRadius = 0 + DamageToHealthOnly = true + } + + painbox_door_radius.Name = "painbox_door_radius" + painbox_door_radius.alwaysOn = false + painbox_door_radius.sphereOffset = Vector3(0, 0, -0.4f) + painbox_door_radius.hasNearestDoorDependency = true + painbox_door_radius.Damageable = false + painbox_door_radius.Repairable = false + painbox_door_radius.innateDamage = new DamageWithPosition { + Damage0 = 2 + DamageRadius = 10f * 0.6928f + DamageToHealthOnly = true + } + + painbox_door_radius_continuous.Name = "painbox_door_radius_continuous" + painbox_door_radius_continuous.sphereOffset = Vector3(0, 0, -0.4f) + painbox_door_radius_continuous.hasNearestDoorDependency = true + painbox_door_radius_continuous.Damageable = false + painbox_door_radius_continuous.Repairable = false + painbox_door_radius_continuous.innateDamage = new DamageWithPosition { + Damage0 = 2 + DamageRadius = 10f * 0.6928f + DamageToHealthOnly = true + } + + painbox_radius.Name = "painbox_radius" + painbox_radius.alwaysOn = false + painbox_radius.sphereOffset = Vector3(0, 0, -0.4f) + painbox_radius.Damageable = false + painbox_radius.Repairable = false + painbox_radius.innateDamage = new DamageWithPosition { + Damage0 = 2 + DamageRadius = 10f * 0.6928f + DamageToHealthOnly = true + } + + painbox_radius_continuous.Name = "painbox_radius_continuous" + painbox_radius_continuous.Damageable = false + painbox_radius_continuous.Repairable = false + painbox_radius_continuous.innateDamage = new DamageWithPosition { + Damage0 = 2 + DamageRadius = 8.55f + DamageToHealthOnly = true + } + + gen_control.Name = "gen_control" + gen_control.Damageable = false + gen_control.Repairable = false + + generator.Name = "generator" + generator.MaxHealth = 4000 + generator.Damageable = true + generator.DamageableByFriendlyFire = false + generator.Repairable = true + generator.autoRepair = AutoRepairStats(0.77775f, 5000, 875, 1) + generator.RepairDistance = 13.5f + generator.RepairIfDestroyed = true + generator.Subtract.Damage1 = 9 + generator.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 99999 + DamageRadiusMin = 15 + DamageRadius = 15.1f + DamageAtEdge = 0.000011f + Modifiers = ExplodingRadialDegrade + //damage is 99999 at 15m, dropping rapidly to ~1 at 15.1m + } + generator.Geometry = GeometryForm.representByCylinder(radius = 1.2617f, height = 9.14063f) + + obbasemesh.Name = "obbasemesh" + obbasemesh.Descriptor = "orbital_shuttle_pad" + obbasemesh.Damageable = false + obbasemesh.Repairable = false + } +} diff --git a/src/main/scala/net/psforever/objects/global/GlobalDefinitionsProjectile.scala b/src/main/scala/net/psforever/objects/global/GlobalDefinitionsProjectile.scala new file mode 100644 index 000000000..1997b8cd1 --- /dev/null +++ b/src/main/scala/net/psforever/objects/global/GlobalDefinitionsProjectile.scala @@ -0,0 +1,2332 @@ +// Copyright (c) 2024 PSForever +package net.psforever.objects.global + +import net.psforever.objects.GlobalDefinitions +import net.psforever.objects.ballistics.{AggravatedDamage, AggravatedInfo, AggravatedTiming, ChargeDamage} +import net.psforever.objects.definition.ProjectileDefinition +import net.psforever.objects.definition.converter.{ + LittleBuddyProjectileConverter, + ProjectileConverter, + RadiationCloudConverter +} +import net.psforever.objects.equipment.{ArmorSiphonRepairHost, EffectTarget, TargetValidation} +import net.psforever.objects.serverobject.aura.Aura +import net.psforever.objects.vital.base.DamageType +import net.psforever.objects.vital.damage.{RadialDegrade, StandardDamageProfile} +import net.psforever.objects.vital.etc.{ + ArmorSiphonMaxDistanceCutoff, + ExplosionDamagesOnlyAbove, + InfantryAggravatedRadiation, + InfantryAggravatedRadiationBurn +} +import net.psforever.objects.vital.projectile._ + +object GlobalDefinitionsProjectile { + import GlobalDefinitions._ + + /** + * Initialize `ProjectileDefinition` globals. + */ + def init(): Unit = { + init_standard_projectile() + init_bfr_projectile() + } + + /** + * Initialize `ProjectileDefinition` globals for most projectiles. + */ + private def init_standard_projectile(): Unit = { + val projectileConverter: ProjectileConverter = new ProjectileConverter + val radCloudConverter: RadiationCloudConverter = new RadiationCloudConverter + + no_projectile.Name = "no_projectile" + no_projectile.DamageRadiusMin = 0f + ProjectileDefinition.CalculateDerivedFields(no_projectile) + no_projectile.Modifiers = Nil + + bullet_105mm_projectile.Name = "105mmbullet_projectile" + bullet_105mm_projectile.Damage0 = 150 + bullet_105mm_projectile.Damage1 = 300 + bullet_105mm_projectile.Damage2 = 300 + bullet_105mm_projectile.Damage3 = 300 + bullet_105mm_projectile.Damage4 = 180 + bullet_105mm_projectile.DamageAtEdge = 0.1f + bullet_105mm_projectile.DamageRadius = 7f + bullet_105mm_projectile.ProjectileDamageType = DamageType.Splash + bullet_105mm_projectile.InitialVelocity = 100 + bullet_105mm_projectile.Lifespan = 4f + ProjectileDefinition.CalculateDerivedFields(bullet_105mm_projectile) + + bullet_12mm_projectile.Name = "12mmbullet_projectile" + bullet_12mm_projectile.Damage0 = 25 + bullet_12mm_projectile.Damage1 = 10 + bullet_12mm_projectile.Damage2 = 25 + bullet_12mm_projectile.Damage3 = 10 + bullet_12mm_projectile.Damage4 = 7 + bullet_12mm_projectile.ProjectileDamageType = DamageType.Direct + bullet_12mm_projectile.DegradeDelay = .015f + bullet_12mm_projectile.DegradeMultiplier = 0.5f + bullet_12mm_projectile.InitialVelocity = 500 + bullet_12mm_projectile.Lifespan = 0.5f + bullet_12mm_projectile.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(bullet_12mm_projectile) + + bullet_12mm_projectileb.Name = "12mmbullet_projectileb" + // TODO for later, maybe : set_resource_parent 12mmbullet_projectileb game_objects 12mmbullet_projectile + bullet_12mm_projectileb.Damage0 = 25 + bullet_12mm_projectileb.Damage1 = 10 + bullet_12mm_projectileb.Damage2 = 25 + bullet_12mm_projectileb.Damage3 = 10 + bullet_12mm_projectileb.Damage4 = 7 + bullet_12mm_projectileb.ProjectileDamageType = DamageType.Direct + bullet_12mm_projectileb.DegradeDelay = .015f + bullet_12mm_projectileb.DegradeMultiplier = 0.5f + bullet_12mm_projectileb.InitialVelocity = 500 + bullet_12mm_projectileb.Lifespan = 0.5f + bullet_12mm_projectileb.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(bullet_12mm_projectileb) + + bullet_150mm_projectile.Name = "150mmbullet_projectile" + bullet_150mm_projectile.Damage0 = 150 + bullet_150mm_projectile.Damage1 = 450 + bullet_150mm_projectile.Damage2 = 450 + bullet_150mm_projectile.Damage3 = 450 + bullet_150mm_projectile.Damage4 = 400 + bullet_150mm_projectile.DamageAtEdge = 0.10f + bullet_150mm_projectile.DamageRadius = 8f + bullet_150mm_projectile.ProjectileDamageType = DamageType.Splash + bullet_150mm_projectile.InitialVelocity = 100 + bullet_150mm_projectile.Lifespan = 4f + ProjectileDefinition.CalculateDerivedFields(bullet_150mm_projectile) + bullet_150mm_projectile.Modifiers = RadialDegrade + + bullet_15mm_apc_projectile.Name = "15mmbullet_apc_projectile" + // TODO for later, maybe : set_resource_parent 15mmbullet_apc_projectile game_objects 15mmbullet_projectile + bullet_15mm_apc_projectile.Damage0 = 12 + bullet_15mm_apc_projectile.Damage1 = 20 + bullet_15mm_apc_projectile.Damage2 = 30 + bullet_15mm_apc_projectile.Damage3 = 20 + bullet_15mm_apc_projectile.Damage4 = 16 + bullet_15mm_apc_projectile.ProjectileDamageType = DamageType.Direct + bullet_15mm_apc_projectile.DegradeDelay = .015f + bullet_15mm_apc_projectile.DegradeMultiplier = 0.5f + bullet_15mm_apc_projectile.InitialVelocity = 500 + bullet_15mm_apc_projectile.Lifespan = 0.5f + ProjectileDefinition.CalculateDerivedFields(bullet_15mm_apc_projectile) + + bullet_15mm_projectile.Name = "15mmbullet_projectile" + bullet_15mm_projectile.Damage0 = 21 + bullet_15mm_projectile.Damage1 = 18 + bullet_15mm_projectile.Damage2 = 25 + bullet_15mm_projectile.Damage3 = 18 + bullet_15mm_projectile.Damage4 = 11 + bullet_15mm_projectile.ProjectileDamageType = DamageType.Direct + bullet_15mm_projectile.DegradeDelay = .015f + bullet_15mm_projectile.DegradeMultiplier = 0.5f + bullet_15mm_projectile.InitialVelocity = 500 + bullet_15mm_projectile.Lifespan = 0.5f + ProjectileDefinition.CalculateDerivedFields(bullet_15mm_projectile) + + bullet_20mm_apc_projectile.Name = "20mmbullet_apc_projectile" + // TODO for later, maybe : set_resource_parent 20mmbullet_apc_projectile game_objects 20mmbullet_projectile + bullet_20mm_apc_projectile.Damage0 = 24 + bullet_20mm_apc_projectile.Damage1 = 40 + bullet_20mm_apc_projectile.Damage2 = 60 + bullet_20mm_apc_projectile.Damage3 = 40 + bullet_20mm_apc_projectile.Damage4 = 32 + bullet_20mm_apc_projectile.ProjectileDamageType = DamageType.Direct + bullet_20mm_apc_projectile.DegradeDelay = .015f + bullet_20mm_apc_projectile.DegradeMultiplier = 0.5f + bullet_20mm_apc_projectile.InitialVelocity = 500 + bullet_20mm_apc_projectile.Lifespan = 0.5f + ProjectileDefinition.CalculateDerivedFields(bullet_20mm_apc_projectile) + + bullet_20mm_projectile.Name = "20mmbullet_projectile" + bullet_20mm_projectile.Damage0 = 20 + bullet_20mm_projectile.Damage1 = 20 + bullet_20mm_projectile.Damage2 = 40 + bullet_20mm_projectile.Damage3 = 20 + bullet_20mm_projectile.Damage4 = 16 + bullet_20mm_projectile.ProjectileDamageType = DamageType.Direct + bullet_20mm_projectile.DegradeDelay = .015f + bullet_20mm_projectile.DegradeMultiplier = 0.5f + bullet_20mm_projectile.InitialVelocity = 500 + bullet_20mm_projectile.Lifespan = 0.5f + ProjectileDefinition.CalculateDerivedFields(bullet_20mm_projectile) + + bullet_25mm_projectile.Name = "25mmbullet_projectile" + bullet_25mm_projectile.Damage0 = 25 + bullet_25mm_projectile.Damage1 = 35 + bullet_25mm_projectile.Damage2 = 50 + bullet_25mm_projectile.ProjectileDamageType = DamageType.Direct + bullet_25mm_projectile.DegradeDelay = .02f + bullet_25mm_projectile.DegradeMultiplier = 0.5f + bullet_25mm_projectile.InitialVelocity = 500 + bullet_25mm_projectile.Lifespan = 0.6f + ProjectileDefinition.CalculateDerivedFields(bullet_25mm_projectile) + + bullet_35mm_projectile.Name = "35mmbullet_projectile" + bullet_35mm_projectile.Damage0 = 40 + bullet_35mm_projectile.Damage1 = 50 + bullet_35mm_projectile.Damage2 = 60 + bullet_35mm_projectile.ProjectileDamageType = DamageType.Direct + bullet_35mm_projectile.DegradeDelay = .015f + bullet_35mm_projectile.DegradeMultiplier = 0.5f + bullet_35mm_projectile.InitialVelocity = 200 + bullet_35mm_projectile.Lifespan = 1.5f + ProjectileDefinition.CalculateDerivedFields(bullet_35mm_projectile) + + bullet_75mm_apc_projectile.Name = "75mmbullet_apc_projectile" + // TODO for later, maybe : set_resource_parent 75mmbullet_apc_projectile game_objects 75mmbullet_projectile + bullet_75mm_apc_projectile.Damage0 = 85 + bullet_75mm_apc_projectile.Damage1 = 155 + bullet_75mm_apc_projectile.DamageAtEdge = 0.1f + bullet_75mm_apc_projectile.DamageRadius = 5f + bullet_75mm_apc_projectile.ProjectileDamageType = DamageType.Splash + bullet_75mm_apc_projectile.InitialVelocity = 100 + bullet_75mm_apc_projectile.Lifespan = 4f + ProjectileDefinition.CalculateDerivedFields(bullet_75mm_apc_projectile) + bullet_75mm_apc_projectile.Modifiers = RadialDegrade + + bullet_75mm_projectile.Name = "75mmbullet_projectile" + bullet_75mm_projectile.Damage0 = 75 + bullet_75mm_projectile.Damage1 = 125 + bullet_75mm_projectile.DamageAtEdge = 0.1f + bullet_75mm_projectile.DamageRadius = 5f + bullet_75mm_projectile.ProjectileDamageType = DamageType.Splash + bullet_75mm_projectile.InitialVelocity = 100 + bullet_75mm_projectile.Lifespan = 4f + ProjectileDefinition.CalculateDerivedFields(bullet_75mm_projectile) + bullet_75mm_projectile.Modifiers = RadialDegrade + + bullet_9mm_AP_projectile.Name = "9mmbullet_AP_projectile" + // TODO for later, maybe : set_resource_parent 9mmbullet_AP_projectile game_objects 9mmbullet_projectile + bullet_9mm_AP_projectile.Damage0 = 10 + bullet_9mm_AP_projectile.Damage1 = 15 + bullet_9mm_AP_projectile.ProjectileDamageType = DamageType.Direct + bullet_9mm_AP_projectile.DegradeDelay = 0.15f + bullet_9mm_AP_projectile.DegradeMultiplier = 0.25f + bullet_9mm_AP_projectile.InitialVelocity = 500 + bullet_9mm_AP_projectile.Lifespan = 0.4f + bullet_9mm_AP_projectile.UseDamage1Subtract = true + bullet_9mm_AP_projectile.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(bullet_9mm_AP_projectile) + + bullet_9mm_projectile.Name = "9mmbullet_projectile" + bullet_9mm_projectile.Damage0 = 18 + bullet_9mm_projectile.Damage1 = 10 + bullet_9mm_projectile.ProjectileDamageType = DamageType.Direct + bullet_9mm_projectile.DegradeDelay = 0.15f + bullet_9mm_projectile.DegradeMultiplier = 0.25f + bullet_9mm_projectile.InitialVelocity = 500 + bullet_9mm_projectile.Lifespan = 0.4f + bullet_9mm_projectile.UseDamage1Subtract = true + bullet_9mm_projectile.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(bullet_9mm_projectile) + + anniversary_projectilea.Name = "anniversary_projectilea" + anniversary_projectilea.Damage0 = 30 + anniversary_projectilea.Damage1 = 15 + anniversary_projectilea.Damage2 = 15 + anniversary_projectilea.Damage3 = 45 + anniversary_projectilea.Damage4 = 15 + anniversary_projectilea.ProjectileDamageType = DamageType.Direct + anniversary_projectilea.DegradeDelay = 0.04f + anniversary_projectilea.DegradeMultiplier = 0.2f + anniversary_projectilea.InitialVelocity = 500 + anniversary_projectilea.Lifespan = 0.5f + anniversary_projectilea.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(anniversary_projectilea) + + anniversary_projectileb.Name = "anniversary_projectileb" + // TODO for later, maybe : set_resource_parent anniversary_projectileb game_objects anniversary_projectilea + anniversary_projectileb.Damage0 = 30 + anniversary_projectileb.Damage1 = 15 + anniversary_projectileb.Damage2 = 15 + anniversary_projectileb.Damage3 = 45 + anniversary_projectileb.Damage4 = 15 + anniversary_projectileb.ProjectileDamageType = DamageType.Direct + anniversary_projectileb.DegradeDelay = 0.04f + anniversary_projectileb.DegradeMultiplier = 0.2f + anniversary_projectileb.InitialVelocity = 500 + anniversary_projectileb.Lifespan = 0.5f + anniversary_projectileb.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(anniversary_projectileb) + + bolt_projectile.Name = "bolt_projectile" + bolt_projectile.Damage0 = 100 + bolt_projectile.Damage1 = 50 + bolt_projectile.Damage2 = 50 + bolt_projectile.Damage3 = 50 + bolt_projectile.Damage4 = 75 + bolt_projectile.ProjectileDamageType = DamageType.Splash + bolt_projectile.InitialVelocity = 500 + bolt_projectile.Lifespan = 1.0f + bolt_projectile.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(bolt_projectile) + //TODO bolt_projectile.Modifiers = DistanceDegrade? + + burster_projectile.Name = "burster_projectile" + burster_projectile.Damage0 = 18 + burster_projectile.Damage1 = 25 + burster_projectile.Damage2 = 50 + burster_projectile.DamageAtEdge = 0.25f + burster_projectile.DamageRadius = 10f + burster_projectile.ProjectileDamageType = DamageType.Direct + burster_projectile.ProjectileDamageTypeSecondary = DamageType.Splash + burster_projectile.InitialVelocity = 125 + burster_projectile.Lifespan = 4f + ProjectileDefinition.CalculateDerivedFields(burster_projectile) + burster_projectile.Modifiers = List( + //FlakHit, + FlakBurst, + MaxDistanceCutoff + ) + + chainblade_projectile.Name = "chainblade_projectile" + // TODO for later, maybe : set_resource_parent chainblade_projectile game_objects melee_ammo_projectile + chainblade_projectile.Damage0 = 50 + chainblade_projectile.Damage1 = 0 + chainblade_projectile.ProjectileDamageType = DamageType.Direct + chainblade_projectile.InitialVelocity = 100 + chainblade_projectile.Lifespan = .02f + ProjectileDefinition.CalculateDerivedFields(chainblade_projectile) + chainblade_projectile.Modifiers = List(MeleeBoosted, MaxDistanceCutoff) + + comet_projectile.Name = "comet_projectile" + comet_projectile.Damage0 = 15 + comet_projectile.Damage1 = 60 + comet_projectile.Damage2 = 60 + comet_projectile.Damage3 = 38 + comet_projectile.Damage4 = 64 + comet_projectile.Acceleration = 10 + comet_projectile.AccelerationUntil = 2f + comet_projectile.DamageAtEdge = 0.45f + comet_projectile.DamageRadius = 1.0f + comet_projectile.ProjectileDamageType = DamageType.Aggravated + comet_projectile.Aggravated = AggravatedDamage( + AggravatedInfo(DamageType.Direct, 0.25f, 500), //originally, .2 + Aura.Comet, + AggravatedTiming(2000, 3), + 10f, + List( + TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player), + TargetValidation(EffectTarget.Category.Vehicle, EffectTarget.Validation.Vehicle), + TargetValidation(EffectTarget.Category.Turret, EffectTarget.Validation.Turret) + ) + ) + comet_projectile.InitialVelocity = 80 + comet_projectile.Lifespan = 3.1f + ProjectileDefinition.CalculateDerivedFields(comet_projectile) + comet_projectile.Modifiers = List( + CometAggravated, + CometAggravatedBurn + ) + + dualcycler_projectile.Name = "dualcycler_projectile" + dualcycler_projectile.Damage0 = 18 + dualcycler_projectile.Damage1 = 10 + dualcycler_projectile.ProjectileDamageType = DamageType.Direct + dualcycler_projectile.DegradeDelay = .025f + dualcycler_projectile.DegradeMultiplier = .5f + dualcycler_projectile.InitialVelocity = 500 + dualcycler_projectile.Lifespan = 0.5f + dualcycler_projectile.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(dualcycler_projectile) + + dynomite_projectile.Name = "dynomite_projectile" + // TODO for later, maybe : set_resource_parent dynomite_projectile game_objects frag_grenade_projectile_enh + dynomite_projectile.Damage0 = 75 + dynomite_projectile.Damage1 = 175 + dynomite_projectile.DamageAtEdge = 0.1f + dynomite_projectile.DamageRadius = 10f + dynomite_projectile.GrenadeProjectile = true + dynomite_projectile.ProjectileDamageType = DamageType.Splash + dynomite_projectile.InitialVelocity = 30 + dynomite_projectile.Lifespan = 3f + ProjectileDefinition.CalculateDerivedFields(dynomite_projectile) + dynomite_projectile.Modifiers = RadialDegrade + + energy_cell_projectile.Name = "energy_cell_projectile" + energy_cell_projectile.Damage0 = 18 + energy_cell_projectile.Damage1 = 10 + energy_cell_projectile.ProjectileDamageType = DamageType.Direct + energy_cell_projectile.DegradeDelay = 0.05f + energy_cell_projectile.DegradeMultiplier = 0.4f + energy_cell_projectile.InitialVelocity = 500 + energy_cell_projectile.Lifespan = .4f + energy_cell_projectile.UseDamage1Subtract = true + energy_cell_projectile.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(energy_cell_projectile) + + energy_gun_nc_projectile.Name = "energy_gun_nc_projectile" + energy_gun_nc_projectile.Damage0 = 10 + energy_gun_nc_projectile.Damage1 = 13 + energy_gun_nc_projectile.ProjectileDamageType = DamageType.Direct + energy_gun_nc_projectile.InitialVelocity = 500 + energy_gun_nc_projectile.Lifespan = 0.5f + energy_gun_nc_projectile.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(energy_gun_nc_projectile) + + energy_gun_tr_projectile.Name = "energy_gun_tr_projectile" + energy_gun_tr_projectile.Damage0 = 14 + energy_gun_tr_projectile.Damage1 = 18 + energy_gun_tr_projectile.ProjectileDamageType = DamageType.Direct + energy_gun_tr_projectile.DegradeDelay = .025f + energy_gun_tr_projectile.DegradeMultiplier = .5f + energy_gun_tr_projectile.InitialVelocity = 500 + energy_gun_tr_projectile.Lifespan = 0.5f + energy_gun_tr_projectile.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(energy_gun_tr_projectile) + + energy_gun_vs_projectile.Name = "energy_gun_vs_projectile" + energy_gun_vs_projectile.Damage0 = 25 + energy_gun_vs_projectile.Damage1 = 35 + energy_gun_vs_projectile.ProjectileDamageType = DamageType.Direct + energy_gun_vs_projectile.DegradeDelay = 0.045f + energy_gun_vs_projectile.DegradeMultiplier = 0.5f + energy_gun_vs_projectile.InitialVelocity = 500 + energy_gun_vs_projectile.Lifespan = .5f + energy_gun_vs_projectile.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(energy_gun_vs_projectile) + + enhanced_energy_cell_projectile.Name = "enhanced_energy_cell_projectile" + // TODO for later, maybe : set_resource_parent enhanced_energy_cell_projectile game_objects energy_cell_projectile + enhanced_energy_cell_projectile.Damage0 = 7 + enhanced_energy_cell_projectile.Damage1 = 15 + enhanced_energy_cell_projectile.ProjectileDamageType = DamageType.Direct + enhanced_energy_cell_projectile.DegradeDelay = 0.05f + enhanced_energy_cell_projectile.DegradeMultiplier = 0.4f + enhanced_energy_cell_projectile.InitialVelocity = 500 + enhanced_energy_cell_projectile.Lifespan = .4f + enhanced_energy_cell_projectile.UseDamage1Subtract = true + enhanced_energy_cell_projectile.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(enhanced_energy_cell_projectile) + + enhanced_quasar_projectile.Name = "enhanced_quasar_projectile" + // TODO for later, maybe : set_resource_parent enhanced_quasar_projectile game_objects quasar_projectile + enhanced_quasar_projectile.Damage1 = 12 + enhanced_quasar_projectile.Damage0 = 10 + enhanced_quasar_projectile.ProjectileDamageType = DamageType.Direct + enhanced_quasar_projectile.DegradeDelay = 0.045f + enhanced_quasar_projectile.DegradeMultiplier = 0.5f + enhanced_quasar_projectile.InitialVelocity = 500 + enhanced_quasar_projectile.Lifespan = .4f + enhanced_quasar_projectile.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(enhanced_quasar_projectile) + + falcon_projectile.Name = "falcon_projectile" + falcon_projectile.Damage0 = 35 + falcon_projectile.Damage1 = 132 + falcon_projectile.Damage2 = 132 + falcon_projectile.Damage3 = 83 + falcon_projectile.Damage4 = 144 + falcon_projectile.Acceleration = 10 + falcon_projectile.AccelerationUntil = 2f + falcon_projectile.DamageAtEdge = 0.2f + falcon_projectile.DamageRadius = 1f + falcon_projectile.ProjectileDamageType = DamageType.Splash + falcon_projectile.InitialVelocity = 120 + falcon_projectile.Lifespan = 2.1f + ProjectileDefinition.CalculateDerivedFields(falcon_projectile) + falcon_projectile.Modifiers = RadialDegrade + + firebird_missile_projectile.Name = "firebird_missile_projectile" + firebird_missile_projectile.Damage0 = 125 + firebird_missile_projectile.Damage1 = 220 + firebird_missile_projectile.Damage2 = 220 + firebird_missile_projectile.Damage3 = 200 + firebird_missile_projectile.Damage4 = 181 + firebird_missile_projectile.Acceleration = 20 + firebird_missile_projectile.AccelerationUntil = 2f + firebird_missile_projectile.DamageAtEdge = .1f + firebird_missile_projectile.DamageRadius = 5f + firebird_missile_projectile.ProjectileDamageType = DamageType.Splash + firebird_missile_projectile.InitialVelocity = 75 + firebird_missile_projectile.Lifespan = 5f + ProjectileDefinition.CalculateDerivedFields(firebird_missile_projectile) + firebird_missile_projectile.Modifiers = RadialDegrade + + flail_projectile.Name = "flail_projectile" + flail_projectile.Damage0 = 75 + flail_projectile.Damage1 = 200 + flail_projectile.Damage2 = 200 + flail_projectile.Damage3 = 200 + flail_projectile.Damage4 = 300 + flail_projectile.DamageAtEdge = 0.1f + flail_projectile.DamageRadius = 15f + flail_projectile.ProjectileDamageType = DamageType.Splash + flail_projectile.DegradeDelay = 1.5f + //a DegradeDelay of 1.5s equals a DistanceNoDegrade of 112.5m + flail_projectile.DegradeMultiplier = 5f + flail_projectile.InitialVelocity = 75 + flail_projectile.Lifespan = 40f + ProjectileDefinition.CalculateDerivedFields(flail_projectile) + flail_projectile.Modifiers = List( + FlailDistanceDamageBoost, + RadialDegrade + ) + + flamethrower_fire_cloud.Name = "flamethrower_fire_cloud" + flamethrower_fire_cloud.Damage0 = 2 + flamethrower_fire_cloud.Damage1 = 0 + flamethrower_fire_cloud.Damage2 = 0 + flamethrower_fire_cloud.Damage3 = 1 + flamethrower_fire_cloud.Damage4 = 0 + flamethrower_fire_cloud.DamageAtEdge = 0.1f + flamethrower_fire_cloud.DamageRadius = 5f + flamethrower_fire_cloud.ProjectileDamageType = DamageType.Aggravated + flamethrower_fire_cloud.Aggravated = AggravatedDamage( + List(AggravatedInfo(DamageType.Direct, -1.5f, 500), AggravatedInfo(DamageType.Splash, -4.0f, 500)), + Aura.Fire, + AggravatedTiming(5000, 10), + 2.5f, + false, + false, + List(TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player)) + ) + flamethrower_fire_cloud.Lifespan = 5f + ProjectileDefinition.CalculateDerivedFields(flamethrower_fire_cloud) + flamethrower_fire_cloud.Modifiers = List( + InfantryAggravatedDirect, + InfantryAggravatedSplash, + RadialDegrade, + FireballAggravatedBurn + ) + + flamethrower_fireball.Name = "flamethrower_fireball" + flamethrower_fireball.Damage0 = 30 + flamethrower_fireball.Damage1 = 0 + flamethrower_fireball.Damage2 = 0 + flamethrower_fireball.Damage3 = 20 + flamethrower_fireball.Damage4 = 0 + flamethrower_fireball.DamageToHealthOnly = true + flamethrower_fireball.DamageAtEdge = 0.15f + flamethrower_fireball.DamageRadius = 5f + flamethrower_fireball.ProjectileDamageType = DamageType.Aggravated + flamethrower_fireball.Aggravated = AggravatedDamage( + List(AggravatedInfo(DamageType.Direct, 0.9f, 500), AggravatedInfo(DamageType.Splash, 0.9f, 500)), + Aura.Fire, + AggravatedTiming(5000, 10), + 0.1f, + false, + false, + List(TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player)) + ) + flamethrower_fireball.InitialVelocity = 15 + flamethrower_fireball.Lifespan = 1.2f + ProjectileDefinition.CalculateDerivedFields(flamethrower_fireball) + flamethrower_fireball.Modifiers = List( + InfantryAggravatedDirect, + InfantryAggravatedSplash, + RadialDegrade, + FireballAggravatedBurn + ) + + flamethrower_projectile.Name = "flamethrower_projectile" + flamethrower_projectile.Damage0 = 10 + flamethrower_projectile.Damage1 = 0 + flamethrower_projectile.Damage2 = 0 + flamethrower_projectile.Damage3 = 4 + flamethrower_projectile.Damage4 = 0 + flamethrower_projectile.DamageToHealthOnly = true + flamethrower_projectile.Acceleration = -5 + flamethrower_projectile.AccelerationUntil = 2f + flamethrower_projectile.ProjectileDamageType = DamageType.Aggravated + flamethrower_projectile.Aggravated = AggravatedDamage( + List(AggravatedInfo(DamageType.Direct, 0.5f, 500)), + Aura.Fire, + AggravatedTiming(5000, 10), + 0.5f, + false, + false, + List(TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player)) + ) + flamethrower_projectile.DegradeDelay = 1.0f + flamethrower_projectile.DegradeMultiplier = 0.5f + flamethrower_projectile.InitialVelocity = 10 + flamethrower_projectile.Lifespan = 2.0f + ProjectileDefinition.CalculateDerivedFields(flamethrower_projectile) + flamethrower_projectile.Modifiers = List( + InfantryAggravatedDirect, + FireballAggravatedBurn, + MaxDistanceCutoff + ) + + flux_cannon_apc_projectile.Name = "flux_cannon_apc_projectile" + // TODO for later, maybe : set_resource_parent flux_cannon_apc_projectile game_objects flux_cannon_thresher_projectile + flux_cannon_apc_projectile.Damage0 = 14 + flux_cannon_apc_projectile.Damage1 = 23 + flux_cannon_apc_projectile.Damage2 = 35 + flux_cannon_apc_projectile.Damage3 = 23 + flux_cannon_apc_projectile.Damage4 = 18 + flux_cannon_apc_projectile.DamageAtEdge = .5f + flux_cannon_apc_projectile.DamageRadius = 4f + flux_cannon_apc_projectile.ProjectileDamageType = DamageType.Direct + flux_cannon_apc_projectile.InitialVelocity = 300 + flux_cannon_apc_projectile.Lifespan = 1f + ProjectileDefinition.CalculateDerivedFields(flux_cannon_apc_projectile) + + flux_cannon_thresher_projectile.Name = "flux_cannon_thresher_projectile" + flux_cannon_thresher_projectile.Damage0 = 30 + flux_cannon_thresher_projectile.Damage1 = 44 + flux_cannon_thresher_projectile.Damage2 = 44 + flux_cannon_thresher_projectile.Damage3 = 40 + flux_cannon_thresher_projectile.Damage4 = 37 + flux_cannon_thresher_projectile.DamageAtEdge = .5f + flux_cannon_thresher_projectile.DamageRadius = 4f + flux_cannon_thresher_projectile.ProjectileDamageType = DamageType.Splash + flux_cannon_thresher_projectile.InitialVelocity = 75 + flux_cannon_thresher_projectile.Lifespan = 3f + ProjectileDefinition.CalculateDerivedFields(flux_cannon_thresher_projectile) + flux_cannon_thresher_projectile.Modifiers = RadialDegrade + + fluxpod_projectile.Name = "fluxpod_projectile" + fluxpod_projectile.Damage0 = 110 + fluxpod_projectile.Damage1 = 80 + fluxpod_projectile.Damage2 = 125 + fluxpod_projectile.Damage3 = 80 + fluxpod_projectile.Damage4 = 52 + fluxpod_projectile.DamageAtEdge = .3f + fluxpod_projectile.DamageRadius = 3f + fluxpod_projectile.ProjectileDamageType = DamageType.Splash + fluxpod_projectile.InitialVelocity = 80 + fluxpod_projectile.Lifespan = 4f + ProjectileDefinition.CalculateDerivedFields(fluxpod_projectile) + fluxpod_projectile.Modifiers = RadialDegrade + + forceblade_projectile.Name = "forceblade_projectile" + // TODO for later, maybe : set_resource_parent forceblade_projectile game_objects melee_ammo_projectile + forceblade_projectile.Damage0 = 50 + forceblade_projectile.Damage1 = 0 + forceblade_projectile.ProjectileDamageType = DamageType.Direct + forceblade_projectile.InitialVelocity = 100 + forceblade_projectile.Lifespan = .02f + ProjectileDefinition.CalculateDerivedFields(forceblade_projectile) + forceblade_projectile.Modifiers = List(MeleeBoosted, MaxDistanceCutoff) + + frag_cartridge_projectile.Name = "frag_cartridge_projectile" + // TODO for later, maybe : set_resource_parent frag_cartridge_projectile game_objects frag_grenade_projectile + frag_cartridge_projectile.Damage0 = 75 + frag_cartridge_projectile.Damage1 = 100 + frag_cartridge_projectile.DamageAtEdge = 0.1f + frag_cartridge_projectile.DamageRadius = 7f + frag_cartridge_projectile.GrenadeProjectile = true + frag_cartridge_projectile.ProjectileDamageType = DamageType.Splash + frag_cartridge_projectile.InitialVelocity = 30 + frag_cartridge_projectile.Lifespan = 15f + ProjectileDefinition.CalculateDerivedFields(frag_cartridge_projectile) + frag_cartridge_projectile.Modifiers = RadialDegrade + + frag_cartridge_projectile_b.Name = "frag_cartridge_projectile_b" + // TODO for later, maybe : set_resource_parent frag_cartridge_projectile_b game_objects frag_grenade_projectile_enh + frag_cartridge_projectile_b.Damage0 = 75 + frag_cartridge_projectile_b.Damage1 = 100 + frag_cartridge_projectile_b.DamageAtEdge = 0.1f + frag_cartridge_projectile_b.DamageRadius = 5f + frag_cartridge_projectile_b.GrenadeProjectile = true + frag_cartridge_projectile_b.ProjectileDamageType = DamageType.Splash + frag_cartridge_projectile_b.InitialVelocity = 30 + frag_cartridge_projectile_b.Lifespan = 2f + ProjectileDefinition.CalculateDerivedFields(frag_cartridge_projectile_b) + frag_cartridge_projectile_b.Modifiers = RadialDegrade + + frag_grenade_projectile.Name = "frag_grenade_projectile" + frag_grenade_projectile.Damage0 = 75 + frag_grenade_projectile.Damage1 = 100 + frag_grenade_projectile.DamageAtEdge = 0.1f + frag_grenade_projectile.DamageRadius = 7f + frag_grenade_projectile.GrenadeProjectile = true + frag_grenade_projectile.ProjectileDamageType = DamageType.Splash + frag_grenade_projectile.InitialVelocity = 30 + frag_grenade_projectile.Lifespan = 15f + ProjectileDefinition.CalculateDerivedFields(frag_grenade_projectile) + frag_grenade_projectile.Modifiers = RadialDegrade + + frag_grenade_projectile_enh.Name = "frag_grenade_projectile_enh" + // TODO for later, maybe : set_resource_parent frag_grenade_projectile_enh game_objects frag_grenade_projectile + frag_grenade_projectile_enh.Damage0 = 75 + frag_grenade_projectile_enh.Damage1 = 100 + frag_grenade_projectile_enh.DamageAtEdge = 0.1f + frag_grenade_projectile_enh.DamageRadius = 7f + frag_grenade_projectile_enh.GrenadeProjectile = true + frag_grenade_projectile_enh.ProjectileDamageType = DamageType.Splash + frag_grenade_projectile_enh.InitialVelocity = 30 + frag_grenade_projectile_enh.Lifespan = 2f + ProjectileDefinition.CalculateDerivedFields(frag_grenade_projectile_enh) + frag_grenade_projectile_enh.Modifiers = RadialDegrade + + galaxy_gunship_gun_projectile.Name = "galaxy_gunship_gun_projectile" + // TODO for later, maybe : set_resource_parent galaxy_gunship_gun_projectile game_objects 35mmbullet_projectile + galaxy_gunship_gun_projectile.Damage0 = 40 + galaxy_gunship_gun_projectile.Damage1 = 50 + galaxy_gunship_gun_projectile.Damage2 = 80 + galaxy_gunship_gun_projectile.ProjectileDamageType = DamageType.Direct + galaxy_gunship_gun_projectile.DegradeDelay = 0.4f + galaxy_gunship_gun_projectile.DegradeMultiplier = 0.6f + galaxy_gunship_gun_projectile.InitialVelocity = 400 + galaxy_gunship_gun_projectile.Lifespan = 0.8f + ProjectileDefinition.CalculateDerivedFields(galaxy_gunship_gun_projectile) + + gauss_cannon_projectile.Name = "gauss_cannon_projectile" + gauss_cannon_projectile.Damage0 = 190 + gauss_cannon_projectile.Damage1 = 370 + gauss_cannon_projectile.Damage2 = 370 + gauss_cannon_projectile.Damage3 = 370 + gauss_cannon_projectile.Damage4 = 240 + gauss_cannon_projectile.DamageAtEdge = 0.3f + gauss_cannon_projectile.DamageRadius = 1.5f + gauss_cannon_projectile.ProjectileDamageType = DamageType.Splash + gauss_cannon_projectile.InitialVelocity = 150 + gauss_cannon_projectile.Lifespan = 2.67f + ProjectileDefinition.CalculateDerivedFields(gauss_cannon_projectile) + gauss_cannon_projectile.Modifiers = RadialDegrade + + grenade_projectile.Name = "grenade_projectile" + grenade_projectile.Damage0 = 50 + grenade_projectile.DamageAtEdge = 0.2f + grenade_projectile.DamageRadius = 100f + grenade_projectile.ProjectileDamageType = DamageType.Splash + grenade_projectile.InitialVelocity = 15 + grenade_projectile.Lifespan = 15f + ProjectileDefinition.CalculateDerivedFields(grenade_projectile) + grenade_projectile.Modifiers = RadialDegrade + + heavy_grenade_projectile.Name = "heavy_grenade_projectile" + heavy_grenade_projectile.Damage0 = 50 + heavy_grenade_projectile.Damage1 = 82 + heavy_grenade_projectile.Damage2 = 82 + heavy_grenade_projectile.Damage3 = 75 + heavy_grenade_projectile.Damage4 = 66 + heavy_grenade_projectile.DamageAtEdge = 0.1f + heavy_grenade_projectile.DamageRadius = 5f + heavy_grenade_projectile.GrenadeProjectile = true + heavy_grenade_projectile.ProjectileDamageType = DamageType.Splash + heavy_grenade_projectile.InitialVelocity = 75 + heavy_grenade_projectile.Lifespan = 5f + ProjectileDefinition.CalculateDerivedFields(heavy_grenade_projectile) + heavy_grenade_projectile.Modifiers = RadialDegrade + + heavy_rail_beam_projectile.Name = "heavy_rail_beam_projectile" + heavy_rail_beam_projectile.Damage0 = 75 + heavy_rail_beam_projectile.Damage1 = 215 + heavy_rail_beam_projectile.Damage2 = 215 + heavy_rail_beam_projectile.Damage3 = 215 + heavy_rail_beam_projectile.Damage4 = 120 + heavy_rail_beam_projectile.DamageAtEdge = 0.30f + heavy_rail_beam_projectile.DamageRadius = 5f + heavy_rail_beam_projectile.ProjectileDamageType = DamageType.Splash + heavy_rail_beam_projectile.InitialVelocity = 600 + heavy_rail_beam_projectile.Lifespan = .5f + ProjectileDefinition.CalculateDerivedFields(heavy_rail_beam_projectile) + heavy_rail_beam_projectile.Modifiers = RadialDegrade + + heavy_sniper_projectile.Name = "heavy_sniper_projectile" + heavy_sniper_projectile.Damage0 = 55 + heavy_sniper_projectile.Damage1 = 28 + heavy_sniper_projectile.Damage2 = 28 + heavy_sniper_projectile.Damage3 = 28 + heavy_sniper_projectile.Damage4 = 42 + heavy_sniper_projectile.ProjectileDamageType = DamageType.Splash + heavy_sniper_projectile.InitialVelocity = 500 + heavy_sniper_projectile.Lifespan = 1.0f + heavy_sniper_projectile.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(heavy_sniper_projectile) + heavy_sniper_projectile.Modifiers = RadialDegrade + + hellfire_projectile.Name = "hellfire_projectile" + hellfire_projectile.Damage0 = 50 + hellfire_projectile.Damage1 = 250 + hellfire_projectile.Damage2 = 250 + hellfire_projectile.Damage3 = 125 + hellfire_projectile.Damage4 = 250 + hellfire_projectile.Acceleration = 10 + hellfire_projectile.AccelerationUntil = 2f + hellfire_projectile.DamageAtEdge = .25f + hellfire_projectile.DamageRadius = 3f + hellfire_projectile.ProjectileDamageType = DamageType.Splash + hellfire_projectile.InitialVelocity = 125 + hellfire_projectile.Lifespan = 1.5f + ProjectileDefinition.CalculateDerivedFields(hellfire_projectile) + hellfire_projectile.Modifiers = RadialDegrade + + hunter_seeker_missile_dumbfire.Name = "hunter_seeker_missile_dumbfire" + hunter_seeker_missile_dumbfire.Damage0 = 50 + hunter_seeker_missile_dumbfire.Damage1 = 350 + hunter_seeker_missile_dumbfire.Damage2 = 250 + hunter_seeker_missile_dumbfire.Damage3 = 250 + hunter_seeker_missile_dumbfire.Damage4 = 525 + hunter_seeker_missile_dumbfire.DamageAtEdge = 0.1f + hunter_seeker_missile_dumbfire.DamageRadius = 1.5f + hunter_seeker_missile_dumbfire.ProjectileDamageType = DamageType.Splash + hunter_seeker_missile_dumbfire.InitialVelocity = 40 + hunter_seeker_missile_dumbfire.Lifespan = 6.3f + ProjectileDefinition.CalculateDerivedFields(hunter_seeker_missile_dumbfire) + hunter_seeker_missile_dumbfire.Modifiers = RadialDegrade + + hunter_seeker_missile_projectile.Name = "hunter_seeker_missile_projectile" + hunter_seeker_missile_projectile.Damage0 = 50 + hunter_seeker_missile_projectile.Damage1 = 350 + hunter_seeker_missile_projectile.Damage2 = 250 + hunter_seeker_missile_projectile.Damage3 = 250 + hunter_seeker_missile_projectile.Damage4 = 525 + hunter_seeker_missile_projectile.DamageAtEdge = 0.1f + hunter_seeker_missile_projectile.DamageRadius = 1.5f + hunter_seeker_missile_projectile.ProjectileDamageType = DamageType.Splash + hunter_seeker_missile_projectile.InitialVelocity = 40 + hunter_seeker_missile_projectile.Lifespan = 6.3f + hunter_seeker_missile_projectile.registerAs = "rc-projectiles" + hunter_seeker_missile_projectile.ExistsOnRemoteClients = true + hunter_seeker_missile_projectile.RemoteClientData = (39577, 201) + hunter_seeker_missile_projectile.Packet = projectileConverter + ProjectileDefinition.CalculateDerivedFields(hunter_seeker_missile_projectile) + hunter_seeker_missile_projectile.Modifiers = RadialDegrade + + jammer_cartridge_projectile.Name = "jammer_cartridge_projectile" + // TODO for later, maybe : set_resource_parent jammer_cartridge_projectile game_objects jammer_grenade_projectile + jammer_cartridge_projectile.Damage0 = 0 + jammer_cartridge_projectile.Damage1 = 0 + jammer_cartridge_projectile.DamageAtEdge = 1.0f + jammer_cartridge_projectile.DamageRadius = 10f + jammer_cartridge_projectile.GrenadeProjectile = true + jammer_cartridge_projectile.ProjectileDamageType = DamageType.Splash + jammer_cartridge_projectile.InitialVelocity = 30 + jammer_cartridge_projectile.Lifespan = 15f + jammer_cartridge_projectile.AdditionalEffect = true + jammer_cartridge_projectile.JammerProjectile = true + jammer_cartridge_projectile.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Player, + EffectTarget.Validation.Player + ) -> 1000 + jammer_cartridge_projectile.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Vehicle, + EffectTarget.Validation.AMS + ) -> 5000 + jammer_cartridge_projectile.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Deployable, + EffectTarget.Validation.MotionSensor + ) -> 30000 + jammer_cartridge_projectile.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Deployable, + EffectTarget.Validation.Spitfire + ) -> 30000 + jammer_cartridge_projectile.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Turret, + EffectTarget.Validation.Turret + ) -> 30000 + jammer_cartridge_projectile.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Vehicle, + EffectTarget.Validation.VehicleNotAMS + ) -> 10000 + ProjectileDefinition.CalculateDerivedFields(jammer_cartridge_projectile) + jammer_cartridge_projectile.Modifiers = MaxDistanceCutoff + + jammer_cartridge_projectile_b.Name = "jammer_cartridge_projectile_b" + // TODO for later, maybe : set_resource_parent jammer_cartridge_projectile_b game_objects jammer_grenade_projectile_enh + jammer_cartridge_projectile_b.Damage0 = 0 + jammer_cartridge_projectile_b.Damage1 = 0 + jammer_cartridge_projectile_b.DamageAtEdge = 1.0f + jammer_cartridge_projectile_b.DamageRadius = 10f + jammer_cartridge_projectile_b.GrenadeProjectile = true + jammer_cartridge_projectile_b.ProjectileDamageType = DamageType.Splash + jammer_cartridge_projectile_b.InitialVelocity = 30 + jammer_cartridge_projectile_b.Lifespan = 2f + jammer_cartridge_projectile_b.AdditionalEffect = true + jammer_cartridge_projectile_b.JammerProjectile = true + jammer_cartridge_projectile_b.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Player, + EffectTarget.Validation.Player + ) -> 1000 + jammer_cartridge_projectile_b.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Vehicle, + EffectTarget.Validation.AMS + ) -> 5000 + jammer_cartridge_projectile_b.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Deployable, + EffectTarget.Validation.MotionSensor + ) -> 30000 + jammer_cartridge_projectile_b.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Deployable, + EffectTarget.Validation.Spitfire + ) -> 30000 + jammer_cartridge_projectile_b.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Turret, + EffectTarget.Validation.Turret + ) -> 30000 + jammer_cartridge_projectile_b.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Vehicle, + EffectTarget.Validation.VehicleNotAMS + ) -> 10000 + ProjectileDefinition.CalculateDerivedFields(jammer_cartridge_projectile_b) + jammer_cartridge_projectile_b.Modifiers = MaxDistanceCutoff + + jammer_grenade_projectile.Name = "jammer_grenade_projectile" + jammer_grenade_projectile.Damage0 = 0 + jammer_grenade_projectile.Damage1 = 0 + jammer_grenade_projectile.DamageAtEdge = 1.0f + jammer_grenade_projectile.DamageRadius = 10f + jammer_grenade_projectile.GrenadeProjectile = true + jammer_grenade_projectile.ProjectileDamageType = DamageType.Splash + jammer_grenade_projectile.InitialVelocity = 30 + jammer_grenade_projectile.Lifespan = 15f + jammer_grenade_projectile.AdditionalEffect = true + jammer_grenade_projectile.JammerProjectile = true + jammer_grenade_projectile.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Player, + EffectTarget.Validation.Player + ) -> 1000 + jammer_grenade_projectile.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Vehicle, + EffectTarget.Validation.AMS + ) -> 5000 + jammer_grenade_projectile.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Deployable, + EffectTarget.Validation.MotionSensor + ) -> 30000 + jammer_grenade_projectile.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Deployable, + EffectTarget.Validation.Spitfire + ) -> 30000 + jammer_grenade_projectile.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Turret, + EffectTarget.Validation.Turret + ) -> 30000 + jammer_grenade_projectile.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Vehicle, + EffectTarget.Validation.VehicleNotAMS + ) -> 10000 + ProjectileDefinition.CalculateDerivedFields(jammer_grenade_projectile) + jammer_grenade_projectile.Modifiers = MaxDistanceCutoff + + jammer_grenade_projectile_enh.Name = "jammer_grenade_projectile_enh" + // TODO for later, maybe : set_resource_parent jammer_grenade_projectile_enh game_objects jammer_grenade_projectile + jammer_grenade_projectile_enh.Damage0 = 0 + jammer_grenade_projectile_enh.Damage1 = 0 + jammer_grenade_projectile_enh.DamageAtEdge = 1.0f + jammer_grenade_projectile_enh.DamageRadius = 10f + jammer_grenade_projectile_enh.GrenadeProjectile = true + jammer_grenade_projectile_enh.ProjectileDamageType = DamageType.Splash + jammer_grenade_projectile_enh.InitialVelocity = 30 + jammer_grenade_projectile_enh.Lifespan = 3f + jammer_grenade_projectile_enh.AdditionalEffect = true + jammer_grenade_projectile_enh.JammerProjectile = true + jammer_grenade_projectile_enh.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Player, + EffectTarget.Validation.Player + ) -> 1000 + jammer_grenade_projectile_enh.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Vehicle, + EffectTarget.Validation.AMS + ) -> 5000 + jammer_grenade_projectile_enh.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Deployable, + EffectTarget.Validation.MotionSensor + ) -> 30000 + jammer_grenade_projectile_enh.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Deployable, + EffectTarget.Validation.Spitfire + ) -> 30000 + jammer_grenade_projectile_enh.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Turret, + EffectTarget.Validation.Turret + ) -> 30000 + jammer_grenade_projectile_enh.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Vehicle, + EffectTarget.Validation.VehicleNotAMS + ) -> 10000 + ProjectileDefinition.CalculateDerivedFields(jammer_grenade_projectile_enh) + jammer_grenade_projectile_enh.Modifiers = MaxDistanceCutoff + + katana_projectile.Name = "katana_projectile" + katana_projectile.Damage0 = 25 + katana_projectile.Damage1 = 0 + katana_projectile.ProjectileDamageType = DamageType.Direct + katana_projectile.InitialVelocity = 100 + katana_projectile.Lifespan = .03f + ProjectileDefinition.CalculateDerivedFields(katana_projectile) + + katana_projectileb.Name = "katana_projectileb" + // TODO for later, maybe : set_resource_parent katana_projectileb game_objects katana_projectile + katana_projectileb.Damage0 = 25 + katana_projectileb.Damage1 = 0 + katana_projectileb.ProjectileDamageType = DamageType.Direct + katana_projectileb.InitialVelocity = 100 + katana_projectileb.Lifespan = .03f + ProjectileDefinition.CalculateDerivedFields(katana_projectileb) + + lancer_projectile.Name = "lancer_projectile" + lancer_projectile.Damage0 = 25 + lancer_projectile.Damage1 = 175 + lancer_projectile.Damage2 = 125 + lancer_projectile.Damage3 = 125 + lancer_projectile.Damage4 = 263 + lancer_projectile.ProjectileDamageType = DamageType.Direct + lancer_projectile.InitialVelocity = 500 + lancer_projectile.Lifespan = 0.6f + ProjectileDefinition.CalculateDerivedFields(lancer_projectile) + + lasher_projectile.Name = "lasher_projectile" + lasher_projectile.Damage0 = 30 + lasher_projectile.Damage1 = 15 + lasher_projectile.Damage2 = 15 + lasher_projectile.Damage3 = 12 + lasher_projectile.Damage4 = 12 + lasher_projectile.ProjectileDamageType = DamageType.Direct + lasher_projectile.DegradeDelay = 0.012f + lasher_projectile.DegradeMultiplier = 0.3f + lasher_projectile.InitialVelocity = 120 + lasher_projectile.LashRadius = 2.5f + lasher_projectile.Lifespan = 0.75f + lasher_projectile.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(lasher_projectile) + lasher_projectile.Modifiers = List( + DistanceDegrade, + Lash + ) + + lasher_projectile_ap.Name = "lasher_projectile_ap" + lasher_projectile_ap.Damage0 = 12 + lasher_projectile_ap.Damage1 = 25 + lasher_projectile_ap.Damage2 = 25 + lasher_projectile_ap.Damage3 = 28 + lasher_projectile_ap.Damage4 = 28 + lasher_projectile_ap.ProjectileDamageType = DamageType.Direct + lasher_projectile_ap.DegradeDelay = 0.012f + lasher_projectile_ap.DegradeMultiplier = 0.3f + lasher_projectile_ap.InitialVelocity = 120 + lasher_projectile_ap.LashRadius = 2.5f + lasher_projectile_ap.Lifespan = 0.75f + lasher_projectile_ap.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(lasher_projectile_ap) + lasher_projectile_ap.Modifiers = List( + DistanceDegrade, + Lash + ) + + liberator_bomb_cluster_bomblet_projectile.Name = "liberator_bomb_cluster_bomblet_projectile" + liberator_bomb_cluster_bomblet_projectile.Damage0 = 75 + liberator_bomb_cluster_bomblet_projectile.Damage1 = 100 + liberator_bomb_cluster_bomblet_projectile.DamageAtEdge = 0.25f + liberator_bomb_cluster_bomblet_projectile.DamageRadius = 3f + liberator_bomb_cluster_bomblet_projectile.ProjectileDamageType = DamageType.Splash + liberator_bomb_cluster_bomblet_projectile.InitialVelocity = 0 + liberator_bomb_cluster_bomblet_projectile.Lifespan = 30f + ProjectileDefinition.CalculateDerivedFields(liberator_bomb_cluster_bomblet_projectile) + liberator_bomb_cluster_bomblet_projectile.Modifiers = RadialDegrade + + liberator_bomb_cluster_projectile.Name = "liberator_bomb_cluster_projectile" + liberator_bomb_cluster_projectile.Damage0 = 75 + liberator_bomb_cluster_projectile.Damage1 = 100 + liberator_bomb_cluster_projectile.DamageAtEdge = 0.25f + liberator_bomb_cluster_projectile.DamageRadius = 3f + liberator_bomb_cluster_projectile.ProjectileDamageType = DamageType.Direct + liberator_bomb_cluster_projectile.InitialVelocity = 0 + liberator_bomb_cluster_projectile.Lifespan = 30f + ProjectileDefinition.CalculateDerivedFields(liberator_bomb_cluster_projectile) + + liberator_bomb_projectile.Name = "liberator_bomb_projectile" + liberator_bomb_projectile.Damage0 = 250 + liberator_bomb_projectile.Damage1 = 1000 + liberator_bomb_projectile.Damage2 = 1000 + liberator_bomb_projectile.Damage3 = 1000 + liberator_bomb_projectile.Damage4 = 600 + liberator_bomb_projectile.DamageAtEdge = 0.1f + liberator_bomb_projectile.DamageRadius = 10f + liberator_bomb_projectile.ProjectileDamageType = DamageType.Splash + liberator_bomb_projectile.InitialVelocity = 0 + liberator_bomb_projectile.Lifespan = 30f + ProjectileDefinition.CalculateDerivedFields(liberator_bomb_projectile) + liberator_bomb_projectile.Modifiers = RadialDegrade + + maelstrom_grenade_damager.Name = "maelstrom_grenade_damager" + maelstrom_grenade_damager.ProjectileDamageType = DamageType.Direct + //the maelstrom_grenade_damage is something of a broken entity atm + + maelstrom_grenade_projectile.Name = "maelstrom_grenade_projectile" + maelstrom_grenade_projectile.Damage0 = 32 + maelstrom_grenade_projectile.Damage1 = 60 + maelstrom_grenade_projectile.DamageRadius = 20f + maelstrom_grenade_projectile.LashRadius = 5f + maelstrom_grenade_projectile.GrenadeProjectile = true + maelstrom_grenade_projectile.ProjectileDamageType = DamageType.Direct + maelstrom_grenade_projectile.InitialVelocity = 30 + maelstrom_grenade_projectile.Lifespan = 2f + maelstrom_grenade_projectile.DamageProxy = 464 //maelstrom_grenade_damager + ProjectileDefinition.CalculateDerivedFields(maelstrom_grenade_projectile) + maelstrom_grenade_projectile.Modifiers = RadialDegrade + + maelstrom_grenade_projectile_contact.Name = "maelstrom_grenade_projectile_contact" + // TODO for later, maybe : set_resource_parent maelstrom_grenade_projectile_contact game_objects maelstrom_grenade_projectile + maelstrom_grenade_projectile_contact.Damage0 = 32 + maelstrom_grenade_projectile_contact.Damage1 = 60 + maelstrom_grenade_projectile_contact.DamageRadius = 20f + maelstrom_grenade_projectile_contact.LashRadius = 5f + maelstrom_grenade_projectile_contact.GrenadeProjectile = true + maelstrom_grenade_projectile_contact.ProjectileDamageType = DamageType.Direct + maelstrom_grenade_projectile_contact.InitialVelocity = 30 + maelstrom_grenade_projectile_contact.Lifespan = 15f + maelstrom_grenade_projectile_contact.DamageProxy = 464 //maelstrom_grenade_damager + ProjectileDefinition.CalculateDerivedFields(maelstrom_grenade_projectile_contact) + maelstrom_grenade_projectile_contact.Modifiers = RadialDegrade + + maelstrom_stream_projectile.Name = "maelstrom_stream_projectile" + maelstrom_stream_projectile.Damage0 = 15 + maelstrom_stream_projectile.Damage1 = 6 + maelstrom_stream_projectile.ProjectileDamageType = DamageType.Direct + maelstrom_stream_projectile.DegradeDelay = .075f + maelstrom_stream_projectile.DegradeMultiplier = 0.5f + maelstrom_stream_projectile.InitialVelocity = 200 + maelstrom_stream_projectile.Lifespan = 0.2f + ProjectileDefinition.CalculateDerivedFields(maelstrom_stream_projectile) + maelstrom_stream_projectile.Modifiers = MaxDistanceCutoff + + magcutter_projectile.Name = "magcutter_projectile" + // TODO for later, maybe : set_resource_parent magcutter_projectile game_objects melee_ammo_projectile + magcutter_projectile.Damage0 = 50 + magcutter_projectile.Damage1 = 0 + magcutter_projectile.ProjectileDamageType = DamageType.Direct + magcutter_projectile.InitialVelocity = 100 + magcutter_projectile.Lifespan = .02f + ProjectileDefinition.CalculateDerivedFields(magcutter_projectile) + magcutter_projectile.Modifiers = List(MeleeBoosted, MaxDistanceCutoff) + + melee_ammo_projectile.Name = "melee_ammo_projectile" + melee_ammo_projectile.Damage0 = 25 + melee_ammo_projectile.Damage1 = 0 + melee_ammo_projectile.ProjectileDamageType = DamageType.Direct + melee_ammo_projectile.InitialVelocity = 100 + melee_ammo_projectile.Lifespan = .02f + ProjectileDefinition.CalculateDerivedFields(melee_ammo_projectile) + melee_ammo_projectile.Modifiers = List(MeleeBoosted, MaxDistanceCutoff) + + meteor_common.Name = "meteor_common" + meteor_common.DamageAtEdge = .1f + meteor_common.ProjectileDamageType = DamageType.Splash + meteor_common.InitialVelocity = 0 + meteor_common.Lifespan = 40 + ProjectileDefinition.CalculateDerivedFields(meteor_common) + meteor_common.Modifiers = RadialDegrade + + meteor_projectile_b_large.Name = "meteor_projectile_b_large" + // TODO for later, maybe : set_resource_parent meteor_projectile_b_large game_objects meteor_common + meteor_projectile_b_large.Damage0 = 2500 + meteor_projectile_b_large.Damage1 = 5000 + meteor_projectile_b_large.DamageRadius = 15f + meteor_projectile_b_large.DamageAtEdge = .1f + meteor_projectile_b_large.ProjectileDamageType = DamageType.Splash + meteor_projectile_b_large.InitialVelocity = 0 + meteor_projectile_b_large.Lifespan = 40 + ProjectileDefinition.CalculateDerivedFields(meteor_projectile_b_large) + meteor_projectile_b_large.Modifiers = RadialDegrade + + meteor_projectile_b_medium.Name = "meteor_projectile_b_medium" + // TODO for later, maybe : set_resource_parent meteor_projectile_b_medium game_objects meteor_common + meteor_projectile_b_medium.Damage0 = 1250 + meteor_projectile_b_medium.Damage1 = 2500 + meteor_projectile_b_medium.DamageRadius = 10f + meteor_projectile_b_medium.DamageAtEdge = .1f + meteor_projectile_b_medium.ProjectileDamageType = DamageType.Splash + meteor_projectile_b_medium.InitialVelocity = 0 + meteor_projectile_b_medium.Lifespan = 40 + ProjectileDefinition.CalculateDerivedFields(meteor_projectile_b_medium) + meteor_projectile_b_medium.Modifiers = RadialDegrade + + meteor_projectile_b_small.Name = "meteor_projectile_b_small" + // TODO for later, maybe : set_resource_parent meteor_projectile_b_small game_objects meteor_common + meteor_projectile_b_small.Damage0 = 625 + meteor_projectile_b_small.Damage1 = 1250 + meteor_projectile_b_small.DamageRadius = 5f + meteor_projectile_b_small.DamageAtEdge = .1f + meteor_projectile_b_small.ProjectileDamageType = DamageType.Splash + meteor_projectile_b_small.InitialVelocity = 0 + meteor_projectile_b_small.Lifespan = 40 + ProjectileDefinition.CalculateDerivedFields(meteor_projectile_b_small) + meteor_projectile_b_small.Modifiers = RadialDegrade + + meteor_projectile_large.Name = "meteor_projectile_large" + // TODO for later, maybe : set_resource_parent meteor_projectile_large game_objects meteor_common + meteor_projectile_large.Damage0 = 2500 + meteor_projectile_large.Damage1 = 5000 + meteor_projectile_large.DamageRadius = 15f + meteor_projectile_large.DamageAtEdge = .1f + meteor_projectile_large.ProjectileDamageType = DamageType.Splash + meteor_projectile_large.InitialVelocity = 0 + meteor_projectile_large.Lifespan = 40 + ProjectileDefinition.CalculateDerivedFields(meteor_projectile_large) + meteor_projectile_large.Modifiers = RadialDegrade + + meteor_projectile_medium.Name = "meteor_projectile_medium" + // TODO for later, maybe : set_resource_parent meteor_projectile_medium game_objects meteor_common + meteor_projectile_medium.Damage0 = 1250 + meteor_projectile_medium.Damage1 = 2500 + meteor_projectile_medium.DamageRadius = 10f + meteor_projectile_medium.DamageAtEdge = .1f + meteor_projectile_medium.ProjectileDamageType = DamageType.Splash + meteor_projectile_medium.InitialVelocity = 0 + meteor_projectile_medium.Lifespan = 40 + ProjectileDefinition.CalculateDerivedFields(meteor_projectile_medium) + meteor_projectile_medium.Modifiers = RadialDegrade + + meteor_projectile_small.Name = "meteor_projectile_small" + // TODO for later, maybe : set_resource_parent meteor_projectile_small game_objects meteor_common + meteor_projectile_small.Damage0 = 625 + meteor_projectile_small.Damage1 = 1250 + meteor_projectile_small.DamageRadius = 5f + meteor_projectile_small.DamageAtEdge = .1f + meteor_projectile_small.ProjectileDamageType = DamageType.Splash + meteor_projectile_small.InitialVelocity = 0 + meteor_projectile_small.Lifespan = 40 + ProjectileDefinition.CalculateDerivedFields(meteor_projectile_small) + meteor_projectile_small.Modifiers = RadialDegrade + + mine_projectile.Name = "mine_projectile" + mine_projectile.Lifespan = 0.01f + mine_projectile.InitialVelocity = 300 + ProjectileDefinition.CalculateDerivedFields(mine_projectile) + + mine_sweeper_projectile.Name = "mine_sweeper_projectile" + mine_sweeper_projectile.Damage0 = 0 + mine_sweeper_projectile.Damage1 = 0 + mine_sweeper_projectile.DamageAtEdge = .33f + mine_sweeper_projectile.DamageRadius = 25f + mine_sweeper_projectile.GrenadeProjectile = true + mine_sweeper_projectile.ProjectileDamageType = DamageType.Splash + mine_sweeper_projectile.InitialVelocity = 30 + mine_sweeper_projectile.Lifespan = 15f + ProjectileDefinition.CalculateDerivedFields(mine_sweeper_projectile) + mine_sweeper_projectile.Modifiers = RadialDegrade + + mine_sweeper_projectile_enh.Name = "mine_sweeper_projectile_enh" + mine_sweeper_projectile_enh.Damage0 = 0 + mine_sweeper_projectile_enh.Damage1 = 0 + mine_sweeper_projectile_enh.DamageAtEdge = 0.33f + mine_sweeper_projectile_enh.DamageRadius = 25f + mine_sweeper_projectile_enh.GrenadeProjectile = true + mine_sweeper_projectile_enh.ProjectileDamageType = DamageType.Splash + mine_sweeper_projectile_enh.InitialVelocity = 30 + mine_sweeper_projectile_enh.Lifespan = 3f + ProjectileDefinition.CalculateDerivedFields(mine_sweeper_projectile_enh) + mine_sweeper_projectile_enh.Modifiers = RadialDegrade + + oicw_projectile.Name = "oicw_projectile" + oicw_projectile.Damage0 = 50 + oicw_projectile.Damage1 = 50 + oicw_projectile.Acceleration = 15 + oicw_projectile.AccelerationUntil = 5f + oicw_projectile.DamageAtEdge = 0.1f + oicw_projectile.DamageRadius = 10f + oicw_projectile.ProjectileDamageType = DamageType.Splash + oicw_projectile.InitialVelocity = 5 + oicw_projectile.Lifespan = 6.1f + oicw_projectile.DamageProxy = List(601, 601, 601, 601, 601) //5 x oicw_little_buddy + oicw_projectile.registerAs = "rc-projectiles" + oicw_projectile.ExistsOnRemoteClients = true + oicw_projectile.RemoteClientData = (13107, 195) + oicw_projectile.Packet = projectileConverter + ProjectileDefinition.CalculateDerivedFields(oicw_projectile) + oicw_projectile.Modifiers = List( + //ExplodingRadialDegrade, + RadialDegrade + ) + + oicw_little_buddy.Name = "oicw_little_buddy" + oicw_little_buddy.Damage0 = 75 + oicw_little_buddy.Damage1 = 75 + oicw_little_buddy.DamageAtEdge = 0.1f + oicw_little_buddy.DamageRadius = 7.5f + oicw_little_buddy.ProjectileDamageType = DamageType.Splash + oicw_little_buddy.InitialVelocity = 40 + oicw_little_buddy.Lifespan = 0.5f + oicw_little_buddy.registerAs = "rc-projectiles" + oicw_little_buddy.ExistsOnRemoteClients = true //does not use RemoteClientData + oicw_little_buddy.Packet = new LittleBuddyProjectileConverter + //add_property oicw_little_buddy multi_stage_spawn_server_side true ... + ProjectileDefinition.CalculateDerivedFields(oicw_little_buddy) + oicw_little_buddy.Modifiers = List( + ExplosionDamagesOnlyAbove + ) + + pellet_gun_projectile.Name = "pellet_gun_projectile" + // TODO for later, maybe : set_resource_parent pellet_gun_projectile game_objects shotgun_shell_projectile + pellet_gun_projectile.Damage0 = 12 + pellet_gun_projectile.Damage1 = 8 + pellet_gun_projectile.ProjectileDamageType = DamageType.Direct + pellet_gun_projectile.InitialVelocity = 400 + pellet_gun_projectile.Lifespan = 0.1875f + pellet_gun_projectile.UseDamage1Subtract = false + ProjectileDefinition.CalculateDerivedFields(pellet_gun_projectile) + + phalanx_av_projectile.Name = "phalanx_av_projectile" + phalanx_av_projectile.Damage0 = 60 + phalanx_av_projectile.Damage1 = 140 + phalanx_av_projectile.DamageAtEdge = 0.1f + phalanx_av_projectile.DamageRadius = 5f + phalanx_av_projectile.ProjectileDamageType = DamageType.Splash + phalanx_av_projectile.InitialVelocity = 100 + phalanx_av_projectile.Lifespan = 4f + ProjectileDefinition.CalculateDerivedFields(phalanx_av_projectile) + phalanx_av_projectile.Modifiers = RadialDegrade + + phalanx_flak_projectile.Name = "phalanx_flak_projectile" + phalanx_flak_projectile.Damage0 = 15 + phalanx_flak_projectile.Damage1 = 25 + phalanx_flak_projectile.Damage2 = 70 + phalanx_flak_projectile.DamageAtEdge = 1f + phalanx_flak_projectile.DamageRadius = 10f + phalanx_flak_projectile.ProjectileDamageType = DamageType.Direct + phalanx_flak_projectile.ProjectileDamageTypeSecondary = DamageType.Splash + phalanx_flak_projectile.InitialVelocity = 100 + phalanx_flak_projectile.Lifespan = 5f + ProjectileDefinition.CalculateDerivedFields(phalanx_flak_projectile) + phalanx_flak_projectile.Modifiers = List( + //FlakHit, + FlakBurst, + MaxDistanceCutoff + ) + + phalanx_projectile.Name = "phalanx_projectile" + phalanx_projectile.Damage0 = 20 + phalanx_projectile.Damage1 = 30 + phalanx_projectile.Damage2 = 30 + phalanx_projectile.Damage3 = 30 + phalanx_projectile.Damage4 = 18 + phalanx_projectile.ProjectileDamageType = DamageType.Direct + phalanx_projectile.DegradeDelay = 0f + phalanx_projectile.DegradeMultiplier = 0.25f + phalanx_projectile.InitialVelocity = 400 + phalanx_projectile.Lifespan = 1f + phalanx_projectile.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(phalanx_projectile) + + phoenix_missile_guided_projectile.Name = "phoenix_missile_guided_projectile" + // TODO for later, maybe : set_resource_parent phoenix_missile_guided_projectile game_objects phoenix_missile_projectile + phoenix_missile_guided_projectile.Damage0 = 80 + phoenix_missile_guided_projectile.Damage1 = 400 + phoenix_missile_guided_projectile.Damage2 = 400 + phoenix_missile_guided_projectile.Damage3 = 300 + phoenix_missile_guided_projectile.Damage4 = 600 + phoenix_missile_guided_projectile.Acceleration = 60 + phoenix_missile_guided_projectile.AccelerationUntil = 2.5f + phoenix_missile_guided_projectile.DamageAtEdge = 0.3f + phoenix_missile_guided_projectile.DamageRadius = 1.5f + phoenix_missile_guided_projectile.ProjectileDamageType = DamageType.Splash + phoenix_missile_guided_projectile.InitialVelocity = 0 + phoenix_missile_guided_projectile.Lifespan = 3f + //not naturally a remote projectile, but being governed as one for convenience + phoenix_missile_guided_projectile.registerAs = "rc-projectiles" + phoenix_missile_guided_projectile.ExistsOnRemoteClients = true + phoenix_missile_guided_projectile.RemoteClientData = (0, 63) + phoenix_missile_guided_projectile.Packet = projectileConverter + // + ProjectileDefinition.CalculateDerivedFields(phoenix_missile_guided_projectile) + phoenix_missile_guided_projectile.Modifiers = RadialDegrade + + phoenix_missile_projectile.Name = "phoenix_missile_projectile" + phoenix_missile_projectile.Damage0 = 80 + phoenix_missile_projectile.Damage1 = 400 + phoenix_missile_projectile.Damage2 = 400 + phoenix_missile_projectile.Damage3 = 300 + phoenix_missile_projectile.Damage4 = 600 + phoenix_missile_projectile.Acceleration = 60 + phoenix_missile_projectile.AccelerationUntil = 2.5f + phoenix_missile_projectile.DamageAtEdge = 0.3f + phoenix_missile_projectile.DamageRadius = 1.5f + phoenix_missile_projectile.ProjectileDamageType = DamageType.Splash + phoenix_missile_projectile.InitialVelocity = 0 + phoenix_missile_projectile.Lifespan = 3f + ProjectileDefinition.CalculateDerivedFields(phoenix_missile_projectile) + phoenix_missile_projectile.Modifiers = RadialDegrade + + plasma_cartridge_projectile.Name = "plasma_cartridge_projectile" + // TODO for later, maybe : set_resource_parent plasma_cartridge_projectile game_objects plasma_grenade_projectile + plasma_cartridge_projectile.Damage0 = 20 + plasma_cartridge_projectile.Damage1 = 15 + plasma_cartridge_projectile.DamageAtEdge = 0.2f + plasma_cartridge_projectile.DamageRadius = 7f + plasma_cartridge_projectile.GrenadeProjectile = true + plasma_cartridge_projectile.ProjectileDamageType = DamageType.Aggravated + plasma_cartridge_projectile.Aggravated = AggravatedDamage( + List(AggravatedInfo(DamageType.Direct, 0.25f, 750), AggravatedInfo(DamageType.Splash, 0.25f, 1000)), + Aura.Plasma, + AggravatedTiming(3000), + 1.5f, + true, + false, + List(TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player)) + ) + plasma_cartridge_projectile.InitialVelocity = 30 + plasma_cartridge_projectile.Lifespan = 15f + ProjectileDefinition.CalculateDerivedFields(plasma_cartridge_projectile) + plasma_cartridge_projectile.Modifiers = List( + InfantryAggravatedDirect, + InfantryAggravatedDirectBurn, + InfantryAggravatedSplash, + InfantryAggravatedSplashBurn, + RadialDegrade + ) + + plasma_cartridge_projectile_b.Name = "plasma_cartridge_projectile_b" + // TODO for later, maybe : set_resource_parent plasma_cartridge_projectile_b game_objects plasma_grenade_projectile_B + plasma_cartridge_projectile_b.Damage0 = 20 + plasma_cartridge_projectile_b.Damage1 = 15 + plasma_cartridge_projectile_b.DamageAtEdge = 0.2f + plasma_cartridge_projectile_b.DamageRadius = 7f + plasma_cartridge_projectile_b.GrenadeProjectile = true + plasma_cartridge_projectile_b.ProjectileDamageType = DamageType.Aggravated + plasma_cartridge_projectile_b.Aggravated = AggravatedDamage( + List(AggravatedInfo(DamageType.Direct, 0.25f, 750), AggravatedInfo(DamageType.Splash, 0.25f, 1000)), + Aura.Plasma, + AggravatedTiming(3000), + 1.5f, + true, + false, + List(TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player)) + ) + plasma_cartridge_projectile_b.InitialVelocity = 30 + plasma_cartridge_projectile_b.Lifespan = 2f + ProjectileDefinition.CalculateDerivedFields(plasma_cartridge_projectile_b) + plasma_cartridge_projectile_b.Modifiers = List( + InfantryAggravatedDirect, + InfantryAggravatedDirectBurn, + InfantryAggravatedSplash, + InfantryAggravatedSplashBurn, + RadialDegrade + ) + + plasma_grenade_projectile.Name = "plasma_grenade_projectile" + plasma_grenade_projectile.Damage0 = 40 + plasma_grenade_projectile.Damage1 = 30 + plasma_grenade_projectile.DamageAtEdge = 0.1f + plasma_grenade_projectile.DamageRadius = 7f + plasma_grenade_projectile.GrenadeProjectile = true + plasma_grenade_projectile.ProjectileDamageType = DamageType.Aggravated + plasma_grenade_projectile.Aggravated = AggravatedDamage( + List(AggravatedInfo(DamageType.Direct, 0.25f, 750), AggravatedInfo(DamageType.Splash, 0.25f, 1000)), + Aura.Plasma, + AggravatedTiming(3000), + 1.5f, + true, + false, + List(TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player)) + ) + plasma_grenade_projectile.InitialVelocity = 30 + plasma_grenade_projectile.Lifespan = 15f + ProjectileDefinition.CalculateDerivedFields(plasma_grenade_projectile) + plasma_grenade_projectile.Modifiers = List( + InfantryAggravatedDirect, + InfantryAggravatedDirectBurn, + InfantryAggravatedSplash, + InfantryAggravatedSplashBurn, + RadialDegrade + ) + + plasma_grenade_projectile_B.Name = "plasma_grenade_projectile_B" + // TODO for later, maybe : set_resource_parent plasma_grenade_projectile_B game_objects plasma_grenade_projectile + plasma_grenade_projectile_B.Damage0 = 40 + plasma_grenade_projectile_B.Damage1 = 30 + plasma_grenade_projectile_B.DamageAtEdge = 0.1f + plasma_grenade_projectile_B.DamageRadius = 7f + plasma_grenade_projectile_B.GrenadeProjectile = true + plasma_grenade_projectile_B.ProjectileDamageType = DamageType.Aggravated + plasma_grenade_projectile_B.Aggravated = AggravatedDamage( + List(AggravatedInfo(DamageType.Direct, 0.25f, 750), AggravatedInfo(DamageType.Splash, 0.25f, 1000)), + Aura.Plasma, + AggravatedTiming(3000), + 1.5f, + true, + false, + List(TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player)) + ) + plasma_grenade_projectile_B.InitialVelocity = 30 + plasma_grenade_projectile_B.Lifespan = 3f + ProjectileDefinition.CalculateDerivedFields(plasma_grenade_projectile_B) + plasma_grenade_projectile_B.Modifiers = List( + InfantryAggravatedDirect, + InfantryAggravatedDirectBurn, + InfantryAggravatedSplash, + InfantryAggravatedSplashBurn, + RadialDegrade + ) + + pounder_projectile.Name = "pounder_projectile" + pounder_projectile.Damage0 = 31 + pounder_projectile.Damage1 = 120 + pounder_projectile.Damage2 = 120 + pounder_projectile.Damage3 = 75 + pounder_projectile.Damage4 = 132 + pounder_projectile.DamageAtEdge = 0.1f + pounder_projectile.DamageRadius = 1f + pounder_projectile.GrenadeProjectile = true + pounder_projectile.ProjectileDamageType = DamageType.Splash + pounder_projectile.InitialVelocity = 120 + pounder_projectile.Lifespan = 2.5f + ProjectileDefinition.CalculateDerivedFields(pounder_projectile) + pounder_projectile.Modifiers = RadialDegrade + + pounder_projectile_enh.Name = "pounder_projectile_enh" + // TODO for later, maybe : set_resource_parent pounder_projectile_enh game_objects pounder_projectile + pounder_projectile_enh.Damage0 = 31 + pounder_projectile_enh.Damage1 = 120 + pounder_projectile_enh.Damage2 = 120 + pounder_projectile_enh.Damage3 = 75 + pounder_projectile_enh.Damage4 = 132 + pounder_projectile_enh.DamageAtEdge = 0.1f + pounder_projectile_enh.DamageRadius = 1f + pounder_projectile_enh.GrenadeProjectile = true + pounder_projectile_enh.ProjectileDamageType = DamageType.Splash + pounder_projectile_enh.InitialVelocity = 120 + pounder_projectile_enh.Lifespan = 3.2f + ProjectileDefinition.CalculateDerivedFields(pounder_projectile_enh) + pounder_projectile_enh.Modifiers = RadialDegrade + + ppa_projectile.Name = "ppa_projectile" + ppa_projectile.Damage0 = 20 + ppa_projectile.Damage1 = 20 + ppa_projectile.Damage2 = 40 + ppa_projectile.Damage3 = 20 + ppa_projectile.Damage4 = 13 + ppa_projectile.ProjectileDamageType = DamageType.Direct + ppa_projectile.InitialVelocity = 400 + ppa_projectile.Lifespan = .5f + ProjectileDefinition.CalculateDerivedFields(ppa_projectile) + + pulsar_ap_projectile.Name = "pulsar_ap_projectile" + // TODO for later, maybe : set_resource_parent pulsar_ap_projectile game_objects pulsar_projectile + pulsar_ap_projectile.Damage0 = 7 + pulsar_ap_projectile.Damage1 = 15 + pulsar_ap_projectile.ProjectileDamageType = DamageType.Direct + pulsar_ap_projectile.DegradeDelay = 0.1f + pulsar_ap_projectile.DegradeMultiplier = 0.5f + pulsar_ap_projectile.InitialVelocity = 500 + pulsar_ap_projectile.Lifespan = .4f + pulsar_ap_projectile.UseDamage1Subtract = true + pulsar_ap_projectile.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(pulsar_ap_projectile) + + pulsar_projectile.Name = "pulsar_projectile" + pulsar_projectile.Damage0 = 20 + pulsar_projectile.Damage1 = 10 + pulsar_projectile.ProjectileDamageType = DamageType.Direct + pulsar_projectile.DegradeDelay = 0.1f + pulsar_projectile.DegradeMultiplier = 0.4f + pulsar_projectile.InitialVelocity = 500 + pulsar_projectile.Lifespan = .4f + pulsar_projectile.UseDamage1Subtract = true + pulsar_projectile.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(pulsar_projectile) + + quasar_projectile.Name = "quasar_projectile" + quasar_projectile.Damage0 = 18 + quasar_projectile.Damage1 = 8 + quasar_projectile.ProjectileDamageType = DamageType.Direct + quasar_projectile.DegradeDelay = 0.045f + quasar_projectile.DegradeMultiplier = 0.5f + quasar_projectile.InitialVelocity = 500 + quasar_projectile.Lifespan = .4f + quasar_projectile.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(quasar_projectile) + + radiator_cloud.Name = "radiator_cloud" + radiator_cloud.Damage0 = 1 //2 + radiator_cloud.DamageAtEdge = 1.0f + radiator_cloud.DamageRadius = 5f + radiator_cloud.DamageToHealthOnly = true + radiator_cloud.radiation_cloud = true + radiator_cloud.ProjectileDamageType = DamageType.Radiation + //custom aggravated information + radiator_cloud.ProjectileDamageTypeSecondary = DamageType.Aggravated + radiator_cloud.Aggravated = AggravatedDamage( + AggravatedInfo(DamageType.Splash, 1f, 80), + Aura.None, + AggravatedTiming(250, 2), + 0f, + false, + List(TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player)) + ) + radiator_cloud.Lifespan = 10.0f + ProjectileDefinition.CalculateDerivedFields(radiator_cloud) + radiator_cloud.registerAs = "rc-projectiles" + radiator_cloud.ExistsOnRemoteClients = true + radiator_cloud.Packet = radCloudConverter + //radiator_cloud.Geometry = GeometryForm.representProjectileBySphere() + radiator_cloud.Modifiers = List( + MaxDistanceCutoff, + InfantryAggravatedRadiation, + InfantryAggravatedRadiationBurn, + ShieldAgainstRadiation + ) + + radiator_grenade_projectile.Name = "radiator_grenade_projectile" // Todo : Radiator damages ? + radiator_grenade_projectile.GrenadeProjectile = true //not really, but technically yes + radiator_grenade_projectile.ProjectileDamageType = DamageType.Direct + radiator_grenade_projectile.InitialVelocity = 30 + radiator_grenade_projectile.Lifespan = 3f + radiator_grenade_projectile.DamageProxy = 717 //radiator_cloud + ProjectileDefinition.CalculateDerivedFields(radiator_grenade_projectile) + + radiator_sticky_projectile.Name = "radiator_sticky_projectile" + // TODO for later, maybe : set_resource_parent radiator_sticky_projectile game_objects radiator_grenade_projectile + radiator_sticky_projectile.GrenadeProjectile = true //not really, but technically yes + radiator_sticky_projectile.ProjectileDamageType = DamageType.Direct + radiator_sticky_projectile.InitialVelocity = 30 + radiator_sticky_projectile.Lifespan = 4f + radiator_sticky_projectile.DamageProxy = 717 //radiator_cloud + ProjectileDefinition.CalculateDerivedFields(radiator_sticky_projectile) + + reaver_rocket_projectile.Name = "reaver_rocket_projectile" + reaver_rocket_projectile.Damage0 = 25 + reaver_rocket_projectile.Damage1 = 88 + reaver_rocket_projectile.Damage2 = 75 + reaver_rocket_projectile.Damage3 = 75 + reaver_rocket_projectile.Damage4 = 88 + reaver_rocket_projectile.Acceleration = 50 + reaver_rocket_projectile.AccelerationUntil = 1f + reaver_rocket_projectile.DamageAtEdge = 0.1f + reaver_rocket_projectile.DamageRadius = 3f + reaver_rocket_projectile.ProjectileDamageType = DamageType.Splash + reaver_rocket_projectile.InitialVelocity = 100 + reaver_rocket_projectile.Lifespan = 2.1f + ProjectileDefinition.CalculateDerivedFields(reaver_rocket_projectile) + reaver_rocket_projectile.Modifiers = RadialDegrade + + rocket_projectile.Name = "rocket_projectile" + rocket_projectile.Damage0 = 50 + rocket_projectile.Damage1 = 105 + rocket_projectile.Damage2 = 75 + rocket_projectile.Damage3 = 75 + rocket_projectile.Damage4 = 75 + rocket_projectile.Acceleration = 10 + rocket_projectile.AccelerationUntil = 2f + rocket_projectile.DamageAtEdge = .5f + rocket_projectile.DamageRadius = 3f + rocket_projectile.ProjectileDamageType = DamageType.Splash + rocket_projectile.InitialVelocity = 50 + rocket_projectile.Lifespan = 8f + ProjectileDefinition.CalculateDerivedFields(rocket_projectile) + rocket_projectile.Modifiers = RadialDegrade + + rocklet_flak_projectile.Name = "rocklet_flak_projectile" + rocklet_flak_projectile.Damage0 = 20 + rocklet_flak_projectile.Damage1 = 30 + rocklet_flak_projectile.Damage2 = 57 + rocklet_flak_projectile.Damage3 = 30 + rocklet_flak_projectile.Damage4 = 50 + rocklet_flak_projectile.DamageAtEdge = 0.25f + rocklet_flak_projectile.DamageRadius = 8f + rocklet_flak_projectile.ProjectileDamageType = DamageType.Direct + rocklet_flak_projectile.ProjectileDamageTypeSecondary = DamageType.Splash + rocklet_flak_projectile.InitialVelocity = 60 + rocklet_flak_projectile.Lifespan = 3.2f + ProjectileDefinition.CalculateDerivedFields(rocklet_flak_projectile) + rocklet_flak_projectile.Modifiers = List( + //FlakHit, + FlakBurst, + MaxDistanceCutoff + ) + + rocklet_jammer_projectile.Name = "rocklet_jammer_projectile" + rocklet_jammer_projectile.Damage0 = 0 + rocklet_jammer_projectile.Acceleration = 10 + rocklet_jammer_projectile.AccelerationUntil = 2f + rocklet_jammer_projectile.DamageAtEdge = 1.0f + rocklet_jammer_projectile.DamageRadius = 10f + rocklet_jammer_projectile.ProjectileDamageType = DamageType.Splash + rocklet_jammer_projectile.InitialVelocity = 50 + rocklet_jammer_projectile.Lifespan = 8f + ProjectileDefinition.CalculateDerivedFields(rocklet_jammer_projectile) + //TODO rocklet_jammer_projectile.Modifiers = RadialDegrade? + + scattercannon_projectile.Name = "scattercannon_projectile" + scattercannon_projectile.Damage0 = 11 + scattercannon_projectile.Damage1 = 5 + scattercannon_projectile.ProjectileDamageType = DamageType.Direct + scattercannon_projectile.InitialVelocity = 400 + scattercannon_projectile.Lifespan = 0.25f + scattercannon_projectile.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(scattercannon_projectile) + + scythe_projectile.Name = "scythe_projectile" + scythe_projectile.Damage0 = 30 + scythe_projectile.Damage1 = 20 + scythe_projectile.ProjectileDamageType = DamageType.Direct + scythe_projectile.DegradeDelay = .015f + scythe_projectile.DegradeMultiplier = 0.35f + scythe_projectile.InitialVelocity = 60 + scythe_projectile.Lifespan = 3f + ProjectileDefinition.CalculateDerivedFields(scythe_projectile) + + scythe_projectile_slave.Name = "scythe_projectile_slave" // Todo how does it work ? + scythe_projectile_slave.InitialVelocity = 30 + scythe_projectile_slave.Lifespan = 3f + ProjectileDefinition.CalculateDerivedFields(scythe_projectile_slave) + + shotgun_shell_AP_projectile.Name = "shotgun_shell_AP_projectile" + // TODO for later, maybe : set_resource_parent shotgun_shell_AP_projectile game_objects shotgun_shell_projectile + shotgun_shell_AP_projectile.Damage0 = 5 + shotgun_shell_AP_projectile.Damage1 = 10 + shotgun_shell_AP_projectile.ProjectileDamageType = DamageType.Direct + shotgun_shell_AP_projectile.InitialVelocity = 400 + shotgun_shell_AP_projectile.Lifespan = 0.25f + shotgun_shell_AP_projectile.UseDamage1Subtract = true + shotgun_shell_AP_projectile.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(shotgun_shell_AP_projectile) + + shotgun_shell_projectile.Name = "shotgun_shell_projectile" + shotgun_shell_projectile.Damage0 = 12 + shotgun_shell_projectile.Damage1 = 5 + shotgun_shell_projectile.ProjectileDamageType = DamageType.Direct + shotgun_shell_projectile.InitialVelocity = 400 + shotgun_shell_projectile.Lifespan = 0.25f + shotgun_shell_projectile.UseDamage1Subtract = true + shotgun_shell_projectile.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(shotgun_shell_projectile) + + six_shooter_projectile.Name = "six_shooter_projectile" + // TODO for later, maybe : set_resource_parent six_shooter_projectile game_objects 9mmbullet_projectile + six_shooter_projectile.Damage0 = 22 + six_shooter_projectile.Damage1 = 20 + six_shooter_projectile.ProjectileDamageType = DamageType.Direct + six_shooter_projectile.DegradeDelay = 0.15f + six_shooter_projectile.DegradeMultiplier = 0.25f + six_shooter_projectile.InitialVelocity = 500 + six_shooter_projectile.Lifespan = 0.4f + six_shooter_projectile.UseDamage1Subtract = false + ProjectileDefinition.CalculateDerivedFields(six_shooter_projectile) + + skyguard_flak_cannon_projectile.Name = "skyguard_flak_cannon_projectile" + skyguard_flak_cannon_projectile.Damage0 = 15 + skyguard_flak_cannon_projectile.Damage1 = 25 + skyguard_flak_cannon_projectile.Damage2 = 50 + skyguard_flak_cannon_projectile.DamageAtEdge = 1f + skyguard_flak_cannon_projectile.DamageRadius = 10f + skyguard_flak_cannon_projectile.ProjectileDamageType = DamageType.Direct + skyguard_flak_cannon_projectile.ProjectileDamageTypeSecondary = DamageType.Splash + skyguard_flak_cannon_projectile.InitialVelocity = 100 + skyguard_flak_cannon_projectile.Lifespan = 5f + ProjectileDefinition.CalculateDerivedFields(skyguard_flak_cannon_projectile) + skyguard_flak_cannon_projectile.Modifiers = List( + //FlakHit, + FlakBurst, + MaxDistanceCutoff + ) + + sparrow_projectile.Name = "sparrow_projectile" + sparrow_projectile.Damage0 = 35 + sparrow_projectile.Damage1 = 50 + sparrow_projectile.Damage2 = 125 + sparrow_projectile.Acceleration = 12 + sparrow_projectile.AccelerationUntil = 5f + sparrow_projectile.DamageAtEdge = 0.1f + sparrow_projectile.DamageRadius = 3f + sparrow_projectile.ProjectileDamageType = DamageType.Splash + sparrow_projectile.InitialVelocity = 60 + sparrow_projectile.Lifespan = 5.85f + sparrow_projectile.registerAs = "rc-projectiles" + sparrow_projectile.ExistsOnRemoteClients = true + sparrow_projectile.RemoteClientData = (13107, 187) + sparrow_projectile.AutoLock = true + sparrow_projectile.Packet = projectileConverter + ProjectileDefinition.CalculateDerivedFields(sparrow_projectile) + sparrow_projectile.Modifiers = RadialDegrade + + sparrow_secondary_projectile.Name = "sparrow_secondary_projectile" + // TODO for later, maybe : set_resource_parent sparrow_secondary_projectile game_objects sparrow_projectile + sparrow_secondary_projectile.Damage0 = 35 + sparrow_secondary_projectile.Damage1 = 50 + sparrow_secondary_projectile.Damage2 = 125 + sparrow_secondary_projectile.Acceleration = 12 + sparrow_secondary_projectile.AccelerationUntil = 5f + sparrow_secondary_projectile.DamageAtEdge = 0.1f + sparrow_secondary_projectile.DamageRadius = 3f + sparrow_secondary_projectile.ProjectileDamageType = DamageType.Splash + sparrow_secondary_projectile.InitialVelocity = 60 + sparrow_secondary_projectile.Lifespan = 5.85f + sparrow_secondary_projectile.registerAs = "rc-projectiles" + sparrow_secondary_projectile.ExistsOnRemoteClients = true + sparrow_secondary_projectile.RemoteClientData = (13107, 187) + sparrow_secondary_projectile.AutoLock = true + sparrow_secondary_projectile.Packet = projectileConverter + ProjectileDefinition.CalculateDerivedFields(sparrow_secondary_projectile) + sparrow_secondary_projectile.Modifiers = RadialDegrade + + spiker_projectile.Name = "spiker_projectile" + spiker_projectile.Charging = ChargeDamage(4, StandardDamageProfile(damage0 = Some(20), damage1 = Some(20))) + spiker_projectile.Damage0 = 75 + spiker_projectile.Damage1 = 75 + spiker_projectile.DamageAtEdge = 0.1f + spiker_projectile.DamageRadius = 5f + spiker_projectile.DamageRadiusMin = 1f + spiker_projectile.ProjectileDamageType = DamageType.Splash + spiker_projectile.InitialVelocity = 40 + spiker_projectile.Lifespan = 5f + spiker_projectile.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(spiker_projectile) + spiker_projectile.Modifiers = List( + SpikerChargeDamage, + RadialDegrade + ) + + spitfire_aa_ammo_projectile.Name = "spitfire_aa_ammo_projectile" + spitfire_aa_ammo_projectile.Damage0 = 5 + spitfire_aa_ammo_projectile.Damage1 = 15 + spitfire_aa_ammo_projectile.Damage2 = 12 + spitfire_aa_ammo_projectile.Damage3 = 5 + spitfire_aa_ammo_projectile.Damage4 = 15 + spitfire_aa_ammo_projectile.DamageAtEdge = 1f + spitfire_aa_ammo_projectile.DamageRadius = 10f + spitfire_aa_ammo_projectile.ProjectileDamageType = DamageType.Direct + spitfire_aa_ammo_projectile.ProjectileDamageTypeSecondary = DamageType.Splash + spitfire_aa_ammo_projectile.InitialVelocity = 100 + spitfire_aa_ammo_projectile.Lifespan = 5f + ProjectileDefinition.CalculateDerivedFields(spitfire_aa_ammo_projectile) + spitfire_aa_ammo_projectile.Modifiers = List( + //FlakHit, + FlakBurst, + MaxDistanceCutoff + ) + + spitfire_ammo_projectile.Name = "spitfire_ammo_projectile" + spitfire_ammo_projectile.Damage0 = 15 + spitfire_ammo_projectile.Damage1 = 10 + spitfire_ammo_projectile.ProjectileDamageType = DamageType.Direct + spitfire_ammo_projectile.DegradeDelay = .01f + spitfire_ammo_projectile.DegradeMultiplier = 0.5f + spitfire_ammo_projectile.InitialVelocity = 100 + spitfire_ammo_projectile.Lifespan = .5f + spitfire_ammo_projectile.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(spitfire_ammo_projectile) + + starfire_projectile.Name = "starfire_projectile" + starfire_projectile.Damage0 = 16 + starfire_projectile.Damage1 = 20 + starfire_projectile.Damage2 = 58 + starfire_projectile.Acceleration = 12 + starfire_projectile.AccelerationUntil = 5f + starfire_projectile.ProjectileDamageType = DamageType.Aggravated + starfire_projectile.Aggravated = AggravatedDamage( + AggravatedInfo(DamageType.Direct, 0.25f, 250), + Aura.Comet, + 2000, + 0f, + true, + List( + TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player), + TargetValidation(EffectTarget.Category.Vehicle, EffectTarget.Validation.Vehicle), + TargetValidation(EffectTarget.Category.Turret, EffectTarget.Validation.Turret) + ) + ) + starfire_projectile.InitialVelocity = 45 + starfire_projectile.Lifespan = 7.8f + starfire_projectile.registerAs = "rc-projectiles" + starfire_projectile.ExistsOnRemoteClients = true + starfire_projectile.RemoteClientData = (39577, 249) + starfire_projectile.AutoLock = true + starfire_projectile.Packet = projectileConverter + ProjectileDefinition.CalculateDerivedFields(starfire_projectile) + starfire_projectile.Modifiers = List( + StarfireAggravatedBurn, + RadialDegrade + ) + + striker_missile_projectile.Name = "striker_missile_projectile" + striker_missile_projectile.Damage0 = 35 + striker_missile_projectile.Damage1 = 175 + striker_missile_projectile.Damage2 = 125 + striker_missile_projectile.Damage3 = 125 + striker_missile_projectile.Damage4 = 263 + striker_missile_projectile.Acceleration = 20 + striker_missile_projectile.AccelerationUntil = 2f + striker_missile_projectile.DamageAtEdge = 0.1f + striker_missile_projectile.DamageRadius = 1.5f + striker_missile_projectile.ProjectileDamageType = DamageType.Splash + striker_missile_projectile.InitialVelocity = 30 + striker_missile_projectile.Lifespan = 4.2f + ProjectileDefinition.CalculateDerivedFields(striker_missile_projectile) + striker_missile_projectile.Modifiers = RadialDegrade + + striker_missile_targeting_projectile.Name = "striker_missile_targeting_projectile" + // TODO for later, maybe : set_resource_parent striker_missile_targeting_projectile game_objects striker_missile_projectile + striker_missile_targeting_projectile.Damage0 = 35 + striker_missile_targeting_projectile.Damage1 = 175 + striker_missile_targeting_projectile.Damage2 = 125 + striker_missile_targeting_projectile.Damage3 = 125 + striker_missile_targeting_projectile.Damage4 = 263 + striker_missile_targeting_projectile.Acceleration = 20 + striker_missile_targeting_projectile.AccelerationUntil = 2f + striker_missile_targeting_projectile.DamageAtEdge = 0.1f + striker_missile_targeting_projectile.DamageRadius = 1.5f + striker_missile_targeting_projectile.ProjectileDamageType = DamageType.Splash + striker_missile_targeting_projectile.InitialVelocity = 30 + striker_missile_targeting_projectile.Lifespan = 4.2f + striker_missile_targeting_projectile.registerAs = "rc-projectiles" + striker_missile_targeting_projectile.ExistsOnRemoteClients = true + striker_missile_targeting_projectile.RemoteClientData = (26214, 134) + striker_missile_targeting_projectile.AutoLock = true + striker_missile_targeting_projectile.Packet = projectileConverter + ProjectileDefinition.CalculateDerivedFields(striker_missile_targeting_projectile) + striker_missile_targeting_projectile.Modifiers = RadialDegrade + + trek_projectile.Name = "trek_projectile" + trek_projectile.Damage0 = 0 + trek_projectile.Damage1 = 0 + trek_projectile.Damage2 = 0 + trek_projectile.Damage3 = 0 + trek_projectile.Damage4 = 0 + trek_projectile.Acceleration = -20 + trek_projectile.AccelerationUntil = 1f + trek_projectile.ProjectileDamageType = DamageType.Direct + trek_projectile.InitialVelocity = 40 + trek_projectile.Lifespan = 7f + trek_projectile.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(trek_projectile) + trek_projectile.Modifiers = MaxDistanceCutoff + + vanu_sentry_turret_projectile.Name = "vanu_sentry_turret_projectile" + vanu_sentry_turret_projectile.Damage0 = 25 + vanu_sentry_turret_projectile.Damage1 = 35 + vanu_sentry_turret_projectile.Damage2 = 100 + vanu_sentry_turret_projectile.DamageAtEdge = 0.1f + vanu_sentry_turret_projectile.DamageRadius = 3f + vanu_sentry_turret_projectile.ProjectileDamageType = DamageType.Splash + vanu_sentry_turret_projectile.InitialVelocity = 240 + vanu_sentry_turret_projectile.Lifespan = 1.3f + ProjectileDefinition.CalculateDerivedFields(vanu_sentry_turret_projectile) + vanu_sentry_turret_projectile.Modifiers = RadialDegrade + + vulture_bomb_projectile.Name = "vulture_bomb_projectile" + vulture_bomb_projectile.Damage0 = 175 + vulture_bomb_projectile.Damage1 = 1750 + vulture_bomb_projectile.Damage2 = 1000 + vulture_bomb_projectile.Damage3 = 400 + vulture_bomb_projectile.Damage4 = 1500 + vulture_bomb_projectile.DamageAtEdge = 0.1f + vulture_bomb_projectile.DamageRadius = 10f + vulture_bomb_projectile.ProjectileDamageType = DamageType.Splash + vulture_bomb_projectile.InitialVelocity = 0 + vulture_bomb_projectile.Lifespan = 30f + ProjectileDefinition.CalculateDerivedFields(vulture_bomb_projectile) + vulture_bomb_projectile.Modifiers = RadialDegrade + + vulture_nose_bullet_projectile.Name = "vulture_nose_bullet_projectile" + vulture_nose_bullet_projectile.Damage0 = 12 + vulture_nose_bullet_projectile.Damage1 = 15 + vulture_nose_bullet_projectile.Damage2 = 10 + vulture_nose_bullet_projectile.Damage3 = 10 + vulture_nose_bullet_projectile.Damage4 = 15 + vulture_nose_bullet_projectile.ProjectileDamageType = DamageType.Direct + vulture_nose_bullet_projectile.DegradeDelay = .4f + vulture_nose_bullet_projectile.DegradeMultiplier = 0.7f + vulture_nose_bullet_projectile.InitialVelocity = 500 + vulture_nose_bullet_projectile.Lifespan = 0.46f + ProjectileDefinition.CalculateDerivedFields(vulture_nose_bullet_projectile) + + vulture_tail_bullet_projectile.Name = "vulture_tail_bullet_projectile" + vulture_tail_bullet_projectile.Damage0 = 25 + vulture_tail_bullet_projectile.Damage1 = 35 + vulture_tail_bullet_projectile.Damage2 = 50 + vulture_tail_bullet_projectile.ProjectileDamageType = DamageType.Direct + vulture_tail_bullet_projectile.DegradeDelay = .02f + vulture_tail_bullet_projectile.DegradeMultiplier = 0.5f + vulture_tail_bullet_projectile.InitialVelocity = 500 + vulture_tail_bullet_projectile.Lifespan = 0.6f + ProjectileDefinition.CalculateDerivedFields(vulture_tail_bullet_projectile) + + wasp_gun_projectile.Name = "wasp_gun_projectile" + wasp_gun_projectile.Damage0 = 10 + wasp_gun_projectile.Damage1 = 15 + wasp_gun_projectile.Damage2 = 25 + wasp_gun_projectile.Damage3 = 17 + wasp_gun_projectile.Damage4 = 7 + wasp_gun_projectile.ProjectileDamageType = DamageType.Direct + wasp_gun_projectile.DegradeDelay = .015f + wasp_gun_projectile.DegradeMultiplier = 0.5f + wasp_gun_projectile.InitialVelocity = 500 + wasp_gun_projectile.Lifespan = 0.5f + wasp_gun_projectile.DamageToBattleframeOnly = true + ProjectileDefinition.CalculateDerivedFields(wasp_gun_projectile) + + wasp_rocket_projectile.Name = "wasp_rocket_projectile" + wasp_rocket_projectile.Damage0 = 35 + wasp_rocket_projectile.Damage1 = 50 + wasp_rocket_projectile.Damage2 = 300 + wasp_rocket_projectile.Acceleration = 10 + wasp_rocket_projectile.AccelerationUntil = 5f + wasp_rocket_projectile.DamageAtEdge = 0.1f + wasp_rocket_projectile.DamageRadius = 3f + wasp_rocket_projectile.ProjectileDamageType = DamageType.Splash + wasp_rocket_projectile.InitialVelocity = 60 + wasp_rocket_projectile.Lifespan = 6.5f + wasp_rocket_projectile.registerAs = "rc-projectiles" + wasp_rocket_projectile.ExistsOnRemoteClients = true + wasp_rocket_projectile.RemoteClientData = (0, 208) + wasp_rocket_projectile.AutoLock = true + wasp_rocket_projectile.Packet = projectileConverter + ProjectileDefinition.CalculateDerivedFields(wasp_rocket_projectile) + wasp_rocket_projectile.Modifiers = RadialDegrade + + winchester_projectile.Name = "winchester_projectile" + // TODO for later, maybe : set_resource_parent winchester_projectile game_objects bolt_projectile + winchester_projectile.Damage0 = 80 + winchester_projectile.Damage1 = 40 + winchester_projectile.Damage2 = 50 + winchester_projectile.Damage3 = 50 + winchester_projectile.Damage4 = 75 + winchester_projectile.ProjectileDamageType = DamageType.Direct + winchester_projectile.InitialVelocity = 500 + winchester_projectile.Lifespan = 0.6f + ProjectileDefinition.CalculateDerivedFields(winchester_projectile) + } + + /** + * Initialize `ProjectileDefinition` globals for projectiles utilized by battleframe robotics. + */ + private def init_bfr_projectile(): Unit = { + val projectileConverter: ProjectileConverter = new ProjectileConverter + val radCloudConverter: RadiationCloudConverter = new RadiationCloudConverter + + aphelion_immolation_cannon_projectile.Name = "aphelion_immolation_cannon_projectile" + aphelion_immolation_cannon_projectile.Damage0 = 55 + aphelion_immolation_cannon_projectile.Damage1 = 225 + aphelion_immolation_cannon_projectile.Damage2 = 210 + aphelion_immolation_cannon_projectile.Damage3 = 135 + aphelion_immolation_cannon_projectile.Damage4 = 140 + aphelion_immolation_cannon_projectile.DamageAtEdge = 0.1f + aphelion_immolation_cannon_projectile.DamageRadius = 2.0f + aphelion_immolation_cannon_projectile.ProjectileDamageType = DamageType.Splash + aphelion_immolation_cannon_projectile.InitialVelocity = 250 + aphelion_immolation_cannon_projectile.Lifespan = 1.4f + ProjectileDefinition.CalculateDerivedFields(aphelion_immolation_cannon_projectile) + aphelion_immolation_cannon_projectile.Modifiers = RadialDegrade + + aphelion_laser_projectile.Name = "aphelion_laser_projectile" + aphelion_laser_projectile.Damage0 = 3 + aphelion_laser_projectile.Damage1 = 5 + aphelion_laser_projectile.Damage2 = 5 + aphelion_laser_projectile.Damage3 = 4 + aphelion_laser_projectile.Damage4 = 5 + aphelion_laser_projectile.ProjectileDamageType = DamageType.Direct + aphelion_laser_projectile.DegradeDelay = .05f + aphelion_laser_projectile.DegradeMultiplier = 0.5f + aphelion_laser_projectile.InitialVelocity = 500 + aphelion_laser_projectile.Lifespan = 0.35f + ProjectileDefinition.CalculateDerivedFields(aphelion_laser_projectile) + + aphelion_plasma_cloud.Name = "aphelion_plasma_cloud" + aphelion_plasma_cloud.Damage0 = 3 + aphelion_plasma_cloud.DamageAtEdge = 1.0f + aphelion_plasma_cloud.DamageRadius = 3f + aphelion_plasma_cloud.radiation_cloud = true + aphelion_plasma_cloud.ProjectileDamageType = DamageType.Aggravated + aphelion_plasma_cloud.Aggravated = AggravatedDamage( + AggravatedInfo(DamageType.Splash, 0.5f, 1000), + Aura.Napalm, + AggravatedTiming(10000, 2), //10000 + 10f, //aphelion_plasma_rocket_projectile.aggravated_damage_max_factor + true, + List( + TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player) + ) + ) + aphelion_plasma_cloud.Lifespan = 10.0f + ProjectileDefinition.CalculateDerivedFields(aphelion_plasma_cloud) + aphelion_plasma_cloud.registerAs = "rc-projectiles" + aphelion_plasma_cloud.ExistsOnRemoteClients = true + aphelion_plasma_cloud.Packet = radCloudConverter + //aphelion_plasma_cloud.Geometry = GeometryForm.representProjectileBySphere() + aphelion_plasma_cloud.Modifiers = List( //TODO placeholder values + MaxDistanceCutoff, + InfantryAggravatedRadiation, + InfantryAggravatedRadiationBurn, + ShieldAgainstRadiation + ) + + aphelion_plasma_rocket_projectile.Name = "aphelion_plasma_rocket_projectile" + //has property aggravated_damage_max_factor, but it's the aphelion_plasma_cloud that performs aggravated damage + aphelion_plasma_rocket_projectile.Damage0 = 38 + aphelion_plasma_rocket_projectile.Damage1 = 70 + aphelion_plasma_rocket_projectile.Damage2 = 95 + aphelion_plasma_rocket_projectile.Damage3 = 55 + aphelion_plasma_rocket_projectile.Damage4 = 60 + aphelion_plasma_rocket_projectile.Acceleration = 20 + aphelion_plasma_rocket_projectile.AccelerationUntil = 2f + 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.InitialVelocity = 75 + aphelion_plasma_rocket_projectile.Lifespan = 5f + ProjectileDefinition.CalculateDerivedFields(aphelion_plasma_rocket_projectile) + aphelion_plasma_rocket_projectile.Modifiers = RadialDegrade + + aphelion_ppa_projectile.Name = "aphelion_ppa_projectile" + // TODO for later, maybe : set_resource_parent aphelion_ppa_projectile game_objects ppa_projectile + aphelion_ppa_projectile.Damage0 = 31 + aphelion_ppa_projectile.Damage1 = 84 + aphelion_ppa_projectile.Damage2 = 58 + aphelion_ppa_projectile.Damage3 = 57 + aphelion_ppa_projectile.Damage4 = 60 + aphelion_ppa_projectile.DamageAtEdge = 0.10f + aphelion_ppa_projectile.DamageRadius = 1f + aphelion_ppa_projectile.ProjectileDamageType = DamageType.Splash + aphelion_ppa_projectile.DegradeDelay = .5f + aphelion_ppa_projectile.DegradeMultiplier = 0.55f + aphelion_ppa_projectile.InitialVelocity = 350 + aphelion_ppa_projectile.Lifespan = .7f + ProjectileDefinition.CalculateDerivedFields(aphelion_ppa_projectile) + aphelion_ppa_projectile.Modifiers = RadialDegrade + + aphelion_starfire_projectile.Name = "aphelion_starfire_projectile" + // TODO for later, maybe : set_resource_parent aphelion_starfire_projectile game_objects starfire_projectile + aphelion_starfire_projectile.Damage0 = 12 + aphelion_starfire_projectile.Damage1 = 20 + aphelion_starfire_projectile.Damage2 = 15 + aphelion_starfire_projectile.Damage3 = 19 + aphelion_starfire_projectile.Damage4 = 17 + aphelion_starfire_projectile.Acceleration = 11 + aphelion_starfire_projectile.AccelerationUntil = 5f + aphelion_starfire_projectile.InitialVelocity = 45 + aphelion_starfire_projectile.Lifespan = 7f + aphelion_starfire_projectile.ProjectileDamageType = DamageType.Aggravated + aphelion_starfire_projectile.Aggravated = AggravatedDamage( + AggravatedInfo(DamageType.Direct, 0.25f, 250), + Aura.None, + 2000, + 0f, + true, + List(TargetValidation(EffectTarget.Category.Aircraft, EffectTarget.Validation.Aircraft)) + ) + aphelion_starfire_projectile.registerAs = "rc-projectiles" + aphelion_starfire_projectile.ExistsOnRemoteClients = true + aphelion_starfire_projectile.RemoteClientData = (39577, 249) //starfire_projectile data + aphelion_starfire_projectile.AutoLock = true + aphelion_starfire_projectile.Packet = projectileConverter + ProjectileDefinition.CalculateDerivedFields(aphelion_starfire_projectile) + aphelion_starfire_projectile.Modifiers = List( + StarfireAggravated, + StarfireAggravatedBurn + ) + + colossus_100mm_projectile.Name = "colossus_100mm_projectile" + colossus_100mm_projectile.Damage0 = 58 + colossus_100mm_projectile.Damage1 = 330 + colossus_100mm_projectile.Damage2 = 300 + colossus_100mm_projectile.Damage3 = 165 + colossus_100mm_projectile.Damage4 = 190 + colossus_100mm_projectile.DamageAtEdge = 0.1f + colossus_100mm_projectile.DamageRadius = 5f + colossus_100mm_projectile.ProjectileDamageType = DamageType.Splash + colossus_100mm_projectile.InitialVelocity = 100 + colossus_100mm_projectile.Lifespan = 4f + ProjectileDefinition.CalculateDerivedFields(colossus_100mm_projectile) + colossus_100mm_projectile.Modifiers = RadialDegrade + + colossus_burster_projectile.Name = "colossus_burster_projectile" + // TODO for later, maybe : set_resource_parent colossus_burster_projectile game_objects burster_projectile + colossus_burster_projectile.Damage0 = 18 + colossus_burster_projectile.Damage1 = 26 + colossus_burster_projectile.Damage2 = 18 + colossus_burster_projectile.Damage3 = 22 + colossus_burster_projectile.Damage4 = 20 + colossus_burster_projectile.DamageAtEdge = 0.1f + colossus_burster_projectile.DamageRadius = 7f + colossus_burster_projectile.ProjectileDamageType = DamageType.Direct + colossus_burster_projectile.ProjectileDamageTypeSecondary = DamageType.Splash + colossus_burster_projectile.InitialVelocity = 175 + colossus_burster_projectile.Lifespan = 2.5f + ProjectileDefinition.CalculateDerivedFields(colossus_burster_projectile) + colossus_burster_projectile.Modifiers = List( + //FlakHit, + FlakBurst, + MaxDistanceCutoff + ) + + colossus_chaingun_projectile.Name = "colossus_chaingun_projectile" + // TODO for later, maybe : set_resource_parent colossus_chaingun_projectile game_objects 35mmbullet_projectile + colossus_chaingun_projectile.Damage0 = 15 + colossus_chaingun_projectile.Damage1 = 14 + colossus_chaingun_projectile.Damage2 = 15 + colossus_chaingun_projectile.Damage3 = 13 + colossus_chaingun_projectile.Damage4 = 11 + colossus_chaingun_projectile.ProjectileDamageType = DamageType.Direct + colossus_chaingun_projectile.DegradeDelay = .100f + colossus_chaingun_projectile.DegradeMultiplier = 0.44f + colossus_chaingun_projectile.InitialVelocity = 500 + colossus_chaingun_projectile.Lifespan = .50f + ProjectileDefinition.CalculateDerivedFields(colossus_chaingun_projectile) + + colossus_cluster_bomb_projectile.Name = "colossus_cluster_bomb_projectile" + colossus_cluster_bomb_projectile.Damage0 = 40 + colossus_cluster_bomb_projectile.Damage1 = 88 + colossus_cluster_bomb_projectile.Damage2 = 100 + colossus_cluster_bomb_projectile.Damage3 = 83 + colossus_cluster_bomb_projectile.Damage4 = 88 + colossus_cluster_bomb_projectile.DamageAtEdge = 0.1f + colossus_cluster_bomb_projectile.DamageRadius = 8f + colossus_cluster_bomb_projectile.ProjectileDamageType = DamageType.Splash + colossus_cluster_bomb_projectile.InitialVelocity = 75 + colossus_cluster_bomb_projectile.Lifespan = 5f + ProjectileDefinition.CalculateDerivedFields(colossus_cluster_bomb_projectile) + colossus_cluster_bomb_projectile.Modifiers = RadialDegrade + + colossus_tank_cannon_projectile.Name = "colossus_tank_cannon_projectile" + // TODO for later, maybe : set_resource_parent colossus_tank_cannon_projectile game_objects 75mmbullet_projectile + colossus_tank_cannon_projectile.Damage0 = 33 + colossus_tank_cannon_projectile.Damage1 = 90 + colossus_tank_cannon_projectile.Damage2 = 95 + colossus_tank_cannon_projectile.Damage3 = 71 + colossus_tank_cannon_projectile.Damage4 = 66 + colossus_tank_cannon_projectile.DamageAtEdge = 0.1f + colossus_tank_cannon_projectile.DamageRadius = 2f + colossus_tank_cannon_projectile.ProjectileDamageType = DamageType.Splash + colossus_tank_cannon_projectile.InitialVelocity = 165 + colossus_tank_cannon_projectile.Lifespan = 2f + ProjectileDefinition.CalculateDerivedFields(colossus_tank_cannon_projectile) + colossus_tank_cannon_projectile.Modifiers = RadialDegrade + + peregrine_dual_machine_gun_projectile.Name = "peregrine_dual_machine_gun_projectile" + // TODO for later, maybe : set_resource_parent peregrine_dual_machine_gun_projectile game_objects 35mmbullet_projectile + peregrine_dual_machine_gun_projectile.Damage0 = 16 + peregrine_dual_machine_gun_projectile.Damage1 = 44 + peregrine_dual_machine_gun_projectile.Damage2 = 30 + peregrine_dual_machine_gun_projectile.Damage3 = 27 + peregrine_dual_machine_gun_projectile.Damage4 = 32 + peregrine_dual_machine_gun_projectile.ProjectileDamageType = DamageType.Direct + peregrine_dual_machine_gun_projectile.DegradeDelay = .25f + peregrine_dual_machine_gun_projectile.DegradeMultiplier = 0.65f + peregrine_dual_machine_gun_projectile.InitialVelocity = 250 + peregrine_dual_machine_gun_projectile.Lifespan = 1.1f + ProjectileDefinition.CalculateDerivedFields(peregrine_dual_machine_gun_projectile) + + peregrine_mechhammer_projectile.Name = "peregrine_mechhammer_projectile" + peregrine_mechhammer_projectile.Damage0 = 5 + peregrine_mechhammer_projectile.Damage1 = 4 + peregrine_mechhammer_projectile.Damage2 = 4 + peregrine_mechhammer_projectile.Damage3 = 5 + peregrine_mechhammer_projectile.Damage4 = 3 + peregrine_mechhammer_projectile.ProjectileDamageType = DamageType.Direct + peregrine_mechhammer_projectile.InitialVelocity = 500 + peregrine_mechhammer_projectile.Lifespan = 0.4f + ProjectileDefinition.CalculateDerivedFields(peregrine_mechhammer_projectile) + + peregrine_particle_cannon_projectile.Name = "peregrine_particle_cannon_projectile" + peregrine_particle_cannon_projectile.Damage0 = 70 + peregrine_particle_cannon_projectile.Damage1 = 525 + peregrine_particle_cannon_projectile.Damage2 = 350 + peregrine_particle_cannon_projectile.Damage3 = 318 + peregrine_particle_cannon_projectile.Damage4 = 310 + 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.InitialVelocity = 500 + peregrine_particle_cannon_projectile.Lifespan = .6f + ProjectileDefinition.CalculateDerivedFields(peregrine_particle_cannon_projectile) + peregrine_particle_cannon_projectile.Modifiers = RadialDegrade + + peregrine_particle_cannon_radiation_cloud.Name = "peregrine_particle_cannon_radiation_cloud" + peregrine_particle_cannon_radiation_cloud.Damage0 = 1 + peregrine_particle_cannon_radiation_cloud.DamageAtEdge = 1.0f + peregrine_particle_cannon_radiation_cloud.DamageRadius = 3f + peregrine_particle_cannon_radiation_cloud.radiation_cloud = true + peregrine_particle_cannon_radiation_cloud.ProjectileDamageType = DamageType.Radiation + peregrine_particle_cannon_radiation_cloud.Lifespan = 5.0f + ProjectileDefinition.CalculateDerivedFields(peregrine_particle_cannon_radiation_cloud) + peregrine_particle_cannon_radiation_cloud.registerAs = "rc-projectiles" + peregrine_particle_cannon_radiation_cloud.ExistsOnRemoteClients = true + peregrine_particle_cannon_radiation_cloud.Packet = radCloudConverter + //peregrine_particle_cannon_radiation_cloud.Geometry = GeometryForm.representProjectileBySphere() + peregrine_particle_cannon_radiation_cloud.Modifiers = List( + MaxDistanceCutoff, + ShieldAgainstRadiation + ) + + peregrine_rocket_pod_projectile.Name = "peregrine_rocket_pod_projectile" + peregrine_rocket_pod_projectile.Damage0 = 30 + peregrine_rocket_pod_projectile.Damage1 = 50 + peregrine_rocket_pod_projectile.Damage2 = 50 + peregrine_rocket_pod_projectile.Damage3 = 45 + peregrine_rocket_pod_projectile.Damage4 = 40 + peregrine_rocket_pod_projectile.Acceleration = 10 + peregrine_rocket_pod_projectile.AccelerationUntil = 2f + peregrine_rocket_pod_projectile.DamageAtEdge = 0.1f + peregrine_rocket_pod_projectile.DamageRadius = 3f + peregrine_rocket_pod_projectile.ProjectileDamageType = DamageType.Splash + peregrine_rocket_pod_projectile.InitialVelocity = 200 + peregrine_rocket_pod_projectile.Lifespan = 1.85f + ProjectileDefinition.CalculateDerivedFields(peregrine_rocket_pod_projectile) + peregrine_rocket_pod_projectile.Modifiers = RadialDegrade + + peregrine_sparrow_projectile.Name = "peregrine_sparrow_projectile" + // TODO for later, maybe : set_resource_parent peregrine_sparrow_projectile game_objects sparrow_projectile + peregrine_sparrow_projectile.Damage0 = 20 + peregrine_sparrow_projectile.Damage1 = 40 + peregrine_sparrow_projectile.Damage2 = 30 + peregrine_sparrow_projectile.Damage3 = 30 + peregrine_sparrow_projectile.Damage4 = 31 + peregrine_sparrow_projectile.Acceleration = 12 + peregrine_sparrow_projectile.AccelerationUntil = 5f + peregrine_sparrow_projectile.DamageAtEdge = 0.1f + peregrine_sparrow_projectile.DamageRadius = 2f + peregrine_sparrow_projectile.ProjectileDamageType = DamageType.Splash + peregrine_sparrow_projectile.InitialVelocity = 45 + peregrine_sparrow_projectile.Lifespan = 7.5f + peregrine_sparrow_projectile.registerAs = "rc-projectiles" + peregrine_sparrow_projectile.ExistsOnRemoteClients = true + peregrine_sparrow_projectile.RemoteClientData = (13107, 187) //sparrow_projectile data + peregrine_sparrow_projectile.AutoLock = true + peregrine_sparrow_projectile.Packet = projectileConverter + ProjectileDefinition.CalculateDerivedFields(peregrine_sparrow_projectile) + peregrine_sparrow_projectile.Modifiers = RadialDegrade + + armor_siphon_projectile.Name = "armor_siphon_projectile" + armor_siphon_projectile.Damage0 = 0 + armor_siphon_projectile.Damage1 = 20 //ground vehicles, siphon drain + armor_siphon_projectile.Damage2 = 20 //aircraft, siphon drain + armor_siphon_projectile.Damage3 = 0 + armor_siphon_projectile.Damage4 = 20 //bfr's, siphon drain + armor_siphon_projectile.DamageToVehicleOnly = true + armor_siphon_projectile.DamageToBattleframeOnly = true + armor_siphon_projectile.DamageRadius = 35f + armor_siphon_projectile.ProjectileDamageType = DamageType.Siphon + ProjectileDefinition.CalculateDerivedFields(armor_siphon_projectile) + armor_siphon_projectile.Modifiers = List( + ArmorSiphonMaxDistanceCutoff, + ArmorSiphonRepairHost + ) + + ntu_siphon_emp.Name = "ntu_siphon_emp" + ntu_siphon_emp.Damage0 = 1 + ntu_siphon_emp.Damage1 = 1 + ntu_siphon_emp.DamageAtEdge = 0.1f + ntu_siphon_emp.DamageRadius = 50f + ntu_siphon_emp.ProjectileDamageType = DamageType.Splash + ntu_siphon_emp.AdditionalEffect = true + ntu_siphon_emp.SympatheticExplosion = true + ntu_siphon_emp.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Player, + EffectTarget.Validation.Player + ) -> 1000 + ntu_siphon_emp.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Vehicle, + EffectTarget.Validation.AMS + ) -> 5000 + ntu_siphon_emp.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Deployable, + EffectTarget.Validation.MotionSensor + ) -> 30000 + ntu_siphon_emp.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Deployable, + EffectTarget.Validation.Spitfire + ) -> 30000 + ntu_siphon_emp.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Turret, + EffectTarget.Validation.Turret + ) -> 30000 + ntu_siphon_emp.JammedEffectDuration += TargetValidation( + EffectTarget.Category.Vehicle, + EffectTarget.Validation.VehicleNotAMS + ) -> 10000 + ProjectileDefinition.CalculateDerivedFields(ntu_siphon_emp) + ntu_siphon_emp.Modifiers = MaxDistanceCutoff + } +} diff --git a/src/main/scala/net/psforever/objects/global/GlobalDefinitionsTools.scala b/src/main/scala/net/psforever/objects/global/GlobalDefinitionsTools.scala new file mode 100644 index 000000000..cab660dfd --- /dev/null +++ b/src/main/scala/net/psforever/objects/global/GlobalDefinitionsTools.scala @@ -0,0 +1,2198 @@ +// Copyright (c) 2024 PSForever +package net.psforever.objects.global + +import net.psforever.objects.GlobalDefinitions +import net.psforever.objects.avatar.Certification +import net.psforever.objects.ce.DeployedItem +import net.psforever.objects.definition.ConstructionFireMode +import net.psforever.objects.definition.converter._ +import net.psforever.objects.equipment._ +import net.psforever.objects.inventory.InventoryTile + +object GlobalDefinitionsTools { + import GlobalDefinitions._ + + /** + * Initialize `ToolDefinition` globals. + */ + def init(): Unit = { + init_infantry_tools() + init_vehicle_tools() + } + + /** + * Initialize `ToolDefinition` globals. + */ + private def init_infantry_tools(): Unit = { + chainblade.Name = "chainblade" + chainblade.Size = EquipmentSize.Melee + chainblade.AmmoTypes += melee_ammo + chainblade.ProjectileTypes += melee_ammo_projectile + chainblade.ProjectileTypes += chainblade_projectile + chainblade.FireModes += new InfiniteFireModeDefinition + chainblade.FireModes.head.AmmoTypeIndices += 0 + chainblade.FireModes.head.AmmoSlotIndex = 0 + chainblade.FireModes.head.Magazine = 1 + chainblade.FireModes += new InfiniteFireModeDefinition + chainblade.FireModes(1).AmmoTypeIndices += 0 + chainblade.FireModes(1).ProjectileTypeIndices += 1 + chainblade.FireModes(1).AmmoSlotIndex = 0 + chainblade.FireModes(1).Magazine = 1 + + magcutter.Name = "magcutter" + magcutter.Size = EquipmentSize.Melee + magcutter.AmmoTypes += melee_ammo + magcutter.ProjectileTypes += melee_ammo_projectile + magcutter.ProjectileTypes += magcutter_projectile + magcutter.FireModes += new InfiniteFireModeDefinition + magcutter.FireModes.head.AmmoTypeIndices += 0 + magcutter.FireModes.head.AmmoSlotIndex = 0 + magcutter.FireModes.head.Magazine = 1 + magcutter.FireModes += new InfiniteFireModeDefinition + magcutter.FireModes(1).AmmoTypeIndices += 0 + magcutter.FireModes(1).ProjectileTypeIndices += 1 + magcutter.FireModes(1).AmmoSlotIndex = 0 + magcutter.FireModes(1).Magazine = 1 + + forceblade.Name = "forceblade" + forceblade.Size = EquipmentSize.Melee + forceblade.AmmoTypes += melee_ammo + forceblade.ProjectileTypes += melee_ammo_projectile + forceblade.ProjectileTypes += forceblade_projectile + forceblade.FireModes += new InfiniteFireModeDefinition + forceblade.FireModes.head.AmmoTypeIndices += 0 + forceblade.FireModes.head.AmmoSlotIndex = 0 + forceblade.FireModes.head.Magazine = 1 + forceblade.FireModes += new InfiniteFireModeDefinition + forceblade.FireModes(1).AmmoTypeIndices += 0 + forceblade.FireModes(1).ProjectileTypeIndices += 1 + forceblade.FireModes(1).AmmoSlotIndex = 0 + forceblade.FireModes(1).Magazine = 1 + + katana.Name = "katana" + katana.Size = EquipmentSize.Melee + katana.AmmoTypes += melee_ammo + katana.ProjectileTypes += katana_projectile + katana.ProjectileTypes += katana_projectileb + katana.FireModes += new InfiniteFireModeDefinition + katana.FireModes.head.AmmoTypeIndices += 0 + katana.FireModes.head.AmmoSlotIndex = 0 + katana.FireModes.head.Magazine = 1 + katana.FireModes += new InfiniteFireModeDefinition + katana.FireModes(1).AmmoTypeIndices += 0 + katana.FireModes(1).ProjectileTypeIndices += 1 + katana.FireModes(1).AmmoSlotIndex = 0 + katana.FireModes(1).Magazine = 1 + + frag_grenade.Name = "frag_grenade" + frag_grenade.Size = EquipmentSize.Pistol + frag_grenade.AmmoTypes += frag_grenade_ammo + frag_grenade.ProjectileTypes += frag_grenade_projectile + frag_grenade.FireModes += new FireModeDefinition + frag_grenade.FireModes.head.AmmoTypeIndices += 0 + frag_grenade.FireModes.head.AmmoSlotIndex = 0 + frag_grenade.FireModes.head.Magazine = 3 + frag_grenade.FireModes += new FireModeDefinition + frag_grenade.FireModes(1).AmmoTypeIndices += 0 + frag_grenade.FireModes(1).AmmoSlotIndex = 0 + frag_grenade.FireModes(1).Magazine = 3 + frag_grenade.Tile = InventoryTile.Tile22 + + plasma_grenade.Name = "plasma_grenade" + plasma_grenade.Size = EquipmentSize.Pistol + plasma_grenade.AmmoTypes += plasma_grenade_ammo + plasma_grenade.ProjectileTypes += plasma_grenade_projectile + plasma_grenade.FireModes += new FireModeDefinition + plasma_grenade.FireModes.head.AmmoTypeIndices += 0 + plasma_grenade.FireModes.head.AmmoSlotIndex = 0 + plasma_grenade.FireModes.head.Magazine = 3 + plasma_grenade.FireModes += new FireModeDefinition + plasma_grenade.FireModes(1).AmmoTypeIndices += 0 + plasma_grenade.FireModes(1).AmmoSlotIndex = 0 + plasma_grenade.FireModes(1).Magazine = 3 + plasma_grenade.Tile = InventoryTile.Tile22 + + jammer_grenade.Name = "jammer_grenade" + jammer_grenade.Size = EquipmentSize.Pistol + jammer_grenade.AmmoTypes += jammer_grenade_ammo + jammer_grenade.ProjectileTypes += jammer_grenade_projectile + jammer_grenade.FireModes += new FireModeDefinition + jammer_grenade.FireModes.head.AmmoTypeIndices += 0 + jammer_grenade.FireModes.head.AmmoSlotIndex = 0 + jammer_grenade.FireModes.head.Magazine = 3 + jammer_grenade.FireModes += new FireModeDefinition + jammer_grenade.FireModes(1).AmmoTypeIndices += 0 + jammer_grenade.FireModes(1).AmmoSlotIndex = 0 + jammer_grenade.FireModes(1).Magazine = 3 + jammer_grenade.Tile = InventoryTile.Tile22 + + repeater.Name = "repeater" + repeater.Size = EquipmentSize.Pistol + repeater.AmmoTypes += bullet_9mm + repeater.AmmoTypes += bullet_9mm_AP + repeater.ProjectileTypes += bullet_9mm_projectile + repeater.ProjectileTypes += bullet_9mm_AP_projectile + repeater.FireModes += new FireModeDefinition + repeater.FireModes.head.AmmoTypeIndices += 0 + repeater.FireModes.head.AmmoTypeIndices += 1 + repeater.FireModes.head.AmmoSlotIndex = 0 + repeater.FireModes.head.Magazine = 20 + repeater.FireModes.head.Add.Damage0 = 2 + repeater.FireModes.head.Add.Damage1 = -3 + repeater.FireModes.head.Add.Damage2 = -3 + repeater.FireModes.head.Add.Damage3 = -3 + repeater.FireModes.head.Add.Damage4 = -3 + repeater.Tile = InventoryTile.Tile33 + + isp.Name = "isp" + isp.Size = EquipmentSize.Pistol + isp.AmmoTypes += shotgun_shell + isp.AmmoTypes += shotgun_shell_AP + isp.ProjectileTypes += shotgun_shell_projectile + isp.ProjectileTypes += shotgun_shell_AP_projectile + isp.FireModes += new PelletFireModeDefinition + isp.FireModes.head.AmmoTypeIndices += 0 + isp.FireModes.head.AmmoTypeIndices += 1 + isp.FireModes.head.AmmoSlotIndex = 0 + isp.FireModes.head.Chamber = 6 //8 shells x 6 pellets = 36 + isp.FireModes.head.Magazine = 8 + isp.FireModes.head.Add.Damage0 = 1 + isp.FireModes.head.Add.Damage2 = 1 + isp.FireModes.head.Add.Damage3 = 1 + isp.Tile = InventoryTile.Tile33 + + beamer.Name = "beamer" + beamer.Size = EquipmentSize.Pistol + beamer.AmmoTypes += energy_cell + beamer.ProjectileTypes += energy_cell_projectile + beamer.ProjectileTypes += enhanced_energy_cell_projectile + beamer.FireModes += new FireModeDefinition + beamer.FireModes.head.AmmoTypeIndices += 0 + beamer.FireModes.head.AmmoSlotIndex = 0 + beamer.FireModes.head.Magazine = 16 + beamer.FireModes.head.Add.Damage0 = 4 + beamer.FireModes.head.Add.Damage1 = -1 + beamer.FireModes.head.Add.Damage2 = -1 + beamer.FireModes.head.Add.Damage3 = -1 + beamer.FireModes.head.Add.Damage4 = -1 + beamer.FireModes += new FireModeDefinition + beamer.FireModes(1).AmmoTypeIndices += 0 + beamer.FireModes(1).ProjectileTypeIndices += 1 + beamer.FireModes(1).AmmoSlotIndex = 0 + beamer.FireModes(1).Magazine = 16 + beamer.FireModes(1).Add.Damage0 = -3 + beamer.FireModes(1).Add.Damage1 = -3 + beamer.FireModes(1).Add.Damage2 = -3 + beamer.FireModes(1).Add.Damage3 = -3 + beamer.FireModes(1).Add.Damage4 = -3 + beamer.Tile = InventoryTile.Tile33 + + ilc9.Name = "ilc9" + ilc9.Size = EquipmentSize.Pistol + ilc9.AmmoTypes += bullet_9mm + ilc9.AmmoTypes += bullet_9mm_AP + ilc9.ProjectileTypes += bullet_9mm_projectile + ilc9.ProjectileTypes += bullet_9mm_AP_projectile + ilc9.FireModes += new FireModeDefinition + ilc9.FireModes.head.AmmoTypeIndices += 0 + ilc9.FireModes.head.AmmoTypeIndices += 1 + ilc9.FireModes.head.AmmoSlotIndex = 0 + ilc9.FireModes.head.Magazine = 30 + ilc9.FireModes.head.Add.Damage1 = -3 + ilc9.FireModes.head.Add.Damage4 = -3 + ilc9.Tile = InventoryTile.Tile33 + + suppressor.Name = "suppressor" + suppressor.Size = EquipmentSize.Rifle + suppressor.AmmoTypes += bullet_9mm + suppressor.AmmoTypes += bullet_9mm_AP + suppressor.ProjectileTypes += bullet_9mm_projectile + suppressor.ProjectileTypes += bullet_9mm_AP_projectile + suppressor.FireModes += new FireModeDefinition + suppressor.FireModes.head.AmmoTypeIndices += 0 + suppressor.FireModes.head.AmmoTypeIndices += 1 + suppressor.FireModes.head.AmmoSlotIndex = 0 + suppressor.FireModes.head.Magazine = 25 + suppressor.FireModes.head.Add.Damage0 = -1 + suppressor.FireModes.head.Add.Damage1 = -1 + suppressor.Tile = InventoryTile.Tile63 + + punisher.Name = "punisher" + punisher.Size = EquipmentSize.Rifle + punisher.AmmoTypes += bullet_9mm + punisher.AmmoTypes += bullet_9mm_AP + punisher.AmmoTypes += rocket + punisher.AmmoTypes += frag_cartridge + punisher.AmmoTypes += jammer_cartridge + punisher.AmmoTypes += plasma_cartridge + punisher.ProjectileTypes += bullet_9mm_projectile + punisher.ProjectileTypes += bullet_9mm_AP_projectile + punisher.ProjectileTypes += rocket_projectile + punisher.ProjectileTypes += frag_cartridge_projectile + punisher.ProjectileTypes += jammer_cartridge_projectile + punisher.ProjectileTypes += plasma_cartridge_projectile + punisher.FireModes += new FireModeDefinition + punisher.FireModes.head.AmmoTypeIndices += 0 + punisher.FireModes.head.AmmoTypeIndices += 1 + punisher.FireModes.head.AmmoSlotIndex = 0 + punisher.FireModes.head.Magazine = 30 + punisher.FireModes.head.Add.Damage0 = 1 + punisher.FireModes.head.Add.Damage3 = 1 + punisher.FireModes += new FireModeDefinition + punisher.FireModes(1).AmmoTypeIndices += 2 + punisher.FireModes(1).AmmoTypeIndices += 3 + punisher.FireModes(1).AmmoTypeIndices += 4 + punisher.FireModes(1).AmmoTypeIndices += 5 + punisher.FireModes(1).AmmoSlotIndex = 1 + punisher.FireModes(1).Magazine = 1 + punisher.Tile = InventoryTile.Tile63 + + flechette.Name = "flechette" + flechette.Size = EquipmentSize.Rifle + flechette.AmmoTypes += shotgun_shell + flechette.AmmoTypes += shotgun_shell_AP + flechette.ProjectileTypes += shotgun_shell_projectile + flechette.ProjectileTypes += shotgun_shell_AP_projectile + flechette.FireModes += new PelletFireModeDefinition + flechette.FireModes.head.AmmoTypeIndices += 0 + flechette.FireModes.head.AmmoTypeIndices += 1 + flechette.FireModes.head.AmmoSlotIndex = 0 + flechette.FireModes.head.Magazine = 12 + flechette.FireModes.head.Chamber = 8 //12 shells * 8 pellets = 96 + flechette.Tile = InventoryTile.Tile63 + + cycler.Name = "cycler" + cycler.Size = EquipmentSize.Rifle + cycler.AmmoTypes += bullet_9mm + cycler.AmmoTypes += bullet_9mm_AP + cycler.ProjectileTypes += bullet_9mm_projectile + cycler.ProjectileTypes += bullet_9mm_AP_projectile + cycler.FireModes += new FireModeDefinition + cycler.FireModes.head.AmmoTypeIndices += 0 + cycler.FireModes.head.AmmoTypeIndices += 1 + cycler.FireModes.head.AmmoSlotIndex = 0 + cycler.FireModes.head.Magazine = 50 + cycler.Tile = InventoryTile.Tile63 + + gauss.Name = "gauss" + gauss.Size = EquipmentSize.Rifle + gauss.AmmoTypes += bullet_9mm + gauss.AmmoTypes += bullet_9mm_AP + gauss.ProjectileTypes += bullet_9mm_projectile + gauss.ProjectileTypes += bullet_9mm_AP_projectile + gauss.FireModes += new FireModeDefinition + gauss.FireModes.head.AmmoTypeIndices += 0 + gauss.FireModes.head.AmmoTypeIndices += 1 + gauss.FireModes.head.AmmoSlotIndex = 0 + gauss.FireModes.head.Magazine = 30 + gauss.FireModes.head.Add.Damage0 = 2 + gauss.FireModes.head.Add.Damage3 = 2 + gauss.Tile = InventoryTile.Tile63 + + pulsar.Name = "pulsar" + pulsar.Size = EquipmentSize.Rifle + pulsar.AmmoTypes += energy_cell + pulsar.ProjectileTypes += pulsar_projectile + pulsar.ProjectileTypes += pulsar_ap_projectile + pulsar.FireModes += new FireModeDefinition + pulsar.FireModes.head.AmmoTypeIndices += 0 + pulsar.FireModes.head.AmmoSlotIndex = 0 + pulsar.FireModes.head.Magazine = 40 + pulsar.FireModes += new FireModeDefinition + pulsar.FireModes(1).AmmoTypeIndices += 0 + pulsar.FireModes(1).ProjectileTypeIndices += 1 + pulsar.FireModes(1).AmmoSlotIndex = 0 + pulsar.FireModes(1).Magazine = 40 + pulsar.Tile = InventoryTile.Tile63 + + anniversary_guna.Name = "anniversary_guna" + anniversary_guna.Size = EquipmentSize.Pistol + anniversary_guna.AmmoTypes += anniversary_ammo + anniversary_guna.ProjectileTypes += anniversary_projectilea + anniversary_guna.ProjectileTypes += anniversary_projectileb + anniversary_guna.FireModes += new FireModeDefinition + anniversary_guna.FireModes.head.AmmoTypeIndices += 0 + anniversary_guna.FireModes.head.AmmoSlotIndex = 0 + anniversary_guna.FireModes.head.Magazine = 6 + anniversary_guna.FireModes += new FireModeDefinition + anniversary_guna.FireModes(1).AmmoTypeIndices += 0 + anniversary_guna.FireModes(1).ProjectileTypeIndices += 1 + anniversary_guna.FireModes(1).AmmoSlotIndex = 0 + anniversary_guna.FireModes(1).Magazine = 6 + anniversary_guna.Tile = InventoryTile.Tile33 + + anniversary_gun.Name = "anniversary_gun" + anniversary_gun.Size = EquipmentSize.Pistol + anniversary_gun.AmmoTypes += anniversary_ammo + anniversary_gun.ProjectileTypes += anniversary_projectilea + anniversary_gun.ProjectileTypes += anniversary_projectileb + anniversary_gun.FireModes += new FireModeDefinition + anniversary_gun.FireModes.head.AmmoTypeIndices += 0 + anniversary_gun.FireModes.head.AmmoSlotIndex = 0 + anniversary_gun.FireModes.head.Magazine = 6 + anniversary_gun.FireModes += new FireModeDefinition + anniversary_gun.FireModes(1).AmmoTypeIndices += 0 + anniversary_gun.FireModes(1).ProjectileTypeIndices += 1 + anniversary_gun.FireModes(1).AmmoSlotIndex = 0 + anniversary_gun.FireModes(1).Magazine = 6 + anniversary_gun.Tile = InventoryTile.Tile33 + + anniversary_gunb.Name = "anniversary_gunb" + anniversary_gunb.Size = EquipmentSize.Pistol + anniversary_gunb.AmmoTypes += anniversary_ammo + anniversary_gunb.ProjectileTypes += anniversary_projectilea + anniversary_gunb.ProjectileTypes += anniversary_projectileb + anniversary_gunb.FireModes += new FireModeDefinition + anniversary_gunb.FireModes.head.AmmoTypeIndices += 0 + anniversary_gunb.FireModes.head.AmmoSlotIndex = 0 + anniversary_gunb.FireModes.head.Magazine = 6 + anniversary_gunb.FireModes += new FireModeDefinition + anniversary_gunb.FireModes(1).AmmoTypeIndices += 0 + anniversary_gunb.FireModes(1).ProjectileTypeIndices += 1 + anniversary_gunb.FireModes(1).AmmoSlotIndex = 0 + anniversary_gunb.FireModes(1).Magazine = 6 + anniversary_gunb.Tile = InventoryTile.Tile33 + + spiker.Name = "spiker" + spiker.Size = EquipmentSize.Pistol + spiker.AmmoTypes += ancient_ammo_combo + spiker.ProjectileTypes += spiker_projectile + spiker.FireModes += new ChargeFireModeDefinition(time = 1000, drainInterval = 500) + spiker.FireModes.head.AmmoTypeIndices += 0 + spiker.FireModes.head.AmmoSlotIndex = 0 + spiker.FireModes.head.Magazine = 25 + spiker.Tile = InventoryTile.Tile33 + + mini_chaingun.Name = "mini_chaingun" + mini_chaingun.Size = EquipmentSize.Rifle + mini_chaingun.AmmoTypes += bullet_9mm + mini_chaingun.AmmoTypes += bullet_9mm_AP + mini_chaingun.ProjectileTypes += bullet_9mm_projectile + mini_chaingun.ProjectileTypes += bullet_9mm_AP_projectile + mini_chaingun.FireModes += new FireModeDefinition + mini_chaingun.FireModes.head.AmmoTypeIndices += 0 + mini_chaingun.FireModes.head.AmmoTypeIndices += 1 + mini_chaingun.FireModes.head.AmmoSlotIndex = 0 + mini_chaingun.FireModes.head.Magazine = 100 + mini_chaingun.Tile = InventoryTile.Tile93 + + r_shotgun.Name = "r_shotgun" + r_shotgun.Size = EquipmentSize.Rifle + r_shotgun.AmmoTypes += shotgun_shell + r_shotgun.AmmoTypes += shotgun_shell_AP + r_shotgun.ProjectileTypes += shotgun_shell_projectile + r_shotgun.ProjectileTypes += shotgun_shell_AP_projectile + r_shotgun.FireModes += new PelletFireModeDefinition + r_shotgun.FireModes.head.AmmoTypeIndices += 0 + r_shotgun.FireModes.head.AmmoTypeIndices += 1 + r_shotgun.FireModes.head.AmmoSlotIndex = 0 + r_shotgun.FireModes.head.Magazine = 16 + r_shotgun.FireModes.head.Chamber = 8 //16 shells * 8 pellets = 128 + r_shotgun.FireModes.head.Add.Damage0 = 1 + r_shotgun.FireModes += new PelletFireModeDefinition + r_shotgun.FireModes(1).AmmoTypeIndices += 0 + r_shotgun.FireModes(1).AmmoTypeIndices += 1 + r_shotgun.FireModes(1).AmmoSlotIndex = 0 + r_shotgun.FireModes(1).Magazine = 16 + r_shotgun.FireModes(1).Chamber = 8 //16 shells * 8 pellets = 128 + r_shotgun.FireModes(1).Add.Damage0 = -3 + r_shotgun.Tile = InventoryTile.Tile93 + + lasher.Name = "lasher" + lasher.Size = EquipmentSize.Rifle + lasher.AmmoTypes += energy_cell + lasher.ProjectileTypes += lasher_projectile + lasher.ProjectileTypes += lasher_projectile_ap + lasher.FireModes += new FireModeDefinition + lasher.FireModes.head.AmmoTypeIndices += 0 + lasher.FireModes.head.AmmoSlotIndex = 0 + lasher.FireModes.head.Magazine = 35 + lasher.FireModes += new FireModeDefinition + lasher.FireModes(1).AmmoTypeIndices += 0 + lasher.FireModes(1).ProjectileTypeIndices += 1 + lasher.FireModes(1).AmmoSlotIndex = 0 + lasher.FireModes(1).Magazine = 35 + lasher.Tile = InventoryTile.Tile93 + + maelstrom.Name = "maelstrom" + maelstrom.Size = EquipmentSize.Rifle + maelstrom.AmmoTypes += maelstrom_ammo + maelstrom.ProjectileTypes += maelstrom_stream_projectile + maelstrom.ProjectileTypes += maelstrom_grenade_projectile_contact + maelstrom.ProjectileTypes += maelstrom_grenade_projectile + maelstrom.FireModes += new FireModeDefinition + maelstrom.FireModes.head.AmmoTypeIndices += 0 + maelstrom.FireModes.head.AmmoSlotIndex = 0 + maelstrom.FireModes.head.Magazine = 150 + maelstrom.FireModes += new FireModeDefinition + maelstrom.FireModes(1).AmmoTypeIndices += 0 + maelstrom.FireModes(1).ProjectileTypeIndices += 1 + maelstrom.FireModes(1).AmmoSlotIndex = 0 + maelstrom.FireModes(1).Magazine = 150 + maelstrom.FireModes(1).RoundsPerShot = 10 + maelstrom.FireModes += new FireModeDefinition + maelstrom.FireModes(2).AmmoTypeIndices += 0 + maelstrom.FireModes(2).ProjectileTypeIndices += 2 + maelstrom.FireModes(2).AmmoSlotIndex = 0 + maelstrom.FireModes(2).Magazine = 150 + maelstrom.FireModes(2).RoundsPerShot = 10 + maelstrom.Tile = InventoryTile.Tile93 + + phoenix.Name = "phoenix" + phoenix.Size = EquipmentSize.Rifle + phoenix.AmmoTypes += phoenix_missile + phoenix.ProjectileTypes += phoenix_missile_projectile + phoenix.ProjectileTypes += phoenix_missile_guided_projectile + phoenix.FireModes += new FireModeDefinition + phoenix.FireModes.head.AmmoTypeIndices += 0 + phoenix.FireModes.head.AmmoSlotIndex = 0 + phoenix.FireModes.head.Magazine = 3 + phoenix.FireModes += new FireModeDefinition + phoenix.FireModes(1).AmmoTypeIndices += 0 + phoenix.FireModes(1).ProjectileTypeIndices += 1 + phoenix.FireModes(1).AmmoSlotIndex = 0 + phoenix.FireModes(1).Magazine = 3 + phoenix.Tile = InventoryTile.Tile93 + + striker.Name = "striker" + striker.Size = EquipmentSize.Rifle + striker.AmmoTypes += striker_missile_ammo + striker.ProjectileTypes += striker_missile_targeting_projectile + striker.ProjectileTypes += striker_missile_projectile + striker.FireModes += new FireModeDefinition + striker.FireModes.head.AmmoTypeIndices += 0 + striker.FireModes.head.AmmoSlotIndex = 0 + striker.FireModes.head.Magazine = 5 + striker.FireModes += new FireModeDefinition + striker.FireModes(1).AmmoTypeIndices += 0 + striker.FireModes(1).ProjectileTypeIndices += 1 + striker.FireModes(1).AmmoSlotIndex = 0 + striker.FireModes(1).Magazine = 5 + striker.Tile = InventoryTile.Tile93 + + hunterseeker.Name = "hunterseeker" + hunterseeker.Size = EquipmentSize.Rifle + hunterseeker.AmmoTypes += hunter_seeker_missile + hunterseeker.ProjectileTypes += hunter_seeker_missile_projectile + hunterseeker.ProjectileTypes += hunter_seeker_missile_dumbfire + hunterseeker.FireModes += new FireModeDefinition + hunterseeker.FireModes.head.AmmoTypeIndices += 0 + hunterseeker.FireModes.head.AmmoSlotIndex = 0 + hunterseeker.FireModes.head.Magazine = 1 + hunterseeker.FireModes += new FireModeDefinition + hunterseeker.FireModes(1).AmmoTypeIndices += 0 + hunterseeker.FireModes(1).ProjectileTypeIndices += 1 + hunterseeker.FireModes(1).AmmoSlotIndex = 0 + hunterseeker.FireModes(1).Magazine = 1 + hunterseeker.Tile = InventoryTile.Tile93 + + lancer.Name = "lancer" + lancer.Size = EquipmentSize.Rifle + lancer.AmmoTypes += lancer_cartridge + lancer.ProjectileTypes += lancer_projectile + lancer.FireModes += new FireModeDefinition + lancer.FireModes.head.AmmoTypeIndices += 0 + lancer.FireModes.head.AmmoSlotIndex = 0 + lancer.FireModes.head.Magazine = 6 + lancer.Tile = InventoryTile.Tile93 + + rocklet.Name = "rocklet" + rocklet.Size = EquipmentSize.Rifle + rocklet.AmmoTypes += rocket + rocklet.AmmoTypes += frag_cartridge + rocklet.ProjectileTypes += rocket_projectile + rocklet.ProjectileTypes += rocklet_flak_projectile + rocklet.FireModes += new FireModeDefinition + rocklet.FireModes.head.AmmoTypeIndices += 0 + rocklet.FireModes.head.AmmoTypeIndices += 1 + rocklet.FireModes.head.AmmoSlotIndex = 0 + rocklet.FireModes.head.Magazine = 6 + rocklet.FireModes += new FireModeDefinition + rocklet.FireModes(1).AmmoTypeIndices += 0 + rocklet.FireModes(1).AmmoTypeIndices += 1 + rocklet.FireModes(1).AmmoSlotIndex = 0 + rocklet.FireModes(1).Magazine = 6 + rocklet.Tile = InventoryTile.Tile63 + + thumper.Name = "thumper" + thumper.Size = EquipmentSize.Rifle + thumper.AmmoTypes += frag_cartridge + thumper.AmmoTypes += plasma_cartridge + thumper.AmmoTypes += jammer_cartridge + thumper.ProjectileTypes += frag_cartridge_projectile_b + thumper.ProjectileTypes += plasma_cartridge_projectile_b + thumper.ProjectileTypes += jammer_cartridge_projectile_b + thumper.FireModes += new FireModeDefinition + thumper.FireModes.head.AmmoTypeIndices += 0 + thumper.FireModes.head.AmmoTypeIndices += 1 + thumper.FireModes.head.AmmoTypeIndices += 2 + thumper.FireModes.head.AmmoSlotIndex = 0 + thumper.FireModes.head.Magazine = 6 + thumper.FireModes += new FireModeDefinition + thumper.FireModes(1).AmmoTypeIndices += 0 + thumper.FireModes(1).AmmoTypeIndices += 1 + thumper.FireModes(1).AmmoTypeIndices += 2 + thumper.FireModes(1).AmmoSlotIndex = 0 + thumper.FireModes(1).Magazine = 6 + thumper.Tile = InventoryTile.Tile63 + + radiator.Name = "radiator" + radiator.Size = EquipmentSize.Rifle + radiator.AmmoTypes += ancient_ammo_combo + radiator.ProjectileTypes += radiator_grenade_projectile + radiator.ProjectileTypes += radiator_sticky_projectile + radiator.FireModes += new FireModeDefinition + radiator.FireModes.head.AmmoTypeIndices += 0 + radiator.FireModes.head.AmmoSlotIndex = 0 + radiator.FireModes.head.Magazine = 25 + radiator.FireModes += new FireModeDefinition + radiator.FireModes(1).AmmoTypeIndices += 0 + radiator.FireModes(1).ProjectileTypeIndices += 1 + radiator.FireModes(1).AmmoSlotIndex = 0 + radiator.FireModes(1).Magazine = 25 + radiator.Tile = InventoryTile.Tile63 + + heavy_sniper.Name = "heavy_sniper" + heavy_sniper.Size = EquipmentSize.Rifle + heavy_sniper.AmmoTypes += bolt + heavy_sniper.ProjectileTypes += heavy_sniper_projectile + heavy_sniper.FireModes += new FireModeDefinition + heavy_sniper.FireModes.head.AmmoTypeIndices += 0 + heavy_sniper.FireModes.head.AmmoSlotIndex = 0 + heavy_sniper.FireModes.head.Magazine = 10 + heavy_sniper.Tile = InventoryTile.Tile93 + + bolt_driver.Name = "bolt_driver" + bolt_driver.Size = EquipmentSize.Rifle + bolt_driver.AmmoTypes += bolt + bolt_driver.ProjectileTypes += bolt_projectile + bolt_driver.FireModes += new FireModeDefinition + bolt_driver.FireModes.head.AmmoTypeIndices += 0 + bolt_driver.FireModes.head.AmmoSlotIndex = 0 + bolt_driver.FireModes.head.Magazine = 1 + bolt_driver.Tile = InventoryTile.Tile93 + + oicw.Name = "oicw" + oicw.Size = EquipmentSize.Rifle + oicw.AmmoTypes += oicw_ammo + oicw.ProjectileTypes += oicw_projectile + oicw.FireModes += new FireModeDefinition + oicw.FireModes.head.AmmoTypeIndices += 0 + oicw.FireModes.head.AmmoSlotIndex = 0 + oicw.FireModes.head.Magazine = 1 + oicw.FireModes += new FireModeDefinition + oicw.FireModes(1).AmmoTypeIndices += 0 + oicw.FireModes(1).AmmoSlotIndex = 0 + oicw.FireModes(1).Magazine = 1 + oicw.Tile = InventoryTile.Tile93 + + flamethrower.Name = "flamethrower" + flamethrower.Size = EquipmentSize.Rifle + flamethrower.AmmoTypes += flamethrower_ammo + flamethrower.ProjectileTypes += flamethrower_projectile + flamethrower.ProjectileTypes += flamethrower_fireball + flamethrower.FireModes += new FireModeDefinition + flamethrower.FireModes.head.AmmoTypeIndices += 0 + flamethrower.FireModes.head.AmmoSlotIndex = 0 + flamethrower.FireModes.head.Magazine = 100 + flamethrower.FireModes += new FireModeDefinition + flamethrower.FireModes(1).AmmoTypeIndices += 0 + flamethrower.FireModes(1).ProjectileTypeIndices += 1 + flamethrower.FireModes(1).AmmoSlotIndex = 0 + flamethrower.FireModes(1).Magazine = 100 + flamethrower.FireModes(1).RoundsPerShot = 50 + flamethrower.Tile = InventoryTile.Tile93 + + winchester.Name = "winchester" + winchester.Size = EquipmentSize.Rifle + winchester.AmmoTypes += winchester_ammo + winchester.ProjectileTypes += winchester_projectile + winchester.FireModes += new FireModeDefinition + winchester.FireModes.head.AmmoTypeIndices += 0 + winchester.FireModes.head.AmmoSlotIndex = 0 + winchester.FireModes.head.Magazine = 1 + winchester.Tile = InventoryTile.Tile93 + + pellet_gun.Name = "pellet_gun" + pellet_gun.Size = EquipmentSize.Rifle + pellet_gun.AmmoTypes += pellet_gun_ammo + pellet_gun.ProjectileTypes += pellet_gun_projectile + pellet_gun.FireModes += new PelletFireModeDefinition + pellet_gun.FireModes.head.AmmoTypeIndices += 0 + pellet_gun.FireModes.head.AmmoSlotIndex = 0 + pellet_gun.FireModes.head.Magazine = 1 //what is this? + pellet_gun.FireModes.head.Chamber = 8 //1 shell * 8 pellets = 8 + pellet_gun.Tile = InventoryTile.Tile63 + + six_shooter.Name = "six_shooter" + six_shooter.Size = EquipmentSize.Pistol + six_shooter.AmmoTypes += six_shooter_ammo + six_shooter.ProjectileTypes += six_shooter_projectile + six_shooter.FireModes += new FireModeDefinition + six_shooter.FireModes.head.AmmoTypeIndices += 0 + six_shooter.FireModes.head.AmmoSlotIndex = 0 + six_shooter.FireModes.head.Magazine = 6 + six_shooter.Tile = InventoryTile.Tile33 + + dynomite.Name = "dynomite" + dynomite.Size = EquipmentSize.Pistol + dynomite.AmmoTypes += frag_grenade_ammo + dynomite.ProjectileTypes += dynomite_projectile + dynomite.FireModes += new FireModeDefinition + dynomite.FireModes.head.AmmoTypeIndices += 0 + dynomite.FireModes.head.AmmoSlotIndex = 0 + dynomite.FireModes.head.Magazine = 1 + dynomite.Tile = InventoryTile.Tile22 + + trhev_dualcycler.Name = "trhev_dualcycler" + trhev_dualcycler.Descriptor = "trhev_antipersonnel" + trhev_dualcycler.Size = EquipmentSize.Max + trhev_dualcycler.AmmoTypes += dualcycler_ammo + trhev_dualcycler.ProjectileTypes += dualcycler_projectile + trhev_dualcycler.FireModes += new FireModeDefinition + trhev_dualcycler.FireModes.head.AmmoTypeIndices += 0 + trhev_dualcycler.FireModes.head.AmmoSlotIndex = 0 + trhev_dualcycler.FireModes.head.Magazine = 200 + trhev_dualcycler.FireModes += new FireModeDefinition //anchored + trhev_dualcycler.FireModes(1).AmmoTypeIndices += 0 + trhev_dualcycler.FireModes(1).AmmoSlotIndex = 0 + trhev_dualcycler.FireModes(1).Magazine = 200 + trhev_dualcycler.FireModes += new FireModeDefinition //overdrive? + trhev_dualcycler.FireModes(2).AmmoTypeIndices += 0 + trhev_dualcycler.FireModes(2).AmmoSlotIndex = 0 + trhev_dualcycler.FireModes(2).Magazine = 200 + + trhev_pounder.Name = "trhev_pounder" + trhev_pounder.Descriptor = "trhev_antivehicular" + trhev_pounder.Size = EquipmentSize.Max + trhev_pounder.AmmoTypes += pounder_ammo + trhev_pounder.ProjectileTypes += pounder_projectile + trhev_pounder.ProjectileTypes += pounder_projectile_enh + trhev_pounder.FireModes += new FireModeDefinition + trhev_pounder.FireModes.head.AmmoTypeIndices += 0 //explode on contact + trhev_pounder.FireModes.head.AmmoSlotIndex = 0 + trhev_pounder.FireModes.head.Magazine = 30 + trhev_pounder.FireModes += new FireModeDefinition //explode on contact, anchored + trhev_pounder.FireModes(1).AmmoTypeIndices += 0 + trhev_pounder.FireModes(1).AmmoSlotIndex = 0 + trhev_pounder.FireModes(1).Magazine = 30 + trhev_pounder.FireModes += new FireModeDefinition //explode on contact, overdrive? + trhev_pounder.FireModes(2).AmmoTypeIndices += 0 + trhev_pounder.FireModes(2).AmmoSlotIndex = 0 + trhev_pounder.FireModes(2).Magazine = 30 + trhev_pounder.FireModes += new FireModeDefinition //3-second fuse + trhev_pounder.FireModes(3).AmmoTypeIndices += 0 + trhev_pounder.FireModes(3).ProjectileTypeIndices += 1 + trhev_pounder.FireModes(3).AmmoSlotIndex = 0 + trhev_pounder.FireModes(3).Magazine = 30 + trhev_pounder.FireModes += new FireModeDefinition //3-second fuse, anchored + trhev_pounder.FireModes(4).AmmoTypeIndices += 0 + trhev_pounder.FireModes(4).ProjectileTypeIndices += 1 + trhev_pounder.FireModes(4).AmmoSlotIndex = 0 + trhev_pounder.FireModes(4).Magazine = 30 + trhev_pounder.FireModes += new FireModeDefinition //3-second fuse, overdrive? + trhev_pounder.FireModes(5).AmmoTypeIndices += 0 + trhev_pounder.FireModes(5).ProjectileTypeIndices += 1 + trhev_pounder.FireModes(5).AmmoSlotIndex = 0 + trhev_pounder.FireModes(5).Magazine = 30 + + trhev_burster.Name = "trhev_burster" + trhev_burster.Descriptor = "trhev_antiaircraft" + trhev_burster.Size = EquipmentSize.Max + trhev_burster.AmmoTypes += burster_ammo + trhev_burster.ProjectileTypes += burster_projectile + trhev_burster.FireModes += new FireModeDefinition + trhev_burster.FireModes.head.AmmoTypeIndices += 0 + trhev_burster.FireModes.head.AmmoSlotIndex = 0 + trhev_burster.FireModes.head.Magazine = 40 + + nchev_scattercannon.Name = "nchev_scattercannon" + nchev_scattercannon.Descriptor = "nchev_antipersonnel" + nchev_scattercannon.Size = EquipmentSize.Max + nchev_scattercannon.AmmoTypes += scattercannon_ammo + nchev_scattercannon.ProjectileTypes += scattercannon_projectile + nchev_scattercannon.FireModes += new PelletFireModeDefinition + nchev_scattercannon.FireModes.head.AmmoTypeIndices += 0 + nchev_scattercannon.FireModes.head.AmmoSlotIndex = 0 + nchev_scattercannon.FireModes.head.Magazine = 40 + nchev_scattercannon.FireModes.head.Chamber = 10 //40 shells * 10 pellets = 400 + nchev_scattercannon.FireModes += new PelletFireModeDefinition + nchev_scattercannon.FireModes(1).AmmoTypeIndices += 0 + nchev_scattercannon.FireModes(1).AmmoSlotIndex = 0 + nchev_scattercannon.FireModes(1).Magazine = 40 + nchev_scattercannon.FireModes(1).Chamber = 10 //40 shells * 10 pellets = 400 + nchev_scattercannon.FireModes += new PelletFireModeDefinition + nchev_scattercannon.FireModes(2).AmmoTypeIndices += 0 + nchev_scattercannon.FireModes(2).AmmoSlotIndex = 0 + nchev_scattercannon.FireModes(2).Magazine = 40 + nchev_scattercannon.FireModes(2).Chamber = 10 //40 shells * 10 pellets = 400 + + nchev_falcon.Name = "nchev_falcon" + nchev_falcon.Descriptor = "nchev_antivehicular" + nchev_falcon.Size = EquipmentSize.Max + nchev_falcon.AmmoTypes += falcon_ammo + nchev_falcon.ProjectileTypes += falcon_projectile + nchev_falcon.FireModes += new FireModeDefinition + nchev_falcon.FireModes.head.AmmoTypeIndices += 0 + nchev_falcon.FireModes.head.AmmoSlotIndex = 0 + nchev_falcon.FireModes.head.Magazine = 20 + + nchev_sparrow.Name = "nchev_sparrow" + nchev_sparrow.Descriptor = "nchev_antiaircraft" + nchev_sparrow.Size = EquipmentSize.Max + nchev_sparrow.AmmoTypes += sparrow_ammo + nchev_sparrow.ProjectileTypes += sparrow_projectile + nchev_sparrow.FireModes += new FireModeDefinition + nchev_sparrow.FireModes.head.AmmoTypeIndices += 0 + nchev_sparrow.FireModes.head.AmmoSlotIndex = 0 + nchev_sparrow.FireModes.head.Magazine = 12 + + vshev_quasar.Name = "vshev_quasar" + vshev_quasar.Descriptor = "vshev_antipersonnel" + vshev_quasar.Size = EquipmentSize.Max + vshev_quasar.AmmoTypes += quasar_ammo + vshev_quasar.ProjectileTypes += quasar_projectile + vshev_quasar.ProjectileTypes += enhanced_quasar_projectile + vshev_quasar.FireModes += new FireModeDefinition + vshev_quasar.FireModes.head.AmmoTypeIndices += 0 + vshev_quasar.FireModes.head.AmmoSlotIndex = 0 + vshev_quasar.FireModes.head.Magazine = 120 + vshev_quasar.FireModes += new FireModeDefinition + vshev_quasar.FireModes(1).AmmoTypeIndices += 0 + vshev_quasar.FireModes(1).ProjectileTypeIndices += 1 + vshev_quasar.FireModes(1).AmmoSlotIndex = 0 + vshev_quasar.FireModes(1).Magazine = 120 + + vshev_comet.Name = "vshev_comet" + vshev_comet.Descriptor = "vshev_antivehicular" + vshev_comet.Size = EquipmentSize.Max + vshev_comet.AmmoTypes += comet_ammo + vshev_comet.ProjectileTypes += comet_projectile + vshev_comet.FireModes += new FireModeDefinition + vshev_comet.FireModes.head.AmmoTypeIndices += 0 + vshev_comet.FireModes.head.AmmoSlotIndex = 0 + vshev_comet.FireModes.head.Magazine = 10 + + vshev_starfire.Name = "vshev_starfire" + vshev_starfire.Descriptor = "vshev_antiaircraft" + vshev_starfire.Size = EquipmentSize.Max + vshev_starfire.AmmoTypes += starfire_ammo + vshev_starfire.ProjectileTypes += starfire_projectile + vshev_starfire.FireModes += new FireModeDefinition + vshev_starfire.FireModes.head.AmmoTypeIndices += 0 + vshev_starfire.FireModes.head.AmmoSlotIndex = 0 + vshev_starfire.FireModes.head.Magazine = 8 + + medicalapplicator.Name = "medicalapplicator" + medicalapplicator.Size = EquipmentSize.Pistol + medicalapplicator.AmmoTypes += health_canister + medicalapplicator.ProjectileTypes += no_projectile + medicalapplicator.FireModes += new FireModeDefinition + medicalapplicator.FireModes.head.AmmoTypeIndices += 0 + medicalapplicator.FireModes.head.AmmoSlotIndex = 0 + medicalapplicator.FireModes.head.Magazine = 100 + medicalapplicator.FireModes += new FireModeDefinition + medicalapplicator.FireModes(1).AmmoTypeIndices += 0 + medicalapplicator.FireModes(1).AmmoSlotIndex = 0 + medicalapplicator.FireModes(1).Magazine = 100 + medicalapplicator.Tile = InventoryTile.Tile33 + + nano_dispenser.Name = "nano_dispenser" + nano_dispenser.Size = EquipmentSize.Rifle + nano_dispenser.AmmoTypes += armor_canister + nano_dispenser.AmmoTypes += upgrade_canister + nano_dispenser.ProjectileTypes += no_projectile + nano_dispenser.FireModes += new FireModeDefinition + nano_dispenser.FireModes.head.AmmoTypeIndices += 0 + nano_dispenser.FireModes.head.AmmoTypeIndices += 1 + nano_dispenser.FireModes.head.ProjectileTypeIndices += 0 //armor_canister + nano_dispenser.FireModes.head.ProjectileTypeIndices += 0 //upgrade_canister + nano_dispenser.FireModes.head.AmmoSlotIndex = 0 + nano_dispenser.FireModes.head.Magazine = 100 + nano_dispenser.FireModes.head.CustomMagazine = Ammo.upgrade_canister -> 1 + nano_dispenser.FireModes.head.Add.Damage0 = 0 + nano_dispenser.FireModes.head.Add.Damage1 = 20 + nano_dispenser.FireModes.head.Add.Damage2 = 0 + nano_dispenser.FireModes.head.Add.Damage3 = 0 + nano_dispenser.FireModes.head.Add.Damage4 = 20 + nano_dispenser.AddRepairMultiplier(level = 3, value = 2.0f) + nano_dispenser.AddRepairMultiplier(level = 2, value = 1.5f) + nano_dispenser.AddRepairMultiplier(level = 1, value = 1.0f) + nano_dispenser.Tile = InventoryTile.Tile63 + + bank.Name = "bank" + bank.Size = EquipmentSize.Pistol + bank.AmmoTypes += armor_canister + bank.ProjectileTypes += no_projectile + bank.FireModes += new FireModeDefinition + bank.FireModes.head.AmmoTypeIndices += 0 + bank.FireModes.head.AmmoSlotIndex = 0 + bank.FireModes.head.Magazine = 100 + bank.FireModes += new FireModeDefinition + bank.FireModes(1).AmmoTypeIndices += 0 + bank.FireModes(1).AmmoSlotIndex = 0 + bank.FireModes(1).Magazine = 100 + bank.AddRepairMultiplier(level = 3, value = 1.5f) + bank.AddRepairMultiplier(level = 2, value = 1.2f) + bank.AddRepairMultiplier(level = 1, value = 1.0f) + bank.Tile = InventoryTile.Tile33 + + remote_electronics_kit.Name = "remote_electronics_kit" + remote_electronics_kit.Packet = new REKConverter + remote_electronics_kit.Tile = InventoryTile.Tile33 + + boomer_trigger.Name = "boomer_trigger" + boomer_trigger.Packet = new BoomerTriggerConverter + boomer_trigger.Tile = InventoryTile.Tile22 + + trek.Name = "trek" + trek.Size = EquipmentSize.Pistol + trek.AmmoTypes += trek_ammo + trek.ProjectileTypes += trek_projectile + trek.FireModes += new FireModeDefinition + trek.FireModes.head.AmmoTypeIndices += 0 + trek.FireModes.head.AmmoSlotIndex = 0 + trek.FireModes.head.Magazine = 4 + trek.FireModes += new InfiniteFireModeDefinition + trek.FireModes(1).AmmoTypeIndices += 0 + trek.FireModes(1).AmmoSlotIndex = 0 + trek.FireModes(1).Magazine = 1 + trek.Tile = InventoryTile.Tile33 + + flail_targeting_laser.Name = "flail_targeting_laser" + flail_targeting_laser.Packet = new CommandDetonaterConverter + flail_targeting_laser.Tile = InventoryTile.Tile33 + + command_detonater.Name = "command_detonater" + command_detonater.Packet = new CommandDetonaterConverter + command_detonater.Tile = InventoryTile.Tile33 + + ace.Name = "ace" + ace.Size = EquipmentSize.Pistol + ace.Modes += new ConstructionFireMode { + Item(DeployedItem.boomer, Set(Certification.CombatEngineering)) + } + ace.Modes += new ConstructionFireMode { + Item(DeployedItem.he_mine, Set(Certification.CombatEngineering)) + Item(DeployedItem.jammer_mine, Set(Certification.AssaultEngineering)) + } + ace.Modes += new ConstructionFireMode { + Item(DeployedItem.spitfire_turret, Set(Certification.CombatEngineering)) + Item(DeployedItem.spitfire_cloaked, Set(Certification.FortificationEngineering)) + Item(DeployedItem.spitfire_aa, Set(Certification.FortificationEngineering)) + } + ace.Modes += new ConstructionFireMode { + Item(DeployedItem.motionalarmsensor, Set(Certification.CombatEngineering)) + Item(DeployedItem.sensor_shield, Set(Certification.AdvancedHacking, Certification.CombatEngineering)) + } + ace.Tile = InventoryTile.Tile33 + + advanced_ace.Name = "advanced_ace" + advanced_ace.Size = EquipmentSize.Rifle + advanced_ace.Modes += new ConstructionFireMode { + Item(DeployedItem.tank_traps, Set(Certification.FortificationEngineering)) + } + advanced_ace.Modes += new ConstructionFireMode { + Item(DeployedItem.portable_manned_turret, Set(Certification.AssaultEngineering)) + } + advanced_ace.Modes += new ConstructionFireMode { + Item(DeployedItem.deployable_shield_generator, Set(Certification.AssaultEngineering)) + } + advanced_ace.Tile = InventoryTile.Tile93 + + router_telepad.Name = "router_telepad" + router_telepad.Size = EquipmentSize.Pistol + router_telepad.Modes += new ConstructionFireMode + router_telepad.Modes.head.Item(DeployedItem.router_telepad_deployable, Set(Certification.GroundSupport)) + router_telepad.Tile = InventoryTile.Tile33 + router_telepad.Packet = new TelepadConverter + } + + /** + * Initialize `ToolDefinition` globals. + */ + private def init_vehicle_tools(): Unit = { + fury_weapon_systema.Name = "fury_weapon_systema" + fury_weapon_systema.Size = EquipmentSize.VehicleWeapon + fury_weapon_systema.AmmoTypes += hellfire_ammo + fury_weapon_systema.ProjectileTypes += hellfire_projectile + fury_weapon_systema.FireModes += new FireModeDefinition + fury_weapon_systema.FireModes.head.AmmoTypeIndices += 0 + fury_weapon_systema.FireModes.head.AmmoSlotIndex = 0 + fury_weapon_systema.FireModes.head.Magazine = 2 + + quadassault_weapon_system.Name = "quadassault_weapon_system" + quadassault_weapon_system.Size = EquipmentSize.VehicleWeapon + quadassault_weapon_system.AmmoTypes += bullet_12mm + quadassault_weapon_system.ProjectileTypes += bullet_12mm_projectile + quadassault_weapon_system.FireModes += new FireModeDefinition + quadassault_weapon_system.FireModes.head.AmmoTypeIndices += 0 + quadassault_weapon_system.FireModes.head.AmmoSlotIndex = 0 + quadassault_weapon_system.FireModes.head.Magazine = 150 + + scythe.Name = "scythe" + scythe.Size = EquipmentSize.VehicleWeapon + scythe.AmmoTypes += ancient_ammo_vehicle + scythe.AmmoTypes += ancient_ammo_vehicle + scythe.ProjectileTypes += scythe_projectile + scythe.FireModes += new FireModeDefinition + scythe.FireModes.head.AmmoTypeIndices += 0 + scythe.FireModes.head.AmmoSlotIndex = 0 + scythe.FireModes.head.Magazine = 250 + scythe.FireModes += new FireModeDefinition + scythe.FireModes(1).AmmoTypeIndices += 0 + scythe.FireModes(1).ProjectileTypeIndices += 0 + scythe.FireModes(1).AmmoSlotIndex = + 1 //note: the scythe has two magazines using a single pool; however, it can not ammo-switch or mode-switch + scythe.FireModes(1).Magazine = 250 + + chaingun_p.Name = "chaingun_p" + chaingun_p.Size = EquipmentSize.VehicleWeapon + chaingun_p.AmmoTypes += bullet_12mm + chaingun_p.ProjectileTypes += bullet_12mm_projectile + chaingun_p.FireModes += new FireModeDefinition + chaingun_p.FireModes.head.AmmoTypeIndices += 0 + chaingun_p.FireModes.head.AmmoSlotIndex = 0 + chaingun_p.FireModes.head.Magazine = 150 + + skyguard_weapon_system.Name = "skyguard_weapon_system" + skyguard_weapon_system.Size = EquipmentSize.VehicleWeapon + skyguard_weapon_system.AmmoTypes += skyguard_flak_cannon_ammo + skyguard_weapon_system.AmmoTypes += bullet_12mm + skyguard_weapon_system.ProjectileTypes += skyguard_flak_cannon_projectile + skyguard_weapon_system.ProjectileTypes += bullet_12mm_projectile + skyguard_weapon_system.FireModes += new FireModeDefinition + skyguard_weapon_system.FireModes.head.AmmoTypeIndices += 0 + skyguard_weapon_system.FireModes.head.AmmoSlotIndex = 0 + skyguard_weapon_system.FireModes.head.Magazine = 40 + skyguard_weapon_system.FireModes += new FireModeDefinition + skyguard_weapon_system.FireModes(1).AmmoTypeIndices += 1 + skyguard_weapon_system.FireModes(1).AmmoSlotIndex = 1 + skyguard_weapon_system.FireModes(1).Magazine = 250 + + grenade_launcher_marauder.Name = "grenade_launcher_marauder" + grenade_launcher_marauder.Size = EquipmentSize.VehicleWeapon + grenade_launcher_marauder.AmmoTypes += heavy_grenade_mortar + grenade_launcher_marauder.ProjectileTypes += heavy_grenade_projectile + grenade_launcher_marauder.FireModes += new FireModeDefinition + grenade_launcher_marauder.FireModes.head.AmmoTypeIndices += 0 + grenade_launcher_marauder.FireModes.head.AmmoSlotIndex = 0 + grenade_launcher_marauder.FireModes.head.Magazine = 50 + + advanced_missile_launcher_t.Name = "advanced_missile_launcher_t" + advanced_missile_launcher_t.Size = EquipmentSize.VehicleWeapon + advanced_missile_launcher_t.AmmoTypes += firebird_missile + advanced_missile_launcher_t.ProjectileTypes += firebird_missile_projectile + advanced_missile_launcher_t.FireModes += new FireModeDefinition + advanced_missile_launcher_t.FireModes.head.AmmoTypeIndices += 0 + advanced_missile_launcher_t.FireModes.head.AmmoSlotIndex = 0 + advanced_missile_launcher_t.FireModes.head.Magazine = 40 + + flux_cannon_thresher.Name = "flux_cannon_thresher" + flux_cannon_thresher.Size = EquipmentSize.VehicleWeapon + flux_cannon_thresher.AmmoTypes += flux_cannon_thresher_battery + flux_cannon_thresher.ProjectileTypes += flux_cannon_thresher_projectile + flux_cannon_thresher.FireModes += new FireModeDefinition + flux_cannon_thresher.FireModes.head.AmmoTypeIndices += 0 + flux_cannon_thresher.FireModes.head.AmmoSlotIndex = 0 + flux_cannon_thresher.FireModes.head.Magazine = 100 + + mediumtransport_weapon_systemA.Name = "mediumtransport_weapon_systemA" + mediumtransport_weapon_systemA.Size = EquipmentSize.VehicleWeapon + mediumtransport_weapon_systemA.AmmoTypes += bullet_20mm + mediumtransport_weapon_systemA.ProjectileTypes += bullet_20mm_projectile + mediumtransport_weapon_systemA.FireModes += new FireModeDefinition + mediumtransport_weapon_systemA.FireModes.head.AmmoTypeIndices += 0 + mediumtransport_weapon_systemA.FireModes.head.AmmoSlotIndex = 0 + mediumtransport_weapon_systemA.FireModes.head.Magazine = 150 + + mediumtransport_weapon_systemB.Name = "mediumtransport_weapon_systemB" + mediumtransport_weapon_systemB.Size = EquipmentSize.VehicleWeapon + mediumtransport_weapon_systemB.AmmoTypes += bullet_20mm + mediumtransport_weapon_systemB.ProjectileTypes += bullet_20mm_projectile + mediumtransport_weapon_systemB.FireModes += new FireModeDefinition + mediumtransport_weapon_systemB.FireModes.head.AmmoTypeIndices += 0 + mediumtransport_weapon_systemB.FireModes.head.AmmoSlotIndex = 0 + mediumtransport_weapon_systemB.FireModes.head.Magazine = 150 + + battlewagon_weapon_systema.Name = "battlewagon_weapon_systema" + battlewagon_weapon_systema.Size = EquipmentSize.VehicleWeapon + battlewagon_weapon_systema.AmmoTypes += bullet_15mm + battlewagon_weapon_systema.ProjectileTypes += bullet_15mm_projectile + battlewagon_weapon_systema.FireModes += new FireModeDefinition + battlewagon_weapon_systema.FireModes.head.AmmoTypeIndices += 0 + battlewagon_weapon_systema.FireModes.head.AmmoSlotIndex = 0 + battlewagon_weapon_systema.FireModes.head.Magazine = 240 + + battlewagon_weapon_systemb.Name = "battlewagon_weapon_systemb" + battlewagon_weapon_systemb.Size = EquipmentSize.VehicleWeapon + battlewagon_weapon_systemb.AmmoTypes += bullet_15mm + battlewagon_weapon_systemb.ProjectileTypes += bullet_15mm_projectile + battlewagon_weapon_systemb.FireModes += new FireModeDefinition + battlewagon_weapon_systemb.FireModes.head.AmmoTypeIndices += 0 + battlewagon_weapon_systemb.FireModes.head.AmmoSlotIndex = 0 + battlewagon_weapon_systemb.FireModes.head.Magazine = 240 + + battlewagon_weapon_systemc.Name = "battlewagon_weapon_systemc" + battlewagon_weapon_systemc.Size = EquipmentSize.VehicleWeapon + battlewagon_weapon_systemc.AmmoTypes += bullet_15mm + battlewagon_weapon_systemc.ProjectileTypes += bullet_15mm_projectile + battlewagon_weapon_systemc.FireModes += new FireModeDefinition + battlewagon_weapon_systemc.FireModes.head.AmmoTypeIndices += 0 + battlewagon_weapon_systemc.FireModes.head.AmmoSlotIndex = 0 + battlewagon_weapon_systemc.FireModes.head.Magazine = 240 + + battlewagon_weapon_systemd.Name = "battlewagon_weapon_systemd" + battlewagon_weapon_systemd.Size = EquipmentSize.VehicleWeapon + battlewagon_weapon_systemd.AmmoTypes += bullet_15mm + battlewagon_weapon_systemd.ProjectileTypes += bullet_15mm_projectile + battlewagon_weapon_systemd.FireModes += new FireModeDefinition + battlewagon_weapon_systemd.FireModes.head.AmmoTypeIndices += 0 + battlewagon_weapon_systemd.FireModes.head.AmmoSlotIndex = 0 + battlewagon_weapon_systemd.FireModes.head.Magazine = 240 + + thunderer_weapon_systema.Name = "thunderer_weapon_systema" + thunderer_weapon_systema.Size = EquipmentSize.VehicleWeapon + thunderer_weapon_systema.AmmoTypes += gauss_cannon_ammo + thunderer_weapon_systema.ProjectileTypes += gauss_cannon_projectile + thunderer_weapon_systema.FireModes += new FireModeDefinition + thunderer_weapon_systema.FireModes.head.AmmoTypeIndices += 0 + thunderer_weapon_systema.FireModes.head.AmmoSlotIndex = 0 + thunderer_weapon_systema.FireModes.head.Magazine = 15 + + thunderer_weapon_systemb.Name = "thunderer_weapon_systemb" + thunderer_weapon_systemb.Size = EquipmentSize.VehicleWeapon + thunderer_weapon_systemb.AmmoTypes += gauss_cannon_ammo + thunderer_weapon_systemb.ProjectileTypes += gauss_cannon_projectile + thunderer_weapon_systemb.FireModes += new FireModeDefinition + thunderer_weapon_systemb.FireModes.head.AmmoTypeIndices += 0 + thunderer_weapon_systemb.FireModes.head.AmmoSlotIndex = 0 + thunderer_weapon_systemb.FireModes.head.Magazine = 15 + + aurora_weapon_systema.Name = "aurora_weapon_systema" + aurora_weapon_systema.Size = EquipmentSize.VehicleWeapon + aurora_weapon_systema.AmmoTypes += fluxpod_ammo + aurora_weapon_systema.ProjectileTypes += fluxpod_projectile + aurora_weapon_systema.FireModes += new FireModeDefinition + aurora_weapon_systema.FireModes.head.AmmoTypeIndices += 0 + aurora_weapon_systema.FireModes.head.AmmoSlotIndex = 0 + aurora_weapon_systema.FireModes.head.Magazine = 12 + aurora_weapon_systema.FireModes += new FireModeDefinition + aurora_weapon_systema.FireModes(1).AmmoTypeIndices += 0 + aurora_weapon_systema.FireModes(1).AmmoSlotIndex = 0 + aurora_weapon_systema.FireModes(1).Magazine = 12 + + aurora_weapon_systemb.Name = "aurora_weapon_systemb" + aurora_weapon_systemb.Size = EquipmentSize.VehicleWeapon + aurora_weapon_systemb.AmmoTypes += fluxpod_ammo + aurora_weapon_systemb.ProjectileTypes += fluxpod_projectile + aurora_weapon_systemb.FireModes += new FireModeDefinition + aurora_weapon_systemb.FireModes.head.AmmoTypeIndices += 0 + aurora_weapon_systemb.FireModes.head.AmmoSlotIndex = 0 + aurora_weapon_systemb.FireModes.head.Magazine = 12 + aurora_weapon_systemb.FireModes += new FireModeDefinition + aurora_weapon_systemb.FireModes(1).AmmoTypeIndices += 0 + aurora_weapon_systemb.FireModes(1).AmmoSlotIndex = 0 + aurora_weapon_systemb.FireModes(1).Magazine = 12 + + apc_weapon_systema.Name = "apc_weapon_systema" + apc_weapon_systema.Size = EquipmentSize.VehicleWeapon + apc_weapon_systema.AmmoTypes += bullet_75mm + apc_weapon_systema.ProjectileTypes += bullet_75mm_apc_projectile + apc_weapon_systema.FireModes += new FireModeDefinition + apc_weapon_systema.FireModes.head.AmmoTypeIndices += 0 + apc_weapon_systema.FireModes.head.AmmoSlotIndex = 0 + apc_weapon_systema.FireModes.head.Magazine = 50 + + apc_weapon_systemb.Name = "apc_weapon_systemb" + apc_weapon_systemb.Size = EquipmentSize.VehicleWeapon + apc_weapon_systemb.AmmoTypes += bullet_75mm + apc_weapon_systemb.ProjectileTypes += bullet_75mm_apc_projectile + apc_weapon_systemb.FireModes += new FireModeDefinition + apc_weapon_systemb.FireModes.head.AmmoTypeIndices += 0 + apc_weapon_systemb.FireModes.head.AmmoSlotIndex = 0 + apc_weapon_systemb.FireModes.head.Magazine = 50 + + apc_ballgun_r.Name = "apc_ballgun_r" + apc_ballgun_r.Size = EquipmentSize.VehicleWeapon + apc_ballgun_r.AmmoTypes += bullet_12mm + apc_ballgun_r.ProjectileTypes += bullet_12mm_projectile + apc_ballgun_r.FireModes += new FireModeDefinition + apc_ballgun_r.FireModes.head.AmmoTypeIndices += 0 + apc_ballgun_r.FireModes.head.AmmoSlotIndex = 0 + apc_ballgun_r.FireModes.head.Magazine = 150 + + apc_ballgun_l.Name = "apc_ballgun_l" + apc_ballgun_l.Size = EquipmentSize.VehicleWeapon + apc_ballgun_l.AmmoTypes += bullet_12mm + apc_ballgun_l.ProjectileTypes += bullet_12mm_projectile + apc_ballgun_l.FireModes += new FireModeDefinition + apc_ballgun_l.FireModes.head.AmmoTypeIndices += 0 + apc_ballgun_l.FireModes.head.AmmoSlotIndex = 0 + apc_ballgun_l.FireModes.head.Magazine = 150 + + apc_weapon_systemc_tr.Name = "apc_weapon_systemc_tr" + apc_weapon_systemc_tr.Size = EquipmentSize.VehicleWeapon + apc_weapon_systemc_tr.AmmoTypes += bullet_15mm + apc_weapon_systemc_tr.ProjectileTypes += bullet_15mm_apc_projectile + apc_weapon_systemc_tr.FireModes += new FireModeDefinition + apc_weapon_systemc_tr.FireModes.head.AmmoTypeIndices += 0 + apc_weapon_systemc_tr.FireModes.head.AmmoSlotIndex = 0 + apc_weapon_systemc_tr.FireModes.head.Magazine = 150 + + apc_weapon_systemd_tr.Name = "apc_weapon_systemd_tr" + apc_weapon_systemd_tr.Size = EquipmentSize.VehicleWeapon + apc_weapon_systemd_tr.AmmoTypes += bullet_15mm + apc_weapon_systemd_tr.ProjectileTypes += bullet_15mm_apc_projectile + apc_weapon_systemd_tr.FireModes += new FireModeDefinition + apc_weapon_systemd_tr.FireModes.head.AmmoTypeIndices += 0 + apc_weapon_systemd_tr.FireModes.head.AmmoSlotIndex = 0 + apc_weapon_systemd_tr.FireModes.head.Magazine = 150 + + apc_weapon_systemc_nc.Name = "apc_weapon_systemc_nc" + apc_weapon_systemc_nc.Size = EquipmentSize.VehicleWeapon + apc_weapon_systemc_nc.AmmoTypes += bullet_20mm + apc_weapon_systemc_nc.ProjectileTypes += bullet_20mm_apc_projectile + apc_weapon_systemc_nc.FireModes += new FireModeDefinition + apc_weapon_systemc_nc.FireModes.head.AmmoTypeIndices += 0 + apc_weapon_systemc_nc.FireModes.head.AmmoSlotIndex = 0 + apc_weapon_systemc_nc.FireModes.head.Magazine = 150 + + apc_weapon_systemd_nc.Name = "apc_weapon_systemd_nc" + apc_weapon_systemd_nc.Size = EquipmentSize.VehicleWeapon + apc_weapon_systemd_nc.AmmoTypes += bullet_20mm + apc_weapon_systemd_nc.ProjectileTypes += bullet_20mm_apc_projectile + apc_weapon_systemd_nc.FireModes += new FireModeDefinition + apc_weapon_systemd_nc.FireModes.head.AmmoTypeIndices += 0 + apc_weapon_systemd_nc.FireModes.head.AmmoSlotIndex = 0 + apc_weapon_systemd_nc.FireModes.head.Magazine = 150 + + apc_weapon_systemc_vs.Name = "apc_weapon_systemc_vs" + apc_weapon_systemc_vs.Size = EquipmentSize.VehicleWeapon + apc_weapon_systemc_vs.AmmoTypes += flux_cannon_thresher_battery + apc_weapon_systemc_vs.ProjectileTypes += flux_cannon_apc_projectile + apc_weapon_systemc_vs.FireModes += new FireModeDefinition + apc_weapon_systemc_vs.FireModes.head.AmmoTypeIndices += 0 + apc_weapon_systemc_vs.FireModes.head.AmmoSlotIndex = 0 + apc_weapon_systemc_vs.FireModes.head.Magazine = 100 + + apc_weapon_systemd_vs.Name = "apc_weapon_systemd_vs" + apc_weapon_systemd_vs.Size = EquipmentSize.VehicleWeapon + apc_weapon_systemd_vs.AmmoTypes += flux_cannon_thresher_battery + apc_weapon_systemd_vs.ProjectileTypes += flux_cannon_apc_projectile + apc_weapon_systemd_vs.FireModes += new FireModeDefinition + apc_weapon_systemd_vs.FireModes.head.AmmoTypeIndices += 0 + apc_weapon_systemd_vs.FireModes.head.AmmoSlotIndex = 0 + apc_weapon_systemd_vs.FireModes.head.Magazine = 100 + + lightning_weapon_system.Name = "lightning_weapon_system" + lightning_weapon_system.Size = EquipmentSize.VehicleWeapon + lightning_weapon_system.AmmoTypes += bullet_75mm + lightning_weapon_system.AmmoTypes += bullet_12mm + lightning_weapon_system.ProjectileTypes += bullet_75mm_projectile + lightning_weapon_system.ProjectileTypes += bullet_12mm_projectile + lightning_weapon_system.FireModes += new FireModeDefinition + lightning_weapon_system.FireModes.head.AmmoTypeIndices += 0 + lightning_weapon_system.FireModes.head.AmmoSlotIndex = 0 + lightning_weapon_system.FireModes.head.Magazine = 20 + lightning_weapon_system.FireModes += new FireModeDefinition + lightning_weapon_system.FireModes(1).AmmoTypeIndices += 1 + lightning_weapon_system.FireModes(1).AmmoSlotIndex = 1 + lightning_weapon_system.FireModes(1).Magazine = 150 + + prowler_weapon_systemA.Name = "prowler_weapon_systemA" + prowler_weapon_systemA.Size = EquipmentSize.VehicleWeapon + prowler_weapon_systemA.AmmoTypes += bullet_105mm + prowler_weapon_systemA.ProjectileTypes += bullet_105mm_projectile + prowler_weapon_systemA.FireModes += new FireModeDefinition + prowler_weapon_systemA.FireModes.head.AmmoTypeIndices += 0 + prowler_weapon_systemA.FireModes.head.AmmoSlotIndex = 0 + prowler_weapon_systemA.FireModes.head.Magazine = 20 + + prowler_weapon_systemB.Name = "prowler_weapon_systemB" + prowler_weapon_systemB.Size = EquipmentSize.VehicleWeapon + prowler_weapon_systemB.AmmoTypes += bullet_15mm + prowler_weapon_systemB.ProjectileTypes += bullet_15mm_projectile + prowler_weapon_systemB.FireModes += new FireModeDefinition + prowler_weapon_systemB.FireModes.head.AmmoTypeIndices += 0 + prowler_weapon_systemB.FireModes.head.AmmoSlotIndex = 0 + prowler_weapon_systemB.FireModes.head.Magazine = 240 + + vanguard_weapon_system.Name = "vanguard_weapon_system" + vanguard_weapon_system.Size = EquipmentSize.VehicleWeapon + vanguard_weapon_system.AmmoTypes += bullet_150mm + vanguard_weapon_system.AmmoTypes += bullet_20mm + vanguard_weapon_system.ProjectileTypes += bullet_150mm_projectile + vanguard_weapon_system.ProjectileTypes += bullet_20mm_projectile + vanguard_weapon_system.FireModes += new FireModeDefinition + vanguard_weapon_system.FireModes.head.AmmoTypeIndices += 0 + vanguard_weapon_system.FireModes.head.AmmoSlotIndex = 0 + vanguard_weapon_system.FireModes.head.Magazine = 10 + vanguard_weapon_system.FireModes += new FireModeDefinition + vanguard_weapon_system.FireModes(1).AmmoTypeIndices += 1 + vanguard_weapon_system.FireModes(1).AmmoSlotIndex = 1 + vanguard_weapon_system.FireModes(1).Magazine = 200 + + particle_beam_magrider.Name = "particle_beam_magrider" + particle_beam_magrider.Size = EquipmentSize.VehicleWeapon + particle_beam_magrider.AmmoTypes += pulse_battery + particle_beam_magrider.ProjectileTypes += ppa_projectile + particle_beam_magrider.FireModes += new FireModeDefinition + particle_beam_magrider.FireModes.head.AmmoTypeIndices += 0 + particle_beam_magrider.FireModes.head.AmmoSlotIndex = 0 + particle_beam_magrider.FireModes.head.Magazine = 150 + + heavy_rail_beam_magrider.Name = "heavy_rail_beam_magrider" + heavy_rail_beam_magrider.Size = EquipmentSize.VehicleWeapon + heavy_rail_beam_magrider.AmmoTypes += heavy_rail_beam_battery + heavy_rail_beam_magrider.ProjectileTypes += heavy_rail_beam_projectile + heavy_rail_beam_magrider.FireModes += new FireModeDefinition + heavy_rail_beam_magrider.FireModes.head.AmmoTypeIndices += 0 + heavy_rail_beam_magrider.FireModes.head.AmmoSlotIndex = 0 + heavy_rail_beam_magrider.FireModes.head.Magazine = 25 + + flail_weapon.Name = "flail_weapon" + flail_weapon.Size = EquipmentSize.VehicleWeapon + flail_weapon.AmmoTypes += ancient_ammo_vehicle + flail_weapon.ProjectileTypes += flail_projectile + flail_weapon.FireModes += new FireModeDefinition + flail_weapon.FireModes.head.AmmoTypeIndices += 0 + flail_weapon.FireModes.head.AmmoSlotIndex = 0 + flail_weapon.FireModes.head.Magazine = 100 + + rotarychaingun_mosquito.Name = "rotarychaingun_mosquito" + rotarychaingun_mosquito.Size = EquipmentSize.VehicleWeapon + rotarychaingun_mosquito.AmmoTypes += bullet_12mm + rotarychaingun_mosquito.ProjectileTypes += bullet_12mm_projectile + rotarychaingun_mosquito.FireModes += new FireModeDefinition + rotarychaingun_mosquito.FireModes.head.AmmoTypeIndices += 0 + rotarychaingun_mosquito.FireModes.head.AmmoSlotIndex = 0 + rotarychaingun_mosquito.FireModes.head.Magazine = 150 + + lightgunship_weapon_system.Name = "lightgunship_weapon_system" + lightgunship_weapon_system.Size = EquipmentSize.VehicleWeapon + lightgunship_weapon_system.AmmoTypes += bullet_20mm + lightgunship_weapon_system.AmmoTypes += reaver_rocket + lightgunship_weapon_system.ProjectileTypes += bullet_20mm_projectile + lightgunship_weapon_system.ProjectileTypes += reaver_rocket_projectile + lightgunship_weapon_system.FireModes += new FireModeDefinition + lightgunship_weapon_system.FireModes.head.AmmoTypeIndices += 0 + lightgunship_weapon_system.FireModes.head.AmmoSlotIndex = 0 + lightgunship_weapon_system.FireModes.head.Magazine = 245 + lightgunship_weapon_system.FireModes += new FireModeDefinition + lightgunship_weapon_system.FireModes(1).AmmoTypeIndices += 1 + lightgunship_weapon_system.FireModes(1).AmmoSlotIndex = 1 + lightgunship_weapon_system.FireModes(1).Magazine = 16 + + wasp_weapon_system.Name = "wasp_weapon_system" + wasp_weapon_system.Size = EquipmentSize.VehicleWeapon + wasp_weapon_system.AmmoTypes += wasp_gun_ammo + wasp_weapon_system.AmmoTypes += wasp_rocket_ammo + wasp_weapon_system.ProjectileTypes += wasp_gun_projectile + wasp_weapon_system.ProjectileTypes += wasp_rocket_projectile + wasp_weapon_system.FireModes += new FireModeDefinition + wasp_weapon_system.FireModes.head.AmmoTypeIndices += 0 + wasp_weapon_system.FireModes.head.AmmoSlotIndex = 0 + wasp_weapon_system.FireModes.head.Magazine = 30 + wasp_weapon_system.FireModes += new FireModeDefinition + wasp_weapon_system.FireModes(1).AmmoTypeIndices += 1 + wasp_weapon_system.FireModes(1).AmmoSlotIndex = 1 + wasp_weapon_system.FireModes(1).Magazine = 2 + + liberator_weapon_system.Name = "liberator_weapon_system" + liberator_weapon_system.Size = EquipmentSize.VehicleWeapon + liberator_weapon_system.AmmoTypes += bullet_35mm + liberator_weapon_system.ProjectileTypes += bullet_35mm_projectile + liberator_weapon_system.FireModes += new FireModeDefinition + liberator_weapon_system.FireModes.head.AmmoTypeIndices += 0 + liberator_weapon_system.FireModes.head.AmmoSlotIndex = 0 + liberator_weapon_system.FireModes.head.Magazine = 100 + + liberator_bomb_bay.Name = "liberator_bomb_bay" + liberator_bomb_bay.Size = EquipmentSize.VehicleWeapon + liberator_bomb_bay.AmmoTypes += liberator_bomb + liberator_bomb_bay.ProjectileTypes += liberator_bomb_projectile + liberator_bomb_bay.ProjectileTypes += liberator_bomb_cluster_projectile + liberator_bomb_bay.FireModes += new FireModeDefinition + liberator_bomb_bay.FireModes.head.AmmoTypeIndices += 0 + liberator_bomb_bay.FireModes.head.AmmoSlotIndex = 0 + liberator_bomb_bay.FireModes.head.Magazine = 10 + liberator_bomb_bay.FireModes += new FireModeDefinition + liberator_bomb_bay.FireModes(1).AmmoTypeIndices += 0 + liberator_bomb_bay.FireModes(1).ProjectileTypeIndices += 1 + liberator_bomb_bay.FireModes(1).AmmoSlotIndex = 0 + liberator_bomb_bay.FireModes(1).Magazine = 10 + + liberator_25mm_cannon.Name = "liberator_25mm_cannon" + liberator_25mm_cannon.Size = EquipmentSize.VehicleWeapon + liberator_25mm_cannon.AmmoTypes += bullet_25mm + liberator_25mm_cannon.ProjectileTypes += bullet_25mm_projectile + liberator_25mm_cannon.FireModes += new FireModeDefinition + liberator_25mm_cannon.FireModes.head.AmmoTypeIndices += 0 + liberator_25mm_cannon.FireModes.head.AmmoSlotIndex = 0 + liberator_25mm_cannon.FireModes.head.Magazine = 150 + + vulture_nose_weapon_system.Name = "vulture_nose_weapon_system" + vulture_nose_weapon_system.Size = EquipmentSize.VehicleWeapon + vulture_nose_weapon_system.AmmoTypes += bullet_35mm + vulture_nose_weapon_system.ProjectileTypes += vulture_nose_bullet_projectile + vulture_nose_weapon_system.FireModes += new FireModeDefinition + vulture_nose_weapon_system.FireModes.head.AmmoTypeIndices += 0 + vulture_nose_weapon_system.FireModes.head.AmmoSlotIndex = 0 + vulture_nose_weapon_system.FireModes.head.Magazine = 75 + + vulture_bomb_bay.Name = "vulture_bomb_bay" + vulture_bomb_bay.Size = EquipmentSize.VehicleWeapon + vulture_bomb_bay.AmmoTypes += liberator_bomb + vulture_bomb_bay.ProjectileTypes += vulture_bomb_projectile + vulture_bomb_bay.FireModes += new FireModeDefinition + vulture_bomb_bay.FireModes.head.AmmoTypeIndices += 0 + vulture_bomb_bay.FireModes.head.AmmoSlotIndex = 0 + vulture_bomb_bay.FireModes.head.Magazine = 10 + + vulture_tail_cannon.Name = "vulture_tail_cannon" + vulture_tail_cannon.Size = EquipmentSize.VehicleWeapon + vulture_tail_cannon.AmmoTypes += bullet_25mm + vulture_tail_cannon.ProjectileTypes += vulture_tail_bullet_projectile + vulture_tail_cannon.FireModes += new FireModeDefinition + vulture_tail_cannon.FireModes.head.AmmoTypeIndices += 0 + vulture_tail_cannon.FireModes.head.AmmoSlotIndex = 0 + vulture_tail_cannon.FireModes.head.Magazine = 100 + + cannon_dropship_20mm.Name = "cannon_dropship_20mm" + cannon_dropship_20mm.Size = EquipmentSize.VehicleWeapon + cannon_dropship_20mm.AmmoTypes += bullet_20mm + cannon_dropship_20mm.ProjectileTypes += bullet_20mm_projectile + cannon_dropship_20mm.FireModes += new FireModeDefinition + cannon_dropship_20mm.FireModes.head.AmmoTypeIndices += 0 + cannon_dropship_20mm.FireModes.head.AmmoSlotIndex = 0 + cannon_dropship_20mm.FireModes.head.Magazine = 250 + + dropship_rear_turret.Name = "dropship_rear_turret" + dropship_rear_turret.Size = EquipmentSize.VehicleWeapon + dropship_rear_turret.AmmoTypes += bullet_20mm + dropship_rear_turret.ProjectileTypes += bullet_20mm_projectile + dropship_rear_turret.FireModes += new FireModeDefinition + dropship_rear_turret.FireModes.head.AmmoTypeIndices += 0 + dropship_rear_turret.FireModes.head.AmmoSlotIndex = 0 + dropship_rear_turret.FireModes.head.Magazine = 250 + + galaxy_gunship_cannon.Name = "galaxy_gunship_cannon" + galaxy_gunship_cannon.Size = EquipmentSize.VehicleWeapon + galaxy_gunship_cannon.AmmoTypes += heavy_grenade_mortar + galaxy_gunship_cannon.ProjectileTypes += heavy_grenade_projectile + galaxy_gunship_cannon.FireModes += new FireModeDefinition + galaxy_gunship_cannon.FireModes.head.AmmoTypeIndices += 0 + galaxy_gunship_cannon.FireModes.head.AmmoSlotIndex = 0 + galaxy_gunship_cannon.FireModes.head.Magazine = 50 + galaxy_gunship_cannon.FireModes.head.Add.Damage1 = 50 + galaxy_gunship_cannon.FireModes.head.Add.Damage2 = 50 + galaxy_gunship_cannon.FireModes.head.Add.Damage3 = 10 + galaxy_gunship_cannon.FireModes.head.Add.Damage4 = 50 + + galaxy_gunship_tailgun.Name = "galaxy_gunship_tailgun" + galaxy_gunship_tailgun.Size = EquipmentSize.VehicleWeapon + galaxy_gunship_tailgun.AmmoTypes += bullet_35mm + galaxy_gunship_tailgun.ProjectileTypes += galaxy_gunship_gun_projectile + galaxy_gunship_tailgun.FireModes += new FireModeDefinition + galaxy_gunship_tailgun.FireModes.head.AmmoTypeIndices += 0 + galaxy_gunship_tailgun.FireModes.head.AmmoSlotIndex = 0 + galaxy_gunship_tailgun.FireModes.head.Magazine = 200 + + galaxy_gunship_gun.Name = "galaxy_gunship_gun" + galaxy_gunship_gun.Size = EquipmentSize.VehicleWeapon + galaxy_gunship_gun.AmmoTypes += bullet_35mm + galaxy_gunship_gun.ProjectileTypes += galaxy_gunship_gun_projectile + galaxy_gunship_gun.FireModes += new FireModeDefinition + galaxy_gunship_gun.FireModes.head.AmmoTypeIndices += 0 + galaxy_gunship_gun.FireModes.head.AmmoSlotIndex = 0 + galaxy_gunship_gun.FireModes.head.Magazine = 200 + + phalanx_sgl_hevgatcan.Name = "phalanx_sgl_hevgatcan" + phalanx_sgl_hevgatcan.Size = EquipmentSize.BaseTurretWeapon + phalanx_sgl_hevgatcan.AmmoTypes += phalanx_ammo + phalanx_sgl_hevgatcan.ProjectileTypes += phalanx_projectile + phalanx_sgl_hevgatcan.FireModes += new InfiniteFireModeDefinition + phalanx_sgl_hevgatcan.FireModes.head.AmmoTypeIndices += 0 + phalanx_sgl_hevgatcan.FireModes.head.AmmoSlotIndex = 0 + phalanx_sgl_hevgatcan.FireModes.head.Magazine = 4000 + + phalanx_avcombo.Name = "phalanx_avcombo" + phalanx_avcombo.Size = EquipmentSize.BaseTurretWeapon + phalanx_avcombo.AmmoTypes += phalanx_ammo + phalanx_avcombo.ProjectileTypes += phalanx_projectile + phalanx_avcombo.ProjectileTypes += phalanx_av_projectile + phalanx_avcombo.FireModes += new InfiniteFireModeDefinition + phalanx_avcombo.FireModes.head.AmmoTypeIndices += 0 + phalanx_avcombo.FireModes.head.AmmoSlotIndex = 0 + phalanx_avcombo.FireModes.head.Magazine = 4000 + phalanx_avcombo.FireModes += new InfiniteFireModeDefinition + phalanx_avcombo.FireModes(1).AmmoTypeIndices += 0 + phalanx_avcombo.FireModes(1).ProjectileTypeIndices += 1 + phalanx_avcombo.FireModes(1).AmmoSlotIndex = 0 + phalanx_avcombo.FireModes(1).Magazine = 4000 + + phalanx_flakcombo.Name = "phalanx_flakcombo" + phalanx_flakcombo.Size = EquipmentSize.BaseTurretWeapon + phalanx_flakcombo.AmmoTypes += phalanx_ammo + phalanx_flakcombo.ProjectileTypes += phalanx_projectile + phalanx_flakcombo.ProjectileTypes += phalanx_flak_projectile + phalanx_flakcombo.FireModes += new InfiniteFireModeDefinition + phalanx_flakcombo.FireModes.head.AmmoTypeIndices += 0 + phalanx_flakcombo.FireModes.head.AmmoSlotIndex = 0 + phalanx_flakcombo.FireModes.head.Magazine = 4000 + phalanx_flakcombo.FireModes += new InfiniteFireModeDefinition + phalanx_flakcombo.FireModes(1).AmmoTypeIndices += 0 + phalanx_flakcombo.FireModes(1).ProjectileTypeIndices += 1 + phalanx_flakcombo.FireModes(1).AmmoSlotIndex = 0 + phalanx_flakcombo.FireModes(1).Magazine = 4000 + + vanu_sentry_turret_weapon.Name = "vanu_sentry_turret_weapon" + vanu_sentry_turret_weapon.Size = EquipmentSize.BaseTurretWeapon + vanu_sentry_turret_weapon.AmmoTypes += ancient_ammo_vehicle + vanu_sentry_turret_weapon.ProjectileTypes += vanu_sentry_turret_projectile + vanu_sentry_turret_weapon.FireModes += new FireModeDefinition + vanu_sentry_turret_weapon.FireModes.head.AmmoTypeIndices += 0 + vanu_sentry_turret_weapon.FireModes.head.AmmoSlotIndex = 0 + vanu_sentry_turret_weapon.FireModes.head.Magazine = 100 + + spitfire_weapon.Name = "spitfire_weapon" + spitfire_weapon.Size = EquipmentSize.BaseTurretWeapon + spitfire_weapon.AmmoTypes += spitfire_ammo + spitfire_weapon.ProjectileTypes += spitfire_ammo_projectile + spitfire_weapon.FireModes += new InfiniteFireModeDefinition + spitfire_weapon.FireModes.head.AmmoTypeIndices += 0 + spitfire_weapon.FireModes.head.AmmoSlotIndex = 0 + spitfire_weapon.FireModes.head.Magazine = 4000 + + spitfire_aa_weapon.Name = "spitfire_aa_weapon" + spitfire_aa_weapon.Size = EquipmentSize.BaseTurretWeapon + spitfire_aa_weapon.AmmoTypes += spitfire_aa_ammo + spitfire_aa_weapon.ProjectileTypes += spitfire_aa_ammo_projectile + spitfire_aa_weapon.FireModes += new InfiniteFireModeDefinition + spitfire_aa_weapon.FireModes.head.AmmoTypeIndices += 0 + spitfire_aa_weapon.FireModes.head.AmmoSlotIndex = 0 + spitfire_aa_weapon.FireModes.head.Magazine = 4000 + + energy_gun.Name = "energy_gun" + energy_gun.Size = EquipmentSize.BaseTurretWeapon + energy_gun.AmmoTypes += energy_gun_ammo + energy_gun.ProjectileTypes += bullet_9mm_projectile //fallback + energy_gun.FireModes += new FireModeDefinition + energy_gun.FireModes.head.AmmoTypeIndices += 0 + energy_gun.FireModes.head.AmmoSlotIndex = 0 + energy_gun.FireModes.head.Magazine = 4000 + + energy_gun_nc.Name = "energy_gun_nc" + energy_gun_nc.Size = EquipmentSize.BaseTurretWeapon + energy_gun_nc.AmmoTypes += energy_gun_ammo + energy_gun_nc.ProjectileTypes += energy_gun_nc_projectile + energy_gun_nc.FireModes += new PelletFireModeDefinition + energy_gun_nc.FireModes.head.AmmoTypeIndices += 0 + energy_gun_nc.FireModes.head.AmmoSlotIndex = 0 + energy_gun_nc.FireModes.head.Magazine = 35 + energy_gun_nc.FireModes.head.Chamber = 8 //35 shots * 8 pellets = 280 + + energy_gun_tr.Name = "energy_gun_tr" + energy_gun_tr.Size = EquipmentSize.BaseTurretWeapon + energy_gun_tr.AmmoTypes += energy_gun_ammo + energy_gun_tr.ProjectileTypes += energy_gun_tr_projectile + energy_gun_tr.FireModes += new FireModeDefinition + energy_gun_tr.FireModes.head.AmmoTypeIndices += 0 + energy_gun_tr.FireModes.head.AmmoSlotIndex = 0 + energy_gun_tr.FireModes.head.Magazine = 200 + + energy_gun_vs.Name = "energy_gun_vs" + energy_gun_vs.Size = EquipmentSize.BaseTurretWeapon + energy_gun_vs.AmmoTypes += energy_gun_ammo + energy_gun_vs.ProjectileTypes += energy_gun_tr_projectile + energy_gun_vs.FireModes += new FireModeDefinition + energy_gun_vs.FireModes.head.AmmoTypeIndices += 0 + energy_gun_vs.FireModes.head.AmmoSlotIndex = 0 + energy_gun_vs.FireModes.head.Magazine = 100 + + val battleFrameToolConverter = new BattleFrameToolConverter + aphelion_armor_siphon.Name = "aphelion_armor_siphon" + aphelion_armor_siphon.Size = EquipmentSize.BFRArmWeapon + aphelion_armor_siphon.AmmoTypes += armor_siphon_ammo + aphelion_armor_siphon.ProjectileTypes += armor_siphon_projectile + aphelion_armor_siphon.FireModes += new FireModeDefinition + aphelion_armor_siphon.FireModes.head.AmmoTypeIndices += 0 + aphelion_armor_siphon.FireModes.head.AmmoSlotIndex = 0 + aphelion_armor_siphon.FireModes.head.Magazine = 100 + aphelion_armor_siphon.Packet = battleFrameToolConverter + aphelion_armor_siphon.Tile = InventoryTile.Tile84 + + aphelion_armor_siphon_left.Name = "aphelion_armor_siphon_left" + aphelion_armor_siphon_left.Size = EquipmentSize.BFRArmWeapon + aphelion_armor_siphon_left.AmmoTypes += armor_siphon_ammo + aphelion_armor_siphon_left.ProjectileTypes += armor_siphon_projectile + aphelion_armor_siphon_left.FireModes += new FireModeDefinition + aphelion_armor_siphon_left.FireModes.head.AmmoTypeIndices += 0 + aphelion_armor_siphon_left.FireModes.head.AmmoSlotIndex = 0 + aphelion_armor_siphon_left.FireModes.head.Magazine = 100 + aphelion_armor_siphon_left.Packet = battleFrameToolConverter + aphelion_armor_siphon_left.Tile = InventoryTile.Tile84 + + aphelion_armor_siphon_right.Name = "aphelion_armor_siphon_right" + aphelion_armor_siphon_right.Size = EquipmentSize.BFRArmWeapon + aphelion_armor_siphon_right.AmmoTypes += armor_siphon_ammo + aphelion_armor_siphon_right.ProjectileTypes += armor_siphon_projectile + aphelion_armor_siphon_right.FireModes += new FireModeDefinition + aphelion_armor_siphon_right.FireModes.head.AmmoTypeIndices += 0 + aphelion_armor_siphon_right.FireModes.head.AmmoSlotIndex = 0 + aphelion_armor_siphon_right.FireModes.head.Magazine = 100 + aphelion_armor_siphon_right.Packet = battleFrameToolConverter + aphelion_armor_siphon_right.Tile = InventoryTile.Tile84 + + aphelion_laser.Name = "aphelion_laser" + aphelion_laser.Size = EquipmentSize.BFRArmWeapon + aphelion_laser.AmmoTypes += aphelion_laser_ammo + aphelion_laser.ProjectileTypes += aphelion_laser_projectile + aphelion_laser.FireModes += new FireModeDefinition + aphelion_laser.FireModes.head.AmmoTypeIndices += 0 + aphelion_laser.FireModes.head.AmmoSlotIndex = 0 + aphelion_laser.FireModes.head.Magazine = 350 + aphelion_laser.Packet = battleFrameToolConverter + aphelion_laser.Tile = InventoryTile.Tile84 + + aphelion_laser_left.Name = "aphelion_laser_left" + aphelion_laser_left.Size = EquipmentSize.BFRArmWeapon + aphelion_laser_left.AmmoTypes += aphelion_laser_ammo + aphelion_laser_left.ProjectileTypes += aphelion_laser_projectile + aphelion_laser_left.FireModes += new FireModeDefinition + aphelion_laser_left.FireModes.head.AmmoTypeIndices += 0 + aphelion_laser_left.FireModes.head.AmmoSlotIndex = 0 + aphelion_laser_left.FireModes.head.Magazine = 350 + aphelion_laser_left.Packet = battleFrameToolConverter + aphelion_laser_left.Tile = InventoryTile.Tile84 + + aphelion_laser_right.Name = "aphelion_laser_right" + aphelion_laser_right.Size = EquipmentSize.BFRArmWeapon + aphelion_laser_right.AmmoTypes += aphelion_laser_ammo + aphelion_laser_right.ProjectileTypes += aphelion_laser_projectile + aphelion_laser_right.FireModes += new FireModeDefinition + aphelion_laser_right.FireModes.head.AmmoTypeIndices += 0 + aphelion_laser_right.FireModes.head.AmmoSlotIndex = 0 + aphelion_laser_right.FireModes.head.Magazine = 350 + aphelion_laser_right.Packet = battleFrameToolConverter + aphelion_laser_right.Tile = InventoryTile.Tile84 + + aphelion_ntu_siphon.Name = "aphelion_ntu_siphon" + aphelion_ntu_siphon.Size = EquipmentSize.BFRArmWeapon + aphelion_ntu_siphon.AmmoTypes += ntu_siphon_ammo + aphelion_ntu_siphon.ProjectileTypes += no_projectile + aphelion_ntu_siphon.ProjectileTypes += ntu_siphon_emp + aphelion_ntu_siphon.FireModes += new FireModeDefinition + aphelion_ntu_siphon.FireModes.head.AmmoTypeIndices += 0 + aphelion_ntu_siphon.FireModes.head.AmmoSlotIndex = 0 + aphelion_ntu_siphon.FireModes.head.RoundsPerShot = 5 + aphelion_ntu_siphon.FireModes.head.Magazine = 150 + aphelion_ntu_siphon.FireModes.head.DefaultMagazine = 0 + aphelion_ntu_siphon.FireModes += new FireModeDefinition + aphelion_ntu_siphon.FireModes(1).AmmoTypeIndices += 0 + aphelion_ntu_siphon.FireModes(1).AmmoSlotIndex = 0 + aphelion_ntu_siphon.FireModes(1).ProjectileTypeIndices += 1 + aphelion_ntu_siphon.FireModes(1).RoundsPerShot = 30 + aphelion_ntu_siphon.FireModes(1).Magazine = 150 + aphelion_ntu_siphon.FireModes(1).DefaultMagazine = 0 + aphelion_ntu_siphon.Packet = battleFrameToolConverter + aphelion_ntu_siphon.Tile = InventoryTile.Tile84 + + aphelion_ntu_siphon_left.Name = "aphelion_ntu_siphon_left" + aphelion_ntu_siphon_left.Size = EquipmentSize.BFRArmWeapon + aphelion_ntu_siphon_left.AmmoTypes += ntu_siphon_ammo + aphelion_ntu_siphon_left.ProjectileTypes += no_projectile + aphelion_ntu_siphon_left.ProjectileTypes += ntu_siphon_emp + aphelion_ntu_siphon_left.FireModes += new FireModeDefinition + aphelion_ntu_siphon_left.FireModes.head.AmmoTypeIndices += 0 + aphelion_ntu_siphon_left.FireModes.head.AmmoSlotIndex = 0 + aphelion_ntu_siphon_left.FireModes.head.RoundsPerShot = 5 + aphelion_ntu_siphon_left.FireModes.head.Magazine = 150 + aphelion_ntu_siphon_left.FireModes.head.DefaultMagazine = 0 + aphelion_ntu_siphon_left.FireModes += new FireModeDefinition + aphelion_ntu_siphon_left.FireModes(1).AmmoTypeIndices += 0 + aphelion_ntu_siphon_left.FireModes(1).AmmoSlotIndex = 0 + aphelion_ntu_siphon_left.FireModes(1).ProjectileTypeIndices += 1 + aphelion_ntu_siphon_left.FireModes(1).RoundsPerShot = 30 + aphelion_ntu_siphon_left.FireModes(1).Magazine = 150 + aphelion_ntu_siphon_left.FireModes(1).DefaultMagazine = 0 + aphelion_ntu_siphon_left.Packet = battleFrameToolConverter + aphelion_ntu_siphon_left.Tile = InventoryTile.Tile84 + + aphelion_ntu_siphon_right.Name = "aphelion_ntu_siphon_right" + aphelion_ntu_siphon_right.Size = EquipmentSize.BFRArmWeapon + aphelion_ntu_siphon_right.AmmoTypes += ntu_siphon_ammo + aphelion_ntu_siphon_right.ProjectileTypes += no_projectile + aphelion_ntu_siphon_right.ProjectileTypes += ntu_siphon_emp + aphelion_ntu_siphon_right.FireModes += new FireModeDefinition + aphelion_ntu_siphon_right.FireModes.head.AmmoTypeIndices += 0 + aphelion_ntu_siphon_right.FireModes.head.AmmoSlotIndex = 0 + aphelion_ntu_siphon_right.FireModes.head.RoundsPerShot = 5 + aphelion_ntu_siphon_right.FireModes.head.Magazine = 150 + aphelion_ntu_siphon_right.FireModes.head.DefaultMagazine = 0 + aphelion_ntu_siphon_right.FireModes += new FireModeDefinition + aphelion_ntu_siphon_right.FireModes(1).AmmoTypeIndices += 0 + aphelion_ntu_siphon_right.FireModes(1).AmmoSlotIndex = 0 + aphelion_ntu_siphon_right.FireModes(1).ProjectileTypeIndices += 1 + aphelion_ntu_siphon_right.FireModes(1).RoundsPerShot = 30 + aphelion_ntu_siphon_right.FireModes(1).Magazine = 150 + aphelion_ntu_siphon_right.FireModes(1).DefaultMagazine = 0 + aphelion_ntu_siphon_right.Packet = battleFrameToolConverter + aphelion_ntu_siphon_right.Tile = InventoryTile.Tile84 + + aphelion_ppa.Name = "aphelion_ppa" + aphelion_ppa.Size = EquipmentSize.BFRArmWeapon + aphelion_ppa.AmmoTypes += aphelion_ppa_ammo + aphelion_ppa.ProjectileTypes += aphelion_ppa_projectile + aphelion_ppa.FireModes += new FireModeDefinition + aphelion_ppa.FireModes.head.AmmoTypeIndices += 0 + aphelion_ppa.FireModes.head.AmmoSlotIndex = 0 + aphelion_ppa.FireModes.head.Magazine = 25 + aphelion_ppa.Packet = battleFrameToolConverter + aphelion_ppa.Tile = InventoryTile.Tile84 + + aphelion_ppa_left.Name = "aphelion_ppa_left" + aphelion_ppa_left.Size = EquipmentSize.BFRArmWeapon + aphelion_ppa_left.AmmoTypes += aphelion_ppa_ammo + aphelion_ppa_left.ProjectileTypes += aphelion_ppa_projectile + aphelion_ppa_left.FireModes += new FireModeDefinition + aphelion_ppa_left.FireModes.head.AmmoTypeIndices += 0 + aphelion_ppa_left.FireModes.head.AmmoSlotIndex = 0 + aphelion_ppa_left.FireModes.head.Magazine = 25 + aphelion_ppa_left.Packet = battleFrameToolConverter + aphelion_ppa_left.Tile = InventoryTile.Tile84 + + aphelion_ppa_right.Name = "aphelion_ppa_right" + aphelion_ppa_right.Size = EquipmentSize.BFRArmWeapon + aphelion_ppa_right.AmmoTypes += aphelion_ppa_ammo + aphelion_ppa_right.ProjectileTypes += aphelion_ppa_projectile + aphelion_ppa_right.FireModes += new FireModeDefinition + aphelion_ppa_right.FireModes.head.AmmoTypeIndices += 0 + aphelion_ppa_right.FireModes.head.AmmoSlotIndex = 0 + aphelion_ppa_right.FireModes.head.Magazine = 25 + aphelion_ppa_right.Packet = battleFrameToolConverter + aphelion_ppa_right.Tile = InventoryTile.Tile84 + + aphelion_starfire.Name = "aphelion_starfire" + aphelion_starfire.Size = EquipmentSize.BFRArmWeapon + aphelion_starfire.AmmoTypes += aphelion_starfire_ammo + aphelion_starfire.ProjectileTypes += aphelion_starfire_projectile + aphelion_starfire.FireModes += new FireModeDefinition + aphelion_starfire.FireModes.head.AmmoTypeIndices += 0 + aphelion_starfire.FireModes.head.AmmoSlotIndex = 0 + aphelion_starfire.FireModes.head.Magazine = 20 + aphelion_starfire.Packet = battleFrameToolConverter + aphelion_starfire.Tile = InventoryTile.Tile84 + + aphelion_starfire_left.Name = "aphelion_starfire_left" + aphelion_starfire_left.Size = EquipmentSize.BFRArmWeapon + aphelion_starfire_left.AmmoTypes += aphelion_starfire_ammo + aphelion_starfire_left.ProjectileTypes += aphelion_starfire_projectile + aphelion_starfire_left.FireModes += new FireModeDefinition + aphelion_starfire_left.FireModes.head.AmmoTypeIndices += 0 + aphelion_starfire_left.FireModes.head.AmmoSlotIndex = 0 + aphelion_starfire_left.FireModes.head.Magazine = 20 + aphelion_starfire_left.Packet = battleFrameToolConverter + aphelion_starfire_left.Tile = InventoryTile.Tile84 + + aphelion_starfire_right.Name = "aphelion_starfire_right" + aphelion_starfire_right.Size = EquipmentSize.BFRArmWeapon + aphelion_starfire_right.AmmoTypes += aphelion_starfire_ammo + aphelion_starfire_right.ProjectileTypes += aphelion_starfire_projectile + aphelion_starfire_right.FireModes += new FireModeDefinition + aphelion_starfire_right.FireModes.head.AmmoTypeIndices += 0 + aphelion_starfire_right.FireModes.head.AmmoSlotIndex = 0 + aphelion_starfire_right.FireModes.head.Magazine = 20 + aphelion_starfire_right.Packet = battleFrameToolConverter + aphelion_starfire_right.Tile = InventoryTile.Tile84 + + aphelion_plasma_rocket_pod.Name = "aphelion_plasma_rocket_pod" + aphelion_plasma_rocket_pod.Size = EquipmentSize.BFRGunnerWeapon + aphelion_plasma_rocket_pod.AmmoTypes += aphelion_plasma_rocket_ammo + aphelion_plasma_rocket_pod.ProjectileTypes += aphelion_plasma_rocket_projectile + aphelion_plasma_rocket_pod.FireModes += new FireModeDefinition + aphelion_plasma_rocket_pod.FireModes.head.AmmoTypeIndices += 0 + aphelion_plasma_rocket_pod.FireModes.head.AmmoSlotIndex = 0 + aphelion_plasma_rocket_pod.FireModes.head.Magazine = 40 + aphelion_plasma_rocket_pod.Packet = battleFrameToolConverter + aphelion_plasma_rocket_pod.Tile = InventoryTile.Tile1004 + + aphelion_immolation_cannon.Name = "aphelion_immolation_cannon" + aphelion_immolation_cannon.Size = EquipmentSize.BFRGunnerWeapon + aphelion_immolation_cannon.AmmoTypes += aphelion_immolation_cannon_ammo + aphelion_immolation_cannon.ProjectileTypes += aphelion_immolation_cannon_projectile + aphelion_immolation_cannon.FireModes += new FireModeDefinition + aphelion_immolation_cannon.FireModes.head.AmmoTypeIndices += 0 + aphelion_immolation_cannon.FireModes.head.AmmoSlotIndex = 0 + aphelion_immolation_cannon.FireModes.head.Magazine = 25 + aphelion_immolation_cannon.Packet = battleFrameToolConverter + aphelion_immolation_cannon.Tile = InventoryTile.Tile1004 + + colossus_armor_siphon.Name = "colossus_armor_siphon" + colossus_armor_siphon.Size = EquipmentSize.BFRArmWeapon + colossus_armor_siphon.AmmoTypes += armor_siphon_ammo + colossus_armor_siphon.ProjectileTypes += armor_siphon_projectile + colossus_armor_siphon.FireModes += new FireModeDefinition + colossus_armor_siphon.FireModes.head.AmmoTypeIndices += 0 + colossus_armor_siphon.FireModes.head.AmmoSlotIndex = 0 + colossus_armor_siphon.FireModes.head.Magazine = 100 + colossus_armor_siphon.Packet = battleFrameToolConverter + colossus_armor_siphon.Tile = InventoryTile.Tile84 + + colossus_armor_siphon_left.Name = "colossus_armor_siphon_left" + colossus_armor_siphon_left.Size = EquipmentSize.BFRArmWeapon + colossus_armor_siphon_left.AmmoTypes += armor_siphon_ammo + colossus_armor_siphon_left.ProjectileTypes += armor_siphon_projectile + colossus_armor_siphon_left.FireModes += new FireModeDefinition + colossus_armor_siphon_left.FireModes.head.AmmoTypeIndices += 0 + colossus_armor_siphon_left.FireModes.head.AmmoSlotIndex = 0 + colossus_armor_siphon_left.FireModes.head.Magazine = 100 + colossus_armor_siphon_left.Packet = battleFrameToolConverter + colossus_armor_siphon_left.Tile = InventoryTile.Tile84 + + colossus_armor_siphon_right.Name = "colossus_armor_siphon_right" + colossus_armor_siphon_right.Size = EquipmentSize.BFRArmWeapon + colossus_armor_siphon_right.AmmoTypes += armor_siphon_ammo + colossus_armor_siphon_right.ProjectileTypes += armor_siphon_projectile + colossus_armor_siphon_right.FireModes += new FireModeDefinition + colossus_armor_siphon_right.FireModes.head.AmmoTypeIndices += 0 + colossus_armor_siphon_right.FireModes.head.AmmoSlotIndex = 0 + colossus_armor_siphon_right.FireModes.head.Magazine = 100 + colossus_armor_siphon_right.Packet = battleFrameToolConverter + colossus_armor_siphon_right.Tile = InventoryTile.Tile84 + + colossus_burster.Name = "colossus_burster" + colossus_burster.Size = EquipmentSize.BFRArmWeapon + colossus_burster.AmmoTypes += colossus_burster_ammo + colossus_burster.ProjectileTypes += colossus_burster_projectile + colossus_burster.FireModes += new FireModeDefinition + colossus_burster.FireModes.head.AmmoTypeIndices += 0 + colossus_burster.FireModes.head.AmmoSlotIndex = 0 + colossus_burster.FireModes.head.Magazine = 25 + colossus_burster.Packet = battleFrameToolConverter + colossus_burster.Tile = InventoryTile.Tile84 + + colossus_burster_left.Name = "colossus_burster_left" + colossus_burster_left.Size = EquipmentSize.BFRArmWeapon + colossus_burster_left.AmmoTypes += colossus_burster_ammo + colossus_burster_left.ProjectileTypes += colossus_burster_projectile + colossus_burster_left.FireModes += new FireModeDefinition + colossus_burster_left.FireModes.head.AmmoTypeIndices += 0 + colossus_burster_left.FireModes.head.AmmoSlotIndex = 0 + colossus_burster_left.FireModes.head.Magazine = 25 + colossus_burster_left.Packet = battleFrameToolConverter + colossus_burster_left.Tile = InventoryTile.Tile84 + + colossus_burster_right.Name = "colossus_burster_right" + colossus_burster_right.Size = EquipmentSize.BFRArmWeapon + colossus_burster_right.AmmoTypes += colossus_burster_ammo + colossus_burster_right.ProjectileTypes += colossus_burster_projectile + colossus_burster_right.FireModes += new FireModeDefinition + colossus_burster_right.FireModes.head.AmmoTypeIndices += 0 + colossus_burster_right.FireModes.head.AmmoSlotIndex = 0 + colossus_burster_right.FireModes.head.Magazine = 25 + colossus_burster_right.Packet = battleFrameToolConverter + colossus_burster_right.Tile = InventoryTile.Tile84 + + colossus_chaingun.Name = "colossus_chaingun" + colossus_chaingun.Size = EquipmentSize.BFRArmWeapon + colossus_chaingun.AmmoTypes += colossus_chaingun_ammo + colossus_chaingun.ProjectileTypes += colossus_chaingun_projectile + colossus_chaingun.FireModes += new FireModeDefinition + colossus_chaingun.FireModes.head.AmmoTypeIndices += 0 + colossus_chaingun.FireModes.head.AmmoSlotIndex = 0 + colossus_chaingun.FireModes.head.Magazine = 125 + colossus_chaingun.Packet = battleFrameToolConverter + colossus_chaingun.Tile = InventoryTile.Tile84 + + colossus_chaingun_left.Name = "colossus_chaingun_left" + colossus_chaingun_left.Size = EquipmentSize.BFRArmWeapon + colossus_chaingun_left.AmmoTypes += colossus_chaingun_ammo + colossus_chaingun_left.ProjectileTypes += colossus_chaingun_projectile + colossus_chaingun_left.FireModes += new FireModeDefinition + colossus_chaingun_left.FireModes.head.AmmoTypeIndices += 0 + colossus_chaingun_left.FireModes.head.AmmoSlotIndex = 0 + colossus_chaingun_left.FireModes.head.Magazine = 125 + colossus_chaingun_left.Packet = battleFrameToolConverter + colossus_chaingun_left.Tile = InventoryTile.Tile84 + + colossus_chaingun_right.Name = "colossus_chaingun_right" + colossus_chaingun_right.Size = EquipmentSize.BFRArmWeapon + colossus_chaingun_right.AmmoTypes += colossus_chaingun_ammo + colossus_chaingun_right.ProjectileTypes += colossus_chaingun_projectile + colossus_chaingun_right.FireModes += new FireModeDefinition + colossus_chaingun_right.FireModes.head.AmmoTypeIndices += 0 + colossus_chaingun_right.FireModes.head.AmmoSlotIndex = 0 + colossus_chaingun_right.FireModes.head.Magazine = 125 + colossus_chaingun_right.Packet = battleFrameToolConverter + colossus_chaingun_right.Tile = InventoryTile.Tile84 + + colossus_ntu_siphon.Name = "colossus_ntu_siphon" + colossus_ntu_siphon.Size = EquipmentSize.BFRArmWeapon + colossus_ntu_siphon.AmmoTypes += ntu_siphon_ammo + colossus_ntu_siphon.ProjectileTypes += no_projectile + colossus_ntu_siphon.ProjectileTypes += ntu_siphon_emp + colossus_ntu_siphon.FireModes += new FireModeDefinition + colossus_ntu_siphon.FireModes.head.AmmoTypeIndices += 0 + colossus_ntu_siphon.FireModes.head.AmmoSlotIndex = 0 + colossus_ntu_siphon.FireModes.head.RoundsPerShot = 5 + colossus_ntu_siphon.FireModes.head.Magazine = 150 + colossus_ntu_siphon.FireModes.head.DefaultMagazine = 0 + colossus_ntu_siphon.FireModes += new FireModeDefinition + colossus_ntu_siphon.FireModes(1).AmmoTypeIndices += 0 + colossus_ntu_siphon.FireModes(1).AmmoSlotIndex = 0 + colossus_ntu_siphon.FireModes(1).ProjectileTypeIndices += 1 + colossus_ntu_siphon.FireModes(1).RoundsPerShot = 30 + colossus_ntu_siphon.FireModes(1).Magazine = 150 + colossus_ntu_siphon.FireModes(1).DefaultMagazine = 0 + colossus_ntu_siphon.FireModes(1).AmmoSlotIndex = 0 + colossus_ntu_siphon.Packet = battleFrameToolConverter + colossus_ntu_siphon.Tile = InventoryTile.Tile84 + + colossus_ntu_siphon_left.Name = "colossus_ntu_siphon_left" + colossus_ntu_siphon_left.Size = EquipmentSize.BFRArmWeapon + colossus_ntu_siphon_left.AmmoTypes += ntu_siphon_ammo + colossus_ntu_siphon_left.ProjectileTypes += no_projectile + colossus_ntu_siphon_left.ProjectileTypes += ntu_siphon_emp + colossus_ntu_siphon_left.FireModes += new FireModeDefinition + colossus_ntu_siphon_left.FireModes.head.AmmoTypeIndices += 0 + colossus_ntu_siphon_left.FireModes.head.AmmoSlotIndex = 0 + colossus_ntu_siphon_left.FireModes.head.RoundsPerShot = 5 + colossus_ntu_siphon_left.FireModes.head.Magazine = 150 + colossus_ntu_siphon_left.FireModes.head.DefaultMagazine = 0 + colossus_ntu_siphon_left.FireModes += new FireModeDefinition + colossus_ntu_siphon_left.FireModes(1).AmmoTypeIndices += 0 + colossus_ntu_siphon_left.FireModes(1).AmmoSlotIndex = 0 + colossus_ntu_siphon_left.FireModes(1).ProjectileTypeIndices += 1 + colossus_ntu_siphon_left.FireModes(1).RoundsPerShot = 30 + colossus_ntu_siphon_left.FireModes(1).Magazine = 150 + colossus_ntu_siphon_left.FireModes(1).DefaultMagazine = 0 + colossus_ntu_siphon_left.FireModes(1).AmmoSlotIndex = 0 + colossus_ntu_siphon_left.Packet = battleFrameToolConverter + colossus_ntu_siphon_left.Tile = InventoryTile.Tile84 + + colossus_ntu_siphon_right.Name = "colossus_ntu_siphon_right" + colossus_ntu_siphon_right.Size = EquipmentSize.BFRArmWeapon + colossus_ntu_siphon_right.AmmoTypes += ntu_siphon_ammo + colossus_ntu_siphon_right.ProjectileTypes += no_projectile + colossus_ntu_siphon_right.ProjectileTypes += ntu_siphon_emp + colossus_ntu_siphon_right.FireModes += new FireModeDefinition + colossus_ntu_siphon_right.FireModes.head.AmmoTypeIndices += 0 + colossus_ntu_siphon_right.FireModes.head.AmmoSlotIndex = 0 + colossus_ntu_siphon_right.FireModes.head.RoundsPerShot = 5 + colossus_ntu_siphon_right.FireModes.head.Magazine = 150 + colossus_ntu_siphon_right.FireModes.head.DefaultMagazine = 0 + colossus_ntu_siphon_right.FireModes += new FireModeDefinition + colossus_ntu_siphon_right.FireModes(1).AmmoTypeIndices += 0 + colossus_ntu_siphon_right.FireModes(1).AmmoSlotIndex = 0 + colossus_ntu_siphon_right.FireModes(1).ProjectileTypeIndices += 1 + colossus_ntu_siphon_right.FireModes(1).RoundsPerShot = 30 + colossus_ntu_siphon_right.FireModes(1).Magazine = 150 + colossus_ntu_siphon_right.FireModes(1).DefaultMagazine = 0 + colossus_ntu_siphon_right.FireModes(1).AmmoSlotIndex = 0 + colossus_ntu_siphon_right.Packet = battleFrameToolConverter + colossus_ntu_siphon_right.Tile = InventoryTile.Tile84 + + colossus_tank_cannon.Name = "colossus_tank_cannon" + colossus_tank_cannon.Size = EquipmentSize.BFRArmWeapon + colossus_tank_cannon.AmmoTypes += colossus_tank_cannon_ammo + colossus_tank_cannon.ProjectileTypes += colossus_tank_cannon_projectile + colossus_tank_cannon.FireModes += new FireModeDefinition + colossus_tank_cannon.FireModes.head.AmmoTypeIndices += 0 + colossus_tank_cannon.FireModes.head.AmmoSlotIndex = 0 + colossus_tank_cannon.FireModes.head.Magazine = 25 + colossus_tank_cannon.Packet = battleFrameToolConverter + colossus_tank_cannon.Tile = InventoryTile.Tile84 + + colossus_tank_cannon_left.Name = "colossus_tank_cannon_left" + colossus_tank_cannon_left.Size = EquipmentSize.BFRArmWeapon + colossus_tank_cannon_left.AmmoTypes += colossus_tank_cannon_ammo + colossus_tank_cannon_left.ProjectileTypes += colossus_tank_cannon_projectile + colossus_tank_cannon_left.FireModes += new FireModeDefinition + colossus_tank_cannon_left.FireModes.head.AmmoTypeIndices += 0 + colossus_tank_cannon_left.FireModes.head.AmmoSlotIndex = 0 + colossus_tank_cannon_left.FireModes.head.Magazine = 25 + colossus_tank_cannon_left.Packet = battleFrameToolConverter + colossus_tank_cannon_left.Tile = InventoryTile.Tile84 + + colossus_tank_cannon_right.Name = "colossus_tank_cannon_right" + colossus_tank_cannon_right.Size = EquipmentSize.BFRArmWeapon + colossus_tank_cannon_right.AmmoTypes += colossus_tank_cannon_ammo + colossus_tank_cannon_right.ProjectileTypes += colossus_tank_cannon_projectile + colossus_tank_cannon_right.FireModes += new FireModeDefinition + colossus_tank_cannon_right.FireModes.head.AmmoTypeIndices += 0 + colossus_tank_cannon_right.FireModes.head.AmmoSlotIndex = 0 + colossus_tank_cannon_right.FireModes.head.Magazine = 25 + colossus_tank_cannon_right.Packet = battleFrameToolConverter + colossus_tank_cannon_right.Tile = InventoryTile.Tile84 + + colossus_dual_100mm_cannons.Name = "colossus_dual_100mm_cannons" + colossus_dual_100mm_cannons.Size = EquipmentSize.BFRGunnerWeapon + colossus_dual_100mm_cannons.AmmoTypes += colossus_100mm_cannon_ammo + colossus_dual_100mm_cannons.ProjectileTypes += colossus_100mm_projectile + colossus_dual_100mm_cannons.FireModes += new FireModeDefinition + colossus_dual_100mm_cannons.FireModes.head.AmmoTypeIndices += 0 + colossus_dual_100mm_cannons.FireModes.head.AmmoSlotIndex = 0 + colossus_dual_100mm_cannons.FireModes.head.Magazine = 22 + colossus_dual_100mm_cannons.Packet = battleFrameToolConverter + colossus_dual_100mm_cannons.Tile = InventoryTile.Tile1004 + + colossus_cluster_bomb_pod.Name = "colossus_cluster_bomb_pod" + colossus_cluster_bomb_pod.Size = EquipmentSize.BFRGunnerWeapon + colossus_cluster_bomb_pod.AmmoTypes += colossus_cluster_bomb_ammo + colossus_cluster_bomb_pod.ProjectileTypes += colossus_cluster_bomb_projectile + colossus_cluster_bomb_pod.FireModes += new FireModeDefinition + colossus_cluster_bomb_pod.FireModes.head.AmmoTypeIndices += 0 + colossus_cluster_bomb_pod.FireModes.head.AmmoSlotIndex = 0 + colossus_cluster_bomb_pod.FireModes.head.Magazine = 125 + colossus_cluster_bomb_pod.FireModes += new FireModeDefinition + colossus_cluster_bomb_pod.FireModes(1).AmmoTypeIndices += 0 + colossus_cluster_bomb_pod.FireModes(1).AmmoSlotIndex = 0 + colossus_cluster_bomb_pod.FireModes(1).Magazine = 125 + colossus_cluster_bomb_pod.Packet = battleFrameToolConverter + colossus_cluster_bomb_pod.Tile = InventoryTile.Tile1004 + + peregrine_armor_siphon.Name = "peregrine_armor_siphon" + peregrine_armor_siphon.Size = EquipmentSize.BFRArmWeapon + peregrine_armor_siphon.AmmoTypes += armor_siphon_ammo + peregrine_armor_siphon.ProjectileTypes += armor_siphon_projectile + peregrine_armor_siphon.FireModes += new FireModeDefinition + peregrine_armor_siphon.FireModes.head.AmmoTypeIndices += 0 + peregrine_armor_siphon.FireModes.head.AmmoSlotIndex = 0 + peregrine_armor_siphon.FireModes.head.Magazine = 100 + peregrine_armor_siphon.Packet = battleFrameToolConverter + peregrine_armor_siphon.Tile = InventoryTile.Tile84 + + peregrine_armor_siphon_left.Name = "peregrine_armor_siphon_left" + peregrine_armor_siphon_left.Size = EquipmentSize.BFRArmWeapon + peregrine_armor_siphon_left.AmmoTypes += armor_siphon_ammo + peregrine_armor_siphon_left.ProjectileTypes += armor_siphon_projectile + peregrine_armor_siphon_left.FireModes += new FireModeDefinition + peregrine_armor_siphon_left.FireModes.head.AmmoTypeIndices += 0 + peregrine_armor_siphon_left.FireModes.head.AmmoSlotIndex = 0 + peregrine_armor_siphon_left.FireModes.head.Magazine = 100 + peregrine_armor_siphon_left.Packet = battleFrameToolConverter + peregrine_armor_siphon_left.Tile = InventoryTile.Tile84 + + peregrine_armor_siphon_right.Name = "peregrine_armor_siphon_right" + peregrine_armor_siphon_right.Size = EquipmentSize.BFRArmWeapon + peregrine_armor_siphon_right.AmmoTypes += armor_siphon_ammo + peregrine_armor_siphon_right.ProjectileTypes += armor_siphon_projectile + peregrine_armor_siphon_right.FireModes += new FireModeDefinition + peregrine_armor_siphon_right.FireModes.head.AmmoTypeIndices += 0 + peregrine_armor_siphon_right.FireModes.head.AmmoSlotIndex = 0 + peregrine_armor_siphon_right.FireModes.head.Magazine = 100 + peregrine_armor_siphon_right.Packet = battleFrameToolConverter + peregrine_armor_siphon_right.Tile = InventoryTile.Tile84 + + peregrine_dual_machine_gun.Name = "peregrine_dual_machine_gun" + peregrine_dual_machine_gun.Size = EquipmentSize.BFRArmWeapon + peregrine_dual_machine_gun.AmmoTypes += peregrine_dual_machine_gun_ammo + peregrine_dual_machine_gun.ProjectileTypes += peregrine_dual_machine_gun_projectile + peregrine_dual_machine_gun.FireModes += new FireModeDefinition + peregrine_dual_machine_gun.FireModes.head.AmmoTypeIndices += 0 + peregrine_dual_machine_gun.FireModes.head.AmmoSlotIndex = 0 + peregrine_dual_machine_gun.FireModes.head.Magazine = 55 + peregrine_dual_machine_gun.Packet = battleFrameToolConverter + peregrine_dual_machine_gun.Tile = InventoryTile.Tile84 + + peregrine_dual_machine_gun_left.Name = "peregrine_dual_machine_gun_left" + peregrine_dual_machine_gun_left.Size = EquipmentSize.BFRArmWeapon + peregrine_dual_machine_gun_left.AmmoTypes += peregrine_dual_machine_gun_ammo + peregrine_dual_machine_gun_left.ProjectileTypes += peregrine_dual_machine_gun_projectile + peregrine_dual_machine_gun_left.FireModes += new FireModeDefinition + peregrine_dual_machine_gun_left.FireModes.head.AmmoTypeIndices += 0 + peregrine_dual_machine_gun_left.FireModes.head.AmmoSlotIndex = 0 + peregrine_dual_machine_gun_left.FireModes.head.Magazine = 55 + peregrine_dual_machine_gun_left.Packet = battleFrameToolConverter + peregrine_dual_machine_gun_left.Tile = InventoryTile.Tile84 + + peregrine_dual_machine_gun_right.Name = "peregrine_dual_machine_gun_right" + peregrine_dual_machine_gun_right.Size = EquipmentSize.BFRArmWeapon + peregrine_dual_machine_gun_right.AmmoTypes += peregrine_dual_machine_gun_ammo + peregrine_dual_machine_gun_right.ProjectileTypes += peregrine_dual_machine_gun_projectile + peregrine_dual_machine_gun_right.FireModes += new FireModeDefinition + peregrine_dual_machine_gun_right.FireModes.head.AmmoTypeIndices += 0 + peregrine_dual_machine_gun_right.FireModes.head.AmmoSlotIndex = 0 + peregrine_dual_machine_gun_right.FireModes.head.Magazine = 55 + peregrine_dual_machine_gun_right.Packet = battleFrameToolConverter + peregrine_dual_machine_gun_right.Tile = InventoryTile.Tile84 + + peregrine_mechhammer.Name = "peregrine_mechhammer" + peregrine_mechhammer.Size = EquipmentSize.BFRArmWeapon + peregrine_mechhammer.AmmoTypes += peregrine_mechhammer_ammo + peregrine_mechhammer.ProjectileTypes += peregrine_mechhammer_projectile + peregrine_mechhammer.FireModes += new PelletFireModeDefinition + peregrine_mechhammer.FireModes.head.AmmoTypeIndices += 0 + peregrine_mechhammer.FireModes.head.AmmoSlotIndex = 0 + peregrine_mechhammer.FireModes.head.Magazine = 30 + peregrine_mechhammer.FireModes.head.Chamber = 16 //30 shells * 12 pellets = 480 + peregrine_mechhammer.FireModes += new PelletFireModeDefinition + peregrine_mechhammer.FireModes(1).AmmoTypeIndices += 0 + peregrine_mechhammer.FireModes(1).AmmoSlotIndex = 0 + peregrine_mechhammer.FireModes(1).Magazine = 30 + peregrine_mechhammer.FireModes(1).Chamber = 12 //30 shells * 12 pellets = 360 + peregrine_mechhammer.Packet = battleFrameToolConverter + peregrine_mechhammer.Tile = InventoryTile.Tile84 + + peregrine_mechhammer_left.Name = "peregrine_mechhammer_left" + peregrine_mechhammer_left.Size = EquipmentSize.BFRArmWeapon + peregrine_mechhammer_left.AmmoTypes += peregrine_mechhammer_ammo + peregrine_mechhammer_left.ProjectileTypes += peregrine_mechhammer_projectile + peregrine_mechhammer_left.FireModes += new PelletFireModeDefinition + peregrine_mechhammer_left.FireModes.head.AmmoTypeIndices += 0 + peregrine_mechhammer_left.FireModes.head.AmmoSlotIndex = 0 + peregrine_mechhammer_left.FireModes.head.Magazine = 30 + peregrine_mechhammer_left.FireModes.head.Chamber = 16 //30 shells * 12 pellets = 480 + peregrine_mechhammer_left.FireModes += new PelletFireModeDefinition + peregrine_mechhammer_left.FireModes(1).AmmoTypeIndices += 0 + peregrine_mechhammer_left.FireModes(1).AmmoSlotIndex = 0 + peregrine_mechhammer_left.FireModes(1).Magazine = 30 + peregrine_mechhammer_left.FireModes(1).Chamber = 12 //30 shells * 12 pellets = 360 + peregrine_mechhammer_left.Packet = battleFrameToolConverter + peregrine_mechhammer_left.Tile = InventoryTile.Tile84 + + peregrine_mechhammer_right.Name = "peregrine_mechhammer_right" + peregrine_mechhammer_right.Size = EquipmentSize.BFRArmWeapon + peregrine_mechhammer_right.AmmoTypes += peregrine_mechhammer_ammo + peregrine_mechhammer_right.ProjectileTypes += peregrine_mechhammer_projectile + peregrine_mechhammer_right.FireModes += new PelletFireModeDefinition + peregrine_mechhammer_right.FireModes.head.AmmoTypeIndices += 0 + peregrine_mechhammer_right.FireModes.head.AmmoSlotIndex = 0 + peregrine_mechhammer_right.FireModes.head.Magazine = 30 + peregrine_mechhammer_right.FireModes.head.Chamber = 16 //30 shells * 12 pellets = 480 + peregrine_mechhammer_right.FireModes += new PelletFireModeDefinition + peregrine_mechhammer_right.FireModes(1).AmmoTypeIndices += 0 + peregrine_mechhammer_right.FireModes(1).AmmoSlotIndex = 0 + peregrine_mechhammer_right.FireModes(1).Magazine = 30 + peregrine_mechhammer_right.FireModes(1).Chamber = 12 //30 shells * 12 pellets = 360 + peregrine_mechhammer_right.Packet = battleFrameToolConverter + peregrine_mechhammer_right.Tile = InventoryTile.Tile84 + + peregrine_ntu_siphon.Name = "peregrine_ntu_siphon" + peregrine_ntu_siphon.Size = EquipmentSize.BFRArmWeapon + peregrine_ntu_siphon.AmmoTypes += ntu_siphon_ammo + peregrine_ntu_siphon.ProjectileTypes += no_projectile + peregrine_ntu_siphon.ProjectileTypes += ntu_siphon_emp + peregrine_ntu_siphon.FireModes += new FireModeDefinition + peregrine_ntu_siphon.FireModes.head.AmmoTypeIndices += 0 + peregrine_ntu_siphon.FireModes.head.AmmoSlotIndex = 0 + peregrine_ntu_siphon.FireModes.head.RoundsPerShot = 5 + peregrine_ntu_siphon.FireModes.head.Magazine = 150 + peregrine_ntu_siphon.FireModes.head.DefaultMagazine = 0 + peregrine_ntu_siphon.FireModes += new FireModeDefinition + peregrine_ntu_siphon.FireModes(1).AmmoTypeIndices += 0 + peregrine_ntu_siphon.FireModes(1).AmmoSlotIndex = 0 + peregrine_ntu_siphon.FireModes(1).ProjectileTypeIndices += 1 + peregrine_ntu_siphon.FireModes(1).RoundsPerShot = 30 + peregrine_ntu_siphon.FireModes(1).Magazine = 150 + peregrine_ntu_siphon.FireModes(1).DefaultMagazine = 0 + peregrine_ntu_siphon.FireModes(1).AmmoSlotIndex = 0 + peregrine_ntu_siphon.Packet = battleFrameToolConverter + peregrine_ntu_siphon.Tile = InventoryTile.Tile84 + + peregrine_ntu_siphon_left.Name = "peregrine_ntu_siphon_left" + peregrine_ntu_siphon_left.Size = EquipmentSize.BFRArmWeapon + peregrine_ntu_siphon_left.AmmoTypes += ntu_siphon_ammo + peregrine_ntu_siphon_left.ProjectileTypes += no_projectile + peregrine_ntu_siphon_left.ProjectileTypes += ntu_siphon_emp + peregrine_ntu_siphon_left.FireModes += new FireModeDefinition + peregrine_ntu_siphon_left.FireModes.head.AmmoTypeIndices += 0 + peregrine_ntu_siphon_left.FireModes.head.AmmoSlotIndex = 0 + peregrine_ntu_siphon_left.FireModes.head.RoundsPerShot = 5 + peregrine_ntu_siphon_left.FireModes.head.Magazine = 150 + peregrine_ntu_siphon_left.FireModes.head.DefaultMagazine = 0 + peregrine_ntu_siphon_left.FireModes += new FireModeDefinition + peregrine_ntu_siphon_left.FireModes(1).AmmoTypeIndices += 0 + peregrine_ntu_siphon_left.FireModes(1).AmmoSlotIndex = 0 + peregrine_ntu_siphon_left.FireModes(1).ProjectileTypeIndices += 1 + peregrine_ntu_siphon_left.FireModes(1).RoundsPerShot = 30 + peregrine_ntu_siphon_left.FireModes(1).Magazine = 150 + peregrine_ntu_siphon_left.FireModes(1).DefaultMagazine = 0 + peregrine_ntu_siphon_left.FireModes(1).AmmoSlotIndex = 0 + peregrine_ntu_siphon_left.Packet = battleFrameToolConverter + peregrine_ntu_siphon_left.Tile = InventoryTile.Tile84 + + peregrine_ntu_siphon_right.Name = "peregrine_ntu_siphon_right" + peregrine_ntu_siphon_right.Size = EquipmentSize.BFRArmWeapon + peregrine_ntu_siphon_right.AmmoTypes += ntu_siphon_ammo + peregrine_ntu_siphon_right.ProjectileTypes += no_projectile + peregrine_ntu_siphon_right.ProjectileTypes += ntu_siphon_emp + peregrine_ntu_siphon_right.FireModes += new FireModeDefinition + peregrine_ntu_siphon_right.FireModes.head.AmmoTypeIndices += 0 + peregrine_ntu_siphon_right.FireModes.head.AmmoSlotIndex = 0 + peregrine_ntu_siphon_right.FireModes.head.RoundsPerShot = 5 + peregrine_ntu_siphon_right.FireModes.head.Magazine = 150 + peregrine_ntu_siphon_right.FireModes.head.DefaultMagazine = 0 + peregrine_ntu_siphon_right.FireModes += new FireModeDefinition + peregrine_ntu_siphon_right.FireModes(1).AmmoTypeIndices += 0 + peregrine_ntu_siphon_right.FireModes(1).AmmoSlotIndex = 0 + peregrine_ntu_siphon_right.FireModes(1).ProjectileTypeIndices += 1 + peregrine_ntu_siphon_right.FireModes(1).RoundsPerShot = 30 + peregrine_ntu_siphon_right.FireModes(1).Magazine = 150 + peregrine_ntu_siphon_right.FireModes(1).DefaultMagazine = 0 + peregrine_ntu_siphon_right.FireModes(1).AmmoSlotIndex = 0 + peregrine_ntu_siphon_right.Packet = battleFrameToolConverter + peregrine_ntu_siphon_right.Tile = InventoryTile.Tile84 + + peregrine_sparrow.Name = "peregrine_sparrow" + peregrine_sparrow.Size = EquipmentSize.BFRArmWeapon + peregrine_sparrow.AmmoTypes += peregrine_sparrow_ammo + peregrine_sparrow.ProjectileTypes += peregrine_sparrow_projectile + peregrine_sparrow.FireModes += new FireModeDefinition + peregrine_sparrow.FireModes.head.AmmoTypeIndices += 0 + peregrine_sparrow.FireModes.head.AmmoSlotIndex = 0 + peregrine_sparrow.FireModes.head.Magazine = 12 + peregrine_sparrow.Packet = battleFrameToolConverter + peregrine_sparrow.Tile = InventoryTile.Tile84 + + peregrine_sparrow_left.Name = "peregrine_sparrow_left" + peregrine_sparrow_left.Size = EquipmentSize.BFRArmWeapon + peregrine_sparrow_left.AmmoTypes += peregrine_sparrow_ammo + peregrine_sparrow_left.ProjectileTypes += peregrine_sparrow_projectile + peregrine_sparrow_left.FireModes += new FireModeDefinition + peregrine_sparrow_left.FireModes.head.AmmoTypeIndices += 0 + peregrine_sparrow_left.FireModes.head.AmmoSlotIndex = 0 + peregrine_sparrow_left.FireModes.head.Magazine = 12 + peregrine_sparrow_left.Packet = battleFrameToolConverter + peregrine_sparrow_left.Tile = InventoryTile.Tile84 + + peregrine_sparrow_right.Name = "peregrine_sparrow_right" + peregrine_sparrow_right.Size = EquipmentSize.BFRArmWeapon + peregrine_sparrow_right.AmmoTypes += peregrine_sparrow_ammo + peregrine_sparrow_right.ProjectileTypes += peregrine_sparrow_projectile + peregrine_sparrow_right.FireModes += new FireModeDefinition + peregrine_sparrow_right.FireModes.head.AmmoTypeIndices += 0 + peregrine_sparrow_right.FireModes.head.AmmoSlotIndex = 0 + peregrine_sparrow_right.FireModes.head.Magazine = 12 + peregrine_sparrow_right.Packet = battleFrameToolConverter + peregrine_sparrow_right.Tile = InventoryTile.Tile84 + + peregrine_particle_cannon.Name = "peregrine_particle_cannon" + peregrine_particle_cannon.Size = EquipmentSize.BFRGunnerWeapon + peregrine_particle_cannon.AmmoTypes += peregrine_particle_cannon_ammo + peregrine_particle_cannon.ProjectileTypes += peregrine_particle_cannon_projectile + peregrine_particle_cannon.FireModes += new FireModeDefinition + peregrine_particle_cannon.FireModes.head.AmmoTypeIndices += 0 + peregrine_particle_cannon.FireModes.head.AmmoSlotIndex = 0 + peregrine_particle_cannon.FireModes.head.Magazine = 10 + peregrine_particle_cannon.Packet = battleFrameToolConverter + peregrine_particle_cannon.Tile = InventoryTile.Tile1004 + + peregrine_dual_rocket_pods.Name = "peregrine_dual_rocket_pods" + peregrine_dual_rocket_pods.Size = EquipmentSize.BFRGunnerWeapon + peregrine_dual_rocket_pods.AmmoTypes += peregrine_rocket_pod_ammo + peregrine_dual_rocket_pods.ProjectileTypes += peregrine_rocket_pod_projectile + peregrine_dual_rocket_pods.FireModes += new FireModeDefinition + peregrine_dual_rocket_pods.FireModes.head.AmmoTypeIndices += 0 + peregrine_dual_rocket_pods.FireModes.head.AmmoSlotIndex = 0 + peregrine_dual_rocket_pods.FireModes.head.Magazine = 24 + peregrine_dual_rocket_pods.FireModes += new FireModeDefinition + peregrine_dual_rocket_pods.FireModes(1).AmmoTypeIndices += 0 + peregrine_dual_rocket_pods.FireModes(1).AmmoSlotIndex = 0 + peregrine_dual_rocket_pods.FireModes(1).Magazine = 24 + peregrine_dual_rocket_pods.Packet = battleFrameToolConverter + peregrine_dual_rocket_pods.Tile = InventoryTile.Tile1004 + } +} diff --git a/src/main/scala/net/psforever/objects/global/GlobalDefinitionsVehicle.scala b/src/main/scala/net/psforever/objects/global/GlobalDefinitionsVehicle.scala new file mode 100644 index 000000000..df3b9b793 --- /dev/null +++ b/src/main/scala/net/psforever/objects/global/GlobalDefinitionsVehicle.scala @@ -0,0 +1,1990 @@ +// Copyright (c) 2024 PSForever +package net.psforever.objects.global + +import net.psforever.objects.definition._ +import net.psforever.objects.definition.converter._ +import net.psforever.objects.geometry.GeometryForm +import net.psforever.objects.inventory.InventoryTile +import net.psforever.objects.GlobalDefinitions +import net.psforever.objects.serverobject.mount._ +import net.psforever.objects.vehicles.{DestroyedVehicle, UtilityType, VehicleSubsystemEntry} +import net.psforever.objects.vital.base.DamageType +import net.psforever.objects.vital.damage._ +import net.psforever.objects.vital.etc.{ShieldAgainstRadiation => _, _} +import net.psforever.objects.vital.prop.DamageWithPosition +import net.psforever.objects.vital._ +import net.psforever.types.Vector3 + +import scala.concurrent.duration._ + +object GlobalDefinitionsVehicle { + import GlobalDefinitions._ + + def init(): Unit = { + init_ground_vehicles() + init_flight_vehicles() + init_bfr_vehicles() + } + + /** + * Initialize land-based `VehicleDefinition` globals. + */ + private def init_ground_vehicles(): Unit = { + val atvForm = GeometryForm.representByCylinder(radius = 1.1797f, height = 1.1875f) _ + val delivererForm = GeometryForm.representByCylinder(radius = 2.46095f, height = 2.40626f) _ //TODO hexahedron + val apcForm = GeometryForm.representByCylinder(radius = 4.6211f, height = 3.90626f) _ //TODO hexahedron + + val driverSeat = new SeatDefinition() { + restriction = NoReinforcedOrMax + } + val normalSeat = new SeatDefinition() + val bailableSeat = new SeatDefinition() { + bailable = true + } + val maxOnlySeat = new SeatDefinition() { + restriction = MaxOnly + } + + val controlSubsystem = List(VehicleSubsystemEntry.Controls) + + fury.Name = "fury" + fury.MaxHealth = 650 + fury.Damageable = true + fury.Repairable = true + fury.RepairIfDestroyed = false + fury.MaxShields = 130 + fury.Seats += 0 -> bailableSeat + fury.controlledWeapons(seat = 0, weapon = 1) + fury.Weapons += 1 -> fury_weapon_systema + fury.MountPoints += 1 -> MountInfo(0) + fury.MountPoints += 2 -> MountInfo(0) + fury.subsystems = controlSubsystem + fury.TrunkSize = InventoryTile.Tile1111 + fury.TrunkOffset = 30 + fury.TrunkLocation = Vector3(-1.71f, 0f, 0f) + fury.AutoPilotSpeeds = (24, 10) + fury.DestroyedModel = Some(DestroyedVehicle.QuadAssault) + fury.JackingDuration = Array(0, 10, 3, 2) + fury.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 150 + Damage1 = 225 + DamageRadius = 5 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + fury.DrownAtMaxDepth = true + fury.MaxDepth = 1.3f + fury.UnderwaterLifespan(suffocation = 5000L, recovery = 2500L) + fury.Geometry = atvForm + fury.collision.avatarCollisionDamageMax = 35 + fury.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 5), (0.5f, 20), (0.75f, 40), (1f, 60))) + fury.collision.z = CollisionZData(Array((8f, 1), (24f, 35), (40f, 100), (48f, 175), (52f, 350))) + fury.maxForwardSpeed = 90f + fury.mass = 32.1f + + quadassault.Name = "quadassault" // Basilisk + quadassault.MaxHealth = 650 + quadassault.Damageable = true + quadassault.Repairable = true + quadassault.RepairIfDestroyed = false + quadassault.MaxShields = 130 + quadassault.Seats += 0 -> bailableSeat + quadassault.controlledWeapons(seat = 0, weapon = 1) + quadassault.Weapons += 1 -> quadassault_weapon_system + quadassault.MountPoints += 1 -> MountInfo(0) + quadassault.MountPoints += 2 -> MountInfo(0) + quadassault.subsystems = controlSubsystem + quadassault.TrunkSize = InventoryTile.Tile1111 + quadassault.TrunkOffset = 30 + quadassault.TrunkLocation = Vector3(-1.71f, 0f, 0f) + quadassault.AutoPilotSpeeds = (24, 10) + quadassault.DestroyedModel = Some(DestroyedVehicle.QuadAssault) + quadassault.JackingDuration = Array(0, 10, 3, 2) + quadassault.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 150 + Damage1 = 225 + DamageRadius = 5 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + quadassault.DrownAtMaxDepth = true + quadassault.MaxDepth = 1.3f + quadassault.UnderwaterLifespan(suffocation = 5000L, recovery = 2500L) + quadassault.Geometry = atvForm + quadassault.collision.avatarCollisionDamageMax = 35 + quadassault.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 5), (0.5f, 20), (0.75f, 40), (1f, 60))) + quadassault.collision.z = CollisionZData(Array((8f, 1), (24f, 35), (40f, 100), (48f, 175), (52f, 350))) + quadassault.maxForwardSpeed = 90f + quadassault.mass = 32.1f + + quadstealth.Name = "quadstealth" // Wraith + quadstealth.MaxHealth = 650 + quadstealth.Damageable = true + quadstealth.Repairable = true + quadstealth.RepairIfDestroyed = false + quadstealth.MaxShields = 130 + quadstealth.CanCloak = true + quadstealth.Seats += 0 -> bailableSeat + quadstealth.CanCloak = true + quadstealth.MountPoints += 1 -> MountInfo(0) + quadstealth.MountPoints += 2 -> MountInfo(0) + quadstealth.subsystems = controlSubsystem + quadstealth.TrunkSize = InventoryTile.Tile1111 + quadstealth.TrunkOffset = 30 + quadstealth.TrunkLocation = Vector3(-1.71f, 0f, 0f) + quadstealth.AutoPilotSpeeds = (24, 10) + quadstealth.DestroyedModel = Some(DestroyedVehicle.QuadStealth) + quadstealth.JackingDuration = Array(0, 10, 3, 2) + quadstealth.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 150 + Damage1 = 225 + DamageRadius = 5 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + quadstealth.DrownAtMaxDepth = true + quadstealth.MaxDepth = 1.25f + quadstealth.UnderwaterLifespan(suffocation = 5000L, recovery = 2500L) + quadstealth.Geometry = atvForm + quadstealth.collision.avatarCollisionDamageMax = 35 + quadstealth.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 5), (0.5f, 20), (0.75f, 40), (1f, 60))) + quadstealth.collision.z = CollisionZData(Array((8f, 1), (24f, 35), (40f, 100), (48f, 175), (52f, 350))) + quadstealth.maxForwardSpeed = 90f + quadstealth.mass = 32.1f + + two_man_assault_buggy.Name = "two_man_assault_buggy" // Harasser + two_man_assault_buggy.MaxHealth = 1250 + two_man_assault_buggy.Damageable = true + two_man_assault_buggy.Repairable = true + two_man_assault_buggy.RepairIfDestroyed = false + two_man_assault_buggy.MaxShields = 250 + two_man_assault_buggy.Seats += 0 -> bailableSeat + two_man_assault_buggy.Seats += 1 -> bailableSeat + two_man_assault_buggy.controlledWeapons(seat = 1, weapon = 2) + two_man_assault_buggy.Weapons += 2 -> chaingun_p + two_man_assault_buggy.MountPoints += 1 -> MountInfo(0) + two_man_assault_buggy.MountPoints += 2 -> MountInfo(1) + two_man_assault_buggy.subsystems = controlSubsystem + two_man_assault_buggy.TrunkSize = InventoryTile.Tile1511 + two_man_assault_buggy.TrunkOffset = 30 + two_man_assault_buggy.TrunkLocation = Vector3(-2.5f, 0f, 0f) + two_man_assault_buggy.AutoPilotSpeeds = (22, 8) + two_man_assault_buggy.DestroyedModel = Some(DestroyedVehicle.TwoManAssaultBuggy) + two_man_assault_buggy.RadiationShielding = 0.5f + two_man_assault_buggy.JackingDuration = Array(0, 15, 5, 3) + two_man_assault_buggy.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 200 + Damage1 = 300 + DamageRadius = 8 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + two_man_assault_buggy.DrownAtMaxDepth = true + two_man_assault_buggy.MaxDepth = 1.5f + two_man_assault_buggy.UnderwaterLifespan(suffocation = 5000L, recovery = 2500L) + two_man_assault_buggy.Geometry = GeometryForm.representByCylinder(radius = 2.10545f, height = 1.59376f) + two_man_assault_buggy.collision.avatarCollisionDamageMax = 75 + two_man_assault_buggy.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 5), (0.5f, 20), (0.75f, 40), (1f, 60))) + two_man_assault_buggy.collision.z = CollisionZData(Array((7f, 1), (21f, 50), (35f, 150), (42f, 300), (45.5f, 600))) + two_man_assault_buggy.maxForwardSpeed = 85f + two_man_assault_buggy.mass = 52.4f + + skyguard.Name = "skyguard" + skyguard.MaxHealth = 1000 + skyguard.Damageable = true + skyguard.Repairable = true + skyguard.RepairIfDestroyed = false + skyguard.MaxShields = 200 + skyguard.Seats += 0 -> bailableSeat + skyguard.Seats += 1 -> bailableSeat + skyguard.controlledWeapons(seat = 1, weapon = 2) + skyguard.Weapons += 2 -> skyguard_weapon_system + skyguard.MountPoints += 1 -> MountInfo(0) + skyguard.MountPoints += 2 -> MountInfo(0) + skyguard.MountPoints += 3 -> MountInfo(1) + skyguard.subsystems = controlSubsystem + skyguard.TrunkSize = InventoryTile.Tile1511 + skyguard.TrunkOffset = 30 + skyguard.TrunkLocation = Vector3(2.5f, 0f, 0f) + skyguard.AutoPilotSpeeds = (22, 8) + skyguard.DestroyedModel = Some(DestroyedVehicle.Skyguard) + skyguard.JackingDuration = Array(0, 15, 5, 3) + skyguard.RadiationShielding = 0.5f + skyguard.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 200 + Damage1 = 300 + DamageRadius = 8 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + skyguard.DrownAtMaxDepth = true + skyguard.MaxDepth = 1.5f + skyguard.UnderwaterLifespan(suffocation = 5000L, recovery = 2500L) + skyguard.Geometry = GeometryForm.representByCylinder(radius = 1.8867f, height = 1.4375f) + skyguard.collision.avatarCollisionDamageMax = 100 + skyguard.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 5), (0.5f, 20), (0.75f, 40), (1f, 60))) + skyguard.collision.z = CollisionZData(Array((7f, 1), (21f, 50), (35f, 150), (42f, 300), (45.4f, 600))) + skyguard.maxForwardSpeed = 90f + skyguard.mass = 78.9f + + threemanheavybuggy.Name = "threemanheavybuggy" // Marauder + threemanheavybuggy.MaxHealth = 1700 + threemanheavybuggy.Damageable = true + threemanheavybuggy.Repairable = true + threemanheavybuggy.RepairIfDestroyed = false + threemanheavybuggy.MaxShields = 340 + threemanheavybuggy.Seats += 0 -> bailableSeat + threemanheavybuggy.Seats += 1 -> bailableSeat + threemanheavybuggy.Seats += 2 -> bailableSeat + threemanheavybuggy.controlledWeapons(seat = 1, weapon = 3) + threemanheavybuggy.controlledWeapons(seat = 2, weapon = 4) + threemanheavybuggy.Weapons += 3 -> chaingun_p + threemanheavybuggy.Weapons += 4 -> grenade_launcher_marauder + threemanheavybuggy.MountPoints += 1 -> MountInfo(0) + threemanheavybuggy.MountPoints += 2 -> MountInfo(1) + threemanheavybuggy.MountPoints += 3 -> MountInfo(2) + threemanheavybuggy.subsystems = controlSubsystem + threemanheavybuggy.TrunkSize = InventoryTile.Tile1511 + threemanheavybuggy.TrunkOffset = 30 + threemanheavybuggy.TrunkLocation = Vector3(3.01f, 0f, 0f) + threemanheavybuggy.AutoPilotSpeeds = (22, 8) + threemanheavybuggy.DestroyedModel = Some(DestroyedVehicle.ThreeManHeavyBuggy) + threemanheavybuggy.Subtract.Damage1 = 5 + threemanheavybuggy.JackingDuration = Array(0, 20, 7, 5) + threemanheavybuggy.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 200 + Damage1 = 300 + DamageRadius = 10 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + threemanheavybuggy.DrownAtMaxDepth = true + threemanheavybuggy.MaxDepth = 1.83f + threemanheavybuggy.UnderwaterLifespan(suffocation = 5000L, recovery = 2500L) + threemanheavybuggy.Geometry = GeometryForm.representByCylinder(radius = 2.1953f, height = 2.03125f) + threemanheavybuggy.collision.avatarCollisionDamageMax = 100 + threemanheavybuggy.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 15), (0.5f, 30), (0.75f, 60), (1f, 80))) + threemanheavybuggy.collision.z = CollisionZData(Array((6f, 1), (18f, 50), (30f, 150), (36f, 300), (39f, 900))) + threemanheavybuggy.maxForwardSpeed = 80f + threemanheavybuggy.mass = 96.3f + + twomanheavybuggy.Name = "twomanheavybuggy" // Enforcer + twomanheavybuggy.MaxHealth = 1800 + twomanheavybuggy.Damageable = true + twomanheavybuggy.Repairable = true + twomanheavybuggy.RepairIfDestroyed = false + twomanheavybuggy.MaxShields = 360 + twomanheavybuggy.Seats += 0 -> bailableSeat + twomanheavybuggy.Seats += 1 -> bailableSeat + twomanheavybuggy.controlledWeapons(seat = 1, weapon = 2) + twomanheavybuggy.Weapons += 2 -> advanced_missile_launcher_t + twomanheavybuggy.MountPoints += 1 -> MountInfo(0) + twomanheavybuggy.MountPoints += 2 -> MountInfo(1) + twomanheavybuggy.subsystems = controlSubsystem + twomanheavybuggy.TrunkSize = InventoryTile.Tile1511 + twomanheavybuggy.TrunkOffset = 30 + twomanheavybuggy.TrunkLocation = Vector3(-0.23f, -2.05f, 0f) + twomanheavybuggy.AutoPilotSpeeds = (22, 8) + twomanheavybuggy.DestroyedModel = Some(DestroyedVehicle.TwoManHeavyBuggy) + twomanheavybuggy.RadiationShielding = 0.5f + twomanheavybuggy.Subtract.Damage1 = 5 + twomanheavybuggy.JackingDuration = Array(0, 20, 7, 5) + twomanheavybuggy.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 200 + Damage1 = 300 + DamageRadius = 8 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + twomanheavybuggy.DrownAtMaxDepth = true + twomanheavybuggy.MaxDepth = 1.95f + twomanheavybuggy.UnderwaterLifespan(suffocation = 5000L, recovery = 2500L) + twomanheavybuggy.Geometry = GeometryForm.representByCylinder(radius = 2.60935f, height = 1.79688f) + twomanheavybuggy.collision.avatarCollisionDamageMax = 100 + twomanheavybuggy.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 12), (0.5f, 30), (0.75f, 55), (1f, 80))) + twomanheavybuggy.collision.z = CollisionZData(Array((6f, 1), (18f, 50), (30f, 150), (36f, 300), (39f, 900))) + twomanheavybuggy.maxForwardSpeed = 80f + twomanheavybuggy.mass = 83.2f + + twomanhoverbuggy.Name = "twomanhoverbuggy" // Thresher + twomanhoverbuggy.MaxHealth = 1600 + twomanhoverbuggy.Damageable = true + twomanhoverbuggy.Repairable = true + twomanhoverbuggy.RepairIfDestroyed = false + twomanhoverbuggy.MaxShields = 320 + twomanhoverbuggy.Seats += 0 -> bailableSeat + twomanhoverbuggy.Seats += 1 -> bailableSeat + twomanhoverbuggy.controlledWeapons(seat = 1, weapon = 2) + twomanhoverbuggy.Weapons += 2 -> flux_cannon_thresher + twomanhoverbuggy.MountPoints += 1 -> MountInfo(0) + twomanhoverbuggy.MountPoints += 2 -> MountInfo(1) + twomanhoverbuggy.subsystems = controlSubsystem + twomanhoverbuggy.TrunkSize = InventoryTile.Tile1511 + twomanhoverbuggy.TrunkOffset = 30 + twomanhoverbuggy.TrunkLocation = Vector3(-3.39f, 0f, 0f) + twomanhoverbuggy.AutoPilotSpeeds = (22, 10) + twomanhoverbuggy.DestroyedModel = Some(DestroyedVehicle.TwoManHoverBuggy) + twomanhoverbuggy.RadiationShielding = 0.5f + twomanhoverbuggy.Subtract.Damage1 = 5 + twomanhoverbuggy.JackingDuration = Array(0, 20, 7, 5) + twomanhoverbuggy.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 200 + Damage1 = 300 + DamageRadius = 10 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + twomanhoverbuggy.DrownAtMaxDepth = false //true? + twomanhoverbuggy.MaxDepth = 2f + twomanhoverbuggy.UnderwaterLifespan( + suffocation = 45000L, + recovery = 5000L + ) //but the thresher hovers over water, so ...? + twomanhoverbuggy.Geometry = GeometryForm.representByCylinder(radius = 2.1875f, height = 2.01563f) + twomanhoverbuggy.collision.avatarCollisionDamageMax = 125 + twomanhoverbuggy.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 13), (0.5f, 35), (0.75f, 65), (1f, 90))) + twomanhoverbuggy.collision.z = CollisionZData(Array((6f, 1), (18f, 50), (30f, 150), (36f, 300), (39f, 900))) + twomanhoverbuggy.maxForwardSpeed = 85f + twomanhoverbuggy.mass = 55.5f + + mediumtransport.Name = "mediumtransport" // Deliverer + mediumtransport.MaxHealth = 2500 + mediumtransport.Damageable = true + mediumtransport.Repairable = true + mediumtransport.RepairIfDestroyed = false + mediumtransport.MaxShields = 500 + mediumtransport.Seats += 0 -> driverSeat + mediumtransport.Seats += 1 -> normalSeat + mediumtransport.Seats += 2 -> normalSeat + mediumtransport.Seats += 3 -> normalSeat + mediumtransport.Seats += 4 -> normalSeat + mediumtransport.controlledWeapons(seat = 1, weapon = 5) + mediumtransport.controlledWeapons(seat = 2, weapon = 6) + mediumtransport.Weapons += 5 -> mediumtransport_weapon_systemA + mediumtransport.Weapons += 6 -> mediumtransport_weapon_systemB + mediumtransport.MountPoints += 1 -> MountInfo(0) + mediumtransport.MountPoints += 2 -> MountInfo(1) + mediumtransport.MountPoints += 3 -> MountInfo(2) + mediumtransport.MountPoints += 4 -> MountInfo(3) + mediumtransport.MountPoints += 5 -> MountInfo(4) + mediumtransport.subsystems = controlSubsystem + mediumtransport.TrunkSize = InventoryTile.Tile1515 + mediumtransport.TrunkOffset = 30 + mediumtransport.TrunkLocation = Vector3(-3.46f, 0f, 0f) + mediumtransport.AutoPilotSpeeds = (18, 6) + mediumtransport.DestroyedModel = Some(DestroyedVehicle.MediumTransport) + mediumtransport.Subtract.Damage1 = 7 + mediumtransport.JackingDuration = Array(0, 25, 8, 5) + mediumtransport.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 200 + Damage1 = 300 + DamageRadius = 12 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + mediumtransport.DrownAtMaxDepth = false + mediumtransport.MaxDepth = 2f + mediumtransport.UnderwaterLifespan(suffocation = -1, recovery = -1) + mediumtransport.Geometry = delivererForm + mediumtransport.collision.avatarCollisionDamageMax = 120 + mediumtransport.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 35), (0.5f, 60), (0.75f, 110), (1f, 175))) + mediumtransport.collision.z = CollisionZData(Array((5f, 1), (15f, 50), (25f, 200), (30f, 750), (32.5f, 2000))) + mediumtransport.maxForwardSpeed = 70f + mediumtransport.mass = 108.5f + + battlewagon.Name = "battlewagon" // Raider + battlewagon.MaxHealth = 2500 + battlewagon.Damageable = true + battlewagon.Repairable = true + battlewagon.RepairIfDestroyed = false + battlewagon.MaxShields = 500 + battlewagon.Seats += 0 -> driverSeat + battlewagon.Seats += 1 -> normalSeat + battlewagon.Seats += 2 -> normalSeat + battlewagon.Seats += 3 -> normalSeat + battlewagon.Seats += 4 -> normalSeat + battlewagon.controlledWeapons(seat = 1, weapon = 5) + battlewagon.controlledWeapons(seat = 2, weapon = 6) + battlewagon.controlledWeapons(seat = 3, weapon = 7) + battlewagon.controlledWeapons(seat = 4, weapon = 8) + battlewagon.Weapons += 5 -> battlewagon_weapon_systema + battlewagon.Weapons += 6 -> battlewagon_weapon_systemb + battlewagon.Weapons += 7 -> battlewagon_weapon_systemc + battlewagon.Weapons += 8 -> battlewagon_weapon_systemd + battlewagon.MountPoints += 1 -> MountInfo(0) + battlewagon.MountPoints += 2 -> MountInfo(1) + battlewagon.MountPoints += 3 -> MountInfo(2) + battlewagon.MountPoints += 4 -> MountInfo(3) + battlewagon.MountPoints += 5 -> MountInfo(4) + battlewagon.subsystems = controlSubsystem + battlewagon.TrunkSize = InventoryTile.Tile1515 + battlewagon.TrunkOffset = 30 + battlewagon.TrunkLocation = Vector3(-3.46f, 0f, 0f) + battlewagon.AutoPilotSpeeds = (18, 6) + battlewagon.DestroyedModel = Some(DestroyedVehicle.MediumTransport) + battlewagon.JackingDuration = Array(0, 25, 8, 5) + battlewagon.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 200 + Damage1 = 300 + DamageRadius = 12 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + battlewagon.DrownAtMaxDepth = false + battlewagon.MaxDepth = 2f + battlewagon.UnderwaterLifespan(suffocation = -1, recovery = -1) + battlewagon.Geometry = delivererForm + battlewagon.collision.avatarCollisionDamageMax = 120 + battlewagon.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 35), (0.5f, 60), (0.75f, 110), (1f, 175))) //inherited from mediumtransport + battlewagon.collision.z = CollisionZData(Array((5f, 1), (15f, 50), (25f, 200), (30f, 750), (32.5f, 2000))) //inherited from mediumtransport + battlewagon.maxForwardSpeed = 65f + battlewagon.mass = 108.5f + + thunderer.Name = "thunderer" + thunderer.MaxHealth = 2500 + thunderer.Damageable = true + thunderer.Repairable = true + thunderer.RepairIfDestroyed = false + thunderer.MaxShields = 500 + thunderer.Seats += 0 -> driverSeat + thunderer.Seats += 1 -> normalSeat + thunderer.Seats += 2 -> normalSeat + thunderer.Seats += 3 -> normalSeat + thunderer.Seats += 4 -> normalSeat + thunderer.Weapons += 5 -> thunderer_weapon_systema + thunderer.Weapons += 6 -> thunderer_weapon_systemb + thunderer.controlledWeapons(seat = 1, weapon = 5) + thunderer.controlledWeapons(seat = 2, weapon = 6) + thunderer.MountPoints += 1 -> MountInfo(0) + thunderer.MountPoints += 2 -> MountInfo(1) + thunderer.MountPoints += 3 -> MountInfo(2) + thunderer.MountPoints += 4 -> MountInfo(3) + thunderer.MountPoints += 5 -> MountInfo(4) + thunderer.subsystems = controlSubsystem + thunderer.TrunkSize = InventoryTile.Tile1515 + thunderer.TrunkOffset = 30 + thunderer.TrunkLocation = Vector3(-3.46f, 0f, 0f) + thunderer.AutoPilotSpeeds = (18, 6) + thunderer.DestroyedModel = Some(DestroyedVehicle.MediumTransport) + thunderer.Subtract.Damage1 = 7 + thunderer.JackingDuration = Array(0, 25, 8, 5) + thunderer.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 200 + Damage1 = 300 + DamageRadius = 12 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + thunderer.DrownAtMaxDepth = false + thunderer.MaxDepth = 2f + thunderer.UnderwaterLifespan(suffocation = -1, recovery = -1) + thunderer.Geometry = delivererForm + thunderer.collision.avatarCollisionDamageMax = 120 + thunderer.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 35), (0.5f, 60), (0.75f, 110), (1f, 175))) + thunderer.collision.z = CollisionZData(Array((5f, 1), (15f, 50), (25f, 200), (30f, 750), (32.5f, 2000))) + thunderer.maxForwardSpeed = 65f + thunderer.mass = 108.5f + + aurora.Name = "aurora" + aurora.MaxHealth = 2500 + aurora.Damageable = true + aurora.Repairable = true + aurora.RepairIfDestroyed = false + aurora.MaxShields = 500 + aurora.Seats += 0 -> driverSeat + aurora.Seats += 1 -> normalSeat + aurora.Seats += 2 -> normalSeat + aurora.Seats += 3 -> normalSeat + aurora.Seats += 4 -> normalSeat + aurora.controlledWeapons(seat = 1, weapon = 5) + aurora.controlledWeapons(seat = 2, weapon = 6) + aurora.Weapons += 5 -> aurora_weapon_systema + aurora.Weapons += 6 -> aurora_weapon_systemb + aurora.MountPoints += 1 -> MountInfo(0) + aurora.MountPoints += 2 -> MountInfo(1) + aurora.MountPoints += 3 -> MountInfo(2) + aurora.MountPoints += 4 -> MountInfo(3) + aurora.MountPoints += 5 -> MountInfo(4) + aurora.subsystems = controlSubsystem + aurora.TrunkSize = InventoryTile.Tile1515 + aurora.TrunkOffset = 30 + aurora.TrunkLocation = Vector3(-3.46f, 0f, 0f) + aurora.AutoPilotSpeeds = (18, 6) + aurora.DestroyedModel = Some(DestroyedVehicle.MediumTransport) + aurora.Subtract.Damage1 = 7 + aurora.JackingDuration = Array(0, 25, 8, 5) + aurora.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 200 + Damage1 = 300 + DamageRadius = 12 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + aurora.DrownAtMaxDepth = false + aurora.MaxDepth = 2f + aurora.UnderwaterLifespan(suffocation = -1, recovery = -1) + aurora.Geometry = delivererForm + aurora.collision.avatarCollisionDamageMax = 120 + aurora.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 35), (0.5f, 60), (0.75f, 110), (1f, 175))) + aurora.collision.z = CollisionZData(Array((5f, 1), (15f, 50), (25f, 200), (30f, 750), (32.5f, 2000))) + aurora.maxForwardSpeed = 65f + aurora.mass = 108.5f + + apc_tr.Name = "apc_tr" // Juggernaut + apc_tr.MaxHealth = 6000 + apc_tr.Damageable = true + apc_tr.Repairable = true + apc_tr.RepairIfDestroyed = false + apc_tr.MaxShields = 1200 + apc_tr.Seats += 0 -> normalSeat + apc_tr.Seats += 1 -> normalSeat + apc_tr.Seats += 2 -> normalSeat + apc_tr.Seats += 3 -> normalSeat + apc_tr.Seats += 4 -> normalSeat + apc_tr.Seats += 5 -> normalSeat + apc_tr.Seats += 6 -> normalSeat + apc_tr.Seats += 7 -> normalSeat + apc_tr.Seats += 8 -> normalSeat + apc_tr.Seats += 9 -> maxOnlySeat + apc_tr.Seats += 10 -> maxOnlySeat + apc_tr.controlledWeapons(seat = 1, weapon = 11) + apc_tr.controlledWeapons(seat = 2, weapon = 12) + apc_tr.controlledWeapons(seat = 5, weapon = 15) + apc_tr.controlledWeapons(seat = 6, weapon = 16) + apc_tr.controlledWeapons(seat = 7, weapon = 13) + apc_tr.controlledWeapons(seat = 8, weapon = 14) + apc_tr.Weapons += 11 -> apc_weapon_systemc_tr + apc_tr.Weapons += 12 -> apc_weapon_systemb + apc_tr.Weapons += 13 -> apc_weapon_systema + apc_tr.Weapons += 14 -> apc_weapon_systemd_tr + apc_tr.Weapons += 15 -> apc_ballgun_r + apc_tr.Weapons += 16 -> apc_ballgun_l + apc_tr.MountPoints += 1 -> MountInfo(0) + apc_tr.MountPoints += 2 -> MountInfo(0) + apc_tr.MountPoints += 3 -> MountInfo(1) + apc_tr.MountPoints += 4 -> MountInfo(2) + apc_tr.MountPoints += 5 -> MountInfo(3) + apc_tr.MountPoints += 6 -> MountInfo(4) + apc_tr.MountPoints += 7 -> MountInfo(5) + apc_tr.MountPoints += 8 -> MountInfo(6) + apc_tr.MountPoints += 9 -> MountInfo(7) + apc_tr.MountPoints += 10 -> MountInfo(8) + apc_tr.MountPoints += 11 -> MountInfo(9) + apc_tr.MountPoints += 12 -> MountInfo(10) + apc_tr.subsystems = controlSubsystem + apc_tr.TrunkSize = InventoryTile.Tile2016 + apc_tr.TrunkOffset = 30 + apc_tr.TrunkLocation = Vector3(-5.82f, 0f, 0f) + apc_tr.AutoPilotSpeeds = (16, 6) + apc_tr.DestroyedModel = Some(DestroyedVehicle.Apc) + apc_tr.JackingDuration = Array(0, 45, 15, 10) + apc_tr.RadiationShielding = 0.5f + apc_tr.Subtract.Damage1 = 10 + apc_tr.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 300 + Damage1 = 450 + DamageRadius = 15 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + apc_tr.DrownAtMaxDepth = true + apc_tr.MaxDepth = 3 + apc_tr.UnderwaterLifespan(suffocation = 15000L, recovery = 7500L) + apc_tr.Geometry = apcForm + apc_tr.MaxCapacitor = 300 + apc_tr.CapacitorRecharge = 1 + apc_tr.collision.avatarCollisionDamageMax = 300 + apc_tr.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 10), (0.5f, 40), (0.75f, 70), (1f, 110))) + apc_tr.collision.z = CollisionZData(Array((2f, 1), (6f, 50), (10f, 300), (12f, 1000), (13f, 3000))) + apc_tr.maxForwardSpeed = 60f + apc_tr.mass = 128.4f + + apc_nc.Name = "apc_nc" // Vindicator + apc_nc.MaxHealth = 6000 + apc_nc.Damageable = true + apc_nc.Repairable = true + apc_nc.RepairIfDestroyed = false + apc_nc.MaxShields = 1200 + apc_nc.Seats += 0 -> normalSeat + apc_nc.Seats += 1 -> normalSeat + apc_nc.Seats += 2 -> normalSeat + apc_nc.Seats += 3 -> normalSeat + apc_nc.Seats += 4 -> normalSeat + apc_nc.Seats += 5 -> normalSeat + apc_nc.Seats += 6 -> normalSeat + apc_nc.Seats += 7 -> normalSeat + apc_nc.Seats += 8 -> normalSeat + apc_nc.Seats += 9 -> maxOnlySeat + apc_nc.Seats += 10 -> maxOnlySeat + apc_nc.controlledWeapons(seat = 1, weapon = 11) + apc_nc.controlledWeapons(seat = 2, weapon = 12) + apc_nc.controlledWeapons(seat = 5, weapon = 15) + apc_nc.controlledWeapons(seat = 6, weapon = 16) + apc_nc.controlledWeapons(seat = 7, weapon = 13) + apc_nc.controlledWeapons(seat = 8, weapon = 14) + apc_nc.Weapons += 11 -> apc_weapon_systemc_nc + apc_nc.Weapons += 12 -> apc_weapon_systemb + apc_nc.Weapons += 13 -> apc_weapon_systema + apc_nc.Weapons += 14 -> apc_weapon_systemd_nc + apc_nc.Weapons += 15 -> apc_ballgun_r + apc_nc.Weapons += 16 -> apc_ballgun_l + apc_nc.MountPoints += 1 -> MountInfo(0) + apc_nc.MountPoints += 2 -> MountInfo(0) + apc_nc.MountPoints += 3 -> MountInfo(1) + apc_nc.MountPoints += 4 -> MountInfo(2) + apc_nc.MountPoints += 5 -> MountInfo(3) + apc_nc.MountPoints += 6 -> MountInfo(4) + apc_nc.MountPoints += 7 -> MountInfo(5) + apc_nc.MountPoints += 8 -> MountInfo(6) + apc_nc.MountPoints += 9 -> MountInfo(7) + apc_nc.MountPoints += 10 -> MountInfo(8) + apc_nc.MountPoints += 11 -> MountInfo(9) + apc_nc.MountPoints += 12 -> MountInfo(10) + apc_nc.subsystems = controlSubsystem + apc_nc.TrunkSize = InventoryTile.Tile2016 + apc_nc.TrunkOffset = 30 + apc_nc.TrunkLocation = Vector3(-5.82f, 0f, 0f) + apc_nc.AutoPilotSpeeds = (16, 6) + apc_nc.DestroyedModel = Some(DestroyedVehicle.Apc) + apc_nc.JackingDuration = Array(0, 45, 15, 10) + apc_nc.RadiationShielding = 0.5f + apc_nc.Subtract.Damage1 = 10 + apc_nc.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 300 + Damage1 = 450 + DamageRadius = 15 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + apc_nc.DrownAtMaxDepth = true + apc_nc.MaxDepth = 3 + apc_nc.UnderwaterLifespan(suffocation = 15000L, recovery = 7500L) + apc_nc.Geometry = apcForm + apc_nc.MaxCapacitor = 300 + apc_nc.CapacitorRecharge = 1 + apc_nc.collision.avatarCollisionDamageMax = 300 + apc_nc.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 10), (0.5f, 40), (0.75f, 70), (1f, 110))) + apc_nc.collision.z = CollisionZData(Array((2f, 1), (6f, 50), (10f, 300), (12f, 1000), (13f, 3000))) + apc_nc.maxForwardSpeed = 60f + apc_nc.mass = 128.4f + + apc_vs.Name = "apc_vs" // Leviathan + apc_vs.MaxHealth = 6000 + apc_vs.Damageable = true + apc_vs.Repairable = true + apc_vs.RepairIfDestroyed = false + apc_vs.MaxShields = 1200 + apc_vs.Seats += 0 -> normalSeat + apc_vs.Seats += 1 -> normalSeat + apc_vs.Seats += 2 -> normalSeat + apc_vs.Seats += 3 -> normalSeat + apc_vs.Seats += 4 -> normalSeat + apc_vs.Seats += 5 -> normalSeat + apc_vs.Seats += 6 -> normalSeat + apc_vs.Seats += 7 -> normalSeat + apc_vs.Seats += 8 -> normalSeat + apc_vs.Seats += 9 -> maxOnlySeat + apc_vs.Seats += 10 -> maxOnlySeat + apc_vs.controlledWeapons(seat = 1, weapon = 11) + apc_vs.controlledWeapons(seat = 2, weapon = 12) + apc_vs.controlledWeapons(seat = 5, weapon = 15) + apc_vs.controlledWeapons(seat = 6, weapon = 16) + apc_vs.controlledWeapons(seat = 7, weapon = 13) + apc_vs.controlledWeapons(seat = 8, weapon = 14) + apc_vs.Weapons += 11 -> apc_weapon_systemc_vs + apc_vs.Weapons += 12 -> apc_weapon_systemb + apc_vs.Weapons += 13 -> apc_weapon_systema + apc_vs.Weapons += 14 -> apc_weapon_systemd_vs + apc_vs.Weapons += 15 -> apc_ballgun_r + apc_vs.Weapons += 16 -> apc_ballgun_l + apc_vs.MountPoints += 1 -> MountInfo(0) + apc_vs.MountPoints += 2 -> MountInfo(0) + apc_vs.MountPoints += 3 -> MountInfo(1) + apc_vs.MountPoints += 4 -> MountInfo(2) + apc_vs.MountPoints += 5 -> MountInfo(3) + apc_vs.MountPoints += 6 -> MountInfo(4) + apc_vs.MountPoints += 7 -> MountInfo(5) + apc_vs.MountPoints += 8 -> MountInfo(6) + apc_vs.MountPoints += 9 -> MountInfo(7) + apc_vs.MountPoints += 10 -> MountInfo(8) + apc_vs.MountPoints += 11 -> MountInfo(9) + apc_vs.MountPoints += 12 -> MountInfo(10) + apc_vs.subsystems = controlSubsystem + apc_vs.TrunkSize = InventoryTile.Tile2016 + apc_vs.TrunkOffset = 30 + apc_vs.TrunkLocation = Vector3(-5.82f, 0f, 0f) + apc_vs.AutoPilotSpeeds = (16, 6) + apc_vs.DestroyedModel = Some(DestroyedVehicle.Apc) + apc_vs.JackingDuration = Array(0, 45, 15, 10) + apc_vs.RadiationShielding = 0.5f + apc_vs.Subtract.Damage1 = 10 + apc_vs.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 300 + Damage1 = 450 + DamageRadius = 15 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + apc_vs.DrownAtMaxDepth = true + apc_vs.MaxDepth = 3 + apc_vs.UnderwaterLifespan(suffocation = 15000L, recovery = 7500L) + apc_vs.Geometry = apcForm + apc_vs.MaxCapacitor = 300 + apc_vs.CapacitorRecharge = 1 + apc_vs.collision.avatarCollisionDamageMax = 300 + apc_vs.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 10), (0.5f, 40), (0.75f, 70), (1f, 110))) + apc_vs.collision.z = CollisionZData(Array((2f, 1), (6f, 50), (10f, 300), (12f, 1000), (13f, 3000))) + apc_vs.maxForwardSpeed = 60f + apc_vs.mass = 128.4f + + lightning.Name = "lightning" + lightning.MaxHealth = 2000 + lightning.Damageable = true + lightning.Repairable = true + lightning.RepairIfDestroyed = false + lightning.MaxShields = 400 + lightning.Seats += 0 -> driverSeat + lightning.controlledWeapons(seat = 0, weapon = 1) + lightning.Weapons += 1 -> lightning_weapon_system + lightning.MountPoints += 1 -> MountInfo(0) + lightning.MountPoints += 2 -> MountInfo(0) + lightning.subsystems = controlSubsystem + lightning.TrunkSize = InventoryTile.Tile1511 + lightning.TrunkOffset = 30 + lightning.TrunkLocation = Vector3(-3f, 0f, 0f) + lightning.AutoPilotSpeeds = (20, 8) + lightning.DestroyedModel = Some(DestroyedVehicle.Lightning) + lightning.RadiationShielding = 0.5f + lightning.Subtract.Damage1 = 7 + lightning.JackingDuration = Array(0, 20, 7, 5) + lightning.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 250 + Damage1 = 375 + DamageRadius = 10 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + lightning.DrownAtMaxDepth = true + lightning.MaxDepth = 1.38f + lightning.UnderwaterLifespan(suffocation = 12000L, recovery = 6000L) + lightning.Geometry = GeometryForm.representByCylinder(radius = 2.5078f, height = 1.79688f) + lightning.collision.avatarCollisionDamageMax = 150 + lightning.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 10), (0.5f, 25), (0.75f, 50), (1f, 80))) + lightning.collision.z = CollisionZData(Array((6f, 1), (18f, 50), (30f, 150), (36f, 300), (39f, 750))) + lightning.maxForwardSpeed = 74f + lightning.mass = 100.2f + + prowler.Name = "prowler" + prowler.MaxHealth = 4800 + prowler.Damageable = true + prowler.Repairable = true + prowler.RepairIfDestroyed = false + prowler.MaxShields = 960 + prowler.Seats += 0 -> driverSeat + prowler.Seats += 1 -> normalSeat + prowler.Seats += 2 -> normalSeat + prowler.controlledWeapons(seat = 1, weapon = 3) + prowler.controlledWeapons(seat = 2, weapon = 4) + prowler.Weapons += 3 -> prowler_weapon_systemA + prowler.Weapons += 4 -> prowler_weapon_systemB + prowler.MountPoints += 1 -> MountInfo(0) + prowler.MountPoints += 2 -> MountInfo(1) + prowler.MountPoints += 3 -> MountInfo(2) + prowler.subsystems = controlSubsystem + prowler.TrunkSize = InventoryTile.Tile1511 + prowler.TrunkOffset = 30 + prowler.TrunkLocation = Vector3(-4.71f, 0f, 0f) + prowler.AutoPilotSpeeds = (14, 6) + prowler.DestroyedModel = Some(DestroyedVehicle.Prowler) + prowler.RadiationShielding = 0.5f + prowler.Subtract.Damage1 = 9 + prowler.JackingDuration = Array(0, 30, 10, 5) + prowler.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 250 + Damage1 = 375 + DamageRadius = 12 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + prowler.DrownAtMaxDepth = true + prowler.MaxDepth = 3 + prowler.UnderwaterLifespan(suffocation = 12000L, recovery = 6000L) + prowler.Geometry = GeometryForm.representByCylinder(radius = 3.461f, height = 3.48438f) + prowler.collision.avatarCollisionDamageMax = 300 + prowler.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 15), (0.5f, 40), (0.75f, 75), (1f, 100))) + prowler.collision.z = CollisionZData(Array((5f, 1), (15f, 50), (25f, 250), (30f, 600), (32.5f, 1500))) + prowler.maxForwardSpeed = 57f + prowler.mass = 510.5f + + vanguard.Name = "vanguard" + vanguard.MaxHealth = 5400 + vanguard.Damageable = true + vanguard.Repairable = true + vanguard.RepairIfDestroyed = false + vanguard.MaxShields = 1080 + vanguard.Seats += 0 -> driverSeat + vanguard.Seats += 1 -> normalSeat + vanguard.controlledWeapons(seat = 1, weapon = 2) + vanguard.Weapons += 2 -> vanguard_weapon_system + vanguard.MountPoints += 1 -> MountInfo(0) + vanguard.MountPoints += 2 -> MountInfo(1) + vanguard.subsystems = controlSubsystem + vanguard.TrunkSize = InventoryTile.Tile1511 + vanguard.TrunkOffset = 30 + vanguard.TrunkLocation = Vector3(-4.84f, 0f, 0f) + vanguard.AutoPilotSpeeds = (16, 6) + vanguard.DestroyedModel = Some(DestroyedVehicle.Vanguard) + vanguard.RadiationShielding = 0.5f + vanguard.Subtract.Damage1 = 9 + vanguard.JackingDuration = Array(0, 30, 10, 5) + vanguard.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 250 + Damage1 = 375 + DamageRadius = 12 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + vanguard.DrownAtMaxDepth = true + vanguard.MaxDepth = 2.7f + vanguard.UnderwaterLifespan(suffocation = 12000L, recovery = 6000L) + vanguard.Geometry = GeometryForm.representByCylinder(radius = 3.8554f, height = 2.60938f) + vanguard.collision.avatarCollisionDamageMax = 300 + vanguard.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 5), (0.5f, 20), (0.75f, 40), (1f, 60))) + vanguard.collision.z = CollisionZData(Array((5f, 1), (15f, 50), (25f, 100), (30f, 250), (32.5f, 600))) + vanguard.maxForwardSpeed = 60f + vanguard.mass = 460.4f + + magrider.Name = "magrider" + magrider.MaxHealth = 4200 + magrider.Damageable = true + magrider.Repairable = true + magrider.RepairIfDestroyed = false + magrider.MaxShields = 840 + magrider.Seats += 0 -> driverSeat + magrider.Seats += 1 -> normalSeat + magrider.controlledWeapons(seat = 0, weapon = 2) + magrider.controlledWeapons(seat = 1, weapon = 3) + magrider.Weapons += 2 -> particle_beam_magrider + magrider.Weapons += 3 -> heavy_rail_beam_magrider + magrider.MountPoints += 1 -> MountInfo(0) + magrider.MountPoints += 2 -> MountInfo(1) + magrider.subsystems = controlSubsystem + magrider.TrunkSize = InventoryTile.Tile1511 + magrider.TrunkOffset = 30 + magrider.TrunkLocation = Vector3(5.06f, 0f, 0f) + magrider.AutoPilotSpeeds = (18, 6) + magrider.DestroyedModel = Some(DestroyedVehicle.Magrider) + magrider.RadiationShielding = 0.5f + magrider.Subtract.Damage1 = 9 + magrider.JackingDuration = Array(0, 30, 10, 5) + magrider.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 250 + Damage1 = 375 + DamageRadius = 12 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + magrider.DrownAtMaxDepth = true + magrider.MaxDepth = 2 + magrider.UnderwaterLifespan(suffocation = 45000L, recovery = 5000L) //but the magrider hovers over water, so ...? + magrider.Geometry = GeometryForm.representByCylinder(radius = 3.3008f, height = 3.26562f) + magrider.collision.avatarCollisionDamageMax = 225 + magrider.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 35), (0.5f, 70), (0.75f, 90), (1f, 120))) + magrider.collision.z = CollisionZData(Array((5f, 1), (15f, 50), (25f, 250), (30f, 600), (32.5f, 1500))) + magrider.maxForwardSpeed = 65f + magrider.mass = 75.3f + + val utilityConverter = new UtilityVehicleConverter + ant.Name = "ant" + ant.MaxHealth = 2000 + ant.Damageable = true + ant.Repairable = true + ant.RepairIfDestroyed = false + ant.MaxShields = 400 + ant.Seats += 0 -> driverSeat + ant.MountPoints += 1 -> MountInfo(0) + ant.MountPoints += 2 -> MountInfo(0) + ant.subsystems = controlSubsystem + ant.Deployment = true + ant.DeployTime = 1500 + ant.UndeployTime = 1500 + ant.AutoPilotSpeeds = (18, 6) + ant.MaxNtuCapacitor = 1500 + ant.Packet = utilityConverter + ant.DestroyedModel = Some(DestroyedVehicle.Ant) + ant.RadiationShielding = 0.5f + ant.Subtract.Damage1 = 5 + ant.JackingDuration = Array(0, 60, 20, 15) + ant.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 300 + Damage1 = 450 + DamageRadius = 12 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + ant.DrownAtMaxDepth = true + ant.MaxDepth = 2 + ant.UnderwaterLifespan(suffocation = 12000L, recovery = 6000L) + ant.Geometry = GeometryForm.representByCylinder(radius = 2.16795f, height = 2.09376f) //TODO hexahedron + ant.collision.avatarCollisionDamageMax = 50 + ant.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 10), (0.5f, 30), (0.75f, 50), (1f, 70))) + ant.collision.z = CollisionZData(Array((2f, 1), (6f, 50), (10f, 250), (12f, 500), (13f, 750))) + ant.maxForwardSpeed = 65f + ant.mass = 80.5f + + ams.Name = "ams" + ams.MaxHealth = 3000 + ams.Damageable = true + ams.Repairable = true + ams.RepairIfDestroyed = false + ams.MaxShields = 600 + 1 + ams.Seats += 0 -> driverSeat + ams.MountPoints += 1 -> MountInfo(0) + ams.MountPoints += 2 -> MountInfo(0) + ams.Utilities += 1 -> UtilityType.matrix_terminalc + ams.Utilities += 2 -> UtilityType.ams_respawn_tube + ams.Utilities += 3 -> UtilityType.order_terminala + ams.Utilities += 4 -> UtilityType.order_terminalb + ams.subsystems = controlSubsystem + ams.Deployment = true + ams.DeployTime = 2000 + ams.UndeployTime = 2000 + ams.DeconstructionTime = Some(20 minutes) + ams.AutoPilotSpeeds = (18, 6) + ams.Packet = utilityConverter + ams.DestroyedModel = Some(DestroyedVehicle.Ams) + ams.RadiationShielding = 0.5f + ams.Subtract.Damage1 = 10 + ams.JackingDuration = Array(0, 60, 20, 15) + ams.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.Splash + Damage0 = 300 + Damage1 = 450 + DamageRadius = 15 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + ams.DrownAtMaxDepth = true + ams.MaxDepth = 3 + ams.UnderwaterLifespan(suffocation = 5000L, recovery = 5000L) + ams.Geometry = GeometryForm.representByCylinder(radius = 3.0117f, height = 3.39062f) //TODO hexahedron + ams.collision.avatarCollisionDamageMax = 250 + ams.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 10), (0.5f, 40), (0.75f, 60), (1f, 100))) + ams.collision.z = CollisionZData(Array((2f, 1), (6f, 50), (10f, 250), (12f, 805), (13f, 3000))) + ams.maxForwardSpeed = 70f + ams.mass = 136.8f + + val variantConverter = new VariantVehicleConverter + router.Name = "router" + router.MaxHealth = 4000 + router.Damageable = true + router.Repairable = true + router.RepairIfDestroyed = false + router.MaxShields = 800 + router.Seats += 0 -> normalSeat + router.MountPoints += 1 -> MountInfo(0) + router.Utilities += 1 -> UtilityType.teleportpad_terminal + router.Utilities += 2 -> UtilityType.internal_router_telepad_deployable + router.subsystems = controlSubsystem + router.TrunkSize = InventoryTile.Tile1511 + router.TrunkOffset = 30 + router.TrunkLocation = Vector3(0f, 3.4f, 0f) + router.Deployment = true + router.DeployTime = 2000 + router.UndeployTime = 2000 + router.DeconstructionTime = Duration(20, "minutes") + router.AutoPilotSpeeds = (16, 6) + router.Packet = variantConverter + router.DestroyedModel = Some(DestroyedVehicle.Router) + router.RadiationShielding = 0.5f + router.Subtract.Damage1 = 5 + router.JackingDuration = Array(0, 20, 7, 5) + router.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 200 + Damage1 = 300 + DamageRadius = 10 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + router.DrownAtMaxDepth = true + router.MaxDepth = 2 + router.UnderwaterLifespan(suffocation = 45000L, recovery = 5000L) //but the router hovers over water, so ...? + router.Geometry = GeometryForm.representByCylinder(radius = 3.64845f, height = 3.51563f) //TODO hexahedron + router.collision.avatarCollisionDamageMax = 150 //it has to bonk you on the head when it falls? + router.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 13), (0.5f, 35), (0.75f, 65), (1f, 90))) + router.collision.z = CollisionZData(Array((6f, 1), (18f, 50), (30f, 150), (36f, 350), (39f, 900))) + router.maxForwardSpeed = 60f + router.mass = 60f + + switchblade.Name = "switchblade" + switchblade.MaxHealth = 1750 + switchblade.Damageable = true + switchblade.Repairable = true + switchblade.RepairIfDestroyed = false + switchblade.MaxShields = 350 + switchblade.Seats += 0 -> normalSeat + switchblade.controlledWeapons(seat = 0, weapon = 1) + switchblade.Weapons += 1 -> scythe + switchblade.MountPoints += 1 -> MountInfo(0) + switchblade.MountPoints += 2 -> MountInfo(0) + switchblade.subsystems = controlSubsystem + switchblade.TrunkSize = InventoryTile.Tile1511 + switchblade.TrunkOffset = 30 + switchblade.TrunkLocation = Vector3(-2.5f, 0f, 0f) + switchblade.Deployment = true + switchblade.DeployTime = 2000 + switchblade.UndeployTime = 2000 + switchblade.AutoPilotSpeeds = (22, 8) + switchblade.Packet = variantConverter + switchblade.DestroyedModel = Some(DestroyedVehicle.Switchblade) + switchblade.RadiationShielding = 0.5f + switchblade.Subtract.Damage0 = 5 + switchblade.Subtract.Damage1 = 5 + switchblade.JackingDuration = Array(0, 20, 7, 5) + switchblade.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 200 + Damage1 = 300 + DamageRadius = 10 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + switchblade.DrownAtMaxDepth = true + switchblade.MaxDepth = 2 + switchblade.UnderwaterLifespan( + suffocation = 45000L, + recovery = 5000L + ) //but the switchblade hovers over water, so ...? + switchblade.Geometry = GeometryForm.representByCylinder(radius = 2.4335f, height = 2.73438f) + switchblade.collision.avatarCollisionDamageMax = 35 + switchblade.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 13), (0.5f, 35), (0.75f, 65), (1f, 90))) + switchblade.collision.z = CollisionZData(Array((6f, 1), (18f, 50), (30f, 150), (36f, 350), (39f, 800))) + switchblade.maxForwardSpeed = 80f + switchblade.mass = 63.9f + + flail.Name = "flail" + flail.MaxHealth = 2400 + flail.Damageable = true + flail.Repairable = true + flail.RepairIfDestroyed = false + flail.MaxShields = 480 + flail.Seats += 0 -> normalSeat + flail.controlledWeapons(seat = 0, weapon = 1) + flail.Weapons += 1 -> flail_weapon + flail.Utilities += 2 -> UtilityType.targeting_laser_dispenser + flail.MountPoints += 1 -> MountInfo(0) + flail.subsystems = controlSubsystem + flail.TrunkSize = InventoryTile.Tile1511 + flail.TrunkOffset = 30 + flail.TrunkLocation = Vector3(-3.75f, 0f, 0f) + flail.Deployment = true + flail.DeployTime = 5500 + flail.UndeployTime = 5500 + flail.AutoPilotSpeeds = (14, 6) + flail.Packet = variantConverter + flail.DestroyedModel = Some(DestroyedVehicle.Flail) + flail.RadiationShielding = 0.5f + flail.Subtract.Damage1 = 7 + flail.JackingDuration = Array(0, 20, 7, 5) + flail.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 200 + Damage1 = 300 + DamageRadius = 10 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + flail.DrownAtMaxDepth = true + flail.MaxDepth = 2 + flail.UnderwaterLifespan(suffocation = 45000L, recovery = 5000L) //but the flail hovers over water, so ...? + flail.Geometry = GeometryForm.representByCylinder(radius = 2.1875f, height = 2.21875f) + flail.collision.avatarCollisionDamageMax = 175 + flail.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 12), (0.5f, 35), (0.75f, 65), (1f, 90))) + flail.collision.z = CollisionZData(Array((6f, 1), (18f, 50), (30f, 150), (36f, 350), (39f, 900))) + flail.maxForwardSpeed = 55f + flail.mass = 73.5f + } + + /** + * Initialize flight `VehicleDefinition` globals. + */ + private def init_flight_vehicles(): Unit = { + val liberatorForm = GeometryForm.representByCylinder(radius = 3.74615f, height = 2.51563f) _ + val bailableSeat = new SeatDefinition() { + bailable = true + } + + val flightSubsystems = List(VehicleSubsystemEntry.Controls, VehicleSubsystemEntry.Ejection) + + val variantConverter = new VariantVehicleConverter + mosquito.Name = "mosquito" + mosquito.MaxHealth = 665 + mosquito.Damageable = true + mosquito.Repairable = true + mosquito.RepairIfDestroyed = false + mosquito.MaxShields = 133 + mosquito.CanFly = true + mosquito.Seats += 0 -> bailableSeat + mosquito.controlledWeapons(seat = 0, weapon = 1) + mosquito.Weapons += 1 -> rotarychaingun_mosquito + mosquito.MountPoints += 1 -> MountInfo(0) + mosquito.MountPoints += 2 -> MountInfo(0) + mosquito.subsystems = flightSubsystems :+ VehicleSubsystemEntry.MosquitoRadar + mosquito.TrunkSize = InventoryTile.Tile1111 + mosquito.TrunkOffset = 30 + mosquito.TrunkLocation = Vector3(-4.6f, 0f, 0f) + mosquito.AutoPilotSpeeds = (0, 6) + mosquito.Packet = variantConverter + mosquito.DestroyedModel = Some(DestroyedVehicle.Mosquito) + mosquito.JackingDuration = Array(0, 20, 7, 5) + mosquito.RadiationShielding = 0.5f + mosquito.DamageUsing = DamageCalculations.AgainstAircraft + mosquito.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 200 + Damage1 = 300 + DamageRadius = 10 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + mosquito.DrownAtMaxDepth = true + mosquito.MaxDepth = 2 //flying vehicles will automatically disable + mosquito.Geometry = GeometryForm.representByCylinder(radius = 2.72108f, height = 2.5f) + mosquito.collision.avatarCollisionDamageMax = 50 + mosquito.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 50), (0.5f, 100), (0.75f, 150), (1f, 200))) + mosquito.collision.z = CollisionZData(Array((3f, 1), (9f, 25), (15f, 50), (18f, 75), (19.5f, 100))) + mosquito.maxForwardSpeed = 120f + mosquito.mass = 53.6f + + lightgunship.Name = "lightgunship" // Reaver + lightgunship.MaxHealth = 855 // Temporary - Correct Reaver Health from pre-"Coder Madness 2" Event + lightgunship.Damageable = true + lightgunship.Repairable = true + lightgunship.RepairIfDestroyed = false + lightgunship.MaxShields = 171 // Temporary - Correct Reaver Shields from pre-"Coder Madness 2" Event + lightgunship.CanFly = true + lightgunship.Seats += 0 -> bailableSeat + lightgunship.controlledWeapons(seat = 0, weapon = 1) + lightgunship.Weapons += 1 -> lightgunship_weapon_system + lightgunship.MountPoints += 1 -> MountInfo(0) + lightgunship.MountPoints += 2 -> MountInfo(0) + lightgunship.subsystems = flightSubsystems + lightgunship.TrunkSize = InventoryTile.Tile1511 + lightgunship.TrunkOffset = 30 + lightgunship.TrunkLocation = Vector3(-5.61f, 0f, 0f) + lightgunship.AutoPilotSpeeds = (0, 4) + lightgunship.Packet = variantConverter + lightgunship.DestroyedModel = Some(DestroyedVehicle.LightGunship) + lightgunship.RadiationShielding = 0.5f + lightgunship.Subtract.Damage1 = 3 + lightgunship.JackingDuration = Array(0, 30, 10, 5) + lightgunship.DamageUsing = DamageCalculations.AgainstAircraft + lightgunship.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 250 + Damage1 = 375 + DamageRadius = 12 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + lightgunship.DrownAtMaxDepth = true + lightgunship.MaxDepth = 2 //flying vehicles will automatically disable + lightgunship.Geometry = GeometryForm.representByCylinder(radius = 2.375f, height = 1.98438f) + lightgunship.collision.avatarCollisionDamageMax = 75 + lightgunship.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 60), (0.5f, 120), (0.75f, 180), (1f, 250))) + lightgunship.collision.z = CollisionZData(Array((3f, 1), (9f, 30), (15f, 60), (18f, 90), (19.5f, 125))) + lightgunship.maxForwardSpeed = 104f + lightgunship.mass = 51.1f + + wasp.Name = "wasp" + wasp.MaxHealth = 515 + wasp.Damageable = true + wasp.Repairable = true + wasp.RepairIfDestroyed = false + wasp.MaxShields = 103 + wasp.CanFly = true + wasp.Seats += 0 -> bailableSeat + wasp.controlledWeapons(seat = 0, weapon = 1) + wasp.Weapons += 1 -> wasp_weapon_system + wasp.MountPoints += 1 -> MountInfo(0) + wasp.MountPoints += 2 -> MountInfo(0) + wasp.subsystems = flightSubsystems + wasp.TrunkSize = InventoryTile.Tile1111 + wasp.TrunkOffset = 30 + wasp.TrunkLocation = Vector3(-4.6f, 0f, 0f) + wasp.AutoPilotSpeeds = (0, 6) + wasp.Packet = variantConverter + wasp.DestroyedModel = Some(DestroyedVehicle.Mosquito) //set_resource_parent wasp game_objects mosquito + wasp.JackingDuration = Array(0, 20, 7, 5) + wasp.DamageUsing = DamageCalculations.AgainstAircraft + wasp.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 200 + Damage1 = 300 + DamageRadius = 10 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + wasp.DrownAtMaxDepth = true + wasp.MaxDepth = 2 //flying vehicles will automatically disable + wasp.Geometry = GeometryForm.representByCylinder(radius = 2.88675f, height = 2.5f) + wasp.collision.avatarCollisionDamageMax = 50 //mosquito numbers + wasp.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 50), (0.5f, 100), (0.75f, 150), (1f, 200))) //mosquito numbers + wasp.collision.z = CollisionZData(Array((3f, 1), (9f, 25), (15f, 50), (18f, 75), (19.5f, 100))) //mosquito numbers + wasp.maxForwardSpeed = 120f + wasp.mass = 53.6f + + liberator.Name = "liberator" + liberator.MaxHealth = 2500 + liberator.Damageable = true + liberator.Repairable = true + liberator.RepairIfDestroyed = false + liberator.MaxShields = 500 + liberator.CanFly = true + liberator.Seats += 0 -> bailableSeat //new SeatDefinition() + liberator.Seats += 1 -> bailableSeat + liberator.Seats += 2 -> bailableSeat + liberator.controlledWeapons(seat = 0, weapon = 3) + liberator.controlledWeapons(seat = 1, weapon = 4) + liberator.controlledWeapons(seat = 2, weapon = 5) + liberator.Weapons += 3 -> liberator_weapon_system + liberator.Weapons += 4 -> liberator_bomb_bay + liberator.Weapons += 5 -> liberator_25mm_cannon + liberator.MountPoints += 1 -> MountInfo(0) + liberator.MountPoints += 2 -> MountInfo(1) + liberator.MountPoints += 3 -> MountInfo(1) + liberator.MountPoints += 4 -> MountInfo(2) + liberator.subsystems = flightSubsystems + liberator.TrunkSize = InventoryTile.Tile1515 + liberator.TrunkOffset = 30 + liberator.TrunkLocation = Vector3(-0.76f, -1.88f, 0f) + liberator.AutoPilotSpeeds = (0, 4) + liberator.Packet = variantConverter + liberator.DestroyedModel = Some(DestroyedVehicle.Liberator) + liberator.RadiationShielding = 0.5f + liberator.Subtract.Damage1 = 5 + liberator.JackingDuration = Array(0, 30, 10, 5) + liberator.DamageUsing = DamageCalculations.AgainstAircraft + liberator.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 250 + Damage1 = 375 + DamageRadius = 12 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + liberator.DrownAtMaxDepth = true + liberator.MaxDepth = 2 //flying vehicles will automatically disable + liberator.Geometry = liberatorForm + liberator.collision.avatarCollisionDamageMax = 100 + liberator.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 60), (0.5f, 120), (0.75f, 180), (1f, 250))) + liberator.collision.z = CollisionZData(Array((3f, 1), (9f, 30), (15f, 60), (18f, 90), (19.5f, 125))) + liberator.maxForwardSpeed = 90f + liberator.mass = 82f + + vulture.Name = "vulture" + vulture.MaxHealth = 2500 + vulture.Damageable = true + vulture.Repairable = true + vulture.RepairIfDestroyed = false + vulture.MaxShields = 500 + vulture.CanFly = true + vulture.Seats += 0 -> bailableSeat //new SeatDefinition() + vulture.Seats += 1 -> bailableSeat + vulture.Seats += 2 -> bailableSeat + vulture.controlledWeapons(seat = 0, weapon = 3) + vulture.controlledWeapons(seat = 1, weapon = 4) + vulture.controlledWeapons(seat = 2, weapon = 5) + vulture.Weapons += 3 -> vulture_nose_weapon_system + vulture.Weapons += 4 -> vulture_bomb_bay + vulture.Weapons += 5 -> vulture_tail_cannon + vulture.MountPoints += 1 -> MountInfo(0) + vulture.MountPoints += 2 -> MountInfo(1) + vulture.MountPoints += 3 -> MountInfo(1) + vulture.MountPoints += 4 -> MountInfo(2) + vulture.subsystems = flightSubsystems + vulture.TrunkSize = InventoryTile.Tile1611 + vulture.TrunkOffset = 30 + vulture.TrunkLocation = Vector3(-0.76f, -1.88f, 0f) + vulture.AutoPilotSpeeds = (0, 4) + vulture.Packet = variantConverter + vulture.DestroyedModel = + Some(DestroyedVehicle.Liberator) //add_property vulture destroyedphysics liberator_destroyed + vulture.RadiationShielding = 0.5f + vulture.Subtract.Damage1 = 5 + vulture.JackingDuration = Array(0, 30, 10, 5) + vulture.DamageUsing = DamageCalculations.AgainstAircraft + vulture.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 250 + Damage1 = 375 + DamageRadius = 12 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + vulture.DrownAtMaxDepth = true + vulture.MaxDepth = 2 //flying vehicles will automatically disable + vulture.Geometry = liberatorForm + vulture.collision.avatarCollisionDamageMax = 100 + vulture.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 60), (0.5f, 120), (0.75f, 180), (1f, 250))) + vulture.collision.z = CollisionZData(Array((3f, 1), (9f, 30), (15f, 60), (18f, 90), (19.5f, 125))) + vulture.maxForwardSpeed = 97f + vulture.mass = 82f + + dropship.Name = "dropship" // Galaxy + dropship.MaxHealth = 5000 + dropship.Damageable = true + dropship.Repairable = true + dropship.RepairDistance = 20 + dropship.RepairIfDestroyed = false + dropship.MaxShields = 1000 + dropship.CanFly = true + dropship.Seats += 0 -> bailableSeat //new SeatDefinition() + dropship.Seats += 1 -> bailableSeat + dropship.Seats += 2 -> bailableSeat + dropship.Seats += 3 -> bailableSeat + dropship.Seats += 4 -> bailableSeat + dropship.Seats += 5 -> bailableSeat + dropship.Seats += 6 -> bailableSeat + dropship.Seats += 7 -> bailableSeat + dropship.Seats += 8 -> bailableSeat + dropship.Seats += 9 -> new SeatDefinition() { + bailable = true + restriction = MaxOnly + } + dropship.Seats += 10 -> new SeatDefinition() { + bailable = true + restriction = MaxOnly + } + dropship.Seats += 11 -> bailableSeat + dropship.controlledWeapons(seat = 1, weapon = 12) + dropship.controlledWeapons(seat = 2, weapon = 13) + dropship.controlledWeapons(seat = 11, weapon = 14) + dropship.Weapons += 12 -> cannon_dropship_20mm + dropship.Weapons += 13 -> cannon_dropship_20mm + dropship.Weapons += 14 -> dropship_rear_turret + dropship.Cargo += 15 -> new CargoDefinition() { + restriction = SmallCargo + } + dropship.MountPoints += 1 -> MountInfo(0) + dropship.MountPoints += 2 -> MountInfo(11) + dropship.MountPoints += 3 -> MountInfo(1) + dropship.MountPoints += 4 -> MountInfo(2) + dropship.MountPoints += 5 -> MountInfo(3) + dropship.MountPoints += 6 -> MountInfo(4) + dropship.MountPoints += 7 -> MountInfo(5) + dropship.MountPoints += 8 -> MountInfo(6) + dropship.MountPoints += 9 -> MountInfo(7) + dropship.MountPoints += 10 -> MountInfo(8) + dropship.MountPoints += 11 -> MountInfo(9) + dropship.MountPoints += 12 -> MountInfo(10) + dropship.MountPoints += 13 -> MountInfo(15) + dropship.subsystems = flightSubsystems + dropship.TrunkSize = InventoryTile.Tile1612 + dropship.TrunkOffset = 30 + dropship.TrunkLocation = Vector3(-7.39f, -4.96f, 0f) + dropship.AutoPilotSpeeds = (0, 4) + dropship.Packet = variantConverter + dropship.DestroyedModel = Some(DestroyedVehicle.Dropship) + dropship.RadiationShielding = 0.5f + dropship.Subtract.Damage1 = 7 + dropship.JackingDuration = Array(0, 60, 20, 10) + dropship.DamageUsing = DamageCalculations.AgainstAircraft + dropship.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 300 + Damage1 = 450 + DamageRadius = 30 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + dropship.DrownAtMaxDepth = true + dropship.MaxDepth = 2 + dropship.Geometry = GeometryForm.representByCylinder(radius = 10.52202f, height = 6.23438f) + dropship.collision.avatarCollisionDamageMax = 300 + dropship.collision.xy = CollisionXYData(Array((0.1f, 5), (0.25f, 125), (0.5f, 250), (0.75f, 500), (1f, 1000))) + dropship.collision.z = CollisionZData(Array((3f, 5), (9f, 125), (15f, 250), (18f, 500), (19.5f, 1000))) + dropship.maxForwardSpeed = 80f + dropship.mass = 133f + + galaxy_gunship.Name = "galaxy_gunship" + galaxy_gunship.MaxHealth = 6000 + galaxy_gunship.Damageable = true + galaxy_gunship.Repairable = true + galaxy_gunship.RepairDistance = 20 + galaxy_gunship.RepairIfDestroyed = false + galaxy_gunship.MaxShields = 1200 + galaxy_gunship.CanFly = true + galaxy_gunship.Seats += 0 -> bailableSeat //new SeatDefinition() + galaxy_gunship.Seats += 1 -> bailableSeat + galaxy_gunship.Seats += 2 -> bailableSeat + galaxy_gunship.Seats += 3 -> bailableSeat + galaxy_gunship.Seats += 4 -> bailableSeat + galaxy_gunship.Seats += 5 -> bailableSeat + galaxy_gunship.controlledWeapons(seat = 1, weapon = 6) + galaxy_gunship.controlledWeapons(seat = 2, weapon = 7) + galaxy_gunship.controlledWeapons(seat = 3, weapon = 8) + galaxy_gunship.controlledWeapons(seat = 4, weapon = 9) + galaxy_gunship.controlledWeapons(seat = 5, weapon = 10) + galaxy_gunship.Weapons += 6 -> galaxy_gunship_cannon + galaxy_gunship.Weapons += 7 -> galaxy_gunship_cannon + galaxy_gunship.Weapons += 8 -> galaxy_gunship_tailgun + galaxy_gunship.Weapons += 9 -> galaxy_gunship_gun + galaxy_gunship.Weapons += 10 -> galaxy_gunship_gun + galaxy_gunship.MountPoints += 1 -> MountInfo(0) + galaxy_gunship.MountPoints += 2 -> MountInfo(3) + galaxy_gunship.MountPoints += 3 -> MountInfo(1) + galaxy_gunship.MountPoints += 4 -> MountInfo(2) + galaxy_gunship.MountPoints += 5 -> MountInfo(4) + galaxy_gunship.MountPoints += 6 -> MountInfo(5) + galaxy_gunship.subsystems = flightSubsystems + galaxy_gunship.TrunkSize = InventoryTile.Tile1816 + galaxy_gunship.TrunkOffset = 30 + galaxy_gunship.TrunkLocation = Vector3(-9.85f, 0f, 0f) + galaxy_gunship.AutoPilotSpeeds = (0, 4) + galaxy_gunship.Packet = variantConverter + galaxy_gunship.DestroyedModel = + Some(DestroyedVehicle.Dropship) //the adb calls out a galaxy_gunship_destroyed but no such asset exists + galaxy_gunship.RadiationShielding = 0.5f + galaxy_gunship.Subtract.Damage1 = 7 + galaxy_gunship.JackingDuration = Array(0, 60, 20, 10) + galaxy_gunship.DamageUsing = DamageCalculations.AgainstAircraft + galaxy_gunship.Modifiers = GalaxyGunshipReduction(0.63f) + galaxy_gunship.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 300 + Damage1 = 450 + DamageRadius = 30 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + galaxy_gunship.DrownAtMaxDepth = true + galaxy_gunship.MaxDepth = 2 + galaxy_gunship.Geometry = GeometryForm.representByCylinder(radius = 9.2382f, height = 5.01562f) + galaxy_gunship.collision.avatarCollisionDamageMax = 300 + galaxy_gunship.collision.xy = CollisionXYData(Array((0.1f, 5), (0.25f, 125), (0.5f, 250), (0.75f, 500), (1f, 1000))) + galaxy_gunship.collision.z = CollisionZData(Array((3f, 5), (9f, 125), (15f, 250), (18f, 500), (19.5f, 1000))) + galaxy_gunship.maxForwardSpeed = 85f + galaxy_gunship.mass = 133f + + lodestar.Name = "lodestar" + lodestar.MaxHealth = 5000 + lodestar.Damageable = true + lodestar.Repairable = true + lodestar.RepairDistance = 20 + lodestar.RepairIfDestroyed = false + lodestar.MaxShields = 1000 + lodestar.CanFly = true + lodestar.Seats += 0 -> bailableSeat + lodestar.MountPoints += 1 -> MountInfo(0) + lodestar.MountPoints += 2 -> MountInfo(1) + lodestar.Cargo += 1 -> new CargoDefinition() + lodestar.Utilities += 2 -> UtilityType.lodestar_repair_terminal + lodestar.UtilityOffset += 2 -> Vector3(0, 20, 0) + lodestar.Utilities += 3 -> UtilityType.lodestar_repair_terminal + lodestar.UtilityOffset += 3 -> Vector3(0, -20, 0) + lodestar.Utilities += 4 -> UtilityType.multivehicle_rearm_terminal + lodestar.UtilityOffset += 4 -> Vector3(0, 20, 0) + lodestar.Utilities += 5 -> UtilityType.multivehicle_rearm_terminal + lodestar.UtilityOffset += 5 -> Vector3(0, -20, 0) + lodestar.Utilities += 6 -> UtilityType.bfr_rearm_terminal + lodestar.UtilityOffset += 6 -> Vector3(0, 20, 0) + lodestar.Utilities += 7 -> UtilityType.bfr_rearm_terminal + lodestar.UtilityOffset += 7 -> Vector3(0, -20, 0) + lodestar.subsystems = flightSubsystems + lodestar.TrunkSize = InventoryTile.Tile1612 + lodestar.TrunkOffset = 30 + lodestar.TrunkLocation = Vector3(6.85f, -6.8f, 0f) + lodestar.AutoPilotSpeeds = (0, 4) + lodestar.Packet = variantConverter + lodestar.DestroyedModel = Some(DestroyedVehicle.Lodestar) + lodestar.RadiationShielding = 0.5f + lodestar.Subtract.Damage1 = 7 + lodestar.JackingDuration = Array(0, 60, 20, 10) + lodestar.DamageUsing = DamageCalculations.AgainstAircraft + lodestar.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 300 + Damage1 = 450 + DamageRadius = 30 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + lodestar.DrownAtMaxDepth = true + lodestar.MaxDepth = 2 + lodestar.Geometry = GeometryForm.representByCylinder(radius = 7.8671f, height = 6.79688f) //TODO hexahedron + lodestar.collision.avatarCollisionDamageMax = 300 + lodestar.collision.xy = CollisionXYData(Array((0.1f, 5), (0.25f, 125), (0.5f, 250), (0.75f, 500), (1f, 1000))) + lodestar.collision.z = CollisionZData(Array((3f, 5), (9f, 125), (15f, 250), (18f, 500), (19.5f, 1000))) + lodestar.maxForwardSpeed = 80f + lodestar.mass = 128.2f + + phantasm.Name = "phantasm" + phantasm.MaxHealth = 2500 + phantasm.Damageable = true + phantasm.Repairable = true + phantasm.RepairIfDestroyed = false + phantasm.MaxShields = 500 + phantasm.CanCloak = true + phantasm.CanFly = true + phantasm.Seats += 0 -> bailableSeat + phantasm.Seats += 1 -> bailableSeat + phantasm.Seats += 2 -> bailableSeat + phantasm.Seats += 3 -> bailableSeat + phantasm.Seats += 4 -> bailableSeat + phantasm.MountPoints += 1 -> MountInfo(0) + phantasm.MountPoints += 2 -> MountInfo(1) + phantasm.MountPoints += 3 -> MountInfo(2) + phantasm.MountPoints += 4 -> MountInfo(3) + phantasm.MountPoints += 5 -> MountInfo(4) + phantasm.subsystems = flightSubsystems + phantasm.TrunkSize = InventoryTile.Tile1107 + phantasm.TrunkOffset = 30 + phantasm.TrunkLocation = Vector3(-6.16f, 0f, 0f) + phantasm.AutoPilotSpeeds = (0, 6) + phantasm.Packet = variantConverter + phantasm.DestroyedModel = None //the adb calls out a phantasm_destroyed but no such asset exists + phantasm.JackingDuration = Array(0, 60, 20, 10) + phantasm.RadiationShielding = 0.5f + phantasm.DamageUsing = DamageCalculations.AgainstAircraft + phantasm.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 100 + Damage1 = 150 + DamageRadius = 12 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + phantasm.DrownAtMaxDepth = true + phantasm.MaxDepth = 2 + phantasm.Geometry = GeometryForm.representByCylinder(radius = 5.2618f, height = 3f) + phantasm.collision.avatarCollisionDamageMax = 100 + phantasm.collision.xy = CollisionXYData(Array((0.1f, 1), (0.25f, 60), (0.5f, 120), (0.75f, 180), (1f, 250))) + phantasm.collision.z = CollisionZData(Array((3f, 1), (9f, 30), (15f, 60), (18f, 90), (19.5f, 125))) + phantasm.maxForwardSpeed = 140f + phantasm.mass = 100f + + droppod.Name = "droppod" + droppod.MaxHealth = 20000 + droppod.Damageable = false + droppod.Repairable = false + droppod.CanFly = true + droppod.Seats += 0 -> new SeatDefinition { + restriction = Unrestricted + } + droppod.MountPoints += 1 -> MountInfo(0) + droppod.TrunkSize = InventoryTile.None + droppod.Packet = new DroppodConverter() + droppod.DeconstructionTime = Some(5 seconds) + droppod.DestroyedModel = None //the adb calls out a droppod; the cyclic nature of this confounds me + droppod.DamageUsing = DamageCalculations.AgainstAircraft + droppod.DrownAtMaxDepth = false + droppod.mass = 2500f + + orbital_shuttle.Name = "orbital_shuttle" + orbital_shuttle.MaxHealth = 20000 + orbital_shuttle.Damageable = false + orbital_shuttle.Repairable = false + orbital_shuttle.CanFly = true + orbital_shuttle.CanBeOwned = None + orbital_shuttle.undergoesDecay = false + orbital_shuttle.Seats += 0 -> new SeatDefinition { + occupancy = 300 + restriction = Unrestricted + } + /* + these are close to the mount point offsets in the ADB; + physically, they correlate to positions in the HART building rather than with the shuttle model by itself; + set the shuttle pad based on the zonemap extraction values then position the shuttle relative to that pad; + rotation based on the shuttle should place these offsets in the HART lobby whose gantry hall corresponds to that mount index + */ + orbital_shuttle.MountPoints += 1 -> MountInfo(0, Vector3(-62, 4, -28.2f)) + orbital_shuttle.MountPoints += 2 -> MountInfo(0, Vector3(-62, 28, -28.2f)) + orbital_shuttle.MountPoints += 3 -> MountInfo(0, Vector3(-62, 4, -18.2f)) + orbital_shuttle.MountPoints += 4 -> MountInfo(0, Vector3(-62, 28, -18.2f)) + orbital_shuttle.MountPoints += 5 -> MountInfo(0, Vector3(62, 4, -28.2f)) + orbital_shuttle.MountPoints += 6 -> MountInfo(0, Vector3(62, 28, -28.2f)) + orbital_shuttle.MountPoints += 7 -> MountInfo(0, Vector3(62, 4, -18.2f)) + orbital_shuttle.MountPoints += 8 -> MountInfo(0, Vector3(62, 28, -18.2f)) + orbital_shuttle.TrunkSize = InventoryTile.None + orbital_shuttle.Packet = new OrbitalShuttleConverter + orbital_shuttle.DeconstructionTime = None + orbital_shuttle.DestroyedModel = None + orbital_shuttle.DamageUsing = DamageCalculations.AgainstNothing + orbital_shuttle.DrownAtMaxDepth = false + orbital_shuttle.mass = 25000f + } + + /** + * Initialize land-based giant mecha `VehicleDefinition` globals. + */ + private def init_bfr_vehicles(): Unit = { + val driverSeat = new SeatDefinition() { + restriction = NoReinforcedOrMax + } + val bailableSeat = new SeatDefinition() { + restriction = NoReinforcedOrMax + bailable = true + } + val normalSeat = new SeatDefinition() + val bfrSubsystems = List( + VehicleSubsystemEntry.BattleframeMovementServos, + VehicleSubsystemEntry.BattleframeSensorArray, + VehicleSubsystemEntry.BattleframeShieldGenerator, + VehicleSubsystemEntry.BattleframeTrunk + ) + val bfrGunnerSubsystems = List( + VehicleSubsystemEntry.BattleframeLeftArm, + VehicleSubsystemEntry.BattleframeRightArm, + VehicleSubsystemEntry.BattleframeLeftWeapon, + VehicleSubsystemEntry.BattleframeRightWeapon, + VehicleSubsystemEntry.BattleframeGunnerWeapon + ) ++ bfrSubsystems + val bfrFlightSubsystems = List( + VehicleSubsystemEntry.BattleframeFlightLeftArm, + VehicleSubsystemEntry.BattleframeFlightRightArm, + VehicleSubsystemEntry.BattleframeFlightLeftWeapon, + VehicleSubsystemEntry.BattleframeFlightRightWeapon + ) ++ bfrSubsystems ++ List( + VehicleSubsystemEntry.BattleframeFlightPod + ) + + val battleFrameConverter = new BattleFrameRoboticsConverter + aphelion_gunner.Name = "aphelion_gunner" + aphelion_gunner.MaxHealth = 4500 + aphelion_gunner.Damageable = true + aphelion_gunner.Repairable = true + aphelion_gunner.RepairIfDestroyed = false + aphelion_gunner.shieldUiAttribute = 79 + aphelion_gunner.MaxShields = 3000 + aphelion_gunner.ShieldPeriodicDelay = 500 + aphelion_gunner.ShieldDamageDelay = 3500 + aphelion_gunner.ShieldAutoRecharge = 45 + aphelion_gunner.ShieldAutoRechargeSpecial = 85 + aphelion_gunner.DefaultShields = aphelion_gunner.MaxShields + aphelion_gunner.Seats += 0 -> driverSeat + aphelion_gunner.Seats += 1 -> normalSeat + aphelion_gunner.controlledWeapons(seat = 0, weapons = Set(2, 3)) + aphelion_gunner.controlledWeapons(seat = 1, weapon = 4) + aphelion_gunner.Weapons += 2 -> aphelion_ppa_left + aphelion_gunner.Weapons += 3 -> aphelion_ppa_right + aphelion_gunner.Weapons += 4 -> aphelion_plasma_rocket_pod + aphelion_gunner.MountPoints += 1 -> MountInfo(0) + aphelion_gunner.MountPoints += 2 -> MountInfo(1) + aphelion_gunner.subsystems = bfrGunnerSubsystems + aphelion_gunner.TrunkSize = InventoryTile.Tile1518 + aphelion_gunner.TrunkOffset = 30 + aphelion_gunner.TrunkLocation = Vector3(0f, -2f, 0f) + aphelion_gunner.AutoPilotSpeeds = (5, 1) + aphelion_gunner.Packet = battleFrameConverter + aphelion_gunner.DestroyedModel = None + aphelion_gunner.destructionDelay = Some(4000L) + aphelion_gunner.JackingDuration = Array(0, 62, 60, 30) + aphelion_gunner.RadiationShielding = 0.5f + aphelion_gunner.DamageUsing = DamageCalculations.AgainstBfr + aphelion_gunner.Model = BfrResolutions.calculate + aphelion_gunner.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 400 + Damage1 = 500 + DamageRadius = 10 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + aphelion_gunner.DrownAtMaxDepth = true + aphelion_gunner.MaxDepth = 5.09375f + aphelion_gunner.UnderwaterLifespan(suffocation = 60000L, recovery = 30000L) + aphelion_gunner.Geometry = GeometryForm.representByCylinder(radius = 1.2618f, height = 6.01562f) + aphelion_gunner.collision.avatarCollisionDamageMax = 300 + aphelion_gunner.collision.xy = CollisionXYData(Array((0.2f, 1), (0.35f, 5), (0.55f, 20), (0.75f, 40), (1f, 60))) + aphelion_gunner.collision.z = CollisionZData(Array((25f, 2), (40f, 4), (60f, 8), (85f, 16), (115f, 32))) + aphelion_gunner.maxForwardSpeed = 17 + aphelion_gunner.mass = 615.1f + + colossus_gunner.Name = "colossus_gunner" + colossus_gunner.MaxHealth = 4500 + colossus_gunner.Damageable = true + colossus_gunner.Repairable = true + colossus_gunner.RepairIfDestroyed = false + colossus_gunner.shieldUiAttribute = 79 + colossus_gunner.MaxShields = 3000 + colossus_gunner.ShieldPeriodicDelay = 500 + colossus_gunner.ShieldDamageDelay = 3500 + colossus_gunner.ShieldAutoRecharge = 45 + colossus_gunner.ShieldAutoRechargeSpecial = 85 + colossus_gunner.DefaultShields = colossus_gunner.MaxShields + colossus_gunner.Seats += 0 -> driverSeat + colossus_gunner.Seats += 1 -> normalSeat + colossus_gunner.controlledWeapons(seat = 0, weapons = Set(2, 3)) + colossus_gunner.controlledWeapons(seat = 1, weapon = 4) + colossus_gunner.Weapons += 2 -> colossus_tank_cannon_left + colossus_gunner.Weapons += 3 -> colossus_tank_cannon_right + colossus_gunner.Weapons += 4 -> colossus_dual_100mm_cannons + colossus_gunner.MountPoints += 1 -> MountInfo(0) + colossus_gunner.MountPoints += 2 -> MountInfo(1) + colossus_gunner.subsystems = bfrGunnerSubsystems + colossus_gunner.TrunkSize = InventoryTile.Tile1518 + colossus_gunner.TrunkOffset = 30 + colossus_gunner.TrunkLocation = Vector3(0f, -5f, 0f) + colossus_gunner.AutoPilotSpeeds = (5, 1) + colossus_gunner.Packet = battleFrameConverter + colossus_gunner.DestroyedModel = None + colossus_gunner.destructionDelay = Some(4000L) + colossus_gunner.JackingDuration = Array(0, 62, 60, 30) + colossus_gunner.RadiationShielding = 0.5f + colossus_gunner.DamageUsing = DamageCalculations.AgainstBfr + colossus_gunner.Model = BfrResolutions.calculate + colossus_gunner.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 400 + Damage1 = 500 + DamageRadius = 10 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + colossus_gunner.DrownAtMaxDepth = true + colossus_gunner.MaxDepth = 5.515625f + colossus_gunner.UnderwaterLifespan(suffocation = 60000L, recovery = 30000L) + colossus_gunner.Geometry = GeometryForm.representByCylinder(radius = 3.60935f, height = 5.984375f) + colossus_gunner.collision.avatarCollisionDamageMax = 300 + colossus_gunner.collision.xy = CollisionXYData(Array((0.2f, 1), (0.35f, 5), (0.55f, 20), (0.75f, 40), (1f, 60))) + colossus_gunner.collision.z = CollisionZData(Array((25f, 2), (40f, 4), (60f, 8), (85f, 16), (115f, 32))) + colossus_gunner.maxForwardSpeed = 17 + colossus_gunner.mass = 709.7f + + peregrine_gunner.Name = "peregrine_gunner" + peregrine_gunner.MaxHealth = 4500 + peregrine_gunner.Damageable = true + peregrine_gunner.Repairable = true + peregrine_gunner.RepairIfDestroyed = false + peregrine_gunner.shieldUiAttribute = 79 + peregrine_gunner.MaxShields = 3000 + peregrine_gunner.ShieldPeriodicDelay = 500 + peregrine_gunner.ShieldDamageDelay = 3500 + peregrine_gunner.ShieldAutoRecharge = 45 + peregrine_gunner.ShieldAutoRechargeSpecial = 85 + peregrine_gunner.DefaultShields = peregrine_gunner.MaxShields + peregrine_gunner.Seats += 0 -> driverSeat + peregrine_gunner.Seats += 1 -> normalSeat + peregrine_gunner.controlledWeapons(seat = 0, weapons = Set(2, 3)) + peregrine_gunner.controlledWeapons(seat = 1, weapon = 4) + peregrine_gunner.Weapons += 2 -> peregrine_dual_machine_gun_left + peregrine_gunner.Weapons += 3 -> peregrine_dual_machine_gun_right + peregrine_gunner.Weapons += 4 -> peregrine_particle_cannon + peregrine_gunner.MountPoints += 1 -> MountInfo(0) + peregrine_gunner.MountPoints += 2 -> MountInfo(1) + peregrine_gunner.subsystems = bfrGunnerSubsystems + peregrine_gunner.TrunkSize = InventoryTile.Tile1518 + peregrine_gunner.TrunkOffset = 30 + peregrine_gunner.TrunkLocation = Vector3(0f, -5f, 0f) + peregrine_gunner.AutoPilotSpeeds = (5, 1) + peregrine_gunner.Packet = battleFrameConverter + peregrine_gunner.DestroyedModel = None + peregrine_gunner.destructionDelay = Some(4000L) + peregrine_gunner.JackingDuration = Array(0, 62, 60, 30) + peregrine_gunner.RadiationShielding = 0.5f + peregrine_gunner.DamageUsing = DamageCalculations.AgainstBfr + peregrine_gunner.Model = BfrResolutions.calculate + peregrine_gunner.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 400 + Damage1 = 500 + DamageRadius = 10 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + peregrine_gunner.DrownAtMaxDepth = true + peregrine_gunner.MaxDepth = 6.03125f + peregrine_gunner.UnderwaterLifespan(suffocation = 60000L, recovery = 30000L) + peregrine_gunner.Geometry = GeometryForm.representByCylinder(radius = 3.60935f, height = 6.421875f) + peregrine_gunner.collision.avatarCollisionDamageMax = 300 + peregrine_gunner.collision.xy = CollisionXYData(Array((0.2f, 1), (0.35f, 5), (0.55f, 20), (0.75f, 40), (1f, 60))) + peregrine_gunner.collision.z = CollisionZData(Array((25f, 2), (40f, 4), (60f, 8), (85f, 16), (115f, 32))) + peregrine_gunner.maxForwardSpeed = 17 + peregrine_gunner.mass = 713f + + val battleFrameFlightConverter = new BattleFrameFlightConverter + aphelion_flight.Name = "aphelion_flight" + aphelion_flight.MaxHealth = 3500 + aphelion_flight.Damageable = true + aphelion_flight.Repairable = true + aphelion_flight.RepairIfDestroyed = false + aphelion_flight.CanFly = true + aphelion_flight.shieldUiAttribute = 79 + aphelion_flight.MaxShields = 2500 + aphelion_flight.ShieldPeriodicDelay = 500 + aphelion_flight.ShieldDamageDelay = 3500 + aphelion_flight.ShieldAutoRecharge = 12 //12.5 + aphelion_flight.ShieldAutoRechargeSpecial = 25 + aphelion_flight.ShieldDrain = 30 + aphelion_flight.DefaultShields = aphelion_flight.MaxShields + aphelion_flight.Seats += 0 -> bailableSeat + aphelion_flight.controlledWeapons(seat = 0, weapons = Set(1, 2)) + aphelion_flight.Weapons += 1 -> aphelion_ppa_left + aphelion_flight.Weapons += 2 -> aphelion_ppa_right + aphelion_flight.MountPoints += 1 -> MountInfo(0) + aphelion_flight.subsystems = bfrFlightSubsystems + aphelion_flight.TrunkSize = InventoryTile.Tile1511 + aphelion_flight.TrunkOffset = 30 + aphelion_flight.TrunkLocation = Vector3(0f, -2f, 0f) + aphelion_flight.AutoPilotSpeeds = (5, 1) + aphelion_flight.Packet = battleFrameFlightConverter + aphelion_flight.DestroyedModel = None + aphelion_flight.destructionDelay = Some(4000L) + aphelion_flight.JackingDuration = Array(0, 62, 60, 30) + aphelion_flight.RadiationShielding = 0.5f + aphelion_flight.DamageUsing = DamageCalculations.AgainstBfr + aphelion_flight.Model = BfrResolutions.calculate + aphelion_flight.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 400 + Damage1 = 500 + DamageRadius = 10 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + aphelion_flight.DrownAtMaxDepth = true + aphelion_flight.MaxDepth = 5.09375f + aphelion_flight.UnderwaterLifespan(suffocation = 60000L, recovery = 30000L) + aphelion_flight.Geometry = GeometryForm.representByCylinder(radius = 1.98045f, height = 6.03125f) + aphelion_flight.MaxCapacitor = 156 + aphelion_flight.DefaultCapacitor = aphelion_flight.MaxCapacitor + aphelion_flight.CapacitorDrain = 16 + aphelion_flight.CapacitorDrainSpecial = 3 + aphelion_flight.CapacitorRecharge = 42 + aphelion_flight.collision.avatarCollisionDamageMax = 300 + aphelion_flight.collision.xy = CollisionXYData(Array((0.2f, 1), (0.35f, 5), (0.55f, 20), (0.75f, 40), (1f, 60))) + aphelion_flight.collision.z = CollisionZData(Array((25f, 2), (40f, 4), (60f, 8), (85f, 16), (115f, 32))) + aphelion_flight.maxForwardSpeed = 35 + aphelion_flight.mass = 615.1f + + colossus_flight.Name = "colossus_flight" + colossus_flight.MaxHealth = 3500 + colossus_flight.Damageable = true + colossus_flight.Repairable = true + colossus_flight.RepairIfDestroyed = false + colossus_flight.CanFly = true + colossus_flight.shieldUiAttribute = 79 + colossus_flight.MaxShields = 2500 + colossus_flight.ShieldPeriodicDelay = 500 + colossus_flight.ShieldDamageDelay = 3500 + colossus_flight.ShieldAutoRecharge = 12 //12.5 + colossus_flight.ShieldAutoRechargeSpecial = 25 + colossus_flight.ShieldDrain = 30 + colossus_flight.DefaultShields = colossus_flight.MaxShields + colossus_flight.Seats += 0 -> bailableSeat + colossus_flight.controlledWeapons(seat = 0, weapons = Set(1, 2)) + colossus_flight.Weapons += 1 -> colossus_tank_cannon_left + colossus_flight.Weapons += 2 -> colossus_tank_cannon_right + colossus_flight.MountPoints += 1 -> MountInfo(0) + colossus_flight.subsystems = bfrFlightSubsystems + colossus_flight.TrunkSize = InventoryTile.Tile1511 + colossus_flight.TrunkOffset = 30 + colossus_flight.TrunkLocation = Vector3(0f, -5f, 0f) + colossus_flight.AutoPilotSpeeds = (5, 1) + colossus_flight.Packet = battleFrameFlightConverter + colossus_flight.DestroyedModel = None + colossus_flight.destructionDelay = Some(4000L) + colossus_flight.JackingDuration = Array(0, 62, 60, 30) + colossus_flight.RadiationShielding = 0.5f + colossus_flight.DamageUsing = DamageCalculations.AgainstBfr + colossus_flight.Model = BfrResolutions.calculate + colossus_flight.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 400 + Damage1 = 500 + DamageRadius = 10 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + colossus_flight.DrownAtMaxDepth = true + colossus_flight.MaxDepth = 5.515625f + colossus_flight.UnderwaterLifespan(suffocation = 60000L, recovery = 30000L) + colossus_flight.Geometry = GeometryForm.representByCylinder(radius = 3.60935f, height = 5.984375f) + colossus_flight.MaxCapacitor = 156 + colossus_flight.DefaultCapacitor = colossus_flight.MaxCapacitor + colossus_flight.CapacitorDrain = 16 + colossus_flight.CapacitorDrainSpecial = 3 + colossus_flight.CapacitorRecharge = 42 + colossus_flight.collision.avatarCollisionDamageMax = 300 + colossus_flight.collision.xy = CollisionXYData(Array((0.2f, 1), (0.35f, 5), (0.55f, 20), (0.75f, 40), (1f, 60))) + colossus_flight.collision.z = CollisionZData(Array((25f, 2), (40f, 4), (60f, 8), (85f, 16), (115f, 32))) + colossus_flight.maxForwardSpeed = 34 + colossus_flight.mass = 709.7f + + peregrine_flight.Name = "peregrine_flight" + peregrine_flight.MaxHealth = 3500 + peregrine_flight.Damageable = true + peregrine_flight.Repairable = true + peregrine_flight.RepairIfDestroyed = false + peregrine_flight.CanFly = true + peregrine_flight.shieldUiAttribute = 79 + peregrine_flight.MaxShields = 2500 + peregrine_flight.ShieldPeriodicDelay = 500 + peregrine_flight.ShieldDamageDelay = 3500 + peregrine_flight.ShieldAutoRecharge = 12 //12.5 + peregrine_flight.ShieldAutoRechargeSpecial = 25 + peregrine_flight.ShieldDrain = 30 + peregrine_flight.DefaultShields = peregrine_flight.MaxShields + peregrine_flight.Seats += 0 -> bailableSeat + peregrine_flight.controlledWeapons(seat = 0, weapons = Set(1, 2)) + peregrine_flight.Weapons += 1 -> peregrine_dual_machine_gun_left + peregrine_flight.Weapons += 2 -> peregrine_dual_machine_gun_right + peregrine_flight.MountPoints += 1 -> MountInfo(0) + peregrine_flight.subsystems = bfrFlightSubsystems + peregrine_flight.TrunkSize = InventoryTile.Tile1511 + peregrine_flight.TrunkOffset = 30 + peregrine_flight.TrunkLocation = Vector3(0f, -5f, 0f) + peregrine_flight.AutoPilotSpeeds = (5, 1) + peregrine_flight.Packet = battleFrameFlightConverter + peregrine_flight.DestroyedModel = None + peregrine_flight.destructionDelay = Some(4000L) + peregrine_flight.JackingDuration = Array(0, 62, 60, 30) + peregrine_flight.RadiationShielding = 0.5f + peregrine_flight.DamageUsing = DamageCalculations.AgainstBfr + peregrine_flight.Model = BfrResolutions.calculate + peregrine_flight.innateDamage = new DamageWithPosition { + CausesDamageType = DamageType.One + Damage0 = 400 + Damage1 = 500 + DamageRadius = 10 + DamageAtEdge = 0.2f + Modifiers = ExplodingRadialDegrade + } + peregrine_flight.DrownAtMaxDepth = true + peregrine_flight.MaxDepth = 6.03125f + peregrine_flight.UnderwaterLifespan(suffocation = 60000L, recovery = 30000L) + peregrine_flight.Geometry = GeometryForm.representByCylinder(radius = 3.60935f, height = 6.421875f) + peregrine_flight.MaxCapacitor = 156 + peregrine_flight.DefaultCapacitor = peregrine_flight.MaxCapacitor + peregrine_flight.CapacitorDrain = 16 + peregrine_flight.CapacitorDrainSpecial = 3 + peregrine_flight.CapacitorRecharge = 42 + peregrine_flight.collision.avatarCollisionDamageMax = 300 + peregrine_flight.collision.xy = CollisionXYData(Array((0.2f, 1), (0.35f, 5), (0.55f, 20), (0.75f, 40), (1f, 60))) + peregrine_flight.collision.z = CollisionZData(Array((25f, 2), (40f, 4), (60f, 8), (85f, 16), (115f, 32))) + peregrine_flight.maxForwardSpeed = 35 + peregrine_flight.mass = 713f + } +} diff --git a/src/main/scala/net/psforever/objects/serverobject/doors/DoorDefinition.scala b/src/main/scala/net/psforever/objects/serverobject/doors/DoorDefinition.scala index f2b3936e1..ca03cbcdf 100644 --- a/src/main/scala/net/psforever/objects/serverobject/doors/DoorDefinition.scala +++ b/src/main/scala/net/psforever/objects/serverobject/doors/DoorDefinition.scala @@ -1,6 +1,7 @@ // Copyright (c) 2017 PSForever package net.psforever.objects.serverobject.doors +import net.psforever.objects.geometry.GeometryForm import net.psforever.objects.serverobject.structures.AmenityDefinition /** @@ -14,4 +15,15 @@ class DoorDefinition(objectId: Int) var initialOpeningDistance: Float = 7.5f /** range within which the door must detect a target player to remain open */ var continuousOpenDistance: Float = 5.05f + + var geometryInteractionRadius: Option[Float] = None + var geometryInteractionHeight: Option[Float] = None + + Geometry = { + (geometryInteractionRadius, geometryInteractionHeight) match { + case (Some(r), Some(h)) => GeometryForm.representByCylinder(r, h) + case (Some(r), None) => GeometryForm.representBySphereOnBase(r) + case _ => super.Geometry + } + } } diff --git a/src/main/scala/net/psforever/objects/serverobject/environment/EnvironmentAttribute.scala b/src/main/scala/net/psforever/objects/serverobject/environment/EnvironmentAttribute.scala new file mode 100644 index 000000000..597e2a72a --- /dev/null +++ b/src/main/scala/net/psforever/objects/serverobject/environment/EnvironmentAttribute.scala @@ -0,0 +1,74 @@ +// Copyright (c) 2020-2024 PSForever +package net.psforever.objects.serverobject.environment + +import enumeratum.{Enum, EnumEntry} +import net.psforever.objects.{PlanetSideGameObject, Player, Vehicle} +import net.psforever.objects.vital.Vitality +import net.psforever.types.Vector3 + +/** + * A general description of environment and its interactive possibilities. + */ +sealed abstract class EnvironmentTrait extends EnumEntry { + def canInteractWith(obj: PlanetSideGameObject): Boolean +} + +object EnvironmentAttribute extends Enum[EnvironmentTrait] { + /** glue connecting `EnumEntry` to `Enumeration` */ + val values: IndexedSeq[EnvironmentTrait] = findValues + + case object Water extends EnvironmentTrait { + /** water can only interact with objects that are negatively affected by being exposed to water; + * it's better this way */ + def canInteractWith(obj: PlanetSideGameObject): Boolean = { + obj.Definition.DrownAtMaxDepth || obj.Definition.DisableAtMaxDepth || (obj match { + case p: Player => p.VehicleSeated.isEmpty + case v: Vehicle => v.MountedIn.isEmpty + case _ => true + }) + } + } + + case object Lava extends EnvironmentTrait { + /** lava can only interact with anything capable of registering damage */ + def canInteractWith(obj: PlanetSideGameObject): Boolean = { + obj match { + case o: Vitality => o.Definition.Damageable + case _ => false + } + } + } + + case object Death extends EnvironmentTrait { + /** death can only interact with anything capable of registering damage */ + def canInteractWith(obj: PlanetSideGameObject): Boolean = { + obj match { + case o: Vitality => o.Definition.Damageable + case _ => false + } + } + } + + case object GantryDenialField + extends EnvironmentTrait { + /** only interact with living player characters */ + def canInteractWith(obj: PlanetSideGameObject): Boolean = { + obj match { + case p: Player => p.isAlive + case _ => false + } + } + } + + case object MovementFieldTrigger + extends EnvironmentTrait { + /** only interact with living player characters or vehicles */ + def canInteractWith(obj: PlanetSideGameObject): Boolean = { + obj match { + case p: Player => p.isAlive && p.Position != Vector3.Zero + case v: Vehicle => !v.Destroyed && v.Position != Vector3.Zero + case _ => false + } + } + } +} diff --git a/src/main/scala/net/psforever/objects/serverobject/environment/PieceOfEnvironment.scala b/src/main/scala/net/psforever/objects/serverobject/environment/PieceOfEnvironment.scala index c6e762519..1e0b9040b 100644 --- a/src/main/scala/net/psforever/objects/serverobject/environment/PieceOfEnvironment.scala +++ b/src/main/scala/net/psforever/objects/serverobject/environment/PieceOfEnvironment.scala @@ -1,9 +1,7 @@ // Copyright (c) 2020 PSForever package net.psforever.objects.serverobject.environment -import enumeratum.{Enum, EnumEntry} -import net.psforever.objects.{PlanetSideGameObject, Player, Vehicle} -import net.psforever.objects.vital.Vitality +import net.psforever.objects.PlanetSideGameObject import net.psforever.objects.zones.blockmap.BlockMapEntity import net.psforever.types.{PlanetSideGUID, Vector3} @@ -52,69 +50,24 @@ trait PieceOfEnvironment def Velocity_=(vec: Option[Vector3]): Option[Vector3] = None } -/** - * A general description of environment and its interactive possibilities. - */ -sealed abstract class EnvironmentTrait extends EnumEntry { - def canInteractWith(obj: PlanetSideGameObject): Boolean -} - -object EnvironmentAttribute extends Enum[EnvironmentTrait] { - /** glue connecting `EnumEntry` to `Enumeration` */ - val values: IndexedSeq[EnvironmentTrait] = findValues - - case object Water extends EnvironmentTrait { - /** water can only interact with objects that are negatively affected by being exposed to water; - * it's better this way */ - def canInteractWith(obj: PlanetSideGameObject): Boolean = { - obj.Definition.DrownAtMaxDepth || obj.Definition.DisableAtMaxDepth || (obj match { - case p: Player => p.VehicleSeated.isEmpty - case v: Vehicle => v.MountedIn.isEmpty - case _ => true - }) - } - } - - case object Lava extends EnvironmentTrait { - /** lava can only interact with anything capable of registering damage */ - def canInteractWith(obj: PlanetSideGameObject): Boolean = { - obj match { - case o: Vitality => o.Definition.Damageable - case _ => false - } - } - } - - case object Death extends EnvironmentTrait { - /** death can only interact with anything capable of registering damage */ - def canInteractWith(obj: PlanetSideGameObject): Boolean = { - obj match { - case o: Vitality => o.Definition.Damageable - case _ => false - } - } - } - - case object GantryDenialField - extends EnvironmentTrait { - /** only interact with living player characters */ - def canInteractWith(obj: PlanetSideGameObject): Boolean = { - obj match { - case p: Player => p.isAlive - case _ => false - } - } - } - - case object MovementFieldTrigger - extends EnvironmentTrait { - /** only interact with living player characters or vehicles */ - def canInteractWith(obj: PlanetSideGameObject): Boolean = { - obj match { - case p: Player => p.isAlive && p.Position != Vector3.Zero - case v: Vehicle => !v.Destroyed && v.Position != Vector3.Zero - case _ => false - } +object PieceOfEnvironment { + /** + * Did the test point move into or leave the bounds of the represented environment since its previous test? + * @param body the environment + * @param pos the test point + * @param previousPos the previous test point which is being compared against + * @param varDepth how far "into" the environment the point must be + * @return `Some(true)`, if the point has become sufficiently "deep"; + * `Some(false)`, if the point has left the sufficiently "deep" region; + * `None`, if the described points only exist outside of or only exists inside of the critical region + */ + def testStepIntoInteraction(body: PieceOfEnvironment, pos: Vector3, previousPos: Vector3, varDepth: Float): Option[Boolean] = { + val isEncroaching = body.collision.testInteraction(pos, varDepth) + val wasEncroaching = body.collision.testInteraction(previousPos, varDepth) + if (isEncroaching != wasEncroaching) { + Some(isEncroaching) + } else { + None } } } @@ -171,34 +124,12 @@ final case class GantryDenialField( mountPoint: Int, collision: EnvironmentCollision ) extends PieceOfEnvironment { - def attribute = EnvironmentAttribute.GantryDenialField + def attribute: EnvironmentTrait = EnvironmentAttribute.GantryDenialField } final case class GeneralMovementField( triggerAction: PlanetSideGameObject => Unit, collision: EnvironmentCollision ) extends PieceOfEnvironment { - def attribute = EnvironmentAttribute.MovementFieldTrigger -} - -object PieceOfEnvironment { - /** - * Did the test point move into or leave the bounds of the represented environment since its previous test? - * @param body the environment - * @param pos the test point - * @param previousPos the previous test point which is being compared against - * @param varDepth how far "into" the environment the point must be - * @return `Some(true)`, if the point has become sufficiently "deep"; - * `Some(false)`, if the point has left the sufficiently "deep" region; - * `None`, if the described points only exist outside of or only exists inside of the critical region - */ - def testStepIntoInteraction(body: PieceOfEnvironment, pos: Vector3, previousPos: Vector3, varDepth: Float): Option[Boolean] = { - val isEncroaching = body.collision.testInteraction(pos, varDepth) - val wasEncroaching = body.collision.testInteraction(previousPos, varDepth) - if (isEncroaching != wasEncroaching) { - Some(isEncroaching) - } else { - None - } - } + def attribute: EnvironmentTrait = EnvironmentAttribute.MovementFieldTrigger } diff --git a/src/main/scala/net/psforever/objects/serverobject/painbox/PainboxControl.scala b/src/main/scala/net/psforever/objects/serverobject/painbox/PainboxControl.scala index 351d740f0..4e673d621 100644 --- a/src/main/scala/net/psforever/objects/serverobject/painbox/PainboxControl.scala +++ b/src/main/scala/net/psforever/objects/serverobject/painbox/PainboxControl.scala @@ -164,7 +164,7 @@ object PainboxControl { || amenity.Definition == GlobalDefinitions.respawn_tube || amenity.Definition == GlobalDefinitions.spawn_terminal || amenity.Definition == GlobalDefinitions.order_terminal - || amenity.Definition == GlobalDefinitions.door) + || amenity.isInstanceOf[Door]) && amenity.Position.x > painbox.Position.x - planarRange && amenity.Position.x < painbox.Position.x + planarRange && amenity.Position.y > painbox.Position.y - planarRange && amenity.Position.y < painbox.Position.y + planarRange && amenity.Position.z > painbox.Position.z - belowRange && amenity.Position.z < painbox.Position.z + aboveRange diff --git a/src/main/scala/net/psforever/zones/Zones.scala b/src/main/scala/net/psforever/zones/Zones.scala index e82d0f861..b59450491 100644 --- a/src/main/scala/net/psforever/zones/Zones.scala +++ b/src/main/scala/net/psforever/zones/Zones.scala @@ -177,23 +177,44 @@ object Zones { ) private val doorTypes = Seq( - "gr_door_garage_int", - "gr_door_int", - "gr_door_med", - "spawn_tube_door", "amp_cap_door", + "ancient_door", + "ancient_garage_door", + "cryo_med_door", + "cryo_room_door", + "door", + "door_airlock", + "door_airlock_orb", "door_dsp", + "door_garage", + "door_interior", + "door_mb", + "door_mb_garage", + "door_mb_main", + "door_mb_orb", + "door_mb_side", + "door_nc_garage", + "door_nc_rotating", + "door_ncside", + "door_orbspawn", + "door_spawn_mb", + "garage_door", + "gr_door_airlock", "gr_door_ext", "gr_door_garage_ext", + "gr_door_garage_int", + "gr_door_int", "gr_door_main", "gr_door_mb_ext", "gr_door_mb_int", "gr_door_mb_lrg", "gr_door_mb_obsd", "gr_door_mb_orb", - "door_spawn_mb", - "ancient_door", - "ancient_garage_door" + "gr_door_med", + "main_door", + "shield_door", + "spawn_tube_door", + "spawn_tube_door_coffin" ) lazy val zoneMaps: Seq[ZoneMap] = { @@ -384,14 +405,6 @@ object Zones { owningBuildingGuid = ownerGuid ) - case "gr_door_mb_orb" => - zoneMap - .addLocalObject( - obj.guid, - Door.Constructor(obj.position, GlobalDefinitions.gr_door_mb_orb), - owningBuildingGuid = ownerGuid - ) - case doorType if doorType.equals("door_spawn_mb") || doorType.equals("spawn_tube_door") => zoneMap.addLocalObject( obj.guid, @@ -404,7 +417,14 @@ object Zones { case objectType if doorTypes.contains(objectType) => zoneMap - .addLocalObject(obj.guid, Door.Constructor(obj.position), owningBuildingGuid = ownerGuid) + .addLocalObject( + obj.guid, + Door.Constructor( + obj.position, + DefinitionUtil.fromString(objectType).asInstanceOf[DoorDefinition] + ), + owningBuildingGuid = ownerGuid + ) case "locker_cryo" | "locker_med" | "mb_locker" => zoneMap @@ -798,7 +818,7 @@ object Zones { } } - lazy val cavernLattice = { + lazy val cavernLattice: Map[String, Iterable[Iterable[String]]] = { val res = Source.fromResource(s"zonemaps/lattice.json") val json = res.mkString res.close()