diff --git a/game/db.py b/game/db.py
index 8141e237..6302863b 100644
--- a/game/db.py
+++ b/game/db.py
@@ -30,9 +30,11 @@ from game.factions.russia_1965 import Russia_1965
from game.factions.russia_1990 import Russia_1990
from game.factions.russia_2010 import Russia_2010
from game.factions.spain_1990 import Spain_1990
+from game.factions.sweden_1990 import Sweden_1990
from game.factions.turkey_2005 import Turkey_2005
from game.factions.uae_2005 import UAE_2005
from game.factions.uk_1990 import UnitedKingdom_1990
+from game.factions.ukraine_2010 import Ukraine_2010
from game.factions.usa_1944 import USA_1944
from game.factions.usa_1955 import USA_1955
from game.factions.usa_1960 import USA_1960
@@ -162,23 +164,26 @@ PRICES = {
Armor.IFV_BMD_1: 8,
Armor.IFV_BMP_1: 14,
Armor.IFV_BMP_2: 16,
- Armor.IFV_BMP_3: 20,
+ Armor.IFV_BMP_3: 18,
+ Armor.ZBD_04A: 12,
Armor.APC_Cobra: 4,
Armor.APC_M113: 6,
Armor.APC_M1043_HMMWV_Armament: 2,
Armor.ATGM_M1045_HMMWV_TOW: 8,
Armor.IFV_M2A2_Bradley: 12,
- Armor.APC_M1126_Stryker_ICV: 16,
- Armor.ATGM_M1134_Stryker: 18,
+ Armor.APC_M1126_Stryker_ICV: 10,
+ Armor.ATGM_M1134_Stryker: 12,
Armor.MBT_M60A3_Patton: 18,
Armor.MBT_M1A2_Abrams: 35,
Armor.MBT_Leclerc: 35,
Armor.MBT_Leopard_1A3: 24,
Armor.MBT_Leopard_2: 35,
Armor.MBT_Merkava_Mk__4: 35,
- Armor.TPz_Fuchs: 8,
+ Armor.TPz_Fuchs: 5,
Armor.MBT_Challenger_II: 30,
+ Armor.IFV_Marder: 10,
+ Armor.IFV_MCV_80: 10,
Unarmed.Transport_UAZ_469: 3,
Unarmed.Transport_Ural_375: 3,
@@ -336,9 +341,24 @@ UNIT_BY_TASK = {
Armor.ARV_BRDM_2,
Armor.ARV_BRDM_2,
Armor.ARV_BTR_RD,
+ Armor.ARV_BTR_RD,
+ Armor.ARV_BTR_RD,
+ Armor.ARV_BTR_RD,
Armor.APC_BTR_80,
Armor.APC_BTR_80,
Armor.APC_BTR_80,
+ Armor.APC_BTR_80,
+ Armor.APC_BTR_80,
+ Armor.IFV_BMP_1,
+ Armor.IFV_BMP_1,
+ Armor.IFV_BMP_1,
+ Armor.IFV_BMP_2,
+ Armor.IFV_BMP_2,
+ Armor.IFV_BMP_3,
+ Armor.IFV_BMP_3,
+ Armor.ZBD_04A,
+ Armor.ZBD_04A,
+ Armor.ZBD_04A,
Armor.MBT_T_55,
Armor.MBT_T_55,
Armor.MBT_T_55,
@@ -368,6 +388,16 @@ UNIT_BY_TASK = {
Armor.IFV_M2A2_Bradley,
Armor.ATGM_M1134_Stryker,
Armor.ATGM_M1134_Stryker,
+ Armor.APC_M1126_Stryker_ICV,
+ Armor.APC_M1126_Stryker_ICV,
+ Armor.APC_M1126_Stryker_ICV,
+ Armor.IFV_MCV_80,
+ Armor.IFV_MCV_80,
+ Armor.IFV_MCV_80,
+ Armor.IFV_Marder,
+ Armor.IFV_Marder,
+ Armor.IFV_Marder,
+ Armor.IFV_Marder,
Armor.MBT_M60A3_Patton,
Armor.MBT_M60A3_Patton,
Armor.MBT_M60A3_Patton,
@@ -531,6 +561,8 @@ FACTIONS = {
"United Kingdown 1990": UnitedKingdom_1990,
"Spain 1990": Spain_1990,
"Italy 1990": Italy_1990,
+ "Sweden 1990": Sweden_1990,
+ "Ukrain 2010": Ukraine_2010,
"India 2010": India_2010,
"Israel 2000": Israel_2000,
"Turkey 2005": Turkey_2005,
@@ -899,7 +931,6 @@ class DefaultLiveries:
class Default(Enum):
af_standard = ""
-# TODO : refactor/remove
OH_58D.Liveries = DefaultLiveries
F_16C_50.Liveries = DefaultLiveries
P_51D_30_NA.Liveries = DefaultLiveries
\ No newline at end of file
diff --git a/game/factions/germany_1990.py b/game/factions/germany_1990.py
index e819b8ca..23d36843 100644
--- a/game/factions/germany_1990.py
+++ b/game/factions/germany_1990.py
@@ -23,6 +23,7 @@ Germany_1990 = {
Armor.TPz_Fuchs,
Armor.MBT_Leopard_1A3,
Armor.MBT_Leopard_2,
+ Armor.IFV_Marder,
Unarmed.Transport_M818,
Infantry.Infantry_M4,
diff --git a/game/factions/israel_2000.py b/game/factions/israel_2000.py
index 438bf33e..c7449fa0 100644
--- a/game/factions/israel_2000.py
+++ b/game/factions/israel_2000.py
@@ -20,7 +20,7 @@ Israel_2000 = {
AH_64D,
Armor.MBT_Merkava_Mk__4,
- Armor.APC_M113, # Standing as VAB
+ Armor.APC_M113,
Unarmed.Transport_M818,
Infantry.Infantry_M4,
diff --git a/game/factions/sweden_1990.py b/game/factions/sweden_1990.py
new file mode 100644
index 00000000..4a1c711a
--- /dev/null
+++ b/game/factions/sweden_1990.py
@@ -0,0 +1,31 @@
+from dcs.vehicles import *
+from dcs.ships import *
+from dcs.planes import *
+from dcs.helicopters import *
+
+Sweden_1990 = {
+ "country": "Sweden",
+ "side": "blue",
+ "units": [
+ AJS37,
+
+ UH_1H,
+
+ AirDefence.SAM_Hawk_LN_M192,
+
+ Armor.IFV_MCV_80, # Standing as Strf 90
+ Armor.MBT_Leopard_2,
+ Armor.APC_M1126_Stryker_ICV, # Closest thing available
+
+ Unarmed.Transport_Ural_375,
+ Unarmed.Transport_UAZ_469,
+ Infantry.Soldier_AK,
+ CV_1143_5_Admiral_Kuznetsov,
+ Bulk_cargo_ship_Yakushev,
+ Dry_cargo_ship_Ivanov,
+ Tanker_Elnya_160,
+ ],
+ "shorad":[
+ AirDefence.SAM_Avenger_M1097
+ ]
+}
\ No newline at end of file
diff --git a/game/factions/uk_1990.py b/game/factions/uk_1990.py
index 5febf4dd..33cb324e 100644
--- a/game/factions/uk_1990.py
+++ b/game/factions/uk_1990.py
@@ -20,7 +20,7 @@ UnitedKingdom_1990 = {
AH_64A,
Armor.MBT_Challenger_II,
- Armor.IFV_M2A2_Bradley, # Standing as Warrior IFV
+ Armor.IFV_MCV_80,
Unarmed.Transport_M818,
Infantry.Infantry_M4,
diff --git a/game/factions/ukraine_2010.py b/game/factions/ukraine_2010.py
new file mode 100644
index 00000000..f5650fa7
--- /dev/null
+++ b/game/factions/ukraine_2010.py
@@ -0,0 +1,51 @@
+from dcs.vehicles import *
+from dcs.ships import *
+from dcs.planes import *
+from dcs.helicopters import *
+
+Ukraine_2010 = {
+ "country": "Ukraine",
+ "side": "blue",
+ "units": [
+ Su_25,
+ Su_25T,
+ Su_24M,
+ Su_27,
+ MiG_29S,
+ L_39ZA,
+
+ IL_76MD,
+ IL_78M,
+ An_26B,
+ An_30M,
+ Yak_40,
+ A_50,
+
+ Mi_8MT,
+ Mi_24V,
+
+ AirDefence.SAM_SA_3_S_125_LN_5P73,
+ AirDefence.SAM_SA_11_Buk_LN_9A310M1,
+ AirDefence.SAM_SA_10_S_300PS_LN_5P85C,
+
+ Armor.APC_M1043_HMMWV_Armament,
+ Armor.IFV_BMP_3,
+ Armor.IFV_BMP_2,
+ Armor.APC_BTR_80,
+ Armor.MBT_T_80U,
+ Armor.MBT_T_72B,
+
+ Unarmed.Transport_Ural_375,
+ Unarmed.Transport_UAZ_469,
+ Infantry.Soldier_AK,
+ CV_1143_5_Admiral_Kuznetsov,
+ Bulk_cargo_ship_Yakushev,
+ Dry_cargo_ship_Ivanov,
+ Tanker_Elnya_160,
+ ],
+ "shorad":[
+ AirDefence.SAM_SA_19_Tunguska_2S6,
+ AirDefence.SAM_SA_13_Strela_10M3_9A35M3,
+ AirDefence.AAA_ZU_23_on_Ural_375
+ ]
+}
\ No newline at end of file
diff --git a/qt_ui/main.py b/qt_ui/main.py
index 36e53797..e17a0d0d 100644
--- a/qt_ui/main.py
+++ b/qt_ui/main.py
@@ -29,6 +29,8 @@ if __name__ == "__main__":
app = QApplication(sys.argv)
uiconstants.load_icons()
uiconstants.load_event_icons()
+ uiconstants.load_aircraft_icons()
+ uiconstants.load_vehicle_icons()
# Splash screen setup
pixmap = QPixmap("./resources/ui/splash_screen.png")
diff --git a/qt_ui/uiconstants.py b/qt_ui/uiconstants.py
index 532898da..1cef14aa 100644
--- a/qt_ui/uiconstants.py
+++ b/qt_ui/uiconstants.py
@@ -1,4 +1,5 @@
# URL for UI links
+import os
from typing import Dict
from PySide2.QtGui import QColor, QFont, QPixmap
@@ -38,7 +39,8 @@ CP_SIZE = 25
FONT = QFont("Arial", 12, weight=5, italic=True)
-
+AIRCRAFT_ICONS: Dict[str, QPixmap] = {}
+VEHICLES_ICONS: Dict[str, QPixmap] = {}
ICONS: Dict[str, QPixmap] = {}
def load_icons():
@@ -93,4 +95,22 @@ def load_event_icons():
NavalInterceptEvent: "naval_intercept",
StrikeEvent: "strike",
UnitsDeliveryEvent: "delivery"}.items():
- EVENT_ICONS[category] = QPixmap("./resources/ui/events/" + image + ".png")
\ No newline at end of file
+ EVENT_ICONS[category] = QPixmap("./resources/ui/events/" + image + ".png")
+
+
+def load_aircraft_icons():
+ for aircraft in os.listdir("./resources/ui/units/aircrafts/"):
+ print(aircraft)
+ if aircraft.endswith(".jpg"):
+ print(aircraft[:-7] + " : " + os.path.join("./resources/ui/units/aircrafts/", aircraft) + " ")
+ AIRCRAFT_ICONS[aircraft[:-7]] = QPixmap(os.path.join("./resources/ui/units/aircrafts/", aircraft))
+ AIRCRAFT_ICONS["F-16C_50"] = AIRCRAFT_ICONS["F-16C"]
+ AIRCRAFT_ICONS["FA-18C_hornet"] = AIRCRAFT_ICONS["FA-18C"]
+
+
+def load_vehicle_icons():
+ for vehicle in os.listdir("./resources/ui/units/vehicles/"):
+ print(vehicle)
+ if vehicle.endswith(".jpg"):
+ print(vehicle[:-7] + " : " + os.path.join("./resources/ui/units/vehicles/", vehicle) + " ")
+ VEHICLES_ICONS[vehicle[:-7]] = QPixmap(os.path.join("./resources/ui/units/vehicles/", vehicle))
diff --git a/qt_ui/widgets/QTopPanel.py b/qt_ui/widgets/QTopPanel.py
index 80480943..cf02b625 100644
--- a/qt_ui/widgets/QTopPanel.py
+++ b/qt_ui/widgets/QTopPanel.py
@@ -1,4 +1,4 @@
-from PySide2.QtWidgets import QFrame, QHBoxLayout, QPushButton, QVBoxLayout, QMessageBox
+from PySide2.QtWidgets import QFrame, QHBoxLayout, QPushButton, QVBoxLayout, QMessageBox, QGridLayout
from game import Game
from qt_ui.widgets.QBudgetBox import QBudgetBox
@@ -7,6 +7,7 @@ from qt_ui.widgets.QTurnCounter import QTurnCounter
import qt_ui.uiconstants as CONST
from qt_ui.windows.GameUpdateSignal import GameUpdateSignal
+from qt_ui.windows.mission.QMissionPlanning import QMissionPlanning
from qt_ui.windows.settings.QSettingsWindow import QSettingsWindow
@@ -23,11 +24,17 @@ class QTopPanel(QFrame):
self.turnCounter = QTurnCounter()
self.budgetBox = QBudgetBox()
+
self.passTurnButton = QPushButton("Pass Turn")
self.passTurnButton.setIcon(CONST.ICONS["PassTurn"])
self.passTurnButton.setProperty("style", "btn-primary")
self.passTurnButton.clicked.connect(self.passTurn)
+ self.proceedButton = QPushButton("Proceed")
+ self.proceedButton.setIcon(CONST.ICONS["PassTurn"])
+ self.proceedButton.setProperty("style", "btn-primary")
+ self.proceedButton.clicked.connect(self.proceed)
+
self.submenus = QVBoxLayout()
self.settings = QPushButton("Settings")
self.settings.setIcon(CONST.ICONS["Settings"])
@@ -48,6 +55,7 @@ class QTopPanel(QFrame):
self.layout.addWidget(self.turnCounter)
self.layout.addWidget(self.budgetBox)
self.layout.addWidget(self.passTurnButton)
+ self.layout.addWidget(self.proceedButton)
self.setLayout(self.layout)
def setGame(self, game:Game):
@@ -66,4 +74,8 @@ class QTopPanel(QFrame):
def passTurn(self):
self.game.pass_turn()
- GameUpdateSignal.get_instance().updateGame(self.game)
\ No newline at end of file
+ GameUpdateSignal.get_instance().updateGame(self.game)
+
+ def proceed(self):
+ self.subwindow = QMissionPlanning(self.game)
+ self.subwindow.show()
\ No newline at end of file
diff --git a/qt_ui/widgets/base/QBaseInformation.py b/qt_ui/widgets/base/QBaseInformation.py
index 0bea5bdb..1fd7968b 100644
--- a/qt_ui/widgets/base/QBaseInformation.py
+++ b/qt_ui/widgets/base/QBaseInformation.py
@@ -1,5 +1,7 @@
from PySide2.QtWidgets import QGridLayout, QLabel, QGroupBox, QVBoxLayout
+from game import db
+from qt_ui.uiconstants import AIRCRAFT_ICONS, VEHICLES_ICONS
from theater import ControlPoint, Airport
@@ -26,7 +28,14 @@ class QBaseInformation(QGroupBox):
i = 0
for k,v in unit_dict.items():
- self.layout.addWidget(QLabel(str(v) + " x " + k), i, 0)
+ icon = QLabel()
+ if k in VEHICLES_ICONS.keys():
+ icon.setPixmap(VEHICLES_ICONS[k])
+ else:
+ icon.setText(""+k[:6]+"")
+ icon.setProperty("style", "icon-plane")
+ self.layout.addWidget(icon, i, 0)
+ self.layout.addWidget(QLabel(str(v) + " x " + k), i, 1)
i = i + 1
stretch = QVBoxLayout()
diff --git a/qt_ui/widgets/base/QPlannedFlightView.py b/qt_ui/widgets/base/QPlannedFlightView.py
deleted file mode 100644
index 6032579f..00000000
--- a/qt_ui/widgets/base/QPlannedFlightView.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from PySide2.QtWidgets import QGridLayout, QLabel, QGroupBox, QVBoxLayout, QHBoxLayout
-
-from game import db
-from gen.flights.ai_flight_planner import FlightPlanner
-
-
-class QPlannedFlightView(QGroupBox):
-
- def __init__(self, flight_planner:FlightPlanner):
- super(QPlannedFlightView, self).__init__("Planned flights")
- self.flight_planner = flight_planner
- self.init_ui()
-
- def init_ui(self):
- self.layout = QGridLayout()
-
- for i,f in enumerate(self.flight_planner.flights):
- ftype = QLabel("" + f.flight_type.name + "")
- count = QLabel(str(f.count) + " x " + db.unit_type_name(f.unit_type))
- sched = QLabel(" in " + str(f.scheduled_in) + " minutes")
-
- self.layout.addWidget(ftype, i, 0)
- self.layout.addWidget(count, i, 1)
- self.layout.addWidget(sched, i, 2)
-
- stretch = QVBoxLayout()
- stretch.addStretch()
- self.layout.addLayout(stretch, len(self.flight_planner.flights)+1, 0)
- self.setLayout(self.layout)
diff --git a/qt_ui/widgets/map/QLiberationMap.py b/qt_ui/widgets/map/QLiberationMap.py
index e7d48ff5..2e0dc7a8 100644
--- a/qt_ui/widgets/map/QLiberationMap.py
+++ b/qt_ui/widgets/map/QLiberationMap.py
@@ -83,13 +83,28 @@ class QLiberationMap(QGraphicsView):
text.setPos(pos[0] + CONST.CP_SIZE + 1, pos[1] - CONST.CP_SIZE / 2 + 1)
+ if cp.captured:
+ pen = QPen(brush=CONST.COLORS["blue"])
+ brush = CONST.COLORS["blue_transparent"]
+
+ flight_path_pen = QPen(brush=CONST.COLORS["blue"])
+ flight_path_pen.setColor(CONST.COLORS["blue"])
+ flight_path_pen.setWidth(1)
+ flight_path_pen.setStyle(Qt.DashDotLine)
+ else:
+ pen = QPen(brush=CONST.COLORS["red"])
+ brush = CONST.COLORS["red_transparent"]
+
+ flight_path_pen = QPen(brush=CONST.COLORS["bright_red"])
+ flight_path_pen.setColor(CONST.COLORS["bright_red"])
+ flight_path_pen.setWidth(1)
+ flight_path_pen.setStyle(Qt.DashDotLine)
+
for ground_object in cp.ground_objects:
- if ground_object.airbase_group:
- continue
-
go_pos = self._transform_point(ground_object.position)
- scene.addItem(QMapGroundObject(self, go_pos[0], go_pos[1], 16, 16, cp, ground_object))
+ if not ground_object.airbase_group:
+ scene.addItem(QMapGroundObject(self, go_pos[0], go_pos[1], 16, 16, cp, ground_object))
if ground_object.category == "aa" and self.get_display_rule("sam"):
max_range = 0
@@ -99,17 +114,24 @@ class QLiberationMap(QGraphicsView):
unit = db.unit_type_from_name(u.type)
if unit.threat_range > max_range:
max_range = unit.threat_range
- if cp.captured:
- pen = QPen(brush=CONST.COLORS["blue"])
- brush = CONST.COLORS["blue_transparent"]
- else:
- pen = QPen(brush=CONST.COLORS["red"])
- brush = CONST.COLORS["red_transparent"]
+
scene.addEllipse(go_pos[0] - max_range/300.0 + 8, go_pos[1] - max_range/300.0 + 8, max_range/150.0, max_range/150.0, pen, brush)
if self.get_display_rule("lines"):
self.scene_create_lines_for_cp(cp)
+ if cp.id in self.game.planners.keys():
+ planner = self.game.planners[cp.id]
+ for flight in planner.flights:
+ scene.addEllipse(pos[0], pos[1], 4, 4)
+ prev_pos = list(pos)
+ for points in flight.points:
+ new_pos = self._transform_point(Point(points[0], points[1]))
+ scene.addLine(prev_pos[0]+2, prev_pos[1]+2, new_pos[0]+2, new_pos[1]+2, flight_path_pen)
+ scene.addEllipse(new_pos[0], new_pos[1], 4, 4, pen, brush)
+ prev_pos = list(new_pos)
+ scene.addLine(prev_pos[0] + 2, prev_pos[1] + 2, pos[0] + 2, pos[1] + 2, flight_path_pen)
+
def scene_create_lines_for_cp(self, cp: ControlPoint):
scene = self.scene()
pos = self._transform_point(cp.position)
diff --git a/qt_ui/windows/QBaseMenu.py b/qt_ui/windows/QBaseMenu.py
index 219318cb..bedad38a 100644
--- a/qt_ui/windows/QBaseMenu.py
+++ b/qt_ui/windows/QBaseMenu.py
@@ -7,9 +7,10 @@ from PySide2.QtWidgets import QHBoxLayout, QLabel, QWidget, QDialog, QVBoxLayout
from dcs.unittype import UnitType
from game.event import UnitsDeliveryEvent
+from qt_ui.widgets.QBudgetBox import QBudgetBox
from qt_ui.widgets.base.QAirportInformation import QAirportInformation
from qt_ui.widgets.base.QBaseInformation import QBaseInformation
-from qt_ui.widgets.base.QPlannedFlightView import QPlannedFlightView
+from qt_ui.windows.mission.QPlannedFlightsView import QPlannedFlightsView
from qt_ui.windows.GameUpdateSignal import GameUpdateSignal
from theater import ControlPoint, CAP, Embarking, CAS, PinpointStrike, db
from game import Game
@@ -90,6 +91,9 @@ class QBaseMenu(QDialog):
self.recruitment = QGroupBox("Recruitment")
self.recruitmentLayout = QVBoxLayout()
+ self.budget = QBudgetBox()
+ self.budget.setBudget(self.game.budget, self.game.budget_reward_amount)
+ self.recruitmentLayout.addWidget(self.budget)
for task_type in units.keys():
@@ -147,7 +151,7 @@ class QBaseMenu(QDialog):
self.rightLayout = QVBoxLayout()
try:
- self.rightLayout.addWidget(QPlannedFlightView(self.game.planners[self.cp.id]))
+ self.rightLayout.addWidget(QPlannedFlightsView(self.game.planners[self.cp.id]))
except Exception:
traceback.print_exc()
self.rightLayout.addWidget(QAirportInformation(self.cp, self.airport))
@@ -212,7 +216,7 @@ class QBaseMenu(QDialog):
if self.game.budget >= price:
self.deliveryEvent.deliver({unit_type: 1})
self.game.budget -= price
-
+ self.budget.setBudget(self.game.budget, self.game.budget_reward_amount)
self._update_count_label(unit_type)
def sell(self, unit_type):
diff --git a/qt_ui/windows/mission/QChooseAirbase.py b/qt_ui/windows/mission/QChooseAirbase.py
new file mode 100644
index 00000000..dc1a79d2
--- /dev/null
+++ b/qt_ui/windows/mission/QChooseAirbase.py
@@ -0,0 +1,34 @@
+from PySide2.QtCore import Signal
+from PySide2.QtWidgets import QGroupBox, QHBoxLayout, QComboBox, QLabel
+
+from game import Game
+
+
+class QChooseAirbase(QGroupBox):
+
+ selected_airbase_changed = Signal(str)
+
+ def __init__(self, game:Game, title=""):
+ super(QChooseAirbase, self).__init__(title)
+ self.game = game
+
+ self.layout = QHBoxLayout()
+ self.depart_from_label = QLabel("Airbase : ")
+ self.depart_from = QComboBox()
+
+ for i, cp in enumerate([b for b in self.game.theater.controlpoints if b.captured]):
+ self.depart_from.addItem(str(cp.name), cp)
+ self.depart_from.setCurrentIndex(0)
+ self.depart_from.currentTextChanged.connect(self._on_airbase_selected)
+ self.layout.addWidget(self.depart_from_label)
+ self.layout.addWidget(self.depart_from)
+ self.setLayout(self.layout)
+
+ def _on_airbase_selected(self):
+ selected = self.depart_from.currentText()
+ print("Airbase changed to : " + selected)
+ self.selected_airbase_changed.emit(selected)
+ print("Airbase changed to : " + selected)
+
+
+
diff --git a/qt_ui/windows/mission/QFlightItem.py b/qt_ui/windows/mission/QFlightItem.py
new file mode 100644
index 00000000..e93a9b9e
--- /dev/null
+++ b/qt_ui/windows/mission/QFlightItem.py
@@ -0,0 +1,20 @@
+from PySide2.QtGui import QStandardItem, QIcon
+
+from game import db
+from gen.flights.flight import Flight
+from qt_ui.uiconstants import AIRCRAFT_ICONS
+
+
+class QFlightItem(QStandardItem):
+
+ def __init__(self, flight:Flight):
+ super(QFlightItem, self).__init__()
+ self.flight = flight
+
+ if db.unit_type_name(self.flight.unit_type).replace("/", " ") in AIRCRAFT_ICONS.keys():
+ icon = QIcon((AIRCRAFT_ICONS[db.unit_type_name(self.flight.unit_type)]))
+ self.setIcon(icon)
+ self.setEditable(False)
+ self.setText("["+str(self.flight.flight_type.name[:6])+"] "
+ + str(self.flight.count) + " x " + db.unit_type_name(self.flight.unit_type)
+ + " in " + str(self.flight.scheduled_in) + " minutes")
diff --git a/qt_ui/windows/mission/QMissionPlanning.py b/qt_ui/windows/mission/QMissionPlanning.py
new file mode 100644
index 00000000..ee126413
--- /dev/null
+++ b/qt_ui/windows/mission/QMissionPlanning.py
@@ -0,0 +1,63 @@
+from PySide2.QtCore import Qt, Slot, QItemSelectionModel, QPoint
+from PySide2.QtWidgets import QDialog, QGridLayout, QScrollArea, QVBoxLayout
+from game import Game
+from qt_ui.windows.mission.QPlannedFlightsView import QPlannedFlightsView
+from qt_ui.windows.mission.QChooseAirbase import QChooseAirbase
+from qt_ui.windows.mission.flight.QFlightPlanner import QFlightPlanner
+
+
+class QMissionPlanning(QDialog):
+
+ def __init__(self, game: Game):
+ super(QMissionPlanning, self).__init__()
+ self.game = game
+ self.setWindowFlags(Qt.WindowStaysOnTopHint)
+ self.setMinimumSize(750, 350)
+ self.setModal(True)
+ self.setWindowTitle("Mission Preparation")
+ self.init_ui()
+ print("DONE")
+
+ def init_ui(self):
+
+ self.captured_cp = [cp for cp in self.game.theater.controlpoints if cp.captured]
+
+ self.layout = QGridLayout()
+ self.left_bar_layout = QVBoxLayout()
+
+ self.select_airbase = QChooseAirbase(self.game)
+ self.select_airbase.selected_airbase_changed.connect(self.on_departure_cp_changed)
+ self.planned_flight_view = QPlannedFlightsView(None)
+ if self.captured_cp[0].id in self.game.planners.keys():
+ self.planner = self.game.planners[self.captured_cp[0].id]
+ self.planned_flight_view.set_flight_planner(self.planner)
+
+ self.planned_flight_view.selectionModel().setCurrentIndex(self.planned_flight_view.indexAt(QPoint(1, 1)), QItemSelectionModel.Select)
+ self.planned_flight_view.selectionModel().selectionChanged.connect(self.on_flight_selection_change)
+
+ self.flight_planner = QFlightPlanner(self.planned_flight_view.flight_planner.flights[0], self.game)
+
+
+ self.left_bar_layout.addWidget(self.select_airbase)
+ self.left_bar_layout.addWidget(self.planned_flight_view)
+
+ self.layout.addLayout(self.left_bar_layout, 0, 0)
+ self.layout.addWidget(self.flight_planner, 0, 1)
+
+ self.setLayout(self.layout)
+
+ @Slot(str)
+ def on_departure_cp_changed(self, cp_name):
+ cps = [cp for cp in self.game.theater.controlpoints if cp.name == cp_name]
+ if len(cps) == 1:
+ self.planner = self.game.planners[cps[0].id]
+ self.planned_flight_view.set_flight_planner(self.planner)
+ else:
+ self.planned_flight_view.set_flight_planner(None)
+
+ def on_flight_selection_change(self):
+ index = self.planned_flight_view.selectionModel().currentIndex().row()
+ flight = self.planner.flights[index]
+
+ self.flight_planner = QFlightPlanner(flight, self.game)
+ self.layout.addWidget(self.flight_planner,0 ,1)
diff --git a/qt_ui/windows/mission/QPlannedFlightsView.py b/qt_ui/windows/mission/QPlannedFlightsView.py
new file mode 100644
index 00000000..3d6c0ff2
--- /dev/null
+++ b/qt_ui/windows/mission/QPlannedFlightsView.py
@@ -0,0 +1,30 @@
+from PySide2.QtCore import QSize
+from PySide2.QtGui import QStandardItemModel
+from PySide2.QtWidgets import QListView
+
+from gen.flights.ai_flight_planner import FlightPlanner
+from qt_ui.windows.mission.QFlightItem import QFlightItem
+
+
+class QPlannedFlightsView(QListView):
+
+ def __init__(self, flight_planner: FlightPlanner):
+ super(QPlannedFlightsView, self).__init__()
+ self.model = QStandardItemModel(self)
+ self.setModel(self.model)
+ self.setIconSize(QSize(91, 24))
+ if flight_planner:
+ self.set_flight_planner(flight_planner)
+
+ def update_content(self):
+ for i, f in enumerate(self.flight_planner.flights):
+ self.model.appendRow(QFlightItem(f))
+
+ def clear_layout(self):
+ self.model.removeRows(0, self.model.rowCount())
+
+ def set_flight_planner(self, flight_planner: FlightPlanner):
+ self.clear_layout()
+ self.flight_planner = flight_planner
+ if self.flight_planner:
+ self.update_content()
diff --git a/qt_ui/windows/mission/flight/QF14FlightComputerEditor.py b/qt_ui/windows/mission/flight/QF14FlightComputerEditor.py
new file mode 100644
index 00000000..e69de29b
diff --git a/qt_ui/windows/mission/flight/QFlightAircraftEditor.py b/qt_ui/windows/mission/flight/QFlightAircraftEditor.py
new file mode 100644
index 00000000..e69de29b
diff --git a/qt_ui/windows/mission/flight/QFlightPlanner.py b/qt_ui/windows/mission/flight/QFlightPlanner.py
new file mode 100644
index 00000000..36cf1af5
--- /dev/null
+++ b/qt_ui/windows/mission/flight/QFlightPlanner.py
@@ -0,0 +1,19 @@
+from PySide2.QtWidgets import QTabWidget
+
+from gen.flights.flight import Flight
+from game import Game
+from qt_ui.windows.mission.flight.payload.QFlightPayloadTab import QFlightPayloadTab
+from qt_ui.windows.mission.flight.settings.QGeneralFlightSettingsTab import QGeneralFlightSettingsTab
+from qt_ui.windows.mission.flight.waypoints.QFlightWaypointTab import QFlightWaypointTab
+
+
+class QFlightPlanner(QTabWidget):
+
+ def __init__(self, flight: Flight, game: Game):
+ super(QFlightPlanner, self).__init__()
+ self.general_settings_tab = QGeneralFlightSettingsTab(flight, game)
+ self.payload_tab = QFlightPayloadTab(flight)
+ self.waypoint_tab = QFlightWaypointTab(flight)
+ self.addTab(self.general_settings_tab, "General Flight settings")
+ self.addTab(self.payload_tab, "Payload")
+ self.addTab(self.waypoint_tab, "Waypoints")
\ No newline at end of file
diff --git a/qt_ui/windows/mission/flight/QFlightWaypointsEditor.py b/qt_ui/windows/mission/flight/QFlightWaypointsEditor.py
new file mode 100644
index 00000000..e69de29b
diff --git a/qt_ui/windows/mission/flight/payload/QFlightPayloadTab.py b/qt_ui/windows/mission/flight/payload/QFlightPayloadTab.py
new file mode 100644
index 00000000..2f6f25b5
--- /dev/null
+++ b/qt_ui/windows/mission/flight/payload/QFlightPayloadTab.py
@@ -0,0 +1,16 @@
+from PySide2.QtWidgets import QFrame, QGridLayout, QLabel
+
+from gen.flights.flight import Flight
+
+
+class QFlightPayloadTab(QFrame):
+
+ def __init__(self, flight: Flight):
+ super(QFlightPayloadTab, self).__init__()
+ self.flight = flight
+ self.init_ui()
+
+ def init_ui(self):
+ layout = QGridLayout()
+ layout.addWidget(QLabel("Coming in two weeks"))
+ self.setLayout(layout)
diff --git a/qt_ui/windows/mission/flight/settings/QFlightDepartureEditor.py b/qt_ui/windows/mission/flight/settings/QFlightDepartureEditor.py
new file mode 100644
index 00000000..69b9e90c
--- /dev/null
+++ b/qt_ui/windows/mission/flight/settings/QFlightDepartureEditor.py
@@ -0,0 +1,28 @@
+from PySide2.QtWidgets import QLabel, QHBoxLayout, QGroupBox, QSpinBox
+
+
+class QFlightDepartureEditor(QGroupBox):
+
+ def __init__(self, flight):
+ super(QFlightDepartureEditor, self).__init__("Departure")
+ self.flight = flight
+
+ layout = QHBoxLayout()
+ self.depart_from = QLabel("Departing from " + self.flight.from_cp.name + "")
+ self.depart_at_t = QLabel("At T +")
+ self.minutes = QLabel(" minutes")
+
+ self.departure_delta = QSpinBox(self)
+ self.departure_delta.setMinimum(0)
+ self.departure_delta.setMaximum(120)
+ self.departure_delta.setValue(self.flight.scheduled_in)
+ self.departure_delta.valueChanged.connect(self.change_scheduled)
+
+ layout.addWidget(self.depart_from)
+ layout.addWidget(self.depart_at_t)
+ layout.addWidget(self.departure_delta)
+ layout.addWidget(self.minutes)
+ self.setLayout(layout)
+
+ def change_scheduled(self):
+ self.flight.scheduled_in = int(self.departure_delta.value())
diff --git a/qt_ui/windows/mission/flight/settings/QFlightSlotEditor.py b/qt_ui/windows/mission/flight/settings/QFlightSlotEditor.py
new file mode 100644
index 00000000..7ef2b076
--- /dev/null
+++ b/qt_ui/windows/mission/flight/settings/QFlightSlotEditor.py
@@ -0,0 +1,50 @@
+from PySide2.QtWidgets import QLabel, QHBoxLayout, QGroupBox, QSpinBox, QGridLayout
+
+
+class QFlightSlotEditor(QGroupBox):
+
+ def __init__(self, flight, game):
+ super(QFlightSlotEditor, self).__init__("Slots")
+ self.flight = flight
+ self.game = game
+
+ layout = QGridLayout()
+
+ self.aircraft_count = QLabel("Aircraft count :")
+ self.aircraft_count_spinner = QSpinBox()
+ self.aircraft_count_spinner.setMinimum(1)
+ self.aircraft_count_spinner.setMaximum(4)
+ self.aircraft_count_spinner.setValue(flight.count)
+ self.aircraft_count_spinner.valueChanged.connect(self._changed_aircraft_count)
+
+ self.client_count = QLabel("Client slots count :")
+ self.client_count_spinner = QSpinBox()
+ self.client_count_spinner.setMinimum(0)
+ self.client_count_spinner.setMaximum(4)
+ self.client_count_spinner.setValue(flight.client_count)
+ self.client_count_spinner.valueChanged.connect(self._changed_client_count)
+
+ if not self.flight.unit_type.flyable:
+ self.client_count_spinner.setValue(0)
+ self.client_count_spinner.setEnabled(False)
+
+ layout.addWidget(self.aircraft_count, 0, 0)
+ layout.addWidget(self.aircraft_count_spinner, 0, 1)
+
+ layout.addWidget(self.client_count, 1, 0)
+ layout.addWidget(self.client_count_spinner, 1, 1)
+
+ self.setLayout(layout)
+
+ def _changed_aircraft_count(self):
+ self.flight.count = int(self.aircraft_count_spinner.value())
+ # TODO check if enough aircraft are available
+
+ def _changed_client_count(self):
+ self.flight.client_count = int(self.client_count_spinner.value())
+ self._cap_client_count()
+
+ def _cap_client_count(self):
+ if self.flight.client_count > self.flight.count:
+ self.flight.client_count = self.flight.count
+ self.client_count_spinner.setValue(self.flight.client_count)
\ No newline at end of file
diff --git a/qt_ui/windows/mission/flight/settings/QFlightTypeTaskInfo.py b/qt_ui/windows/mission/flight/settings/QFlightTypeTaskInfo.py
new file mode 100644
index 00000000..c1e82ef3
--- /dev/null
+++ b/qt_ui/windows/mission/flight/settings/QFlightTypeTaskInfo.py
@@ -0,0 +1,28 @@
+from PySide2.QtWidgets import QLabel, QHBoxLayout, QGroupBox, QSpinBox, QGridLayout
+
+from game import db
+from qt_ui.uiconstants import AIRCRAFT_ICONS
+
+
+class QFlightTypeTaskInfo(QGroupBox):
+
+ def __init__(self, flight):
+ super(QFlightTypeTaskInfo, self).__init__("Flight")
+ self.flight = flight
+
+ layout = QGridLayout()
+
+ self.aircraft_icon = QLabel()
+ if db.unit_type_name(self.flight.unit_type) in AIRCRAFT_ICONS:
+ self.aircraft_icon.setPixmap(AIRCRAFT_ICONS[db.unit_type_name(self.flight.unit_type)])
+
+ self.task = QLabel("Task :")
+ self.task_type = QLabel(flight.flight_type.name)
+ self.task_type.setProperty("style", flight.flight_type.name)
+
+ layout.addWidget(self.aircraft_icon, 0, 0)
+
+ layout.addWidget(self.task, 1, 0)
+ layout.addWidget(self.task_type, 1, 1)
+
+ self.setLayout(layout)
diff --git a/qt_ui/windows/mission/flight/settings/QGeneralFlightSettingsTab.py b/qt_ui/windows/mission/flight/settings/QGeneralFlightSettingsTab.py
new file mode 100644
index 00000000..067f3b29
--- /dev/null
+++ b/qt_ui/windows/mission/flight/settings/QGeneralFlightSettingsTab.py
@@ -0,0 +1,29 @@
+from PySide2.QtWidgets import QFrame, QGridLayout, QVBoxLayout
+
+from gen.flights.flight import Flight
+from game import Game
+from qt_ui.windows.mission.flight.settings.QFlightDepartureEditor import QFlightDepartureEditor
+from qt_ui.windows.mission.flight.settings.QFlightSlotEditor import QFlightSlotEditor
+from qt_ui.windows.mission.flight.settings.QFlightTypeTaskInfo import QFlightTypeTaskInfo
+
+
+class QGeneralFlightSettingsTab(QFrame):
+
+ def __init__(self, flight: Flight, game: Game):
+ super(QGeneralFlightSettingsTab, self).__init__()
+ self.flight = flight
+ self.game = game
+ self.init_ui()
+
+ def init_ui(self):
+ layout = QGridLayout()
+ self.flight_info = QFlightTypeTaskInfo(self.flight)
+ self.flight_departure = QFlightDepartureEditor(self.flight)
+ self.flight_slots = QFlightSlotEditor(self.flight, self.game)
+ layout.addWidget(self.flight_info, 0, 0)
+ layout.addWidget(self.flight_departure, 1, 0)
+ layout.addWidget(self.flight_slots, 2, 0)
+ vstretch = QVBoxLayout()
+ vstretch.addStretch()
+ layout.addLayout(vstretch, 3, 0)
+ self.setLayout(layout)
diff --git a/qt_ui/windows/mission/flight/waypoints/QFlightWaypointTab.py b/qt_ui/windows/mission/flight/waypoints/QFlightWaypointTab.py
new file mode 100644
index 00000000..9325d7b7
--- /dev/null
+++ b/qt_ui/windows/mission/flight/waypoints/QFlightWaypointTab.py
@@ -0,0 +1,16 @@
+from PySide2.QtWidgets import QFrame, QGridLayout, QLabel
+
+from gen.flights.flight import Flight
+
+
+class QFlightWaypointTab(QFrame):
+
+ def __init__(self, flight: Flight):
+ super(QFlightWaypointTab, self).__init__()
+ self.flight = flight
+ self.init_ui()
+
+ def init_ui(self):
+ layout = QGridLayout()
+ layout.addWidget(QLabel("Coming in two weeks"))
+ self.setLayout(layout)
diff --git a/resources/stylesheets/style.css b/resources/stylesheets/style.css
index e018df5a..8b1b0764 100644
--- a/resources/stylesheets/style.css
+++ b/resources/stylesheets/style.css
@@ -59,6 +59,48 @@ QLabel[style="base-title"]{
border: 1px solid #ccc;
}
+QLabel[style="icon-plane"]{
+ background-color:#48719D;
+ min-height:24px;
+ border: 1px solid black;
+ text-align:center;
+ color:white;
+}
+
+QLabel[style="bordered"]{
+ border: 1px solid black;
+}
+
+QLabel[style="BARCAP"]{
+ border: 1px solid black;
+ background-color: #445299;
+ color:white;
+}
+
+QLabel[style="INTERCEPTION"]{
+ border: 1px solid black;
+ background-color: #7752bc;
+ color:white;
+}
+
+QLabel[style="CAS"]{
+ border: 1px solid black;
+ background-color: #ab2244;
+ color:white;
+}
+
+QLabel[style="DEAD"]{
+ border: 1px solid black;
+ background-color: #cc8844;
+ color:white;
+}
+
+QLabel[style="SEAD"]{
+ border: 1px solid black;
+ background-color: #aa7744;
+ color:white;
+}
+
/*QBaseMenu{
background-color:#699245;
color:white;
diff --git a/resources/ui/units/aircrafts/A-10A_24.jpg b/resources/ui/units/aircrafts/A-10A_24.jpg
new file mode 100644
index 00000000..0c5ae447
Binary files /dev/null and b/resources/ui/units/aircrafts/A-10A_24.jpg differ
diff --git a/resources/ui/units/aircrafts/A-10C_24.jpg b/resources/ui/units/aircrafts/A-10C_24.jpg
new file mode 100644
index 00000000..433b0f45
Binary files /dev/null and b/resources/ui/units/aircrafts/A-10C_24.jpg differ
diff --git a/resources/ui/units/aircrafts/A-50_24.jpg b/resources/ui/units/aircrafts/A-50_24.jpg
new file mode 100644
index 00000000..c79c6836
Binary files /dev/null and b/resources/ui/units/aircrafts/A-50_24.jpg differ
diff --git a/resources/ui/units/aircrafts/AH-1W_24.jpg b/resources/ui/units/aircrafts/AH-1W_24.jpg
new file mode 100644
index 00000000..cbab793f
Binary files /dev/null and b/resources/ui/units/aircrafts/AH-1W_24.jpg differ
diff --git a/resources/ui/units/aircrafts/AH-64A_24.jpg b/resources/ui/units/aircrafts/AH-64A_24.jpg
new file mode 100644
index 00000000..65ad0301
Binary files /dev/null and b/resources/ui/units/aircrafts/AH-64A_24.jpg differ
diff --git a/resources/ui/units/aircrafts/AH-64D_24.jpg b/resources/ui/units/aircrafts/AH-64D_24.jpg
new file mode 100644
index 00000000..cbc1ff42
Binary files /dev/null and b/resources/ui/units/aircrafts/AH-64D_24.jpg differ
diff --git a/resources/ui/units/aircrafts/AJS37 Viggen_24.jpg b/resources/ui/units/aircrafts/AJS37 Viggen_24.jpg
new file mode 100644
index 00000000..a973d5a2
Binary files /dev/null and b/resources/ui/units/aircrafts/AJS37 Viggen_24.jpg differ
diff --git a/resources/ui/units/aircrafts/AV8BNA_24.jpg b/resources/ui/units/aircrafts/AV8BNA_24.jpg
new file mode 100644
index 00000000..b688a886
Binary files /dev/null and b/resources/ui/units/aircrafts/AV8BNA_24.jpg differ
diff --git a/resources/ui/units/aircrafts/An-26B_24.jpg b/resources/ui/units/aircrafts/An-26B_24.jpg
new file mode 100644
index 00000000..8d6bc573
Binary files /dev/null and b/resources/ui/units/aircrafts/An-26B_24.jpg differ
diff --git a/resources/ui/units/aircrafts/An-30M_24.jpg b/resources/ui/units/aircrafts/An-30M_24.jpg
new file mode 100644
index 00000000..e532aefa
Binary files /dev/null and b/resources/ui/units/aircrafts/An-30M_24.jpg differ
diff --git a/resources/ui/units/aircrafts/B-17G_24.jpg b/resources/ui/units/aircrafts/B-17G_24.jpg
new file mode 100644
index 00000000..8f0c23ed
Binary files /dev/null and b/resources/ui/units/aircrafts/B-17G_24.jpg differ
diff --git a/resources/ui/units/aircrafts/B-1B_24.jpg b/resources/ui/units/aircrafts/B-1B_24.jpg
new file mode 100644
index 00000000..1e9603aa
Binary files /dev/null and b/resources/ui/units/aircrafts/B-1B_24.jpg differ
diff --git a/resources/ui/units/aircrafts/B-52H_24.jpg b/resources/ui/units/aircrafts/B-52H_24.jpg
new file mode 100644
index 00000000..0db4c82c
Binary files /dev/null and b/resources/ui/units/aircrafts/B-52H_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Bf 109 K-4_24.jpg b/resources/ui/units/aircrafts/Bf 109 K-4_24.jpg
new file mode 100644
index 00000000..f024fabb
Binary files /dev/null and b/resources/ui/units/aircrafts/Bf 109 K-4_24.jpg differ
diff --git a/resources/ui/units/aircrafts/C-101EB CC_24.jpg b/resources/ui/units/aircrafts/C-101EB CC_24.jpg
new file mode 100644
index 00000000..22f59644
Binary files /dev/null and b/resources/ui/units/aircrafts/C-101EB CC_24.jpg differ
diff --git a/resources/ui/units/aircrafts/C-130_24.jpg b/resources/ui/units/aircrafts/C-130_24.jpg
new file mode 100644
index 00000000..b970e798
Binary files /dev/null and b/resources/ui/units/aircrafts/C-130_24.jpg differ
diff --git a/resources/ui/units/aircrafts/CH-47D_24.jpg b/resources/ui/units/aircrafts/CH-47D_24.jpg
new file mode 100644
index 00000000..48647792
Binary files /dev/null and b/resources/ui/units/aircrafts/CH-47D_24.jpg differ
diff --git a/resources/ui/units/aircrafts/CH-53E_24.jpg b/resources/ui/units/aircrafts/CH-53E_24.jpg
new file mode 100644
index 00000000..3191ffaa
Binary files /dev/null and b/resources/ui/units/aircrafts/CH-53E_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Christen Eagle II_24.jpg b/resources/ui/units/aircrafts/Christen Eagle II_24.jpg
new file mode 100644
index 00000000..50f87597
Binary files /dev/null and b/resources/ui/units/aircrafts/Christen Eagle II_24.jpg differ
diff --git a/resources/ui/units/aircrafts/E-2D_24.jpg b/resources/ui/units/aircrafts/E-2D_24.jpg
new file mode 100644
index 00000000..9cf5dd65
Binary files /dev/null and b/resources/ui/units/aircrafts/E-2D_24.jpg differ
diff --git a/resources/ui/units/aircrafts/E-3C_24.jpg b/resources/ui/units/aircrafts/E-3C_24.jpg
new file mode 100644
index 00000000..b1df7a9f
Binary files /dev/null and b/resources/ui/units/aircrafts/E-3C_24.jpg differ
diff --git a/resources/ui/units/aircrafts/F-117A_24.jpg b/resources/ui/units/aircrafts/F-117A_24.jpg
new file mode 100644
index 00000000..13b9f5be
Binary files /dev/null and b/resources/ui/units/aircrafts/F-117A_24.jpg differ
diff --git a/resources/ui/units/aircrafts/F-14A_24.jpg b/resources/ui/units/aircrafts/F-14A_24.jpg
new file mode 100644
index 00000000..6ff978cb
Binary files /dev/null and b/resources/ui/units/aircrafts/F-14A_24.jpg differ
diff --git a/resources/ui/units/aircrafts/F-14B_24.jpg b/resources/ui/units/aircrafts/F-14B_24.jpg
new file mode 100644
index 00000000..b6d90a23
Binary files /dev/null and b/resources/ui/units/aircrafts/F-14B_24.jpg differ
diff --git a/resources/ui/units/aircrafts/F-15C_24.jpg b/resources/ui/units/aircrafts/F-15C_24.jpg
new file mode 100644
index 00000000..33298e46
Binary files /dev/null and b/resources/ui/units/aircrafts/F-15C_24.jpg differ
diff --git a/resources/ui/units/aircrafts/F-15E_24.jpg b/resources/ui/units/aircrafts/F-15E_24.jpg
new file mode 100644
index 00000000..2f1f5154
Binary files /dev/null and b/resources/ui/units/aircrafts/F-15E_24.jpg differ
diff --git a/resources/ui/units/aircrafts/F-16C_24.jpg b/resources/ui/units/aircrafts/F-16C_24.jpg
new file mode 100644
index 00000000..96d6deac
Binary files /dev/null and b/resources/ui/units/aircrafts/F-16C_24.jpg differ
diff --git a/resources/ui/units/aircrafts/F-4E_24.jpg b/resources/ui/units/aircrafts/F-4E_24.jpg
new file mode 100644
index 00000000..231566fb
Binary files /dev/null and b/resources/ui/units/aircrafts/F-4E_24.jpg differ
diff --git a/resources/ui/units/aircrafts/F-5E_24.jpg b/resources/ui/units/aircrafts/F-5E_24.jpg
new file mode 100644
index 00000000..244100e9
Binary files /dev/null and b/resources/ui/units/aircrafts/F-5E_24.jpg differ
diff --git a/resources/ui/units/aircrafts/F-86F_24.jpg b/resources/ui/units/aircrafts/F-86F_24.jpg
new file mode 100644
index 00000000..9a1cd52f
Binary files /dev/null and b/resources/ui/units/aircrafts/F-86F_24.jpg differ
diff --git a/resources/ui/units/aircrafts/FA-18C_24.jpg b/resources/ui/units/aircrafts/FA-18C_24.jpg
new file mode 100644
index 00000000..e20a2fc8
Binary files /dev/null and b/resources/ui/units/aircrafts/FA-18C_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Fw 190 A-8_24.jpg b/resources/ui/units/aircrafts/Fw 190 A-8_24.jpg
new file mode 100644
index 00000000..68895960
Binary files /dev/null and b/resources/ui/units/aircrafts/Fw 190 A-8_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Fw 190 D-9_24.jpg b/resources/ui/units/aircrafts/Fw 190 D-9_24.jpg
new file mode 100644
index 00000000..af7c52c4
Binary files /dev/null and b/resources/ui/units/aircrafts/Fw 190 D-9_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Hawk T.1A_24.jpg b/resources/ui/units/aircrafts/Hawk T.1A_24.jpg
new file mode 100644
index 00000000..cba6259f
Binary files /dev/null and b/resources/ui/units/aircrafts/Hawk T.1A_24.jpg differ
diff --git a/resources/ui/units/aircrafts/I-16_24.jpg b/resources/ui/units/aircrafts/I-16_24.jpg
new file mode 100644
index 00000000..118c699f
Binary files /dev/null and b/resources/ui/units/aircrafts/I-16_24.jpg differ
diff --git a/resources/ui/units/aircrafts/IL-76MD_24.jpg b/resources/ui/units/aircrafts/IL-76MD_24.jpg
new file mode 100644
index 00000000..a25bad96
Binary files /dev/null and b/resources/ui/units/aircrafts/IL-76MD_24.jpg differ
diff --git a/resources/ui/units/aircrafts/IL-78M_24.jpg b/resources/ui/units/aircrafts/IL-78M_24.jpg
new file mode 100644
index 00000000..a27276e1
Binary files /dev/null and b/resources/ui/units/aircrafts/IL-78M_24.jpg differ
diff --git a/resources/ui/units/aircrafts/J-11A_24.jpg b/resources/ui/units/aircrafts/J-11A_24.jpg
new file mode 100644
index 00000000..6d0934a0
Binary files /dev/null and b/resources/ui/units/aircrafts/J-11A_24.jpg differ
diff --git a/resources/ui/units/aircrafts/KC-135_24.jpg b/resources/ui/units/aircrafts/KC-135_24.jpg
new file mode 100644
index 00000000..118a0a83
Binary files /dev/null and b/resources/ui/units/aircrafts/KC-135_24.jpg differ
diff --git a/resources/ui/units/aircrafts/KJ-2000_24.jpg b/resources/ui/units/aircrafts/KJ-2000_24.jpg
new file mode 100644
index 00000000..23c8a011
Binary files /dev/null and b/resources/ui/units/aircrafts/KJ-2000_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Ka-27_24.jpg b/resources/ui/units/aircrafts/Ka-27_24.jpg
new file mode 100644
index 00000000..16baf14a
Binary files /dev/null and b/resources/ui/units/aircrafts/Ka-27_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Ka-50_24.jpg b/resources/ui/units/aircrafts/Ka-50_24.jpg
new file mode 100644
index 00000000..214e487e
Binary files /dev/null and b/resources/ui/units/aircrafts/Ka-50_24.jpg differ
diff --git a/resources/ui/units/aircrafts/L-39C_24.jpg b/resources/ui/units/aircrafts/L-39C_24.jpg
new file mode 100644
index 00000000..ffff344b
Binary files /dev/null and b/resources/ui/units/aircrafts/L-39C_24.jpg differ
diff --git a/resources/ui/units/aircrafts/L-39ZA_24.jpg b/resources/ui/units/aircrafts/L-39ZA_24.jpg
new file mode 100644
index 00000000..6658aa4d
Binary files /dev/null and b/resources/ui/units/aircrafts/L-39ZA_24.jpg differ
diff --git a/resources/ui/units/aircrafts/M-2000C_24.jpg b/resources/ui/units/aircrafts/M-2000C_24.jpg
new file mode 100644
index 00000000..f3f4bae7
Binary files /dev/null and b/resources/ui/units/aircrafts/M-2000C_24.jpg differ
diff --git a/resources/ui/units/aircrafts/MB-339A PAN_24.jpg b/resources/ui/units/aircrafts/MB-339A PAN_24.jpg
new file mode 100644
index 00000000..60f5ae4d
Binary files /dev/null and b/resources/ui/units/aircrafts/MB-339A PAN_24.jpg differ
diff --git a/resources/ui/units/aircrafts/MQ RQ-1_24.jpg b/resources/ui/units/aircrafts/MQ RQ-1_24.jpg
new file mode 100644
index 00000000..732d3f69
Binary files /dev/null and b/resources/ui/units/aircrafts/MQ RQ-1_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Mi-24_24.jpg b/resources/ui/units/aircrafts/Mi-24_24.jpg
new file mode 100644
index 00000000..97efd518
Binary files /dev/null and b/resources/ui/units/aircrafts/Mi-24_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Mi-26_24.jpg b/resources/ui/units/aircrafts/Mi-26_24.jpg
new file mode 100644
index 00000000..9b0204ef
Binary files /dev/null and b/resources/ui/units/aircrafts/Mi-26_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Mi-28_24.jpg b/resources/ui/units/aircrafts/Mi-28_24.jpg
new file mode 100644
index 00000000..48d8cc97
Binary files /dev/null and b/resources/ui/units/aircrafts/Mi-28_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Mi-8MT_24.jpg b/resources/ui/units/aircrafts/Mi-8MT_24.jpg
new file mode 100644
index 00000000..052c9925
Binary files /dev/null and b/resources/ui/units/aircrafts/Mi-8MT_24.jpg differ
diff --git a/resources/ui/units/aircrafts/MiG-15bis_24.jpg b/resources/ui/units/aircrafts/MiG-15bis_24.jpg
new file mode 100644
index 00000000..e581ad93
Binary files /dev/null and b/resources/ui/units/aircrafts/MiG-15bis_24.jpg differ
diff --git a/resources/ui/units/aircrafts/MiG-19P_24.jpg b/resources/ui/units/aircrafts/MiG-19P_24.jpg
new file mode 100644
index 00000000..76aa4a3e
Binary files /dev/null and b/resources/ui/units/aircrafts/MiG-19P_24.jpg differ
diff --git a/resources/ui/units/aircrafts/MiG-21Bis_24.jpg b/resources/ui/units/aircrafts/MiG-21Bis_24.jpg
new file mode 100644
index 00000000..07de7821
Binary files /dev/null and b/resources/ui/units/aircrafts/MiG-21Bis_24.jpg differ
diff --git a/resources/ui/units/aircrafts/MiG-23MLD_24.jpg b/resources/ui/units/aircrafts/MiG-23MLD_24.jpg
new file mode 100644
index 00000000..876a6c2b
Binary files /dev/null and b/resources/ui/units/aircrafts/MiG-23MLD_24.jpg differ
diff --git a/resources/ui/units/aircrafts/MiG-25PD_24.jpg b/resources/ui/units/aircrafts/MiG-25PD_24.jpg
new file mode 100644
index 00000000..861561c1
Binary files /dev/null and b/resources/ui/units/aircrafts/MiG-25PD_24.jpg differ
diff --git a/resources/ui/units/aircrafts/MiG-25RBT_24.jpg b/resources/ui/units/aircrafts/MiG-25RBT_24.jpg
new file mode 100644
index 00000000..379d0771
Binary files /dev/null and b/resources/ui/units/aircrafts/MiG-25RBT_24.jpg differ
diff --git a/resources/ui/units/aircrafts/MiG-27K_24.jpg b/resources/ui/units/aircrafts/MiG-27K_24.jpg
new file mode 100644
index 00000000..1f8dcbff
Binary files /dev/null and b/resources/ui/units/aircrafts/MiG-27K_24.jpg differ
diff --git a/resources/ui/units/aircrafts/MiG-29A_24.jpg b/resources/ui/units/aircrafts/MiG-29A_24.jpg
new file mode 100644
index 00000000..2ad3e728
Binary files /dev/null and b/resources/ui/units/aircrafts/MiG-29A_24.jpg differ
diff --git a/resources/ui/units/aircrafts/MiG-29S_24.jpg b/resources/ui/units/aircrafts/MiG-29S_24.jpg
new file mode 100644
index 00000000..3cdf8e64
Binary files /dev/null and b/resources/ui/units/aircrafts/MiG-29S_24.jpg differ
diff --git a/resources/ui/units/aircrafts/MiG-31_24.jpg b/resources/ui/units/aircrafts/MiG-31_24.jpg
new file mode 100644
index 00000000..c1c1a238
Binary files /dev/null and b/resources/ui/units/aircrafts/MiG-31_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Mirage 2000-5_24.jpg b/resources/ui/units/aircrafts/Mirage 2000-5_24.jpg
new file mode 100644
index 00000000..bc5eeb84
Binary files /dev/null and b/resources/ui/units/aircrafts/Mirage 2000-5_24.jpg differ
diff --git a/resources/ui/units/aircrafts/OH-58D_24.jpg b/resources/ui/units/aircrafts/OH-58D_24.jpg
new file mode 100644
index 00000000..8392fe4f
Binary files /dev/null and b/resources/ui/units/aircrafts/OH-58D_24.jpg differ
diff --git a/resources/ui/units/aircrafts/P-51D_24.jpg b/resources/ui/units/aircrafts/P-51D_24.jpg
new file mode 100644
index 00000000..a8601eab
Binary files /dev/null and b/resources/ui/units/aircrafts/P-51D_24.jpg differ
diff --git a/resources/ui/units/aircrafts/S-3B_24.jpg b/resources/ui/units/aircrafts/S-3B_24.jpg
new file mode 100644
index 00000000..422feba0
Binary files /dev/null and b/resources/ui/units/aircrafts/S-3B_24.jpg differ
diff --git a/resources/ui/units/aircrafts/SA342L_24.jpg b/resources/ui/units/aircrafts/SA342L_24.jpg
new file mode 100644
index 00000000..75e0a003
Binary files /dev/null and b/resources/ui/units/aircrafts/SA342L_24.jpg differ
diff --git a/resources/ui/units/aircrafts/SA342M_24.jpg b/resources/ui/units/aircrafts/SA342M_24.jpg
new file mode 100644
index 00000000..78417f99
Binary files /dev/null and b/resources/ui/units/aircrafts/SA342M_24.jpg differ
diff --git a/resources/ui/units/aircrafts/SA342Minigun_24.jpg b/resources/ui/units/aircrafts/SA342Minigun_24.jpg
new file mode 100644
index 00000000..517e33c4
Binary files /dev/null and b/resources/ui/units/aircrafts/SA342Minigun_24.jpg differ
diff --git a/resources/ui/units/aircrafts/SA342Mistral_24.jpg b/resources/ui/units/aircrafts/SA342Mistral_24.jpg
new file mode 100644
index 00000000..b59d8d20
Binary files /dev/null and b/resources/ui/units/aircrafts/SA342Mistral_24.jpg differ
diff --git a/resources/ui/units/aircrafts/SH-60B_24.jpg b/resources/ui/units/aircrafts/SH-60B_24.jpg
new file mode 100644
index 00000000..24365edb
Binary files /dev/null and b/resources/ui/units/aircrafts/SH-60B_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Spitfire LF Mk. IX_24.jpg b/resources/ui/units/aircrafts/Spitfire LF Mk. IX_24.jpg
new file mode 100644
index 00000000..b2b5e77f
Binary files /dev/null and b/resources/ui/units/aircrafts/Spitfire LF Mk. IX_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Su-17M4_24.jpg b/resources/ui/units/aircrafts/Su-17M4_24.jpg
new file mode 100644
index 00000000..1af68e96
Binary files /dev/null and b/resources/ui/units/aircrafts/Su-17M4_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Su-24MR_24.jpg b/resources/ui/units/aircrafts/Su-24MR_24.jpg
new file mode 100644
index 00000000..0a30caad
Binary files /dev/null and b/resources/ui/units/aircrafts/Su-24MR_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Su-24M_24.jpg b/resources/ui/units/aircrafts/Su-24M_24.jpg
new file mode 100644
index 00000000..ca3e9241
Binary files /dev/null and b/resources/ui/units/aircrafts/Su-24M_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Su-25TM_24.jpg b/resources/ui/units/aircrafts/Su-25TM_24.jpg
new file mode 100644
index 00000000..452d3365
Binary files /dev/null and b/resources/ui/units/aircrafts/Su-25TM_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Su-25T_24.jpg b/resources/ui/units/aircrafts/Su-25T_24.jpg
new file mode 100644
index 00000000..b0a75db9
Binary files /dev/null and b/resources/ui/units/aircrafts/Su-25T_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Su-25_24.jpg b/resources/ui/units/aircrafts/Su-25_24.jpg
new file mode 100644
index 00000000..61e7d5a2
Binary files /dev/null and b/resources/ui/units/aircrafts/Su-25_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Su-27_24.jpg b/resources/ui/units/aircrafts/Su-27_24.jpg
new file mode 100644
index 00000000..2beaff02
Binary files /dev/null and b/resources/ui/units/aircrafts/Su-27_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Su-30_24.jpg b/resources/ui/units/aircrafts/Su-30_24.jpg
new file mode 100644
index 00000000..7f492d73
Binary files /dev/null and b/resources/ui/units/aircrafts/Su-30_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Su-33_24.jpg b/resources/ui/units/aircrafts/Su-33_24.jpg
new file mode 100644
index 00000000..3bf34d0e
Binary files /dev/null and b/resources/ui/units/aircrafts/Su-33_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Su-34_24.jpg b/resources/ui/units/aircrafts/Su-34_24.jpg
new file mode 100644
index 00000000..3309ff97
Binary files /dev/null and b/resources/ui/units/aircrafts/Su-34_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Tornado_24.jpg b/resources/ui/units/aircrafts/Tornado_24.jpg
new file mode 100644
index 00000000..9e9c00e1
Binary files /dev/null and b/resources/ui/units/aircrafts/Tornado_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Tu-142M_24.jpg b/resources/ui/units/aircrafts/Tu-142M_24.jpg
new file mode 100644
index 00000000..65c377a6
Binary files /dev/null and b/resources/ui/units/aircrafts/Tu-142M_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Tu-160_24.jpg b/resources/ui/units/aircrafts/Tu-160_24.jpg
new file mode 100644
index 00000000..2b1f09ab
Binary files /dev/null and b/resources/ui/units/aircrafts/Tu-160_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Tu-22M3_24.jpg b/resources/ui/units/aircrafts/Tu-22M3_24.jpg
new file mode 100644
index 00000000..290558f7
Binary files /dev/null and b/resources/ui/units/aircrafts/Tu-22M3_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Tu-95_24.jpg b/resources/ui/units/aircrafts/Tu-95_24.jpg
new file mode 100644
index 00000000..446c0014
Binary files /dev/null and b/resources/ui/units/aircrafts/Tu-95_24.jpg differ
diff --git a/resources/ui/units/aircrafts/UH-1H_24.jpg b/resources/ui/units/aircrafts/UH-1H_24.jpg
new file mode 100644
index 00000000..423db195
Binary files /dev/null and b/resources/ui/units/aircrafts/UH-1H_24.jpg differ
diff --git a/resources/ui/units/aircrafts/UH-60A_24.jpg b/resources/ui/units/aircrafts/UH-60A_24.jpg
new file mode 100644
index 00000000..f26d9a4d
Binary files /dev/null and b/resources/ui/units/aircrafts/UH-60A_24.jpg differ
diff --git a/resources/ui/units/aircrafts/Yak-40_24.jpg b/resources/ui/units/aircrafts/Yak-40_24.jpg
new file mode 100644
index 00000000..80aa9cb9
Binary files /dev/null and b/resources/ui/units/aircrafts/Yak-40_24.jpg differ
diff --git a/resources/ui/units/readme.md b/resources/ui/units/readme.md
new file mode 100644
index 00000000..96c96f1a
--- /dev/null
+++ b/resources/ui/units/readme.md
@@ -0,0 +1,29 @@
+In this folder are icons for the different units in DCS / DCS Liberation.
+
+# How were these retrieved :
+- I took screenshoot of the units from the encyclopedia in DCS. If you want to add more pictures, please do the same, so that the units have the same background.
+- Then resized all the image so that have static size. Aspect ratio is not perfect, but it's hard to notice on such small image.
+
+```python
+
+import os
+from PIL import Image
+
+for img_name in os.listdir("."):
+ if os.path.isfile(img_name) and img_name.endswith(".png"):
+ print(img_name)
+ img = Image.open(img_name)
+ img = img.resize((64,24), Image.ANTIALIAS)
+ img.save('./out/' + img_name[:-4] + "_24.jpg")
+
+```
+
+You need PIL to run the script :
+
+```
+pip install PIL
+```
+
+If you want access to get my high res screenshoot, i still have them, but to reduce size and ram usage, i believe it's better to use super small jpg icons instead.
+
+@Khopa
\ No newline at end of file
diff --git a/resources/ui/units/vehicles/AAV-7_24.jpg b/resources/ui/units/vehicles/AAV-7_24.jpg
new file mode 100644
index 00000000..c1b33ce6
Binary files /dev/null and b/resources/ui/units/vehicles/AAV-7_24.jpg differ
diff --git a/resources/ui/units/vehicles/BMD-1_24.jpg b/resources/ui/units/vehicles/BMD-1_24.jpg
new file mode 100644
index 00000000..43c88734
Binary files /dev/null and b/resources/ui/units/vehicles/BMD-1_24.jpg differ
diff --git a/resources/ui/units/vehicles/BMP-1_24.jpg b/resources/ui/units/vehicles/BMP-1_24.jpg
new file mode 100644
index 00000000..262049c8
Binary files /dev/null and b/resources/ui/units/vehicles/BMP-1_24.jpg differ
diff --git a/resources/ui/units/vehicles/BMP-2_24.jpg b/resources/ui/units/vehicles/BMP-2_24.jpg
new file mode 100644
index 00000000..eda8b8e2
Binary files /dev/null and b/resources/ui/units/vehicles/BMP-2_24.jpg differ
diff --git a/resources/ui/units/vehicles/BMP-3_24.jpg b/resources/ui/units/vehicles/BMP-3_24.jpg
new file mode 100644
index 00000000..99bd096c
Binary files /dev/null and b/resources/ui/units/vehicles/BMP-3_24.jpg differ
diff --git a/resources/ui/units/vehicles/BTR-80_24.jpg b/resources/ui/units/vehicles/BTR-80_24.jpg
new file mode 100644
index 00000000..ca3f814e
Binary files /dev/null and b/resources/ui/units/vehicles/BTR-80_24.jpg differ
diff --git a/resources/ui/units/vehicles/BTR-RD_24.jpg b/resources/ui/units/vehicles/BTR-RD_24.jpg
new file mode 100644
index 00000000..be9ac063
Binary files /dev/null and b/resources/ui/units/vehicles/BTR-RD_24.jpg differ
diff --git a/resources/ui/units/vehicles/Bedford MWD_24.jpg b/resources/ui/units/vehicles/Bedford MWD_24.jpg
new file mode 100644
index 00000000..3bc24074
Binary files /dev/null and b/resources/ui/units/vehicles/Bedford MWD_24.jpg differ
diff --git a/resources/ui/units/vehicles/Blitz 3.6-6700A_24.jpg b/resources/ui/units/vehicles/Blitz 3.6-6700A_24.jpg
new file mode 100644
index 00000000..8fd93005
Binary files /dev/null and b/resources/ui/units/vehicles/Blitz 3.6-6700A_24.jpg differ
diff --git a/resources/ui/units/vehicles/CCKW 353_24.jpg b/resources/ui/units/vehicles/CCKW 353_24.jpg
new file mode 100644
index 00000000..ceb33eb2
Binary files /dev/null and b/resources/ui/units/vehicles/CCKW 353_24.jpg differ
diff --git a/resources/ui/units/vehicles/Challenger 2_24.jpg b/resources/ui/units/vehicles/Challenger 2_24.jpg
new file mode 100644
index 00000000..7a5e0df9
Binary files /dev/null and b/resources/ui/units/vehicles/Challenger 2_24.jpg differ
diff --git a/resources/ui/units/vehicles/Cobra_24.jpg b/resources/ui/units/vehicles/Cobra_24.jpg
new file mode 100644
index 00000000..58ac6182
Binary files /dev/null and b/resources/ui/units/vehicles/Cobra_24.jpg differ
diff --git a/resources/ui/units/vehicles/Cromwell IV_24.jpg b/resources/ui/units/vehicles/Cromwell IV_24.jpg
new file mode 100644
index 00000000..adf20478
Binary files /dev/null and b/resources/ui/units/vehicles/Cromwell IV_24.jpg differ
diff --git a/resources/ui/units/vehicles/Jagdpanther_24.jpg b/resources/ui/units/vehicles/Jagdpanther_24.jpg
new file mode 100644
index 00000000..8505fe10
Binary files /dev/null and b/resources/ui/units/vehicles/Jagdpanther_24.jpg differ
diff --git a/resources/ui/units/vehicles/Jagdpanzer IV_24.jpg b/resources/ui/units/vehicles/Jagdpanzer IV_24.jpg
new file mode 100644
index 00000000..2bc0c950
Binary files /dev/null and b/resources/ui/units/vehicles/Jagdpanzer IV_24.jpg differ
diff --git a/resources/ui/units/vehicles/LAV-25_24.jpg b/resources/ui/units/vehicles/LAV-25_24.jpg
new file mode 100644
index 00000000..170edeb1
Binary files /dev/null and b/resources/ui/units/vehicles/LAV-25_24.jpg differ
diff --git a/resources/ui/units/vehicles/Leclerc_24.jpg b/resources/ui/units/vehicles/Leclerc_24.jpg
new file mode 100644
index 00000000..d722c378
Binary files /dev/null and b/resources/ui/units/vehicles/Leclerc_24.jpg differ
diff --git a/resources/ui/units/vehicles/Leopard 1A3_24.jpg b/resources/ui/units/vehicles/Leopard 1A3_24.jpg
new file mode 100644
index 00000000..7108ef34
Binary files /dev/null and b/resources/ui/units/vehicles/Leopard 1A3_24.jpg differ
diff --git a/resources/ui/units/vehicles/Leopard-2_24.jpg b/resources/ui/units/vehicles/Leopard-2_24.jpg
new file mode 100644
index 00000000..6a58616f
Binary files /dev/null and b/resources/ui/units/vehicles/Leopard-2_24.jpg differ
diff --git a/resources/ui/units/vehicles/M 818_24.jpg b/resources/ui/units/vehicles/M 818_24.jpg
new file mode 100644
index 00000000..23372bf0
Binary files /dev/null and b/resources/ui/units/vehicles/M 818_24.jpg differ
diff --git a/resources/ui/units/vehicles/M-1 Abrams_24.jpg b/resources/ui/units/vehicles/M-1 Abrams_24.jpg
new file mode 100644
index 00000000..d0bf9a66
Binary files /dev/null and b/resources/ui/units/vehicles/M-1 Abrams_24.jpg differ
diff --git a/resources/ui/units/vehicles/M-113_24.jpg b/resources/ui/units/vehicles/M-113_24.jpg
new file mode 100644
index 00000000..8319228d
Binary files /dev/null and b/resources/ui/units/vehicles/M-113_24.jpg differ
diff --git a/resources/ui/units/vehicles/M-2 Bradley_24.jpg b/resources/ui/units/vehicles/M-2 Bradley_24.jpg
new file mode 100644
index 00000000..037dddf1
Binary files /dev/null and b/resources/ui/units/vehicles/M-2 Bradley_24.jpg differ
diff --git a/resources/ui/units/vehicles/M1043 HMMWV_24.jpg b/resources/ui/units/vehicles/M1043 HMMWV_24.jpg
new file mode 100644
index 00000000..f24eddfd
Binary files /dev/null and b/resources/ui/units/vehicles/M1043 HMMWV_24.jpg differ
diff --git a/resources/ui/units/vehicles/M109_24.jpg b/resources/ui/units/vehicles/M109_24.jpg
new file mode 100644
index 00000000..2d0994d6
Binary files /dev/null and b/resources/ui/units/vehicles/M109_24.jpg differ
diff --git a/resources/ui/units/vehicles/M1126 Stryker IFV_24.jpg b/resources/ui/units/vehicles/M1126 Stryker IFV_24.jpg
new file mode 100644
index 00000000..0eafe997
Binary files /dev/null and b/resources/ui/units/vehicles/M1126 Stryker IFV_24.jpg differ
diff --git a/resources/ui/units/vehicles/M1128 Stryker MGS_24.jpg b/resources/ui/units/vehicles/M1128 Stryker MGS_24.jpg
new file mode 100644
index 00000000..a899065a
Binary files /dev/null and b/resources/ui/units/vehicles/M1128 Stryker MGS_24.jpg differ
diff --git a/resources/ui/units/vehicles/M1134 Stryker ATGM_24.jpg b/resources/ui/units/vehicles/M1134 Stryker ATGM_24.jpg
new file mode 100644
index 00000000..22ccbc68
Binary files /dev/null and b/resources/ui/units/vehicles/M1134 Stryker ATGM_24.jpg differ
diff --git a/resources/ui/units/vehicles/M12_24.jpg b/resources/ui/units/vehicles/M12_24.jpg
new file mode 100644
index 00000000..fb047d17
Binary files /dev/null and b/resources/ui/units/vehicles/M12_24.jpg differ
diff --git a/resources/ui/units/vehicles/M30 Cargo Carrier_24.jpg b/resources/ui/units/vehicles/M30 Cargo Carrier_24.jpg
new file mode 100644
index 00000000..b25731fe
Binary files /dev/null and b/resources/ui/units/vehicles/M30 Cargo Carrier_24.jpg differ
diff --git a/resources/ui/units/vehicles/M4A4 Sherman Firefly_24.jpg b/resources/ui/units/vehicles/M4A4 Sherman Firefly_24.jpg
new file mode 100644
index 00000000..b34c4420
Binary files /dev/null and b/resources/ui/units/vehicles/M4A4 Sherman Firefly_24.jpg differ
diff --git a/resources/ui/units/vehicles/M4A4 Sherman_24.jpg b/resources/ui/units/vehicles/M4A4 Sherman_24.jpg
new file mode 100644
index 00000000..a902812f
Binary files /dev/null and b/resources/ui/units/vehicles/M4A4 Sherman_24.jpg differ
diff --git a/resources/ui/units/vehicles/MCV-80 Warrior_24.jpg b/resources/ui/units/vehicles/MCV-80 Warrior_24.jpg
new file mode 100644
index 00000000..c4dd91ef
Binary files /dev/null and b/resources/ui/units/vehicles/MCV-80 Warrior_24.jpg differ
diff --git a/resources/ui/units/vehicles/MTLB_24.jpg b/resources/ui/units/vehicles/MTLB_24.jpg
new file mode 100644
index 00000000..e9112723
Binary files /dev/null and b/resources/ui/units/vehicles/MTLB_24.jpg differ
diff --git a/resources/ui/units/vehicles/Merkava Mk IV_24.jpg b/resources/ui/units/vehicles/Merkava Mk IV_24.jpg
new file mode 100644
index 00000000..dfd47a68
Binary files /dev/null and b/resources/ui/units/vehicles/Merkava Mk IV_24.jpg differ
diff --git a/resources/ui/units/vehicles/Panther G_24.jpg b/resources/ui/units/vehicles/Panther G_24.jpg
new file mode 100644
index 00000000..00ba7851
Binary files /dev/null and b/resources/ui/units/vehicles/Panther G_24.jpg differ
diff --git a/resources/ui/units/vehicles/PzKpfw IV H_24.jpg b/resources/ui/units/vehicles/PzKpfw IV H_24.jpg
new file mode 100644
index 00000000..af068594
Binary files /dev/null and b/resources/ui/units/vehicles/PzKpfw IV H_24.jpg differ
diff --git a/resources/ui/units/vehicles/T-55_24.jpg b/resources/ui/units/vehicles/T-55_24.jpg
new file mode 100644
index 00000000..e2d6c5e0
Binary files /dev/null and b/resources/ui/units/vehicles/T-55_24.jpg differ
diff --git a/resources/ui/units/vehicles/T-72B_24.jpg b/resources/ui/units/vehicles/T-72B_24.jpg
new file mode 100644
index 00000000..dc8c5ff3
Binary files /dev/null and b/resources/ui/units/vehicles/T-72B_24.jpg differ
diff --git a/resources/ui/units/vehicles/T-80U_24.jpg b/resources/ui/units/vehicles/T-80U_24.jpg
new file mode 100644
index 00000000..8537a9b3
Binary files /dev/null and b/resources/ui/units/vehicles/T-80U_24.jpg differ
diff --git a/resources/ui/units/vehicles/T-90_24.jpg b/resources/ui/units/vehicles/T-90_24.jpg
new file mode 100644
index 00000000..d79bcb4c
Binary files /dev/null and b/resources/ui/units/vehicles/T-90_24.jpg differ
diff --git a/resources/ui/units/vehicles/TPZ_24.jpg b/resources/ui/units/vehicles/TPZ_24.jpg
new file mode 100644
index 00000000..425b9a82
Binary files /dev/null and b/resources/ui/units/vehicles/TPZ_24.jpg differ
diff --git a/resources/ui/units/vehicles/Tiger II_24.jpg b/resources/ui/units/vehicles/Tiger II_24.jpg
new file mode 100644
index 00000000..0e6c9e9a
Binary files /dev/null and b/resources/ui/units/vehicles/Tiger II_24.jpg differ
diff --git a/resources/ui/units/vehicles/Tiger I_24.jpg b/resources/ui/units/vehicles/Tiger I_24.jpg
new file mode 100644
index 00000000..40b257c8
Binary files /dev/null and b/resources/ui/units/vehicles/Tiger I_24.jpg differ
diff --git a/resources/ui/units/vehicles/ZBD-04A_24.jpg b/resources/ui/units/vehicles/ZBD-04A_24.jpg
new file mode 100644
index 00000000..552ed345
Binary files /dev/null and b/resources/ui/units/vehicles/ZBD-04A_24.jpg differ