Make mod selection nicer and deprecate MB-339.

Mod selection is now done via checkbox in the new game wizard.

The MB-339 is being turned into a paid module, and the free mod no longer works, so it's been removed.
This commit is contained in:
Simon Clark
2021-06-21 00:03:22 +01:00
parent d074500109
commit 11069cc219
35 changed files with 198 additions and 1805 deletions

View File

@@ -44,12 +44,10 @@ from pydcs_extensions.a4ec.a4ec import A_4E_C
from pydcs_extensions.f22a.f22a import F_22A
from pydcs_extensions.hercules.hercules import Hercules
from pydcs_extensions.jas39.jas39 import JAS39Gripen, JAS39Gripen_AG
from pydcs_extensions.mb339.mb339 import MB_339PAN
from pydcs_extensions.su57.su57 import Su_57
plane_map["A-4E-C"] = A_4E_C
plane_map["F-22A"] = F_22A
plane_map["MB-339PAN"] = MB_339PAN
plane_map["Su-57"] = Su_57
plane_map["Hercules"] = Hercules
plane_map["JAS39Gripen"] = JAS39Gripen

View File

@@ -1,3 +1,4 @@
from game.dcs.aircrafttype import AircraftType
import itertools
import logging
import random
@@ -10,13 +11,14 @@ from dcs.action import Coalition
from dcs.mapping import Point
from dcs.task import CAP, CAS, PinpointStrike
from dcs.vehicles import AirDefence
from pydcs_extensions.a4ec.a4ec import A_4E_C
from faker import Faker
from game import db
from game.inventory import GlobalAircraftInventory
from game.models.game_stats import GameStats
from game.plugins import LuaPluginManager
from gen import naming
from gen import aircraft, naming
from gen.ato import AirTaskingOrder
from gen.conflictgen import Conflict
from gen.flights.ai_flight_planner import CoalitionMissionPlanner
@@ -33,7 +35,7 @@ from .infos.information import Information
from .navmesh import NavMesh
from .procurement import AircraftProcurementRequest, ProcurementAi
from .profiling import logged_duration
from .settings import Settings, AutoAtoBehavior
from .settings import ModSettings, Settings, AutoAtoBehavior
from .squadrons import AirWing
from .theater import ConflictTheater
from .theater.bullseye import Bullseye
@@ -93,8 +95,10 @@ class Game:
settings: Settings,
player_budget: float,
enemy_budget: float,
mod_settings: ModSettings,
) -> None:
self.settings = settings
self.mod_settings = mod_settings
self.events: List[Event] = []
self.theater = theater
self.player_name = player_name
@@ -123,6 +127,8 @@ class Game:
self.conditions = self.generate_conditions()
self.apply_mods()
self.blue_transit_network = TransitNetwork()
self.red_transit_network = TransitNetwork()
@@ -201,6 +207,84 @@ class Game:
else:
self.enemy_country = "Russia"
def apply_mods(self):
# aircraft
if not self.mod_settings.a4_skyhawk:
self.remove_aircraft("A-4E-C")
if not self.mod_settings.hercules:
self.remove_aircraft("Hercules")
if not self.mod_settings.f22_raptor:
self.remove_aircraft("F-22A")
if not self.mod_settings.jas39_gripen:
self.remove_aircraft("JAS39Gripen")
self.remove_aircraft("JAS39Gripen_AG")
if not self.mod_settings.su57_felon:
self.remove_aircraft("Su-57")
# frenchpack
if not self.mod_settings.frenchpack:
self.remove_vehicle("AMX10RCR")
self.remove_vehicle("SEPAR")
self.remove_vehicle("ERC")
self.remove_vehicle("M120")
self.remove_vehicle("AA20")
self.remove_vehicle("TRM2000")
self.remove_vehicle("TRM2000_Citerne")
self.remove_vehicle("TRM2000_AA20")
self.remove_vehicle("TRMMISTRAL")
self.remove_vehicle("VABH")
self.remove_vehicle("VAB_RADIO")
self.remove_vehicle("VAB_50")
self.remove_vehicle("VIB_VBR")
self.remove_vehicle("VAB_HOT")
self.remove_vehicle("VAB_MORTIER")
self.remove_vehicle("VBL50")
self.remove_vehicle("VBLANF1")
self.remove_vehicle("VBL-radio")
self.remove_vehicle("VBAE")
self.remove_vehicle("VBAE_MMP")
self.remove_vehicle("AMX-30B2")
self.remove_vehicle("Tracma")
self.remove_vehicle("JTACFP")
self.remove_vehicle("SHERIDAN")
self.remove_vehicle("Leclerc_XXI")
self.remove_vehicle("Toyota_bleu")
self.remove_vehicle("Toyota_vert")
self.remove_vehicle("Toyota_desert")
self.remove_vehicle("Kamikaze")
# high digit sams
if not self.mod_settings.high_digit_sams:
self.remove_air_defenses("SA10BGenerator")
self.remove_air_defenses("SA12Generator")
self.remove_air_defenses("SA20Generator")
self.remove_air_defenses("SA20BGenerator")
self.remove_air_defenses("SA23Generator")
self.remove_air_defenses("SA17Generator")
self.remove_air_defenses("KS19Generator")
def remove_aircraft(self, name):
for i in self.player_faction.aircrafts:
if i.dcs_unit_type.id == name:
self.player_faction.aircrafts.remove(i)
for i in self.enemy_faction.aircrafts:
if i.dcs_unit_type.id == name:
self.enemy_faction.aircrafts.remove(i)
def remove_air_defenses(self, name):
for i in self.player_faction.air_defenses:
if i == name:
self.player_faction.air_defenses.remove(i)
for i in self.enemy_faction.air_defenses:
if i == name:
self.enemy_faction.air_defenses.remove(i)
def remove_vehicle(self, name):
for i in self.player_faction.frontline_units:
if i.dcs_unit_type.id == name:
self.player_faction.frontline_units.remove(i)
for i in self.enemy_faction.frontline_units:
if i.dcs_unit_type.id == name:
self.enemy_faction.frontline_units.remove(i)
@property
def player_faction(self) -> Faction:
return db.FACTIONS[self.player_name]

View File

@@ -110,3 +110,16 @@ class Settings:
new_state = Settings().__dict__
new_state.update(state)
self.__dict__.update(new_state)
@dataclass
class ModSettings:
# Aircraft Mods
a4_skyhawk: bool = False
f22_raptor: bool = False
hercules: bool = False
jas39_gripen: bool = False
su57_felon: bool = False
# Ground Asset Mods
frenchpack: bool = False
high_digit_sams: bool = False

View File

@@ -49,7 +49,7 @@ from . import (
OffMapSpawn,
)
from ..profiling import logged_duration
from ..settings import Settings
from ..settings import ModSettings, Settings
GroundObjectTemplates = Dict[str, Dict[str, Any]]
@@ -86,12 +86,14 @@ class GameGenerator:
theater: ConflictTheater,
settings: Settings,
generator_settings: GeneratorSettings,
mod_settings: ModSettings,
) -> None:
self.player = player
self.enemy = enemy
self.theater = theater
self.settings = settings
self.generator_settings = generator_settings
self.mod_settings = mod_settings
def generate(self) -> Game:
with logged_duration("TGO population"):
@@ -106,6 +108,7 @@ class GameGenerator:
settings=self.settings,
player_budget=self.generator_settings.player_budget,
enemy_budget=self.generator_settings.enemy_budget,
mod_settings=self.mod_settings,
)
GroundObjectGenerator(game, self.generator_settings).generate()