瀏覽代碼

Refactoring & project structure improvements

Ivan Arkhipov 6 年之前
父節點
當前提交
a480b5bcb9
共有 64 個文件被更改,包括 3519 次插入4588 次删除
  1. 二進制
      assets/fonts/barocco-initial.ttf
  2. 二進制
      assets/fonts/viking-cyr.ttf
  3. 二進制
      assets/window/thick_opaque-border-botleft.png
  4. 二進制
      assets/window/thick_opaque-border-botright.png
  5. 二進制
      assets/window/thick_opaque-border-bottom.png
  6. 二進制
      assets/window/thick_opaque-border-left.png
  7. 二進制
      assets/window/thick_opaque-border-right.png
  8. 二進制
      assets/window/thick_opaque-border-top.png
  9. 二進制
      assets/window/thick_opaque-border-topleft.png
  10. 二進制
      assets/window/thick_opaque-border-topright.png
  11. 0 13
      base.qrc
  12. 36 34
      client.pro
  13. 0 51
      gui.qrc
  14. 0 13
      include/gui/GUI.h
  15. 193 134
      include/gui/GUI.ui
  16. 22 0
      include/gui/LoadingForm.h
  17. 21 0
      include/gui/LoadingForm.ui
  18. 12 1
      include/gui/MainMenu.ui
  19. 0 13
      include/gui/gui.h
  20. 193 134
      include/gui/gui.ui
  21. 12 1
      include/gui/mainmenu.ui
  22. 0 30
      include/gui/playervsplayerintro.h
  23. 0 134
      include/gui/playervsplayerintro.ui
  24. 0 35
      include/gui/prebattlescene.h
  25. 0 171
      include/gui/prebattlescene.ui
  26. 0 67
      include/gui/raceicon.h
  27. 0 87
      include/gui/recruitmentscene.h
  28. 0 453
      include/gui/recruitmentscene.ui
  29. 0 72
      include/gui/uniticon.h
  30. 1 1
      include/hotseatgame/GameManager.h
  31. 0 0
      include/hotseatgame/UnitsQueue.h
  32. 1066 757
      include/hotseatgame/gui/HotSeatGame.ui
  33. 0 0
      include/hotseatgame/gui/PlayerVsPlayerIntro.h
  34. 0 0
      include/hotseatgame/gui/PlayerVsPlayerIntro.ui
  35. 0 0
      include/hotseatgame/gui/PreBattleScene.h
  36. 0 0
      include/hotseatgame/gui/PreBattleScene.ui
  37. 0 0
      include/hotseatgame/gui/RaceIcon.h
  38. 0 0
      include/hotseatgame/gui/RecruitmentScene.h
  39. 0 0
      include/hotseatgame/gui/RecruitmentScene.ui
  40. 0 0
      include/hotseatgame/gui/UnitIcon.h
  41. 1066 757
      include/hotseatgame/gui/hotseatgame.ui
  42. 15 0
      res/GUI.qrc
  43. 0 0
      res/hotseatgame/effects.qrc
  44. 51 0
      res/hotseatgame/game_ui.qrc
  45. 0 0
      res/hotseatgame/spells.qrc
  46. 751 0
      res/hotseatgame/units.qrc
  47. 19 25
      source/gui/GUI.cpp
  48. 9 3
      source/gui/GuiSceneManager.cpp
  49. 14 0
      source/gui/LoadingForm.cpp
  50. 19 25
      source/gui/gui.cpp
  51. 9 3
      source/gui/guiscenemanager.cpp
  52. 0 30
      source/gui/playervsplayerintro.cpp
  53. 0 74
      source/gui/prebattlescene.cpp
  54. 0 138
      source/gui/raceicon.cpp
  55. 0 429
      source/gui/recruitmentscene.cpp
  56. 0 140
      source/gui/uniticon.cpp
  57. 1 1
      source/hotseatgame/UnitsQueue.cpp
  58. 1 1
      source/hotseatgame/gui/PlayerVsPlayerIntro.cpp
  59. 3 3
      source/hotseatgame/gui/PreBattleScene.cpp
  60. 1 1
      source/hotseatgame/gui/RaceIcon.cpp
  61. 3 3
      source/hotseatgame/gui/RecruitmentScene.cpp
  62. 1 1
      source/hotseatgame/gui/UnitIcon.cpp
  63. 0 2
      source/main.cpp
  64. 0 751
      units.qrc

二進制
assets/fonts/barocco-initial.ttf


二進制
assets/fonts/viking-cyr.ttf


二進制
assets/window/thick_opaque-border-botleft.png


二進制
assets/window/thick_opaque-border-botright.png


二進制
assets/window/thick_opaque-border-bottom.png


二進制
assets/window/thick_opaque-border-left.png


二進制
assets/window/thick_opaque-border-right.png


二進制
assets/window/thick_opaque-border-top.png


二進制
assets/window/thick_opaque-border-topleft.png


二進制
assets/window/thick_opaque-border-topright.png


+ 0 - 13
base.qrc

@@ -1,13 +0,0 @@
-<RCC>
-    <qresource prefix="/">
-		<file>assets/window/strong_translucent-background.png</file>
-        <file>assets/window/strong_translucent-border_bottom.png</file>
-        <file>assets/window/strong_translucent-border-botleft.png</file>
-        <file>assets/window/strong_translucent-border-botright.png</file>
-        <file>assets/window/strong_translucent-border-left.png</file>
-        <file>assets/window/strong_translucent-border-right.png</file>
-        <file>assets/window/strong_translucent-border-top.png</file>
-        <file>assets/window/strong_translucent-border-topleft.png</file>
-        <file>assets/window/strong_translucent-border-topright.png</file>
-	</qresource>
-</RCC>

+ 36 - 34
client.pro

@@ -57,50 +57,48 @@ exists($$DESTDIR/res) {
     }
 
 win32 {
-    guiRes.commands += rcc.exe -binary $$PWD/gui.qrc -o $$DESTDIR/res/gui_data.gtr $$escape_expand(\n\t) \
-                       rcc.exe -binary $$PWD/units.qrc -o $$DESTDIR/res/unit_data.gtr $$escape_expand(\n\t) \
-                       rcc.exe -binary $$PWD/effects.qrc -o $$DESTDIR/res/effect_data.gtr $$escape_expand(\n\t) \
-                       rcc.exe -binary $$PWD/spells.qrc -o $$DESTDIR/res/spell_data.gtr
+    guiRes.commands += rcc.exe -binary $$PWD/res/hotseatgame/game_ui.qrc -o $$DESTDIR/res/gui_data.gtr $$escape_expand(\n\t) \
+                       rcc.exe -binary $$PWD/res/hotseatgame/units.qrc -o $$DESTDIR/res/unit_data.gtr $$escape_expand(\n\t) \
+                       rcc.exe -binary $$PWD/res/hotseatgame/effects.qrc -o $$DESTDIR/res/effect_data.gtr $$escape_expand(\n\t) \
+                       rcc.exe -binary $$PWD/res/hotseatgame/spells.qrc -o $$DESTDIR/res/spell_data.gtr
 }
 
 unix {
-    guiRes.commands += rcc -binary $$PWD/gui.qrc -o $$DESTDIR/res/gui_data.gtr $$escape_expand(\n\t) \
-                       rcc -binary $$PWD/units.qrc -o $$DESTDIR/res/unit_data.gtr $$escape_expand(\n\t) \
-                       rcc -binary $$PWD/effects.qrc -o $$DESTDIR/res/effect_data.gtr $$escape_expand(\n\t) \
-                       rcc -binary $$PWD/spells.qrc -o $$DESTDIR/res/spell_data.gtr
+    guiRes.commands += rcc -binary $$PWD/res/hotseatgame/game_ui.qrc.qrc -o $$DESTDIR/res/game_ui_data.gtr $$escape_expand(\n\t) \
+                       rcc -binary $$PWD/res/hotseatgame/units.qrc -o $$DESTDIR/res/unit_data.gtr $$escape_expand(\n\t) \
+                       rcc -binary $$PWD/res/hotseatgame/effects.qrc -o $$DESTDIR/res/effect_data.gtr $$escape_expand(\n\t) \
+                       rcc -binary $$PWD/res/hotseatgame/spells.qrc -o $$DESTDIR/res/spell_data.gtr
 }
 
 QMAKE_EXTRA_TARGETS += guiRes
 PRE_TARGETDEPS += BuildResources
 
 # ================================================== #
-
 SOURCES += \
     source/main.cpp \
     source/Cell.cpp \
-    source/UnitsQueue.cpp \
-    source/hotseatgame/GameManager.cpp \
-    source/gui/GUI.cpp \
+    source/gui/Scene.cpp \
     source/gui/GuiSceneManager.cpp \
+    source/gui/GUI.cpp \
     source/gui/MainMenu.cpp \
-    source/gui/PlayerVsPlayerIntro.cpp \
-    source/gui/PreBattleScene.cpp \
-    source/gui/RaceIcon.cpp \
-    source/gui/RecruitmentScene.cpp \
-    source/gui/Scene.cpp \
-    source/gui/UnitIcon.cpp \
+    source/gui/LoadingForm.cpp \
     source/units/Mage.cpp \
     source/units/Unit.cpp \
     source/units/Warrior.cpp \
     source/PlayerManager.cpp \
     source/Race.cpp \
     source/RaceManager.cpp \
+    source/hotseatgame/GameManager.cpp \
+    source/hotseatgame/UnitsQueue.cpp \
+    source/hotseatgame/gui/PlayerVsPlayerIntro.cpp \
+    source/hotseatgame/gui/PreBattleScene.cpp \
+    source/hotseatgame/gui/RaceIcon.cpp \
+    source/hotseatgame/gui/RecruitmentScene.cpp \
+    source/hotseatgame/gui/UnitIcon.cpp \
     source/hotseatgame/gui/HotSeatGame.cpp
 
 HEADERS += \
     include/Cell.h \
-    include/UnitsQueue.h \
-    include/hotseatgame/GameManager.h \
     include/Player.h \
     include/PlayerManager.h \
     include/Race.h \
@@ -112,27 +110,31 @@ HEADERS += \
     include/gui/GUI.h \
     include/gui/GuiSceneManager.h \
     include/gui/MainMenu.h \
-    include/gui/PlayerVsPlayerIntro.h \
-    include/gui/PreBattleScene.h \
-    include/gui/RaceIcon.h \
-    include/gui/RecruitmentScene.h \
     include/gui/Scene.h \
-    include/gui/UnitIcon.h \
+    include/gui/LoadingForm.h \
+    include/hotseatgame/GameManager.h \
+    include/hotseatgame/UnitsQueue.h \
+    include/hotseatgame/gui/PlayerVsPlayerIntro.h \
+    include/hotseatgame/gui/PreBattleScene.h \
+    include/hotseatgame/gui/RaceIcon.h \
+    include/hotseatgame/gui/RecruitmentScene.h \
+    include/hotseatgame/gui/UnitIcon.h \
     include/hotseatgame/gui/HotSeatGame.h
 
 FORMS += \
     include/gui/GUI.ui \
     include/gui/MainMenu.ui \
-    include/gui/PlayerVsPlayerIntro.ui \
-    include/gui/PreBattleScene.ui \
-    include/gui/RecruitmentScene.ui \
-    include/hotseatgame/gui/HotSeatGame.ui
+    include/hotseatgame/gui/PlayerVsPlayerIntro.ui \
+    include/hotseatgame/gui/PreBattleScene.ui \
+    include/hotseatgame/gui/RecruitmentScene.ui \
+    include/hotseatgame/gui/HotSeatGame.ui \
+    include/gui/LoadingForm.ui
 
 RESOURCES += \
-     base.qrc
-#    gui.qrc \
-#    units.qrc \
-#    spells.qrc \
-#    effects.qrc
+     res/GUI.qrc
+     #res/hotseatgame/game_ui.qrc \
+     #res/hotseatgame/units.qrc \
+     #res/hotseatgame/spells.qrc \
+     #res/hotseatgame/effects.qrc
 
 RC_ICONS = $$PWD/assets/common/icon.ico

+ 0 - 51
gui.qrc

@@ -1,51 +0,0 @@
-<RCC>
-    <qresource prefix="/">
-        <file>assets/common/Scroll.png</file>
-        <file>assets/common/strelka.png</file>
-        <file>assets/common/unit_icon_active.png</file>
-        <file>assets/common/unit_icon_default.png</file>
-        <file>assets/common/unit_icon_hover.png</file>
-        <file>assets/pvp_intro/picture.jpg</file>
-        <file>assets/recruitscene/divider.png</file>
-        <file>assets/window/thick_opaque-background.png</file>
-        <file>assets/window/thick_opaque-border-botleft.png</file>
-        <file>assets/window/thick_opaque-border-botright.png</file>
-        <file>assets/window/thick_opaque-border-bottom.png</file>
-        <file>assets/window/thick_opaque-border-left.png</file>
-        <file>assets/window/thick_opaque-border-right.png</file>
-        <file>assets/window/thick_opaque-border-top.png</file>
-        <file>assets/window/thick_opaque-border-topleft.png</file>
-        <file>assets/window/thick_opaque-border-topright.png</file>
-        <file>assets/common/icon.ico</file>
-        <file>assets/common/pergam.png</file>
-        <file>assets/pvp_intro/pre-battle1.jpg</file>
-        <file>assets/window/opaque-border-botleft.png</file>
-        <file>assets/window/opaque-border-botright.png</file>
-        <file>assets/window/opaque-border-bottom.png</file>
-        <file>assets/window/opaque-border-left.png</file>
-        <file>assets/window/opaque-border-right.png</file>
-        <file>assets/window/opaque-border-top.png</file>
-        <file>assets/window/opaque-border-topleft.png</file>
-        <file>assets/window/opaque-border-topright.png</file>
-        <file>assets/hotseatpvp/scroll_red.png</file>
-        <file>assets/hotseatpvp/standart_effect.png</file>
-        <file>assets/hotseatpvp/battle_bg/CmBkCF.png</file>
-        <file>assets/hotseatpvp/battle_bg/CmBkCur.png</file>
-        <file>assets/hotseatpvp/battle_bg/CmBkDeck.png</file>
-        <file>assets/hotseatpvp/battle_bg/CmBkDes.png</file>
-        <file>assets/hotseatpvp/battle_bg/CmBkDrDd.png</file>
-        <file>assets/hotseatpvp/battle_bg/CmBkDrMt.png</file>
-        <file>assets/hotseatpvp/battle_bg/CmBkDrTr.png</file>
-        <file>assets/hotseatpvp/battle_bg/CmBkGrMt.png</file>
-        <file>assets/hotseatpvp/battle_bg/CmBkGrTr.png</file>
-        <file>assets/hotseatpvp/battle_bg/CmBkHG.png</file>
-        <file>assets/hotseatpvp/battle_bg/CmBkLava.png</file>
-        <file>assets/hotseatpvp/battle_bg/CmBkMag.png</file>
-        <file>assets/hotseatpvp/battle_bg/CmBkRgh.png</file>
-        <file>assets/hotseatpvp/battle_bg/CmBkRK.png</file>
-        <file>assets/hotseatpvp/battle_bg/CmBkSnMt.png</file>
-        <file>assets/hotseatpvp/battle_bg/CmBkSnTr.png</file>
-        <file>assets/hotseatpvp/battle_bg/CmBkSub.png</file>
-        <file>assets/hotseatpvp/battle_bg/CmBkSwmp.png</file>
-    </qresource>
-</RCC>

+ 0 - 13
include/gui/GUI.h

@@ -4,7 +4,6 @@
 #include <QMainWindow>
 #include <QGraphicsScene>
 #include <QMouseEvent>
-#include "RecruitmentScene.h"
 
 namespace Ui {
 class GUI;
@@ -22,18 +21,6 @@ public:
 private:
     Ui::GUI *ui_;
 
-    QGraphicsScene *scene_;
-    RecruitmentScene *rq_scene_;
-
-    QImage left_border_;
-    QImage left_up_corner_;
-    QImage up_border_;
-    QImage up_right_corner_;
-    QImage right_border_;
-    QImage right_bottom_corner_;
-    QImage bottom_border_;
-    QImage bottom_left_corner_;
-
 protected:
     void mouseMoveEvent( QMouseEvent* e );
     void mousePressEvent( QMouseEvent* e );

+ 193 - 134
include/gui/GUI.ui

@@ -14,140 +14,199 @@
    <string>GUI</string>
   </property>
   <widget class="QWidget" name="centralWidget">
-   <widget class="QLabel" name="botleft_corner_">
-    <property name="geometry">
-     <rect>
-      <x>-3</x>
-      <y>758</y>
-      <width>45</width>
-      <height>45</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/assets/window/thick_opaque-border-botleft.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-    </property>
-   </widget>
-   <widget class="QLabel" name="left_border_">
-    <property name="geometry">
-     <rect>
-      <x>-3</x>
-      <y>42</y>
-      <width>51</width>
-      <height>716</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>&lt;html&gt;&lt;head&gt;&lt;body&gt;
-&lt;div style=&quot;background:url(:/assets/window/thick_opaque-border-left.png);&quot; width=&quot;100%&quot; height=&quot;100%&quot; /&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;
-&lt;/body&gt;&lt;/html&gt;</string>
-    </property>
-   </widget>
-   <widget class="QLabel" name="topleft_corner_">
-    <property name="geometry">
-     <rect>
-      <x>-3</x>
-      <y>-3</y>
-      <width>45</width>
-      <height>45</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/assets/window/thick_opaque-border-topleft.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-    </property>
-   </widget>
-   <widget class="QLabel" name="top_border_">
-    <property name="geometry">
-     <rect>
-      <x>42</x>
-      <y>-3</y>
-      <width>937</width>
-      <height>45</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;div style=&quot;background:url(:/assets/window/thick_opaque-border-top.png);&quot; width=&quot;100%&quot; height=&quot;100%&quot; /&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;&lt;/body&gt;&lt;/html&gt;</string>
-    </property>
-   </widget>
-   <widget class="QLabel" name="topright_corner_">
-    <property name="geometry">
-     <rect>
-      <x>979</x>
-      <y>-3</y>
-      <width>45</width>
-      <height>45</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/assets/window/thick_opaque-border-topright.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-    </property>
-   </widget>
-   <widget class="QLabel" name="right_border_">
-    <property name="geometry">
-     <rect>
-      <x>979</x>
-      <y>42</y>
-      <width>45</width>
-      <height>716</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>&lt;html&gt;&lt;head&gt;&lt;body&gt;
-&lt;div style=&quot;background:url(:/assets/window/thick_opaque-border-right.png);&quot; width=&quot;100%&quot; height=&quot;100%&quot; /&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;
-&lt;/body&gt;&lt;/html&gt;</string>
-    </property>
-   </widget>
-   <widget class="QLabel" name="bottom_border_">
-    <property name="geometry">
-     <rect>
-      <x>42</x>
-      <y>758</y>
-      <width>937</width>
-      <height>45</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;div style=&quot;background:url(:/assets/window/thick_opaque-border-bottom.png);&quot; width=&quot;100%&quot; height=&quot;100%&quot; /&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;&lt;/body&gt;&lt;/html&gt;</string>
-    </property>
-   </widget>
-   <widget class="QLabel" name="botright_corner">
-    <property name="geometry">
-     <rect>
-      <x>979</x>
-      <y>758</y>
-      <width>45</width>
-      <height>45</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/assets/window/thick_opaque-border-botright.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-    </property>
-   </widget>
-   <widget class="QLabel" name="background">
-    <property name="geometry">
-     <rect>
-      <x>42</x>
-      <y>42</y>
-      <width>938</width>
-      <height>716</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>&lt;html&gt;&lt;head&gt;&lt;body&gt;
-&lt;div style=&quot;background:url(:/assets/window/thick_opaque-background.png);&quot; width=&quot;100%&quot; height=&quot;100%&quot; /&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;
-&lt;/body&gt;&lt;/html&gt;</string>
-    </property>
-   </widget>
-   <widget class="QWidget" name="main_content_" native="true">
-    <property name="geometry">
-     <rect>
-      <x>40</x>
-      <y>40</y>
-      <width>940</width>
-      <height>720</height>
-     </rect>
-    </property>
-    <layout class="QGridLayout" name="content_"/>
-   </widget>
+   <layout class="QGridLayout" name="gridLayout">
+    <property name="leftMargin">
+     <number>0</number>
+    </property>
+    <property name="topMargin">
+     <number>0</number>
+    </property>
+    <property name="rightMargin">
+     <number>0</number>
+    </property>
+    <property name="bottomMargin">
+     <number>0</number>
+    </property>
+    <property name="spacing">
+     <number>0</number>
+    </property>
+    <item row="0" column="0">
+     <widget class="QWidget" name="window_topleft_border_" native="true">
+      <property name="minimumSize">
+       <size>
+        <width>45</width>
+        <height>45</height>
+       </size>
+      </property>
+      <property name="maximumSize">
+       <size>
+        <width>45</width>
+        <height>45</height>
+       </size>
+      </property>
+      <property name="cursor">
+       <cursorShape>SizeAllCursor</cursorShape>
+      </property>
+      <property name="styleSheet">
+       <string notr="true">background-image: url(:/assets/window/thick_opaque-border-topleft.png);</string>
+      </property>
+     </widget>
+    </item>
+    <item row="0" column="1">
+     <widget class="QWidget" name="window_top_border_" native="true">
+      <property name="cursor">
+       <cursorShape>SizeAllCursor</cursorShape>
+      </property>
+      <property name="styleSheet">
+       <string notr="true">background-image: url(:/assets/window/thick_opaque-border-top.png);</string>
+      </property>
+     </widget>
+    </item>
+    <item row="0" column="2">
+     <widget class="QWidget" name="window_topright_border_" native="true">
+      <property name="sizePolicy">
+       <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+        <horstretch>0</horstretch>
+        <verstretch>0</verstretch>
+       </sizepolicy>
+      </property>
+      <property name="minimumSize">
+       <size>
+        <width>45</width>
+        <height>45</height>
+       </size>
+      </property>
+      <property name="maximumSize">
+       <size>
+        <width>45</width>
+        <height>45</height>
+       </size>
+      </property>
+      <property name="cursor">
+       <cursorShape>SizeAllCursor</cursorShape>
+      </property>
+      <property name="styleSheet">
+       <string notr="true">background-image: url(:/assets/window/thick_opaque-border-topright.png);</string>
+      </property>
+     </widget>
+    </item>
+    <item row="1" column="0">
+     <widget class="QWidget" name="window_left_border_" native="true">
+      <property name="cursor">
+       <cursorShape>SizeAllCursor</cursorShape>
+      </property>
+      <property name="styleSheet">
+       <string notr="true">background-image: url(:/assets/window/thick_opaque-border-left.png);</string>
+      </property>
+     </widget>
+    </item>
+    <item row="1" column="1">
+     <widget class="QWidget" name="main_content_" native="true">
+      <property name="autoFillBackground">
+       <bool>false</bool>
+      </property>
+      <property name="styleSheet">
+       <string notr="true">background: url(:/assets/window/thick_opaque-background.png);</string>
+      </property>
+      <layout class="QGridLayout" name="content_">
+       <property name="leftMargin">
+        <number>0</number>
+       </property>
+       <property name="topMargin">
+        <number>0</number>
+       </property>
+       <property name="rightMargin">
+        <number>0</number>
+       </property>
+       <property name="bottomMargin">
+        <number>0</number>
+       </property>
+       <property name="spacing">
+        <number>0</number>
+       </property>
+      </layout>
+     </widget>
+    </item>
+    <item row="1" column="2">
+     <widget class="QWidget" name="window_right_border_" native="true">
+      <property name="cursor">
+       <cursorShape>SizeAllCursor</cursorShape>
+      </property>
+      <property name="styleSheet">
+       <string notr="true">background-image: url(:/assets/window/thick_opaque-border-right.png);</string>
+      </property>
+     </widget>
+    </item>
+    <item row="2" column="0">
+     <widget class="QWidget" name="window_botleft_border_" native="true">
+      <property name="minimumSize">
+       <size>
+        <width>45</width>
+        <height>45</height>
+       </size>
+      </property>
+      <property name="maximumSize">
+       <size>
+        <width>45</width>
+        <height>45</height>
+       </size>
+      </property>
+      <property name="cursor">
+       <cursorShape>SizeAllCursor</cursorShape>
+      </property>
+      <property name="styleSheet">
+       <string notr="true">background-image: url(:/assets/window/thick_opaque-border-botleft.png);</string>
+      </property>
+     </widget>
+    </item>
+    <item row="2" column="1">
+     <widget class="QWidget" name="window_bottom_border_" native="true">
+      <property name="cursor">
+       <cursorShape>SizeAllCursor</cursorShape>
+      </property>
+      <property name="styleSheet">
+       <string notr="true">background-image: url(:/assets/window/thick_opaque-border-bottom.png);</string>
+      </property>
+     </widget>
+    </item>
+    <item row="2" column="2">
+     <widget class="QWidget" name="window_botright_border_" native="true">
+      <property name="sizePolicy">
+       <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+        <horstretch>0</horstretch>
+        <verstretch>0</verstretch>
+       </sizepolicy>
+      </property>
+      <property name="minimumSize">
+       <size>
+        <width>45</width>
+        <height>45</height>
+       </size>
+      </property>
+      <property name="maximumSize">
+       <size>
+        <width>45</width>
+        <height>45</height>
+       </size>
+      </property>
+      <property name="cursor">
+       <cursorShape>SizeAllCursor</cursorShape>
+      </property>
+      <property name="styleSheet">
+       <string notr="true">background-image: url(:/assets/window/thick_opaque-border-botright.png);</string>
+      </property>
+     </widget>
+    </item>
+   </layout>
+   <zorder>main_content_</zorder>
+   <zorder>window_topleft_border_</zorder>
+   <zorder>window_top_border_</zorder>
+   <zorder>window_topright_border_</zorder>
+   <zorder>window_left_border_</zorder>
+   <zorder>window_right_border_</zorder>
+   <zorder>window_botleft_border_</zorder>
+   <zorder>window_bottom_border_</zorder>
+   <zorder>window_botright_border_</zorder>
   </widget>
  </widget>
  <layoutdefault spacing="6" margin="11"/>

+ 22 - 0
include/gui/LoadingForm.h

@@ -0,0 +1,22 @@
+#ifndef LOADINGFORM_H
+#define LOADINGFORM_H
+
+#include "Scene.h"
+
+namespace Ui {
+class LoadingForm;
+}
+
+class LoadingForm : public Scene
+{
+    Q_OBJECT
+
+public:
+    explicit LoadingForm(QWidget *parent = 0);
+    ~LoadingForm();
+
+private:
+    Ui::LoadingForm *ui;
+};
+
+#endif // LOADINGFORM_H

+ 21 - 0
include/gui/LoadingForm.ui

@@ -0,0 +1,21 @@
+<ui version="4.0">
+ <author/>
+ <comment/>
+ <exportmacro/>
+ <class>LoadingForm</class>
+ <widget name="LoadingForm" class="QWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+ </widget>
+ <pixmapfunction/>
+ <connections/>
+</ui>

+ 12 - 1
include/gui/MainMenu.ui

@@ -22,8 +22,11 @@
      <height>101</height>
     </rect>
    </property>
+   <property name="styleSheet">
+    <string notr="true">font: 14pt &quot;Barocco Initial&quot;;</string>
+   </property>
    <property name="text">
-    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:24pt; color:#b12d2d;&quot;&gt;Супер-мега-крутая-игрушка-название-которой-мы-ещё-не-придумали&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:18pt; color:#b12d2d;&quot;&gt;Супер-мега-крутая-игрушка-название-которой-мы-еще-не-придумали&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
    </property>
    <property name="wordWrap">
     <bool>true</bool>
@@ -38,6 +41,10 @@
      <height>251</height>
     </rect>
    </property>
+   <property name="styleSheet">
+    <string notr="true">font: 16pt &quot;Viking Cyr&quot;;
+color: rgb(255, 255, 0);</string>
+   </property>
    <property name="text">
     <string>Игрок против игрока</string>
    </property>
@@ -51,6 +58,10 @@
      <height>221</height>
     </rect>
    </property>
+   <property name="styleSheet">
+    <string notr="true">font: 16pt &quot;Viking Cyr&quot;;
+color: rgb(255, 255, 0);</string>
+   </property>
    <property name="text">
     <string>Выйти из игры</string>
    </property>

+ 0 - 13
include/gui/gui.h

@@ -4,7 +4,6 @@
 #include <QMainWindow>
 #include <QGraphicsScene>
 #include <QMouseEvent>
-#include "RecruitmentScene.h"
 
 namespace Ui {
 class GUI;
@@ -22,18 +21,6 @@ public:
 private:
     Ui::GUI *ui_;
 
-    QGraphicsScene *scene_;
-    RecruitmentScene *rq_scene_;
-
-    QImage left_border_;
-    QImage left_up_corner_;
-    QImage up_border_;
-    QImage up_right_corner_;
-    QImage right_border_;
-    QImage right_bottom_corner_;
-    QImage bottom_border_;
-    QImage bottom_left_corner_;
-
 protected:
     void mouseMoveEvent( QMouseEvent* e );
     void mousePressEvent( QMouseEvent* e );

+ 193 - 134
include/gui/gui.ui

@@ -14,140 +14,199 @@
    <string>GUI</string>
   </property>
   <widget class="QWidget" name="centralWidget">
-   <widget class="QLabel" name="botleft_corner_">
-    <property name="geometry">
-     <rect>
-      <x>-3</x>
-      <y>758</y>
-      <width>45</width>
-      <height>45</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/assets/window/thick_opaque-border-botleft.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-    </property>
-   </widget>
-   <widget class="QLabel" name="left_border_">
-    <property name="geometry">
-     <rect>
-      <x>-3</x>
-      <y>42</y>
-      <width>51</width>
-      <height>716</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>&lt;html&gt;&lt;head&gt;&lt;body&gt;
-&lt;div style=&quot;background:url(:/assets/window/thick_opaque-border-left.png);&quot; width=&quot;100%&quot; height=&quot;100%&quot; /&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;
-&lt;/body&gt;&lt;/html&gt;</string>
-    </property>
-   </widget>
-   <widget class="QLabel" name="topleft_corner_">
-    <property name="geometry">
-     <rect>
-      <x>-3</x>
-      <y>-3</y>
-      <width>45</width>
-      <height>45</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/assets/window/thick_opaque-border-topleft.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-    </property>
-   </widget>
-   <widget class="QLabel" name="top_border_">
-    <property name="geometry">
-     <rect>
-      <x>42</x>
-      <y>-3</y>
-      <width>937</width>
-      <height>45</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;div style=&quot;background:url(:/assets/window/thick_opaque-border-top.png);&quot; width=&quot;100%&quot; height=&quot;100%&quot; /&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;&lt;/body&gt;&lt;/html&gt;</string>
-    </property>
-   </widget>
-   <widget class="QLabel" name="topright_corner_">
-    <property name="geometry">
-     <rect>
-      <x>979</x>
-      <y>-3</y>
-      <width>45</width>
-      <height>45</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/assets/window/thick_opaque-border-topright.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-    </property>
-   </widget>
-   <widget class="QLabel" name="right_border_">
-    <property name="geometry">
-     <rect>
-      <x>979</x>
-      <y>42</y>
-      <width>45</width>
-      <height>716</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>&lt;html&gt;&lt;head&gt;&lt;body&gt;
-&lt;div style=&quot;background:url(:/assets/window/thick_opaque-border-right.png);&quot; width=&quot;100%&quot; height=&quot;100%&quot; /&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;
-&lt;/body&gt;&lt;/html&gt;</string>
-    </property>
-   </widget>
-   <widget class="QLabel" name="bottom_border_">
-    <property name="geometry">
-     <rect>
-      <x>42</x>
-      <y>758</y>
-      <width>937</width>
-      <height>45</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;div style=&quot;background:url(:/assets/window/thick_opaque-border-bottom.png);&quot; width=&quot;100%&quot; height=&quot;100%&quot; /&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;&lt;/body&gt;&lt;/html&gt;</string>
-    </property>
-   </widget>
-   <widget class="QLabel" name="botright_corner">
-    <property name="geometry">
-     <rect>
-      <x>979</x>
-      <y>758</y>
-      <width>45</width>
-      <height>45</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/assets/window/thick_opaque-border-botright.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-    </property>
-   </widget>
-   <widget class="QLabel" name="background">
-    <property name="geometry">
-     <rect>
-      <x>42</x>
-      <y>42</y>
-      <width>938</width>
-      <height>716</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>&lt;html&gt;&lt;head&gt;&lt;body&gt;
-&lt;div style=&quot;background:url(:/assets/window/thick_opaque-background.png);&quot; width=&quot;100%&quot; height=&quot;100%&quot; /&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;
-&lt;/body&gt;&lt;/html&gt;</string>
-    </property>
-   </widget>
-   <widget class="QWidget" name="main_content_" native="true">
-    <property name="geometry">
-     <rect>
-      <x>40</x>
-      <y>40</y>
-      <width>940</width>
-      <height>720</height>
-     </rect>
-    </property>
-    <layout class="QGridLayout" name="content_"/>
-   </widget>
+   <layout class="QGridLayout" name="gridLayout">
+    <property name="leftMargin">
+     <number>0</number>
+    </property>
+    <property name="topMargin">
+     <number>0</number>
+    </property>
+    <property name="rightMargin">
+     <number>0</number>
+    </property>
+    <property name="bottomMargin">
+     <number>0</number>
+    </property>
+    <property name="spacing">
+     <number>0</number>
+    </property>
+    <item row="0" column="0">
+     <widget class="QWidget" name="window_topleft_border_" native="true">
+      <property name="minimumSize">
+       <size>
+        <width>45</width>
+        <height>45</height>
+       </size>
+      </property>
+      <property name="maximumSize">
+       <size>
+        <width>45</width>
+        <height>45</height>
+       </size>
+      </property>
+      <property name="cursor">
+       <cursorShape>SizeAllCursor</cursorShape>
+      </property>
+      <property name="styleSheet">
+       <string notr="true">background-image: url(:/assets/window/thick_opaque-border-topleft.png);</string>
+      </property>
+     </widget>
+    </item>
+    <item row="0" column="1">
+     <widget class="QWidget" name="window_top_border_" native="true">
+      <property name="cursor">
+       <cursorShape>SizeAllCursor</cursorShape>
+      </property>
+      <property name="styleSheet">
+       <string notr="true">background-image: url(:/assets/window/thick_opaque-border-top.png);</string>
+      </property>
+     </widget>
+    </item>
+    <item row="0" column="2">
+     <widget class="QWidget" name="window_topright_border_" native="true">
+      <property name="sizePolicy">
+       <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+        <horstretch>0</horstretch>
+        <verstretch>0</verstretch>
+       </sizepolicy>
+      </property>
+      <property name="minimumSize">
+       <size>
+        <width>45</width>
+        <height>45</height>
+       </size>
+      </property>
+      <property name="maximumSize">
+       <size>
+        <width>45</width>
+        <height>45</height>
+       </size>
+      </property>
+      <property name="cursor">
+       <cursorShape>SizeAllCursor</cursorShape>
+      </property>
+      <property name="styleSheet">
+       <string notr="true">background-image: url(:/assets/window/thick_opaque-border-topright.png);</string>
+      </property>
+     </widget>
+    </item>
+    <item row="1" column="0">
+     <widget class="QWidget" name="window_left_border_" native="true">
+      <property name="cursor">
+       <cursorShape>SizeAllCursor</cursorShape>
+      </property>
+      <property name="styleSheet">
+       <string notr="true">background-image: url(:/assets/window/thick_opaque-border-left.png);</string>
+      </property>
+     </widget>
+    </item>
+    <item row="1" column="1">
+     <widget class="QWidget" name="main_content_" native="true">
+      <property name="autoFillBackground">
+       <bool>false</bool>
+      </property>
+      <property name="styleSheet">
+       <string notr="true">background: url(:/assets/window/thick_opaque-background.png);</string>
+      </property>
+      <layout class="QGridLayout" name="content_">
+       <property name="leftMargin">
+        <number>0</number>
+       </property>
+       <property name="topMargin">
+        <number>0</number>
+       </property>
+       <property name="rightMargin">
+        <number>0</number>
+       </property>
+       <property name="bottomMargin">
+        <number>0</number>
+       </property>
+       <property name="spacing">
+        <number>0</number>
+       </property>
+      </layout>
+     </widget>
+    </item>
+    <item row="1" column="2">
+     <widget class="QWidget" name="window_right_border_" native="true">
+      <property name="cursor">
+       <cursorShape>SizeAllCursor</cursorShape>
+      </property>
+      <property name="styleSheet">
+       <string notr="true">background-image: url(:/assets/window/thick_opaque-border-right.png);</string>
+      </property>
+     </widget>
+    </item>
+    <item row="2" column="0">
+     <widget class="QWidget" name="window_botleft_border_" native="true">
+      <property name="minimumSize">
+       <size>
+        <width>45</width>
+        <height>45</height>
+       </size>
+      </property>
+      <property name="maximumSize">
+       <size>
+        <width>45</width>
+        <height>45</height>
+       </size>
+      </property>
+      <property name="cursor">
+       <cursorShape>SizeAllCursor</cursorShape>
+      </property>
+      <property name="styleSheet">
+       <string notr="true">background-image: url(:/assets/window/thick_opaque-border-botleft.png);</string>
+      </property>
+     </widget>
+    </item>
+    <item row="2" column="1">
+     <widget class="QWidget" name="window_bottom_border_" native="true">
+      <property name="cursor">
+       <cursorShape>SizeAllCursor</cursorShape>
+      </property>
+      <property name="styleSheet">
+       <string notr="true">background-image: url(:/assets/window/thick_opaque-border-bottom.png);</string>
+      </property>
+     </widget>
+    </item>
+    <item row="2" column="2">
+     <widget class="QWidget" name="window_botright_border_" native="true">
+      <property name="sizePolicy">
+       <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+        <horstretch>0</horstretch>
+        <verstretch>0</verstretch>
+       </sizepolicy>
+      </property>
+      <property name="minimumSize">
+       <size>
+        <width>45</width>
+        <height>45</height>
+       </size>
+      </property>
+      <property name="maximumSize">
+       <size>
+        <width>45</width>
+        <height>45</height>
+       </size>
+      </property>
+      <property name="cursor">
+       <cursorShape>SizeAllCursor</cursorShape>
+      </property>
+      <property name="styleSheet">
+       <string notr="true">background-image: url(:/assets/window/thick_opaque-border-botright.png);</string>
+      </property>
+     </widget>
+    </item>
+   </layout>
+   <zorder>main_content_</zorder>
+   <zorder>window_topleft_border_</zorder>
+   <zorder>window_top_border_</zorder>
+   <zorder>window_topright_border_</zorder>
+   <zorder>window_left_border_</zorder>
+   <zorder>window_right_border_</zorder>
+   <zorder>window_botleft_border_</zorder>
+   <zorder>window_bottom_border_</zorder>
+   <zorder>window_botright_border_</zorder>
   </widget>
  </widget>
  <layoutdefault spacing="6" margin="11"/>

+ 12 - 1
include/gui/mainmenu.ui

@@ -22,8 +22,11 @@
      <height>101</height>
     </rect>
    </property>
+   <property name="styleSheet">
+    <string notr="true">font: 14pt &quot;Barocco Initial&quot;;</string>
+   </property>
    <property name="text">
-    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:24pt; color:#b12d2d;&quot;&gt;Супер-мега-крутая-игрушка-название-которой-мы-ещё-не-придумали&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:18pt; color:#b12d2d;&quot;&gt;Супер-мега-крутая-игрушка-название-которой-мы-еще-не-придумали&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
    </property>
    <property name="wordWrap">
     <bool>true</bool>
@@ -38,6 +41,10 @@
      <height>251</height>
     </rect>
    </property>
+   <property name="styleSheet">
+    <string notr="true">font: 16pt &quot;Viking Cyr&quot;;
+color: rgb(255, 255, 0);</string>
+   </property>
    <property name="text">
     <string>Игрок против игрока</string>
    </property>
@@ -51,6 +58,10 @@
      <height>221</height>
     </rect>
    </property>
+   <property name="styleSheet">
+    <string notr="true">font: 16pt &quot;Viking Cyr&quot;;
+color: rgb(255, 255, 0);</string>
+   </property>
    <property name="text">
     <string>Выйти из игры</string>
    </property>

+ 0 - 30
include/gui/playervsplayerintro.h

@@ -1,30 +0,0 @@
-#ifndef PLAYERVSPLAYERINTRO_H
-#define PLAYERVSPLAYERINTRO_H
-
-#include "gui/Scene.h"
-
-#include <QWidget>
-
-namespace Ui {
-class PlayerVsPlayerIntro;
-}
-
-class PlayerVsPlayerIntro : public Scene
-{
-    Q_OBJECT
-
-public:
-    explicit PlayerVsPlayerIntro(QWidget *parent = 0);
-    ~PlayerVsPlayerIntro();
-
-    void ParseArgs(QString args) {}
-private slots:
-    void on_back_to_menu_clicked();
-
-    void on_go_next_clicked();
-
-private:
-    Ui::PlayerVsPlayerIntro *ui;
-};
-
-#endif // PLAYERVSPLAYERINTRO_H

+ 0 - 134
include/gui/playervsplayerintro.ui

@@ -1,134 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>PlayerVsPlayerIntro</class>
- <widget class="Scene" name="PlayerVsPlayerIntro">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>940</width>
-    <height>720</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Form</string>
-  </property>
-  <widget class="QLabel" name="divider_">
-   <property name="geometry">
-    <rect>
-     <x>0</x>
-     <y>45</y>
-     <width>940</width>
-     <height>91</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/assets/recruitscene/divider.png&quot; width=&quot;940&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-   </property>
-  </widget>
-  <widget class="QLabel" name="title_">
-   <property name="geometry">
-    <rect>
-     <x>0</x>
-     <y>0</y>
-     <width>941</width>
-     <height>71</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:24pt; color:#b12d2d;&quot;&gt;Режим: игрок против игрока&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-   </property>
-  </widget>
-  <widget class="QLabel" name="title_1">
-   <property name="geometry">
-    <rect>
-     <x>90</x>
-     <y>120</y>
-     <width>751</width>
-     <height>151</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:16pt; color:#FDEAA8;&quot;&gt;Этот режим включает в себя стандартное пошаговое сражение между двумя игроками в отсутствие какого-либо сценария. Каждому игроку будет предложено выбрать расу и набрать армию в соответствии с указанным бюджетом. &lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-   </property>
-   <property name="wordWrap">
-    <bool>true</bool>
-   </property>
-  </widget>
-  <widget class="QLabel" name="label">
-   <property name="geometry">
-    <rect>
-     <x>200</x>
-     <y>290</y>
-     <width>501</width>
-     <height>261</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img width=&quot;500&quot; src=&quot;:/assets/pvp_intro/picture.jpg&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-   </property>
-  </widget>
-  <widget class="QPushButton" name="go_next">
-   <property name="geometry">
-    <rect>
-     <x>630</x>
-     <y>630</y>
-     <width>221</width>
-     <height>61</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>Продолжить</string>
-   </property>
-  </widget>
-  <widget class="QPushButton" name="back_to_menu">
-   <property name="geometry">
-    <rect>
-     <x>70</x>
-     <y>630</y>
-     <width>191</width>
-     <height>61</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>Назад</string>
-   </property>
-  </widget>
-  <widget class="QLabel" name="label_2">
-   <property name="geometry">
-    <rect>
-     <x>310</x>
-     <y>570</y>
-     <width>141</width>
-     <height>31</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:12pt; color:#b12d2d;&quot;&gt;Кол-во монет:&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-   </property>
-  </widget>
-  <widget class="QLineEdit" name="money_">
-   <property name="geometry">
-    <rect>
-     <x>462</x>
-     <y>577</y>
-     <width>111</width>
-     <height>20</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>1000</string>
-   </property>
-  </widget>
- </widget>
- <customwidgets>
-  <customwidget>
-   <class>Scene</class>
-   <extends>QWidget</extends>
-   <header>gui/scene.h</header>
-   <container>1</container>
-  </customwidget>
- </customwidgets>
- <resources/>
- <connections/>
-</ui>

+ 0 - 35
include/gui/prebattlescene.h

@@ -1,35 +0,0 @@
-#ifndef PREBATTLESCENE_H
-#define PREBATTLESCENE_H
-
-#include <QWidget>
-
-#include "gui/Scene.h"
-
-#include <vector>
-
-class UnitIcon;
-
-namespace Ui {
-class PreBattleScene;
-}
-
-class PreBattleScene : public Scene
-{
-    Q_OBJECT
-
-public:
-    explicit PreBattleScene(QWidget *parent = 0);
-    ~PreBattleScene();
-
-    void init() override;
-
-private slots:
-    void on_start_battle_clicked();
-
-private:
-    std::vector<UnitIcon*> units_player_1_;
-    std::vector<UnitIcon*> units_player_2_;
-    Ui::PreBattleScene *ui;
-};
-
-#endif // PREBATTLESCENE_H

+ 0 - 171
include/gui/prebattlescene.ui

@@ -1,171 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>PreBattleScene</class>
- <widget class="QWidget" name="PreBattleScene">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>940</width>
-    <height>720</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Form</string>
-  </property>
-  <widget class="QLabel" name="label">
-   <property name="geometry">
-    <rect>
-     <x>0</x>
-     <y>10</y>
-     <width>981</width>
-     <height>651</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/assets/common/pergam.png&quot; width=&quot;940&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-   </property>
-  </widget>
-  <widget class="QLabel" name="label_2">
-   <property name="geometry">
-    <rect>
-     <x>340</x>
-     <y>280</y>
-     <width>301</width>
-     <height>211</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/assets/pvp_intro/pre-battle1.jpg&quot; width=&quot;300&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-   </property>
-  </widget>
-  <widget class="QWidget" name="units_player_2_" native="true">
-   <property name="geometry">
-    <rect>
-     <x>550</x>
-     <y>140</y>
-     <width>320</width>
-     <height>128</height>
-    </rect>
-   </property>
-   <layout class="QGridLayout" name="units_player_2_layout_">
-    <property name="leftMargin">
-     <number>0</number>
-    </property>
-    <property name="topMargin">
-     <number>0</number>
-    </property>
-    <property name="rightMargin">
-     <number>0</number>
-    </property>
-    <property name="bottomMargin">
-     <number>0</number>
-    </property>
-    <property name="spacing">
-     <number>0</number>
-    </property>
-   </layout>
-  </widget>
-  <widget class="QWidget" name="units_player_1_" native="true">
-   <property name="geometry">
-    <rect>
-     <x>110</x>
-     <y>140</y>
-     <width>320</width>
-     <height>128</height>
-    </rect>
-   </property>
-   <layout class="QGridLayout" name="units_player_1_layout_">
-    <property name="leftMargin">
-     <number>0</number>
-    </property>
-    <property name="topMargin">
-     <number>0</number>
-    </property>
-    <property name="rightMargin">
-     <number>0</number>
-    </property>
-    <property name="bottomMargin">
-     <number>0</number>
-    </property>
-    <property name="spacing">
-     <number>0</number>
-    </property>
-   </layout>
-  </widget>
-  <widget class="QPushButton" name="start_battle">
-   <property name="geometry">
-    <rect>
-     <x>650</x>
-     <y>510</y>
-     <width>231</width>
-     <height>71</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>В бой!</string>
-   </property>
-  </widget>
-  <widget class="RaceIcon" name="race_icon_1_">
-   <property name="geometry">
-    <rect>
-     <x>110</x>
-     <y>300</y>
-     <width>128</width>
-     <height>128</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>TextLabel</string>
-   </property>
-  </widget>
-  <widget class="RaceIcon" name="race_icon_2_">
-   <property name="geometry">
-    <rect>
-     <x>710</x>
-     <y>300</y>
-     <width>128</width>
-     <height>128</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>TextLabel</string>
-   </property>
-  </widget>
-  <widget class="QLabel" name="title_1">
-   <property name="geometry">
-    <rect>
-     <x>110</x>
-     <y>80</y>
-     <width>320</width>
-     <height>61</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:24pt; color:#b12d2d;&quot;&gt;Игрок 1&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-   </property>
-  </widget>
-  <widget class="QLabel" name="title_2">
-   <property name="geometry">
-    <rect>
-     <x>550</x>
-     <y>80</y>
-     <width>320</width>
-     <height>61</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:24pt; color:#b12d2d;&quot;&gt;Игрок 2&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-   </property>
-  </widget>
- </widget>
- <customwidgets>
-  <customwidget>
-   <class>RaceIcon</class>
-   <extends>QLabel</extends>
-   <header>gui/raceicon.h</header>
-  </customwidget>
- </customwidgets>
- <resources/>
- <connections/>
-</ui>

+ 0 - 67
include/gui/raceicon.h

@@ -1,67 +0,0 @@
-#ifndef RACEICON_H
-#define RACEICON_H
-
-#include "Race.h"
-
-#include <QObject>
-#include <QWidget>
-#include <QLabel>
-#include <QImage>
-#include <QPixmap>
-#include <QPainter>
-#include <QTime>
-
-class RaceIcon : public QLabel {
-Q_OBJECT
-
-public:
-    explicit RaceIcon(QWidget* parent = 0, int width = 64, int height = 64);
-    ~RaceIcon();
-
-    void setRaceIcon(QImage icon);
-    void resize(int w, int h);
-    void unsetRaceIcon();
-
-    Race* getRace();
-    void setRace(Race* race);
-
-    int getState();
-    void setState(int state);
-
-    void deactivate();
-    void activate();
-
-protected:
-    void mousePressEvent(QMouseEvent* event) override;
-    void enterEvent(QEvent* event) override;
-    void leaveEvent(QEvent* event) override;
-
-signals:
-    void clicked(RaceIcon*);
-    void doubleclicked(RaceIcon*);
-    void hovered(RaceIcon*);
-    void unhovered(RaceIcon*);
-
-private:
-    void drawIcon();
-
-    int width_;
-    int height_;
-
-    int state_; // 0 = not initialized;
-                // 1 = default;
-                // 2 = hover;
-                // 3 = active;
-
-    QPixmap pixmap_;
-    QImage active_border_;
-    QImage hover_border_;
-    QImage default_border_;
-    QImage icon_;
-
-    QTime previous_click_time_;
-
-    Race* race_;
-};
-
-#endif // RACEICON_H

+ 0 - 87
include/gui/recruitmentscene.h

@@ -1,87 +0,0 @@
-#ifndef RECRUITMENTSCENE_H
-#define RECRUITMENTSCENE_H
-
-#include "gui/Scene.h"
-
-#include <QWidget>
-
-#include <vector>
-
-class UnitIcon;
-class RaceIcon;
-class Player;
-class Unit;
-class Race;
-
-namespace Ui {
-class RecruitmentScene;
-}
-
-class RecruitmentScene : public Scene
-{
-    Q_OBJECT
-
-public:
-    explicit RecruitmentScene(QWidget *parent = 0);
-    ~RecruitmentScene();
-
-    void parseArgs(QString args) override;
-    void init() override;
-
-public slots:
-    void onUnitIconHovered(UnitIcon*);
-    void onUnitIconUnHovered(UnitIcon*);
-    void onUnitIconClicked(UnitIcon*);
-    void onUnitIconDoubleClicked(UnitIcon*);
-
-    void onChosenUnitIconHovered(UnitIcon*);
-    void onChosenUnitIconUnHovered(UnitIcon*);
-    void onChosenUnitIconClicked(UnitIcon*);
-    void onChosenUnitIconDoubleClicked(UnitIcon*);
-
-    void onRaceIconHovered(RaceIcon*);
-    void onRaceIconUnHovered(RaceIcon*);
-    void onRaceIconClicked(RaceIcon*);
-    void onRaceIconDoubleClicked(RaceIcon*);
-
-    void onGradeUnitIconHovered(UnitIcon*);
-    void onGradeUnitIconUnHovered(UnitIcon*);
-    void onGradeUnitIconClicked(UnitIcon*);
-    void onGradeUnitIconDoubleClicked(UnitIcon*);
-
-private:
-    void initAvailableRaces();
-    void initAvailableUnits();
-    void showChosenUnits();
-
-    void setDescriptionTitle(QString title);
-    void setDescriptionText(QString text);
-    void setDescriptionIcon(QImage icon);
-
-    void updateSpecsWidget(Unit* unit);
-    void changeRace(Race* race);
-    void setMoney(int money_);
-
-private slots:
-    void on_back_button_clicked();
-
-    void on_apply_clicked();
-
-private:
-    int available_money_;
-    int current_money_;
-
-    int current_player_id_;
-    Player* current_player_;
-
-    Ui::RecruitmentScene *ui;
-    UnitIcon* available_units_icons_[5];
-    UnitIcon* chosen_units_icons_[10];
-
-    RaceIcon* available_races_icons_[3];
-
-    UnitIcon* prev_grade_units_icons[4];
-    UnitIcon* next_grade_units_icons[4];
-};
-
-#endif // RECRUITMENTSCENE_H

+ 0 - 453
include/gui/recruitmentscene.ui

@@ -1,453 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>RecruitmentScene</class>
- <widget class="Scene" name="RecruitmentScene">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>940</width>
-    <height>720</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Form</string>
-  </property>
-  <widget class="QLabel" name="chosen_race_text_">
-   <property name="geometry">
-    <rect>
-     <x>10</x>
-     <y>120</y>
-     <width>191</width>
-     <height>41</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:14pt; color:#FDEAA8;&quot;&gt;Выбранная раса:&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-   </property>
-  </widget>
-  <widget class="RaceIcon" name="chosen_race_image_">
-   <property name="geometry">
-    <rect>
-     <x>200</x>
-     <y>110</y>
-     <width>100</width>
-     <height>100</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/assets/units/warcraft/raceicon.png&quot; width=&quot;100&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-   </property>
-  </widget>
-  <widget class="QLabel" name="available_races_text_">
-   <property name="geometry">
-    <rect>
-     <x>450</x>
-     <y>150</y>
-     <width>201</width>
-     <height>31</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:14pt; color:#FDEAA8;&quot;&gt;Доступные расы:&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-   </property>
-  </widget>
-  <widget class="QWidget" name="available_races_list_" native="true">
-   <property name="geometry">
-    <rect>
-     <x>660</x>
-     <y>130</y>
-     <width>216</width>
-     <height>72</height>
-    </rect>
-   </property>
-   <layout class="QHBoxLayout" name="availableRacesLayout_">
-    <property name="spacing">
-     <number>0</number>
-    </property>
-    <property name="leftMargin">
-     <number>0</number>
-    </property>
-    <property name="topMargin">
-     <number>0</number>
-    </property>
-    <property name="rightMargin">
-     <number>0</number>
-    </property>
-    <property name="bottomMargin">
-     <number>0</number>
-    </property>
-   </layout>
-  </widget>
-  <widget class="QLabel" name="divider_">
-   <property name="geometry">
-    <rect>
-     <x>0</x>
-     <y>45</y>
-     <width>940</width>
-     <height>91</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/assets/recruitscene/divider.png&quot; width=&quot;940&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-   </property>
-  </widget>
-  <widget class="QLabel" name="title_">
-   <property name="geometry">
-    <rect>
-     <x>0</x>
-     <y>0</y>
-     <width>940</width>
-     <height>71</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:24pt; color:#b12d2d;&quot;&gt;Набор юнитов&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-   </property>
-  </widget>
-  <widget class="QLabel" name="chosen_units_label_">
-   <property name="geometry">
-    <rect>
-     <x>10</x>
-     <y>380</y>
-     <width>221</width>
-     <height>41</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:14pt; color:#FDEAA8;&quot;&gt;Выбранные юниты:&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-   </property>
-  </widget>
-  <widget class="QLabel" name="available_units_text_">
-   <property name="geometry">
-    <rect>
-     <x>10</x>
-     <y>250</y>
-     <width>201</width>
-     <height>31</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:14pt; color:#fdeaa8;&quot;&gt;Доступные классы:&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-   </property>
-  </widget>
-  <widget class="QWidget" name="available_units_list_" native="true">
-   <property name="geometry">
-    <rect>
-     <x>30</x>
-     <y>290</y>
-     <width>320</width>
-     <height>64</height>
-    </rect>
-   </property>
-   <layout class="QGridLayout" name="available_units_layout_">
-    <property name="leftMargin">
-     <number>0</number>
-    </property>
-    <property name="topMargin">
-     <number>0</number>
-    </property>
-    <property name="rightMargin">
-     <number>0</number>
-    </property>
-    <property name="bottomMargin">
-     <number>0</number>
-    </property>
-    <property name="spacing">
-     <number>0</number>
-    </property>
-   </layout>
-  </widget>
-  <widget class="QWidget" name="chosen_units_grid_" native="true">
-   <property name="geometry">
-    <rect>
-     <x>30</x>
-     <y>430</y>
-     <width>320</width>
-     <height>128</height>
-    </rect>
-   </property>
-   <layout class="QGridLayout" name="chosen_units_layout_">
-    <property name="leftMargin">
-     <number>0</number>
-    </property>
-    <property name="topMargin">
-     <number>0</number>
-    </property>
-    <property name="rightMargin">
-     <number>0</number>
-    </property>
-    <property name="bottomMargin">
-     <number>0</number>
-    </property>
-    <property name="spacing">
-     <number>0</number>
-    </property>
-   </layout>
-  </widget>
-  <widget class="QPushButton" name="apply">
-   <property name="geometry">
-    <rect>
-     <x>610</x>
-     <y>640</y>
-     <width>281</width>
-     <height>61</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>Завершить выбор</string>
-   </property>
-  </widget>
-  <widget class="QWidget" name="description_scroll_widget_" native="true">
-   <property name="geometry">
-    <rect>
-     <x>590</x>
-     <y>250</y>
-     <width>321</width>
-     <height>441</height>
-    </rect>
-   </property>
-   <widget class="QLabel" name="background_scroll_label_">
-    <property name="geometry">
-     <rect>
-      <x>0</x>
-      <y>0</y>
-      <width>321</width>
-      <height>421</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/assets/common/Scroll.png&quot; width=&quot;321&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-    </property>
-   </widget>
-   <widget class="QLabel" name="desctiption_title_">
-    <property name="geometry">
-     <rect>
-      <x>100</x>
-      <y>70</y>
-      <width>161</width>
-      <height>41</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-weight:600; font-size:16px; color:#000080;&quot;&gt;Название юнита&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-    </property>
-    <property name="wordWrap">
-     <bool>true</bool>
-    </property>
-   </widget>
-   <widget class="QLabel" name="description_text_">
-    <property name="geometry">
-     <rect>
-      <x>40</x>
-      <y>120</y>
-      <width>231</width>
-      <height>191</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; color:#000080;&quot;&gt;Здоровье:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; color:#000080;&quot;&gt;Сила:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; color:#000080;&quot;&gt;Урон:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; color:#000080;&quot;&gt;Удар:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; color:#000080;&quot;&gt;Удача:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; color:#000080;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-    </property>
-    <property name="alignment">
-     <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
-    </property>
-   </widget>
-   <widget class="UnitIcon" name="description_icon_">
-    <property name="geometry">
-     <rect>
-      <x>50</x>
-      <y>70</y>
-      <width>45</width>
-      <height>45</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/assets/units/warcraft/blademaster/icon.png&quot; width=&quot;45&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-    </property>
-   </widget>
-  </widget>
-  <widget class="QPushButton" name="back_button">
-   <property name="geometry">
-    <rect>
-     <x>50</x>
-     <y>650</y>
-     <width>161</width>
-     <height>61</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>На главное меню</string>
-   </property>
-  </widget>
-  <widget class="QLabel" name="available_money_text_">
-   <property name="geometry">
-    <rect>
-     <x>10</x>
-     <y>160</y>
-     <width>191</width>
-     <height>21</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:10pt; color:#ff0000;&quot;&gt;Ресурсы: 0000000 &lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-   </property>
-  </widget>
-  <widget class="QWidget" name="unit_spec_widget_" native="true">
-   <property name="geometry">
-    <rect>
-     <x>380</x>
-     <y>270</y>
-     <width>180</width>
-     <height>291</height>
-    </rect>
-   </property>
-   <widget class="QLabel" name="spec_title_">
-    <property name="geometry">
-     <rect>
-      <x>0</x>
-      <y>10</y>
-      <width>180</width>
-      <height>21</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:10pt; color:#fdeaa8;&quot;&gt;Специализация&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-    </property>
-   </widget>
-   <widget class="QLabel" name="arrow_down_1_">
-    <property name="geometry">
-     <rect>
-      <x>80</x>
-      <y>80</y>
-      <width>31</width>
-      <height>61</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/assets/common/strelka.png&quot; width=&quot;25&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-    </property>
-   </widget>
-   <widget class="UnitIcon" name="current_spec_unit_">
-    <property name="geometry">
-     <rect>
-      <x>70</x>
-      <y>140</y>
-      <width>45</width>
-      <height>45</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/assets/units/warcraft/chaosorc/icon.png&quot; width=&quot;45&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-    </property>
-   </widget>
-   <widget class="QWidget" name="next_gen_units_list_" native="true">
-    <property name="geometry">
-     <rect>
-      <x>0</x>
-      <y>240</y>
-      <width>180</width>
-      <height>45</height>
-     </rect>
-    </property>
-    <layout class="QHBoxLayout" name="next_gen_units_layout_">
-     <property name="spacing">
-      <number>0</number>
-     </property>
-     <property name="leftMargin">
-      <number>0</number>
-     </property>
-     <property name="topMargin">
-      <number>0</number>
-     </property>
-     <property name="rightMargin">
-      <number>0</number>
-     </property>
-     <property name="bottomMargin">
-      <number>0</number>
-     </property>
-    </layout>
-   </widget>
-   <widget class="QLabel" name="arrow_down_2_">
-    <property name="geometry">
-     <rect>
-      <x>80</x>
-      <y>180</y>
-      <width>31</width>
-      <height>61</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/assets/common/strelka.png&quot; width=&quot;25&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-    </property>
-   </widget>
-   <widget class="QWidget" name="prev_gen_units_list_" native="true">
-    <property name="geometry">
-     <rect>
-      <x>0</x>
-      <y>40</y>
-      <width>180</width>
-      <height>45</height>
-     </rect>
-    </property>
-    <layout class="QHBoxLayout" name="prev_gen_units_layout">
-     <property name="spacing">
-      <number>0</number>
-     </property>
-     <property name="leftMargin">
-      <number>0</number>
-     </property>
-     <property name="topMargin">
-      <number>0</number>
-     </property>
-     <property name="rightMargin">
-      <number>0</number>
-     </property>
-     <property name="bottomMargin">
-      <number>0</number>
-     </property>
-    </layout>
-   </widget>
-  </widget>
-  <zorder>divider_</zorder>
-  <zorder>chosen_race_text_</zorder>
-  <zorder>chosen_race_image_</zorder>
-  <zorder>available_races_text_</zorder>
-  <zorder>available_races_list_</zorder>
-  <zorder>title_</zorder>
-  <zorder>chosen_units_label_</zorder>
-  <zorder>available_units_list_</zorder>
-  <zorder>chosen_units_grid_</zorder>
-  <zorder>description_scroll_widget_</zorder>
-  <zorder>back_button</zorder>
-  <zorder>available_units_text_</zorder>
-  <zorder>available_money_text_</zorder>
-  <zorder>apply</zorder>
-  <zorder>unit_spec_widget_</zorder>
- </widget>
- <customwidgets>
-  <customwidget>
-   <class>Scene</class>
-   <extends>QWidget</extends>
-   <header>gui/scene.h</header>
-   <container>1</container>
-  </customwidget>
-  <customwidget>
-   <class>UnitIcon</class>
-   <extends>QLabel</extends>
-   <header>gui/uniticon.h</header>
-   <slots>
-    <signal>clicked()</signal>
-    <signal>doubleclicked()</signal>
-    <signal>hovered()</signal>
-    <signal>unhovered()</signal>
-   </slots>
-  </customwidget>
-  <customwidget>
-   <class>RaceIcon</class>
-   <extends>QLabel</extends>
-   <header>gui/raceicon.h</header>
-  </customwidget>
- </customwidgets>
- <resources/>
- <connections/>
-</ui>

+ 0 - 72
include/gui/uniticon.h

@@ -1,72 +0,0 @@
-#ifndef UNITICON_H
-#define UNITICON_H
-
-#include "units/Unit.h"
-
-#include <QObject>
-#include <QWidget>
-#include <QLabel>
-#include <QImage>
-#include <QPixmap>
-#include <QPainter>
-#include <QTime>
-
-class UnitIcon : public QLabel {
-Q_OBJECT
-
-public:
-    explicit UnitIcon(QWidget* parent = 0, int width = 64, int height = 64);
-    ~UnitIcon();
-
-    void setUnitIcon(QString racename, QString unitname);
-    void setUnitIcon(QImage icon);
-    void resize(int w, int h);
-    void unsetUnitIcon();
-
-    Unit* getUnit();
-    void setUnit(Unit* unit);
-
-    void deactivate();
-    void activate();
-
-    void setState(int state);
-
-protected:
-    void mousePressEvent(QMouseEvent* event);
-    void enterEvent(QEvent* event);
-    void leaveEvent(QEvent* event);
-
-
-signals:
-    void clicked(UnitIcon*);
-    void doubleclicked(UnitIcon*);
-    void hovered(UnitIcon*);
-    void unhovered(UnitIcon*);
-
-private:
-    void drawIcon();
-
-    int width_;
-    int height_;
-
-    int state_; // 0 = not initialized;
-                // 1 = default;
-                // 2 = hover;
-                // 3 = active;
-
-    QPixmap pixmap_;
-    QImage active_border_;
-    QImage hover_border_;
-    QImage default_border_;
-    QImage icon_;
-
-    QTime previous_click_time_;
-
-    QImage result_;
-
-    Unit* unit_;
-};
-
-
-
-#endif // UNITICON_H

+ 1 - 1
include/hotseatgame/GameManager.h

@@ -1,5 +1,5 @@
 #include <vector>
-#include <UnitsQueue.h>
+#include <hotseatgame/UnitsQueue.h>
 #include <PlayerManager.h>
 
 

+ 0 - 0
include/UnitsQueue.h → include/hotseatgame/UnitsQueue.h


文件差異過大導致無法顯示
+ 1066 - 757
include/hotseatgame/gui/HotSeatGame.ui


+ 0 - 0
include/gui/PlayerVsPlayerIntro.h → include/hotseatgame/gui/PlayerVsPlayerIntro.h


+ 0 - 0
include/gui/PlayerVsPlayerIntro.ui → include/hotseatgame/gui/PlayerVsPlayerIntro.ui


+ 0 - 0
include/gui/PreBattleScene.h → include/hotseatgame/gui/PreBattleScene.h


+ 0 - 0
include/gui/PreBattleScene.ui → include/hotseatgame/gui/PreBattleScene.ui


+ 0 - 0
include/gui/RaceIcon.h → include/hotseatgame/gui/RaceIcon.h


+ 0 - 0
include/gui/RecruitmentScene.h → include/hotseatgame/gui/RecruitmentScene.h


+ 0 - 0
include/gui/RecruitmentScene.ui → include/hotseatgame/gui/RecruitmentScene.ui


+ 0 - 0
include/gui/UnitIcon.h → include/hotseatgame/gui/UnitIcon.h


文件差異過大導致無法顯示
+ 1066 - 757
include/hotseatgame/gui/hotseatgame.ui


+ 15 - 0
res/GUI.qrc

@@ -0,0 +1,15 @@
+<RCC>
+    <qresource prefix="/">
+        <file>../assets/window/thick_opaque-background.png</file>
+        <file>../assets/window/thick_opaque-border-botleft.png</file>
+        <file>../assets/window/thick_opaque-border-botright.png</file>
+        <file>../assets/window/thick_opaque-border-bottom.png</file>
+        <file>../assets/window/thick_opaque-border-left.png</file>
+        <file>../assets/window/thick_opaque-border-right.png</file>
+        <file>../assets/window/thick_opaque-border-top.png</file>
+        <file>../assets/window/thick_opaque-border-topleft.png</file>
+        <file>../assets/window/thick_opaque-border-topright.png</file>
+        <file>../assets/fonts/viking-cyr.ttf</file>
+        <file>../assets/fonts/barocco-initial.ttf</file>
+    </qresource>
+</RCC>

+ 0 - 0
effects.qrc → res/hotseatgame/effects.qrc


+ 51 - 0
res/hotseatgame/game_ui.qrc

@@ -0,0 +1,51 @@
+<RCC>
+    <qresource prefix="/">
+        <file>../../assets/common/Scroll.png</file>
+        <file>../../assets/common/strelka.png</file>
+        <file>../../assets/common/unit_icon_active.png</file>
+        <file>../../assets/common/unit_icon_default.png</file>
+        <file>../../assets/common/unit_icon_hover.png</file>
+        <file>../../assets/pvp_intro/picture.jpg</file>
+        <file>../../assets/recruitscene/divider.png</file>
+        <file>../../assets/common/icon.ico</file>
+        <file>../../assets/common/pergam.png</file>
+        <file>../../assets/pvp_intro/pre-battle1.jpg</file>
+        <file>../../assets/window/opaque-border-botleft.png</file>
+        <file>../../assets/window/opaque-border-botright.png</file>
+        <file>../../assets/window/opaque-border-bottom.png</file>
+        <file>../../assets/window/opaque-border-left.png</file>
+        <file>../../assets/window/opaque-border-right.png</file>
+        <file>../../assets/window/opaque-border-top.png</file>
+        <file>../../assets/window/opaque-border-topleft.png</file>
+        <file>../../assets/window/opaque-border-topright.png</file>
+        <file>../../assets/hotseatpvp/scroll_red.png</file>
+        <file>../../assets/hotseatpvp/standart_effect.png</file>
+        <file>../../assets/hotseatpvp/battle_bg/CmBkCF.png</file>
+        <file>../../assets/hotseatpvp/battle_bg/CmBkCur.png</file>
+        <file>../../assets/hotseatpvp/battle_bg/CmBkDeck.png</file>
+        <file>../../assets/hotseatpvp/battle_bg/CmBkDes.png</file>
+        <file>../../assets/hotseatpvp/battle_bg/CmBkDrDd.png</file>
+        <file>../../assets/hotseatpvp/battle_bg/CmBkDrMt.png</file>
+        <file>../../assets/hotseatpvp/battle_bg/CmBkDrTr.png</file>
+        <file>../../assets/hotseatpvp/battle_bg/CmBkGrMt.png</file>
+        <file>../../assets/hotseatpvp/battle_bg/CmBkGrTr.png</file>
+        <file>../../assets/hotseatpvp/battle_bg/CmBkHG.png</file>
+        <file>../../assets/hotseatpvp/battle_bg/CmBkLava.png</file>
+        <file>../../assets/hotseatpvp/battle_bg/CmBkMag.png</file>
+        <file>../../assets/hotseatpvp/battle_bg/CmBkRgh.png</file>
+        <file>../../assets/hotseatpvp/battle_bg/CmBkRK.png</file>
+        <file>../../assets/hotseatpvp/battle_bg/CmBkSnMt.png</file>
+        <file>../../assets/hotseatpvp/battle_bg/CmBkSnTr.png</file>
+        <file>../../assets/hotseatpvp/battle_bg/CmBkSub.png</file>
+        <file>../../assets/hotseatpvp/battle_bg/CmBkSwmp.png</file>
+		<file>../../assets/window/strong_translucent-background.png</file>
+        <file>../../assets/window/strong_translucent-border_bottom.png</file>
+        <file>../../assets/window/strong_translucent-border-botleft.png</file>
+        <file>../../assets/window/strong_translucent-border-botright.png</file>
+        <file>../../assets/window/strong_translucent-border-left.png</file>
+        <file>../../assets/window/strong_translucent-border-right.png</file>
+        <file>../../assets/window/strong_translucent-border-top.png</file>
+        <file>../../assets/window/strong_translucent-border-topleft.png</file>
+        <file>../../assets/window/strong_translucent-border-topright.png</file>
+    </qresource>
+</RCC>

+ 0 - 0
spells.qrc → res/hotseatgame/spells.qrc


+ 751 - 0
res/hotseatgame/units.qrc

@@ -0,0 +1,751 @@
+<RCC>
+    <qresource prefix="/">
+        <file>../../assets/units/Archer/include/Archer.h</file>
+        <file>../../assets/units/Archer/source/Archer.cpp</file>
+        <file>../../assets/units/human/atraty-rider/baseclass.txt</file>
+        <file>../../assets/units/human/atraty-rider/descr.txt</file>
+        <file>../../assets/units/human/atraty-rider/icon.png</file>
+        <file>../../assets/units/human/atraty-rider/nextgrades.txt</file>
+        <file>../../assets/units/human/atraty-rider/prevgrades.txt</file>
+        <file>../../assets/units/human/atraty-rider/skills.txt</file>
+        <file>../../assets/units/human/atraty-rider/traits.txt</file>
+        <file>../../assets/units/human/atraty-rider/unitname.txt</file>
+        <file>../../assets/units/human/holy-spirit/baseclass.txt</file>
+        <file>../../assets/units/human/holy-spirit/descr.txt</file>
+        <file>../../assets/units/human/holy-spirit/icon.png</file>
+        <file>../../assets/units/human/holy-spirit/nextgrades.txt</file>
+        <file>../../assets/units/human/holy-spirit/prevgrades.txt</file>
+        <file>../../assets/units/human/holy-spirit/skills.txt</file>
+        <file>../../assets/units/human/holy-spirit/traits.txt</file>
+        <file>../../assets/units/human/holy-spirit/unitname.txt</file>
+        <file>../../assets/units/human/human-adept-of-subtetly/baseclass.txt</file>
+        <file>../../assets/units/human/human-adept-of-subtetly/descr.txt</file>
+        <file>../../assets/units/human/human-adept-of-subtetly/icon.png</file>
+        <file>../../assets/units/human/human-adept-of-subtetly/nextgrades.txt</file>
+        <file>../../assets/units/human/human-adept-of-subtetly/prevgrades.txt</file>
+        <file>../../assets/units/human/human-adept-of-subtetly/skills.txt</file>
+        <file>../../assets/units/human/human-adept-of-subtetly/traits.txt</file>
+        <file>../../assets/units/human/human-adept-of-subtetly/unitname.txt</file>
+        <file>../../assets/units/human/human-aerotheurger/baseclass.txt</file>
+        <file>../../assets/units/human/human-aerotheurger/descr.txt</file>
+        <file>../../assets/units/human/human-aerotheurger/icon.png</file>
+        <file>../../assets/units/human/human-aerotheurger/nextgrades.txt</file>
+        <file>../../assets/units/human/human-aerotheurger/prevgrades.txt</file>
+        <file>../../assets/units/human/human-aerotheurger/skills.txt</file>
+        <file>../../assets/units/human/human-aerotheurger/traits.txt</file>
+        <file>../../assets/units/human/human-aerotheurger/unitname.txt</file>
+        <file>../../assets/units/human/human-alchemist/baseclass.txt</file>
+        <file>../../assets/units/human/human-alchemist/descr.txt</file>
+        <file>../../assets/units/human/human-alchemist/icon.png</file>
+        <file>../../assets/units/human/human-alchemist/nextgrades.txt</file>
+        <file>../../assets/units/human/human-alchemist/prevgrades.txt</file>
+        <file>../../assets/units/human/human-alchemist/skills.txt</file>
+        <file>../../assets/units/human/human-alchemist/traits.txt</file>
+        <file>../../assets/units/human/human-alchemist/unitname.txt</file>
+        <file>../../assets/units/human/human-archer/baseclass.txt</file>
+        <file>../../assets/units/human/human-archer/descr.txt</file>
+        <file>../../assets/units/human/human-archer/icon.png</file>
+        <file>../../assets/units/human/human-archer/nextgrades.txt</file>
+        <file>../../assets/units/human/human-archer/prevgrades.txt</file>
+        <file>../../assets/units/human/human-archer/skills.txt</file>
+        <file>../../assets/units/human/human-archer/traits.txt</file>
+        <file>../../assets/units/human/human-archer/unitname.txt</file>
+        <file>../../assets/units/human/human-army-bowman/baseclass.txt</file>
+        <file>../../assets/units/human/human-army-bowman/descr.txt</file>
+        <file>../../assets/units/human/human-army-bowman/icon.png</file>
+        <file>../../assets/units/human/human-army-bowman/nextgrades.txt</file>
+        <file>../../assets/units/human/human-army-bowman/prevgrades.txt</file>
+        <file>../../assets/units/human/human-army-bowman/skills.txt</file>
+        <file>../../assets/units/human/human-army-bowman/traits.txt</file>
+        <file>../../assets/units/human/human-army-bowman/unitname.txt</file>
+        <file>../../assets/units/human/human-arsonist/baseclass.txt</file>
+        <file>../../assets/units/human/human-arsonist/descr.txt</file>
+        <file>../../assets/units/human/human-arsonist/icon.png</file>
+        <file>../../assets/units/human/human-arsonist/nextgrades.txt</file>
+        <file>../../assets/units/human/human-arsonist/prevgrades.txt</file>
+        <file>../../assets/units/human/human-arsonist/skills.txt</file>
+        <file>../../assets/units/human/human-arsonist/traits.txt</file>
+        <file>../../assets/units/human/human-arsonist/unitname.txt</file>
+        <file>../../assets/units/human/human-assassin/baseclass.txt</file>
+        <file>../../assets/units/human/human-assassin/descr.txt</file>
+        <file>../../assets/units/human/human-assassin/icon.png</file>
+        <file>../../assets/units/human/human-assassin/nextgrades.txt</file>
+        <file>../../assets/units/human/human-assassin/prevgrades.txt</file>
+        <file>../../assets/units/human/human-assassin/skills.txt</file>
+        <file>../../assets/units/human/human-assassin/traits.txt</file>
+        <file>../../assets/units/human/human-assassin/unitname.txt</file>
+        <file>../../assets/units/human/human-avenger/baseclass.txt</file>
+        <file>../../assets/units/human/human-avenger/descr.txt</file>
+        <file>../../assets/units/human/human-avenger/icon.png</file>
+        <file>../../assets/units/human/human-avenger/nextgrades.txt</file>
+        <file>../../assets/units/human/human-avenger/prevgrades.txt</file>
+        <file>../../assets/units/human/human-avenger/skills.txt</file>
+        <file>../../assets/units/human/human-avenger/traits.txt</file>
+        <file>../../assets/units/human/human-avenger/unitname.txt</file>
+        <file>../../assets/units/human/human-battle-mage/baseclass.txt</file>
+        <file>../../assets/units/human/human-battle-mage/descr.txt</file>
+        <file>../../assets/units/human/human-battle-mage/icon.png</file>
+        <file>../../assets/units/human/human-battle-mage/nextgrades.txt</file>
+        <file>../../assets/units/human/human-battle-mage/prevgrades.txt</file>
+        <file>../../assets/units/human/human-battle-mage/skills.txt</file>
+        <file>../../assets/units/human/human-battle-mage/traits.txt</file>
+        <file>../../assets/units/human/human-battle-mage/unitname.txt</file>
+        <file>../../assets/units/human/human-berserker/baseclass.txt</file>
+        <file>../../assets/units/human/human-berserker/descr.txt</file>
+        <file>../../assets/units/human/human-berserker/icon.png</file>
+        <file>../../assets/units/human/human-berserker/nextgrades.txt</file>
+        <file>../../assets/units/human/human-berserker/prevgrades.txt</file>
+        <file>../../assets/units/human/human-berserker/skills.txt</file>
+        <file>../../assets/units/human/human-berserker/traits.txt</file>
+        <file>../../assets/units/human/human-berserker/unitname.txt</file>
+        <file>../../assets/units/human/human-big-game-hunter/baseclass.txt</file>
+        <file>../../assets/units/human/human-big-game-hunter/descr.txt</file>
+        <file>../../assets/units/human/human-big-game-hunter/icon.png</file>
+        <file>../../assets/units/human/human-big-game-hunter/nextgrades.txt</file>
+        <file>../../assets/units/human/human-big-game-hunter/prevgrades.txt</file>
+        <file>../../assets/units/human/human-big-game-hunter/skills.txt</file>
+        <file>../../assets/units/human/human-big-game-hunter/traits.txt</file>
+        <file>../../assets/units/human/human-big-game-hunter/unitname.txt</file>
+        <file>../../assets/units/human/human-brigand/baseclass.txt</file>
+        <file>../../assets/units/human/human-brigand/descr.txt</file>
+        <file>../../assets/units/human/human-brigand/icon.png</file>
+        <file>../../assets/units/human/human-brigand/nextgrades.txt</file>
+        <file>../../assets/units/human/human-brigand/prevgrades.txt</file>
+        <file>../../assets/units/human/human-brigand/skills.txt</file>
+        <file>../../assets/units/human/human-brigand/traits.txt</file>
+        <file>../../assets/units/human/human-brigand/unitname.txt</file>
+        <file>../../assets/units/human/human-cataphract/baseclass.txt</file>
+        <file>../../assets/units/human/human-cataphract/descr.txt</file>
+        <file>../../assets/units/human/human-cataphract/icon.png</file>
+        <file>../../assets/units/human/human-cataphract/nextgrades.txt</file>
+        <file>../../assets/units/human/human-cataphract/prevgrades.txt</file>
+        <file>../../assets/units/human/human-cataphract/skills.txt</file>
+        <file>../../assets/units/human/human-cataphract/traits.txt</file>
+        <file>../../assets/units/human/human-cataphract/unitname.txt</file>
+        <file>../../assets/units/human/human-cavalryman/baseclass.txt</file>
+        <file>../../assets/units/human/human-cavalryman/descr.txt</file>
+        <file>../../assets/units/human/human-cavalryman/icon.png</file>
+        <file>../../assets/units/human/human-cavalryman/nextgrades.txt</file>
+        <file>../../assets/units/human/human-cavalryman/prevgrades.txt</file>
+        <file>../../assets/units/human/human-cavalryman/skills.txt</file>
+        <file>../../assets/units/human/human-cavalryman/traits.txt</file>
+        <file>../../assets/units/human/human-cavalryman/unitname.txt</file>
+        <file>../../assets/units/human/human-chastener/baseclass.txt</file>
+        <file>../../assets/units/human/human-chastener/descr.txt</file>
+        <file>../../assets/units/human/human-chastener/icon.png</file>
+        <file>../../assets/units/human/human-chastener/nextgrades.txt</file>
+        <file>../../assets/units/human/human-chastener/prevgrades.txt</file>
+        <file>../../assets/units/human/human-chastener/skills.txt</file>
+        <file>../../assets/units/human/human-chastener/traits.txt</file>
+        <file>../../assets/units/human/human-chastener/unitname.txt</file>
+        <file>../../assets/units/human/human-cleric/baseclass.txt</file>
+        <file>../../assets/units/human/human-cleric/descr.txt</file>
+        <file>../../assets/units/human/human-cleric/icon.png</file>
+        <file>../../assets/units/human/human-cleric/nextgrades.txt</file>
+        <file>../../assets/units/human/human-cleric/prevgrades.txt</file>
+        <file>../../assets/units/human/human-cleric/skills.txt</file>
+        <file>../../assets/units/human/human-cleric/traits.txt</file>
+        <file>../../assets/units/human/human-cleric/unitname.txt</file>
+        <file>../../assets/units/human/human-clinicaria/baseclass.txt</file>
+        <file>../../assets/units/human/human-clinicaria/descr.txt</file>
+        <file>../../assets/units/human/human-clinicaria/icon.png</file>
+        <file>../../assets/units/human/human-clinicaria/nextgrades.txt</file>
+        <file>../../assets/units/human/human-clinicaria/prevgrades.txt</file>
+        <file>../../assets/units/human/human-clinicaria/skills.txt</file>
+        <file>../../assets/units/human/human-clinicaria/traits.txt</file>
+        <file>../../assets/units/human/human-clinicaria/unitname.txt</file>
+        <file>../../assets/units/human/human-condottier/baseclass.txt</file>
+        <file>../../assets/units/human/human-condottier/descr.txt</file>
+        <file>../../assets/units/human/human-condottier/icon.png</file>
+        <file>../../assets/units/human/human-condottier/nextgrades.txt</file>
+        <file>../../assets/units/human/human-condottier/prevgrades.txt</file>
+        <file>../../assets/units/human/human-condottier/skills.txt</file>
+        <file>../../assets/units/human/human-condottier/traits.txt</file>
+        <file>../../assets/units/human/human-condottier/unitname.txt</file>
+        <file>../../assets/units/human/human-dancer-with-shadows/baseclass.txt</file>
+        <file>../../assets/units/human/human-dancer-with-shadows/descr.txt</file>
+        <file>../../assets/units/human/human-dancer-with-shadows/icon.png</file>
+        <file>../../assets/units/human/human-dancer-with-shadows/nextgrades.txt</file>
+        <file>../../assets/units/human/human-dancer-with-shadows/prevgrades.txt</file>
+        <file>../../assets/units/human/human-dancer-with-shadows/skills.txt</file>
+        <file>../../assets/units/human/human-dancer-with-shadows/traits.txt</file>
+        <file>../../assets/units/human/human-dancer-with-shadows/unitname.txt</file>
+        <file>../../assets/units/human/human-defender/baseclass.txt</file>
+        <file>../../assets/units/human/human-defender/descr.txt</file>
+        <file>../../assets/units/human/human-defender/icon.png</file>
+        <file>../../assets/units/human/human-defender/nextgrades.txt</file>
+        <file>../../assets/units/human/human-defender/prevgrades.txt</file>
+        <file>../../assets/units/human/human-defender/skills.txt</file>
+        <file>../../assets/units/human/human-defender/traits.txt</file>
+        <file>../../assets/units/human/human-defender/unitname.txt</file>
+        <file>../../assets/units/human/human-demolisher/baseclass.txt</file>
+        <file>../../assets/units/human/human-demolisher/descr.txt</file>
+        <file>../../assets/units/human/human-demolisher/icon.png</file>
+        <file>../../assets/units/human/human-demolisher/nextgrades.txt</file>
+        <file>../../assets/units/human/human-demolisher/prevgrades.txt</file>
+        <file>../../assets/units/human/human-demolisher/skills.txt</file>
+        <file>../../assets/units/human/human-demolisher/traits.txt</file>
+        <file>../../assets/units/human/human-demolisher/unitname.txt</file>
+        <file>../../assets/units/human/human-deserter/baseclass.txt</file>
+        <file>../../assets/units/human/human-deserter/descr.txt</file>
+        <file>../../assets/units/human/human-deserter/icon.png</file>
+        <file>../../assets/units/human/human-deserter/nextgrades.txt</file>
+        <file>../../assets/units/human/human-deserter/prevgrades.txt</file>
+        <file>../../assets/units/human/human-deserter/skills.txt</file>
+        <file>../../assets/units/human/human-deserter/traits.txt</file>
+        <file>../../assets/units/human/human-deserter/unitname.txt</file>
+        <file>../../assets/units/human/human-druid/baseclass.txt</file>
+        <file>../../assets/units/human/human-druid/descr.txt</file>
+        <file>../../assets/units/human/human-druid/icon.png</file>
+        <file>../../assets/units/human/human-druid/nextgrades.txt</file>
+        <file>../../assets/units/human/human-druid/prevgrades.txt</file>
+        <file>../../assets/units/human/human-druid/skills.txt</file>
+        <file>../../assets/units/human/human-druid/traits.txt</file>
+        <file>../../assets/units/human/human-druid/unitname.txt</file>
+        <file>../../assets/units/human/human-duelist/baseclass.txt</file>
+        <file>../../assets/units/human/human-duelist/descr.txt</file>
+        <file>../../assets/units/human/human-duelist/icon.png</file>
+        <file>../../assets/units/human/human-duelist/nextgrades.txt</file>
+        <file>../../assets/units/human/human-duelist/prevgrades.txt</file>
+        <file>../../assets/units/human/human-duelist/skills.txt</file>
+        <file>../../assets/units/human/human-duelist/traits.txt</file>
+        <file>../../assets/units/human/human-duelist/unitname.txt</file>
+        <file>../../assets/units/human/human-farstrider/baseclass.txt</file>
+        <file>../../assets/units/human/human-farstrider/descr.txt</file>
+        <file>../../assets/units/human/human-farstrider/icon.png</file>
+        <file>../../assets/units/human/human-farstrider/nextgrades.txt</file>
+        <file>../../assets/units/human/human-farstrider/prevgrades.txt</file>
+        <file>../../assets/units/human/human-farstrider/skills.txt</file>
+        <file>../../assets/units/human/human-farstrider/traits.txt</file>
+        <file>../../assets/units/human/human-farstrider/unitname.txt</file>
+        <file>../../assets/units/human/human-fencer/baseclass.txt</file>
+        <file>../../assets/units/human/human-fencer/descr.txt</file>
+        <file>../../assets/units/human/human-fencer/icon.png</file>
+        <file>../../assets/units/human/human-fencer/nextgrades.txt</file>
+        <file>../../assets/units/human/human-fencer/prevgrades.txt</file>
+        <file>../../assets/units/human/human-fencer/skills.txt</file>
+        <file>../../assets/units/human/human-fencer/traits.txt</file>
+        <file>../../assets/units/human/human-fencer/unitname.txt</file>
+        <file>../../assets/units/human/human-flayer/baseclass.txt</file>
+        <file>../../assets/units/human/human-flayer/descr.txt</file>
+        <file>../../assets/units/human/human-flayer/icon.png</file>
+        <file>../../assets/units/human/human-flayer/nextgrades.txt</file>
+        <file>../../assets/units/human/human-flayer/prevgrades.txt</file>
+        <file>../../assets/units/human/human-flayer/skills.txt</file>
+        <file>../../assets/units/human/human-flayer/traits.txt</file>
+        <file>../../assets/units/human/human-flayer/unitname.txt</file>
+        <file>../../assets/units/human/human-floromante/baseclass.txt</file>
+        <file>../../assets/units/human/human-floromante/descr.txt</file>
+        <file>../../assets/units/human/human-floromante/icon.png</file>
+        <file>../../assets/units/human/human-floromante/nextgrades.txt</file>
+        <file>../../assets/units/human/human-floromante/prevgrades.txt</file>
+        <file>../../assets/units/human/human-floromante/skills.txt</file>
+        <file>../../assets/units/human/human-floromante/traits.txt</file>
+        <file>../../assets/units/human/human-floromante/unitname.txt</file>
+        <file>../../assets/units/human/human-frost-mage/baseclass.txt</file>
+        <file>../../assets/units/human/human-frost-mage/descr.txt</file>
+        <file>../../assets/units/human/human-frost-mage/icon.png</file>
+        <file>../../assets/units/human/human-frost-mage/nextgrades.txt</file>
+        <file>../../assets/units/human/human-frost-mage/prevgrades.txt</file>
+        <file>../../assets/units/human/human-frost-mage/skills.txt</file>
+        <file>../../assets/units/human/human-frost-mage/traits.txt</file>
+        <file>../../assets/units/human/human-frost-mage/unitname.txt</file>
+        <file>../../assets/units/human/human-guardian/baseclass.txt</file>
+        <file>../../assets/units/human/human-guardian/descr.txt</file>
+        <file>../../assets/units/human/human-guardian/icon.png</file>
+        <file>../../assets/units/human/human-guardian/nextgrades.txt</file>
+        <file>../../assets/units/human/human-guardian/prevgrades.txt</file>
+        <file>../../assets/units/human/human-guardian/skills.txt</file>
+        <file>../../assets/units/human/human-guardian/traits.txt</file>
+        <file>../../assets/units/human/human-guardian/unitname.txt</file>
+        <file>../../assets/units/human/human-healer/baseclass.txt</file>
+        <file>../../assets/units/human/human-healer/descr.txt</file>
+        <file>../../assets/units/human/human-healer/icon.png</file>
+        <file>../../assets/units/human/human-healer/nextgrades.txt</file>
+        <file>../../assets/units/human/human-healer/prevgrades.txt</file>
+        <file>../../assets/units/human/human-healer/skills.txt</file>
+        <file>../../assets/units/human/human-healer/traits.txt</file>
+        <file>../../assets/units/human/human-healer/unitname.txt</file>
+        <file>../../assets/units/human/human-hoplite/baseclass.txt</file>
+        <file>../../assets/units/human/human-hoplite/descr.txt</file>
+        <file>../../assets/units/human/human-hoplite/icon.png</file>
+        <file>../../assets/units/human/human-hoplite/nextgrades.txt</file>
+        <file>../../assets/units/human/human-hoplite/prevgrades.txt</file>
+        <file>../../assets/units/human/human-hoplite/skills.txt</file>
+        <file>../../assets/units/human/human-hoplite/traits.txt</file>
+        <file>../../assets/units/human/human-hoplite/unitname.txt</file>
+        <file>../../assets/units/human/human-hunter/baseclass.txt</file>
+        <file>../../assets/units/human/human-hunter/descr.txt</file>
+        <file>../../assets/units/human/human-hunter/icon.png</file>
+        <file>../../assets/units/human/human-hunter/nextgrades.txt</file>
+        <file>../../assets/units/human/human-hunter/prevgrades.txt</file>
+        <file>../../assets/units/human/human-hunter/skills.txt</file>
+        <file>../../assets/units/human/human-hunter/traits.txt</file>
+        <file>../../assets/units/human/human-hunter/unitname.txt</file>
+        <file>../../assets/units/human/human-hydromante/baseclass.txt</file>
+        <file>../../assets/units/human/human-hydromante/descr.txt</file>
+        <file>../../assets/units/human/human-hydromante/icon.png</file>
+        <file>../../assets/units/human/human-hydromante/nextgrades.txt</file>
+        <file>../../assets/units/human/human-hydromante/prevgrades.txt</file>
+        <file>../../assets/units/human/human-hydromante/skills.txt</file>
+        <file>../../assets/units/human/human-hydromante/traits.txt</file>
+        <file>../../assets/units/human/human-hydromante/unitname.txt</file>
+        <file>../../assets/units/human/human-illusionist/baseclass.txt</file>
+        <file>../../assets/units/human/human-illusionist/descr.txt</file>
+        <file>../../assets/units/human/human-illusionist/icon.png</file>
+        <file>../../assets/units/human/human-illusionist/nextgrades.txt</file>
+        <file>../../assets/units/human/human-illusionist/prevgrades.txt</file>
+        <file>../../assets/units/human/human-illusionist/skills.txt</file>
+        <file>../../assets/units/human/human-illusionist/traits.txt</file>
+        <file>../../assets/units/human/human-illusionist/unitname.txt</file>
+        <file>../../assets/units/human/human-lightning-mage/baseclass.txt</file>
+        <file>../../assets/units/human/human-lightning-mage/descr.txt</file>
+        <file>../../assets/units/human/human-lightning-mage/icon.png</file>
+        <file>../../assets/units/human/human-lightning-mage/nextgrades.txt</file>
+        <file>../../assets/units/human/human-lightning-mage/prevgrades.txt</file>
+        <file>../../assets/units/human/human-lightning-mage/skills.txt</file>
+        <file>../../assets/units/human/human-lightning-mage/traits.txt</file>
+        <file>../../assets/units/human/human-lightning-mage/unitname.txt</file>
+        <file>../../assets/units/human/human-liquidator/baseclass.txt</file>
+        <file>../../assets/units/human/human-liquidator/descr.txt</file>
+        <file>../../assets/units/human/human-liquidator/icon.png</file>
+        <file>../../assets/units/human/human-liquidator/nextgrades.txt</file>
+        <file>../../assets/units/human/human-liquidator/prevgrades.txt</file>
+        <file>../../assets/units/human/human-liquidator/skills.txt</file>
+        <file>../../assets/units/human/human-liquidator/traits.txt</file>
+        <file>../../assets/units/human/human-liquidator/unitname.txt</file>
+        <file>../../assets/units/human/human-mage/baseclass.txt</file>
+        <file>../../assets/units/human/human-mage/descr.txt</file>
+        <file>../../assets/units/human/human-mage/icon.png</file>
+        <file>../../assets/units/human/human-mage/nextgrades.txt</file>
+        <file>../../assets/units/human/human-mage/prevgrades.txt</file>
+        <file>../../assets/units/human/human-mage/skills.txt</file>
+        <file>../../assets/units/human/human-mage/traits.txt</file>
+        <file>../../assets/units/human/human-mage/unitname.txt</file>
+        <file>../../assets/units/human/human-magus-mage/baseclass.txt</file>
+        <file>../../assets/units/human/human-magus-mage/descr.txt</file>
+        <file>../../assets/units/human/human-magus-mage/icon.png</file>
+        <file>../../assets/units/human/human-magus-mage/nextgrades.txt</file>
+        <file>../../assets/units/human/human-magus-mage/prevgrades.txt</file>
+        <file>../../assets/units/human/human-magus-mage/skills.txt</file>
+        <file>../../assets/units/human/human-magus-mage/traits.txt</file>
+        <file>../../assets/units/human/human-magus-mage/unitname.txt</file>
+        <file>../../assets/units/human/human-marauder/baseclass.txt</file>
+        <file>../../assets/units/human/human-marauder/descr.txt</file>
+        <file>../../assets/units/human/human-marauder/icon.png</file>
+        <file>../../assets/units/human/human-marauder/nextgrades.txt</file>
+        <file>../../assets/units/human/human-marauder/prevgrades.txt</file>
+        <file>../../assets/units/human/human-marauder/skills.txt</file>
+        <file>../../assets/units/human/human-marauder/traits.txt</file>
+        <file>../../assets/units/human/human-marauder/unitname.txt</file>
+        <file>../../assets/units/human/human-marksman/baseclass.txt</file>
+        <file>../../assets/units/human/human-marksman/descr.txt</file>
+        <file>../../assets/units/human/human-marksman/icon.png</file>
+        <file>../../assets/units/human/human-marksman/nextgrades.txt</file>
+        <file>../../assets/units/human/human-marksman/prevgrades.txt</file>
+        <file>../../assets/units/human/human-marksman/skills.txt</file>
+        <file>../../assets/units/human/human-marksman/traits.txt</file>
+        <file>../../assets/units/human/human-marksman/unitname.txt</file>
+        <file>../../assets/units/human/human-master-of-subtetly/baseclass.txt</file>
+        <file>../../assets/units/human/human-master-of-subtetly/descr.txt</file>
+        <file>../../assets/units/human/human-master-of-subtetly/icon.png</file>
+        <file>../../assets/units/human/human-master-of-subtetly/nextgrades.txt</file>
+        <file>../../assets/units/human/human-master-of-subtetly/prevgrades.txt</file>
+        <file>../../assets/units/human/human-master-of-subtetly/skills.txt</file>
+        <file>../../assets/units/human/human-master-of-subtetly/traits.txt</file>
+        <file>../../assets/units/human/human-master-of-subtetly/unitname.txt</file>
+        <file>../../assets/units/human/human-mistweaver/baseclass.txt</file>
+        <file>../../assets/units/human/human-mistweaver/descr.txt</file>
+        <file>../../assets/units/human/human-mistweaver/icon.png</file>
+        <file>../../assets/units/human/human-mistweaver/nextgrades.txt</file>
+        <file>../../assets/units/human/human-mistweaver/prevgrades.txt</file>
+        <file>../../assets/units/human/human-mistweaver/skills.txt</file>
+        <file>../../assets/units/human/human-mistweaver/traits.txt</file>
+        <file>../../assets/units/human/human-mistweaver/unitname.txt</file>
+        <file>../../assets/units/human/human-monk/baseclass.txt</file>
+        <file>../../assets/units/human/human-monk/descr.txt</file>
+        <file>../../assets/units/human/human-monk/icon.png</file>
+        <file>../../assets/units/human/human-monk/nextgrades.txt</file>
+        <file>../../assets/units/human/human-monk/prevgrades.txt</file>
+        <file>../../assets/units/human/human-monk/skills.txt</file>
+        <file>../../assets/units/human/human-monk/traits.txt</file>
+        <file>../../assets/units/human/human-monk/unitname.txt</file>
+        <file>../../assets/units/human/human-mystic/baseclass.txt</file>
+        <file>../../assets/units/human/human-mystic/descr.txt</file>
+        <file>../../assets/units/human/human-mystic/icon.png</file>
+        <file>../../assets/units/human/human-mystic/nextgrades.txt</file>
+        <file>../../assets/units/human/human-mystic/prevgrades.txt</file>
+        <file>../../assets/units/human/human-mystic/skills.txt</file>
+        <file>../../assets/units/human/human-mystic/traits.txt</file>
+        <file>../../assets/units/human/human-mystic/unitname.txt</file>
+        <file>../../assets/units/human/human-outlaw/baseclass.txt</file>
+        <file>../../assets/units/human/human-outlaw/descr.txt</file>
+        <file>../../assets/units/human/human-outlaw/icon.png</file>
+        <file>../../assets/units/human/human-outlaw/nextgrades.txt</file>
+        <file>../../assets/units/human/human-outlaw/prevgrades.txt</file>
+        <file>../../assets/units/human/human-outlaw/skills.txt</file>
+        <file>../../assets/units/human/human-outlaw/traits.txt</file>
+        <file>../../assets/units/human/human-outlaw/unitname.txt</file>
+        <file>../../assets/units/human/human-paladin/baseclass.txt</file>
+        <file>../../assets/units/human/human-paladin/descr.txt</file>
+        <file>../../assets/units/human/human-paladin/icon.png</file>
+        <file>../../assets/units/human/human-paladin/nextgrades.txt</file>
+        <file>../../assets/units/human/human-paladin/prevgrades.txt</file>
+        <file>../../assets/units/human/human-paladin/skills.txt</file>
+        <file>../../assets/units/human/human-paladin/traits.txt</file>
+        <file>../../assets/units/human/human-paladin/unitname.txt</file>
+        <file>../../assets/units/human/human-pathfinder/baseclass.txt</file>
+        <file>../../assets/units/human/human-pathfinder/descr.txt</file>
+        <file>../../assets/units/human/human-pathfinder/icon.png</file>
+        <file>../../assets/units/human/human-pathfinder/nextgrades.txt</file>
+        <file>../../assets/units/human/human-pathfinder/prevgrades.txt</file>
+        <file>../../assets/units/human/human-pathfinder/skills.txt</file>
+        <file>../../assets/units/human/human-pathfinder/traits.txt</file>
+        <file>../../assets/units/human/human-pathfinder/unitname.txt</file>
+        <file>../../assets/units/human/human-pikeman/baseclass.txt</file>
+        <file>../../assets/units/human/human-pikeman/descr.txt</file>
+        <file>../../assets/units/human/human-pikeman/icon.png</file>
+        <file>../../assets/units/human/human-pikeman/nextgrades.txt</file>
+        <file>../../assets/units/human/human-pikeman/prevgrades.txt</file>
+        <file>../../assets/units/human/human-pikeman/skills.txt</file>
+        <file>../../assets/units/human/human-pikeman/traits.txt</file>
+        <file>../../assets/units/human/human-pikeman/unitname.txt</file>
+        <file>../../assets/units/human/human-poisoner/baseclass.txt</file>
+        <file>../../assets/units/human/human-poisoner/descr.txt</file>
+        <file>../../assets/units/human/human-poisoner/icon.png</file>
+        <file>../../assets/units/human/human-poisoner/nextgrades.txt</file>
+        <file>../../assets/units/human/human-poisoner/prevgrades.txt</file>
+        <file>../../assets/units/human/human-poisoner/skills.txt</file>
+        <file>../../assets/units/human/human-poisoner/traits.txt</file>
+        <file>../../assets/units/human/human-poisoner/unitname.txt</file>
+        <file>../../assets/units/human/human-priest/baseclass.txt</file>
+        <file>../../assets/units/human/human-priest/descr.txt</file>
+        <file>../../assets/units/human/human-priest/icon.png</file>
+        <file>../../assets/units/human/human-priest/nextgrades.txt</file>
+        <file>../../assets/units/human/human-priest/prevgrades.txt</file>
+        <file>../../assets/units/human/human-priest/skills.txt</file>
+        <file>../../assets/units/human/human-priest/traits.txt</file>
+        <file>../../assets/units/human/human-priest/unitname.txt</file>
+        <file>../../assets/units/human/human-psyonic/baseclass.txt</file>
+        <file>../../assets/units/human/human-psyonic/descr.txt</file>
+        <file>../../assets/units/human/human-psyonic/icon.png</file>
+        <file>../../assets/units/human/human-psyonic/nextgrades.txt</file>
+        <file>../../assets/units/human/human-psyonic/prevgrades.txt</file>
+        <file>../../assets/units/human/human-psyonic/skills.txt</file>
+        <file>../../assets/units/human/human-psyonic/traits.txt</file>
+        <file>../../assets/units/human/human-psyonic/unitname.txt</file>
+        <file>../../assets/units/human/human-pyromante/baseclass.txt</file>
+        <file>../../assets/units/human/human-pyromante/descr.txt</file>
+        <file>../../assets/units/human/human-pyromante/icon.png</file>
+        <file>../../assets/units/human/human-pyromante/nextgrades.txt</file>
+        <file>../../assets/units/human/human-pyromante/prevgrades.txt</file>
+        <file>../../assets/units/human/human-pyromante/skills.txt</file>
+        <file>../../assets/units/human/human-pyromante/traits.txt</file>
+        <file>../../assets/units/human/human-pyromante/unitname.txt</file>
+        <file>../../assets/units/human/human-recruit/baseclass.txt</file>
+        <file>../../assets/units/human/human-recruit/descr.txt</file>
+        <file>../../assets/units/human/human-recruit/icon.png</file>
+        <file>../../assets/units/human/human-recruit/nextgrades.txt</file>
+        <file>../../assets/units/human/human-recruit/prevgrades.txt</file>
+        <file>../../assets/units/human/human-recruit/skills.txt</file>
+        <file>../../assets/units/human/human-recruit/traits.txt</file>
+        <file>../../assets/units/human/human-recruit/unitname.txt</file>
+        <file>../../assets/units/human/human-rider/baseclass.txt</file>
+        <file>../../assets/units/human/human-rider/descr.txt</file>
+        <file>../../assets/units/human/human-rider/icon.png</file>
+        <file>../../assets/units/human/human-rider/nextgrades.txt</file>
+        <file>../../assets/units/human/human-rider/prevgrades.txt</file>
+        <file>../../assets/units/human/human-rider/skills.txt</file>
+        <file>../../assets/units/human/human-rider/traits.txt</file>
+        <file>../../assets/units/human/human-rider/unitname.txt</file>
+        <file>../../assets/units/human/human-rogue/baseclass.txt</file>
+        <file>../../assets/units/human/human-rogue/descr.txt</file>
+        <file>../../assets/units/human/human-rogue/icon.png</file>
+        <file>../../assets/units/human/human-rogue/nextgrades.txt</file>
+        <file>../../assets/units/human/human-rogue/prevgrades.txt</file>
+        <file>../../assets/units/human/human-rogue/skills.txt</file>
+        <file>../../assets/units/human/human-rogue/traits.txt</file>
+        <file>../../assets/units/human/human-rogue/unitname.txt</file>
+        <file>../../assets/units/human/human-royal-archer/baseclass.txt</file>
+        <file>../../assets/units/human/human-royal-archer/descr.txt</file>
+        <file>../../assets/units/human/human-royal-archer/icon.png</file>
+        <file>../../assets/units/human/human-royal-archer/nextgrades.txt</file>
+        <file>../../assets/units/human/human-royal-archer/prevgrades.txt</file>
+        <file>../../assets/units/human/human-royal-archer/skills.txt</file>
+        <file>../../assets/units/human/human-royal-archer/traits.txt</file>
+        <file>../../assets/units/human/human-royal-archer/unitname.txt</file>
+        <file>../../assets/units/human/human-saboteur/baseclass.txt</file>
+        <file>../../assets/units/human/human-saboteur/descr.txt</file>
+        <file>../../assets/units/human/human-saboteur/icon.png</file>
+        <file>../../assets/units/human/human-saboteur/nextgrades.txt</file>
+        <file>../../assets/units/human/human-saboteur/prevgrades.txt</file>
+        <file>../../assets/units/human/human-saboteur/skills.txt</file>
+        <file>../../assets/units/human/human-saboteur/traits.txt</file>
+        <file>../../assets/units/human/human-saboteur/unitname.txt</file>
+        <file>../../assets/units/human/human-sharpshooter/baseclass.txt</file>
+        <file>../../assets/units/human/human-sharpshooter/descr.txt</file>
+        <file>../../assets/units/human/human-sharpshooter/icon.png</file>
+        <file>../../assets/units/human/human-sharpshooter/nextgrades.txt</file>
+        <file>../../assets/units/human/human-sharpshooter/prevgrades.txt</file>
+        <file>../../assets/units/human/human-sharpshooter/skills.txt</file>
+        <file>../../assets/units/human/human-sharpshooter/traits.txt</file>
+        <file>../../assets/units/human/human-sharpshooter/unitname.txt</file>
+        <file>../../assets/units/human/human-skirmisher/baseclass.txt</file>
+        <file>../../assets/units/human/human-skirmisher/descr.txt</file>
+        <file>../../assets/units/human/human-skirmisher/icon.png</file>
+        <file>../../assets/units/human/human-skirmisher/nextgrades.txt</file>
+        <file>../../assets/units/human/human-skirmisher/prevgrades.txt</file>
+        <file>../../assets/units/human/human-skirmisher/skills.txt</file>
+        <file>../../assets/units/human/human-skirmisher/traits.txt</file>
+        <file>../../assets/units/human/human-skirmisher/unitname.txt</file>
+        <file>../../assets/units/human/human-slayer/baseclass.txt</file>
+        <file>../../assets/units/human/human-slayer/descr.txt</file>
+        <file>../../assets/units/human/human-slayer/icon.png</file>
+        <file>../../assets/units/human/human-slayer/nextgrades.txt</file>
+        <file>../../assets/units/human/human-slayer/prevgrades.txt</file>
+        <file>../../assets/units/human/human-slayer/skills.txt</file>
+        <file>../../assets/units/human/human-slayer/traits.txt</file>
+        <file>../../assets/units/human/human-slayer/unitname.txt</file>
+        <file>../../assets/units/human/human-spearman/baseclass.txt</file>
+        <file>../../assets/units/human/human-spearman/descr.txt</file>
+        <file>../../assets/units/human/human-spearman/icon.png</file>
+        <file>../../assets/units/human/human-spearman/nextgrades.txt</file>
+        <file>../../assets/units/human/human-spearman/prevgrades.txt</file>
+        <file>../../assets/units/human/human-spearman/skills.txt</file>
+        <file>../../assets/units/human/human-spearman/traits.txt</file>
+        <file>../../assets/units/human/human-spearman/unitname.txt</file>
+        <file>../../assets/units/human/human-support-mage/baseclass.txt</file>
+        <file>../../assets/units/human/human-support-mage/descr.txt</file>
+        <file>../../assets/units/human/human-support-mage/icon.png</file>
+        <file>../../assets/units/human/human-support-mage/nextgrades.txt</file>
+        <file>../../assets/units/human/human-support-mage/prevgrades.txt</file>
+        <file>../../assets/units/human/human-support-mage/skills.txt</file>
+        <file>../../assets/units/human/human-support-mage/traits.txt</file>
+        <file>../../assets/units/human/human-support-mage/unitname.txt</file>
+        <file>../../assets/units/human/human-suppressor/baseclass.txt</file>
+        <file>../../assets/units/human/human-suppressor/descr.txt</file>
+        <file>../../assets/units/human/human-suppressor/icon.png</file>
+        <file>../../assets/units/human/human-suppressor/nextgrades.txt</file>
+        <file>../../assets/units/human/human-suppressor/prevgrades.txt</file>
+        <file>../../assets/units/human/human-suppressor/skills.txt</file>
+        <file>../../assets/units/human/human-suppressor/traits.txt</file>
+        <file>../../assets/units/human/human-suppressor/unitname.txt</file>
+        <file>../../assets/units/human/human-thug/baseclass.txt</file>
+        <file>../../assets/units/human/human-thug/descr.txt</file>
+        <file>../../assets/units/human/human-thug/icon.png</file>
+        <file>../../assets/units/human/human-thug/nextgrades.txt</file>
+        <file>../../assets/units/human/human-thug/prevgrades.txt</file>
+        <file>../../assets/units/human/human-thug/skills.txt</file>
+        <file>../../assets/units/human/human-thug/traits.txt</file>
+        <file>../../assets/units/human/human-thug/unitname.txt</file>
+        <file>../../assets/units/human/human-tormentor/baseclass.txt</file>
+        <file>../../assets/units/human/human-tormentor/descr.txt</file>
+        <file>../../assets/units/human/human-tormentor/icon.png</file>
+        <file>../../assets/units/human/human-tormentor/nextgrades.txt</file>
+        <file>../../assets/units/human/human-tormentor/prevgrades.txt</file>
+        <file>../../assets/units/human/human-tormentor/skills.txt</file>
+        <file>../../assets/units/human/human-tormentor/traits.txt</file>
+        <file>../../assets/units/human/human-tormentor/unitname.txt</file>
+        <file>../../assets/units/human/human-trailblazer/baseclass.txt</file>
+        <file>../../assets/units/human/human-trailblazer/descr.txt</file>
+        <file>../../assets/units/human/human-trailblazer/icon.png</file>
+        <file>../../assets/units/human/human-trailblazer/nextgrades.txt</file>
+        <file>../../assets/units/human/human-trailblazer/prevgrades.txt</file>
+        <file>../../assets/units/human/human-trailblazer/skills.txt</file>
+        <file>../../assets/units/human/human-trailblazer/traits.txt</file>
+        <file>../../assets/units/human/human-trailblazer/unitname.txt</file>
+        <file>../../assets/units/human/human-trapper/baseclass.txt</file>
+        <file>../../assets/units/human/human-trapper/descr.txt</file>
+        <file>../../assets/units/human/human-trapper/icon.png</file>
+        <file>../../assets/units/human/human-trapper/nextgrades.txt</file>
+        <file>../../assets/units/human/human-trapper/prevgrades.txt</file>
+        <file>../../assets/units/human/human-trapper/skills.txt</file>
+        <file>../../assets/units/human/human-trapper/traits.txt</file>
+        <file>../../assets/units/human/human-trapper/unitname.txt</file>
+        <file>../../assets/units/human/human-voodoo/baseclass.txt</file>
+        <file>../../assets/units/human/human-voodoo/descr.txt</file>
+        <file>../../assets/units/human/human-voodoo/icon.png</file>
+        <file>../../assets/units/human/human-voodoo/nextgrades.txt</file>
+        <file>../../assets/units/human/human-voodoo/prevgrades.txt</file>
+        <file>../../assets/units/human/human-voodoo/skills.txt</file>
+        <file>../../assets/units/human/human-voodoo/traits.txt</file>
+        <file>../../assets/units/human/human-voodoo/unitname.txt</file>
+        <file>../../assets/units/human/human-warden/baseclass.txt</file>
+        <file>../../assets/units/human/human-warden/descr.txt</file>
+        <file>../../assets/units/human/human-warden/icon.png</file>
+        <file>../../assets/units/human/human-warden/nextgrades.txt</file>
+        <file>../../assets/units/human/human-warden/prevgrades.txt</file>
+        <file>../../assets/units/human/human-warden/skills.txt</file>
+        <file>../../assets/units/human/human-warden/traits.txt</file>
+        <file>../../assets/units/human/human-warden/unitname.txt</file>
+        <file>../../assets/units/human/human-warlord/baseclass.txt</file>
+        <file>../../assets/units/human/human-warlord/descr.txt</file>
+        <file>../../assets/units/human/human-warlord/icon.png</file>
+        <file>../../assets/units/human/human-warlord/nextgrades.txt</file>
+        <file>../../assets/units/human/human-warlord/prevgrades.txt</file>
+        <file>../../assets/units/human/human-warlord/skills.txt</file>
+        <file>../../assets/units/human/human-warlord/traits.txt</file>
+        <file>../../assets/units/human/human-warlord/unitname.txt</file>
+        <file>../../assets/units/human/human-warrior/baseclass.txt</file>
+        <file>../../assets/units/human/human-warrior/descr.txt</file>
+        <file>../../assets/units/human/human-warrior/icon.png</file>
+        <file>../../assets/units/human/human-warrior/nextgrades.txt</file>
+        <file>../../assets/units/human/human-warrior/prevgrades.txt</file>
+        <file>../../assets/units/human/human-warrior/skills.txt</file>
+        <file>../../assets/units/human/human-warrior/traits.txt</file>
+        <file>../../assets/units/human/human-warrior/unitname.txt</file>
+        <file>../../assets/units/human/human-wild-rider/baseclass.txt</file>
+        <file>../../assets/units/human/human-wild-rider/descr.txt</file>
+        <file>../../assets/units/human/human-wild-rider/icon.png</file>
+        <file>../../assets/units/human/human-wild-rider/nextgrades.txt</file>
+        <file>../../assets/units/human/human-wild-rider/prevgrades.txt</file>
+        <file>../../assets/units/human/human-wild-rider/skills.txt</file>
+        <file>../../assets/units/human/human-wild-rider/traits.txt</file>
+        <file>../../assets/units/human/human-wild-rider/unitname.txt</file>
+        <file>../../assets/units/human/human-witch-doctor/baseclass.txt</file>
+        <file>../../assets/units/human/human-witch-doctor/descr.txt</file>
+        <file>../../assets/units/human/human-witch-doctor/icon.png</file>
+        <file>../../assets/units/human/human-witch-doctor/nextgrades.txt</file>
+        <file>../../assets/units/human/human-witch-doctor/prevgrades.txt</file>
+        <file>../../assets/units/human/human-witch-doctor/skills.txt</file>
+        <file>../../assets/units/human/human-witch-doctor/traits.txt</file>
+        <file>../../assets/units/human/human-witch-doctor/unitname.txt</file>
+        <file>../../assets/units/human/treant/baseclass.txt</file>
+        <file>../../assets/units/human/treant/descr.txt</file>
+        <file>../../assets/units/human/treant/icon.png</file>
+        <file>../../assets/units/human/treant/nextgrades.txt</file>
+        <file>../../assets/units/human/treant/prevgrades.txt</file>
+        <file>../../assets/units/human/treant/skills.txt</file>
+        <file>../../assets/units/human/treant/traits.txt</file>
+        <file>../../assets/units/human/treant/unitname.txt</file>
+        <file>../../assets/units/human/descr.txt</file>
+        <file>../../assets/units/human/icon.png</file>
+        <file>../../assets/units/human/racename.txt</file>
+        <file>../../assets/units/human/second-icon.png</file>
+        <file>../../assets/units/human/units.txt</file>
+        <file>../../assets/units/Mage/include/Mage.h</file>
+        <file>../../assets/units/Mage/source/Mage.cpp</file>
+        <file>../../assets/units/norace/nounit/icon.png</file>
+        <file>../../assets/units/Rider/include/Rider.h</file>
+        <file>../../assets/units/Rider/source/Rider.cpp</file>
+        <file>../../assets/units/Rogue/include/Rogue.h</file>
+        <file>../../assets/units/Rogue/source/Rogue.cpp</file>
+        <file>../../assets/units/undead/undead-archer/baseclass.txt</file>
+        <file>../../assets/units/undead/undead-archer/descr.txt</file>
+        <file>../../assets/units/undead/undead-archer/icon.png</file>
+        <file>../../assets/units/undead/undead-archer/nextgrades.txt</file>
+        <file>../../assets/units/undead/undead-archer/prevgrades.txt</file>
+        <file>../../assets/units/undead/undead-archer/skills.txt</file>
+        <file>../../assets/units/undead/undead-archer/traits.txt</file>
+        <file>../../assets/units/undead/undead-archer/unitname.txt</file>
+        <file>../../assets/units/undead/undead-mage/baseclass.txt</file>
+        <file>../../assets/units/undead/undead-mage/descr.txt</file>
+        <file>../../assets/units/undead/undead-mage/icon.png</file>
+        <file>../../assets/units/undead/undead-mage/nextgrades.txt</file>
+        <file>../../assets/units/undead/undead-mage/prevgrades.txt</file>
+        <file>../../assets/units/undead/undead-mage/skills.txt</file>
+        <file>../../assets/units/undead/undead-mage/traits.txt</file>
+        <file>../../assets/units/undead/undead-mage/unitname.txt</file>
+        <file>../../assets/units/undead/undead-rider/baseclass.txt</file>
+        <file>../../assets/units/undead/undead-rider/descr.txt</file>
+        <file>../../assets/units/undead/undead-rider/icon.png</file>
+        <file>../../assets/units/undead/undead-rider/nextgrades.txt</file>
+        <file>../../assets/units/undead/undead-rider/prevgrades.txt</file>
+        <file>../../assets/units/undead/undead-rider/skills.txt</file>
+        <file>../../assets/units/undead/undead-rider/traits.txt</file>
+        <file>../../assets/units/undead/undead-rider/unitname.txt</file>
+        <file>../../assets/units/undead/undead-rogue/baseclass.txt</file>
+        <file>../../assets/units/undead/undead-rogue/descr.txt</file>
+        <file>../../assets/units/undead/undead-rogue/icon.png</file>
+        <file>../../assets/units/undead/undead-rogue/nextgrades.txt</file>
+        <file>../../assets/units/undead/undead-rogue/prevgrades.txt</file>
+        <file>../../assets/units/undead/undead-rogue/skills.txt</file>
+        <file>../../assets/units/undead/undead-rogue/traits.txt</file>
+        <file>../../assets/units/undead/undead-rogue/unitname.txt</file>
+        <file>../../assets/units/undead/undead-warrior/baseclass.txt</file>
+        <file>../../assets/units/undead/undead-warrior/descr.txt</file>
+        <file>../../assets/units/undead/undead-warrior/icon.png</file>
+        <file>../../assets/units/undead/undead-warrior/nextgrades.txt</file>
+        <file>../../assets/units/undead/undead-warrior/prevgrades.txt</file>
+        <file>../../assets/units/undead/undead-warrior/skills.txt</file>
+        <file>../../assets/units/undead/undead-warrior/traits.txt</file>
+        <file>../../assets/units/undead/undead-warrior/unitname.txt</file>
+        <file>../../assets/units/undead/descr.txt</file>
+        <file>../../assets/units/undead/icon.png</file>
+        <file>../../assets/units/undead/racename.txt</file>
+        <file>../../assets/units/undead/units.txt</file>
+        <file>../../assets/units/warcraft/blademaster/baseclass.txt</file>
+        <file>../../assets/units/warcraft/blademaster/descr.txt</file>
+        <file>../../assets/units/warcraft/blademaster/icon.png</file>
+        <file>../../assets/units/warcraft/blademaster/nextgrades.txt</file>
+        <file>../../assets/units/warcraft/blademaster/prevgrades.txt</file>
+        <file>../../assets/units/warcraft/blademaster/skills.txt</file>
+        <file>../../assets/units/warcraft/blademaster/traits.txt</file>
+        <file>../../assets/units/warcraft/blademaster/unitname.txt</file>
+        <file>../../assets/units/warcraft/chaosorc/baseclass.txt</file>
+        <file>../../assets/units/warcraft/chaosorc/descr.txt</file>
+        <file>../../assets/units/warcraft/chaosorc/icon.png</file>
+        <file>../../assets/units/warcraft/chaosorc/nextgrades.txt</file>
+        <file>../../assets/units/warcraft/chaosorc/prevgrades.txt</file>
+        <file>../../assets/units/warcraft/chaosorc/skills.txt</file>
+        <file>../../assets/units/warcraft/chaosorc/traits.txt</file>
+        <file>../../assets/units/warcraft/chaosorc/unitname.txt</file>
+        <file>../../assets/units/warcraft/nagasummoner/baseclass.txt</file>
+        <file>../../assets/units/warcraft/nagasummoner/descr.txt</file>
+        <file>../../assets/units/warcraft/nagasummoner/icon.png</file>
+        <file>../../assets/units/warcraft/nagasummoner/nextgrades.txt</file>
+        <file>../../assets/units/warcraft/nagasummoner/prevgrades.txt</file>
+        <file>../../assets/units/warcraft/nagasummoner/skills.txt</file>
+        <file>../../assets/units/warcraft/nagasummoner/traits.txt</file>
+        <file>../../assets/units/warcraft/nagasummoner/unitname.txt</file>
+        <file>../../assets/units/warcraft/necromancer/baseclass.txt</file>
+        <file>../../assets/units/warcraft/necromancer/descr.txt</file>
+        <file>../../assets/units/warcraft/necromancer/icon.png</file>
+        <file>../../assets/units/warcraft/necromancer/nextgrades.txt</file>
+        <file>../../assets/units/warcraft/necromancer/prevgrades.txt</file>
+        <file>../../assets/units/warcraft/necromancer/skills.txt</file>
+        <file>../../assets/units/warcraft/necromancer/traits.txt</file>
+        <file>../../assets/units/warcraft/necromancer/unitname.txt</file>
+        <file>../../assets/units/warcraft/ogremagi/baseclass.txt</file>
+        <file>../../assets/units/warcraft/ogremagi/descr.txt</file>
+        <file>../../assets/units/warcraft/ogremagi/icon.png</file>
+        <file>../../assets/units/warcraft/ogremagi/nextgrades.txt</file>
+        <file>../../assets/units/warcraft/ogremagi/prevgrades.txt</file>
+        <file>../../assets/units/warcraft/ogremagi/skills.txt</file>
+        <file>../../assets/units/warcraft/ogremagi/traits.txt</file>
+        <file>../../assets/units/warcraft/ogremagi/unitname.txt</file>
+        <file>../../assets/units/warcraft/rogue/baseclass.txt</file>
+        <file>../../assets/units/warcraft/rogue/descr.txt</file>
+        <file>../../assets/units/warcraft/rogue/icon.png</file>
+        <file>../../assets/units/warcraft/rogue/nextgrades.txt</file>
+        <file>../../assets/units/warcraft/rogue/prevgrades.txt</file>
+        <file>../../assets/units/warcraft/rogue/skills.txt</file>
+        <file>../../assets/units/warcraft/rogue/traits.txt</file>
+        <file>../../assets/units/warcraft/rogue/unitname.txt</file>
+        <file>../../assets/units/warcraft/wargraider/baseclass.txt</file>
+        <file>../../assets/units/warcraft/wargraider/descr.txt</file>
+        <file>../../assets/units/warcraft/wargraider/icon.png</file>
+        <file>../../assets/units/warcraft/wargraider/nextgrades.txt</file>
+        <file>../../assets/units/warcraft/wargraider/prevgrades.txt</file>
+        <file>../../assets/units/warcraft/wargraider/skills.txt</file>
+        <file>../../assets/units/warcraft/wargraider/traits.txt</file>
+        <file>../../assets/units/warcraft/wargraider/unitname.txt</file>
+        <file>../../assets/units/warcraft/wyvern/baseclass.txt</file>
+        <file>../../assets/units/warcraft/wyvern/descr.txt</file>
+        <file>../../assets/units/warcraft/wyvern/icon.png</file>
+        <file>../../assets/units/warcraft/wyvern/nextgrades.txt</file>
+        <file>../../assets/units/warcraft/wyvern/prevgrades.txt</file>
+        <file>../../assets/units/warcraft/wyvern/skills.txt</file>
+        <file>../../assets/units/warcraft/wyvern/traits.txt</file>
+        <file>../../assets/units/warcraft/wyvern/unitname.txt</file>
+        <file>../../assets/units/warcraft/descr.txt</file>
+        <file>../../assets/units/warcraft/icon.png</file>
+        <file>../../assets/units/warcraft/raceicon.png</file>
+        <file>../../assets/units/warcraft/racename.txt</file>
+        <file>../../assets/units/warcraft/units.txt</file>
+        <file>../../assets/units/Warrior/include/Warrior.h</file>
+        <file>../../assets/units/Warrior/source/Warrior.cpp</file>
+        <file>../../assets/units/races.txt</file>
+        <file>../../assets/units/README.md</file>
+    </qresource>
+</RCC>

+ 19 - 25
source/gui/GUI.cpp

@@ -1,11 +1,10 @@
 #include <gui/GUI.h>
 #include <ui_gui.h>
-#include <gui/RecruitmentScene.h>
 #include <QDebug>
 
 GUI::GUI(QWidget *parent) :
     QMainWindow(parent, Qt::Window | Qt::FramelessWindowHint),
-    ui_(new Ui::GUI), dx_(0), dy_(0)
+    ui_(new Ui::GUI), dx_(-100000), dy_(-100000)
 {
     ui_->setupUi(this);
     setWindowTitle("Супер-мега-клёвая-игрушка-название-которой-мы-ещё-не-придумали");
@@ -24,19 +23,9 @@ QWidget* GUI::mainContentScene() {
 void GUI::mouseMoveEvent( QMouseEvent* e ) {
     if( e->buttons() | Qt::LeftButton ) {
         QPoint pt=mapFromGlobal(QCursor::pos());
-        QWidget* child=childAt(pt);
 
-        if (child == 0) {
-            setGeometry(pos().x() + (pt.x() - dx_ ), pos().y() + (pt.y() - dy_ ), width(), height());
-            return;
-        }
-        QString cname = child->metaObject()->className();
-        if (cname != "QPushButton" && cname != "QComboBox" && cname != "RaceIcon" && cname != "UnitIcon"){ // отключаем перетягивание при наведение на активные элементы
+        if (dx_ != -100000 && dy_ != -100000)
             setGeometry(pos().x() + ( pt.x() - dx_ ), pos().y() + ( pt.y() - dy_ ), width(), height());
-        } else {
-            dx_ = pt.x();
-            dy_ = pt.y();
-        }
     }
 }
 
@@ -45,24 +34,29 @@ void GUI::mousePressEvent( QMouseEvent* e ) {
         QPoint pt = mapFromGlobal(QCursor::pos());
         QWidget* child=childAt(pt);
 
-        if (child == 0)
+        if (child == 0) {
+            dx_ = -100000;
+            dy_ = -100000;
             return;
+        }
 
-        QString cname = child->metaObject()->className();
-        if (cname == "QPushButton" || cname == "QComboBox" || cname == "QLabel")
-           return;
-
-        dx_ = pt.x();
-        dy_ = pt.y();
-        setCursor( Qt::OpenHandCursor );
+        QString cname = child->objectName();
+        if (cname == "window_top_border_" || cname == "window_bottom_border_"
+                || cname == "window_topleft_border_" || cname == "window_topright_border_"
+                || cname == "window_right_border_" || cname == "window_left_border_"
+                || cname == "window_botright_border_" || cname == "window_botleft_border_") {
+            dx_ = pt.x();
+            dy_ = pt.y();
+        } else {
+            dx_ = -100000;
+            dy_ = -100000;
+        }
     }
 }
 
 void GUI::mouseReleaseEvent( QMouseEvent* e ) {
     if( e->button() == Qt::LeftButton ) {
-        QPoint pt=mapFromGlobal(QCursor::pos());
-        setCursor( Qt::ArrowCursor );
-        dx_ = pt.x();
-        dy_ = pt.y();
+        dx_ = -100000;
+        dy_ = -100000;
     }
 }

+ 9 - 3
source/gui/GuiSceneManager.cpp

@@ -1,12 +1,15 @@
 #include "gui/GuiSceneManager.h"
 #include "gui/GUI.h"
 #include "gui/MainMenu.h"
-#include "gui/PlayerVsPlayerIntro.h"
-#include "gui/PreBattleScene.h"
-#include "hotseatgame\gui\HotSeatGame.h"
+
+#include "hotseatgame/gui/RecruitmentScene.h"
+#include "hotseatgame/gui/PlayerVsPlayerIntro.h"
+#include "hotseatgame/gui/PreBattleScene.h"
+#include "hotseatgame/gui/HotSeatGame.h"
 
 #include <QResource>
 #include <QApplication>
+#include <QFontDatabase>
 
 GuiSceneManager::GuiSceneManager(QObject *parent) : QObject(parent) {
     gui_ = new GUI();
@@ -18,6 +21,9 @@ GuiSceneManager::GuiSceneManager(QObject *parent) : QObject(parent) {
     QResource::registerResource(QApplication::applicationDirPath() + "/res/spell_data.gtr");
     QResource::registerResource(QApplication::applicationDirPath() + "/res/effect_data.gtr");
 
+    QFontDatabase::addApplicationFont(":/../assets/fonts/barocco-initial.ttf");
+    QFontDatabase::addApplicationFont(":/../assets/fonts/viking-cyr.ttf");
+
     registerScene("main_menu", new MainMenu(gui_->mainContentScene()));
     registerScene("pvp_intro", new PlayerVsPlayerIntro(gui_->mainContentScene()));
     registerScene("recruit_army", new RecruitmentScene(gui_->mainContentScene()));

+ 14 - 0
source/gui/LoadingForm.cpp

@@ -0,0 +1,14 @@
+#include "gui/LoadingForm.h"
+#include "ui_LoadingForm.h"
+
+LoadingForm::LoadingForm(QWidget *parent) :
+    Scene(parent),
+    ui(new Ui::LoadingForm)
+{
+    ui->setupUi(this);
+}
+
+LoadingForm::~LoadingForm()
+{
+    delete ui;
+}

+ 19 - 25
source/gui/gui.cpp

@@ -1,11 +1,10 @@
 #include <gui/GUI.h>
 #include <ui_gui.h>
-#include <gui/RecruitmentScene.h>
 #include <QDebug>
 
 GUI::GUI(QWidget *parent) :
     QMainWindow(parent, Qt::Window | Qt::FramelessWindowHint),
-    ui_(new Ui::GUI), dx_(0), dy_(0)
+    ui_(new Ui::GUI), dx_(-100000), dy_(-100000)
 {
     ui_->setupUi(this);
     setWindowTitle("Супер-мега-клёвая-игрушка-название-которой-мы-ещё-не-придумали");
@@ -24,19 +23,9 @@ QWidget* GUI::mainContentScene() {
 void GUI::mouseMoveEvent( QMouseEvent* e ) {
     if( e->buttons() | Qt::LeftButton ) {
         QPoint pt=mapFromGlobal(QCursor::pos());
-        QWidget* child=childAt(pt);
 
-        if (child == 0) {
-            setGeometry(pos().x() + (pt.x() - dx_ ), pos().y() + (pt.y() - dy_ ), width(), height());
-            return;
-        }
-        QString cname = child->metaObject()->className();
-        if (cname != "QPushButton" && cname != "QComboBox" && cname != "RaceIcon" && cname != "UnitIcon"){ // отключаем перетягивание при наведение на активные элементы
+        if (dx_ != -100000 && dy_ != -100000)
             setGeometry(pos().x() + ( pt.x() - dx_ ), pos().y() + ( pt.y() - dy_ ), width(), height());
-        } else {
-            dx_ = pt.x();
-            dy_ = pt.y();
-        }
     }
 }
 
@@ -45,24 +34,29 @@ void GUI::mousePressEvent( QMouseEvent* e ) {
         QPoint pt = mapFromGlobal(QCursor::pos());
         QWidget* child=childAt(pt);
 
-        if (child == 0)
+        if (child == 0) {
+            dx_ = -100000;
+            dy_ = -100000;
             return;
+        }
 
-        QString cname = child->metaObject()->className();
-        if (cname == "QPushButton" || cname == "QComboBox" || cname == "QLabel")
-           return;
-
-        dx_ = pt.x();
-        dy_ = pt.y();
-        setCursor( Qt::OpenHandCursor );
+        QString cname = child->objectName();
+        if (cname == "window_top_border_" || cname == "window_bottom_border_"
+                || cname == "window_topleft_border_" || cname == "window_topright_border_"
+                || cname == "window_right_border_" || cname == "window_left_border_"
+                || cname == "window_botright_border_" || cname == "window_botleft_border_") {
+            dx_ = pt.x();
+            dy_ = pt.y();
+        } else {
+            dx_ = -100000;
+            dy_ = -100000;
+        }
     }
 }
 
 void GUI::mouseReleaseEvent( QMouseEvent* e ) {
     if( e->button() == Qt::LeftButton ) {
-        QPoint pt=mapFromGlobal(QCursor::pos());
-        setCursor( Qt::ArrowCursor );
-        dx_ = pt.x();
-        dy_ = pt.y();
+        dx_ = -100000;
+        dy_ = -100000;
     }
 }

+ 9 - 3
source/gui/guiscenemanager.cpp

@@ -1,12 +1,15 @@
 #include "gui/GuiSceneManager.h"
 #include "gui/GUI.h"
 #include "gui/MainMenu.h"
-#include "gui/PlayerVsPlayerIntro.h"
-#include "gui/PreBattleScene.h"
-#include "hotseatgame\gui\HotSeatGame.h"
+
+#include "hotseatgame/gui/RecruitmentScene.h"
+#include "hotseatgame/gui/PlayerVsPlayerIntro.h"
+#include "hotseatgame/gui/PreBattleScene.h"
+#include "hotseatgame/gui/HotSeatGame.h"
 
 #include <QResource>
 #include <QApplication>
+#include <QFontDatabase>
 
 GuiSceneManager::GuiSceneManager(QObject *parent) : QObject(parent) {
     gui_ = new GUI();
@@ -18,6 +21,9 @@ GuiSceneManager::GuiSceneManager(QObject *parent) : QObject(parent) {
     QResource::registerResource(QApplication::applicationDirPath() + "/res/spell_data.gtr");
     QResource::registerResource(QApplication::applicationDirPath() + "/res/effect_data.gtr");
 
+    QFontDatabase::addApplicationFont(":/../assets/fonts/barocco-initial.ttf");
+    QFontDatabase::addApplicationFont(":/../assets/fonts/viking-cyr.ttf");
+
     registerScene("main_menu", new MainMenu(gui_->mainContentScene()));
     registerScene("pvp_intro", new PlayerVsPlayerIntro(gui_->mainContentScene()));
     registerScene("recruit_army", new RecruitmentScene(gui_->mainContentScene()));

+ 0 - 30
source/gui/playervsplayerintro.cpp

@@ -1,30 +0,0 @@
-#include "gui/PlayerVsPlayerIntro.h"
-#include "gui/GuiSceneManager.h"
-#include "PlayerManager.h"
-#include "gui/Scene.h"
-
-#include "ui_playervsplayerintro.h"
-
-PlayerVsPlayerIntro::PlayerVsPlayerIntro(QWidget *parent) :
-    Scene(parent),
-    ui(new Ui::PlayerVsPlayerIntro)
-{
-    ui->setupUi(this);
-}
-
-PlayerVsPlayerIntro::~PlayerVsPlayerIntro()
-{
-    delete ui;
-}
-
-void PlayerVsPlayerIntro::on_back_to_menu_clicked()
-{
-    GuiSceneManager::getInstance().changeScene("main_menu");
-}
-
-void PlayerVsPlayerIntro::on_go_next_clicked()
-{
-    PlayerManager::getInstance().setPlayersNum(2);
-    /// TODO - Check if money input correct
-    GuiSceneManager::getInstance().changeScene("recruit_army", "0|" + ui->money_->text());
-}

+ 0 - 74
source/gui/prebattlescene.cpp

@@ -1,74 +0,0 @@
-
-#include "gui/PreBattleScene.h"
-
-#include "Player.h"
-#include "PlayerManager.h"
-#include "Race.h"
-#include "RaceManager.h"
-
-#include "gui/RaceIcon.h"
-#include "gui/UnitIcon.h"
-#include "gui/GuiSceneManager.h"
-#include "ui_prebattlescene.h"
-
-#include <QMessageBox>
-
-PreBattleScene::PreBattleScene(QWidget *parent) :
-    Scene(parent),
-    ui(new Ui::PreBattleScene)
-{
-    ui->setupUi(this);
-}
-
-PreBattleScene::~PreBattleScene()
-{
-    delete ui;
-}
-
-void PreBattleScene::init() {
-    Player *player = PlayerManager::getInstance().getPlayer(0);
-
-    ui->race_icon_1_->setRaceIcon(player->getRace()->getRaceIcon());
-    ui->race_icon_1_->resize(128, 128);
-    ui->race_icon_1_->setState(5);
-
-    units_player_1_.resize(10);
-    auto units = player->getUnitsAsVector();
-    for (unsigned i = 0; i < 10; i++) {
-        units_player_1_[i] = new UnitIcon();
-        if (i < units.size())
-            units_player_1_[i]->setUnitIcon(units[i]->getUnitIcon());
-        else
-            units_player_1_[i]->setUnitIcon("norace", "nounit");
-        units_player_1_[i]->setState(5);
-        ui->units_player_1_layout_->addWidget(units_player_1_[i], i / 5, i % 5);
-    }
-
-    player = PlayerManager::getInstance().getPlayer(1);
-    ui->race_icon_2_->setRaceIcon(player->getRace()->getRaceIcon());
-    ui->race_icon_2_->resize(128, 128);
-    ui->race_icon_2_->setState(5);
-
-    units_player_2_.resize(10);
-    units = player->getUnitsAsVector();
-    for (unsigned i = 0; i < 10; i++) {
-        units_player_2_[i] = new UnitIcon();
-        if (i < units.size())
-            units_player_2_[i]->setUnitIcon(units[i]->getUnitIcon());
-        else
-            units_player_2_[i]->setUnitIcon("norace", "nounit");
-        units_player_2_[i]->setState(5);
-        ui->units_player_2_layout_->addWidget(units_player_2_[i], i / 5, i % 5);
-    }
-
-    setWindowState(Qt::WindowFullScreen);
-}
-
-void PreBattleScene::on_start_battle_clicked()
-{
-    //QMessageBox msg(QMessageBox::Information, "Нельзя сотворить здесь!", "Не ну имейте терпение! Всё будет! Но попозже... :)");
-    //msg.exec();
-
-    //GuiSceneManager::getInstance().changeScene("main_menu");
-    GuiSceneManager::getInstance().showDetachedScene("hotseatgame");
-}

+ 0 - 138
source/gui/raceicon.cpp

@@ -1,138 +0,0 @@
-#include <gui/RaceIcon.h>
-#include <QDebug>
-#include <QTime>
-#include <QEvent>
-#include <QMouseEvent>
-
-RaceIcon::RaceIcon(QWidget* parent, int width, int height)
-    : QLabel(parent)
-{
-    state_ = 0;
-    width_ = width;
-    height_ = height;
-
-    setAttribute(Qt::WA_Hover, false);
-    installEventFilter(this);
-
-    default_border_.load(":/assets/common/unit_icon_default.png");
-    hover_border_.load(":/assets/common/unit_icon_hover.png");
-    active_border_.load(":/assets/common/unit_icon_active.png");
-    icon_.load(":/assets/units/norace/nounit/icon.png");
-
-    drawIcon();
-}
-
-RaceIcon::~RaceIcon()
-{}
-
-void RaceIcon::drawIcon() {
-    QPixmap combined(width_, height_);
-    combined.fill(Qt::black);
-
-    if (state_ >= 5) {
-        combined.fill(QColor(0, 0, 0, 0));
-    }
-
-    QPainter p(&combined);
-
-    if (state_ != 0) {
-        p.drawImage(QPoint(4, 4), icon_.scaled(width_ - 8, height_ - 8, Qt::KeepAspectRatio));
-    }
-
-    if (state_ == 0 || state_ == 1)
-        p.drawImage(QPoint(0, 0), default_border_.scaled(width_, height_, Qt::KeepAspectRatio));
-
-    if (state_ == 2)
-        p.drawImage(QPoint(0, 0), hover_border_.scaled(width_, height_, Qt::KeepAspectRatio));
-
-    if (state_ == 3)
-        p.drawImage(QPoint(0, 0), active_border_.scaled(width_, height_, Qt::KeepAspectRatio));
-
-    p.end();
-    setPixmap(combined);
-}
-
-Race* RaceIcon::getRace() {
-    return race_;
-}
-
-void RaceIcon::setRace(Race* race) {
-    race_ = race;
-}
-
-int RaceIcon::getState() {
-    return state_;
-}
-
-void RaceIcon::setState(int state) {
-    state_ = state;
-    drawIcon();
-}
-
-void RaceIcon::setRaceIcon(QImage icon) {
-    icon_ = icon;
-    if (state_ == 0)
-        state_ = 1;
-    drawIcon();
-}
-
-
-void RaceIcon::unsetRaceIcon() {
-    state_ = 0;
-    drawIcon();
-}
-
-void RaceIcon::resize(int w, int h) {
-    width_ = w;
-    height_ = h;
-    drawIcon();
-}
-
-void RaceIcon::deactivate() {
-    if (state_ > 1)
-        state_ = 1;
-    drawIcon();
-}
-
-void RaceIcon::activate() {
-    state_ = 3;
-    drawIcon();
-}
-
-void RaceIcon::mousePressEvent(QMouseEvent* event)
-{
-    if (state_ == 0 || state_ >= 5)
-        return;
-
-    activate();
-
-    QTime current_time = QTime::currentTime();
-    if (current_time.msecsSinceStartOfDay() - previous_click_time_.msecsSinceStartOfDay() < 350) {
-        deactivate();
-        emit doubleclicked(this);
-    } else {
-        previous_click_time_ = current_time;
-        emit clicked(this);
-    }
-}
-
-void RaceIcon::enterEvent(QEvent* event)
-{
-
-    if (state_ == 0 || state_ == 3 || state_ >= 5)
-        return;
-
-    state_ = 2;
-    drawIcon();
-    emit hovered(this);
-}
-
-void RaceIcon::leaveEvent(QEvent* event)
-{
-    if (state_ == 0 || state_ == 3 || state_ >= 5)
-        return;
-
-    state_ = 1;
-    drawIcon();
-    emit unhovered(this);
-}

+ 0 - 429
source/gui/recruitmentscene.cpp

@@ -1,429 +0,0 @@
-#include <gui/RecruitmentScene.h>
-#include <gui/UnitIcon.h>
-#include <gui/RaceIcon.h>
-#include <gui/GuiSceneManager.h>
-#include <gui/Scene.h>
-#include <PlayerManager.h>
-#include <Player.h>
-#include <RaceManager.h>
-#include <Race.h>
-
-#include <ui_recruitmentscene.h>
-#include <QHBoxLayout>
-#include <QString>
-#include <QStringList>
-
-#include <cassert>
-#include <vector>
-
-RecruitmentScene::RecruitmentScene(QWidget *parent)
-    : Scene(parent)
-    , ui(new Ui::RecruitmentScene)
-{
-    ui->setupUi(this);
-
-    for (int i = 0; i < 5; i++) {
-        available_units_icons_[i] = new UnitIcon();
-        ui->available_units_layout_->addWidget(available_units_icons_[i], 0, i);
-
-        connect(available_units_icons_[i], SIGNAL(clicked(UnitIcon*)), this, SLOT(onUnitIconClicked(UnitIcon*)));
-        connect(available_units_icons_[i], SIGNAL(hovered(UnitIcon*)), this, SLOT(onUnitIconHovered(UnitIcon*)));
-        connect(available_units_icons_[i], SIGNAL(unhovered(UnitIcon*)), this, SLOT(onUnitIconUnHovered(UnitIcon*)));
-        connect(available_units_icons_[i], SIGNAL(doubleclicked(UnitIcon*)), this, SLOT(onUnitIconDoubleClicked(UnitIcon*)));
-    }
-
-    for (int i = 0; i < 3; i++) {
-        available_races_icons_[i] = new RaceIcon();
-        ui->availableRacesLayout_->addWidget(available_races_icons_[i], i);
-
-        connect(available_races_icons_[i], SIGNAL(clicked(RaceIcon*)), this, SLOT(onRaceIconClicked(RaceIcon*)));
-        connect(available_races_icons_[i], SIGNAL(hovered(RaceIcon*)), this, SLOT(onRaceIconHovered(RaceIcon*)));
-        connect(available_races_icons_[i], SIGNAL(unhovered(RaceIcon*)), this, SLOT(onRaceIconUnHovered(RaceIcon*)));
-        connect(available_races_icons_[i], SIGNAL(doubleclicked(RaceIcon*)), this, SLOT(onRaceIconDoubleClicked(RaceIcon*)));
-
-    }
-
-    for (int i = 0; i < 10; i++) {
-        chosen_units_icons_[i] = new UnitIcon();
-        ui->chosen_units_layout_->addWidget(chosen_units_icons_[i], i / 5, i % 5);
-
-        connect(chosen_units_icons_[i], SIGNAL(clicked(UnitIcon*)), this, SLOT(onChosenUnitIconClicked(UnitIcon*)));
-        connect(chosen_units_icons_[i], SIGNAL(hovered(UnitIcon*)), this, SLOT(onChosenUnitIconHovered(UnitIcon*)));
-        connect(chosen_units_icons_[i], SIGNAL(unhovered(UnitIcon*)), this, SLOT(onChosenUnitIconUnHovered(UnitIcon*)));
-        connect(chosen_units_icons_[i], SIGNAL(doubleclicked(UnitIcon*)), this, SLOT(onChosenUnitIconDoubleClicked(UnitIcon*)));
-    }
-
-    for (int i = 0; i < 4; i++) {
-        prev_grade_units_icons[i] = new UnitIcon();
-        ui->prev_gen_units_layout->addWidget(prev_grade_units_icons[i]);
-
-        connect(prev_grade_units_icons[i], SIGNAL(clicked(UnitIcon*)), this, SLOT(onGradeUnitIconClicked(UnitIcon*)));
-        connect(prev_grade_units_icons[i], SIGNAL(hovered(UnitIcon*)), this, SLOT(onGradeUnitIconHovered(UnitIcon*)));
-        connect(prev_grade_units_icons[i], SIGNAL(unhovered(UnitIcon*)), this, SLOT(onGradeUnitIconUnHovered(UnitIcon*)));
-        connect(prev_grade_units_icons[i], SIGNAL(doubleclicked(UnitIcon*)), this, SLOT(onGradeUnitIconDoubleClicked(UnitIcon*)));
-
-
-        next_grade_units_icons[i] = new UnitIcon();
-        ui->next_gen_units_layout_->addWidget(next_grade_units_icons[i]);
-
-        connect(next_grade_units_icons[i], SIGNAL(clicked(UnitIcon*)), this, SLOT(onGradeUnitIconClicked(UnitIcon*)));
-        connect(next_grade_units_icons[i], SIGNAL(hovered(UnitIcon*)), this, SLOT(onGradeUnitIconHovered(UnitIcon*)));
-        connect(next_grade_units_icons[i], SIGNAL(unhovered(UnitIcon*)), this, SLOT(onGradeUnitIconUnHovered(UnitIcon*)));
-        connect(next_grade_units_icons[i], SIGNAL(doubleclicked(UnitIcon*)), this, SLOT(onGradeUnitIconDoubleClicked(UnitIcon*)));
-    }
-
-    ui->description_icon_->resize(45, 45);
-    ui->description_text_->setWordWrap(true);
-
-    ui->current_spec_unit_->resize(45, 45);
-    ui->current_spec_unit_->setUnitIcon("warcraft", "chaosorc");
-}
-
-RecruitmentScene::~RecruitmentScene()
-{
-}
-
-void RecruitmentScene::parseArgs(QString args) {
-    QStringList list = args.split("|");
-    assert(list.size() >= 2);
-
-    current_player_id_ = list[0].toInt();
-    current_player_ = PlayerManager::getInstance().getPlayer(current_player_id_);
-    available_money_ = list[1].toInt();
-
-    init();
-}
-
-void RecruitmentScene::init() {
-    current_money_ = available_money_;
-    initAvailableRaces();
-    initAvailableUnits();
-    showChosenUnits();
-
-    ui->title_->setText(
-        "<html><head/><body><p align=\"center\"><span style=\"font-size:24pt; color:#b12d2d;\">Набор юнитов - "
-        + current_player_->getPlayerName()
-        + "</span></p></body></html>"
-    );
-
-    setDescriptionIcon(current_player_->getRace()->getRaceIcon());
-    setDescriptionText(current_player_->getRace()->getRaceDescr());
-    setDescriptionTitle(current_player_->getRace()->getRaceName());
-
-    ui->chosen_race_image_->resize(100, 100);
-    ui->chosen_race_image_->setRaceIcon(current_player_->getRace()->getRaceIcon());
-    ui->chosen_race_image_->setState(5);
-
-    ui->unit_spec_widget_->hide();
-
-    setMoney(current_money_);
-}
-
-void RecruitmentScene::initAvailableRaces() {
-    auto races = RaceManager::getInstance().getAvailableRacesList();
-
-    int race_id = 0;
-    for (QString race_name : races) {
-        assert(race_id < 3);
-        auto race = RaceManager::getInstance().getRace(race_name);
-        available_races_icons_[race_id]->setRaceIcon(race->getRaceIcon());
-        available_races_icons_[race_id]->setRace(race);
-        race_id++;
-    }
-
-
-}
-
-void RecruitmentScene::initAvailableUnits() {
-    int unit_id = 0;
-    for (int i = 0; i < 5; i++) {
-        available_units_icons_[i]->setUnitIcon("norace", "nounit");
-        available_units_icons_[i]->setState(5);
-    }
-
-    for (Unit* unit : current_player_->getRace()->getAllUnitsList()) {
-        available_units_icons_[unit_id]->setState(0);
-        available_units_icons_[unit_id]->setUnitIcon(unit->getUnitIcon());
-        available_units_icons_[unit_id]->setUnit(unit);
-        unit_id++;
-    }
-}
-
-void RecruitmentScene::showChosenUnits() {
-    for (int i = 0; i < 10; i++) {
-        chosen_units_icons_[i]->unsetUnitIcon();
-        chosen_units_icons_[i]->setUnit(nullptr);
-    }
-
-    int counter = 0;
-    for (auto unit : current_player_->getUnits()) {
-        chosen_units_icons_[counter]->setUnitIcon(unit->getUnitIcon());
-        chosen_units_icons_[counter]->setUnit(unit);
-        counter++;
-    }
-}
-
-void RecruitmentScene::updateSpecsWidget(Unit *unit) {
-    auto next_specs = unit->getUpgradeSpecs();
-    auto prev_specs = unit->getParentSpecs();
-
-    ui->prev_gen_units_list_->resize(45 * prev_specs.size(), 45);
-    ui->next_gen_units_list_->resize(45 * next_specs.size(), 45);
-
-    ui->prev_gen_units_list_->move((180 - 45 * prev_specs.size()) / 2, 40);
-    ui->next_gen_units_list_->move((180 - 45 * next_specs.size()) / 2, 240);
-
-    for (int i = 0; i < 4; i++) {
-        prev_grade_units_icons[i]->hide();
-        next_grade_units_icons[i]->hide();
-    }
-
-    int prev_specs_num = 0;
-    for (unsigned i = 0; i < prev_specs.size(); i++) {
-        if (prev_specs[i].length() <= 2)
-            continue;
-
-        delete prev_grade_units_icons[i]->getUnit();
-
-        prev_grade_units_icons[i]->resize(45, 45);
-        prev_grade_units_icons[i]->unsetUnitIcon();
-        prev_grade_units_icons[i]->setUnit(current_player_->getRace()->createUnit(prev_specs[i]));
-        prev_grade_units_icons[i]->show();
-
-        prev_specs_num++;
-    }
-
-    if (prev_specs_num == 0) {
-        ui->spec_title_->move(0, 110);
-        ui->prev_gen_units_list_->hide();
-        ui->arrow_down_1_->hide();
-    } else {
-        ui->spec_title_->move(0, 10);
-        ui->prev_gen_units_list_->show();
-        ui->arrow_down_1_->show();
-    }
-
-    int next_specs_num = 0;
-    for (unsigned i = 0; i < next_specs.size(); i++) {
-        if (next_specs[i].length() <= 2)
-            continue;
-
-        delete next_grade_units_icons[i]->getUnit();
-
-        next_grade_units_icons[i]->resize(45, 45);
-        next_grade_units_icons[i]->unsetUnitIcon();
-        next_grade_units_icons[i]->setUnit(current_player_->getRace()->createUnit(next_specs[i]));
-        next_grade_units_icons[i]->show();
-
-        next_specs_num++;
-    }
-
-    if (next_specs_num == 0) {
-        ui->next_gen_units_list_->hide();
-        ui->arrow_down_2_->hide();
-    } else {
-        ui->next_gen_units_list_->show();
-        ui->arrow_down_2_->show();
-    }
-
-    ui->current_spec_unit_->setUnit(unit);
-    ui->current_spec_unit_->setState(5);
-}
-
-void RecruitmentScene::changeRace(Race *race) {
-    current_player_->clearUnits();
-    current_player_->setRace(race);
-    init();
-}
-
-void RecruitmentScene::setMoney(int money_) {
-   ui->available_money_text_->setText("<html><head/><body><p>"
-                                      "<span style=\"font-size:10pt; color:#ff0000;\">Ресурсы: "
-                                      + QString::number(money_) +
-                                      "</span></p></body></html>");
-}
-
-
-
-void RecruitmentScene::on_back_button_clicked()
-{
-    GuiSceneManager::getInstance().changeScene("main_menu");
-}
-
-
-
-void RecruitmentScene::setDescriptionTitle(QString title) {
-    ui->desctiption_title_->setText("<html><head/><body><p align=\"center\">"
-                                    "<span style=\" font-weight:600; font-size:16px; color:#000080;\">"
-                                    + title +
-                                    "</span></p></body></html>");
-}
-
-void RecruitmentScene::setDescriptionText(QString text) {
-    ui->description_text_->setText("<html><head/><body><p><span style=\"color:#000080;\">"
-                                   + text
-                                   + "</span></p></body></html>");
-}
-
-void RecruitmentScene::setDescriptionIcon(QImage icon) {
-    ui->description_icon_->setUnitIcon(icon);
-    ui->description_icon_->setState(0);
-}
-
-
-
-
-void RecruitmentScene::onUnitIconHovered(UnitIcon*) {
-
-}
-
-void RecruitmentScene::onUnitIconUnHovered(UnitIcon*) {
-
-}
-
-void RecruitmentScene::onUnitIconClicked(UnitIcon* icon) {
-    setDescriptionIcon(icon->getUnit()->getUnitIcon());
-    setDescriptionText(icon->getUnit()->getUnitDescr());
-    setDescriptionTitle(icon->getUnit()->getUnitName());
-
-    for (int i = 0; i < 5; i++) {
-        if (available_units_icons_[i] != icon)
-            available_units_icons_[i]->deactivate();
-    }
-
-    for (int i = 0; i < 10; i++) {
-        chosen_units_icons_[i]->deactivate();
-    }
-
-    for (int i = 0; i < 3; i++) {
-        available_races_icons_[i]->deactivate();
-    }
-
-    ui->unit_spec_widget_->hide();
-}
-
-void RecruitmentScene::onUnitIconDoubleClicked(UnitIcon* icon) {
-    if (current_player_->getUnits().size() >= 10)
-        return;
-
-    current_player_->addUnit(current_player_->getRace()->createUnit(icon->getUnit()->getUnitId()));
-    showChosenUnits();
-}
-
-
-
-void RecruitmentScene::onChosenUnitIconHovered(UnitIcon*) {}
-
-void RecruitmentScene::onChosenUnitIconUnHovered(UnitIcon*) {}
-
-void RecruitmentScene::onChosenUnitIconClicked(UnitIcon* icon) {
-    setDescriptionIcon(icon->getUnit()->getUnitIcon());
-    setDescriptionText(icon->getUnit()->getUnitDescr());
-    setDescriptionTitle(icon->getUnit()->getUnitName());
-
-    for (int i = 0; i < 5; i++) {
-        available_units_icons_[i]->deactivate();
-    }
-
-    for (int i = 0; i < 10; i++) {
-        if (chosen_units_icons_[i] != icon)
-            chosen_units_icons_[i]->deactivate();
-    }
-
-    for (int i = 0; i < 3; i++) {
-        available_races_icons_[i]->deactivate();
-    }
-
-    updateSpecsWidget(icon->getUnit());
-    ui->unit_spec_widget_->show();
-}
-
-void RecruitmentScene::onChosenUnitIconDoubleClicked(UnitIcon* icon) {
-    current_player_->deleteUnit(icon->getUnit());
-    showChosenUnits();
-    ui->unit_spec_widget_->hide();
-}
-
-
-
-void RecruitmentScene::onRaceIconHovered(RaceIcon*) {
-
-}
-
-void RecruitmentScene::onRaceIconUnHovered(RaceIcon*) {
-
-}
-
-void RecruitmentScene::onRaceIconClicked(RaceIcon* icon) {
-    setDescriptionIcon(icon->getRace()->getRaceIcon());
-    setDescriptionText(icon->getRace()->getRaceDescr());
-    setDescriptionTitle(icon->getRace()->getRaceName());
-
-    for (int i = 0; i < 5; i++) {
-        available_units_icons_[i]->deactivate();
-    }
-
-    for (int i = 0; i < 10; i++) {
-        chosen_units_icons_[i]->deactivate();
-    }
-
-    for (int i = 0; i < 3; i++) {
-        if (available_races_icons_[i] != icon)
-            available_races_icons_[i]->deactivate();
-    }
-
-    ui->unit_spec_widget_->hide();
-}
-
-void RecruitmentScene::onRaceIconDoubleClicked(RaceIcon* icon) {
-    if (icon->getRace() != current_player_->getRace())
-        changeRace(icon->getRace());
-}
-
-
-void RecruitmentScene::onGradeUnitIconHovered(UnitIcon*) {}
-
-void RecruitmentScene::onGradeUnitIconUnHovered(UnitIcon*) {}
-
-void RecruitmentScene::onGradeUnitIconClicked(UnitIcon* icon) {
-    setDescriptionIcon(icon->getUnit()->getUnitIcon());
-    setDescriptionText(icon->getUnit()->getUnitDescr());
-    setDescriptionTitle(icon->getUnit()->getUnitName());
-
-    for (int i = 0; i < 4; i++) {
-        if (prev_grade_units_icons[i] != icon)
-            prev_grade_units_icons[i]->deactivate();
-        if (next_grade_units_icons[i] != icon)
-            next_grade_units_icons[i]->deactivate();
-    }
-}
-
-void RecruitmentScene::onGradeUnitIconDoubleClicked(UnitIcon* icon) {
-    current_player_->deleteUnit(ui->current_spec_unit_->getUnit());
-
-    auto new_unit = current_player_->getRace()->createUnit(icon->getUnit()->getUnitId());
-
-    current_player_->addUnit(new_unit);
-
-    updateSpecsWidget(new_unit);
-    showChosenUnits();
-
-    for (int i = 0; i < 10; i++) {
-        if (chosen_units_icons_[i]->getUnit() == new_unit)
-            chosen_units_icons_[i]->activate();
-    }
-    current_money_ -= 100;
-    setMoney(current_money_);
-}
-
-
-void RecruitmentScene::on_apply_clicked()
-{
-    qDebug() << "Exiting recruit army scene with player_id =" << current_player_id_;
-    if (current_player_id_ == 0) {
-        qDebug() << "Changing to 1";
-        GuiSceneManager::getInstance().changeScene("recruit_army", "1|" + QString::number(available_money_));
-    } else {
-        GuiSceneManager::getInstance().changeScene("prebattle");
-    }
-}

+ 0 - 140
source/gui/uniticon.cpp

@@ -1,140 +0,0 @@
-#include <gui/UnitIcon.h>
-#include <QDebug>
-#include <QTime>
-#include <QBitmap>
-
-UnitIcon::UnitIcon(QWidget* parent, int width, int height)
-    : QLabel(parent)
-{
-    state_ = 0;
-    width_ = width;
-    height_ = height;
-    unit_ = nullptr;
-
-    setAttribute(Qt::WA_Hover, true);
-    installEventFilter(this);
-
-    default_border_.load(":/assets/common/unit_icon_default.png");
-    hover_border_.load(":/assets/common/unit_icon_hover.png");
-    active_border_.load(":/assets/common/unit_icon_active.png");
-
-    drawIcon();
-}
-
-UnitIcon::~UnitIcon()
-{
-}
-
-Unit* UnitIcon::getUnit() {
-    if (!unit_)
-        return nullptr;
-
-    return unit_;
-}
-
-void UnitIcon::setUnit(Unit* unit) {
-    unit_ = unit;
-    if (unit_ != nullptr)
-        setUnitIcon(unit_->getUnitIcon());
-    return;
-}
-
-void UnitIcon::setState(int state) {
-    state_ = state;
-}
-
-
-void UnitIcon::drawIcon() {
-    QPixmap combined(width_, height_);
-    combined.fill(QColor(253, 234, 168));
-    QPainter p(&combined);
-
-    if (state_ != 0)
-        p.drawImage(QPoint(4, 4), icon_.scaled(width_ - 8, height_ - 8, Qt::KeepAspectRatio));
-
-    if (state_ != 2 && state_ != 3)
-        p.drawImage(QPoint(0, 0), default_border_.scaled(width_, height_, Qt::KeepAspectRatio));
-
-    if (state_ == 2)
-        p.drawImage(QPoint(0, 0), hover_border_.scaled(width_, height_, Qt::KeepAspectRatio));
-
-    if (state_ == 3)
-        p.drawImage(QPoint(0, 0), active_border_.scaled(width_, height_, Qt::KeepAspectRatio));
-
-    p.end();
-
-    setPixmap(combined);
-}
-
-void UnitIcon::setUnitIcon(QString racename, QString unitname) {
-    icon_.load(":/assets/units/" + racename + "/" + unitname + "/icon.png");
-    if (state_ == 0)
-        state_ = 1;
-    drawIcon();
-}
-
-void UnitIcon::setUnitIcon(QImage icon) {
-    icon_ = icon;
-    if (state_ == 0)
-        state_ = 1;
-    drawIcon();
-}
-
-void UnitIcon::unsetUnitIcon() {
-    state_ = 0;
-    drawIcon();
-}
-
-void UnitIcon::resize(int w, int h) {
-    width_ = w;
-    height_ = h;
-    drawIcon();
-}
-
-void UnitIcon::deactivate() {
-    if (state_ > 1)
-        state_ = 1;
-    drawIcon();
-}
-
-void UnitIcon::activate() {
-    state_ = 3;
-    drawIcon();
-}
-
-void UnitIcon::mousePressEvent(QMouseEvent*)
-{
-    if (state_ == 0 || unit_ == nullptr || state_ >= 5)
-        return;
-
-    activate();
-
-    QTime current_time = QTime::currentTime();
-    if (current_time.msecsSinceStartOfDay() - previous_click_time_.msecsSinceStartOfDay() < 350) {
-        deactivate();
-        emit doubleclicked(this);
-    } else {
-        previous_click_time_ = current_time;
-        emit clicked(this);
-    }
-}
-
-void UnitIcon::enterEvent(QEvent*)
-{
-    if (state_ == 0 || state_ == 3 || unit_ == nullptr || state_ >= 5)
-        return;
-
-    state_ = 2;
-    drawIcon();
-    emit hovered(this);
-}
-
-void UnitIcon::leaveEvent(QEvent*)
-{
-    if (state_ == 0 || state_ == 3 || unit_ == nullptr || state_ >= 5)
-        return;
-
-    state_ = 1;
-    drawIcon();
-    emit unhovered(this);
-}

+ 1 - 1
source/UnitsQueue.cpp → source/hotseatgame/UnitsQueue.cpp

@@ -1,4 +1,4 @@
-#include "UnitsQueue.h"
+#include <hotseatgame/UnitsQueue.h>
 #include <vector>
 #include <string>
 

+ 1 - 1
source/gui/PlayerVsPlayerIntro.cpp → source/hotseatgame/gui/PlayerVsPlayerIntro.cpp

@@ -1,4 +1,4 @@
-#include "gui/PlayerVsPlayerIntro.h"
+#include "hotseatgame/gui/PlayerVsPlayerIntro.h"
 #include "gui/GuiSceneManager.h"
 #include "PlayerManager.h"
 #include "gui/Scene.h"

+ 3 - 3
source/gui/PreBattleScene.cpp → source/hotseatgame/gui/PreBattleScene.cpp

@@ -1,13 +1,13 @@
 
-#include "gui/PreBattleScene.h"
+#include "hotseatgame/gui/PreBattleScene.h"
 
 #include "Player.h"
 #include "PlayerManager.h"
 #include "Race.h"
 #include "RaceManager.h"
 
-#include "gui/RaceIcon.h"
-#include "gui/UnitIcon.h"
+#include "hotseatgame/gui/RaceIcon.h"
+#include "hotseatgame/gui/UnitIcon.h"
 #include "gui/GuiSceneManager.h"
 #include "ui_prebattlescene.h"
 

+ 1 - 1
source/gui/RaceIcon.cpp → source/hotseatgame/gui/RaceIcon.cpp

@@ -1,4 +1,4 @@
-#include <gui/RaceIcon.h>
+#include <hotseatgame/gui/RaceIcon.h>
 #include <QDebug>
 #include <QTime>
 #include <QEvent>

+ 3 - 3
source/gui/RecruitmentScene.cpp → source/hotseatgame/gui/RecruitmentScene.cpp

@@ -1,6 +1,6 @@
-#include <gui/RecruitmentScene.h>
-#include <gui/UnitIcon.h>
-#include <gui/RaceIcon.h>
+#include <hotseatgame/gui/RecruitmentScene.h>
+#include <hotseatgame/gui/UnitIcon.h>
+#include <hotseatgame/gui/RaceIcon.h>
 #include <gui/GuiSceneManager.h>
 #include <gui/Scene.h>
 #include <PlayerManager.h>

+ 1 - 1
source/gui/UnitIcon.cpp → source/hotseatgame/gui/UnitIcon.cpp

@@ -1,4 +1,4 @@
-#include <gui/UnitIcon.h>
+#include <hotseatgame/gui/UnitIcon.h>
 #include <QDebug>
 #include <QTime>
 #include <QBitmap>

+ 0 - 2
source/main.cpp

@@ -1,6 +1,4 @@
 #include <gui/GuiSceneManager.h>
-#include <gui/GUI.h>
-#include <gui/RecruitmentScene.h>
 
 #include <QApplication>
 #include <QDesktopWidget>

+ 0 - 751
units.qrc

@@ -1,751 +0,0 @@
-<RCC>
-    <qresource prefix="/">
-        <file>assets/units/Archer/include/Archer.h</file>
-        <file>assets/units/Archer/source/Archer.cpp</file>
-        <file>assets/units/human/atraty-rider/baseclass.txt</file>
-        <file>assets/units/human/atraty-rider/descr.txt</file>
-        <file>assets/units/human/atraty-rider/icon.png</file>
-        <file>assets/units/human/atraty-rider/nextgrades.txt</file>
-        <file>assets/units/human/atraty-rider/prevgrades.txt</file>
-        <file>assets/units/human/atraty-rider/skills.txt</file>
-        <file>assets/units/human/atraty-rider/traits.txt</file>
-        <file>assets/units/human/atraty-rider/unitname.txt</file>
-        <file>assets/units/human/holy-spirit/baseclass.txt</file>
-        <file>assets/units/human/holy-spirit/descr.txt</file>
-        <file>assets/units/human/holy-spirit/icon.png</file>
-        <file>assets/units/human/holy-spirit/nextgrades.txt</file>
-        <file>assets/units/human/holy-spirit/prevgrades.txt</file>
-        <file>assets/units/human/holy-spirit/skills.txt</file>
-        <file>assets/units/human/holy-spirit/traits.txt</file>
-        <file>assets/units/human/holy-spirit/unitname.txt</file>
-        <file>assets/units/human/human-adept-of-subtetly/baseclass.txt</file>
-        <file>assets/units/human/human-adept-of-subtetly/descr.txt</file>
-        <file>assets/units/human/human-adept-of-subtetly/icon.png</file>
-        <file>assets/units/human/human-adept-of-subtetly/nextgrades.txt</file>
-        <file>assets/units/human/human-adept-of-subtetly/prevgrades.txt</file>
-        <file>assets/units/human/human-adept-of-subtetly/skills.txt</file>
-        <file>assets/units/human/human-adept-of-subtetly/traits.txt</file>
-        <file>assets/units/human/human-adept-of-subtetly/unitname.txt</file>
-        <file>assets/units/human/human-aerotheurger/baseclass.txt</file>
-        <file>assets/units/human/human-aerotheurger/descr.txt</file>
-        <file>assets/units/human/human-aerotheurger/icon.png</file>
-        <file>assets/units/human/human-aerotheurger/nextgrades.txt</file>
-        <file>assets/units/human/human-aerotheurger/prevgrades.txt</file>
-        <file>assets/units/human/human-aerotheurger/skills.txt</file>
-        <file>assets/units/human/human-aerotheurger/traits.txt</file>
-        <file>assets/units/human/human-aerotheurger/unitname.txt</file>
-        <file>assets/units/human/human-alchemist/baseclass.txt</file>
-        <file>assets/units/human/human-alchemist/descr.txt</file>
-        <file>assets/units/human/human-alchemist/icon.png</file>
-        <file>assets/units/human/human-alchemist/nextgrades.txt</file>
-        <file>assets/units/human/human-alchemist/prevgrades.txt</file>
-        <file>assets/units/human/human-alchemist/skills.txt</file>
-        <file>assets/units/human/human-alchemist/traits.txt</file>
-        <file>assets/units/human/human-alchemist/unitname.txt</file>
-        <file>assets/units/human/human-archer/baseclass.txt</file>
-        <file>assets/units/human/human-archer/descr.txt</file>
-        <file>assets/units/human/human-archer/icon.png</file>
-        <file>assets/units/human/human-archer/nextgrades.txt</file>
-        <file>assets/units/human/human-archer/prevgrades.txt</file>
-        <file>assets/units/human/human-archer/skills.txt</file>
-        <file>assets/units/human/human-archer/traits.txt</file>
-        <file>assets/units/human/human-archer/unitname.txt</file>
-        <file>assets/units/human/human-army-bowman/baseclass.txt</file>
-        <file>assets/units/human/human-army-bowman/descr.txt</file>
-        <file>assets/units/human/human-army-bowman/icon.png</file>
-        <file>assets/units/human/human-army-bowman/nextgrades.txt</file>
-        <file>assets/units/human/human-army-bowman/prevgrades.txt</file>
-        <file>assets/units/human/human-army-bowman/skills.txt</file>
-        <file>assets/units/human/human-army-bowman/traits.txt</file>
-        <file>assets/units/human/human-army-bowman/unitname.txt</file>
-        <file>assets/units/human/human-arsonist/baseclass.txt</file>
-        <file>assets/units/human/human-arsonist/descr.txt</file>
-        <file>assets/units/human/human-arsonist/icon.png</file>
-        <file>assets/units/human/human-arsonist/nextgrades.txt</file>
-        <file>assets/units/human/human-arsonist/prevgrades.txt</file>
-        <file>assets/units/human/human-arsonist/skills.txt</file>
-        <file>assets/units/human/human-arsonist/traits.txt</file>
-        <file>assets/units/human/human-arsonist/unitname.txt</file>
-        <file>assets/units/human/human-assassin/baseclass.txt</file>
-        <file>assets/units/human/human-assassin/descr.txt</file>
-        <file>assets/units/human/human-assassin/icon.png</file>
-        <file>assets/units/human/human-assassin/nextgrades.txt</file>
-        <file>assets/units/human/human-assassin/prevgrades.txt</file>
-        <file>assets/units/human/human-assassin/skills.txt</file>
-        <file>assets/units/human/human-assassin/traits.txt</file>
-        <file>assets/units/human/human-assassin/unitname.txt</file>
-        <file>assets/units/human/human-avenger/baseclass.txt</file>
-        <file>assets/units/human/human-avenger/descr.txt</file>
-        <file>assets/units/human/human-avenger/icon.png</file>
-        <file>assets/units/human/human-avenger/nextgrades.txt</file>
-        <file>assets/units/human/human-avenger/prevgrades.txt</file>
-        <file>assets/units/human/human-avenger/skills.txt</file>
-        <file>assets/units/human/human-avenger/traits.txt</file>
-        <file>assets/units/human/human-avenger/unitname.txt</file>
-        <file>assets/units/human/human-battle-mage/baseclass.txt</file>
-        <file>assets/units/human/human-battle-mage/descr.txt</file>
-        <file>assets/units/human/human-battle-mage/icon.png</file>
-        <file>assets/units/human/human-battle-mage/nextgrades.txt</file>
-        <file>assets/units/human/human-battle-mage/prevgrades.txt</file>
-        <file>assets/units/human/human-battle-mage/skills.txt</file>
-        <file>assets/units/human/human-battle-mage/traits.txt</file>
-        <file>assets/units/human/human-battle-mage/unitname.txt</file>
-        <file>assets/units/human/human-berserker/baseclass.txt</file>
-        <file>assets/units/human/human-berserker/descr.txt</file>
-        <file>assets/units/human/human-berserker/icon.png</file>
-        <file>assets/units/human/human-berserker/nextgrades.txt</file>
-        <file>assets/units/human/human-berserker/prevgrades.txt</file>
-        <file>assets/units/human/human-berserker/skills.txt</file>
-        <file>assets/units/human/human-berserker/traits.txt</file>
-        <file>assets/units/human/human-berserker/unitname.txt</file>
-        <file>assets/units/human/human-big-game-hunter/baseclass.txt</file>
-        <file>assets/units/human/human-big-game-hunter/descr.txt</file>
-        <file>assets/units/human/human-big-game-hunter/icon.png</file>
-        <file>assets/units/human/human-big-game-hunter/nextgrades.txt</file>
-        <file>assets/units/human/human-big-game-hunter/prevgrades.txt</file>
-        <file>assets/units/human/human-big-game-hunter/skills.txt</file>
-        <file>assets/units/human/human-big-game-hunter/traits.txt</file>
-        <file>assets/units/human/human-big-game-hunter/unitname.txt</file>
-        <file>assets/units/human/human-brigand/baseclass.txt</file>
-        <file>assets/units/human/human-brigand/descr.txt</file>
-        <file>assets/units/human/human-brigand/icon.png</file>
-        <file>assets/units/human/human-brigand/nextgrades.txt</file>
-        <file>assets/units/human/human-brigand/prevgrades.txt</file>
-        <file>assets/units/human/human-brigand/skills.txt</file>
-        <file>assets/units/human/human-brigand/traits.txt</file>
-        <file>assets/units/human/human-brigand/unitname.txt</file>
-        <file>assets/units/human/human-cataphract/baseclass.txt</file>
-        <file>assets/units/human/human-cataphract/descr.txt</file>
-        <file>assets/units/human/human-cataphract/icon.png</file>
-        <file>assets/units/human/human-cataphract/nextgrades.txt</file>
-        <file>assets/units/human/human-cataphract/prevgrades.txt</file>
-        <file>assets/units/human/human-cataphract/skills.txt</file>
-        <file>assets/units/human/human-cataphract/traits.txt</file>
-        <file>assets/units/human/human-cataphract/unitname.txt</file>
-        <file>assets/units/human/human-cavalryman/baseclass.txt</file>
-        <file>assets/units/human/human-cavalryman/descr.txt</file>
-        <file>assets/units/human/human-cavalryman/icon.png</file>
-        <file>assets/units/human/human-cavalryman/nextgrades.txt</file>
-        <file>assets/units/human/human-cavalryman/prevgrades.txt</file>
-        <file>assets/units/human/human-cavalryman/skills.txt</file>
-        <file>assets/units/human/human-cavalryman/traits.txt</file>
-        <file>assets/units/human/human-cavalryman/unitname.txt</file>
-        <file>assets/units/human/human-chastener/baseclass.txt</file>
-        <file>assets/units/human/human-chastener/descr.txt</file>
-        <file>assets/units/human/human-chastener/icon.png</file>
-        <file>assets/units/human/human-chastener/nextgrades.txt</file>
-        <file>assets/units/human/human-chastener/prevgrades.txt</file>
-        <file>assets/units/human/human-chastener/skills.txt</file>
-        <file>assets/units/human/human-chastener/traits.txt</file>
-        <file>assets/units/human/human-chastener/unitname.txt</file>
-        <file>assets/units/human/human-cleric/baseclass.txt</file>
-        <file>assets/units/human/human-cleric/descr.txt</file>
-        <file>assets/units/human/human-cleric/icon.png</file>
-        <file>assets/units/human/human-cleric/nextgrades.txt</file>
-        <file>assets/units/human/human-cleric/prevgrades.txt</file>
-        <file>assets/units/human/human-cleric/skills.txt</file>
-        <file>assets/units/human/human-cleric/traits.txt</file>
-        <file>assets/units/human/human-cleric/unitname.txt</file>
-        <file>assets/units/human/human-clinicaria/baseclass.txt</file>
-        <file>assets/units/human/human-clinicaria/descr.txt</file>
-        <file>assets/units/human/human-clinicaria/icon.png</file>
-        <file>assets/units/human/human-clinicaria/nextgrades.txt</file>
-        <file>assets/units/human/human-clinicaria/prevgrades.txt</file>
-        <file>assets/units/human/human-clinicaria/skills.txt</file>
-        <file>assets/units/human/human-clinicaria/traits.txt</file>
-        <file>assets/units/human/human-clinicaria/unitname.txt</file>
-        <file>assets/units/human/human-condottier/baseclass.txt</file>
-        <file>assets/units/human/human-condottier/descr.txt</file>
-        <file>assets/units/human/human-condottier/icon.png</file>
-        <file>assets/units/human/human-condottier/nextgrades.txt</file>
-        <file>assets/units/human/human-condottier/prevgrades.txt</file>
-        <file>assets/units/human/human-condottier/skills.txt</file>
-        <file>assets/units/human/human-condottier/traits.txt</file>
-        <file>assets/units/human/human-condottier/unitname.txt</file>
-        <file>assets/units/human/human-dancer-with-shadows/baseclass.txt</file>
-        <file>assets/units/human/human-dancer-with-shadows/descr.txt</file>
-        <file>assets/units/human/human-dancer-with-shadows/icon.png</file>
-        <file>assets/units/human/human-dancer-with-shadows/nextgrades.txt</file>
-        <file>assets/units/human/human-dancer-with-shadows/prevgrades.txt</file>
-        <file>assets/units/human/human-dancer-with-shadows/skills.txt</file>
-        <file>assets/units/human/human-dancer-with-shadows/traits.txt</file>
-        <file>assets/units/human/human-dancer-with-shadows/unitname.txt</file>
-        <file>assets/units/human/human-defender/baseclass.txt</file>
-        <file>assets/units/human/human-defender/descr.txt</file>
-        <file>assets/units/human/human-defender/icon.png</file>
-        <file>assets/units/human/human-defender/nextgrades.txt</file>
-        <file>assets/units/human/human-defender/prevgrades.txt</file>
-        <file>assets/units/human/human-defender/skills.txt</file>
-        <file>assets/units/human/human-defender/traits.txt</file>
-        <file>assets/units/human/human-defender/unitname.txt</file>
-        <file>assets/units/human/human-demolisher/baseclass.txt</file>
-        <file>assets/units/human/human-demolisher/descr.txt</file>
-        <file>assets/units/human/human-demolisher/icon.png</file>
-        <file>assets/units/human/human-demolisher/nextgrades.txt</file>
-        <file>assets/units/human/human-demolisher/prevgrades.txt</file>
-        <file>assets/units/human/human-demolisher/skills.txt</file>
-        <file>assets/units/human/human-demolisher/traits.txt</file>
-        <file>assets/units/human/human-demolisher/unitname.txt</file>
-        <file>assets/units/human/human-deserter/baseclass.txt</file>
-        <file>assets/units/human/human-deserter/descr.txt</file>
-        <file>assets/units/human/human-deserter/icon.png</file>
-        <file>assets/units/human/human-deserter/nextgrades.txt</file>
-        <file>assets/units/human/human-deserter/prevgrades.txt</file>
-        <file>assets/units/human/human-deserter/skills.txt</file>
-        <file>assets/units/human/human-deserter/traits.txt</file>
-        <file>assets/units/human/human-deserter/unitname.txt</file>
-        <file>assets/units/human/human-druid/baseclass.txt</file>
-        <file>assets/units/human/human-druid/descr.txt</file>
-        <file>assets/units/human/human-druid/icon.png</file>
-        <file>assets/units/human/human-druid/nextgrades.txt</file>
-        <file>assets/units/human/human-druid/prevgrades.txt</file>
-        <file>assets/units/human/human-druid/skills.txt</file>
-        <file>assets/units/human/human-druid/traits.txt</file>
-        <file>assets/units/human/human-druid/unitname.txt</file>
-        <file>assets/units/human/human-duelist/baseclass.txt</file>
-        <file>assets/units/human/human-duelist/descr.txt</file>
-        <file>assets/units/human/human-duelist/icon.png</file>
-        <file>assets/units/human/human-duelist/nextgrades.txt</file>
-        <file>assets/units/human/human-duelist/prevgrades.txt</file>
-        <file>assets/units/human/human-duelist/skills.txt</file>
-        <file>assets/units/human/human-duelist/traits.txt</file>
-        <file>assets/units/human/human-duelist/unitname.txt</file>
-        <file>assets/units/human/human-farstrider/baseclass.txt</file>
-        <file>assets/units/human/human-farstrider/descr.txt</file>
-        <file>assets/units/human/human-farstrider/icon.png</file>
-        <file>assets/units/human/human-farstrider/nextgrades.txt</file>
-        <file>assets/units/human/human-farstrider/prevgrades.txt</file>
-        <file>assets/units/human/human-farstrider/skills.txt</file>
-        <file>assets/units/human/human-farstrider/traits.txt</file>
-        <file>assets/units/human/human-farstrider/unitname.txt</file>
-        <file>assets/units/human/human-fencer/baseclass.txt</file>
-        <file>assets/units/human/human-fencer/descr.txt</file>
-        <file>assets/units/human/human-fencer/icon.png</file>
-        <file>assets/units/human/human-fencer/nextgrades.txt</file>
-        <file>assets/units/human/human-fencer/prevgrades.txt</file>
-        <file>assets/units/human/human-fencer/skills.txt</file>
-        <file>assets/units/human/human-fencer/traits.txt</file>
-        <file>assets/units/human/human-fencer/unitname.txt</file>
-        <file>assets/units/human/human-flayer/baseclass.txt</file>
-        <file>assets/units/human/human-flayer/descr.txt</file>
-        <file>assets/units/human/human-flayer/icon.png</file>
-        <file>assets/units/human/human-flayer/nextgrades.txt</file>
-        <file>assets/units/human/human-flayer/prevgrades.txt</file>
-        <file>assets/units/human/human-flayer/skills.txt</file>
-        <file>assets/units/human/human-flayer/traits.txt</file>
-        <file>assets/units/human/human-flayer/unitname.txt</file>
-        <file>assets/units/human/human-floromante/baseclass.txt</file>
-        <file>assets/units/human/human-floromante/descr.txt</file>
-        <file>assets/units/human/human-floromante/icon.png</file>
-        <file>assets/units/human/human-floromante/nextgrades.txt</file>
-        <file>assets/units/human/human-floromante/prevgrades.txt</file>
-        <file>assets/units/human/human-floromante/skills.txt</file>
-        <file>assets/units/human/human-floromante/traits.txt</file>
-        <file>assets/units/human/human-floromante/unitname.txt</file>
-        <file>assets/units/human/human-frost-mage/baseclass.txt</file>
-        <file>assets/units/human/human-frost-mage/descr.txt</file>
-        <file>assets/units/human/human-frost-mage/icon.png</file>
-        <file>assets/units/human/human-frost-mage/nextgrades.txt</file>
-        <file>assets/units/human/human-frost-mage/prevgrades.txt</file>
-        <file>assets/units/human/human-frost-mage/skills.txt</file>
-        <file>assets/units/human/human-frost-mage/traits.txt</file>
-        <file>assets/units/human/human-frost-mage/unitname.txt</file>
-        <file>assets/units/human/human-guardian/baseclass.txt</file>
-        <file>assets/units/human/human-guardian/descr.txt</file>
-        <file>assets/units/human/human-guardian/icon.png</file>
-        <file>assets/units/human/human-guardian/nextgrades.txt</file>
-        <file>assets/units/human/human-guardian/prevgrades.txt</file>
-        <file>assets/units/human/human-guardian/skills.txt</file>
-        <file>assets/units/human/human-guardian/traits.txt</file>
-        <file>assets/units/human/human-guardian/unitname.txt</file>
-        <file>assets/units/human/human-healer/baseclass.txt</file>
-        <file>assets/units/human/human-healer/descr.txt</file>
-        <file>assets/units/human/human-healer/icon.png</file>
-        <file>assets/units/human/human-healer/nextgrades.txt</file>
-        <file>assets/units/human/human-healer/prevgrades.txt</file>
-        <file>assets/units/human/human-healer/skills.txt</file>
-        <file>assets/units/human/human-healer/traits.txt</file>
-        <file>assets/units/human/human-healer/unitname.txt</file>
-        <file>assets/units/human/human-hoplite/baseclass.txt</file>
-        <file>assets/units/human/human-hoplite/descr.txt</file>
-        <file>assets/units/human/human-hoplite/icon.png</file>
-        <file>assets/units/human/human-hoplite/nextgrades.txt</file>
-        <file>assets/units/human/human-hoplite/prevgrades.txt</file>
-        <file>assets/units/human/human-hoplite/skills.txt</file>
-        <file>assets/units/human/human-hoplite/traits.txt</file>
-        <file>assets/units/human/human-hoplite/unitname.txt</file>
-        <file>assets/units/human/human-hunter/baseclass.txt</file>
-        <file>assets/units/human/human-hunter/descr.txt</file>
-        <file>assets/units/human/human-hunter/icon.png</file>
-        <file>assets/units/human/human-hunter/nextgrades.txt</file>
-        <file>assets/units/human/human-hunter/prevgrades.txt</file>
-        <file>assets/units/human/human-hunter/skills.txt</file>
-        <file>assets/units/human/human-hunter/traits.txt</file>
-        <file>assets/units/human/human-hunter/unitname.txt</file>
-        <file>assets/units/human/human-hydromante/baseclass.txt</file>
-        <file>assets/units/human/human-hydromante/descr.txt</file>
-        <file>assets/units/human/human-hydromante/icon.png</file>
-        <file>assets/units/human/human-hydromante/nextgrades.txt</file>
-        <file>assets/units/human/human-hydromante/prevgrades.txt</file>
-        <file>assets/units/human/human-hydromante/skills.txt</file>
-        <file>assets/units/human/human-hydromante/traits.txt</file>
-        <file>assets/units/human/human-hydromante/unitname.txt</file>
-        <file>assets/units/human/human-illusionist/baseclass.txt</file>
-        <file>assets/units/human/human-illusionist/descr.txt</file>
-        <file>assets/units/human/human-illusionist/icon.png</file>
-        <file>assets/units/human/human-illusionist/nextgrades.txt</file>
-        <file>assets/units/human/human-illusionist/prevgrades.txt</file>
-        <file>assets/units/human/human-illusionist/skills.txt</file>
-        <file>assets/units/human/human-illusionist/traits.txt</file>
-        <file>assets/units/human/human-illusionist/unitname.txt</file>
-        <file>assets/units/human/human-lightning-mage/baseclass.txt</file>
-        <file>assets/units/human/human-lightning-mage/descr.txt</file>
-        <file>assets/units/human/human-lightning-mage/icon.png</file>
-        <file>assets/units/human/human-lightning-mage/nextgrades.txt</file>
-        <file>assets/units/human/human-lightning-mage/prevgrades.txt</file>
-        <file>assets/units/human/human-lightning-mage/skills.txt</file>
-        <file>assets/units/human/human-lightning-mage/traits.txt</file>
-        <file>assets/units/human/human-lightning-mage/unitname.txt</file>
-        <file>assets/units/human/human-liquidator/baseclass.txt</file>
-        <file>assets/units/human/human-liquidator/descr.txt</file>
-        <file>assets/units/human/human-liquidator/icon.png</file>
-        <file>assets/units/human/human-liquidator/nextgrades.txt</file>
-        <file>assets/units/human/human-liquidator/prevgrades.txt</file>
-        <file>assets/units/human/human-liquidator/skills.txt</file>
-        <file>assets/units/human/human-liquidator/traits.txt</file>
-        <file>assets/units/human/human-liquidator/unitname.txt</file>
-        <file>assets/units/human/human-mage/baseclass.txt</file>
-        <file>assets/units/human/human-mage/descr.txt</file>
-        <file>assets/units/human/human-mage/icon.png</file>
-        <file>assets/units/human/human-mage/nextgrades.txt</file>
-        <file>assets/units/human/human-mage/prevgrades.txt</file>
-        <file>assets/units/human/human-mage/skills.txt</file>
-        <file>assets/units/human/human-mage/traits.txt</file>
-        <file>assets/units/human/human-mage/unitname.txt</file>
-        <file>assets/units/human/human-magus-mage/baseclass.txt</file>
-        <file>assets/units/human/human-magus-mage/descr.txt</file>
-        <file>assets/units/human/human-magus-mage/icon.png</file>
-        <file>assets/units/human/human-magus-mage/nextgrades.txt</file>
-        <file>assets/units/human/human-magus-mage/prevgrades.txt</file>
-        <file>assets/units/human/human-magus-mage/skills.txt</file>
-        <file>assets/units/human/human-magus-mage/traits.txt</file>
-        <file>assets/units/human/human-magus-mage/unitname.txt</file>
-        <file>assets/units/human/human-marauder/baseclass.txt</file>
-        <file>assets/units/human/human-marauder/descr.txt</file>
-        <file>assets/units/human/human-marauder/icon.png</file>
-        <file>assets/units/human/human-marauder/nextgrades.txt</file>
-        <file>assets/units/human/human-marauder/prevgrades.txt</file>
-        <file>assets/units/human/human-marauder/skills.txt</file>
-        <file>assets/units/human/human-marauder/traits.txt</file>
-        <file>assets/units/human/human-marauder/unitname.txt</file>
-        <file>assets/units/human/human-marksman/baseclass.txt</file>
-        <file>assets/units/human/human-marksman/descr.txt</file>
-        <file>assets/units/human/human-marksman/icon.png</file>
-        <file>assets/units/human/human-marksman/nextgrades.txt</file>
-        <file>assets/units/human/human-marksman/prevgrades.txt</file>
-        <file>assets/units/human/human-marksman/skills.txt</file>
-        <file>assets/units/human/human-marksman/traits.txt</file>
-        <file>assets/units/human/human-marksman/unitname.txt</file>
-        <file>assets/units/human/human-master-of-subtetly/baseclass.txt</file>
-        <file>assets/units/human/human-master-of-subtetly/descr.txt</file>
-        <file>assets/units/human/human-master-of-subtetly/icon.png</file>
-        <file>assets/units/human/human-master-of-subtetly/nextgrades.txt</file>
-        <file>assets/units/human/human-master-of-subtetly/prevgrades.txt</file>
-        <file>assets/units/human/human-master-of-subtetly/skills.txt</file>
-        <file>assets/units/human/human-master-of-subtetly/traits.txt</file>
-        <file>assets/units/human/human-master-of-subtetly/unitname.txt</file>
-        <file>assets/units/human/human-mistweaver/baseclass.txt</file>
-        <file>assets/units/human/human-mistweaver/descr.txt</file>
-        <file>assets/units/human/human-mistweaver/icon.png</file>
-        <file>assets/units/human/human-mistweaver/nextgrades.txt</file>
-        <file>assets/units/human/human-mistweaver/prevgrades.txt</file>
-        <file>assets/units/human/human-mistweaver/skills.txt</file>
-        <file>assets/units/human/human-mistweaver/traits.txt</file>
-        <file>assets/units/human/human-mistweaver/unitname.txt</file>
-        <file>assets/units/human/human-monk/baseclass.txt</file>
-        <file>assets/units/human/human-monk/descr.txt</file>
-        <file>assets/units/human/human-monk/icon.png</file>
-        <file>assets/units/human/human-monk/nextgrades.txt</file>
-        <file>assets/units/human/human-monk/prevgrades.txt</file>
-        <file>assets/units/human/human-monk/skills.txt</file>
-        <file>assets/units/human/human-monk/traits.txt</file>
-        <file>assets/units/human/human-monk/unitname.txt</file>
-        <file>assets/units/human/human-mystic/baseclass.txt</file>
-        <file>assets/units/human/human-mystic/descr.txt</file>
-        <file>assets/units/human/human-mystic/icon.png</file>
-        <file>assets/units/human/human-mystic/nextgrades.txt</file>
-        <file>assets/units/human/human-mystic/prevgrades.txt</file>
-        <file>assets/units/human/human-mystic/skills.txt</file>
-        <file>assets/units/human/human-mystic/traits.txt</file>
-        <file>assets/units/human/human-mystic/unitname.txt</file>
-        <file>assets/units/human/human-outlaw/baseclass.txt</file>
-        <file>assets/units/human/human-outlaw/descr.txt</file>
-        <file>assets/units/human/human-outlaw/icon.png</file>
-        <file>assets/units/human/human-outlaw/nextgrades.txt</file>
-        <file>assets/units/human/human-outlaw/prevgrades.txt</file>
-        <file>assets/units/human/human-outlaw/skills.txt</file>
-        <file>assets/units/human/human-outlaw/traits.txt</file>
-        <file>assets/units/human/human-outlaw/unitname.txt</file>
-        <file>assets/units/human/human-paladin/baseclass.txt</file>
-        <file>assets/units/human/human-paladin/descr.txt</file>
-        <file>assets/units/human/human-paladin/icon.png</file>
-        <file>assets/units/human/human-paladin/nextgrades.txt</file>
-        <file>assets/units/human/human-paladin/prevgrades.txt</file>
-        <file>assets/units/human/human-paladin/skills.txt</file>
-        <file>assets/units/human/human-paladin/traits.txt</file>
-        <file>assets/units/human/human-paladin/unitname.txt</file>
-        <file>assets/units/human/human-pathfinder/baseclass.txt</file>
-        <file>assets/units/human/human-pathfinder/descr.txt</file>
-        <file>assets/units/human/human-pathfinder/icon.png</file>
-        <file>assets/units/human/human-pathfinder/nextgrades.txt</file>
-        <file>assets/units/human/human-pathfinder/prevgrades.txt</file>
-        <file>assets/units/human/human-pathfinder/skills.txt</file>
-        <file>assets/units/human/human-pathfinder/traits.txt</file>
-        <file>assets/units/human/human-pathfinder/unitname.txt</file>
-        <file>assets/units/human/human-pikeman/baseclass.txt</file>
-        <file>assets/units/human/human-pikeman/descr.txt</file>
-        <file>assets/units/human/human-pikeman/icon.png</file>
-        <file>assets/units/human/human-pikeman/nextgrades.txt</file>
-        <file>assets/units/human/human-pikeman/prevgrades.txt</file>
-        <file>assets/units/human/human-pikeman/skills.txt</file>
-        <file>assets/units/human/human-pikeman/traits.txt</file>
-        <file>assets/units/human/human-pikeman/unitname.txt</file>
-        <file>assets/units/human/human-poisoner/baseclass.txt</file>
-        <file>assets/units/human/human-poisoner/descr.txt</file>
-        <file>assets/units/human/human-poisoner/icon.png</file>
-        <file>assets/units/human/human-poisoner/nextgrades.txt</file>
-        <file>assets/units/human/human-poisoner/prevgrades.txt</file>
-        <file>assets/units/human/human-poisoner/skills.txt</file>
-        <file>assets/units/human/human-poisoner/traits.txt</file>
-        <file>assets/units/human/human-poisoner/unitname.txt</file>
-        <file>assets/units/human/human-priest/baseclass.txt</file>
-        <file>assets/units/human/human-priest/descr.txt</file>
-        <file>assets/units/human/human-priest/icon.png</file>
-        <file>assets/units/human/human-priest/nextgrades.txt</file>
-        <file>assets/units/human/human-priest/prevgrades.txt</file>
-        <file>assets/units/human/human-priest/skills.txt</file>
-        <file>assets/units/human/human-priest/traits.txt</file>
-        <file>assets/units/human/human-priest/unitname.txt</file>
-        <file>assets/units/human/human-psyonic/baseclass.txt</file>
-        <file>assets/units/human/human-psyonic/descr.txt</file>
-        <file>assets/units/human/human-psyonic/icon.png</file>
-        <file>assets/units/human/human-psyonic/nextgrades.txt</file>
-        <file>assets/units/human/human-psyonic/prevgrades.txt</file>
-        <file>assets/units/human/human-psyonic/skills.txt</file>
-        <file>assets/units/human/human-psyonic/traits.txt</file>
-        <file>assets/units/human/human-psyonic/unitname.txt</file>
-        <file>assets/units/human/human-pyromante/baseclass.txt</file>
-        <file>assets/units/human/human-pyromante/descr.txt</file>
-        <file>assets/units/human/human-pyromante/icon.png</file>
-        <file>assets/units/human/human-pyromante/nextgrades.txt</file>
-        <file>assets/units/human/human-pyromante/prevgrades.txt</file>
-        <file>assets/units/human/human-pyromante/skills.txt</file>
-        <file>assets/units/human/human-pyromante/traits.txt</file>
-        <file>assets/units/human/human-pyromante/unitname.txt</file>
-        <file>assets/units/human/human-recruit/baseclass.txt</file>
-        <file>assets/units/human/human-recruit/descr.txt</file>
-        <file>assets/units/human/human-recruit/icon.png</file>
-        <file>assets/units/human/human-recruit/nextgrades.txt</file>
-        <file>assets/units/human/human-recruit/prevgrades.txt</file>
-        <file>assets/units/human/human-recruit/skills.txt</file>
-        <file>assets/units/human/human-recruit/traits.txt</file>
-        <file>assets/units/human/human-recruit/unitname.txt</file>
-        <file>assets/units/human/human-rider/baseclass.txt</file>
-        <file>assets/units/human/human-rider/descr.txt</file>
-        <file>assets/units/human/human-rider/icon.png</file>
-        <file>assets/units/human/human-rider/nextgrades.txt</file>
-        <file>assets/units/human/human-rider/prevgrades.txt</file>
-        <file>assets/units/human/human-rider/skills.txt</file>
-        <file>assets/units/human/human-rider/traits.txt</file>
-        <file>assets/units/human/human-rider/unitname.txt</file>
-        <file>assets/units/human/human-rogue/baseclass.txt</file>
-        <file>assets/units/human/human-rogue/descr.txt</file>
-        <file>assets/units/human/human-rogue/icon.png</file>
-        <file>assets/units/human/human-rogue/nextgrades.txt</file>
-        <file>assets/units/human/human-rogue/prevgrades.txt</file>
-        <file>assets/units/human/human-rogue/skills.txt</file>
-        <file>assets/units/human/human-rogue/traits.txt</file>
-        <file>assets/units/human/human-rogue/unitname.txt</file>
-        <file>assets/units/human/human-royal-archer/baseclass.txt</file>
-        <file>assets/units/human/human-royal-archer/descr.txt</file>
-        <file>assets/units/human/human-royal-archer/icon.png</file>
-        <file>assets/units/human/human-royal-archer/nextgrades.txt</file>
-        <file>assets/units/human/human-royal-archer/prevgrades.txt</file>
-        <file>assets/units/human/human-royal-archer/skills.txt</file>
-        <file>assets/units/human/human-royal-archer/traits.txt</file>
-        <file>assets/units/human/human-royal-archer/unitname.txt</file>
-        <file>assets/units/human/human-saboteur/baseclass.txt</file>
-        <file>assets/units/human/human-saboteur/descr.txt</file>
-        <file>assets/units/human/human-saboteur/icon.png</file>
-        <file>assets/units/human/human-saboteur/nextgrades.txt</file>
-        <file>assets/units/human/human-saboteur/prevgrades.txt</file>
-        <file>assets/units/human/human-saboteur/skills.txt</file>
-        <file>assets/units/human/human-saboteur/traits.txt</file>
-        <file>assets/units/human/human-saboteur/unitname.txt</file>
-        <file>assets/units/human/human-sharpshooter/baseclass.txt</file>
-        <file>assets/units/human/human-sharpshooter/descr.txt</file>
-        <file>assets/units/human/human-sharpshooter/icon.png</file>
-        <file>assets/units/human/human-sharpshooter/nextgrades.txt</file>
-        <file>assets/units/human/human-sharpshooter/prevgrades.txt</file>
-        <file>assets/units/human/human-sharpshooter/skills.txt</file>
-        <file>assets/units/human/human-sharpshooter/traits.txt</file>
-        <file>assets/units/human/human-sharpshooter/unitname.txt</file>
-        <file>assets/units/human/human-skirmisher/baseclass.txt</file>
-        <file>assets/units/human/human-skirmisher/descr.txt</file>
-        <file>assets/units/human/human-skirmisher/icon.png</file>
-        <file>assets/units/human/human-skirmisher/nextgrades.txt</file>
-        <file>assets/units/human/human-skirmisher/prevgrades.txt</file>
-        <file>assets/units/human/human-skirmisher/skills.txt</file>
-        <file>assets/units/human/human-skirmisher/traits.txt</file>
-        <file>assets/units/human/human-skirmisher/unitname.txt</file>
-        <file>assets/units/human/human-slayer/baseclass.txt</file>
-        <file>assets/units/human/human-slayer/descr.txt</file>
-        <file>assets/units/human/human-slayer/icon.png</file>
-        <file>assets/units/human/human-slayer/nextgrades.txt</file>
-        <file>assets/units/human/human-slayer/prevgrades.txt</file>
-        <file>assets/units/human/human-slayer/skills.txt</file>
-        <file>assets/units/human/human-slayer/traits.txt</file>
-        <file>assets/units/human/human-slayer/unitname.txt</file>
-        <file>assets/units/human/human-spearman/baseclass.txt</file>
-        <file>assets/units/human/human-spearman/descr.txt</file>
-        <file>assets/units/human/human-spearman/icon.png</file>
-        <file>assets/units/human/human-spearman/nextgrades.txt</file>
-        <file>assets/units/human/human-spearman/prevgrades.txt</file>
-        <file>assets/units/human/human-spearman/skills.txt</file>
-        <file>assets/units/human/human-spearman/traits.txt</file>
-        <file>assets/units/human/human-spearman/unitname.txt</file>
-        <file>assets/units/human/human-support-mage/baseclass.txt</file>
-        <file>assets/units/human/human-support-mage/descr.txt</file>
-        <file>assets/units/human/human-support-mage/icon.png</file>
-        <file>assets/units/human/human-support-mage/nextgrades.txt</file>
-        <file>assets/units/human/human-support-mage/prevgrades.txt</file>
-        <file>assets/units/human/human-support-mage/skills.txt</file>
-        <file>assets/units/human/human-support-mage/traits.txt</file>
-        <file>assets/units/human/human-support-mage/unitname.txt</file>
-        <file>assets/units/human/human-suppressor/baseclass.txt</file>
-        <file>assets/units/human/human-suppressor/descr.txt</file>
-        <file>assets/units/human/human-suppressor/icon.png</file>
-        <file>assets/units/human/human-suppressor/nextgrades.txt</file>
-        <file>assets/units/human/human-suppressor/prevgrades.txt</file>
-        <file>assets/units/human/human-suppressor/skills.txt</file>
-        <file>assets/units/human/human-suppressor/traits.txt</file>
-        <file>assets/units/human/human-suppressor/unitname.txt</file>
-        <file>assets/units/human/human-thug/baseclass.txt</file>
-        <file>assets/units/human/human-thug/descr.txt</file>
-        <file>assets/units/human/human-thug/icon.png</file>
-        <file>assets/units/human/human-thug/nextgrades.txt</file>
-        <file>assets/units/human/human-thug/prevgrades.txt</file>
-        <file>assets/units/human/human-thug/skills.txt</file>
-        <file>assets/units/human/human-thug/traits.txt</file>
-        <file>assets/units/human/human-thug/unitname.txt</file>
-        <file>assets/units/human/human-tormentor/baseclass.txt</file>
-        <file>assets/units/human/human-tormentor/descr.txt</file>
-        <file>assets/units/human/human-tormentor/icon.png</file>
-        <file>assets/units/human/human-tormentor/nextgrades.txt</file>
-        <file>assets/units/human/human-tormentor/prevgrades.txt</file>
-        <file>assets/units/human/human-tormentor/skills.txt</file>
-        <file>assets/units/human/human-tormentor/traits.txt</file>
-        <file>assets/units/human/human-tormentor/unitname.txt</file>
-        <file>assets/units/human/human-trailblazer/baseclass.txt</file>
-        <file>assets/units/human/human-trailblazer/descr.txt</file>
-        <file>assets/units/human/human-trailblazer/icon.png</file>
-        <file>assets/units/human/human-trailblazer/nextgrades.txt</file>
-        <file>assets/units/human/human-trailblazer/prevgrades.txt</file>
-        <file>assets/units/human/human-trailblazer/skills.txt</file>
-        <file>assets/units/human/human-trailblazer/traits.txt</file>
-        <file>assets/units/human/human-trailblazer/unitname.txt</file>
-        <file>assets/units/human/human-trapper/baseclass.txt</file>
-        <file>assets/units/human/human-trapper/descr.txt</file>
-        <file>assets/units/human/human-trapper/icon.png</file>
-        <file>assets/units/human/human-trapper/nextgrades.txt</file>
-        <file>assets/units/human/human-trapper/prevgrades.txt</file>
-        <file>assets/units/human/human-trapper/skills.txt</file>
-        <file>assets/units/human/human-trapper/traits.txt</file>
-        <file>assets/units/human/human-trapper/unitname.txt</file>
-        <file>assets/units/human/human-voodoo/baseclass.txt</file>
-        <file>assets/units/human/human-voodoo/descr.txt</file>
-        <file>assets/units/human/human-voodoo/icon.png</file>
-        <file>assets/units/human/human-voodoo/nextgrades.txt</file>
-        <file>assets/units/human/human-voodoo/prevgrades.txt</file>
-        <file>assets/units/human/human-voodoo/skills.txt</file>
-        <file>assets/units/human/human-voodoo/traits.txt</file>
-        <file>assets/units/human/human-voodoo/unitname.txt</file>
-        <file>assets/units/human/human-warden/baseclass.txt</file>
-        <file>assets/units/human/human-warden/descr.txt</file>
-        <file>assets/units/human/human-warden/icon.png</file>
-        <file>assets/units/human/human-warden/nextgrades.txt</file>
-        <file>assets/units/human/human-warden/prevgrades.txt</file>
-        <file>assets/units/human/human-warden/skills.txt</file>
-        <file>assets/units/human/human-warden/traits.txt</file>
-        <file>assets/units/human/human-warden/unitname.txt</file>
-        <file>assets/units/human/human-warlord/baseclass.txt</file>
-        <file>assets/units/human/human-warlord/descr.txt</file>
-        <file>assets/units/human/human-warlord/icon.png</file>
-        <file>assets/units/human/human-warlord/nextgrades.txt</file>
-        <file>assets/units/human/human-warlord/prevgrades.txt</file>
-        <file>assets/units/human/human-warlord/skills.txt</file>
-        <file>assets/units/human/human-warlord/traits.txt</file>
-        <file>assets/units/human/human-warlord/unitname.txt</file>
-        <file>assets/units/human/human-warrior/baseclass.txt</file>
-        <file>assets/units/human/human-warrior/descr.txt</file>
-        <file>assets/units/human/human-warrior/icon.png</file>
-        <file>assets/units/human/human-warrior/nextgrades.txt</file>
-        <file>assets/units/human/human-warrior/prevgrades.txt</file>
-        <file>assets/units/human/human-warrior/skills.txt</file>
-        <file>assets/units/human/human-warrior/traits.txt</file>
-        <file>assets/units/human/human-warrior/unitname.txt</file>
-        <file>assets/units/human/human-wild-rider/baseclass.txt</file>
-        <file>assets/units/human/human-wild-rider/descr.txt</file>
-        <file>assets/units/human/human-wild-rider/icon.png</file>
-        <file>assets/units/human/human-wild-rider/nextgrades.txt</file>
-        <file>assets/units/human/human-wild-rider/prevgrades.txt</file>
-        <file>assets/units/human/human-wild-rider/skills.txt</file>
-        <file>assets/units/human/human-wild-rider/traits.txt</file>
-        <file>assets/units/human/human-wild-rider/unitname.txt</file>
-        <file>assets/units/human/human-witch-doctor/baseclass.txt</file>
-        <file>assets/units/human/human-witch-doctor/descr.txt</file>
-        <file>assets/units/human/human-witch-doctor/icon.png</file>
-        <file>assets/units/human/human-witch-doctor/nextgrades.txt</file>
-        <file>assets/units/human/human-witch-doctor/prevgrades.txt</file>
-        <file>assets/units/human/human-witch-doctor/skills.txt</file>
-        <file>assets/units/human/human-witch-doctor/traits.txt</file>
-        <file>assets/units/human/human-witch-doctor/unitname.txt</file>
-        <file>assets/units/human/treant/baseclass.txt</file>
-        <file>assets/units/human/treant/descr.txt</file>
-        <file>assets/units/human/treant/icon.png</file>
-        <file>assets/units/human/treant/nextgrades.txt</file>
-        <file>assets/units/human/treant/prevgrades.txt</file>
-        <file>assets/units/human/treant/skills.txt</file>
-        <file>assets/units/human/treant/traits.txt</file>
-        <file>assets/units/human/treant/unitname.txt</file>
-        <file>assets/units/human/descr.txt</file>
-        <file>assets/units/human/icon.png</file>
-        <file>assets/units/human/racename.txt</file>
-        <file>assets/units/human/second-icon.png</file>
-        <file>assets/units/human/units.txt</file>
-        <file>assets/units/Mage/include/Mage.h</file>
-        <file>assets/units/Mage/source/Mage.cpp</file>
-        <file>assets/units/norace/nounit/icon.png</file>
-        <file>assets/units/Rider/include/Rider.h</file>
-        <file>assets/units/Rider/source/Rider.cpp</file>
-        <file>assets/units/Rogue/include/Rogue.h</file>
-        <file>assets/units/Rogue/source/Rogue.cpp</file>
-        <file>assets/units/undead/undead-archer/baseclass.txt</file>
-        <file>assets/units/undead/undead-archer/descr.txt</file>
-        <file>assets/units/undead/undead-archer/icon.png</file>
-        <file>assets/units/undead/undead-archer/nextgrades.txt</file>
-        <file>assets/units/undead/undead-archer/prevgrades.txt</file>
-        <file>assets/units/undead/undead-archer/skills.txt</file>
-        <file>assets/units/undead/undead-archer/traits.txt</file>
-        <file>assets/units/undead/undead-archer/unitname.txt</file>
-        <file>assets/units/undead/undead-mage/baseclass.txt</file>
-        <file>assets/units/undead/undead-mage/descr.txt</file>
-        <file>assets/units/undead/undead-mage/icon.png</file>
-        <file>assets/units/undead/undead-mage/nextgrades.txt</file>
-        <file>assets/units/undead/undead-mage/prevgrades.txt</file>
-        <file>assets/units/undead/undead-mage/skills.txt</file>
-        <file>assets/units/undead/undead-mage/traits.txt</file>
-        <file>assets/units/undead/undead-mage/unitname.txt</file>
-        <file>assets/units/undead/undead-rider/baseclass.txt</file>
-        <file>assets/units/undead/undead-rider/descr.txt</file>
-        <file>assets/units/undead/undead-rider/icon.png</file>
-        <file>assets/units/undead/undead-rider/nextgrades.txt</file>
-        <file>assets/units/undead/undead-rider/prevgrades.txt</file>
-        <file>assets/units/undead/undead-rider/skills.txt</file>
-        <file>assets/units/undead/undead-rider/traits.txt</file>
-        <file>assets/units/undead/undead-rider/unitname.txt</file>
-        <file>assets/units/undead/undead-rogue/baseclass.txt</file>
-        <file>assets/units/undead/undead-rogue/descr.txt</file>
-        <file>assets/units/undead/undead-rogue/icon.png</file>
-        <file>assets/units/undead/undead-rogue/nextgrades.txt</file>
-        <file>assets/units/undead/undead-rogue/prevgrades.txt</file>
-        <file>assets/units/undead/undead-rogue/skills.txt</file>
-        <file>assets/units/undead/undead-rogue/traits.txt</file>
-        <file>assets/units/undead/undead-rogue/unitname.txt</file>
-        <file>assets/units/undead/undead-warrior/baseclass.txt</file>
-        <file>assets/units/undead/undead-warrior/descr.txt</file>
-        <file>assets/units/undead/undead-warrior/icon.png</file>
-        <file>assets/units/undead/undead-warrior/nextgrades.txt</file>
-        <file>assets/units/undead/undead-warrior/prevgrades.txt</file>
-        <file>assets/units/undead/undead-warrior/skills.txt</file>
-        <file>assets/units/undead/undead-warrior/traits.txt</file>
-        <file>assets/units/undead/undead-warrior/unitname.txt</file>
-        <file>assets/units/undead/descr.txt</file>
-        <file>assets/units/undead/icon.png</file>
-        <file>assets/units/undead/racename.txt</file>
-        <file>assets/units/undead/units.txt</file>
-        <file>assets/units/warcraft/blademaster/baseclass.txt</file>
-        <file>assets/units/warcraft/blademaster/descr.txt</file>
-        <file>assets/units/warcraft/blademaster/icon.png</file>
-        <file>assets/units/warcraft/blademaster/nextgrades.txt</file>
-        <file>assets/units/warcraft/blademaster/prevgrades.txt</file>
-        <file>assets/units/warcraft/blademaster/skills.txt</file>
-        <file>assets/units/warcraft/blademaster/traits.txt</file>
-        <file>assets/units/warcraft/blademaster/unitname.txt</file>
-        <file>assets/units/warcraft/chaosorc/baseclass.txt</file>
-        <file>assets/units/warcraft/chaosorc/descr.txt</file>
-        <file>assets/units/warcraft/chaosorc/icon.png</file>
-        <file>assets/units/warcraft/chaosorc/nextgrades.txt</file>
-        <file>assets/units/warcraft/chaosorc/prevgrades.txt</file>
-        <file>assets/units/warcraft/chaosorc/skills.txt</file>
-        <file>assets/units/warcraft/chaosorc/traits.txt</file>
-        <file>assets/units/warcraft/chaosorc/unitname.txt</file>
-        <file>assets/units/warcraft/nagasummoner/baseclass.txt</file>
-        <file>assets/units/warcraft/nagasummoner/descr.txt</file>
-        <file>assets/units/warcraft/nagasummoner/icon.png</file>
-        <file>assets/units/warcraft/nagasummoner/nextgrades.txt</file>
-        <file>assets/units/warcraft/nagasummoner/prevgrades.txt</file>
-        <file>assets/units/warcraft/nagasummoner/skills.txt</file>
-        <file>assets/units/warcraft/nagasummoner/traits.txt</file>
-        <file>assets/units/warcraft/nagasummoner/unitname.txt</file>
-        <file>assets/units/warcraft/necromancer/baseclass.txt</file>
-        <file>assets/units/warcraft/necromancer/descr.txt</file>
-        <file>assets/units/warcraft/necromancer/icon.png</file>
-        <file>assets/units/warcraft/necromancer/nextgrades.txt</file>
-        <file>assets/units/warcraft/necromancer/prevgrades.txt</file>
-        <file>assets/units/warcraft/necromancer/skills.txt</file>
-        <file>assets/units/warcraft/necromancer/traits.txt</file>
-        <file>assets/units/warcraft/necromancer/unitname.txt</file>
-        <file>assets/units/warcraft/ogremagi/baseclass.txt</file>
-        <file>assets/units/warcraft/ogremagi/descr.txt</file>
-        <file>assets/units/warcraft/ogremagi/icon.png</file>
-        <file>assets/units/warcraft/ogremagi/nextgrades.txt</file>
-        <file>assets/units/warcraft/ogremagi/prevgrades.txt</file>
-        <file>assets/units/warcraft/ogremagi/skills.txt</file>
-        <file>assets/units/warcraft/ogremagi/traits.txt</file>
-        <file>assets/units/warcraft/ogremagi/unitname.txt</file>
-        <file>assets/units/warcraft/rogue/baseclass.txt</file>
-        <file>assets/units/warcraft/rogue/descr.txt</file>
-        <file>assets/units/warcraft/rogue/icon.png</file>
-        <file>assets/units/warcraft/rogue/nextgrades.txt</file>
-        <file>assets/units/warcraft/rogue/prevgrades.txt</file>
-        <file>assets/units/warcraft/rogue/skills.txt</file>
-        <file>assets/units/warcraft/rogue/traits.txt</file>
-        <file>assets/units/warcraft/rogue/unitname.txt</file>
-        <file>assets/units/warcraft/wargraider/baseclass.txt</file>
-        <file>assets/units/warcraft/wargraider/descr.txt</file>
-        <file>assets/units/warcraft/wargraider/icon.png</file>
-        <file>assets/units/warcraft/wargraider/nextgrades.txt</file>
-        <file>assets/units/warcraft/wargraider/prevgrades.txt</file>
-        <file>assets/units/warcraft/wargraider/skills.txt</file>
-        <file>assets/units/warcraft/wargraider/traits.txt</file>
-        <file>assets/units/warcraft/wargraider/unitname.txt</file>
-        <file>assets/units/warcraft/wyvern/baseclass.txt</file>
-        <file>assets/units/warcraft/wyvern/descr.txt</file>
-        <file>assets/units/warcraft/wyvern/icon.png</file>
-        <file>assets/units/warcraft/wyvern/nextgrades.txt</file>
-        <file>assets/units/warcraft/wyvern/prevgrades.txt</file>
-        <file>assets/units/warcraft/wyvern/skills.txt</file>
-        <file>assets/units/warcraft/wyvern/traits.txt</file>
-        <file>assets/units/warcraft/wyvern/unitname.txt</file>
-        <file>assets/units/warcraft/descr.txt</file>
-        <file>assets/units/warcraft/icon.png</file>
-        <file>assets/units/warcraft/raceicon.png</file>
-        <file>assets/units/warcraft/racename.txt</file>
-        <file>assets/units/warcraft/units.txt</file>
-        <file>assets/units/Warrior/include/Warrior.h</file>
-        <file>assets/units/Warrior/source/Warrior.cpp</file>
-        <file>assets/units/races.txt</file>
-        <file>assets/units/README.md</file>
-    </qresource>
-</RCC>

部分文件因文件數量過多而無法顯示