mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
fixes for selectable departure; generate statics for used units; raised RTB alt
This commit is contained in:
parent
355cd3e0e4
commit
9d0997624b
@ -235,7 +235,6 @@ SAM_BAN = [
|
|||||||
Units that will always be spawned in the air
|
Units that will always be spawned in the air
|
||||||
"""
|
"""
|
||||||
TAKEOFF_BAN = [
|
TAKEOFF_BAN = [
|
||||||
AV8BNA, # AI takeoff currently bugged attempting VTOL with no regards for the total weight
|
|
||||||
]
|
]
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|||||||
@ -61,7 +61,8 @@ class BaseAttackEvent(Event):
|
|||||||
op = BaseAttackOperation(game=self.game,
|
op = BaseAttackOperation(game=self.game,
|
||||||
attacker_name=self.attacker_name,
|
attacker_name=self.attacker_name,
|
||||||
defender_name=self.defender_name,
|
defender_name=self.defender_name,
|
||||||
from_cp=self.departure_cp,
|
from_cp=self.from_cp,
|
||||||
|
departure_cp=self.departure_cp,
|
||||||
to_cp=self.to_cp)
|
to_cp=self.to_cp)
|
||||||
|
|
||||||
op.setup(cas=assigned_units_from(cas),
|
op.setup(cas=assigned_units_from(cas),
|
||||||
@ -79,7 +80,8 @@ class BaseAttackEvent(Event):
|
|||||||
op = BaseAttackOperation(game=self.game,
|
op = BaseAttackOperation(game=self.game,
|
||||||
attacker_name=self.attacker_name,
|
attacker_name=self.attacker_name,
|
||||||
defender_name=self.defender_name,
|
defender_name=self.defender_name,
|
||||||
from_cp=self.departure_cp,
|
from_cp=self.from_cp,
|
||||||
|
departure_cp=self.departure_cp,
|
||||||
to_cp=self.to_cp)
|
to_cp=self.to_cp)
|
||||||
|
|
||||||
defenders = self.to_cp.base.scramble_sweep(self.game.settings.multiplier)
|
defenders = self.to_cp.base.scramble_sweep(self.game.settings.multiplier)
|
||||||
|
|||||||
@ -68,6 +68,7 @@ class FrontlineAttackEvent(Event):
|
|||||||
attacker_name=self.attacker_name,
|
attacker_name=self.attacker_name,
|
||||||
defender_name=self.defender_name,
|
defender_name=self.defender_name,
|
||||||
from_cp=self.from_cp,
|
from_cp=self.from_cp,
|
||||||
|
departure_cp=self.departure_cp,
|
||||||
to_cp=self.to_cp)
|
to_cp=self.to_cp)
|
||||||
|
|
||||||
defenders = self.to_cp.base.assemble_attack()
|
defenders = self.to_cp.base.assemble_attack()
|
||||||
|
|||||||
@ -64,6 +64,7 @@ class FrontlinePatrolEvent(Event):
|
|||||||
attacker_name=self.attacker_name,
|
attacker_name=self.attacker_name,
|
||||||
defender_name=self.defender_name,
|
defender_name=self.defender_name,
|
||||||
from_cp=self.from_cp,
|
from_cp=self.from_cp,
|
||||||
|
departure_cp=self.departure_cp,
|
||||||
to_cp=self.to_cp)
|
to_cp=self.to_cp)
|
||||||
|
|
||||||
defenders = self.to_cp.base.assemble_attack()
|
defenders = self.to_cp.base.assemble_attack()
|
||||||
|
|||||||
@ -44,7 +44,8 @@ class InfantryTransportEvent(Event):
|
|||||||
game=self.game,
|
game=self.game,
|
||||||
attacker_name=self.attacker_name,
|
attacker_name=self.attacker_name,
|
||||||
defender_name=self.defender_name,
|
defender_name=self.defender_name,
|
||||||
from_cp=self.departure_cp,
|
from_cp=self.from_cp,
|
||||||
|
departure_cp=self.departure_cp,
|
||||||
to_cp=self.to_cp
|
to_cp=self.to_cp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -56,7 +56,8 @@ class InsurgentAttackEvent(Event):
|
|||||||
op = InsurgentAttackOperation(game=self.game,
|
op = InsurgentAttackOperation(game=self.game,
|
||||||
attacker_name=self.attacker_name,
|
attacker_name=self.attacker_name,
|
||||||
defender_name=self.defender_name,
|
defender_name=self.defender_name,
|
||||||
from_cp=self.departure_cp,
|
from_cp=self.from_cp,
|
||||||
|
departure_cp=self.departure_cp,
|
||||||
to_cp=self.to_cp)
|
to_cp=self.to_cp)
|
||||||
op.setup(target=self.targets,
|
op.setup(target=self.targets,
|
||||||
strikegroup=flights[CAS])
|
strikegroup=flights[CAS])
|
||||||
|
|||||||
@ -76,7 +76,8 @@ class InterceptEvent(Event):
|
|||||||
op = InterceptOperation(game=self.game,
|
op = InterceptOperation(game=self.game,
|
||||||
attacker_name=self.attacker_name,
|
attacker_name=self.attacker_name,
|
||||||
defender_name=self.defender_name,
|
defender_name=self.defender_name,
|
||||||
from_cp=self.departure_cp,
|
from_cp=self.from_cp,
|
||||||
|
departure_cp=self.departure_cp,
|
||||||
to_cp=self.to_cp)
|
to_cp=self.to_cp)
|
||||||
|
|
||||||
op.setup(location=self.location,
|
op.setup(location=self.location,
|
||||||
@ -98,7 +99,8 @@ class InterceptEvent(Event):
|
|||||||
op = InterceptOperation(game=self.game,
|
op = InterceptOperation(game=self.game,
|
||||||
attacker_name=self.attacker_name,
|
attacker_name=self.attacker_name,
|
||||||
defender_name=self.defender_name,
|
defender_name=self.defender_name,
|
||||||
from_cp=self.departure_cp,
|
from_cp=self.from_cp,
|
||||||
|
departure_cp=self.departure_cp,
|
||||||
to_cp=self.to_cp)
|
to_cp=self.to_cp)
|
||||||
|
|
||||||
op.setup(escort=flights[CAP],
|
op.setup(escort=flights[CAP],
|
||||||
|
|||||||
@ -84,7 +84,8 @@ class NavalInterceptEvent(Event):
|
|||||||
self.game,
|
self.game,
|
||||||
attacker_name=self.attacker_name,
|
attacker_name=self.attacker_name,
|
||||||
defender_name=self.defender_name,
|
defender_name=self.defender_name,
|
||||||
from_cp=self.departure_cp,
|
from_cp=self.from_cp,
|
||||||
|
departure_cp=self.departure_cp,
|
||||||
to_cp=self.to_cp
|
to_cp=self.to_cp
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -106,7 +107,8 @@ class NavalInterceptEvent(Event):
|
|||||||
self.game,
|
self.game,
|
||||||
attacker_name=self.attacker_name,
|
attacker_name=self.attacker_name,
|
||||||
defender_name=self.defender_name,
|
defender_name=self.defender_name,
|
||||||
from_cp=self.departure_cp,
|
from_cp=self.from_cp,
|
||||||
|
departure_cp=self.departure_cp,
|
||||||
to_cp=self.to_cp
|
to_cp=self.to_cp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -49,7 +49,8 @@ class StrikeEvent(Event):
|
|||||||
self.game,
|
self.game,
|
||||||
attacker_name=self.attacker_name,
|
attacker_name=self.attacker_name,
|
||||||
defender_name=self.defender_name,
|
defender_name=self.defender_name,
|
||||||
from_cp=self.departure_cp,
|
from_cp=self.from_cp,
|
||||||
|
departure_cp=self.departure_cp,
|
||||||
to_cp=self.to_cp
|
to_cp=self.to_cp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -39,11 +39,13 @@ class Operation:
|
|||||||
attacker_name: str,
|
attacker_name: str,
|
||||||
defender_name: str,
|
defender_name: str,
|
||||||
from_cp: ControlPoint,
|
from_cp: ControlPoint,
|
||||||
|
departure_cp: ControlPoint,
|
||||||
to_cp: ControlPoint = None):
|
to_cp: ControlPoint = None):
|
||||||
self.game = game
|
self.game = game
|
||||||
self.attacker_name = attacker_name
|
self.attacker_name = attacker_name
|
||||||
self.defender_name = defender_name
|
self.defender_name = defender_name
|
||||||
self.from_cp = from_cp
|
self.from_cp = from_cp
|
||||||
|
self.departure_cp = departure_cp
|
||||||
self.to_cp = to_cp
|
self.to_cp = to_cp
|
||||||
self.is_quick = False
|
self.is_quick = False
|
||||||
|
|
||||||
@ -89,7 +91,7 @@ class Operation:
|
|||||||
self.attackers_starting_position = None
|
self.attackers_starting_position = None
|
||||||
self.defenders_starting_position = None
|
self.defenders_starting_position = None
|
||||||
else:
|
else:
|
||||||
self.attackers_starting_position = self.from_cp.at
|
self.attackers_starting_position = self.departure_cp.at
|
||||||
self.defenders_starting_position = self.to_cp.at
|
self.defenders_starting_position = self.to_cp.at
|
||||||
|
|
||||||
def prepare_carriers(self, for_units: db.UnitsDict):
|
def prepare_carriers(self, for_units: db.UnitsDict):
|
||||||
@ -101,12 +103,10 @@ class Operation:
|
|||||||
country=self.game.player,
|
country=self.game.player,
|
||||||
at=global_cp.at)
|
at=global_cp.at)
|
||||||
|
|
||||||
if global_cp == self.from_cp and not self.is_quick:
|
if global_cp == self.departure_cp and not self.is_quick:
|
||||||
self.attackers_starting_position = ship
|
self.attackers_starting_position = ship
|
||||||
|
|
||||||
def generate(self):
|
def generate(self):
|
||||||
self.visualgen.generate()
|
|
||||||
|
|
||||||
# air support
|
# air support
|
||||||
self.airsupportgen.generate(self.is_awacs_enabled)
|
self.airsupportgen.generate(self.is_awacs_enabled)
|
||||||
for i, tanker_type in enumerate(self.airsupportgen.generated_tankers):
|
for i, tanker_type in enumerate(self.airsupportgen.generated_tankers):
|
||||||
@ -143,12 +143,17 @@ class Operation:
|
|||||||
else:
|
else:
|
||||||
self.envgen.load(self.environment_settings)
|
self.envgen.load(self.environment_settings)
|
||||||
|
|
||||||
|
# options
|
||||||
self.forcedoptionsgen.generate()
|
self.forcedoptionsgen.generate()
|
||||||
|
|
||||||
# main frequencies
|
# main frequencies
|
||||||
self.briefinggen.append_frequency("Flight", "251 MHz AM")
|
self.briefinggen.append_frequency("Flight", "251 MHz AM")
|
||||||
if self.conflict.from_cp.is_global or self.conflict.to_cp.is_global:
|
if self.departure_cp.is_global or self.conflict.to_cp.is_global:
|
||||||
self.briefinggen.append_frequency("Carrier", "20X/ICLS CHAN1")
|
self.briefinggen.append_frequency("Carrier", "20X/ICLS CHAN1")
|
||||||
|
|
||||||
# briefing
|
# briefing
|
||||||
self.briefinggen.generate()
|
self.briefinggen.generate()
|
||||||
|
|
||||||
|
# visuals
|
||||||
|
self.visualgen.generate()
|
||||||
|
|
||||||
|
|||||||
@ -30,7 +30,7 @@ ATTACK_CIRCLE_ALT = 5000
|
|||||||
ATTACK_CIRCLE_DURATION = 15
|
ATTACK_CIRCLE_DURATION = 15
|
||||||
|
|
||||||
CAS_ALTITUDE = 1000
|
CAS_ALTITUDE = 1000
|
||||||
RTB_ALTITUDE = 1000
|
RTB_ALTITUDE = 3000
|
||||||
HELI_ALT = 900
|
HELI_ALT = 900
|
||||||
|
|
||||||
TRANSPORT_LANDING_ALT = 1000
|
TRANSPORT_LANDING_ALT = 1000
|
||||||
|
|||||||
@ -49,12 +49,14 @@ class AirSupportConflictGenerator:
|
|||||||
)
|
)
|
||||||
|
|
||||||
tanker_group.points[0].tasks.append(ActivateBeaconCommand(channel=97 + i, unit_id=tanker_group.id, aa=False))
|
tanker_group.points[0].tasks.append(ActivateBeaconCommand(channel=97 + i, unit_id=tanker_group.id, aa=False))
|
||||||
|
tanker_group.tasks.append(SetInvisibleCommand(True))
|
||||||
|
tanker_group.tasks.append(SetImmortalCommand(True))
|
||||||
|
|
||||||
if is_awacs_enabled:
|
if is_awacs_enabled:
|
||||||
awacs_unit = db.find_unittype(AWACS, self.conflict.attackers_side.name)[0]
|
awacs_unit = db.find_unittype(AWACS, self.conflict.attackers_side.name)[0]
|
||||||
self.mission.awacs_flight(
|
awacs_flight = self.mission.awacs_flight(
|
||||||
country=self.mission.country(self.game.player),
|
country=self.mission.country(self.game.player),
|
||||||
name=namegen.next_awacs_name(self.mission.country(self.game.player),),
|
name=namegen.next_awacs_name(self.mission.country(self.game.player)),
|
||||||
plane_type=awacs_unit,
|
plane_type=awacs_unit,
|
||||||
altitude=AWACS_ALT,
|
altitude=AWACS_ALT,
|
||||||
airport=None,
|
airport=None,
|
||||||
@ -62,3 +64,6 @@ class AirSupportConflictGenerator:
|
|||||||
frequency=133,
|
frequency=133,
|
||||||
start_type=StartType.Warm,
|
start_type=StartType.Warm,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
awacs_flight.tasks.append(SetInvisibleCommand(True))
|
||||||
|
awacs_flight.tasks.append(SetImmortalCommand(True))
|
||||||
|
|||||||
@ -285,6 +285,7 @@ class Conflict:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def intercept_conflict(cls, attacker: Country, defender: Country, position: Point, from_cp: ControlPoint, to_cp: ControlPoint, theater: ConflictTheater):
|
def intercept_conflict(cls, attacker: Country, defender: Country, position: Point, from_cp: ControlPoint, to_cp: ControlPoint, theater: ConflictTheater):
|
||||||
|
heading = from_cp.position.heading_between_point(position)
|
||||||
return cls(
|
return cls(
|
||||||
position=position.point_from_heading(position.heading_between_point(to_cp.position), INTERCEPT_CONFLICT_DISTANCE),
|
position=position.point_from_heading(position.heading_between_point(to_cp.position), INTERCEPT_CONFLICT_DISTANCE),
|
||||||
theater=theater,
|
theater=theater,
|
||||||
|
|||||||
@ -54,14 +54,12 @@ class TriggersGenerator:
|
|||||||
vehicle_group.late_activation = True
|
vehicle_group.late_activation = True
|
||||||
activate_by_trigger.append(vehicle_group)
|
activate_by_trigger.append(vehicle_group)
|
||||||
|
|
||||||
"""
|
|
||||||
conflict_distance = player_cp.position.distance_to_point(self.conflict.position)
|
conflict_distance = player_cp.position.distance_to_point(self.conflict.position)
|
||||||
minimum_radius = max(conflict_distance - TRIGGER_MIN_DISTANCE_FROM_START, TRIGGER_RADIUS_MINIMUM)
|
minimum_radius = max(conflict_distance - TRIGGER_MIN_DISTANCE_FROM_START, TRIGGER_RADIUS_MINIMUM)
|
||||||
if minimum_radius < 0:
|
if minimum_radius < 0:
|
||||||
minimum_radius = 0
|
minimum_radius = 0
|
||||||
|
|
||||||
result_radius = min(minimum_radius, radius)
|
radius = min(minimum_radius, radius)
|
||||||
"""
|
|
||||||
|
|
||||||
activation_trigger_zone = self.mission.triggers.add_triggerzone(self.conflict.position, radius, name="Activation zone")
|
activation_trigger_zone = self.mission.triggers.add_triggerzone(self.conflict.position, radius, name="Activation zone")
|
||||||
activation_trigger = TriggerOnce(Event.NoEvent, "Activation trigger")
|
activation_trigger = TriggerOnce(Event.NoEvent, "Activation trigger")
|
||||||
|
|||||||
@ -124,6 +124,17 @@ class VisualGenerator:
|
|||||||
position=pos)
|
position=pos)
|
||||||
break
|
break
|
||||||
|
|
||||||
|
def _generate_stub_planes(self):
|
||||||
|
mission_units = set()
|
||||||
|
for coalition_name, coalition in self.mission.coalition.items():
|
||||||
|
for country in coalition.countries.values():
|
||||||
|
for group in country.plane_group + country.helicopter_group + country.vehicle_group:
|
||||||
|
for unit in group.units:
|
||||||
|
mission_units.add(db.unit_type_of(unit))
|
||||||
|
|
||||||
|
for unit_type in mission_units:
|
||||||
|
self.mission.static_group(self.mission.country("USA"), "a", unit_type, Point(0, 0))
|
||||||
|
|
||||||
def generate_target_smokes(self, target):
|
def generate_target_smokes(self, target):
|
||||||
spread = target.size * DESTINATION_SMOKE_DISTANCE_FACTOR
|
spread = target.size * DESTINATION_SMOKE_DISTANCE_FACTOR
|
||||||
for _ in range(0, int(target.size * DESTINATION_SMOKE_AMOUNT_FACTOR * (1.1 - target.base.strength))):
|
for _ in range(0, int(target.size * DESTINATION_SMOKE_AMOUNT_FACTOR * (1.1 - target.base.strength))):
|
||||||
@ -159,3 +170,4 @@ class VisualGenerator:
|
|||||||
|
|
||||||
def generate(self):
|
def generate(self):
|
||||||
self._generate_frontline_smokes()
|
self._generate_frontline_smokes()
|
||||||
|
self._generate_stub_planes()
|
||||||
|
|||||||
@ -195,7 +195,7 @@ class EventMenu(Menu):
|
|||||||
return
|
return
|
||||||
|
|
||||||
if isinstance(self.event, FrontlineAttackEvent) or isinstance(self.event, FrontlinePatrolEvent):
|
if isinstance(self.event, FrontlineAttackEvent) or isinstance(self.event, FrontlinePatrolEvent):
|
||||||
if self.base.total_armor == 0:
|
if self.event.from_cp.base.total_armor == 0:
|
||||||
self.error_label["text"] = "No ground vehicles available to attack!"
|
self.error_label["text"] = "No ground vehicles available to attack!"
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@ -164,7 +164,8 @@ class OverviewCanvas:
|
|||||||
InsurgentAttackEvent: "insurgent_attack",
|
InsurgentAttackEvent: "insurgent_attack",
|
||||||
InterceptEvent: "air_intercept",
|
InterceptEvent: "air_intercept",
|
||||||
NavalInterceptEvent: "naval_intercept",
|
NavalInterceptEvent: "naval_intercept",
|
||||||
StrikeEvent: "strike"}.items():
|
StrikeEvent: "strike",
|
||||||
|
UnitsDeliveryEvent: "delivery"}.items():
|
||||||
self.event_icons[category] = pygame.image.load(os.path.join("resources", "ui", "events", image + ".png"))
|
self.event_icons[category] = pygame.image.load(os.path.join("resources", "ui", "events", image + ".png"))
|
||||||
|
|
||||||
|
|
||||||
@ -473,7 +474,7 @@ class OverviewCanvas:
|
|||||||
return rect
|
return rect
|
||||||
|
|
||||||
def _events_priority_key(event: Event) -> int:
|
def _events_priority_key(event: Event) -> int:
|
||||||
priority_list = [InfantryTransportEvent, StrikeEvent, BaseAttackEvent]
|
priority_list = [InfantryTransportEvent, StrikeEvent, BaseAttackEvent, UnitsDeliveryEvent]
|
||||||
if type(event) not in priority_list:
|
if type(event) not in priority_list:
|
||||||
return 0
|
return 0
|
||||||
else:
|
else:
|
||||||
@ -481,7 +482,6 @@ class OverviewCanvas:
|
|||||||
|
|
||||||
events = self.game.events
|
events = self.game.events
|
||||||
events.sort(key=_events_priority_key, reverse=True)
|
events.sort(key=_events_priority_key, reverse=True)
|
||||||
print(events)
|
|
||||||
|
|
||||||
label_to_draw = None
|
label_to_draw = None
|
||||||
for event in self.game.events:
|
for event in self.game.events:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user