Refactor Templates to Layouts, Review and Cleanup

- Fix tgogenerator
- Fix UI for ForceGroup and Layouts
- Fix ammo depot handling
- Split bigger files in smaller meaningful files (TGO, layouts, forces)
- Renamed Template to Layout
- Renamed GroundGroup to TheaterGroup and GroundUnit to TheaterUnit
- Reorganize Layouts and UnitGroups to a ArmedForces class and ForceGroup similar to the AirWing and Squadron
- Reworded the UnitClass, GroupRole, GroupTask (adopted to PEP8) and reworked the connection from Role and Task
- added comments
- added missing unit classes
- added temp workaround for missing classes
- add repariable property to TheaterUnit
- Review and Cleanup

Added serialization for loaded templates

Loading the templates from the .miz files takes a lot of computation time and in the future there will be more templates added to the system. Therefore a local pickle serialization for the loaded templates was re-added:
- The pickle will be created the first time the TemplateLoader will be accessed
- Pickle is stored in Liberation SaveDir
- Added UI option to (re-)import templates
This commit is contained in:
RndName
2022-02-10 12:23:16 +01:00
parent 1ae6503ceb
commit 2c17a9a52e
138 changed files with 1985 additions and 3096 deletions

View File

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 57 KiB

View File

@@ -1,8 +1,17 @@
# The Template System
# ArmedForces and the Layout System
The Template System is a complete rework of the generator-based logic to build theater-ground-objects (Liberation Objects).
In the original system the generator was written in python and generated a group with a defined and static logic, written in code.
The template sytem will now decouple the alignment / positioning from units and the definition of theire actual type (like Ural-375).
Armed Forces and the Layout System is a complete rework of the generator-based logic to build theater-ground-objects (Liberation Objects which group ground units).
This will change underlying parts of the code base which will allow major improvements to the Ground Warfare in upcoming features.
**Armed Forces**\
TODO Describe the introduction of ArmedForces which are similar to the AirWing and Squadrons.
The armed forces of each coalition contain multiple ForceGroups. A ForceGroup is a logical set of units (Vehicles, Ships, Statics) and corresponding Layouts for these units.
TODO Picture / Example to describe what it is... for example with Hawk Battery or S-300 Battery
**The Layout System**\
In the previous system the generator was written in python and generated a group with a defined and static logic, written in code.
The layout sytem will now decouple the alignment / positioning from units and the definition of theire actual type (like Ural-375).
The template system allows to define the layout and set which unit types or classes (All logistic units for example) are able to fit into the template.
Ultimately this will allow to have generalized templates which can be reused by multiple types of units. Best example is the definition of a SAM layout.
Previously we had a generator for every different SAM Site, now we can just reuse the alignemnt (e.g. 6 Launchers in a circle alignment) with more generalization.
@@ -11,14 +20,15 @@ This also allows Users and Designers to easily create or modify templates as the
In total the new system reduces the complexity and allows to precisely align / orient units as needed and create realistic looking ground units.
As the whole ground unit generation and handling was reworked it is now also possible to add static units to a ground object, so even Fortifcation or similar can be added to templates in the future.
## General Concept
![Overview](template_overview.png)
![Overview](layouts.png)
TODO: Describe the general flow of the Template system
TODO: Describe the serialization (Developer Tools: Import Templates)
TODO Lifecycle:
The template will be automatically validated on campaign generation against the player and enemy factions.
If the factions support the template (based on the unit_types and unit_classes) then it will be added to the game.
@@ -26,13 +36,15 @@ If a faction does not support a group from the template it will be removed if op
During campaign initialization the start_generator will request unit_groups for the preset locations defined by the campaign designer. The faction will then offer possible groups and the matching template.
The Liberation Group (TheaterGroundObject) is then being generated from this UnitGroup.
- GroundWar currently does **not** use the template system
- GroundWar (Frontline) currently does **not** use the template system
- User can buy new SAM or ArmorGroup using this template system
- Campaign Designers can also define precicsly (if needed) which template or UnitGroup should be placed at a specific location by using TriggerZones with custom properties
Example for a customized Ground Object Buy Menu which makes use of Templates and UnitGroups:
![ground_object_buy_menu.png](ground_object_buy_menu.png)
### The template miz
*Important*: Every unit_type has to be in a separate Group for the template to work.
@@ -44,7 +56,7 @@ Unit Count per group has to be the amount set with the unit_count property.
During template generation the system will go through all possible units and will assign the respective unit_type to the units up to the maximum allow unit_count from the mapping.
![template_miz_example.png](template_miz_example.png)
![template_miz_example.png](layout_miz_example.png)
### The template yaml
@@ -102,9 +114,8 @@ template_file: resources/templates/anti_air/AAA.miz
```
### Roles, Tasks and Classes
TODO Improve Naming? Same logic as with the Squadrons.. Also brainstorm if we should rename the UnitGroup which basicly is the equivalent of a "Package"
Role and Tasking
TODO Describe Role, Tasking and Classes
[GroupRole and GroupTask](/game/data/groups.py)
@@ -112,12 +123,28 @@ Role and Tasking
## How to add / modify a template
template.miz (positioning / alignment) and template.yaml (Mapping)
A template consists of two special files:
Best practice:
- Copy existing Template and rename the files
- Adjust the .miz and change the group names accordingly
- Adjust the .yaml file to the needs and check for the correct group names
- template.miz which defines the actual positioning and alignment of the groups / units
- template.yaml which defines the necessary information like amount of units, possible types or classes.
To add a new template a new yaml has to be created as every yaml can only define exact one template. Best practice is to copy paste an existing template which is similar to the one to be created as starting point. The next step is to create a new .miz file and align Units and statics to the wishes. Even if existing ones can be reused, best practice is to always create a fresh one to prevent side effects.
The most important part is to use a new Group for every different Unit Type. It is not possible to mix Unit Types in one group within a template. For example it is not possible to have a logistic truck and a AAA in the same group. The miz file will only be used to get the exact position and orientation of the units, therefore it is irrelevant which type of unit will be used. The unit type will be later defined inside the yaml file.
For the next step all Group names have to be added to the yaml file. Take care to that these names match exactly! Assign the unit_types or unit_classes properties to math the needs.
TODO Improve this with images and more detailed description
**IMPORTANT**: Due to performance increase the templates get serialized to a pickle file in the save dir as `templates.p`. When templates were modified a manual re-import of all templates has to be triggered.
This can be done by either deleting this file or using the Liberation UI. There is a special option in the ToolBar under Tools: Import Templates.
## Import Layouts into Liberation
TODO Describe the serialization and import.
For performance improvements all layouts are serialized to a so called pickle file. Every time changes are made to the layouts this file has to be recreated.
It will also be recreated after each Liberation update as it will check the Version Number and recreate it when changes are recognized.
This file is stored in the save folder
## Migration from Generators
@@ -125,9 +152,9 @@ Best practice:
- All generators removed and migrated to templates
- These templates will in the next step be generalized
TODO: Update the template_list.md with the changes in Role/Tasking
[List of supported templates](template_list.md)
The previous generators were migrated using a script which build a group using the generator. All of these groups were save into one .miz file [original_generator_layouts.miz](/resources/layouts/original_generator_layouts.miz).
This miz file can be used to verify the templates and to generalize similar templates to decouple the layout from the actual units. As this is a time-consuming and sphisticated task this will be done over time.
With the first step the technical requirements will be fulfilled so that the generalization can happen afterwards the technical pr gets merged.
### Updates for Factions
@@ -138,65 +165,53 @@ During migration all default factions were automatically updated, so they will w
What was changed:
- Removed the `ewrs` list. All EWRs are now defined in the list "air_defense_units".
- Added the `air_defense_units` list. All units with the Role AntiAir can be defined here as [GroundUnitType](/game/dcs/groundunittype.py). All possible units are defined in [/resources/units/ground_units](/resources/units/ground_units)
- Added `preset_groups`. This list allows to define Preset Groups (described above) like SAM Systems consisting of Launcher, SR, TR and so on instead of adding them each to "air_defense_units". The presets are defined in [/resources/units/unit_groups](/resources/units/unit_groups)
- Added `preset_groups`. This list allows to define Preset Groups (described above) like SAM Systems consisting of Launcher, SR, TR and so on instead of adding them each to "air_defense_units". The presets are defined in [/resources/units/unit_groups](/resources/units/groups)
- Migrated `air_defenses` to air_defense_units and preset_sets.
- `Missiles` are migrated to GroundUnitTypes instead of Generator names (see air_defense_units for how to use)
- Removed `cruisers`, `destroyers` and `naval_generators`. Migrated them to naval_units and preset_groups
- added `naval_units` with the correct ship name found here [/resources/units/ships](/resources/units/ships)
- `aircraft_carrier` and `helicopter_carrier` were moved to `naval_units` as well.
Possible Preset Groups:
TODO generate list with old generator name
Possible EWRs:
| Name in Faction file |
|------------------------------------------------------|
| EWR 1L13 |
| EWR 55G6 |
| MCC-SR Sborka "Dog Ear" SR |
| SAM Roland EWR |
| SAM P19 "Flat Face" SR (SA-2/3) |
| SAM Patriot STR |
| SAM SA-10 S-300 "Grumble" Big Bird SR |
| SAM SA-11 Buk "Gadfly" Snow Drift SR |
| SAM SA-6 Kub "Straight Flush" STR |
| SAM Hawk SR (AN/MPQ-50) |
| SAM SA-5 S-200 ST-68U "Tin Shield" SR |
## Unit Groups
TODO Explain more
- Sum up groups of different units which are used together (like a sam site).
- UnitGroup allows to define this logical group and add this to the faction file.
- UnitGroups can have preferred templates
# Open Points
Example:
```
name: SA-10/S-300PS # The name which will be used in the faction file
role: AntiAir # The role of the Group
tasks:
- LORAD # The task the Group can fulfill
ground_units:
- SAM SA-10 S-300 "Grumble" Clam Shell SR
- SAM SA-10 S-300 "Grumble" Big Bird SR
- SAM SA-10 S-300 "Grumble" C2
- SAM SA-10 S-300 "Grumble" Flap Lid TR
- SAM SA-10 S-300 "Grumble" TEL D
- SAM SA-10 S-300 "Grumble" TEL C
ship_units:
- # Add some naval units here
statics:
- # Add some statics here
templates:
- S-300 Site # The template names which should be used by this group
```
A list of all available units is accessible here: [/resources/units/unit_groups](/resources/units/groups)
### Optional Tasks which can be done later
- [ ] Complex Presets which allow campaign designer to specify the exact forcegroup or layout which should be used.
- [ ] Generalize all layouts (Like MERAD or SHORAD templates)
- [ ] Reuse the layouts for the frontline
- [ ] Add UI Implementation to choose which templates should be used during new game wizard (like AirWing Config)
- [ ] Rework "Names_By_Category" to just use the Tasking instead of a string.
- [ ] Add remaining missing classes to the units which currently dont have a class
- [x] Rework SAM Systems to unit_groups: migrated all `air_defense`
- [ ] Review Naming of all classes and so on
- [X] Improve UI Display Name for the new ShipUniType
- [ ] Verify if the campaign will be generated the same as before
- [x] Fix the generation of buildings
- [ ] Verify the handling of buildings (ammo and factory for example work different.)
- [X] Correct Missiles and Coastal (Counts?)
- [X] Faction Group Count (Navy, Missile, Coastal).. used for?? For nothing! removed.
- [x] Navy Generators -> Destroyers, Cruisers und Preset_groups Migration
- [x] Fix & Generalize Navy Templates (wrong unit number)
- [X] Fix Bug: Enemy Navy PLanes spawn at blue Carrier.
- [x] Add Naming for all AircraftCarrier and HelicopterCarrier (whats with the SC updated ones?)
- [X] Verfiy SuperCarrier Upgrade
- [X] Special Handling for Carrier Strike Group 8 (was not even working before..) can now be added as preset group
- [X] Validate that all Waypoints and taskings are correct and working (some use the group.name)
- [ ] Verify that DEAD Flights are untouched from these changes.. They are missing a attack command
- [ ] Finish Documentation
- [ ] Naming of created groups -> It uses the template name currently which is not great
- [x] Fix the Faction overview site not showing the newly added preset_groups and AA Units
- [ ] Add missing classes to the units so that they can be used by the templates
- [x] Replace BuyUi implementation from Template to "Preset" by using the available UnitGroups
- [x] Fix Buy menu for Armor Groups.
- [x] Fix Buy menu not allowing to change the amount when only one unit_type is available.
- [x] Fix Group order is not correct (group2 is 0, group1 is 1 if dcs_group id for group2 is smaller)
- [ ] Add generalized Templates for Lorad and Merad
- [ ] Generalize all Templates

BIN
doc/layouts/layouts.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

View File

@@ -1,56 +0,0 @@
| Role | Tasks | Template Name | Units |
|---------------|------------------------------|----------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| AntiAir | AAA | AAA Site | <ul><li>Classes = [ AAA]</li><li>Classes = [ Logistics]</li></ul> |
| AntiAir | AAA | AAA Mobile | <ul><li>Classes = [ AAA]</li><li>Classes = [ Logistics]</li></ul> |
| AntiAir | AAA | AAA Radar Site | <ul><li>Classes = [ SearchRadar]</li><li>Classes = [ AAA]</li><li>Classes = [ Logistics]</li></ul> |
| AntiAir | AAA | Cold War Flak Site | <ul><li>Classes = [ SearchRadar]</li><li>8.8 cm Flak 18</li><li>S-60 57mm</li><li>Classes = [ AAA]</li><li>Classes = [ Logistics]</li></ul> |
| AntiAir | AAA | Flak Site | <ul><li>2 cm Flakvierling 38, 8.8 cm Flak 18, 8.8 cm Flak 36, 8.8 cm Flak 37, 8.8 cm Flak 41, 2 cm Flak 38</li><li>2 cm Flakvierling 38</li><li>8.8 cm Flak 36</li><li>SL Flakscheinwerfer 37</li><li>PU Maschinensatz_33</li><li>AAA SP Kdo.G.40</li><li>LUV Kubelwagen 82</li><li>Truck Opel Blitz</li></ul> |
| AntiAir | AAA | WW2 Flak Site | <ul><li>8.8 cm Flak 18</li><li>Truck Opel Blitz</li></ul> |
| AntiAir | AAA | WW2 Ally Flak Site | <ul><li>QF 3.7-inch AA Gun</li><li>M1 37mm Gun</li><li>M45 Quadmount</li><li>Willys Jeep</li><li>M30 Cargo Carrier</li><li>M4 High-Speed Tractor</li><li>Truck Bedford</li></ul> |
| AntiAir | MERAD | Hawk Site | <ul><li>SAM Hawk SR (AN/MPQ-50)</li><li>SAM Hawk Platoon Command Post (PCP)</li><li>SAM Hawk TR (AN/MPQ-46)</li><li>SAM Hawk LN M192</li><li>M163 Vulcan Air Defense System</li></ul> |
| AntiAir | MERAD | SA-2/S-75 Site | <ul><li>SAM P19 "Flat Face" SR (SA-2/3)</li><li>SAM SA-2 S-75 "Fan Song" TR</li><li>SAM SA-2 S-75 "Guideline" LN</li></ul> |
| AntiAir | MERAD | SA-3/S-125 Site | <ul><li>SAM P19 "Flat Face" SR (SA-2/3)</li><li>SAM SA-3 S-125 "Low Blow" TR</li><li>SAM SA-3 S-125 "Goa" LN</li></ul> |
| AntiAir | MERAD | SA-6 Kub Site | <ul><li>SAM SA-6 Kub "Straight Flush" STR</li><li>SAM SA-6 Kub "Gainful" TEL</li></ul> |
| AntiAir | MERAD | SA-11 Buk Battery | <ul><li>SAM SA-11 Buk "Gadfly" Snow Drift SR</li><li>SAM SA-11 Buk "Gadfly" C2</li><li>SAM SA-11 Buk "Gadfly" Fire Dome TEL</li></ul> |
| AntiAir | MERAD | SA-17 Grizzly Battery | <ul><li>SAM SA-11 Buk "Gadfly" Snow Drift SR</li><li>SAM SA-11 Buk "Gadfly" C2</li><li>SAM SA-17 Buk M1-2 LN 9A310M1-2</li></ul> |
| AntiAir | MERAD | NASAMS AIM-120B | <ul><li>SAM NASAMS SR MPQ64F1</li><li>SAM NASAMS C2</li><li>SAM NASAMS LN AIM-120B</li></ul> |
| AntiAir | MERAD | NASAMS AIM-120C | <ul><li>SAM NASAMS SR MPQ64F1</li><li>SAM NASAMS C2</li><li>SAM NASAMS LN AIM-120C</li></ul> |
| AntiAir | SHORAD | Rapier AA Site | <ul><li>SAM Rapier Blindfire TR</li><li>SAM Rapier Tracker</li><li>SAM Rapier LN</li></ul> |
| AntiAir | SHORAD | Roland Site | <ul><li>SAM Roland EWR</li><li>Roland 2 (Marder Chassis)</li><li>Truck M818 6x6</li></ul> |
| AntiAir | SHORAD | HQ-7 Site | <ul><li>HQ-7 Self-Propelled STR</li><li>HQ-7 Launcher</li><li>ZU-23 on Ural-375</li></ul> |
| AntiAir | SHORAD | Freya EWR Site | <ul><li>EWR FuMG-401 Freya LZ</li><li>2 cm Flakvierling 38</li><li>8.8 cm Flak 18</li><li>LUV Kubelwagen 82</li><li>Sd.Kfz.7 Tractor</li><li>LUV Kettenrad</li><li>PU Maschinensatz_33</li><li>AAA SP Kdo.G.40</li><li>Infantry Mauser 98</li></ul> |
| AntiAir | SHORAD | Short Range Anti Air Group | <ul><li>Classes = [ SHORAD]</li><li>Classes = [ Logistics]</li></ul> |
| AntiAir | LORAD | Patriot Battery | <ul><li>SAM Patriot STR</li><li>SAM Patriot CR (AMG AN/MRC-137)</li><li>SAM Patriot ECS</li><li>SAM Patriot C2 ICC</li><li>SAM Patriot EPP-III</li><li>SAM Patriot LN</li><li>Classes = [ AAA]</li><li>Classes = [ SHORAD]</li></ul> |
| AntiAir | LORAD | SA-5/S-200 Site | <ul><li>SAM SA-5 S-200 ST-68U "Tin Shield" SR</li><li>SAM SA-5 S-200 "Square Pair" TR"</li><li>Truck Ural-375</li><li>SAM SA-5 S-200 "Gammon" LN"</li></ul> |
| AntiAir | LORAD | SA-12/S-300V Battery | <ul><li>SAM SA-12 S-300V 9S15 SR</li><li>SAM SA-12 S-300V 9S19 SR</li><li>SAM SA-12 S-300V 9S457 CP</li><li>SAM SA-12 S-300V 9S32 TR</li><li>SAM SA-12 S-300V 9A82 LN</li><li>SAM SA-12 S-300V 9A83 LN</li><li>SA-19 Grison (2K22 Tunguska)</li><li>SA-15 Tor</li></ul> |
| AntiAir | LORAD | SA-20/S-300PMU-1 Battery | <ul><li>SAM SA-20 S-300PMU1 SR 5N66E</li><li>SAM SA-20 S-300PMU1 SR 64N6E</li><li>SAM SA-20 S-300PMU1 CP 54K6</li><li>SAM SA-20 S-300PMU1 TR 30N6E</li><li>SAM SA-20 S-300PMU1 LN 5P85CE</li><li>SAM SA-20 S-300PMU1 LN 5P85DE</li><li>SA-19 Grison (2K22 Tunguska)</li><li>SA-15 Tor</li></ul> |
| AntiAir | LORAD | SA-20B/S-300PMU-2 Battery | <ul><li>SAM SA-20 S-300PMU1 SR 5N66E</li><li>SAM SA-20 S-300PMU1 SR 64N6E</li><li>SAM SA-20B S-300PMU2 CP 54K6E2</li><li>SAM SA-20B S-300PMU2 TR 92H6E(truck)</li><li>SAM SA-20B S-300PMU2 LN 5P85SE2</li><li>SA-19 Grison (2K22 Tunguska)</li><li>SA-15 Tor</li></ul> |
| AntiAir | LORAD | SA-23/S-300VM Battery | <ul><li>SAM SA-23 S-300VM 9S15M2 SR</li><li>SAM SA-23 S-300VM 9S19M2 SR</li><li>SAM SA-23 S-300VM 9S457ME CP</li><li>SAM SA-23 S-300VM 9S32ME TR</li><li>SAM SA-23 S-300VM 9A82ME LN</li><li>SAM SA-23 S-300VM 9A83ME LN</li><li>SA-19 Grison (2K22 Tunguska)</li><li>SA-15 Tor</li></ul> |
| AntiAir | LORAD | SA-10/S-300PS Battery | <ul><li>SAM SA-10 S-300 "Grumble" Clam Shell SR</li><li>SAM SA-10 S-300 "Grumble" Big Bird SR</li><li>SAM SA-10 S-300 "Grumble" C2</li><li>SAM SA-10 S-300 "Grumble" Flap Lid TR</li><li>SAM SA-10 S-300 "Grumble" TEL D</li><li>SAM SA-10 S-300 "Grumble" TEL C</li><li>Classes = [ AAA]</li><li>Classes = [ SHORAD]</li></ul> |
| AntiAir | EarlyWarningRadar | Early-Warning Radar | <ul><li>Classes = [ EarlyWarningRadar]</li></ul> |
| Building | StrikeTarget | ww2bunker1 | <ul><li>Siegfried Line</li><li>Fire Control Bunker</li><li></li></ul> |
| Building | StrikeTarget | allycamp1 | <ul><li>FARP Tent</li><li>Haystack 4</li><li>Haystack 3</li><li>Concertina wire</li><li></li></ul> |
| Building | StrikeTarget | fuel1 | <ul><li>Tank</li><li>Tank 3</li></ul> |
| Building | StrikeTarget | ware1 | <ul><li>Warehouse</li><li>Hangar A</li></ul> |
| Building | StrikeTarget | farp1 | <ul><li>FARP Tent</li><li>FARP Ammo Dump Coating</li><li>FARP CP Blindage</li><li>FARP Fuel Depot</li></ul> |
| Building | StrikeTarget | derrick1 | <ul><li>Oil derrick</li><li>Pump station</li><li>Subsidiary structure 2</li></ul> |
| Building | StrikeTarget | village1 | <ul><li>Small house 1A</li><li>Small werehouse 1</li><li>Small house 1B</li></ul> |
| Building | StrikeTarget | ww2bunker2 | <ul><li>Fire Control Bunker</li><li>Siegfried Line</li><li>Concertina wire</li><li>Belgian gate</li><li>Czech hedgehogs 1</li></ul> |
| Building | Ammo | ammo1 | <ul><li>.Ammunition depot</li><li>Hangar B</li></ul> |
| Building | StrikeTarget, Comms | comms | <ul><li>TV tower, Comms tower M</li></ul> |
| Building | Oil | oil1 | <ul><li>Oil platform</li></ul> |
| Building | FOB | fob1 | <ul><li>.Command Center</li><li>Barracks 2</li><li>Garage small B</li></ul> |
| Building | StrikeTarget, Power | power1 | <ul><li>Repair workshop</li><li>Workshop A</li><li>Garage B</li><li>Farm B</li></ul> |
| Building | Factory | factory1 | <ul><li>Tech combine</li><li>Tech hangar A</li></ul> |
| Defenses | Missile | Missile | <ul><li>Classes = [ Missile]</li><li>Classes = [ Logistics]</li><li>Classes = [ AAA]</li><li>Classes = [ SHORAD]</li></ul> |
| Defenses | Coastal | Silkworm | <ul><li>Classes = [ SearchRadar]</li><li>Classes = [ Missile]</li><li>Classes = [ Logistics]</li><li>Classes = [ AAA]</li><li>Classes = [ SHORAD]</li></ul> |
| GroundForce | BaseDefense, FrontLine | Armor Group | <ul><li>Classes = [ APC, ATGM, IFV, Tank]</li></ul> |
| GroundForce | BaseDefense, FrontLine | Armor Group with Anti-Air | <ul><li>Classes = [ APC, ATGM, IFV, Tank]</li><li>Classes = [ AAA, SHORAD, Manpad]</li></ul> |
| Naval | Navy | WW2 LST Group | <ul><li>LS Samuel Chase</li><li>LST Mk.II</li></ul> |
| Naval | Navy | Russian Navy | <ul><li>Corvette 1124.4 Grish, Corvette 1241.1 Molniya</li><li>Frigate 11540 Neustrashimy, Frigate 1135M Rezky</li><li>Cruiser 1164 Moskva</li></ul> |
| Naval | Navy | Chinese Navy | <ul><li>Type 054A Frigate</li><li>Type 052C Destroyer, Type 052B Destroyer</li></ul> |
| Naval | Navy | Naval Two Ship | <ul><li>Classes = [ Destroyer, Cruiser, Boat, Submarine, LandingShip]</li></ul> |
| Naval | AircraftCarrier | Carrier Group | <ul><li>Classes = [ AircraftCarrier]</li><li>Classes = [ Destroyer]</li></ul> |
| Naval | AircraftCarrier | Carrier Strike Group 8 | <ul><li>CVN-74 John C. Stennis</li><li>DDG Arleigh Burke IIa</li><li>CG Ticonderoga</li></ul> |
| Naval | HelicopterCarrier | LHA Group | <ul><li>Classes = [ HelicopterCarrier]</li><li>Classes = [ Destroyer]</li></ul> |
| Missing Units | SK_C_28_naval_gun, house2arm | | |

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB