From 4835b187e1f1939ec16d61e2cef9b091e32d4c00 Mon Sep 17 00:00:00 2001 From: tibz Date: Sat, 15 Aug 2026 12:07:35 -0500 Subject: [PATCH] init --- .DS_Store | Bin 0 -> 6148 bytes .gitattributes | 63 +++ .gitignore | 363 ++++++++++++ Johnmagotchi.sln | 25 + Johnmagotchi/.DS_Store | Bin 0 -> 6148 bytes Johnmagotchi/.config/dotnet-tools.json | 36 ++ Johnmagotchi/.mgstats | 1 + .../Assets/Art/Tiles/tile-highlight.aseprite | Bin 0 -> 9141 bytes .../Assets/Art/Tiles/tile-highlight.json | 146 +++++ .../Assets/Art/Tiles/tile-highlight.png | Bin 0 -> 680 bytes .../Art/UI/test-menu-item-64-28.aseprite | Bin 0 -> 659 bytes .../Art/UI/unit-display-blue-darker.aseprite | Bin 0 -> 795 bytes .../Art/UI/unit-display-blue-darker.png | Bin 0 -> 468 bytes .../Art/UI/unit-display-blue-lighter.aseprite | Bin 0 -> 805 bytes .../Art/UI/unit-display-blue-lighter.png | Bin 0 -> 464 bytes .../Art/UI/unit-display-green-darker.aseprite | Bin 0 -> 806 bytes .../Art/UI/unit-display-green-darker.png | Bin 0 -> 460 bytes .../UI/unit-display-green-lighter.aseprite | Bin 0 -> 818 bytes .../Art/UI/unit-display-green-lighter.png | Bin 0 -> 468 bytes .../Art/UI/unit-display-red-darker.aseprite | Bin 0 -> 794 bytes .../Assets/Art/UI/unit-display-red-darker.png | Bin 0 -> 457 bytes .../Art/UI/unit-display-red-lighter.aseprite | Bin 0 -> 810 bytes .../Art/UI/unit-display-red-lighter.png | Bin 0 -> 463 bytes .../Assets/Art/UI/unit-display.aseprite | Bin 0 -> 795 bytes Johnmagotchi/Assets/Art/UI/unit-display.png | Bin 0 -> 473 bytes Johnmagotchi/Content/BaseJohnBody.png | Bin 0 -> 326 bytes Johnmagotchi/Content/BaseJohnHead.png | Bin 0 -> 341 bytes Johnmagotchi/Content/Content.mgcb | 463 ++++++++++++++++ Johnmagotchi/Content/File.spritefont | 60 ++ Johnmagotchi/Content/Fonts/File.spritefont | 60 ++ .../Content/Fonts/Karmatic-20.spritefont | 59 ++ Johnmagotchi/Content/Fonts/Karmatic.ttf | Bin 0 -> 56908 bytes .../Content/Fonts/Kemco-20.spritefont | 60 ++ Johnmagotchi/Content/Fonts/Kemco.ttf | Bin 0 -> 9276 bytes .../Content/Fonts/PixelSplitter.spritefont | 60 ++ Johnmagotchi/Content/Fonts/PixelSplitter.ttf | Bin 0 -> 47024 bytes .../Content/Fonts/ariel-20.spritefont | 60 ++ Johnmagotchi/Content/Fonts/font-sources.txt | 9 + Johnmagotchi/Content/Foods/Burger.png | Bin 0 -> 455 bytes Johnmagotchi/Content/Foods/Pizza.png | Bin 0 -> 512 bytes Johnmagotchi/Content/Foods/cake.png | Bin 0 -> 414 bytes Johnmagotchi/Content/Foods/cereal.png | Bin 0 -> 846 bytes Johnmagotchi/Content/Foods/popcorn.png | Bin 0 -> 633 bytes Johnmagotchi/Content/Foods/salad.png | Bin 0 -> 789 bytes Johnmagotchi/Content/Foods/salmon..png | Bin 0 -> 696 bytes Johnmagotchi/Content/Foods/tacos.png | Bin 0 -> 627 bytes .../Content/John-body-placeholder.png | Bin 0 -> 296 bytes .../Content/John-head-placeholder.png | Bin 0 -> 372 bytes Johnmagotchi/Content/Johns/EntreJohn.png | Bin 0 -> 665 bytes Johnmagotchi/Content/Johns/NerdJohn.png | Bin 0 -> 721 bytes Johnmagotchi/Content/Johns/accountantJohn.png | Bin 0 -> 668 bytes Johnmagotchi/Content/Johns/cena.png | Bin 0 -> 732 bytes Johnmagotchi/Content/Johns/grizzlyJohn.png | Bin 0 -> 805 bytes Johnmagotchi/Content/Johns/lukeUgly.png | Bin 0 -> 870 bytes Johnmagotchi/Content/Johns/papaBody.png | Bin 0 -> 386 bytes Johnmagotchi/Content/Johns/papajohnHead.png | Bin 0 -> 36318 bytes Johnmagotchi/Content/Johns/sportsJohn.png | Bin 0 -> 778 bytes Johnmagotchi/Content/Map-UI/cursor.png | Bin 0 -> 333 bytes Johnmagotchi/Content/Map-UI/outline-32.png | Bin 0 -> 136 bytes Johnmagotchi/Content/Map-UI/outline-36.png | Bin 0 -> 143 bytes Johnmagotchi/Content/Map-UI/outline.png | Bin 0 -> 145 bytes .../Map-UI/test-menu-item-64-28-selected.png | Bin 0 -> 386 bytes .../Content/Map-UI/test-menu-item-64-28.png | Bin 0 -> 382 bytes .../Map-UI/unit-display-blue-darker.png | Bin 0 -> 468 bytes .../Map-UI/unit-display-blue-lighter.png | Bin 0 -> 464 bytes .../Map-UI/unit-display-green-darker.png | Bin 0 -> 460 bytes .../Map-UI/unit-display-green-lighter.png | Bin 0 -> 468 bytes .../Map-UI/unit-display-red-darker.png | Bin 0 -> 457 bytes .../Map-UI/unit-display-red-lighter.png | Bin 0 -> 463 bytes Johnmagotchi/Content/Map-UI/unit-display.png | Bin 0 -> 473 bytes .../Content/Shaders/MovementTileHighlight.fx | 35 ++ .../Content/Shaders/Tiles/AttackTileShader.fx | 41 ++ .../Content/Shaders/Units/UnitTurnEnded_S.fx | 49 ++ Johnmagotchi/Content/ShadowRegular.png | Bin 0 -> 143 bytes Johnmagotchi/Content/ShopScreen.png | Bin 0 -> 7066 bytes Johnmagotchi/Content/Tiles/Grass/grass-1.png | Bin 0 -> 491 bytes Johnmagotchi/Content/Tiles/Grass/grass-2.png | Bin 0 -> 533 bytes Johnmagotchi/Content/Tiles/Grass/grass-3.png | Bin 0 -> 264 bytes Johnmagotchi/Content/Tiles/Sea/ocean.png | Bin 0 -> 426 bytes Johnmagotchi/Content/Tiles/tile-highlight.png | Bin 0 -> 2224 bytes Johnmagotchi/Content/TopBarPlaceholder.png | Bin 0 -> 1533 bytes Johnmagotchi/Content/UI/BackButtonHover.png | Bin 0 -> 709 bytes Johnmagotchi/Content/UI/FoodButton.png | Bin 0 -> 206 bytes .../Content/UI/FoodButtonHighlighted.png | Bin 0 -> 200 bytes Johnmagotchi/Content/UI/HealthbarGreen.png | Bin 0 -> 253 bytes Johnmagotchi/Content/UI/HealthbarRed.png | Bin 0 -> 258 bytes .../Content/UI/SingleButtonBG-export.png | Bin 0 -> 268 bytes .../UI/SingleButtonBGBright-export.png | Bin 0 -> 267 bytes Johnmagotchi/Content/UI/buyBarPurchased.png | Bin 0 -> 441 bytes Johnmagotchi/Content/UI/buyBarSelected.png | Bin 0 -> 442 bytes Johnmagotchi/Content/UI/foodGrid.png | Bin 0 -> 705 bytes Johnmagotchi/Content/UI/foodGridTray.png | Bin 0 -> 758 bytes Johnmagotchi/Content/UI/johnnydex.png | Bin 0 -> 10030 bytes Johnmagotchi/Content/UI/sidebar2.png | Bin 0 -> 2546 bytes Johnmagotchi/Content/UI/title.png | Bin 0 -> 33344 bytes .../Content/Units/unit-test-enemy.png | Bin 0 -> 495 bytes Johnmagotchi/Content/Units/unit-test-npc.png | Bin 0 -> 491 bytes Johnmagotchi/Content/Units/unit-test.png | Bin 0 -> 489 bytes Johnmagotchi/Content/props/bathroomRealBG.png | Bin 0 -> 120200 bytes .../Content/props/bathroomdoorclosed.png | Bin 0 -> 465 bytes .../Content/props/bathroomdooropen.png | Bin 0 -> 587 bytes Johnmagotchi/Content/props/bedfront.png | Bin 0 -> 725 bytes Johnmagotchi/Content/props/bedwhole.png | Bin 0 -> 1058 bytes Johnmagotchi/Content/sidebar-placeholder.png | Bin 0 -> 2516 bytes Johnmagotchi/Content/sidebarPlaceholder.png | Bin 0 -> 2740 bytes Johnmagotchi/Content/testJohn.jpg | Bin 0 -> 29946 bytes Johnmagotchi/Core/.DS_Store | Bin 0 -> 6148 bytes Johnmagotchi/Core/InputManager/ButtonPress.cs | 36 ++ .../Core/InputManager/InputManager.cs | 100 ++++ Johnmagotchi/Core/InputManager/MouseInput.cs | 47 ++ .../InputManager/inputMaps/InputMapGame.cs | 43 ++ .../InputManager/inputMaps/InputMapMenu.cs | 34 ++ .../inputMaps/inputMapMapEditor.cs | 59 ++ Johnmagotchi/Core/ScreenManager/GameScreen.cs | 29 + .../Core/ScreenManager/ScreenManager.cs | 226 ++++++++ Johnmagotchi/Core/tools/TibzLog.cs | 84 +++ .../Data/BattleObjects/AttackDefines.cs | 38 ++ .../Data/BattleObjects/AttackDefinitions.csv | 2 + .../CustomizerModuleDefinitions.csv | 1 + .../Data/BattleObjects/SkillDefines.cs | 37 ++ .../Data/BattleObjects/SkillDefinitions.csv | 5 + .../Data/BattleObjects/SupportDefines.cs | 46 ++ .../Data/BattleObjects/SupportDefinitions.csv | 2 + .../Data/BattleObjects/UnitDefinitions.csv | 7 + Johnmagotchi/Data/GlobalData.cs | 20 + .../Data/SaveFileData/CurrentUnitData.csv | 4 + Johnmagotchi/Data/SaveMapData/map-0.json | 7 + Johnmagotchi/Data/SaveMapData/map-1.json | 1 + Johnmagotchi/Data/SaveMapData/map-2.json | 1 + Johnmagotchi/Data/SaveMapData/map-3.json | 1 + Johnmagotchi/Data/SaveMapData/map-4.json | 1 + Johnmagotchi/Data/SaveMapData/map-5.json | 10 + Johnmagotchi/Data/SaveMapData/map-6.json | 10 + Johnmagotchi/Data/SaveMapData/map-7.json | 10 + Johnmagotchi/Data/SaveMapData/map-8.json | 10 + Johnmagotchi/Data/SaveMapData/map-9.json | 10 + Johnmagotchi/Data/readme.txt | 1 + Johnmagotchi/GameContent/.DS_Store | Bin 0 -> 6148 bytes Johnmagotchi/GameContent/Logic/BattleLogic.cs | 121 ++++ .../GameContent/Logic/BattleResults.cs | 31 ++ .../GameContent/Logic/MovementCostTable.cs | 110 ++++ Johnmagotchi/GameContent/Objects/.DS_Store | Bin 0 -> 6148 bytes .../GameContent/Objects/Maps/BattleMap.cs | 521 ++++++++++++++++++ .../Objects/Maps/MapMovementNode.cs | 217 ++++++++ .../GameContent/Objects/Maps/MapTile.cs | 167 ++++++ .../GameContent/Objects/Maps/TileTypeEnum.cs | 25 + .../GameContent/Objects/UI/MapCursor.cs | 49 ++ .../GameContent/Objects/UI/UnitDisplay.cs | 134 +++++ .../UglyUnits/BattleObjects/AttackObj.cs | 25 + .../BattleObjects/BattleObjectManager.cs | 250 +++++++++ .../UglyUnits/BattleObjects/SkillObj.cs | 18 + .../UglyUnits/BattleObjects/SupportObj.cs | 21 + .../BattleObjects/UnitCurrentStatus.cs | 52 ++ .../UglyUnits/BattleObjects/UnitStatBlock.cs | 43 ++ .../UglyUnits/Loadouts/LoadoutModule.cs | 69 +++ .../Loadouts/PlayerClasses/PlayerClass.cs | 181 ++++++ .../Objects/UglyUnits/Loadouts/UnitLoadout.cs | 107 ++++ .../UglyUnits/Loadouts/UnitLoadoutManager.cs | 12 + .../Objects/UglyUnits/UnitLoader.cs | 125 +++++ .../Objects/UglyUnits/UnitObject.cs | 226 ++++++++ .../Units/GameLogic/BaseUnitGameObject.cs | 165 ++++++ .../Objects/Units/Stats/UnitStats.cs | 43 ++ .../GameContent/Objects/Units/Unit.cs | 42 ++ .../GameContent/Objects/Units/image.png | Bin 0 -> 72045 bytes .../Screens/MapScreens/BaseMapScreen.cs | 437 +++++++++++++++ .../BattleMapScreen/BattleAnimationScreen.cs | 32 ++ .../BattleMapScreen/BattleMapScreen.cs | 327 +++++++++++ .../BattleMapScreen/BattlePreviewScreen.cs | 67 +++ .../MapScreens/MapEditor/MapEditorInfoText.cs | 75 +++ .../MapScreens/MapEditor/MapEditorScreen.cs | 233 ++++++++ .../GameContent/Screens/Menu/BaseMapMenu.cs | 184 +++++++ .../Menu/BattleMap/AfterMovementMenu.cs | 109 ++++ .../Screens/Menu/BattleMap/BattleMapMenu.cs | 115 ++++ .../Screens/Menu/MapEditor/MapEditorMenu.cs | 125 +++++ .../Screens/Menu/MapEditor/SaveSlotSelect.cs | 73 +++ .../Screens/Menu/MapEditor/ToolSelectMenu.cs | 68 +++ .../GameContent/Screens/Menu/MenuOption.cs | 102 ++++ .../GameContent/Screens/titleScreen.cs | 43 ++ Johnmagotchi/Icon.bmp | Bin 0 -> 262282 bytes Johnmagotchi/Icon.ico | Bin 0 -> 147541 bytes Johnmagotchi/Johnmagotchi.cs | 84 +++ Johnmagotchi/Johnmagotchi.csproj | 45 ++ Johnmagotchi/Program.cs | 3 + Johnmagotchi/app.manifest | 43 ++ README.md | 7 + 185 files changed, 7398 insertions(+) create mode 100644 .DS_Store create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 Johnmagotchi.sln create mode 100644 Johnmagotchi/.DS_Store create mode 100644 Johnmagotchi/.config/dotnet-tools.json create mode 100644 Johnmagotchi/.mgstats create mode 100644 Johnmagotchi/Assets/Art/Tiles/tile-highlight.aseprite create mode 100644 Johnmagotchi/Assets/Art/Tiles/tile-highlight.json create mode 100644 Johnmagotchi/Assets/Art/Tiles/tile-highlight.png create mode 100644 Johnmagotchi/Assets/Art/UI/test-menu-item-64-28.aseprite create mode 100644 Johnmagotchi/Assets/Art/UI/unit-display-blue-darker.aseprite create mode 100644 Johnmagotchi/Assets/Art/UI/unit-display-blue-darker.png create mode 100644 Johnmagotchi/Assets/Art/UI/unit-display-blue-lighter.aseprite create mode 100644 Johnmagotchi/Assets/Art/UI/unit-display-blue-lighter.png create mode 100644 Johnmagotchi/Assets/Art/UI/unit-display-green-darker.aseprite create mode 100644 Johnmagotchi/Assets/Art/UI/unit-display-green-darker.png create mode 100644 Johnmagotchi/Assets/Art/UI/unit-display-green-lighter.aseprite create mode 100644 Johnmagotchi/Assets/Art/UI/unit-display-green-lighter.png create mode 100644 Johnmagotchi/Assets/Art/UI/unit-display-red-darker.aseprite create mode 100644 Johnmagotchi/Assets/Art/UI/unit-display-red-darker.png create mode 100644 Johnmagotchi/Assets/Art/UI/unit-display-red-lighter.aseprite create mode 100644 Johnmagotchi/Assets/Art/UI/unit-display-red-lighter.png create mode 100644 Johnmagotchi/Assets/Art/UI/unit-display.aseprite create mode 100644 Johnmagotchi/Assets/Art/UI/unit-display.png create mode 100644 Johnmagotchi/Content/BaseJohnBody.png create mode 100644 Johnmagotchi/Content/BaseJohnHead.png create mode 100644 Johnmagotchi/Content/Content.mgcb create mode 100644 Johnmagotchi/Content/File.spritefont create mode 100644 Johnmagotchi/Content/Fonts/File.spritefont create mode 100644 Johnmagotchi/Content/Fonts/Karmatic-20.spritefont create mode 100644 Johnmagotchi/Content/Fonts/Karmatic.ttf create mode 100644 Johnmagotchi/Content/Fonts/Kemco-20.spritefont create mode 100644 Johnmagotchi/Content/Fonts/Kemco.ttf create mode 100644 Johnmagotchi/Content/Fonts/PixelSplitter.spritefont create mode 100644 Johnmagotchi/Content/Fonts/PixelSplitter.ttf create mode 100644 Johnmagotchi/Content/Fonts/ariel-20.spritefont create mode 100644 Johnmagotchi/Content/Fonts/font-sources.txt create mode 100644 Johnmagotchi/Content/Foods/Burger.png create mode 100644 Johnmagotchi/Content/Foods/Pizza.png create mode 100644 Johnmagotchi/Content/Foods/cake.png create mode 100644 Johnmagotchi/Content/Foods/cereal.png create mode 100644 Johnmagotchi/Content/Foods/popcorn.png create mode 100644 Johnmagotchi/Content/Foods/salad.png create mode 100644 Johnmagotchi/Content/Foods/salmon..png create mode 100644 Johnmagotchi/Content/Foods/tacos.png create mode 100644 Johnmagotchi/Content/John-body-placeholder.png create mode 100644 Johnmagotchi/Content/John-head-placeholder.png create mode 100644 Johnmagotchi/Content/Johns/EntreJohn.png create mode 100644 Johnmagotchi/Content/Johns/NerdJohn.png create mode 100644 Johnmagotchi/Content/Johns/accountantJohn.png create mode 100644 Johnmagotchi/Content/Johns/cena.png create mode 100644 Johnmagotchi/Content/Johns/grizzlyJohn.png create mode 100644 Johnmagotchi/Content/Johns/lukeUgly.png create mode 100644 Johnmagotchi/Content/Johns/papaBody.png create mode 100644 Johnmagotchi/Content/Johns/papajohnHead.png create mode 100644 Johnmagotchi/Content/Johns/sportsJohn.png create mode 100644 Johnmagotchi/Content/Map-UI/cursor.png create mode 100644 Johnmagotchi/Content/Map-UI/outline-32.png create mode 100644 Johnmagotchi/Content/Map-UI/outline-36.png create mode 100644 Johnmagotchi/Content/Map-UI/outline.png create mode 100644 Johnmagotchi/Content/Map-UI/test-menu-item-64-28-selected.png create mode 100644 Johnmagotchi/Content/Map-UI/test-menu-item-64-28.png create mode 100644 Johnmagotchi/Content/Map-UI/unit-display-blue-darker.png create mode 100644 Johnmagotchi/Content/Map-UI/unit-display-blue-lighter.png create mode 100644 Johnmagotchi/Content/Map-UI/unit-display-green-darker.png create mode 100644 Johnmagotchi/Content/Map-UI/unit-display-green-lighter.png create mode 100644 Johnmagotchi/Content/Map-UI/unit-display-red-darker.png create mode 100644 Johnmagotchi/Content/Map-UI/unit-display-red-lighter.png create mode 100644 Johnmagotchi/Content/Map-UI/unit-display.png create mode 100644 Johnmagotchi/Content/Shaders/MovementTileHighlight.fx create mode 100644 Johnmagotchi/Content/Shaders/Tiles/AttackTileShader.fx create mode 100644 Johnmagotchi/Content/Shaders/Units/UnitTurnEnded_S.fx create mode 100644 Johnmagotchi/Content/ShadowRegular.png create mode 100644 Johnmagotchi/Content/ShopScreen.png create mode 100644 Johnmagotchi/Content/Tiles/Grass/grass-1.png create mode 100644 Johnmagotchi/Content/Tiles/Grass/grass-2.png create mode 100644 Johnmagotchi/Content/Tiles/Grass/grass-3.png create mode 100644 Johnmagotchi/Content/Tiles/Sea/ocean.png create mode 100644 Johnmagotchi/Content/Tiles/tile-highlight.png create mode 100644 Johnmagotchi/Content/TopBarPlaceholder.png create mode 100644 Johnmagotchi/Content/UI/BackButtonHover.png create mode 100644 Johnmagotchi/Content/UI/FoodButton.png create mode 100644 Johnmagotchi/Content/UI/FoodButtonHighlighted.png create mode 100644 Johnmagotchi/Content/UI/HealthbarGreen.png create mode 100644 Johnmagotchi/Content/UI/HealthbarRed.png create mode 100644 Johnmagotchi/Content/UI/SingleButtonBG-export.png create mode 100644 Johnmagotchi/Content/UI/SingleButtonBGBright-export.png create mode 100644 Johnmagotchi/Content/UI/buyBarPurchased.png create mode 100644 Johnmagotchi/Content/UI/buyBarSelected.png create mode 100644 Johnmagotchi/Content/UI/foodGrid.png create mode 100644 Johnmagotchi/Content/UI/foodGridTray.png create mode 100644 Johnmagotchi/Content/UI/johnnydex.png create mode 100644 Johnmagotchi/Content/UI/sidebar2.png create mode 100644 Johnmagotchi/Content/UI/title.png create mode 100644 Johnmagotchi/Content/Units/unit-test-enemy.png create mode 100644 Johnmagotchi/Content/Units/unit-test-npc.png create mode 100644 Johnmagotchi/Content/Units/unit-test.png create mode 100644 Johnmagotchi/Content/props/bathroomRealBG.png create mode 100644 Johnmagotchi/Content/props/bathroomdoorclosed.png create mode 100644 Johnmagotchi/Content/props/bathroomdooropen.png create mode 100644 Johnmagotchi/Content/props/bedfront.png create mode 100644 Johnmagotchi/Content/props/bedwhole.png create mode 100644 Johnmagotchi/Content/sidebar-placeholder.png create mode 100644 Johnmagotchi/Content/sidebarPlaceholder.png create mode 100644 Johnmagotchi/Content/testJohn.jpg create mode 100644 Johnmagotchi/Core/.DS_Store create mode 100644 Johnmagotchi/Core/InputManager/ButtonPress.cs create mode 100644 Johnmagotchi/Core/InputManager/InputManager.cs create mode 100644 Johnmagotchi/Core/InputManager/MouseInput.cs create mode 100644 Johnmagotchi/Core/InputManager/inputMaps/InputMapGame.cs create mode 100644 Johnmagotchi/Core/InputManager/inputMaps/InputMapMenu.cs create mode 100644 Johnmagotchi/Core/InputManager/inputMaps/inputMapMapEditor.cs create mode 100644 Johnmagotchi/Core/ScreenManager/GameScreen.cs create mode 100644 Johnmagotchi/Core/ScreenManager/ScreenManager.cs create mode 100644 Johnmagotchi/Core/tools/TibzLog.cs create mode 100644 Johnmagotchi/Data/BattleObjects/AttackDefines.cs create mode 100644 Johnmagotchi/Data/BattleObjects/AttackDefinitions.csv create mode 100644 Johnmagotchi/Data/BattleObjects/CustomizerModuleDefinitions.csv create mode 100644 Johnmagotchi/Data/BattleObjects/SkillDefines.cs create mode 100644 Johnmagotchi/Data/BattleObjects/SkillDefinitions.csv create mode 100644 Johnmagotchi/Data/BattleObjects/SupportDefines.cs create mode 100644 Johnmagotchi/Data/BattleObjects/SupportDefinitions.csv create mode 100644 Johnmagotchi/Data/BattleObjects/UnitDefinitions.csv create mode 100644 Johnmagotchi/Data/GlobalData.cs create mode 100644 Johnmagotchi/Data/SaveFileData/CurrentUnitData.csv create mode 100644 Johnmagotchi/Data/SaveMapData/map-0.json create mode 100644 Johnmagotchi/Data/SaveMapData/map-1.json create mode 100644 Johnmagotchi/Data/SaveMapData/map-2.json create mode 100644 Johnmagotchi/Data/SaveMapData/map-3.json create mode 100644 Johnmagotchi/Data/SaveMapData/map-4.json create mode 100644 Johnmagotchi/Data/SaveMapData/map-5.json create mode 100644 Johnmagotchi/Data/SaveMapData/map-6.json create mode 100644 Johnmagotchi/Data/SaveMapData/map-7.json create mode 100644 Johnmagotchi/Data/SaveMapData/map-8.json create mode 100644 Johnmagotchi/Data/SaveMapData/map-9.json create mode 100644 Johnmagotchi/Data/readme.txt create mode 100644 Johnmagotchi/GameContent/.DS_Store create mode 100644 Johnmagotchi/GameContent/Logic/BattleLogic.cs create mode 100644 Johnmagotchi/GameContent/Logic/BattleResults.cs create mode 100644 Johnmagotchi/GameContent/Logic/MovementCostTable.cs create mode 100644 Johnmagotchi/GameContent/Objects/.DS_Store create mode 100644 Johnmagotchi/GameContent/Objects/Maps/BattleMap.cs create mode 100644 Johnmagotchi/GameContent/Objects/Maps/MapMovementNode.cs create mode 100644 Johnmagotchi/GameContent/Objects/Maps/MapTile.cs create mode 100644 Johnmagotchi/GameContent/Objects/Maps/TileTypeEnum.cs create mode 100644 Johnmagotchi/GameContent/Objects/UI/MapCursor.cs create mode 100644 Johnmagotchi/GameContent/Objects/UI/UnitDisplay.cs create mode 100644 Johnmagotchi/GameContent/Objects/UglyUnits/BattleObjects/AttackObj.cs create mode 100644 Johnmagotchi/GameContent/Objects/UglyUnits/BattleObjects/BattleObjectManager.cs create mode 100644 Johnmagotchi/GameContent/Objects/UglyUnits/BattleObjects/SkillObj.cs create mode 100644 Johnmagotchi/GameContent/Objects/UglyUnits/BattleObjects/SupportObj.cs create mode 100644 Johnmagotchi/GameContent/Objects/UglyUnits/BattleObjects/UnitCurrentStatus.cs create mode 100644 Johnmagotchi/GameContent/Objects/UglyUnits/BattleObjects/UnitStatBlock.cs create mode 100644 Johnmagotchi/GameContent/Objects/UglyUnits/Loadouts/LoadoutModule.cs create mode 100644 Johnmagotchi/GameContent/Objects/UglyUnits/Loadouts/PlayerClasses/PlayerClass.cs create mode 100644 Johnmagotchi/GameContent/Objects/UglyUnits/Loadouts/UnitLoadout.cs create mode 100644 Johnmagotchi/GameContent/Objects/UglyUnits/Loadouts/UnitLoadoutManager.cs create mode 100644 Johnmagotchi/GameContent/Objects/UglyUnits/UnitLoader.cs create mode 100644 Johnmagotchi/GameContent/Objects/UglyUnits/UnitObject.cs create mode 100644 Johnmagotchi/GameContent/Objects/Units/GameLogic/BaseUnitGameObject.cs create mode 100644 Johnmagotchi/GameContent/Objects/Units/Stats/UnitStats.cs create mode 100644 Johnmagotchi/GameContent/Objects/Units/Unit.cs create mode 100644 Johnmagotchi/GameContent/Objects/Units/image.png create mode 100644 Johnmagotchi/GameContent/Screens/MapScreens/BaseMapScreen.cs create mode 100644 Johnmagotchi/GameContent/Screens/MapScreens/BattleMapScreen/BattleAnimationScreen.cs create mode 100644 Johnmagotchi/GameContent/Screens/MapScreens/BattleMapScreen/BattleMapScreen.cs create mode 100644 Johnmagotchi/GameContent/Screens/MapScreens/BattleMapScreen/BattlePreviewScreen.cs create mode 100644 Johnmagotchi/GameContent/Screens/MapScreens/MapEditor/MapEditorInfoText.cs create mode 100644 Johnmagotchi/GameContent/Screens/MapScreens/MapEditor/MapEditorScreen.cs create mode 100644 Johnmagotchi/GameContent/Screens/Menu/BaseMapMenu.cs create mode 100644 Johnmagotchi/GameContent/Screens/Menu/BattleMap/AfterMovementMenu.cs create mode 100644 Johnmagotchi/GameContent/Screens/Menu/BattleMap/BattleMapMenu.cs create mode 100644 Johnmagotchi/GameContent/Screens/Menu/MapEditor/MapEditorMenu.cs create mode 100644 Johnmagotchi/GameContent/Screens/Menu/MapEditor/SaveSlotSelect.cs create mode 100644 Johnmagotchi/GameContent/Screens/Menu/MapEditor/ToolSelectMenu.cs create mode 100644 Johnmagotchi/GameContent/Screens/Menu/MenuOption.cs create mode 100644 Johnmagotchi/GameContent/Screens/titleScreen.cs create mode 100644 Johnmagotchi/Icon.bmp create mode 100644 Johnmagotchi/Icon.ico create mode 100644 Johnmagotchi/Johnmagotchi.cs create mode 100644 Johnmagotchi/Johnmagotchi.csproj create mode 100644 Johnmagotchi/Program.cs create mode 100644 Johnmagotchi/app.manifest create mode 100644 README.md diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..e2ccbf444f05a07ee66b35b80ef7c89766d573a8 GIT binary patch literal 6148 zcmeHK&2G~`5S~q4x*rR^Igj0Ba6|O@JBza8yF;CKkUC z@{`U)Y%Iu~gSh5^ICzsLZ6yB6GoE`*THe80=-WziRlR?Clsk2d~o z_-eg!da*m}53cm5y~5d0l}AJso`HZKBoKp#GZ2u$A+|$*G)VPWU;H!*2ieBPS5{iG zmT#=^6<*$`HVhaB{u~2zKG>*)j>cS}JUXzDPXI&<%~G&VZwbn= zH98t|h3G+HDiu+sGX2D0Djn^%j&n5T3ROBV{rF&dWTsyzOpcEI+cF%OqtKLw0mHy7 z152t|qx=8q;`je-l4%(R3->q|tqr28deTPayak)a7f`z`0WreQd dHB>3+v#EmUXv`I&1;zXbNE%FG82GCU`~a~>mPG&n literal 0 HcmV?d00001 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9491a2f --- /dev/null +++ b/.gitignore @@ -0,0 +1,363 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Oo]ut/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd \ No newline at end of file diff --git a/Johnmagotchi.sln b/Johnmagotchi.sln new file mode 100644 index 0000000..a03b359 --- /dev/null +++ b/Johnmagotchi.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.8.34322.80 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Johnmagotchi", "Johnmagotchi\Johnmagotchi.csproj", "{40FB5809-9EC3-4598-90E6-EBC17480B5A5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {40FB5809-9EC3-4598-90E6-EBC17480B5A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {40FB5809-9EC3-4598-90E6-EBC17480B5A5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {40FB5809-9EC3-4598-90E6-EBC17480B5A5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {40FB5809-9EC3-4598-90E6-EBC17480B5A5}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {BAA84E59-714D-4D99-896C-58F4EB154DEE} + EndGlobalSection +EndGlobal diff --git a/Johnmagotchi/.DS_Store b/Johnmagotchi/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..061c91ce39dcd36ef05df64f5abfe6f20e37725c GIT binary patch literal 6148 zcmeHK!A{#i5S;}>93rF~K;^g+*GLdb1640p0CC3%4uDd-c3Z2)i(-cytVq7L{UG=f zzK5Be1rb6xA%vnGY38kGXLd7B+T9EQi0&Y212h4^MJ05W(7YftPdXuU#QasY&=&3%$;V{1nQx&4`HoQucyx82l z6La&xefQi|E-385fp>G8}!fU>sYBYd>9AeNfHlx&6Pcs6+x24eVvd*F@~I< zCRwD0T{Xy}T<7{c;nv-Hueny1+uQAy+-kQ+Em?l;d}+zfR%bM-yQ}LP-;R2J(#uT! zV{QfgZjxn&NBbW~kM&&p{VY}4FZ5A-0}dg8OC(^7iYHayynEH3%JTE>4pzGRO3{D0 zys1SKDN~B$ds?Nm!jzC_Eb(5}&IkkMpty}0smGRK8L$kz9RqYfNK``4V8y7f4m7$2 zKy=Wp1;^A&P>wX{8LSv_21RfxBBu(|VhB!0zcg{4!HSX7L73)4n4N{`P=wwc*OxjR zgvV&DWxz5p&cHl>HtGF8nBM=7C)qE{fMsB&7!c0Bzu(1@%-cFq9KE#?^*bsF#Z`D)CuxA_8LSx5gJS;(Xd0}s47@7?_o|zi%K!iX literal 0 HcmV?d00001 diff --git a/Johnmagotchi/.config/dotnet-tools.json b/Johnmagotchi/.config/dotnet-tools.json new file mode 100644 index 0000000..efabe22 --- /dev/null +++ b/Johnmagotchi/.config/dotnet-tools.json @@ -0,0 +1,36 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "dotnet-mgcb": { + "version": "3.8.1.303", + "commands": [ + "mgcb" + ] + }, + "dotnet-mgcb-editor": { + "version": "3.8.1.303", + "commands": [ + "mgcb-editor" + ] + }, + "dotnet-mgcb-editor-linux": { + "version": "3.8.1.303", + "commands": [ + "mgcb-editor-linux" + ] + }, + "dotnet-mgcb-editor-windows": { + "version": "3.8.1.303", + "commands": [ + "mgcb-editor-windows" + ] + }, + "dotnet-mgcb-editor-mac": { + "version": "3.8.1.303", + "commands": [ + "mgcb-editor-mac" + ] + } + } +} \ No newline at end of file diff --git a/Johnmagotchi/.mgstats b/Johnmagotchi/.mgstats new file mode 100644 index 0000000..eab26b3 --- /dev/null +++ b/Johnmagotchi/.mgstats @@ -0,0 +1 @@ +Source File,Dest File,Processor Type,Content Type,Source File Size,Dest File Size,Build Seconds diff --git a/Johnmagotchi/Assets/Art/Tiles/tile-highlight.aseprite b/Johnmagotchi/Assets/Art/Tiles/tile-highlight.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..b91df36b3abd99734753c730e94e2e2f4e9bc551 GIT binary patch literal 9141 zcmeI1eKb^Q9LJxl!MubSjAX5uFV&iy^-xp(e-&iDB} z-=~5OK-*y=K;Z`q5CA|3JU%r7KoB*c4s+N~7yrkzw`u_NNwM;~%I;tQ4^67Jc@Zl1EbP5c?27pK;f-xW<07e4?0~jX-=)mZ>%@)S+i(DAFZ+u{s_P-pC`{d{6 zOyOu4>cmlF!Zg4GkKh$+!lKv3M21l0J>Y|mG+7T#;2j(r8cnqyPEQy~0x&vlw-x>v zb?R_-Xk-xC``(fl;qQL-%5?05;=d1!uf zSz?xb3Az7XPeVV|G`sKB&5+~4n+!E8?GI^TL}AAzyW$#h%Q+s!y5>)7mX=4|%5wN3 zuIXikLDS5Eo{+{x2l;o*!lU`|c6O}IYLD0_wpP1n+#U$CqrI&G@oq+H7A9btc(F~4 zNyR+zSJ{D6E6l{b&n6!GBQwLx#knhuVRL6MJ?W0Y+)Xx>>9sCCN9%{WBe-1q6F&IU zt+zyRI!=b&TCFV^!WYdJTXBiBhu33Y*9VtIT#xaZR-45%3m}#7cnVi zT>&01W!S&ML&gTbpZH#Z(cI8Gx!r)4CqW8+!OJxT-{B1gqHvOE0 zPsk}TSuhR0b@dN0jeYei!YJxRT>UgYdpe$_30e%TtJlc85C27DyGuF>Cv&%hKwh5i zDqf34ez$aqpr-bTMF?YA?S_IfdVWT78&kXsEAYfv;r37O{5#dUCuAG9G z(sQ`0UZL$A*1c@j3sVmosk&OAAB`dFl8j5ahN$s^g#A2I{)!oc?0N0ng$a%7z-9<_ zGgBd=q&gC=2oWxGIUm`?@WIVsMC$pz+j5NG!(J*T>uz-Y>3p&;RE{W`z}Q_TC02$S z_!MtWQKt^!P;y(F(Sn3tvUc_>uWte9UWHPos2EXFM%F20gv(s%(AFW@$COAMk!rbq z)Ga_|`Vk!D(F@twzi@bp$q+a4^;0qWx~Tz=o|@046^Q4sopRsr%&Xb+y==aDUV{=W zRiG#-C=rT40c!f%+E7c(7*+(4hZ?7#5>_FY&vhQ_y)jSvh)AhtmEfNlX?XQr{gXl$ z0BD&gVx_`FNim61hza6vqCv?L1ki@39FKO%20eSqNy(nx-fbyudf0T@;SApvQ#GNp zAgRM(W?TxJg+{U)cOSV#EBR2xYWoWpX#tS=5G71kk)oueY#N7@=X+6DmKe_nUL(fbVUIdr#1N_0+m5R~`TR8jV%R;LGSH%~2%gMTHOiy$4 zp3NaW+5FXgMJ52GMWb#O zDm;`FkG13D;R5mCjo|V8DlMP54$!62S`2?7^;#RxV?9BlH$n$?GpPU?DZ}fW^dqyp z8Ki1E=UbE}0LZ_fp{gaZvRZ2jmc$H5iR&;W4ICXr&|9OGBXrshOOq99)t1E2D28lN zVlGibKTfmK#5QQ*L;Lr(Gr+KY*!?AILO zT`7wG&Om>h+(O-s`C+GktL81X@c|7yQ4M$iaARUulS za@CYoM-;efBpD;TLb5%vj3~sRJRXPEBdx@x2p>wZ3?!)V$FbYOZ0l>{sQDA!1#m+r z6MD00upF6U<~Ycn1b}TSx?5$_D=R4qYQ0e`;R< literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Assets/Art/Tiles/tile-highlight.json b/Johnmagotchi/Assets/Art/Tiles/tile-highlight.json new file mode 100644 index 0000000..9931cd1 --- /dev/null +++ b/Johnmagotchi/Assets/Art/Tiles/tile-highlight.json @@ -0,0 +1,146 @@ +{ "frames": { + "tile-highlight 0.aseprite": { + "frame": { "x": 0, "y": 0, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 }, + "sourceSize": { "w": 40, "h": 40 }, + "duration": 100 + }, + "tile-highlight 1.aseprite": { + "frame": { "x": 40, "y": 0, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 }, + "sourceSize": { "w": 40, "h": 40 }, + "duration": 100 + }, + "tile-highlight 2.aseprite": { + "frame": { "x": 80, "y": 0, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 }, + "sourceSize": { "w": 40, "h": 40 }, + "duration": 100 + }, + "tile-highlight 3.aseprite": { + "frame": { "x": 120, "y": 0, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 }, + "sourceSize": { "w": 40, "h": 40 }, + "duration": 100 + }, + "tile-highlight 4.aseprite": { + "frame": { "x": 160, "y": 0, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 }, + "sourceSize": { "w": 40, "h": 40 }, + "duration": 100 + }, + "tile-highlight 5.aseprite": { + "frame": { "x": 200, "y": 0, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 }, + "sourceSize": { "w": 40, "h": 40 }, + "duration": 100 + }, + "tile-highlight 6.aseprite": { + "frame": { "x": 240, "y": 0, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 }, + "sourceSize": { "w": 40, "h": 40 }, + "duration": 100 + }, + "tile-highlight 7.aseprite": { + "frame": { "x": 280, "y": 0, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 }, + "sourceSize": { "w": 40, "h": 40 }, + "duration": 100 + }, + "tile-highlight 8.aseprite": { + "frame": { "x": 320, "y": 0, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 }, + "sourceSize": { "w": 40, "h": 40 }, + "duration": 100 + }, + "tile-highlight 9.aseprite": { + "frame": { "x": 360, "y": 0, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 }, + "sourceSize": { "w": 40, "h": 40 }, + "duration": 100 + }, + "tile-highlight 10.aseprite": { + "frame": { "x": 400, "y": 0, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 }, + "sourceSize": { "w": 40, "h": 40 }, + "duration": 100 + }, + "tile-highlight 11.aseprite": { + "frame": { "x": 440, "y": 0, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 }, + "sourceSize": { "w": 40, "h": 40 }, + "duration": 100 + }, + "tile-highlight 12.aseprite": { + "frame": { "x": 480, "y": 0, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 }, + "sourceSize": { "w": 40, "h": 40 }, + "duration": 100 + }, + "tile-highlight 13.aseprite": { + "frame": { "x": 520, "y": 0, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 }, + "sourceSize": { "w": 40, "h": 40 }, + "duration": 100 + }, + "tile-highlight 14.aseprite": { + "frame": { "x": 560, "y": 0, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 }, + "sourceSize": { "w": 40, "h": 40 }, + "duration": 100 + }, + "tile-highlight 15.aseprite": { + "frame": { "x": 600, "y": 0, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 }, + "sourceSize": { "w": 40, "h": 40 }, + "duration": 100 + } + }, + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.10.1-x64", + "image": "tile-highlight.png", + "format": "I8", + "size": { "w": 640, "h": 40 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer 1", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } +} diff --git a/Johnmagotchi/Assets/Art/Tiles/tile-highlight.png b/Johnmagotchi/Assets/Art/Tiles/tile-highlight.png new file mode 100644 index 0000000000000000000000000000000000000000..b4bd4a926b168f8d109440a84fb4d7d58eeef000 GIT binary patch literal 680 zcmeAS@N?(olHy`uVBq!ia0y~yU}^xeH8_}oWaQ!9yMYvAage(c!@6@aFM%Az0G|-o z|NsAQ-@ZLMI$BIjOgx(3tX3~;UqZq+zmLB^Kv4M6$#Fo%+$BMN!3;pvU@&E8$^mT| zpbc`KE{-7;bKXw9*mqcghvn~?|Med{*Dh+C^P2;|LVof2W!Y$bIx>A`aoB@>M& zoC}V8lDtwlIf7@-qoS!GIks+B$Esbr|2Z8ypBk@77TTzhA+r>$YU7LukuC8TtTZ;( zu$3;^dSuZ8&ox18V4r#Fbe8gSciS6*sZtC z*`d=^_D9af7fHqiyPm7FD`>hTT|H=e1gPwhlS-I;fj&^GSwmCBbB)%H=@C3Ox3~j? zJj}QogifaixIgaY3=BG<19r_t4KZf><$?08u8xm2Si!1}0-gQ0=^EH`%4=1{SbdYG8m(|nDrNLd@?2BxkkNf) rQbcaTed)~~YI>jjcVo(GJ0~yG+j_F+@SNMg1jOL!>gTe~DWM4f6kRLk literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Assets/Art/UI/test-menu-item-64-28.aseprite b/Johnmagotchi/Assets/Art/UI/test-menu-item-64-28.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..da5bd6fb5f4cea13f869604627bb9f5ebfe091cd GIT binary patch literal 659 zcmcJNze~eF6vtn*{=mh6Aayc0ITjpRu%PE6g?4BQQpdwWDWXzAFbEww7D1>Ek~*Dq z5nM7Bw@%WrICT-?q5(ldmpYv9n~K&yz!&br{v#H6{_rCbPL1$@MP4&jIC5-Ujm46c{5I=jm9bP4*|yD8N-<;E8dEenOxg3` zbpS5~Go{MRiq{Bzmzg*q_&XCmz&$EJpF|lxt3byGy8$|!sbu6{z5w_sy_o<2 literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Assets/Art/UI/unit-display-blue-darker.aseprite b/Johnmagotchi/Assets/Art/UI/unit-display-blue-darker.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..2741c5036e2444adf193a0d309cdf9027e524ad7 GIT binary patch literal 795 zcmb1UW?*=*l#$^8Ljr>W10w?iLkbWhfGPtcNRUAQ2x$RkGchpy`p5#dl?7;l7!b27 zfUQKb?gx-9sh|oKQ9+UcGygL%C@Gi#NmmUUAem-q2qgQ%tbyeHLNy?Hb3q!Ae0O*j zko^703`ov=8UQ4-_89<4^C@{i(mPWhNCtVU07)YoOCV`)Ujifz5}JTyblyWCnLPVH zkc>b31W2B~{Rc??2Lc9$*=x50$(FiyAeot!1tcTGf`DY1Qx}k2V`Ky*Z-yrW$?Mg- zfMox4FCf{K53=1dy?Qpx7Z8sXAAJcF5ds=34-{Zg07elU05veMGx#J{rWPp}#sR~L zRRJRR9~h7ju#X{@p<>S4%Lh3RIS4ph%yrb>H1|oG=(Y^WvIQ)HPI*ci&-OQ#M?5oX z-+$TWzWR-whb6vmoE3kc`Tm0Ht`h%?m;M&^ygprKKkq-&zgh1zFWI{8TK;14JOAgW zdH+p>@;$zbyqu?WH+Tt1#}E|Ud)xL6%-I>Y|9)y~D*c{p{95+SRIms6^RBW10w?iLkbWhfI0&sNRUAQ2x$S9GBGgx`p5#dl?7;l7!b27 zfUQKbjs++nsh|!OQA3geGygL%C@Gi#NmmUUAem-q2qgQ%tbyeHLNy?Hb3q!Ae0O*j zko^703`ov=8UQ4-_89<4^C@{i(mPWhNCtVU07)YoOCV`)Ujifz5}JTyblyWCnLPVH zkc>b31W2B~{Rc??2Lc9$*=x50$(FiyAeot!1tcTGf`DY1Qx}k2V`Ky*Z-yrW$?Mg- zfMox4FCf{K53=1dy?Qpx7Z8sXAAJcF5ds>^z!0LNGo67!Im>2|JW!HF0T^9y0MyLD z&ft?+nOdY^7y}FaKZr=O5p(FZcW7ulfnsOZ+Fk z)4XKs8edw!^KN24jJs>O$9IvJ^OV3EhMwSy%kLg`z?^;i-TZuwh;ndsxe$*ak%x|{@``~^U`M-@4x=`>5KO9I}A%W8%!7{fMsVfcnC9OGAZ~DJ;Ac~ z=HFibdjI&_r;^i&3E6od&jP&@eJ(Ao&z2=8apunYX!~<9XU@Etmp1J`|J?I;a&0AK jy43|TnHU%vriH)QBqo#IfBQZ#iWody{an^LB{Ts5>mH_- literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Assets/Art/UI/unit-display-green-darker.aseprite b/Johnmagotchi/Assets/Art/UI/unit-display-green-darker.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..641755dc9a030941f032b829d6825d528c146e63 GIT binary patch literal 806 zcmY#mW?*=*l#$^8Ljr>W10w?iLkbWhfI0&sNRUAQ2x$S9F)=Xw`p5#dl?7;l7!b27 zfUQKbjs++nsh|!OQA3geGygL%C@Gi#NmmUUAem-q2qgQ%tbyeHLNy?Hb3q!Ae0O*j zko^703`ov=8UQ4-_89<4^C@{i(mPWhNCtVU07)YoOCV`)Ujifz5}JTyblyWCnLPVH zkc>b31W2B~{Rc??2Lc9$*=x50$(FiyAeot!1tcTGf`DY1Qx}k2V`Ky*Z-yrW$?Mg- zfMox4FCf{K53=1dy?Qpx7Z8sXAAJcF5ds>^z!0LNGo67!Im>2|JW!HF0T^9y0MyLD z&ft?+nOdY^7z+#{Rt1RMe_)_Oz&?gphKf0FFCXMQ7a(G}pDe{b$#d7leQX LZ5a;+=qdsL@eB+> literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Assets/Art/UI/unit-display-green-darker.png b/Johnmagotchi/Assets/Art/UI/unit-display-green-darker.png new file mode 100644 index 0000000000000000000000000000000000000000..bdeed55983c2fca0c0349d39a7870cd030ef9669 GIT binary patch literal 460 zcmeAS@N?(olHy`uVBq!ia0vp^2Y@(%gAGV}AE!-5%)&wMKU|48QWfp|rROJ&dH7`7Fee*UqoZsyLpKUErjA5J_y^FjEV>tCav z+cbIzGh{L;ygfbt!R)W^Dpxx`XpgObK0&&{gmHoz!zC7nSqu;rz6?t^hn(Q8caM+N z#on)v%QxrBInN9A%;~3RUfyv&AU190^6g(wpLu)c%sY$Cd+bY0KkxXOP@p%@VF@QN cLZadrFO>)#&6HSr7RY1pboFyt=akR{035ZWF#rGn literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Assets/Art/UI/unit-display-green-lighter.aseprite b/Johnmagotchi/Assets/Art/UI/unit-display-green-lighter.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..1c45ec2b329125e048c15630c94c2ff8588cf3ea GIT binary patch literal 818 zcmXqFW?*=*l#$^8Ljr>W10w?iLkbWhfF=VYNRUAQ2x$Q}F)=Xw`p5#dl?7;l7!b27 zfUQKbP5>w%sh|lJ(Lj;`GygL%C@Gi#NmmUUAem-q2qgQ%tbyeHLNy?Hb3q!Ae0O*j zko^703`ov=8UQ4-_89<4^C@{i(mPWhNCtVU07)YoOCV`)Ujifz5}JTyblyWCnLPVH zkc>b31W2B~{Rc??2Lc9$*=x50$(FiyAeot!1tcTGf`DY1Qx}k2V`Ky*Z-yrW$?Mg- zfMox4FCf{K53=1dy?Qpx7Z8sXAAJcF5ds>^z!0LNGo67!Im>1d1H&w^$OAvW+44Yz zEDFG=g9D&J4D1X(iIu5E3Wl-3;9^yP$o&TfFa+#lh-Ijl^Y-#V&O;6Y4i|GBUvF+) z!jQd{y*r?ZL(yDt%9H(#4_?iVZ(|GF)#zJk9vv`Wx$C zZ$DSbG*OM=5{tvF>GL1df1h3+&C6u}@@3Y!{l({a9cD3j2s30dDfluh;cPHroB&oi z)C6+W10w?iLkbWhfGPtcNRUAQ2x$RkF)=Xw`p5#dl?7;l7!b27 zfUQKb?gx-9sh|oKQ9+UcGygL%C@Gi#NmmUUAem-q2qgQ%tbyeHLNy?Hb3q!Ae0O*j zko^703`ov=8UQ4-_89<4^C@{i(mPWhNCtVU07)YoOCV`)Ujifz5}JTyblyWCnLPVH zkc>b31W2B~{Rc??2Lc9$*=x50$(FiyAeot!1tcTGf`DY1Qx}k2V`Ky*Z-yrW$?Mg- zfMox4FCf{K53=1dy?Qpx7Z8sXAAJcF5ds=34-{Zg07elU05veMGx#J{rWPp}#sb5M zRRJRR9~h7ju#X{@p<>S4%Lh3RIS4ph%ym5N5gWH9Y4wIy4*|s|YE6^=n1A3q9rNtN z_p04z!!34PmiQcTcK`dv_zSkKyOw9X{AY9QZ|-jS_4SOqmsNL__)mPN`D@wl(RWYOlUtE6oumk3o+wZ2Ei>%o#KRfdMgB4)GDyFNFx{3gU CnheVT literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Assets/Art/UI/unit-display-red-darker.png b/Johnmagotchi/Assets/Art/UI/unit-display-red-darker.png new file mode 100644 index 0000000000000000000000000000000000000000..8f4f4e247c0e938bd2989fd64d0b36b06cfde8ce GIT binary patch literal 457 zcmeAS@N?(olHy`uVBq!ia0vp^2Y@(%gAGV}AETV# z+j;zQrk?TX<9}yo^Dx)9GI-pMt!B7!>g}1IxqoenXZ%!YXuq6!dgg<0nd@JppW8Hg z2s30dDZD*B|H1FwyHAHTAK<@T|9paUg9+mVHHJ$p4zm~_DtsB1a1J@aTkjqpD~!Eg z|8Bc9>$c}?3SducNwxo6^j0x}`}CR1w|`YWGcew~`;5+e{=4VqY?tF%cT~8;gpq;4 b;k35PMxn)hZ~k2d#tnm~tDnm{r-UW|)#aW* literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Assets/Art/UI/unit-display-red-lighter.aseprite b/Johnmagotchi/Assets/Art/UI/unit-display-red-lighter.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..28f774e58c874366547036124b17ee33a979c1f6 GIT binary patch literal 810 zcmdO5W?*=*l#$^8Ljr>W10w?iLkbWhfCd92NRUAQ2x$RUF)=Xw`p5#dl?7;l7!b27 zfUQKbjteLtsh|NBQAd&iGygL%C@Gi#NmmUUAem-q2qgQ%tbyeHLNy?Hb3q!Ae0O*j zko^703`ov=8UQ4-_89<4^C@{i(mPWhNCtVU07)YoOCV`)Ujifz5}JTyblyWCnLPVH zkc>b31W2B~{Rc??2Lc9$*=x50$(FiyAeot!1tcTGf`DY1Qx}k2V`Ky*Z-yrW$?Mg- zfMox4FCf{K53=1dy?Qpx7Z8sXAAJcF5ds>^z!0LNGo67!Im>1d1H&w!h&)gUivlpx z-~ea@13QCHVr6QPf?+f;pjZ_ka{qxr3jzBWVi_vtyuEyo^N@pp!^K?3*&CNF3FG!K z_YzQiqSiF&kNF3_(=pFJl+Sv8oJGA{^0A@W=l9hQ#7q1qzSE4_y}xhcp10p0f7O3* z0W5OK*7bf#{r_%8Bt-VhZ0wWZoZ8S0md`+k4rWxf6Gc-}T^ N3vICAJeJqV`T&-H4AuYu literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Assets/Art/UI/unit-display-red-lighter.png b/Johnmagotchi/Assets/Art/UI/unit-display-red-lighter.png new file mode 100644 index 0000000000000000000000000000000000000000..558a289c05f1ba2ef5c8ccdf3877b0ece2f864e3 GIT binary patch literal 463 zcmeAS@N?(olHy`uVBq!ia0vp^2Y@(%gAGV}AE(978JR zyuH5Bm&H)P;bLS7uY>RfM$@}uB`!}yoEhDP1DISCS_G6DY>(9IZ_;6(Tyrz-+v{I8 zAI{&E<@;>1x#o_&^-+Tl;T#QH?yh8SSQ~RjCjNTAak%k(mV#o7982LpU4M7gy`G~k zkjbRr%dn*OC+EKX`|56F3Hr)_i2+sv=xxN*qn^M_q^b9T;}dDHf+&U^mYGcw!dc>InE hcbG6TFgTp%Ui(d?^p5=eI$#Vjc)I$ztaD0e0sz~+oP_`Y literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Assets/Art/UI/unit-display.aseprite b/Johnmagotchi/Assets/Art/UI/unit-display.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..936138823478974e40e2de4aca7a804300014b1f GIT binary patch literal 795 zcmb1UW?*=*l#$^8Ljr>W10w?iLkbWhfGPtcNRUAQ2x$RkGchpy`p5#dl?7;l7!b27 zfUQKb?gx-9sh|oKQ9+UcGygL%C@Gi#NmmUUAem-q2qgQ%tbyeHLNy?Hb3q!Ae0O*j zko^703`ov=8UQ4-_89<4^C@{i(mPWhNCtVU07)YoOCV`)Ujifz5}JTyblyWCnLPVH zkc>b31W2B~{Rc??2Lc9$*=x50$(FiyAeot!1tcTGf`DY1Qx}k2V`Ky*Z-yrW$?Mg- zfMox4FCf{K53=1dy?Qpx7Z8sXAAJcF5ds=34-{Zg07elU05veMGx#J{rWPp}#sR~L zRRJRR9~h7ju#X{@p<>S4%Lh3RIS4ph%yryt5`KE4T=fRl)g3H?PI*ci&-OQ#M?5oX z-@iO_mj8z0cEe{IXT{%VzQ3TltHl4}rN4zew@;VZ&->5xZ`M1_OSZ1NmcN+%?)>%N ztp6rL`5xazUd~gx8@vRhV+acFy>0sj=Io5ye?PS~m3~h)el7cED%gYk2UbK@0RW!2 B4mbb+ literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Assets/Art/UI/unit-display.png b/Johnmagotchi/Assets/Art/UI/unit-display.png new file mode 100644 index 0000000000000000000000000000000000000000..990ed136b16f0e144ef9530e594333d458ea0780 GIT binary patch literal 473 zcmeAS@N?(olHy`uVBq!ia0vp^2Y@(%gAGV}AE_c1TG;i(?FFNkLSv7JdxV%%2J;{B!tIQQ+T{jv3`!iSmj^4ID0Sw3e2iE}oXFiucoxWwWxi@`&f z0it+F32v+2y)pj!{@2fEukQ9;-q^d75#o>BpO&ACUMVJUpFZ>V^{>KbHEC(zO*a3j qev$Jm@Abh4AvTRbbqow!{xH7DmYCk(t>_2jF?hQAxvXPx$07*naR9J=WR=W+uAP{|y(qs+Kk;)^`W(|9aWR0{Qfhu!kjg*%v2$MSwY%FAn zCs{J+c<&v*qk|6e8=u!R8hp9l{AQ<-#{vidj4`fb7zT|G0AQ_k|MNUYwa!V50kLGn z7iK`5iBlwak-a7)iAx-s0TtF-C#qz=kAYH1HsEchItFr(WA->p&_M_dG@Il2H(@id6*(J?^pJd=5;L&rv{YY$W}u-u Yz7Ta+?%Px$4@pEpR9J=Wmr)LaFbsx^@j=g|C($FpHSi>O4X%N2^##cWTl;rxE+#fHik5y~ z*%*`PA3q#CzsPxCe^#SO1ZS&j5ioUz)<*$N?8wl0Z&)lot~y0S__{1wl}R z1WI%%;60I5z*;#^AcXqN3gP#=M00#geGAOn40HCmLWiHH?zQ= zqLx}A0rNJ^ur_RJS6_avR literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/Content.mgcb b/Johnmagotchi/Content/Content.mgcb new file mode 100644 index 0000000..ceebd40 --- /dev/null +++ b/Johnmagotchi/Content/Content.mgcb @@ -0,0 +1,463 @@ + +#----------------------------- Global Properties ----------------------------# + +/outputDir:bin/$(Platform) +/intermediateDir:obj/$(Platform) +/platform:DesktopGL +/config: +/profile:Reach +/compress:False + +#-------------------------------- References --------------------------------# + + +#---------------------------------- Content ---------------------------------# + +#begin Fonts/ariel-20.spritefont +/importer:FontDescriptionImporter +/processor:FontDescriptionProcessor +/processorParam:PremultiplyAlpha=True +/processorParam:TextureFormat=Compressed +/build:Fonts/ariel-20.spritefont + +#begin Fonts/Karmatic-20.spritefont +/importer:FontDescriptionImporter +/processor:FontDescriptionProcessor +/processorParam:PremultiplyAlpha=True +/processorParam:TextureFormat=Compressed +/build:Fonts/Karmatic-20.spritefont + +#begin Fonts/Kemco-20.spritefont +/importer:FontDescriptionImporter +/processor:FontDescriptionProcessor +/processorParam:PremultiplyAlpha=True +/processorParam:TextureFormat=Compressed +/build:Fonts/Kemco-20.spritefont + +#begin Fonts/PixelSplitter.spritefont +/importer:FontDescriptionImporter +/processor:FontDescriptionProcessor +/processorParam:PremultiplyAlpha=True +/processorParam:TextureFormat=Compressed +/build:Fonts/PixelSplitter.spritefont + +#begin Map-UI/cursor.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Map-UI/cursor.png + +#begin Map-UI/outline-32.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Map-UI/outline-32.png + +#begin Map-UI/outline-36.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Map-UI/outline-36.png + +#begin Map-UI/outline.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Map-UI/outline.png + +#begin Map-UI/test-menu-item-64-28-selected.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Map-UI/test-menu-item-64-28-selected.png + +#begin Map-UI/test-menu-item-64-28.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Map-UI/test-menu-item-64-28.png + +#begin Map-UI/unit-display-blue-darker.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Map-UI/unit-display-blue-darker.png + +#begin Map-UI/unit-display-blue-lighter.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Map-UI/unit-display-blue-lighter.png + +#begin Map-UI/unit-display-green-darker.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Map-UI/unit-display-green-darker.png + +#begin Map-UI/unit-display-green-lighter.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Map-UI/unit-display-green-lighter.png + +#begin Map-UI/unit-display-red-darker.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Map-UI/unit-display-red-darker.png + +#begin Map-UI/unit-display-red-lighter.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Map-UI/unit-display-red-lighter.png + +#begin Map-UI/unit-display.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Map-UI/unit-display.png + +#begin Shaders/Tiles/AttackTileShader.fx +/importer:EffectImporter +/processor:EffectProcessor +/processorParam:DebugMode=Auto +/build:Shaders/Tiles/AttackTileShader.fx + +#begin Shaders/Units/UnitTurnEnded_S.fx +/importer:EffectImporter +/processor:EffectProcessor +/processorParam:DebugMode=Auto +/build:Shaders/Units/UnitTurnEnded_S.fx + +#begin Tiles/Grass/grass-1.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Tiles/Grass/grass-1.png + +#begin Tiles/Grass/grass-2.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Tiles/Grass/grass-2.png + +#begin Tiles/Grass/grass-3.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Tiles/Grass/grass-3.png + +#begin Tiles/Sea/ocean.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Tiles/Sea/ocean.png + +#begin Tiles/tile-highlight.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Tiles/tile-highlight.png + +#begin UI/BackButtonHover.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/BackButtonHover.png + +#begin UI/buyBarPurchased.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/buyBarPurchased.png + +#begin UI/buyBarSelected.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/buyBarSelected.png + +#begin UI/FoodButton.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/FoodButton.png + +#begin UI/FoodButtonHighlighted.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/FoodButtonHighlighted.png + +#begin UI/foodGrid.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/foodGrid.png + +#begin UI/foodGridTray.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/foodGridTray.png + +#begin UI/HealthbarGreen.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/HealthbarGreen.png + +#begin UI/HealthbarRed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/HealthbarRed.png + +#begin UI/johnnydex.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/johnnydex.png + +#begin UI/sidebar2.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/sidebar2.png + +#begin UI/SingleButtonBG-export.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/SingleButtonBG-export.png;UI/SingleButtonBG.png + +#begin UI/SingleButtonBGBright-export.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/SingleButtonBGBright-export.png;UI/SingleButtonBGBright.png + +#begin Units/unit-test-enemy.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Units/unit-test-enemy.png + +#begin Units/unit-test-npc.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Units/unit-test-npc.png + +#begin Units/unit-test.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Units/unit-test.png + diff --git a/Johnmagotchi/Content/File.spritefont b/Johnmagotchi/Content/File.spritefont new file mode 100644 index 0000000..bd33ecf --- /dev/null +++ b/Johnmagotchi/Content/File.spritefont @@ -0,0 +1,60 @@ + + + + + + + Arial + + + 12 + + + 0 + + + true + + + + + + + + + + + + ~ + + + + diff --git a/Johnmagotchi/Content/Fonts/File.spritefont b/Johnmagotchi/Content/Fonts/File.spritefont new file mode 100644 index 0000000..bd33ecf --- /dev/null +++ b/Johnmagotchi/Content/Fonts/File.spritefont @@ -0,0 +1,60 @@ + + + + + + + Arial + + + 12 + + + 0 + + + true + + + + + + + + + + + + ~ + + + + diff --git a/Johnmagotchi/Content/Fonts/Karmatic-20.spritefont b/Johnmagotchi/Content/Fonts/Karmatic-20.spritefont new file mode 100644 index 0000000..222ff0f --- /dev/null +++ b/Johnmagotchi/Content/Fonts/Karmatic-20.spritefont @@ -0,0 +1,59 @@ + + + + + + + Karmatic.ttf + + 20 + + + 0 + + + true + + + + + + + + + + + + ~ + + + + diff --git a/Johnmagotchi/Content/Fonts/Karmatic.ttf b/Johnmagotchi/Content/Fonts/Karmatic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d1df85235c97923dd54e9234999fe36452e309ba GIT binary patch literal 56908 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 Gf&PDRo=4yS literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/Fonts/Kemco-20.spritefont b/Johnmagotchi/Content/Fonts/Kemco-20.spritefont new file mode 100644 index 0000000..3674e96 --- /dev/null +++ b/Johnmagotchi/Content/Fonts/Kemco-20.spritefont @@ -0,0 +1,60 @@ + + + + + + + Kemco.ttf + + + 20 + + + 0 + + + true + + + + + + + + + + + + ~ + + + + diff --git a/Johnmagotchi/Content/Fonts/Kemco.ttf b/Johnmagotchi/Content/Fonts/Kemco.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4d41db620a9c2ec1af874ea1f92a7e818e4fe7c9 GIT binary patch literal 9276 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 literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/Fonts/PixelSplitter.spritefont b/Johnmagotchi/Content/Fonts/PixelSplitter.spritefont new file mode 100644 index 0000000..5834c6b --- /dev/null +++ b/Johnmagotchi/Content/Fonts/PixelSplitter.spritefont @@ -0,0 +1,60 @@ + + + + + + + PixelSplitter.ttf + + + 20 + + + 0 + + + true + + + + + + + + + + + + ~ + + + + diff --git a/Johnmagotchi/Content/Fonts/PixelSplitter.ttf b/Johnmagotchi/Content/Fonts/PixelSplitter.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d30e05eea173047da15b0bf65b14ea7c87f71a04 GIT binary patch literal 47024 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 + + + + + + Arial + + + 20 + + + 0 + + + true + + + + + + + + + + + + ~ + + + + diff --git a/Johnmagotchi/Content/Fonts/font-sources.txt b/Johnmagotchi/Content/Fonts/font-sources.txt new file mode 100644 index 0000000..29774cf --- /dev/null +++ b/Johnmagotchi/Content/Fonts/font-sources.txt @@ -0,0 +1,9 @@ + +All fonts used were found on dafont.com and were labeled as 100% free. +All fonts are owned by thier respective authors. +If there are any issues with the use of these fonts please contact me, preferably at tomdt9000@yahoo.com, and I will remove the font or otherwise address the issue. +If I have time to add a credits screen to the game, this info should probably be added there. + +KARMATIC ARCADE: https://www.dafont.com/vic-fieger.d852 +PIXEL SPLITTER: https://www.dafont.com/manfred-klein.d302 +KEMCO PIXEL: https://www.dafont.com/jayvee-d-enaguas.d2725 \ No newline at end of file diff --git a/Johnmagotchi/Content/Foods/Burger.png b/Johnmagotchi/Content/Foods/Burger.png new file mode 100644 index 0000000000000000000000000000000000000000..54b37fcdbde01ebb2a13cb1b3955ee0aabd6a811 GIT binary patch literal 455 zcmV;&0XY7NP)Px$fk{L`R9J=Wmp^vGFbu}!zFvZk+`t^6M`$-PGInHziLMON!lOYoQ-AZM~ch0Ht^u*+zb# zCnF9IOpUBTl!=M00RUjHDo!}@JdPRBHNe`s*Q_X2vGw5tH56^h*FnG8cVQFzsaO}vWEbwIzE8*+*}m!S|9shq1*CAk zHo*1T=dg+$5Bv*eFh^VoA|pOpA+8};Al07&StIp}zKPp!_1*-vj^_A{{vO$WedkvL x0Q1Kg+D={Nqie*s;82WaYmLT8p-?FNFAm5Rbw?1751s%3002ovPDHLkV1jKU$14B; literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/Foods/Pizza.png b/Johnmagotchi/Content/Foods/Pizza.png new file mode 100644 index 0000000000000000000000000000000000000000..64128dac2162a296ad890d7925ce2b2f50bd22b4 GIT binary patch literal 512 zcmV+b0{{JqP)Px$x=BPqR9J=Wn9Xs6Fc5{GGHHVX+yVup0DKEas_=}D%#bF0^brbh0cpVnxQ}cu z76=8QzZD@9y%|mj>3w>;!Uo97%K8@)TP{X@L$k$?7q;~`1JNNy157ZRfS4dg6AUmf zu@i8}2I`{CK)U|6dOsE>d1+DK5UL9RpsNdH0v|-;C+_rox_xOB$+1Fhe@7$*_W$`hw2u&vC%8 zfw(4Nf{TS=0Wm?S{otY)m}n5+p0FtthV|4E?fiY=GG59xJ=19x1)`@x=byDN;iPG4 z*e2UcQ`f84Xhr&OC}4Rv*G??;p8D+R`fvu83hEJCUx?Oz}0o{Oc0ec zny>B<;&T_~y`-1SZPx$SV=@dR9J=WmN8PpFc3w*85)it8m^Guryx|2j-jHaiWv%KoQjg6VyG~5oC5cp z0v{peQfbD-5?*Onq}f+$WbJ=mtrNg748t%C!x+=hf*M-TzH=l)Lr*mH1n5f~XdUzy zV}Zfd_y!07+Ul#)s-bpJ2p`@vxO%eZSSdrXj_gX5rie(2gqE=S)tU=7zFuzVe}{2( zb{;hmjW@e@5zTqXl{u6Yl?dEjPQPIO%p4h!NQhX#UDi#fT2~|z3#}cJgJ?#!pI!FV z`gnf`u3y|fX3dHE)dJ!nOCl1H1YVxsNJ>vA(h=>D9I`~NIwAmAp1frj-n6UW`u$5E zT%RLJ#0$(33z=Hyc~!B8o-GoRkOV$GYgsk9GOSIpPPo_bQ$o(6+7SPx&2uVaiR9J=Wmp^mbFc`+4*Vn0ACl02hTQ5UnM&MJpn;{!a&DtqkhhF#wbRyk~ zr{YgRxK1V=a^2cY;h4I0utZ+xG&nKZiZFq+B7g1HB@aVy5W524I}tHP+} zDgd>IoatBcU0HrhH`;Fx4PzZ_2@KyG@%O`Qa}`3UM>i0CNBxD2pP#FSoV2)xthZL) zR=VI*4WgVRq2#+L`7Q=NF!1$0Y9=_FGz|g(7>l%+K1*c<0b-ai47J$zH!rpNj0hk3 zRMxw20b*P=?Q_p4ULQ3Z@;Ai_Gs{PWummUPV*_CU0mOs78vW23l%cQaJeXo0Otsi0MVWe;Yk222W$g7YmH?(c zG)d0i2@+!|Oa{oBku;@s85@OP0K`yTu4*vijHn_2J&JHwJ;7b|1mK4J?dzvAS?>4K zK4mPli$gzeb;H{VASQ%ZZ2==z+ss0dTGeB;s>g+GW^iOCfHV^}Po~T*&CCoU0&^`1 zU855K1LFX<+%v6y6y0JTOi}V(T;h3bj3y{^Edy{A-O4r+f+ku$o0%AbXaeC;_5Umv zQPIG!1I=+^n;u1I5A|3%S&YxoPc7aB(8ccZ0C2t3WA4@>xk7b- zVhG!zRCU#4^e6(60Zn5$hN@0bU{IVX8bi%Su3xjedYF>*$(NJ>F>kFI98`>0-aXmn zsw~fgDF#ipW+a73-}V-7vTNZIi~F14fZ(8_7+0SP7HAI%?IGbpF=|uKxF|B85D5g) zM9yox9IYzMh_wT4=c|52AL||Vbtc%Aicjwz=>YQ7^zVXf>sH!CHjjC(mtMoWl6mb4 z6?~#Rz04GODsr3t&)ji#3;?U=RhB*e{MiwV0#WF7)%~MUJT{bN3oZ5eHwR%`saeb0 YA8=huW^6jn-v9sr07*qoM6N<$f?581r~m)} literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/Foods/popcorn.png b/Johnmagotchi/Content/Foods/popcorn.png new file mode 100644 index 0000000000000000000000000000000000000000..8867a11ffd20bf4520d5abb5687f36b53396aeb7 GIT binary patch literal 633 zcmV-<0*3vGP)Px%Gf6~2R9J=WS#7d{Fbv!{UPQ0O`M6fSiFrRDH7!Y6@bTb{?hK>!Bh5D3hyhpu zPGC-8tBrXq`ogjLn&&Z(T{b*i)(`;z+(zWZ6BxI#Bs)74j=hb@-yZ`)8#AGnTi4cr z?7(9%No7Y2hZb`p8~Q%#e+N12S_Ym(>NcyrmQ-Y;Q(ELY9~scH*wP=3siUj<>F)dM zpAoHNYjIhu9wV@%rtf=gC|{z@br}NFBu=n(yfqr$jyG%)<-W*g6U@wviBPQX*7@+x zNr%n6{>v8=VMLw)h^M(k(@;+Kj&<#9JqNHe)?)zOXD80M zTD$A7E+?>*XO4ufG}h(QzKD1w%_E@7rKzCmRldT2 z5mJY2nbEu|N?pBN+9|7$+8^;{o3wyhUIc(RO^Y&*;50cVyD8DrSKTi2#Gcq(5UV!Q zdcAO!PEJF2@-F13c1^$C%J&AWzLrf+1A9t|-kX@tTQ%Or7^A)DQ~keX699ey>-jPM To>--i00000NkvXXu0mjf!1yWS literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/Foods/salad.png b/Johnmagotchi/Content/Foods/salad.png new file mode 100644 index 0000000000000000000000000000000000000000..056e20c77ccf1eca3a6683c861f5c6aa885ce784 GIT binary patch literal 789 zcmV+w1M2*VP)Px%&q+iBuFBI*BU59R+(_s0wWdIeK!SC=W+N zN|cO^6ZioJ%+GM%n-3-L0x!JqLJns42`y+g*DRc?*_7BTIFuTs$ket%ZL8T@O%>Ht zk+h5UkK<^M{4C(ORX}Ykz=As0$0WqQ&h^n)qPEq251^jax!&7nGF6rlCZcnFL_m_` z-;6L^orpLv^ku8D+o)3=QyRe@tVG-?Kd+ zpHX?P=7)<&RREC62+P2dh&3W35x{Jm>Wei(1LBM7d|lHoDUiJ+S3%58v}D!)k~ z%^O-?kvvM$DHp{vle?Y)J#Z5$f zEPF;}xt2W1zE#j#0Y#exCMAy+CEgHPx%a!Eu%R9J=WR!efiFbsX^^gyh$B**CuAj`lFdW&AcELrz7-MWiZMph)*`Or>h z@@ANUU}QbNr)Pj2J9g~&PiVF(6px5i8{W3tGpoDi$6E7!IAG{L#}C~AgnoP7NeR-JR-&;A~o2D!&HqwAV8>=(X|sbe>wx#%j1356z3zabAL28Gu^5b zaif)!$euT;xgKBs2Hia)QQT9(YiR)$q*(1w9~c5PAZ$cxkYYdTO_Iz&7Tq&Zl+Uyj zC&4Wx*J!CG55P-4-mGIcmqZTRS;>iHPQX}`R1tN!S{fnKTA4@XDRTm(gw~8C zK+0JvIX2|a;}KDk@rPYnfIeR@IRVj_NrJEKhWzf4tlV{zMvgk+r8{VGdsrIoz_C{9ZO?sb;O^mnq+?Kmt&R zOw_PWiZ|zlfv^+JMM@@W+=4=)Iro#)${whelJ^A_msXK$fjT9quBC=-SRnz3)SBe8 zc5`1ZdNC^uwC_9;+V3$Eut)%kwVE3m{x4S+11iISUyvFJX(z6>P{kvV)|3`#D9(|0 zvul^BkxVrN2=({K530k!njg(Z{5j?kAj~3C{A+E+tv5fwY7)RqB58gIS{PWi(wY~R zT1o;~Gb2VAR9g>7L%oJT+IwvQj#(tAfelCi3x?f7_55t4fW-3@G1Pbl31DL)fImN5 e@3mvcFW?)dqCc~wRRS;o0000Px%ElET{R9J=WSiNq-Fc>^nUCO`{uq0BKPVL$OiPvaH7#R8pOo)Y{8%Qi2+qbAH zWyspK5|Xp<1f46n1F^B4_%~rd@<|aSvHg9=-Q@=$At52*l0ZTyFbXCnzia0fkM?4u z46f%3uZ8920iarsk&lYgc?W?;(K8ToF33q#>oEY}ZTAZRn9hgDc7O4OdnRLDOeT@- z3y=vw593Y*8V&SB$hZijU|fZKRDd3i-@Qpx<*A6CrDttycCuzHvDQh9f?)(g0V-|oM7lz-r;I2vU_oCg@LmXYnF5iMZiayh9WWvC#q6d5J39{p$myx zB_Cx35k|p+Nz~wW%Jzk-L@0EdNk4*%j4>mChpk}Al1&LyE*x`hWQ6w^1^ak?P)dAtB)s@ed~s`)KMY!dL(R N002ovPDHLkV1j2W5=j66 literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/John-body-placeholder.png b/Johnmagotchi/Content/John-body-placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..3df65724ea87bc62c51b07faafbc66542c14d747 GIT binary patch literal 296 zcmV+@0oVSCP)Px#;z>k7R9J=Wm`x6YAP|Kg#sl>lUG@U(dkGi4gnKXG(rb7lx-c|SfdbAH66bA9 zBn}^sarjZj7=s^DN&x`O6lmAmGa=MLUG^8mst%yOr@-1xt(~- u0M!8wHzZDDVJT*>gp`V|1tr&Rxq1VQ;yYXqT;rnv0000Px$E=fc|R9J=GSKASTFbtD>T_Ni+T-M7F>PHW1^0a}JYxNh-Sc+d5AxUHqk^Ipm zs8B%wlusu^3weB-Jcr~dm=*pOZjZq84pJTTLI6pK2pF#?mZj{3A_cR^0f4crv0Vg4 zb0Y;`JbZ^J_ZLI{`HK7euY zG436uln^?3)yUJKeTs;^2pQkSq|ZG&P23afnuON*U=`~Y;DJ@_Z+5|733vj&FQDgp zF!Dq4ToKAr7f~D0K;8Cq7qrN%*lK{}X=hgG#l#%}M>6dqZt2p0yDH;mlN+ zcEVXAYUE7;SBq$o1A`)52NZB@=&ToLkq-svm-RYr-kdwcW&t&4z5hoGsm2S6)T-EI SB&&J=0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0xn5JK~!i%?U*}K z!!Qtr?Nm_1J!q(a3(&d^C8;s`5K2JrI0uV}mG5IFIR~P- zVhU3Mlbr{&B1RD?;T(Y!fu*1rKd(D~NO(gK76ii#+k-?s;U#e-F8uM}2ra{V|k z2EPMZC#N@Sf8`kX6a|!k6EJHH1h|D9L;weyf|<~z0K%rJfvID}6qFJ{p{fDOL402` z27|1DDXYSWwqp5hnCx>Cq<|?#Q#f0g04yymhIEZ=XQiNIbg0#e?*mFiIzAaU^2ddH z@=Hl_4sZg1Y!MpgfFuAgi_kg;Gy;HL1YoEO(Y{syFc6_YW!oYkAPF(q)C?Xt+&phx z|J}a0K5*9Dx_*1NalJ>h&kb;no2GF;f`gbKf_v7st?T!ozDy_K*T-kyQn+UxG<8%2 z2CD~hBLHwwFux0!6=q>hLEHyI=tHxh768?KetFTinD~DBOd{)bERk$QmP76W6q5ih z%-l1M{}%!HC>DbqMCgfCioJk3{wP8U5dPbV2=jZtsQ}bD00!=Ny5KymYtn|N_lwqm zb+sBOo2dXSCFEpSDKrdb5rYZ%Y@!g;6a?qgeT2~iY8$2lNsA0B8{9bn6GF>Hv|&1k z=3o(UbODwE(;b62vlgLc5hIowIJ$s^BU4p>Vt4=o!tfF`00000NkvXXu0mjf{Vfai literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/Johns/NerdJohn.png b/Johnmagotchi/Content/Johns/NerdJohn.png new file mode 100644 index 0000000000000000000000000000000000000000..24f1263f5d87f061ae9d00533537c82e67fd235a GIT binary patch literal 721 zcmV;?0xtcDP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0%l1>K~!i%?Uy@J z!$1s%?Q|T4lGNNH6~hr2DkwvROQ;A(NVo_!lpKZ9Seunu%X+Qt#LSRyX2*~Gmj2bs zj$NGi_mpv)LmjsgSuu0OR$_`PwntP~H|Jqz{rXklz659z%=ng|O+JKZM$NH^TaMh4 z_lV}zIGO>o+#W0wl7UgPzq?w;y-rWCG1UqT0h6aDG`I$7oqCtRN_KX69rpsAoT`EE z_igd~R`n9VIm9#5Q3j?WG2u7xc(LE!zif-A+uvEhu>{rO@xy1>06qgS`!v}4qxDr( z%aSz#da6SP831U|vMh_bt~~C4buPwr{(5)z^kK} zJ%G^emXLIVZbR>L0D@~;?LovX0cT3ZYqX&kd-l6PnytAEq^vDeuazIr%AMT{6e~GU zO7|-~$r=Wm@FWMU9%wI=O3vX;4p-edu#=0*dX(1PeqGg_&_Mf(^!(Qr$84f(B?Pg(+Zas;%T-ik5%f5Bu1 zlHSQex}vuP5Iko|QW9hC9vDSVCH{5~tX8WqcDr3XGd)MI0PUlLG$GZdO$g`H9^nl5 zvJ9j#(ByX*Fy8H&KyfFM#0+@f4QUUs$r1Qm$4_<&o|k@?VzN!By?)_mcD3vd3n?Zw zz%5DdVw@$INxu67c&tpKlY>pzAU0xJVob)J6X@lWo&!`Ej-~ZYNi=K>iuNFa3vdj@ zjG-Ag3MT`z8^~#}G5-+jv>;_KEOi}y*)-W?stjb%}00000NkvXXu0mjf D=o>uc literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/Johns/accountantJohn.png b/Johnmagotchi/Content/Johns/accountantJohn.png new file mode 100644 index 0000000000000000000000000000000000000000..658a0fa102c86c7c20fbd08879b8ef3efa51f914 GIT binary patch literal 668 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 literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/Johns/papajohnHead.png b/Johnmagotchi/Content/Johns/papajohnHead.png new file mode 100644 index 0000000000000000000000000000000000000000..bceef6846635d35b6f5593b6ec48c825a4b3b43c GIT binary patch literal 36318 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 Ae*gdg literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/Map-UI/outline-32.png b/Johnmagotchi/Content/Map-UI/outline-32.png new file mode 100644 index 0000000000000000000000000000000000000000..b4a254c8c51ec987f11df02eb63f8062f2d84ce6 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvT>t<7 zzkU1m=;&xMF)|k3?#4J%UA`Z7>k44ofy`glX(f`@CW#Wxc>kD zfBW|B(b3UjVq)s5s?N`f`+-udB|(0{3_!X6G8fc9CdqobIEGmCCMPKHM05lgugVCy jxMESDt8=U%w;%&UO+KS+(nq^jK!psRu6{1-oD!Mw2=Y zNxeJ!bEg`KW4ls>(aYjgo5y;!QP$LQU6*rCERXsjo5UOyVbtU;C-ymx3x{A1(~hEC z@j?qM4t)t@<(WIs?Sh=-Q28!}&;jItkq&~`0(1$E1Cb^XWyk~uvY&G!8Y+gdK$hk{ zRouZ);1UFsqU9kEFb9INFUHZIpl&6EkWwPzU(a?teUk4F!;kOa=2@TCPVCwy==cBi zi5(q8%o1%BuJ%Yie-FLEO0U0dL$!K7L*A~9Y{kf~Heb)Iuj0sA-O3-{lZGKnOI`K@eF$E~7~x(`?2C2}yw(MUZJ zS>nyY?J>*epP)b7>JRp9s8+9**x|jAtr*$u)_d1VUJny%nbAW=!DH9{I2yjKE}qSD Jtu!vSykExJ!dUdsxe$*ak%x|{@``~^U`M-@4x=`>5KO9I}A%W8%!7{fMsVfcnC9OGAZ~DJ;Ac~ z=HFibdjI&_r;^i&3E6od&jP&@eJ(Ao&z2=8apunYX!~<9XU@Etmp1J`|J?I;a&0AK jy43|TnHU%vriH)QBqo#IfBQZ#iWody{an^LB{Ts5>mH_- literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/Map-UI/unit-display-green-darker.png b/Johnmagotchi/Content/Map-UI/unit-display-green-darker.png new file mode 100644 index 0000000000000000000000000000000000000000..bdeed55983c2fca0c0349d39a7870cd030ef9669 GIT binary patch literal 460 zcmeAS@N?(olHy`uVBq!ia0vp^2Y@(%gAGV}AE!-5%)&wMKU|48QWfp|rROJ&dH7`7Fee*UqoZsyLpKUErjA5J_y^FjEV>tCav z+cbIzGh{L;ygfbt!R)W^Dpxx`XpgObK0&&{gmHoz!zC7nSqu;rz6?t^hn(Q8caM+N z#on)v%QxrBInN9A%;~3RUfyv&AU190^6g(wpLu)c%sY$Cd+bY0KkxXOP@p%@VF@QN cLZadrFO>)#&6HSr7RY1pboFyt=akR{035ZWF#rGn literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/Map-UI/unit-display-green-lighter.png b/Johnmagotchi/Content/Map-UI/unit-display-green-lighter.png new file mode 100644 index 0000000000000000000000000000000000000000..7e151cf2a28cb8b59058c68e6b1bcfb8329b0b20 GIT binary patch literal 468 zcmeAS@N?(olHy`uVBq!ia0vp^2Y@(%gAGV}AE4_?iVZ(|GF)#zJk9vv`Wx$C zZ$DSbG*OM=5{tvF>GL1df1h3+&C6u}@@3Y!{l({a9cD3j2s30dDfluh;cPHroB&oi z)C6+TV# z+j;zQrk?TX<9}yo^Dx)9GI-pMt!B7!>g}1IxqoenXZ%!YXuq6!dgg<0nd@JppW8Hg z2s30dDZD*B|H1FwyHAHTAK<@T|9paUg9+mVHHJ$p4zm~_DtsB1a1J@aTkjqpD~!Eg z|8Bc9>$c}?3SducNwxo6^j0x}`}CR1w|`YWGcew~`;5+e{=4VqY?tF%cT~8;gpq;4 b;k35PMxn)hZ~k2d#tnm~tDnm{r-UW|)#aW* literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/Map-UI/unit-display-red-lighter.png b/Johnmagotchi/Content/Map-UI/unit-display-red-lighter.png new file mode 100644 index 0000000000000000000000000000000000000000..558a289c05f1ba2ef5c8ccdf3877b0ece2f864e3 GIT binary patch literal 463 zcmeAS@N?(olHy`uVBq!ia0vp^2Y@(%gAGV}AE(978JR zyuH5Bm&H)P;bLS7uY>RfM$@}uB`!}yoEhDP1DISCS_G6DY>(9IZ_;6(Tyrz-+v{I8 zAI{&E<@;>1x#o_&^-+Tl;T#QH?yh8SSQ~RjCjNTAak%k(mV#o7982LpU4M7gy`G~k zkjbRr%dn*OC+EKX`|56F3Hr)_i2+sv=xxN*qn^M_q^b9T;}dDHf+&U^mYGcw!dc>InE hcbG6TFgTp%Ui(d?^p5=eI$#Vjc)I$ztaD0e0sz~+oP_`Y literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/Map-UI/unit-display.png b/Johnmagotchi/Content/Map-UI/unit-display.png new file mode 100644 index 0000000000000000000000000000000000000000..990ed136b16f0e144ef9530e594333d458ea0780 GIT binary patch literal 473 zcmeAS@N?(olHy`uVBq!ia0vp^2Y@(%gAGV}AE_c1TG;i(?FFNkLSv7JdxV%%2J;{B!tIQQ+T{jv3`!iSmj^4ID0Sw3e2iE}oXFiucoxWwWxi@`&f z0it+F32v+2y)pj!{@2fEukQ9;-q^d75#o>BpO&ACUMVJUpFZ>V^{>KbHEC(zO*a3j qev$Jm@Abh4AvTRbbqow!{xH7DmYCk(t>_2jF?hQAxvX; +}; + +struct VertexShaderOutput +{ + float4 Position : SV_POSITION; + float4 Color : COLOR0; + float2 TextureCoordinates : TEXCOORD0; +}; + +float4 MainPS(VertexShaderOutput input) : COLOR +{ + return tex2D(SpriteTextureSampler,input.TextureCoordinates) * input.Color; +} + +technique SpriteDrawing +{ + pass P0 + { + PixelShader = compile PS_SHADERMODEL MainPS(); + } +}; \ No newline at end of file diff --git a/Johnmagotchi/Content/Shaders/Tiles/AttackTileShader.fx b/Johnmagotchi/Content/Shaders/Tiles/AttackTileShader.fx new file mode 100644 index 0000000..1ed0a94 --- /dev/null +++ b/Johnmagotchi/Content/Shaders/Tiles/AttackTileShader.fx @@ -0,0 +1,41 @@ +#if OPENGL + #define SV_POSITION POSITION + #define VS_SHADERMODEL vs_3_0 + #define PS_SHADERMODEL ps_3_0 +#else + #define VS_SHADERMODEL vs_4_0_level_9_1 + #define PS_SHADERMODEL ps_4_0_level_9_1 +#endif + +Texture2D SpriteTexture; + +sampler s0; + +sampler2D SpriteTextureSampler = sampler_state +{ + Texture = ; +}; + +struct VertexShaderOutput +{ + float4 Position : SV_POSITION; + float4 Color : COLOR0; + float2 TextureCoordinates : TEXCOORD0; +}; + +float4 MainPS(VertexShaderOutput input) : COLOR +{ + + float4 color = tex2D(s0, input.TextureCoordinates); + color.gb = color.gb *.5; + color.r = color.r * 1.2; + return color; +} + +technique SpriteDrawing +{ + pass P0 + { + PixelShader = compile PS_SHADERMODEL MainPS(); + } +}; \ No newline at end of file diff --git a/Johnmagotchi/Content/Shaders/Units/UnitTurnEnded_S.fx b/Johnmagotchi/Content/Shaders/Units/UnitTurnEnded_S.fx new file mode 100644 index 0000000..aa199cc --- /dev/null +++ b/Johnmagotchi/Content/Shaders/Units/UnitTurnEnded_S.fx @@ -0,0 +1,49 @@ +#if OPENGL + #define SV_POSITION POSITION + #define VS_SHADERMODEL vs_3_0 + #define PS_SHADERMODEL ps_3_0 +#else + #define VS_SHADERMODEL vs_4_0_level_9_1 + #define PS_SHADERMODEL ps_4_0_level_9_1 +#endif + +Texture2D SpriteTexture; + +sampler s0; + +sampler2D SpriteTextureSampler = sampler_state +{ + Texture = ; +}; + +struct VertexShaderOutput +{ + float4 Position : SV_POSITION; + float4 Color : COLOR0; + float2 TextureCoordinates : TEXCOORD0; +}; + +float4 MainPS(VertexShaderOutput input) : COLOR +{ + float4 color = tex2D(s0, input.TextureCoordinates); + + float avgColor = (color.r + color.g + color.b)/3; + // Using 40% color 60% 'grayscale' + //color.rb = color.g; + color.r = color.r * 0.7; + color.g = color.g * 0.7; + color.b = color.b * 0.7; + color.r = color.r * 0.8 + avgColor * 0.2; + color.g = color.g * 0.8 + avgColor * 0.2; + color.b = color.b * 0.8 + avgColor * 0.2; + + return color; +} + +technique SpriteDrawing +{ + pass P0 + { + PixelShader = compile PS_SHADERMODEL MainPS(); + } +}; \ No newline at end of file diff --git a/Johnmagotchi/Content/ShadowRegular.png b/Johnmagotchi/Content/ShadowRegular.png new file mode 100644 index 0000000000000000000000000000000000000000..2318931c7bd4e448916386f8a51117b438b185e5 GIT binary patch literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYe6k~CayA#8@b22Z198XUd#}JRs zRJ1Kn((gpmq>AKw1=10r`+rR77mG zLKQ(vDeSlCVXLA({8y7dodN+tYTAXXXd_^S*oE-S2(( zE!nrul{d~{iU9y%-0D@!-2u>ppY+>IeK^#{v}}X}E!>^w1oCPuo&Yd){p#f(uNS2~ zZ{Z|vt&dA+v$@MA_l=M9uV6cURrly0XX3|LEbbE<2HT}3iLI@TJ*Ddoe%Q#3bD!Z9 z|4z(ay?CE64?K@n@fG_|GYe0tsHx)1u=ufvogLn*q2IHC3WJ60A;s#rW2U`4+9qGb2nQyGR zE5rMZyk9V^Anl?4LY8{yr~E51gLNkllOinmP;a}O!6e``myk19rhoCnW_h`!PuD6pl_ zx#3sY@(;0?R4At28ub0W)^~WzfC>28H(D-%;=tO~L-E~|(l#-tAsPET)>>7e*5yL= zQeh?Af(LZrrx8T?biE23b9!yl>VL(_*NVTYA~ zN^A>Y_8V~}^0u4#JT|Jn_?Q>U{yH9r*h>426)>_qF6)^?iJ@eGU$p93tm1gRpKtHG zWZi5O4`8(x$Le)`xZvK};XqQ_f8^9GBrlb`$Dbr>}o$-`eC(N<(D+NLVxX~@tgHGattBUsbh@Y5p5t_ zT7qc9&k~byM+YDxK-sT?NhI)7591Z zuIJ|(auK#cVzk?=R8N|F#2bP3D}rdAxfjr%Nx! zAeVi>QyGU4;R# zd<1oE%Jr}{1sU#V3n2t7WJhW)xa<171M&vq&_P`|bz|VhyA0C9aaA`5QRJPucl@*w zk+Xh1fFBsI_N}@CrCTB3pqhbRz?=I@d>wcUK@~^C!aU_ zE}Ta<8bf5}%tGYN`>*OqOGm;uIrlu>=aGROnwfB5FOi_nrF>tLemDQ%K_WqqD;w5< zlP9++Oq!>)YuA*Y;QzSFxWmg3Gx!&9|YGo z+5#_}6!Na3XPZa4j_|=6bdLjBqR`gH`ShOgAQ$^nvY~JVnZqDEr`^M;26?h<+By|7 zf+*ccKu&a@0ii7yt)=(r+GOT<4!pSZV{5cQ9mMGh=CwJW^X%!o)exH`gW+keCXPdHdp! zp0hv{s47$=+oVU6y0*+>aBpJu=CWqj$OZ?k8tIY~&(fG8cW?od65WgE(H$p)d=t%C z?6Oqp8W@?ZuQfyQ+4@CMcHol25E<3oH0aFLlKJxn3a?Vs4W@OykIO7AbnB!jg_*z^(>ByzR5tm`z>fh~ zHfj5XE32$ysOP&8W%WCrcSQ8k<%=2T>Bt-D#9Oy3@;=vV7*AQgK>1Wwezlb*3frR` zgR~bm1aFPJ2(;Q%ch|ObXB%?)ai|4IqoX1&`tu1{_4;KPcJEZ=mGgG+S;R&HF$<4b zdo|86B*R&u*dA`hffK>SHY61oc|oS~AuI{W@pA`pnV+e7;>|nQ88J@F-n{$U>mg-x zLG3r97@1D^l5xCNG$8d3osU8MW>u&UhHO(~C2IB1BI);iv z4(pL2rr4QO-l=6SlR$BZItVZNrlOVCkHKd7-8w&HS!%tTdd3NgF3D}OCiZ;67&K7pjcVP^OUUTLrlnXn_mh!-hP(-3GX~yw{81TTu z;<&8|D1P3{^i)+Kj9tnGUeHZlGHWk^K%eg-246_rX~M^>DG($U=1RUlYCtq~P?cKG z?^$yby5N1~64Fqx$0@;U9&kME6O3#wxty@meY!fNsghREhdKZdql*9Wyp`W zs#O)7S51D7OXcqZiz@VJ0qaV*;147iy-A9iWxF(=!|F6AwIT`_e?Y{aUm{3(koLvj zj_Bl&A$=-_Ku_DDUfWe<(L;URG9DZ4d!Qjf&kBvN{rmBjn=gG-=db+j^ydTLprP%_ WS+5rsQ~fbY=;{@&%k!KByZ;UK4=mXL literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/Tiles/Grass/grass-1.png b/Johnmagotchi/Content/Tiles/Grass/grass-1.png new file mode 100644 index 0000000000000000000000000000000000000000..7e8235083afbbd29226f1b76a525c382a29fb4e5 GIT binary patch literal 491 zcmVPx#7*I@9MgRZ*x3{-jTU!vi4O3|LSA-dU#Y_bQln=cI3 zLLg(Z8(}Del?ev7EsWT_6^SxA*7!FeF-GEZNoT9sDZNkWyXFO<$*hv8gGS^8@FF9!(dV9^L=|002ovPDHLkV1oN1*W>^I literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/Tiles/Grass/grass-2.png b/Johnmagotchi/Content/Tiles/Grass/grass-2.png new file mode 100644 index 0000000000000000000000000000000000000000..c2a034fcd6293513e46e6bb335b03a36abf99830 GIT binary patch literal 533 zcmV+w0_y#VP)Px#7*I@9MgRZ*x3{-jTU!I{0Veo!C`8q-PSZPPu%iw9fj3->N=G9AOEu1%zb zD_TC}0j_wHY_V2i>;&uAh49f%3Ag2%5@y$WZX@}$(USWCJUmDyNQN9+2Wq?~P{zDP z8yh3T;~(9+>&?2)KBJB@fD8vaMp0c#@3F3*t^V%7?x^$8F*Bbv+!bk(!ZU_x;Q*W4moRarDW3% z_g!QX!=YHBP{+0yhms@$GP`bjAAeNYiS63^>aSPrpf~FyJ&o%wdc3uRd-dmc(U54OFUTpcEVck!<`Mn2!y*A?%76&{|rD}U?5u%4%rfUF~-4B=b2o_NVMJbS|U zLhmS}#JiBY$u`SZ-=1*w?#fpWUA~sY@baxb8E9&?BCY-ElTXaD50!lN3>en{UCQ9; L>gTe~DWM4fB!X^& literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/Tiles/Sea/ocean.png b/Johnmagotchi/Content/Tiles/Sea/ocean.png new file mode 100644 index 0000000000000000000000000000000000000000..c0addb8fcd96c93adf69abecc42f154ca41bafa7 GIT binary patch literal 426 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|)B}7%T!HlV z?c1ZHqs7F;#H0DmYW1@AB_w?FOK5$n9kNe6V!Bb?@d<}MSw6HC04n7z3GxeO_>Tm1 zSsd2_&6V(UaSXBO%?vM5SQpXlpM=4?bCz8 zTW{YykE-$R(&xKc*kyHmZGj_S(#b%J7%Qjdwe4TdJ-?cp_28~pg*VUqI*XQy*?zC9 zbX(UgJ$QJDf0l8gggJE2k9Tfa3ub+K z82uq;U1Z4iN-a_L^CgP+ithFvRA!wb9?3tgJoQeL9^2gC^C!&PHZS1xRh-~BH% zRex2qee_l|Eo#%|BhB~Q=R`i{x@_gh_TYt7pB!sz$KRP^A8W(vi{7ex@45JK4>0f; NJYD@<);T3K0RT?ExwHTP literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/Tiles/tile-highlight.png b/Johnmagotchi/Content/Tiles/tile-highlight.png new file mode 100644 index 0000000000000000000000000000000000000000..97dddc09dbd8da30f6266f39f1f43d67aaebf560 GIT binary patch literal 2224 zcmeAS@N?(olHy`uVBq!ia0y~yU}^xeH8_}oWaQ!9yMYvAage(c!@6@aFM%AEbVpxD z28NCO+!`(_P_tER8i2(ZVn{c@4c?BU;Mo^ zK)Ks$zBK2jiaeE*R=c8uR{pzPx4$EYzs;?w>*&o6_OIV-<5>9fK0IK95NoeLpKcz7 zuE|YK{QtK5`bv&RALSfr{`K2VzX@y$kg)jmd!OFFPlx*B_D45I>4k4+skAYllp=dq zcV&ojfA@)R2^lIYBIfi~1k~Su?h3aj@56$9`!D?dcj$baee`4*pgxsI_i}Hot0x{S zZL*b+;?xpLSC+eS|9hpN&5nc3(hy?Bd;Kp!ZPJlfeqMR~{+iP37kQpbr7B}wwy`@a zV{sfXFhIffUAzkBqgOvZzjP-}3n=8OYV(8haRfCm5CZPUzo@NWXufI1=baN3`k%W^ zTC;e!>eN?XZ~poniqHE_`6+?Vi*SY6=F+%yp*UhFL{C)rSo$r2dkXP;wgm479>O1~~6IZ{z>J?lAQ0o<7Z~^_( ztMjTRPvykpofB2C1hduuDOEv`q=wu7Sx*WDZ_4rXvWRwX7UX~R{`a0A>(|vmk|>TK z!_>kdcjy0)|L^!gDFAN>prSCXg+m@fbQjL+B=e-)HIK?&`S$Asg>%AVIQ z-ks!S`e_HQymO(t_I>`BeSBG%5sD{4Z;6{9e=h@nP@`lwNQ$1nw{APz)|hp9NEsWL zM<>2Lc)=rJqlNUx1=!O8P~SE+OQ1f2Mcu?o?aYOq ze7y4U`Q?6mfrhE&j>n|ZFTd_ByGN+tz|1+XH-G)U8n5@Ul%Gex?lyh>7`;%#EH_}q zCp45_r)N))lOZXCf|KXoe|cZ8KnpW)v4&Kl;ZA6!|1`fYffmrPf)msK7$xV&_}IUY z0vA%&5}^fH*#7_c|E@eJkD`^FXd!?W(7=MHI~iCYkfiC(1INFg_g^U4zY0`Np_iUm zivmcow($F}d-q?|%3dM9LIfu0jJgTe~ HDWM4fv4vpm literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/TopBarPlaceholder.png b/Johnmagotchi/Content/TopBarPlaceholder.png new file mode 100644 index 0000000000000000000000000000000000000000..65a9a57ded62afd91cd74d949ce918ea5520211d GIT binary patch literal 1533 zcmVPx)w@E}nRCt{2-P>;4NDKhbwAf#CKGONf?n7ZTO&#kt7jk$Gut3p8V_D?PkQzn$ zalhSvy#W9Kz#uOV0JUgD0RR9P>c80s001+6+;1=c|Ly%_(2)Q@9d<+k000>3 z>5iytzhw4$Z{rVnPG<6a9OrNzdA_iXI}zRr-HEW3=XK5mD|(gRc0>UH7-y>q1xoNc zq5wcWqnn{ZJA6!bHn-&{gSBr&drj;H2Nk(>>5nsWOQrJztZB7%z;0+8Jh?y?2^2)k_=~CB9LPV~@ynSCEU*wV#?BBnTvMztzr{6~F&#-v_8E(p(nlSjb2I z#M3z@wHwjB42;^ue_dkB9`XeCGhWseCALwHBdb8?uWln6Cz;27f@_{yAcow=1>kBuw(L^nPEZct7_zFBS=a zI5eZN&1^<9%2t=Rh;4^4T&occ8Uz-XC1)}m;}I5BT04_ZtBothGncU{b$NNU8c~>~ z_wFdaDb_fnXQ6+jNNRBm<`|xdGB-v!4ydH%xNF?_kA08m zcx~!(-t36Nw${5PRc|Ay`n|d4?AVKzYw|yzRdNrYrH1R-*d5W8xcX9y z!lJELcSjgoJY0POax|lNMgjK9K4)Y<{$7Hgml`{w!Gk~&E#J8nad#y8)89O>qmEW_ zJ~Gba7r+?i+WZ>Tv35kSFp%nc|CryH$v;-qI8Bq=|Pt3*KCsMSwZ>&cD{kJdQT} z&;H!G_ODdU}>$BX^w4F&r_v!H}c8qArhV;+P%V zh(=Bf6DKWLgrT01Y_7!NtD`bsHvc^d0BqR_&bSDKh?x1Bv^#Z4d4U)__%=$%nxfv+Ov zgdC0SXl$$lIm{Sy7i!Tp8_{GzAhFdJ+2}dE+WF?3mhbch`q7NWG&&~ga=ziIxe%2J zl!#^*m7i}toP8|7HfvcN=FPRujP1$KUT;Tqb`VUsMCHmfXGO}JNXG&z7*V%af5wY) zzSZTtuwEkyocC(MFqs2zmS!|B>pz{0ZA7n5Kn4QjW&8rfGJ0N)@>E}_?C7}fI9}`S zhz1G*lwh}&3gj|b%*@q2yQ9WZ45Q+pE-$HWBMP%wWFelJw-1^Vc&5iwqU9QU$dmP) ziD}1mv1TJ0EC>{HB>&_cRrJht#T2WEn#*VFD&iU$A9Z(%6#@nz60zfVLF z&T)0oVi4_kAS2_b7V%!wmAH0l{OdKM0fTVp^NB+|pslNOY^yPuWo&0TP9TRFbBemW zw0eyw(8ub#tt-3oJ7}#J;xmPXVgO(t^X0mF$F{@I|8c+Fe|`PS(;w5j*fe<9VQ&`7 zrhz;iu{n881@fEKTbRL z?pM;RhKqY<*D>-5aVn?^Ie4iwOz~jQoX8NAU&r+K>))bT4Ptx$S6KVD--OF36&`3m zz5c(f#7vJp3S1lfRsIRESKPfYQGk7hd5X#r#y;~9An9lBqT<(ic=_G3Sqz$n__IQAUP$t6sYFZYLNP`E3`o5 zN+l4fCB<3T@JqC_#lpcltQSaDhk@9;#X#)eVj#ACS4@nZAbW=MMh}Ku4YAJO`u*qG zSKL;b_@nUm&z~~RIt%i;^MsNZ-$p-u-xlGpJ8bV{0qzX{iQV2C8_GmFT?DvS#9#Da z+1OAOD%hzY7BGL6lHd`hSAnT2O%V>2q3%i@tWz$#067PK&FTWGj_{v6kt2!mbhed{ zqfUZltP4=VocM5%*z?OEO$Tn5%61lH=`_^0b+}lliXDh|b_J@D$v*+IrP3K>;vPSh zI05b(>O$-;IxfsEOfwW=k+BjKS8vKs?0(&y$>f$inITAtafu6)M<>e!V4Rg+d3|h7 zzWw`UoG*HPVS8_-cW}WZ%Eouq8e`Ajhs4W{a@-&tJ{Na0Fxerr>mdKI;Vst E0Q_wTZ~y=R literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/UI/FoodButton.png b/Johnmagotchi/Content/UI/FoodButton.png new file mode 100644 index 0000000000000000000000000000000000000000..8be6c6bc90aa9aaa53001a27a9b0fe38a02edf64 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8jKx9jP7LeL$-D$|Iy_w*LoyoQ z-Zm6$FyL{xcwplq4%Q6qx>XF)GaMLv)-u1id%iyS*q_sLR?1u#?mV+t{KxG}ZMpI8 z?>_F_d{1!VheK?aC4JHj<{m5|gAw~bI;-BcSmus>O`C2Wal6gRKLr4~b%X$@y=$`*6KKYP@?cK&HIy(eYgnEsdj=beAO z=8@F#>OI#DkFo0O?C>j?`@rg8Y13<#>zwO^W7LTh*mW{J>JHz(R?fxqC7mjPu3_+W L^>bP0l+XkKZ7fci literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/UI/HealthbarGreen.png b/Johnmagotchi/Content/UI/HealthbarGreen.png new file mode 100644 index 0000000000000000000000000000000000000000..b15ab9b2b7ebc7ec6a9616a814e55a054e5674c9 GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^|AAPJgAGVN7C7-1NHG=%xjQkeJ16rJ$l31c;uumf z=j~lXzGedfS4Xj@Eia3AecAbF*`^eMD;)oPSjAY+ZuV`?w!Cn+)`ag)c<9we_Ict0*6Rjw%?_&Q@ zV|wU2d;E!@&#Us88hBI`QuQhh(PBW7o$2#A=+g$meJ~Z_0 zvDeKH6c6v>ydrU^-6S-0``aV0|IOGc_Tc!u`QP*Q_(ZWA1eSk)G*#Zn@~7gIA7r8{ zMSG4i@7Nc0_&a<2iJ;rT_t_XE%dVH^-eh?&t8e~~_7?#RYr#V%`nT<>SpLlF_dCS> YFOXyI`{*r)fj(mJboFyt=akR{03)qoO#lD@ literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/UI/SingleButtonBGBright-export.png b/Johnmagotchi/Content/UI/SingleButtonBGBright-export.png new file mode 100644 index 0000000000000000000000000000000000000000..8f40a921f34182ae2633ad15ee47fdf9d9c0f81b GIT binary patch literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^yMWk;gAGW&etXabNHG=%xjQkeJ16rJ$T{li;uumf z=k1k^yoVeFTn`#A(tqMtAbQ0?e2Y^opN|XYGnIQjTORVyD~sIzSK`BSz0K?g^keoP z|ND2wPG-N4yKIk3*jWiWsXM+<;h4*^aI!*)P>WyF1y2DhPTC4?SaZAXj2vV7=Zl^{ Z7#M9h=5`k(-T-=t!PC{xWt~$(695h~UkCsI literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/UI/buyBarPurchased.png b/Johnmagotchi/Content/UI/buyBarPurchased.png new file mode 100644 index 0000000000000000000000000000000000000000..85755d18d4ad7a3789c3d844255811f18785b93b GIT binary patch literal 441 zcmeAS@N?(olHy`uVBq!ia0y~yVDtjA{W;ixWbfo2CLqOF9OUlAuIFMOlOu}DT; Palzo}>gTe~DWM4fd_#oi literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/UI/buyBarSelected.png b/Johnmagotchi/Content/UI/buyBarSelected.png new file mode 100644 index 0000000000000000000000000000000000000000..bcf2a1486a753f07a6b726eb736b3e88d23497ce GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0y~yVDtjA{W;ixWbfo2CLqOF9OUlAu<_(SKA=mzI z`?6}ay8b=${^iyU(p%)W+gH8+cdD4-Pqh=LK#Pz9&vSPE$CpKl8Dj2!-0=HqxtUjk z!W0Ha4aP&;>!&bmPud$3yQjLY_Gi_$Kqi)jEF2JB9I6fiFojJ4gHhs8L0y5(n`JYY z6Sn1m{R4DnOQLoivYlauu{79&A2{W$M9e*yu7cu( N!PC{xWt~$(699bOevSYD literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/UI/foodGrid.png b/Johnmagotchi/Content/UI/foodGrid.png new file mode 100644 index 0000000000000000000000000000000000000000..d27b4347de9c4635035d89e69fc9e4f7f47bd7a6 GIT binary patch literal 705 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K57I3fu$;XnLY=9JFage(c!@6@aFBuq^sy$sC zLn`LHy|pp-P=JU-ps?fY%pe0E@03Y82Mt7Ks_6vEeBPLklMu<-U*o^Xp&bH<<%x?CkITk1b|uFkr-qHte3y^na_h?0iFZ zgXYiw466PoGA#RZBI-_3`u);X@2rn$!_0-4KA6ee?$+GC;`1Ma-t5lXT6^4v=RjqB#W9%!OnaCd tW-yS9Zlp=*U0>SHFzq1=Ln0Fl?T-*Lh;u(yy9$&-Jzf1=);T3K0RV6h)?xqv literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/UI/foodGridTray.png b/Johnmagotchi/Content/UI/foodGridTray.png new file mode 100644 index 0000000000000000000000000000000000000000..1b91387ef1bfec1b2840fa16d30bf4bfb37d8139 GIT binary patch literal 758 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 literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/UI/sidebar2.png b/Johnmagotchi/Content/UI/sidebar2.png new file mode 100644 index 0000000000000000000000000000000000000000..db63099ad810e56a876da5ab00a99ac10d4ae8e7 GIT binary patch literal 2546 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 literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/Units/unit-test-enemy.png b/Johnmagotchi/Content/Units/unit-test-enemy.png new file mode 100644 index 0000000000000000000000000000000000000000..47ab110b6c3b4ec2a963fd90fb183ad1fd8875b9 GIT binary patch literal 495 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|)&=;4xB_V) zsI079v}ln*V3Xsd!-Tb5MHZP1fr}Vs zy=FN5xydt*;P(?^ddwm0ywYce>i zok?ii={jSgg0Mv%?;Mw(rLk)+dh+V@T)ZU_v0!(=PN|)q$L6SgyP{TJi8(sJA<{(7;^%5~`q7p8~qb8|O7JC({A)N`}&T3On!M>~(| j*|I*~z0t}|j(d^#s(zb_H%ni8g95?R)z4*}Q$iB}k3Rqc literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/Units/unit-test-npc.png b/Johnmagotchi/Content/Units/unit-test-npc.png new file mode 100644 index 0000000000000000000000000000000000000000..b12421b38d3dadfe510d7b91a31dcd3963526bac GIT binary patch literal 491 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|)&=;4xB_V) zsI079v}ln*V3Xsd!-Tb5MHZP1fr}Vs zy=FN5xydtV$rlRZ49au^4l+Me)C(7d*6$JqnNbjuqh*_;&ESlo6r zRI&Ityfwb+RwTqBv-rDVN{vX0Xi-nab(XM>d53mLhL)fFx${_`yS2q9uBe^wW6P&B zi`SX%InMse+p)Jq^`g`7i(g literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/Units/unit-test.png b/Johnmagotchi/Content/Units/unit-test.png new file mode 100644 index 0000000000000000000000000000000000000000..e039ac7f818edda5c3c134226f6bea2bced09831 GIT binary patch literal 489 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|)&=;4xB_V) zsI079v}ln*V3Xsd!-Tb5MHZP1fr}Vs zy=FN5xydtyHdU6?k(T>bMNj-D1B{xfWw$cfu&9I z5yKM!35J!iNmEOjqUvJ<%@6#zr=r5%XE5c&ts>TcWA%-_`O`Z2uKQvCn&d%{Wk%dHl%B8=9Hjul3EgFkCr*WR66P b*wR0Y)(ibZPBV#?fV}VN>gTe~DWM4fkB;|* literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/props/bathroomRealBG.png b/Johnmagotchi/Content/props/bathroomRealBG.png new file mode 100644 index 0000000000000000000000000000000000000000..c8c5d2be0b19f0a914ed0632a31e564a6ffe24f5 GIT binary patch literal 120200 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

kr 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�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

MzelNDL{VKWo%M@jNGXlW+m6i3a1jyVLb} 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 YyB=LlLyc;61nU14j7>HH`hUUx2hH;nu>b%7 literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/props/bathroomdoorclosed.png b/Johnmagotchi/Content/props/bathroomdoorclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..915d6cc4562a3c659c9201da02f526073899286a GIT binary patch literal 465 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-D%zyFFbTLn`LH zy|K}k*-^mZBJ)L=tpUs|0nA%>*vMFJIylYZ{Hb5>TcvwV;??iwNCUM8eB4si@V~15 zZe7^<4Tr8L&cAD0!f^HJ{5OIJKg%_L*uf&8-eAFagj2zfp^&LV*kKOCBl-yKT_d;P z&F9~L-agJPV~cNa)zkgI{(H6H0jBHIY$O{Q+V1YUvyubJDTnj^o}a&qog<+!`}ABJ xHqL~J_ovy^a+Yw#WmMgq{)35*UH}FwgHm5$x#*e8U$bLCJWp3Ymvv4FO#m-Pnl}Id literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/props/bathroomdooropen.png b/Johnmagotchi/Content/props/bathroomdooropen.png new file mode 100644 index 0000000000000000000000000000000000000000..3d8c91af6fbdc60f91518611dd7717844941eb1d GIT binary patch literal 587 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-HD>U}E)jaSW-L z^Y+fc+-3(6wukOhR^4&T(Cp%O%slz7VcVR^qM54Ng$=d4tv}DLG4lAYbEjj1isvL1 zPm#+P#eY=@Z^#`yZMS`KoFu~>#sl;qOob0Te>$a> z+ryWoK>j|*D{uYN)3vmZ(VS*J~|w68GhmuKWi=npp9q{v+GWxuowwI+ySNWr{C?Gyp|5UE z8jx=_i|fF}*WUaGE*39kdGO-x3bBU8-jh_eK9-*5;d_zA!n_}tIv6}%{an^LB{Ts5 DH4EO6 literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/props/bedfront.png b/Johnmagotchi/Content/props/bedfront.png new file mode 100644 index 0000000000000000000000000000000000000000..eb11f52d41b91d0188aadf1ece93a5cd716459db GIT binary patch literal 725 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-HD>VCwgDaSW-L z^Y->>-#ZB+4iAN=*m^IT@`&%ovYrmHMJ9qvd!{^$N|?#!BsNjdDe+kUZ~H&@Kj#Ww zpJ#c!;>ei>70*dTqpmLtzjChm$UaX#dcF(u{D!UlzdxUwW?o&lQtk2dt6!NU_V39P zKk%cpWGBP1^~-m&8q~$c>Nb3Q{W^`Y=f0abcfy~tS^5nhZ)fddIMzRVd-!IciaUGe zU*7Wj`|Lg96Ab?qO?5lI-}1(WU-1oVKFW9Y|Nr~%$DCF5j7G=%=T&|=6(17K@c8)I zo-Y2WVh4T{8Y@3`ZUq@}=EaYI3dSCJ^UW?b8aqH{M{3!LNag(5F;n%ibK^shfR!DK zJV;OWk@f@4683p%YkvroC;&}cBPq|smj+b2_3`0@%u+y^?jHpY76A3!)UtbHv*F|8 zv~4~7)_i$DC2JoaJ|+yZQ0~#;w#gty+@r%?!aogt&zt%!5s!Z+c|uTr-5j57Kf2d{ zo}*+J^CKYR+K&m3PsP{l`Eq#q?VZ;uOCG-azW@C7|Ff1&k3JY^d%RtndxMQ)q|M!P z3;TC||55NzY{J`D{bg-GE*zZh>|QeM#{;Go>)@IlpQIja4b11f`R-@_+BgP@_pXUg zg613ARd90@UIVI;DSHMYi@pKLH)c*X1&n2qs&+dVX7`H7$29o5b@S^T$WlJWE}k$o z@NqMD!POHV53=sa_ySbEN81^w{N7YWyPO*Hf-BowjBkG}`*7HXzp%7sxB6T4`QrDO zCKWTn(ZA#=;ybf*;uV7}w&;uumf z=j~iyzdH^BZu=c?ZdQ4uvF~6`aZiVK&!z`l8ar8|^BydA+3~&46cb!9n|+HpV%FWT-?x%APW}y^6?~oXM()=Am2b277fa}0 z-@9asKuvUx$yCX6e-eX~3O?Ubm0y3G!Q;KKQ0tuq@sj<_Qq2r3?WpMZZL0%`H^2Y$ zoHQ+-rRs&xT;7SbkTKV-mQ&hY?8rdLw^g zF0(jeLk)*R0ag^lqHu|MLGqJxjqMCMDozu++Zj9-_v%iZ$L;f-`On!E50jiv%-*v9 z(sP$9Hv~g=ecw{wS98*l;og$JoA0SV`1ZJ3RiFKF=YHKgzgHVBxm3cy_LI3-?NC$D z-~HZI{~rDBk6nJHcf;9x%sx-uAI|s_GmD4e)7uO^h7;SDu4GWSKQE1`;ZJIY62po3 zzN_pEKTmIZ#h_4M879r}WP0LMMu$4fFmWI=H5ACK3=?K}ay?NL$h2JrR9m`Iis8xa ztG_p&{e3fw(P3Zg-uuS)M8Z!E)tRdCS|T7*woK6%>vo4DKEHlkMIo(KF8K}qiXOLSlNJcl_O9o`=I>&ue3^;%yG2JyU zn;LCOV&|Cad;R+Oas73r6VuP}sLlG*IKNijXWK|RLx51u@JaA)qawMIE> z>)z}-yfi^Cdz$`SPKS4KpTjD5zVq#`eEVss@brd^^!=u~C#HveIKEIW({-N(a7-eDl_63-bc^9Z@~d686-aCBaPh^mL8`I#JX01sif~PE6-; z5Q}@_&7vUb|4Ef;LW}uNA;ujN{XlksU>s2W1D$ywQso|q)DQ%!1e2Zq%zN#G`h2cE zez1FAd12X`ZCtxQS2lPfr^o~16+2JvZF#~_F<<8WadXv|`OLO{eA&{#>?km?UPj#b U-!!lIPEh9bboFyt=akR{0J@9i>;M1& literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Content/sidebar-placeholder.png b/Johnmagotchi/Content/sidebar-placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..61928db4e3ba997c7c17e840b044981a654f0582 GIT binary patch literal 2516 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 G|33h&S{{7> literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Core/.DS_Store b/Johnmagotchi/Core/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ec6e529c9cc8429e1ae684449f5a140b4203babd GIT binary patch literal 6148 zcmeHK!AiqG5S`Visa429p~nTU1+CPAcnPr{Ja{pp2bG%GpuxCX($pSGA!q#|zr^ox zW_JtLss|4uWhczO+1;6hd9XVf0ARtO+W_zYz(pl=R&n@3XrFXO7R-u+$kaOuIDrTR z>fMaDU9b#T2L2lZbavO^7|(1E2JrFxCXmO&elN~sj6Sb%FH8Hy&dwWKSag<_SKJl1 z>RyNUau^m-G3WM7X*WTatBX{0{nlQcw{~0OamC%-+CDh#JYD>ini?GqVg>27bu^ z-47g<&^K6WR96QMss%u#-v}jWQ!ha=+@No;)QCGMOot-sP-a>Tro(Za8$aJ*sZoam zGtCDxUuLF5Ve0Gney-es`5NtL8L$jYGq9+q9@YP&@B9DhAUm@RSO(^b0p_&Bc7Q3F z+B%aQ)mn~vgGxevrA8HkgDJ<#pi*2zRf2n*3`E~xsS#ID?2mw=!48&zKV{$@$lH<8 literal 0 HcmV?d00001 diff --git a/Johnmagotchi/Core/InputManager/ButtonPress.cs b/Johnmagotchi/Core/InputManager/ButtonPress.cs new file mode 100644 index 0000000..24e7d6e --- /dev/null +++ b/Johnmagotchi/Core/InputManager/ButtonPress.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace TibzGame.Core.Inputs +{ + public class ButtonPress + { + public bool isPressed = false; + public bool isJustPressed = false; + public bool isJustReleased = false; + public UInt64 heldTime = 0; + + public void RegisterButtonPress(bool pressed) { + bool lastState = isPressed; + isPressed = pressed; + + if (lastState == isPressed) isJustReleased = isJustPressed = false; + else if (isPressed) isJustPressed = true; + else isJustReleased = true; + + if (! isPressed) heldTime = 0; + else heldTime++; + + } + + public void ClearButtonPresses() + { + isPressed = false; + isJustPressed = false; + isJustReleased = false; + heldTime = 0; + } + + } +} diff --git a/Johnmagotchi/Core/InputManager/InputManager.cs b/Johnmagotchi/Core/InputManager/InputManager.cs new file mode 100644 index 0000000..8881b48 --- /dev/null +++ b/Johnmagotchi/Core/InputManager/InputManager.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; + +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Input; + +namespace TibzGame.Core.Inputs +{ + public class InputManager + { + // classes that have actions should just read from these during their update() to get the latest state of all input devices. + public InputMapMenu menuInputs; + public InputMapGame[] gameInputs; + + public InputMapMapEditor editorInputs; + public MouseInput mouseInput; + + public Keys[] actionKeyMappings; + + public bool isMouseMode = false; + public InputManager() { + + menuInputs = new InputMapMenu(); + gameInputs = new InputMapGame[8]; // effectively this will count as 8 "profiles" for controllers. + mouseInput = new MouseInput(); + editorInputs = new InputMapMapEditor(); + + } + + // getInputs() polls and populates input info for all controllers + keyboard. + // should be called every update() from the main game class. + public void getInputs() { + + handleMouseInput(); + + handleKeyboardInput(-1); + + } + + public void ClearAllInputs() { + + menuInputs.confirm.ClearButtonPresses(); + menuInputs.cancel.ClearButtonPresses(); + menuInputs.navUp.ClearButtonPresses(); + menuInputs.navDown.ClearButtonPresses(); + menuInputs.navLeft.ClearButtonPresses(); + menuInputs.navRight.ClearButtonPresses(); + + menuInputs.special1.ClearButtonPresses(); + menuInputs.special2.ClearButtonPresses(); + menuInputs.special3.ClearButtonPresses(); + menuInputs.special4.ClearButtonPresses(); + menuInputs.special5.ClearButtonPresses(); + } + + + private void handleKeyboardInput(short playerindex) { + + //Default Keyboard Menu Inputs + KeyboardState kbState = Keyboard.GetState(); + menuInputs.confirm.RegisterButtonPress(kbState.IsKeyDown(Keys.Enter)); + menuInputs.cancel.RegisterButtonPress(kbState.IsKeyDown(Keys.Escape)); + menuInputs.navUp.RegisterButtonPress(kbState.IsKeyDown(Keys.Up)); + menuInputs.navDown.RegisterButtonPress(kbState.IsKeyDown(Keys.Down)); + menuInputs.navLeft.RegisterButtonPress(kbState.IsKeyDown(Keys.Left)); + menuInputs.navRight.RegisterButtonPress(kbState.IsKeyDown(Keys.Right)); + + menuInputs.special1.RegisterButtonPress(kbState.IsKeyDown(Keys.D1)); + menuInputs.special2.RegisterButtonPress(kbState.IsKeyDown(Keys.D2)); + menuInputs.special3.RegisterButtonPress(kbState.IsKeyDown(Keys.D3)); + menuInputs.special4.RegisterButtonPress(kbState.IsKeyDown(Keys.D4)); + menuInputs.special5.RegisterButtonPress(kbState.IsKeyDown(Keys.D5)); + + + // in update function just check bool for pressed state, for example: + // menuInputs.confirm.isPressed + + editorInputs.registerButtons(kbState); + + } + + + private void handleMouseInput() // no controller port needed + { + + MouseState mouseState = Mouse.GetState(); + mouseInput.leftClick.RegisterButtonPress(mouseState.LeftButton == ButtonState.Pressed); + mouseInput.rightClick.RegisterButtonPress(mouseState.RightButton == ButtonState.Pressed); + mouseInput.middleClick.RegisterButtonPress(mouseState.MiddleButton == ButtonState.Pressed); + mouseInput.x = mouseState.X; + mouseInput.y = mouseState.Y; + mouseInput.scrollWheelValue = mouseState.ScrollWheelValue; + + // Debug.WriteLine("MOUSE X: "+ mouseInput.x + " MOUSE Y: " + mouseInput.y); + + } + } +} diff --git a/Johnmagotchi/Core/InputManager/MouseInput.cs b/Johnmagotchi/Core/InputManager/MouseInput.cs new file mode 100644 index 0000000..d3ea042 --- /dev/null +++ b/Johnmagotchi/Core/InputManager/MouseInput.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Microsoft.Xna.Framework.Input; + +namespace TibzGame.Core.Inputs +{ + public class MouseInput + { + public ButtonPress leftClick; + public ButtonPress rightClick; + public ButtonPress middleClick; + public int x; + public int y; + public int scrollWheelValue; + + private int prevScrollWheelValue; + + public MouseInput() { + x = y = prevScrollWheelValue = scrollWheelValue = 0; // set all ints to 0 + leftClick = new ButtonPress(); + rightClick = new ButtonPress(); + middleClick = new ButtonPress(); + + } + public int ScrollWheelMoving() /// returns 1 (positive) if up, -1 if Down, and 0 if not moving + { + MouseState state = Mouse.GetState(); + this.scrollWheelValue = state.ScrollWheelValue; + + int returnVal = 0; + if (prevScrollWheelValue > scrollWheelValue) + { + returnVal = 1; + } + else if (scrollWheelValue > prevScrollWheelValue) + { + returnVal = - 1; + } + + this.prevScrollWheelValue = this.scrollWheelValue; + return returnVal; + } + + + } +} diff --git a/Johnmagotchi/Core/InputManager/inputMaps/InputMapGame.cs b/Johnmagotchi/Core/InputManager/inputMaps/InputMapGame.cs new file mode 100644 index 0000000..8918aea --- /dev/null +++ b/Johnmagotchi/Core/InputManager/inputMaps/InputMapGame.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Microsoft.Xna.Framework.Input; + +namespace TibzGame.Core.Inputs +{ + public class InputMapGame + { + public ButtonPress action0; + public ButtonPress action1; + public ButtonPress action2; + public ButtonPress action3; + public ButtonPress action4; + public ButtonPress action5; + //public ButtonPress action6; + + public ButtonPress dpadUp; + public ButtonPress dpadDown; + public ButtonPress dpadLeft; + public ButtonPress dpadRight; + + public ButtonPress pause; + + + + public Buttons[] buttonKeyMap; + public InputMapGame() { + // default button layout + buttonKeyMap = new Buttons[6]; + buttonKeyMap[0] = Buttons.A; + buttonKeyMap[1] = Buttons.B; + buttonKeyMap[2] = Buttons.X; + buttonKeyMap[3] = Buttons.Y; + buttonKeyMap[4] = Buttons.RightShoulder; + buttonKeyMap[5] = Buttons.LeftShoulder; + + } + + + + } +} diff --git a/Johnmagotchi/Core/InputManager/inputMaps/InputMapMenu.cs b/Johnmagotchi/Core/InputManager/inputMaps/InputMapMenu.cs new file mode 100644 index 0000000..5e81b1f --- /dev/null +++ b/Johnmagotchi/Core/InputManager/inputMaps/InputMapMenu.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace TibzGame.Core.Inputs +{ + public class InputMapMenu + { + public ButtonPress confirm; + public ButtonPress cancel; + public ButtonPress special1; + public ButtonPress special2; + public ButtonPress special3; + public ButtonPress special4; + public ButtonPress special5; + public ButtonPress navLeft; + public ButtonPress navRight; + public ButtonPress navUp; + public ButtonPress navDown; + public InputMapMenu() { + confirm = new ButtonPress(); + cancel = new ButtonPress(); + special1 = new ButtonPress(); + special2 = new ButtonPress(); + special3 = new ButtonPress(); + special4 = new ButtonPress(); + special5 = new ButtonPress(); + navLeft = new ButtonPress(); + navRight = new ButtonPress(); + navUp = new ButtonPress(); + navDown = new ButtonPress(); + } + } +} diff --git a/Johnmagotchi/Core/InputManager/inputMaps/inputMapMapEditor.cs b/Johnmagotchi/Core/InputManager/inputMaps/inputMapMapEditor.cs new file mode 100644 index 0000000..c3e90a3 --- /dev/null +++ b/Johnmagotchi/Core/InputManager/inputMaps/inputMapMapEditor.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Xml.Linq; +using Microsoft.Xna.Framework.Input; + +namespace TibzGame.Core.Inputs +{ + public class InputMapMapEditor + { + public ButtonPress confirm; + public ButtonPress cancel; + public ButtonPress special1; + public ButtonPress special2; + public ButtonPress special3; + public ButtonPress special4; + public ButtonPress special5; + public ButtonPress saveButton; + public ButtonPress loadButton; + public ButtonPress navLeft; + public ButtonPress navRight; + public ButtonPress navUp; + public ButtonPress navDown; + public InputMapMapEditor() { + confirm = new ButtonPress(); + cancel = new ButtonPress(); + special1 = new ButtonPress(); + special2 = new ButtonPress(); + special3 = new ButtonPress(); + special4 = new ButtonPress(); + special5 = new ButtonPress(); + + saveButton = new ButtonPress(); + loadButton = new ButtonPress(); + + navLeft = new ButtonPress(); + navRight = new ButtonPress(); + navUp = new ButtonPress(); + navDown = new ButtonPress(); + } + + public void registerButtons(KeyboardState kbState){ + confirm.RegisterButtonPress(kbState.IsKeyDown(Keys.Enter)); + cancel.RegisterButtonPress(kbState.IsKeyDown(Keys.Back)); + navUp.RegisterButtonPress(kbState.IsKeyDown(Keys.Up)); + navDown.RegisterButtonPress(kbState.IsKeyDown(Keys.Down)); + navLeft.RegisterButtonPress(kbState.IsKeyDown(Keys.Left)); + navRight.RegisterButtonPress(kbState.IsKeyDown(Keys.Right)); + + special1.RegisterButtonPress(kbState.IsKeyDown(Keys.D1)); + special2.RegisterButtonPress(kbState.IsKeyDown(Keys.D2)); + special3.RegisterButtonPress(kbState.IsKeyDown(Keys.D3)); + special4.RegisterButtonPress(kbState.IsKeyDown(Keys.D4)); + special5.RegisterButtonPress(kbState.IsKeyDown(Keys.D5)); + saveButton.RegisterButtonPress(kbState.IsKeyDown(Keys.S)); + loadButton.RegisterButtonPress(kbState.IsKeyDown(Keys.L)); + } + } +} diff --git a/Johnmagotchi/Core/ScreenManager/GameScreen.cs b/Johnmagotchi/Core/ScreenManager/GameScreen.cs new file mode 100644 index 0000000..634dfe1 --- /dev/null +++ b/Johnmagotchi/Core/ScreenManager/GameScreen.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace TibzGame.Core.ScreenManager +{ + public abstract class GameScreen + { + public abstract void Init(); + public abstract void Draw(); + public abstract void Update(); + + public abstract void Destroy(); + + + + public bool isUpdatePriority; // Blocks updates lower than this in the stack + public bool isDrawPriority; // Blocks draws lower than this in the stack + public bool isTopScreen; // only topmost screen should accept inputs + + public ScreenManager ScreenManager + { + get { return screenManager; } + internal set { screenManager = value; } + } + + public ScreenManager screenManager; + } +} diff --git a/Johnmagotchi/Core/ScreenManager/ScreenManager.cs b/Johnmagotchi/Core/ScreenManager/ScreenManager.cs new file mode 100644 index 0000000..e23c741 --- /dev/null +++ b/Johnmagotchi/Core/ScreenManager/ScreenManager.cs @@ -0,0 +1,226 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Dynamic; +using System.Reflection.Metadata; +using System.Text; +using Johnmagotchi.Core.tools; +using Johnmagotchi.Data; +using Johnmagotchi.GameContent.Objects.Units.BattleObjects; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; +using TibzGame.Core.Inputs; + +namespace TibzGame.Core.ScreenManager +{ + public class ScreenManager: DrawableGameComponent + { + private Stack _screens = new Stack(); + public GraphicsDeviceManager gfxDevRef; + public ContentManager contentRef; + public InputManager inputs; + public GameScreen[] newScreenBuffer; + public int removeScreenCount; + public GlobalData gameData; + + + + + //private const int SCALED_PIXELS_WIDTH = 640 * 100; // 640 + //private const int SCALED_PIXELS_HEIGHT = 360 * 100; // 360 + public static readonly int BASE_WORLD_UNIT_HEIGHT = 360; + public static readonly int BASE_ZOOM_LEVEL = 100; + + public int CURRRENT_ZOOM_LEVEL = 100; // bigger number zooms out more. + private int SCALED_PIXELS_HEIGHT;//= 360 * 100; // 360 + private int SCALED_PIXELS_WIDTH;// = 640 * 100; + + private int currentUnitId = 0; // this is internal + + public ScreenManager(Game game, ref GraphicsDeviceManager gfxRef, ref ContentManager contentManagerRef, ref InputManager inputManager) + : base(game) + { + + gfxDevRef = gfxRef; + contentRef = contentManagerRef; + inputs = inputManager; + + + newScreenBuffer = new GameScreen[0]; + removeScreenCount = 0; + gameData = new GlobalData(this);// todo = this would be where we load in existing save game data + + // Initialize game global values + TibzLog.Debug("INIT BATTLE OBJECTS"); + BattleObjectManager.LoadBattleObjects(); + } + protected override void LoadContent() + { + base.LoadContent(); + } + + protected override void UnloadContent() + { + base.UnloadContent(); + } + public override void Update(GameTime gameTime) + { + + + // Update Screens + base.Update(gameTime); + bool updateBreak = false; + foreach (GameScreen screen in _screens) + { + if (!updateBreak) + { + screen.Update(); + + } + if (screen.isUpdatePriority) updateBreak = true; + + } + + //Remove Screens + + if (removeScreenCount > 0) + { + for (int i = 0; i < removeScreenCount; i++) + { + _screens.Pop().Destroy(); + } + removeScreenCount = 0; + + if (newScreenBuffer.Length == 0) _screens.Peek().isTopScreen = true; + } + + // Add new screens + if (newScreenBuffer.Length > 0) + { + // since we are adding to a stack, we expect FILO + // looping backwards will push to the stack in that same expected order if multiple screens are added at once + for( int i = newScreenBuffer.Length -1; i >=0; i--) + { + GameScreen newScreen = newScreenBuffer[i]; + this._screens.Push(newScreen); + } + //clear buffer + this.newScreenBuffer = new GameScreen[0]; + + //set top screen + foreach( GameScreen scrn in _screens) { + scrn.isTopScreen = false; + } + _screens.Peek().isTopScreen = true; + + } + } + + public override void Draw(GameTime gameTime) + { + base.Draw(gameTime); + //we want to draw screens from lowest to highest in the main stack, so we use this stack to reverse drawing order + Stack DrawStack = new Stack(); + foreach (GameScreen screen in _screens) + { + DrawStack.Push(screen); + if (screen.isDrawPriority) + { + break; + } + } + + foreach (GameScreen screen in DrawStack) + { + screen.Draw(); + } + } + + public void addScreen(GameScreen newScreen) { + newScreenBuffer = new GameScreen[1]; + newScreenBuffer[0] = newScreen; + newScreen.ScreenManager = this; + newScreen.Init(); + + this.inputs.ClearAllInputs(); // ingore the rest of the inputs on the frame where a screen is added + + } + public void removeTopScreens(int screenCount) + { + removeScreenCount = screenCount; + } + + public void setWindowSize(ushort width, ushort height) + { + //ushort[] widths = new ushort[] { 3840, 2560, 2560, 1920, 1366, 1280, 1280 }; + //ushort [] heights = new ushort[] { 2160, 1440, 1080, 1080, 768, 1024, 720 }; + + gfxDevRef.PreferredBackBufferWidth = width; + gfxDevRef.PreferredBackBufferHeight = height; + + // Apply the changes + TibzLog.Debug("New resolution: {0} x {1}", gfxDevRef.PreferredBackBufferWidth, gfxDevRef.PreferredBackBufferHeight); + + gfxDevRef.ApplyChanges(); + + RescaleWorldUnits(); + + } + + + public void setFullScreen(bool enabled) + { + gfxDevRef.IsFullScreen = enabled; + gfxDevRef.ApplyChanges(); + RescaleWorldUnits(); + } + + // 360 x 640 res + public double GetScreenScaleX(){ + return gfxDevRef.PreferredBackBufferWidth / (float) SCALED_PIXELS_WIDTH; + } + + public double GetScreenScaleY(){ + return gfxDevRef.PreferredBackBufferHeight/ (float) SCALED_PIXELS_HEIGHT; + } + + public int getScaledIntX(int x) { + return (int)(x * GetScreenScaleX()); + } + public int getScaledIntY(int y) { + return (int)(y * GetScreenScaleY()); + } + + public Rectangle GetScaledRectangle(int posX, int posY, int width, int height){ + + double scaleX = (float) gfxDevRef.PreferredBackBufferWidth / (float) SCALED_PIXELS_WIDTH; + double scaleY = (float) gfxDevRef.PreferredBackBufferHeight/ (float) SCALED_PIXELS_HEIGHT; + return new Rectangle( + Convert.ToInt32(Math.Floor(posX * scaleX)), //Round down the next tile position to reduce where gaps occur + Convert.ToInt32(Math.Floor( posY * scaleY)), + Convert.ToInt32(Math.Ceiling(width * scaleX)), // Round up tile size to reduce gaps in tile map + Convert.ToInt32(Math.Ceiling(height * scaleY)) + ); + } + + public int GetScaledPixelScreenWidth(){ + return SCALED_PIXELS_WIDTH; + } + public int GetScaledPixelScreenHeight(){ + return SCALED_PIXELS_HEIGHT; + } + private void RescaleWorldUnits() { + float heightWidthRatio = (float)gfxDevRef.PreferredBackBufferWidth / (float)gfxDevRef.PreferredBackBufferHeight; + SCALED_PIXELS_HEIGHT = BASE_WORLD_UNIT_HEIGHT * CURRRENT_ZOOM_LEVEL; // 360 + SCALED_PIXELS_WIDTH = Convert.ToInt32(SCALED_PIXELS_HEIGHT * heightWidthRatio); + TibzLog.Debug("Scaled Height: {0}, Scaled Width {1}", SCALED_PIXELS_HEIGHT, SCALED_PIXELS_WIDTH); + } + + public int getUnitId() + { + return this.currentUnitId++; + } + } +} diff --git a/Johnmagotchi/Core/tools/TibzLog.cs b/Johnmagotchi/Core/tools/TibzLog.cs new file mode 100644 index 0000000..0de92fa --- /dev/null +++ b/Johnmagotchi/Core/tools/TibzLog.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace Johnmagotchi.Core.tools +{ + internal class TibzLog + { + public enum LogLevel : int + { + DEBUG = 0, + INFO = 1, + WARN = 2, + ERROR = 3, + CRITICAL = 4, + DISABLED_LOG = 5 + } + public static bool isRunningInVS = !string.IsNullOrEmpty(Environment.GetEnvironmentVariable("VisualStudioEdition")); + + public static LogLevel ConsoleLogLevel { get; set; } = LogLevel.DEBUG; + public static LogLevel FileOutLogLevel { get; set; } = LogLevel.DISABLED_LOG; + + public static void Debug(string str,[CallerFilePath] string filename = null, [CallerLineNumber] int line = 0) + { + if (ConsoleLogLevel <= 0) + { + if (isRunningInVS) System.Diagnostics.Debug.WriteLine("{0}:{1} - {2}", Path.GetFileName(filename), line, str); + else System.Console.WriteLine("{0}:{1} - {2}", Path.GetFileName(filename), line, str); + } + } + public static void Debug(object obj, [CallerFilePath] string filename = null, [CallerLineNumber] int line = 0) + { + if (ConsoleLogLevel <= 0) + { + if (isRunningInVS) + { + System.Diagnostics.Debug.WriteLine("{0}:{1} - {2}", Path.GetFileName(filename), line, obj); + } + else System.Console.WriteLine("{0}:{1} - {2}", Path.GetFileName(filename), line, obj); + } + } + public static void Debug(string str, string str2) + { + if (ConsoleLogLevel <= 0) + { + if (isRunningInVS) System.Diagnostics.Debug.WriteLine(str, str2); + else System.Console.WriteLine(str, str2); + } + } + + public static void Debug(string str, params object[] objs) { + if (ConsoleLogLevel <= 0) { + if (isRunningInVS) System.Diagnostics.Debug.WriteLine(str,objs); + else System.Console.WriteLine(str, objs); + } + } + public static void Debug(object obj, string str) + { + if (ConsoleLogLevel <= 0) + { + if (isRunningInVS) System.Diagnostics.Debug.WriteLine(obj, str); + else + { + System.Console.WriteLine("Tibzlog - Object trace not implemented in system console, only DEBUG in VS environment"); + System.Console.WriteLine(obj); + System.Console.WriteLine(str); + } + + } + } + + //TODO add more later if needed, honestly just wanted to make this work quickly. + /* Ideally we would have multiple levels of logging available, and allow the log to be redirected to a file. + * It Would also probably be useful to have the log levels listed in the prints, ie " ERROR = - " or something to that effect. + * + */ + } +} diff --git a/Johnmagotchi/Data/BattleObjects/AttackDefines.cs b/Johnmagotchi/Data/BattleObjects/AttackDefines.cs new file mode 100644 index 0000000..5984ff3 --- /dev/null +++ b/Johnmagotchi/Data/BattleObjects/AttackDefines.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using static Johnmagotchi.Data.BattleObjects.SkillDefines; + +namespace Johnmagotchi.Data.BattleObjects +{ + public class AttackDefines + { + public enum AttackTypeEnum + { + DIRECT = 0, + INDIRECT = 1 + } + + public enum SpecialAttackPropertiesEnum + { + NONE = 0, + BRAVE = 1, + POISON = 2, + KILLER = 3, + ARMOR_BANE = 4 + } + + public static AttackTypeEnum ParseAttackTypes(string enumString) + { + Enum.TryParse(enumString, out AttackTypeEnum AttackType); + return AttackType; + } + public static SpecialAttackPropertiesEnum ParseSpecialAttackProperties(string enumString) + { + Enum.TryParse(enumString, out SpecialAttackPropertiesEnum props); + return props; + } + } +} diff --git a/Johnmagotchi/Data/BattleObjects/AttackDefinitions.csv b/Johnmagotchi/Data/BattleObjects/AttackDefinitions.csv new file mode 100644 index 0000000..885fb83 --- /dev/null +++ b/Johnmagotchi/Data/BattleObjects/AttackDefinitions.csv @@ -0,0 +1,2 @@ +ID,AttackName,BaseDamage,BaseHitCount,BaseSpeed,BaseAccuracy,AttackRangeMin,AttackRangeMax,AttackType,SpecialProperties +1,Sword,1,1,1,100,1,1,DIRECT,NONE diff --git a/Johnmagotchi/Data/BattleObjects/CustomizerModuleDefinitions.csv b/Johnmagotchi/Data/BattleObjects/CustomizerModuleDefinitions.csv new file mode 100644 index 0000000..7f17b46 --- /dev/null +++ b/Johnmagotchi/Data/BattleObjects/CustomizerModuleDefinitions.csv @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Johnmagotchi/Data/BattleObjects/SkillDefines.cs b/Johnmagotchi/Data/BattleObjects/SkillDefines.cs new file mode 100644 index 0000000..fb592be --- /dev/null +++ b/Johnmagotchi/Data/BattleObjects/SkillDefines.cs @@ -0,0 +1,37 @@ +using Johnmagotchi.GameContent.Objects.Units.BattleObjects; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Johnmagotchi.Data.BattleObjects +{ + public static class SkillDefines + { + public enum SkillTypes + { + ATK_BOOST, + SPD_BOOST, + DEF_BOOST, + MOV_BOOST, + UNIQUE + } + + public static int GetAttackBoost(List skillList) + { + int boost = 0; + foreach (var skill in skillList) + { + if (skill.SkillType == SkillTypes.ATK_BOOST) { boost+= skill.Value; } + + } + return boost; + } + + public static SkillTypes ParseSkillTypes(string enumString) { + Enum.TryParse(enumString, out SkillTypes skillEnum); + return skillEnum; + } + } +} diff --git a/Johnmagotchi/Data/BattleObjects/SkillDefinitions.csv b/Johnmagotchi/Data/BattleObjects/SkillDefinitions.csv new file mode 100644 index 0000000..3d8673d --- /dev/null +++ b/Johnmagotchi/Data/BattleObjects/SkillDefinitions.csv @@ -0,0 +1,5 @@ +ID,SkillName,SkillType,Value,Description +1,Attack Up 1,ATK_BOOST,1,Raises Attack by 1 +2,Speed Up 1,SPD_BOOST,1,Raises Speed by 1 +3,Defense Up 1,DEF_BOOST,1,Raises Defense by 1 +4,Movement Up 1,MOV_BOOST,1, Raises Movement by 1 diff --git a/Johnmagotchi/Data/BattleObjects/SupportDefines.cs b/Johnmagotchi/Data/BattleObjects/SupportDefines.cs new file mode 100644 index 0000000..5582288 --- /dev/null +++ b/Johnmagotchi/Data/BattleObjects/SupportDefines.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using static Johnmagotchi.Data.BattleObjects.SkillDefines; + +namespace Johnmagotchi.Data.BattleObjects +{ + public class SupportDefines + { + // A support is an action that isnt an attack. This can include things that aren't "friendly" such as "steal" or possibly status effects. FE Rods basically. + public enum SupportType { + HEAL = 0, + BOOST_STAT_ATTACK, + BOOST_STAT_DEFENSE, + BOOST_STAT_CRITICAL, + BOOST_STAT_SPEED, + BOOST_STAT_MOVE, + STATUS_EFFECT, + STEAL, + WARP, + RESCUE, + UNLOCK, + } + + public enum SupportTarget { + SELF, + ALLY, + ALLIES_IN_RANGE, + ENEMY, + ENEMIES_IN_RANGE + } + + public static SupportType ParseSupportTypes(string enumString) + { + Enum.TryParse(enumString, out SupportType typeEnum); + return typeEnum; + } + public static SupportTarget ParseSupportTargets(string enumString) + { + Enum.TryParse(enumString, out SupportTarget targetEnum); + return targetEnum; + } + } +} diff --git a/Johnmagotchi/Data/BattleObjects/SupportDefinitions.csv b/Johnmagotchi/Data/BattleObjects/SupportDefinitions.csv new file mode 100644 index 0000000..37add51 --- /dev/null +++ b/Johnmagotchi/Data/BattleObjects/SupportDefinitions.csv @@ -0,0 +1,2 @@ +ID,SupportName,SupportTarget,SupportType,Value,Description +1,Heal,ALLY,HEAL,10, Heals damage to ally unit diff --git a/Johnmagotchi/Data/BattleObjects/UnitDefinitions.csv b/Johnmagotchi/Data/BattleObjects/UnitDefinitions.csv new file mode 100644 index 0000000..2e8aba2 --- /dev/null +++ b/Johnmagotchi/Data/BattleObjects/UnitDefinitions.csv @@ -0,0 +1,7 @@ +ID,NAME,CLASS,IS_UNIQUE,HEALTH,ATTACK,DEFENSE,SPEED,MOVEMENT,MOVEMENT_TYPE,DEBUG_ATTACK,DEBUG_SUPPORT,DEBUG_SKILL +2,Mercenary,RB,FALSE,21,7,4,7,5,FOOT,,, +3,Heck Diver,BB,FALSE,18,5,5,10,6,FLYING,,, +4,Assassin,YY,FALSE,15,10,1,15,6,FOOT,,, +5,Medic,GG,FALSE,10,0,1,5,5,FOOT,,, +6,Elementalist,PP,FALSE,10,10,1,10,4,FOOT,,, +7,Commoner,N/A,FALSE,5,1,0,2,5,FOOT,,, diff --git a/Johnmagotchi/Data/GlobalData.cs b/Johnmagotchi/Data/GlobalData.cs new file mode 100644 index 0000000..0b2601c --- /dev/null +++ b/Johnmagotchi/Data/GlobalData.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.Design; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TibzGame.Core.ScreenManager; + +namespace Johnmagotchi.Data +{ + public class GlobalData + { + ScreenManager screenManager; + public GlobalData(ScreenManager sm) + { + screenManager = sm; + } + } +} diff --git a/Johnmagotchi/Data/SaveFileData/CurrentUnitData.csv b/Johnmagotchi/Data/SaveFileData/CurrentUnitData.csv new file mode 100644 index 0000000..cac602b --- /dev/null +++ b/Johnmagotchi/Data/SaveFileData/CurrentUnitData.csv @@ -0,0 +1,4 @@ +ID,NAME,HEALTH,ATTACK,DEFENSE,SPEED +1,TestUnit,50,5,5,5 +2,DummyUnit,20,10,10,10 +3,big,400,30,0,1 \ No newline at end of file diff --git a/Johnmagotchi/Data/SaveMapData/map-0.json b/Johnmagotchi/Data/SaveMapData/map-0.json new file mode 100644 index 0000000..9f46bec --- /dev/null +++ b/Johnmagotchi/Data/SaveMapData/map-0.json @@ -0,0 +1,7 @@ +{ + "width": 24, + "height": 20, + "serializedMapTiles": "[\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022]", + "serializedPlayerUnits": "[\u0022{\\u0022id\\u0022:2,\\u0022name\\u0022:\\u0022Mercenary\\u0022,\\u0022stats\\u0022:{\\u0022maxHealth\\u0022:21,\\u0022attack\\u0022:7,\\u0022defense\\u0022:4,\\u0022speed\\u0022:7,\\u0022movement\\u0022:5,\\u0022movementType\\u0022:0},\\u0022currentStatus\\u0022:{\\u0022CurrentHealth\\u0022:21,\\u0022CurrentShieldCount\\u0022:0},\\u0022isUnique\\u0022:false,\\u0022team\\u0022:0,\\u0022playerClassEnum\\u0022:2,\\u0022isTurnOver\\u0022:false,\\u0022xPos\\u0022:9,\\u0022yPos\\u0022:10,\\u0022UnitLoadout\\u0022:{\\u0022playerClassID\\u0022:0,\\u0022ModuleIDsCSV\\u0022:null,\\u0022AvailibleAttackIDsCSV\\u0022:null,\\u0022AvailaibeSupportIDsCSV\\u0022:null,\\u0022ActiveSkillsIDsCSV\\u0022:null},\\u0022serializedUnitLoadout\\u0022:null}\u0022,\u0022{\\u0022id\\u0022:2,\\u0022name\\u0022:\\u0022Mercenary\\u0022,\\u0022stats\\u0022:{\\u0022maxHealth\\u0022:21,\\u0022attack\\u0022:7,\\u0022defense\\u0022:4,\\u0022speed\\u0022:7,\\u0022movement\\u0022:5,\\u0022movementType\\u0022:0},\\u0022currentStatus\\u0022:{\\u0022CurrentHealth\\u0022:21,\\u0022CurrentShieldCount\\u0022:0},\\u0022isUnique\\u0022:false,\\u0022team\\u0022:0,\\u0022playerClassEnum\\u0022:2,\\u0022isTurnOver\\u0022:false,\\u0022xPos\\u0022:12,\\u0022yPos\\u0022:10,\\u0022UnitLoadout\\u0022:{\\u0022playerClassID\\u0022:0,\\u0022ModuleIDsCSV\\u0022:null,\\u0022AvailibleAttackIDsCSV\\u0022:null,\\u0022AvailaibeSupportIDsCSV\\u0022:null,\\u0022ActiveSkillsIDsCSV\\u0022:null},\\u0022serializedUnitLoadout\\u0022:null}\u0022,\u0022{\\u0022id\\u0022:2,\\u0022name\\u0022:\\u0022Mercenary\\u0022,\\u0022stats\\u0022:{\\u0022maxHealth\\u0022:21,\\u0022attack\\u0022:7,\\u0022defense\\u0022:4,\\u0022speed\\u0022:7,\\u0022movement\\u0022:5,\\u0022movementType\\u0022:0},\\u0022currentStatus\\u0022:{\\u0022CurrentHealth\\u0022:21,\\u0022CurrentShieldCount\\u0022:0},\\u0022isUnique\\u0022:false,\\u0022team\\u0022:0,\\u0022playerClassEnum\\u0022:2,\\u0022isTurnOver\\u0022:false,\\u0022xPos\\u0022:4,\\u0022yPos\\u0022:6,\\u0022UnitLoadout\\u0022:{\\u0022playerClassID\\u0022:0,\\u0022ModuleIDsCSV\\u0022:null,\\u0022AvailibleAttackIDsCSV\\u0022:null,\\u0022AvailaibeSupportIDsCSV\\u0022:null,\\u0022ActiveSkillsIDsCSV\\u0022:null},\\u0022serializedUnitLoadout\\u0022:null}\u0022]", + "serializedEnemyUnits": "[]", + "serializedNpcUnits":"[]"} \ No newline at end of file diff --git a/Johnmagotchi/Data/SaveMapData/map-1.json b/Johnmagotchi/Data/SaveMapData/map-1.json new file mode 100644 index 0000000..042c001 --- /dev/null +++ b/Johnmagotchi/Data/SaveMapData/map-1.json @@ -0,0 +1 @@ +{"width":24,"height":20,"serializedMapTiles":"[\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022]","serializedPlayerUnits":"[]","serializedEnemyUnits":"[]","serializedNpcUnits":"[]"} \ No newline at end of file diff --git a/Johnmagotchi/Data/SaveMapData/map-2.json b/Johnmagotchi/Data/SaveMapData/map-2.json new file mode 100644 index 0000000..cf8c418 --- /dev/null +++ b/Johnmagotchi/Data/SaveMapData/map-2.json @@ -0,0 +1 @@ +{"width":24,"height":20,"serializedMapTiles":"[\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022]","serializedPlayerUnits":"[\u0022{\\u0022id\\u0022:2,\\u0022name\\u0022:\\u0022Mercenary\\u0022,\\u0022stats\\u0022:{\\u0022maxHealth\\u0022:21,\\u0022attack\\u0022:7,\\u0022defense\\u0022:4,\\u0022speed\\u0022:7,\\u0022movement\\u0022:5,\\u0022movementType\\u0022:0},\\u0022currentStatus\\u0022:{\\u0022CurrentHealth\\u0022:21,\\u0022CurrentShieldCount\\u0022:0},\\u0022isUnique\\u0022:false,\\u0022team\\u0022:0,\\u0022playerClassEnum\\u0022:2,\\u0022isTurnOver\\u0022:false,\\u0022xPos\\u0022:2,\\u0022yPos\\u0022:4,\\u0022UnitLoadout\\u0022:{\\u0022playerClassID\\u0022:0,\\u0022ModuleIDsCSV\\u0022:null,\\u0022AvailibleAttackIDsCSV\\u0022:null,\\u0022AvailaibeSupportIDsCSV\\u0022:null,\\u0022ActiveSkillsIDsCSV\\u0022:null},\\u0022serializedUnitLoadout\\u0022:null}\u0022,\u0022{\\u0022id\\u0022:2,\\u0022name\\u0022:\\u0022Mercenary\\u0022,\\u0022stats\\u0022:{\\u0022maxHealth\\u0022:21,\\u0022attack\\u0022:7,\\u0022defense\\u0022:4,\\u0022speed\\u0022:7,\\u0022movement\\u0022:5,\\u0022movementType\\u0022:0},\\u0022currentStatus\\u0022:{\\u0022CurrentHealth\\u0022:21,\\u0022CurrentShieldCount\\u0022:0},\\u0022isUnique\\u0022:false,\\u0022team\\u0022:0,\\u0022playerClassEnum\\u0022:2,\\u0022isTurnOver\\u0022:false,\\u0022xPos\\u0022:5,\\u0022yPos\\u0022:4,\\u0022UnitLoadout\\u0022:{\\u0022playerClassID\\u0022:0,\\u0022ModuleIDsCSV\\u0022:null,\\u0022AvailibleAttackIDsCSV\\u0022:null,\\u0022AvailaibeSupportIDsCSV\\u0022:null,\\u0022ActiveSkillsIDsCSV\\u0022:null},\\u0022serializedUnitLoadout\\u0022:null}\u0022,\u0022{\\u0022id\\u0022:2,\\u0022name\\u0022:\\u0022Mercenary\\u0022,\\u0022stats\\u0022:{\\u0022maxHealth\\u0022:21,\\u0022attack\\u0022:7,\\u0022defense\\u0022:4,\\u0022speed\\u0022:7,\\u0022movement\\u0022:5,\\u0022movementType\\u0022:0},\\u0022currentStatus\\u0022:{\\u0022CurrentHealth\\u0022:21,\\u0022CurrentShieldCount\\u0022:0},\\u0022isUnique\\u0022:false,\\u0022team\\u0022:0,\\u0022playerClassEnum\\u0022:2,\\u0022isTurnOver\\u0022:false,\\u0022xPos\\u0022:7,\\u0022yPos\\u0022:4,\\u0022UnitLoadout\\u0022:{\\u0022playerClassID\\u0022:0,\\u0022ModuleIDsCSV\\u0022:null,\\u0022AvailibleAttackIDsCSV\\u0022:null,\\u0022AvailaibeSupportIDsCSV\\u0022:null,\\u0022ActiveSkillsIDsCSV\\u0022:null},\\u0022serializedUnitLoadout\\u0022:null}\u0022,\u0022{\\u0022id\\u0022:2,\\u0022name\\u0022:\\u0022Mercenary\\u0022,\\u0022stats\\u0022:{\\u0022maxHealth\\u0022:21,\\u0022attack\\u0022:7,\\u0022defense\\u0022:4,\\u0022speed\\u0022:7,\\u0022movement\\u0022:5,\\u0022movementType\\u0022:0},\\u0022currentStatus\\u0022:{\\u0022CurrentHealth\\u0022:21,\\u0022CurrentShieldCount\\u0022:0},\\u0022isUnique\\u0022:false,\\u0022team\\u0022:0,\\u0022playerClassEnum\\u0022:2,\\u0022isTurnOver\\u0022:false,\\u0022xPos\\u0022:6,\\u0022yPos\\u0022:6,\\u0022UnitLoadout\\u0022:{\\u0022playerClassID\\u0022:0,\\u0022ModuleIDsCSV\\u0022:null,\\u0022AvailibleAttackIDsCSV\\u0022:null,\\u0022AvailaibeSupportIDsCSV\\u0022:null,\\u0022ActiveSkillsIDsCSV\\u0022:null},\\u0022serializedUnitLoadout\\u0022:null}\u0022]","serializedEnemyUnits":"[\u0022{\\u0022id\\u0022:2,\\u0022name\\u0022:\\u0022Mercenary\\u0022,\\u0022stats\\u0022:{\\u0022maxHealth\\u0022:21,\\u0022attack\\u0022:7,\\u0022defense\\u0022:4,\\u0022speed\\u0022:7,\\u0022movement\\u0022:5,\\u0022movementType\\u0022:0},\\u0022currentStatus\\u0022:{\\u0022CurrentHealth\\u0022:21,\\u0022CurrentShieldCount\\u0022:0},\\u0022isUnique\\u0022:false,\\u0022team\\u0022:1,\\u0022playerClassEnum\\u0022:2,\\u0022isTurnOver\\u0022:false,\\u0022xPos\\u0022:3,\\u0022yPos\\u0022:6,\\u0022UnitLoadout\\u0022:{\\u0022playerClassID\\u0022:0,\\u0022ModuleIDsCSV\\u0022:null,\\u0022AvailibleAttackIDsCSV\\u0022:null,\\u0022AvailaibeSupportIDsCSV\\u0022:null,\\u0022ActiveSkillsIDsCSV\\u0022:null},\\u0022serializedUnitLoadout\\u0022:null}\u0022,\u0022{\\u0022id\\u0022:2,\\u0022name\\u0022:\\u0022Mercenary\\u0022,\\u0022stats\\u0022:{\\u0022maxHealth\\u0022:21,\\u0022attack\\u0022:7,\\u0022defense\\u0022:4,\\u0022speed\\u0022:7,\\u0022movement\\u0022:5,\\u0022movementType\\u0022:0},\\u0022currentStatus\\u0022:{\\u0022CurrentHealth\\u0022:21,\\u0022CurrentShieldCount\\u0022:0},\\u0022isUnique\\u0022:false,\\u0022team\\u0022:1,\\u0022playerClassEnum\\u0022:2,\\u0022isTurnOver\\u0022:false,\\u0022xPos\\u0022:1,\\u0022yPos\\u0022:6,\\u0022UnitLoadout\\u0022:{\\u0022playerClassID\\u0022:0,\\u0022ModuleIDsCSV\\u0022:null,\\u0022AvailibleAttackIDsCSV\\u0022:null,\\u0022AvailaibeSupportIDsCSV\\u0022:null,\\u0022ActiveSkillsIDsCSV\\u0022:null},\\u0022serializedUnitLoadout\\u0022:null}\u0022,\u0022{\\u0022id\\u0022:2,\\u0022name\\u0022:\\u0022Mercenary\\u0022,\\u0022stats\\u0022:{\\u0022maxHealth\\u0022:21,\\u0022attack\\u0022:7,\\u0022defense\\u0022:4,\\u0022speed\\u0022:7,\\u0022movement\\u0022:5,\\u0022movementType\\u0022:0},\\u0022currentStatus\\u0022:{\\u0022CurrentHealth\\u0022:21,\\u0022CurrentShieldCount\\u0022:0},\\u0022isUnique\\u0022:false,\\u0022team\\u0022:1,\\u0022playerClassEnum\\u0022:2,\\u0022isTurnOver\\u0022:false,\\u0022xPos\\u0022:2,\\u0022yPos\\u0022:8,\\u0022UnitLoadout\\u0022:{\\u0022playerClassID\\u0022:0,\\u0022ModuleIDsCSV\\u0022:null,\\u0022AvailibleAttackIDsCSV\\u0022:null,\\u0022AvailaibeSupportIDsCSV\\u0022:null,\\u0022ActiveSkillsIDsCSV\\u0022:null},\\u0022serializedUnitLoadout\\u0022:null}\u0022]","serializedNpcUnits":"[\u0022{\\u0022id\\u0022:2,\\u0022name\\u0022:\\u0022Mercenary\\u0022,\\u0022stats\\u0022:{\\u0022maxHealth\\u0022:21,\\u0022attack\\u0022:7,\\u0022defense\\u0022:4,\\u0022speed\\u0022:7,\\u0022movement\\u0022:5,\\u0022movementType\\u0022:0},\\u0022currentStatus\\u0022:{\\u0022CurrentHealth\\u0022:21,\\u0022CurrentShieldCount\\u0022:0},\\u0022isUnique\\u0022:false,\\u0022team\\u0022:2,\\u0022playerClassEnum\\u0022:2,\\u0022isTurnOver\\u0022:false,\\u0022xPos\\u0022:5,\\u0022yPos\\u0022:8,\\u0022UnitLoadout\\u0022:{\\u0022playerClassID\\u0022:0,\\u0022ModuleIDsCSV\\u0022:null,\\u0022AvailibleAttackIDsCSV\\u0022:null,\\u0022AvailaibeSupportIDsCSV\\u0022:null,\\u0022ActiveSkillsIDsCSV\\u0022:null},\\u0022serializedUnitLoadout\\u0022:null}\u0022,\u0022{\\u0022id\\u0022:2,\\u0022name\\u0022:\\u0022Mercenary\\u0022,\\u0022stats\\u0022:{\\u0022maxHealth\\u0022:21,\\u0022attack\\u0022:7,\\u0022defense\\u0022:4,\\u0022speed\\u0022:7,\\u0022movement\\u0022:5,\\u0022movementType\\u0022:0},\\u0022currentStatus\\u0022:{\\u0022CurrentHealth\\u0022:21,\\u0022CurrentShieldCount\\u0022:0},\\u0022isUnique\\u0022:false,\\u0022team\\u0022:2,\\u0022playerClassEnum\\u0022:2,\\u0022isTurnOver\\u0022:false,\\u0022xPos\\u0022:6,\\u0022yPos\\u0022:8,\\u0022UnitLoadout\\u0022:{\\u0022playerClassID\\u0022:0,\\u0022ModuleIDsCSV\\u0022:null,\\u0022AvailibleAttackIDsCSV\\u0022:null,\\u0022AvailaibeSupportIDsCSV\\u0022:null,\\u0022ActiveSkillsIDsCSV\\u0022:null},\\u0022serializedUnitLoadout\\u0022:null}\u0022,\u0022{\\u0022id\\u0022:2,\\u0022name\\u0022:\\u0022Mercenary\\u0022,\\u0022stats\\u0022:{\\u0022maxHealth\\u0022:21,\\u0022attack\\u0022:7,\\u0022defense\\u0022:4,\\u0022speed\\u0022:7,\\u0022movement\\u0022:5,\\u0022movementType\\u0022:0},\\u0022currentStatus\\u0022:{\\u0022CurrentHealth\\u0022:21,\\u0022CurrentShieldCount\\u0022:0},\\u0022isUnique\\u0022:false,\\u0022team\\u0022:2,\\u0022playerClassEnum\\u0022:2,\\u0022isTurnOver\\u0022:false,\\u0022xPos\\u0022:7,\\u0022yPos\\u0022:8,\\u0022UnitLoadout\\u0022:{\\u0022playerClassID\\u0022:0,\\u0022ModuleIDsCSV\\u0022:null,\\u0022AvailibleAttackIDsCSV\\u0022:null,\\u0022AvailaibeSupportIDsCSV\\u0022:null,\\u0022ActiveSkillsIDsCSV\\u0022:null},\\u0022serializedUnitLoadout\\u0022:null}\u0022]"} \ No newline at end of file diff --git a/Johnmagotchi/Data/SaveMapData/map-3.json b/Johnmagotchi/Data/SaveMapData/map-3.json new file mode 100644 index 0000000..cf8c418 --- /dev/null +++ b/Johnmagotchi/Data/SaveMapData/map-3.json @@ -0,0 +1 @@ +{"width":24,"height":20,"serializedMapTiles":"[\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022]","serializedPlayerUnits":"[\u0022{\\u0022id\\u0022:2,\\u0022name\\u0022:\\u0022Mercenary\\u0022,\\u0022stats\\u0022:{\\u0022maxHealth\\u0022:21,\\u0022attack\\u0022:7,\\u0022defense\\u0022:4,\\u0022speed\\u0022:7,\\u0022movement\\u0022:5,\\u0022movementType\\u0022:0},\\u0022currentStatus\\u0022:{\\u0022CurrentHealth\\u0022:21,\\u0022CurrentShieldCount\\u0022:0},\\u0022isUnique\\u0022:false,\\u0022team\\u0022:0,\\u0022playerClassEnum\\u0022:2,\\u0022isTurnOver\\u0022:false,\\u0022xPos\\u0022:2,\\u0022yPos\\u0022:4,\\u0022UnitLoadout\\u0022:{\\u0022playerClassID\\u0022:0,\\u0022ModuleIDsCSV\\u0022:null,\\u0022AvailibleAttackIDsCSV\\u0022:null,\\u0022AvailaibeSupportIDsCSV\\u0022:null,\\u0022ActiveSkillsIDsCSV\\u0022:null},\\u0022serializedUnitLoadout\\u0022:null}\u0022,\u0022{\\u0022id\\u0022:2,\\u0022name\\u0022:\\u0022Mercenary\\u0022,\\u0022stats\\u0022:{\\u0022maxHealth\\u0022:21,\\u0022attack\\u0022:7,\\u0022defense\\u0022:4,\\u0022speed\\u0022:7,\\u0022movement\\u0022:5,\\u0022movementType\\u0022:0},\\u0022currentStatus\\u0022:{\\u0022CurrentHealth\\u0022:21,\\u0022CurrentShieldCount\\u0022:0},\\u0022isUnique\\u0022:false,\\u0022team\\u0022:0,\\u0022playerClassEnum\\u0022:2,\\u0022isTurnOver\\u0022:false,\\u0022xPos\\u0022:5,\\u0022yPos\\u0022:4,\\u0022UnitLoadout\\u0022:{\\u0022playerClassID\\u0022:0,\\u0022ModuleIDsCSV\\u0022:null,\\u0022AvailibleAttackIDsCSV\\u0022:null,\\u0022AvailaibeSupportIDsCSV\\u0022:null,\\u0022ActiveSkillsIDsCSV\\u0022:null},\\u0022serializedUnitLoadout\\u0022:null}\u0022,\u0022{\\u0022id\\u0022:2,\\u0022name\\u0022:\\u0022Mercenary\\u0022,\\u0022stats\\u0022:{\\u0022maxHealth\\u0022:21,\\u0022attack\\u0022:7,\\u0022defense\\u0022:4,\\u0022speed\\u0022:7,\\u0022movement\\u0022:5,\\u0022movementType\\u0022:0},\\u0022currentStatus\\u0022:{\\u0022CurrentHealth\\u0022:21,\\u0022CurrentShieldCount\\u0022:0},\\u0022isUnique\\u0022:false,\\u0022team\\u0022:0,\\u0022playerClassEnum\\u0022:2,\\u0022isTurnOver\\u0022:false,\\u0022xPos\\u0022:7,\\u0022yPos\\u0022:4,\\u0022UnitLoadout\\u0022:{\\u0022playerClassID\\u0022:0,\\u0022ModuleIDsCSV\\u0022:null,\\u0022AvailibleAttackIDsCSV\\u0022:null,\\u0022AvailaibeSupportIDsCSV\\u0022:null,\\u0022ActiveSkillsIDsCSV\\u0022:null},\\u0022serializedUnitLoadout\\u0022:null}\u0022,\u0022{\\u0022id\\u0022:2,\\u0022name\\u0022:\\u0022Mercenary\\u0022,\\u0022stats\\u0022:{\\u0022maxHealth\\u0022:21,\\u0022attack\\u0022:7,\\u0022defense\\u0022:4,\\u0022speed\\u0022:7,\\u0022movement\\u0022:5,\\u0022movementType\\u0022:0},\\u0022currentStatus\\u0022:{\\u0022CurrentHealth\\u0022:21,\\u0022CurrentShieldCount\\u0022:0},\\u0022isUnique\\u0022:false,\\u0022team\\u0022:0,\\u0022playerClassEnum\\u0022:2,\\u0022isTurnOver\\u0022:false,\\u0022xPos\\u0022:6,\\u0022yPos\\u0022:6,\\u0022UnitLoadout\\u0022:{\\u0022playerClassID\\u0022:0,\\u0022ModuleIDsCSV\\u0022:null,\\u0022AvailibleAttackIDsCSV\\u0022:null,\\u0022AvailaibeSupportIDsCSV\\u0022:null,\\u0022ActiveSkillsIDsCSV\\u0022:null},\\u0022serializedUnitLoadout\\u0022:null}\u0022]","serializedEnemyUnits":"[\u0022{\\u0022id\\u0022:2,\\u0022name\\u0022:\\u0022Mercenary\\u0022,\\u0022stats\\u0022:{\\u0022maxHealth\\u0022:21,\\u0022attack\\u0022:7,\\u0022defense\\u0022:4,\\u0022speed\\u0022:7,\\u0022movement\\u0022:5,\\u0022movementType\\u0022:0},\\u0022currentStatus\\u0022:{\\u0022CurrentHealth\\u0022:21,\\u0022CurrentShieldCount\\u0022:0},\\u0022isUnique\\u0022:false,\\u0022team\\u0022:1,\\u0022playerClassEnum\\u0022:2,\\u0022isTurnOver\\u0022:false,\\u0022xPos\\u0022:3,\\u0022yPos\\u0022:6,\\u0022UnitLoadout\\u0022:{\\u0022playerClassID\\u0022:0,\\u0022ModuleIDsCSV\\u0022:null,\\u0022AvailibleAttackIDsCSV\\u0022:null,\\u0022AvailaibeSupportIDsCSV\\u0022:null,\\u0022ActiveSkillsIDsCSV\\u0022:null},\\u0022serializedUnitLoadout\\u0022:null}\u0022,\u0022{\\u0022id\\u0022:2,\\u0022name\\u0022:\\u0022Mercenary\\u0022,\\u0022stats\\u0022:{\\u0022maxHealth\\u0022:21,\\u0022attack\\u0022:7,\\u0022defense\\u0022:4,\\u0022speed\\u0022:7,\\u0022movement\\u0022:5,\\u0022movementType\\u0022:0},\\u0022currentStatus\\u0022:{\\u0022CurrentHealth\\u0022:21,\\u0022CurrentShieldCount\\u0022:0},\\u0022isUnique\\u0022:false,\\u0022team\\u0022:1,\\u0022playerClassEnum\\u0022:2,\\u0022isTurnOver\\u0022:false,\\u0022xPos\\u0022:1,\\u0022yPos\\u0022:6,\\u0022UnitLoadout\\u0022:{\\u0022playerClassID\\u0022:0,\\u0022ModuleIDsCSV\\u0022:null,\\u0022AvailibleAttackIDsCSV\\u0022:null,\\u0022AvailaibeSupportIDsCSV\\u0022:null,\\u0022ActiveSkillsIDsCSV\\u0022:null},\\u0022serializedUnitLoadout\\u0022:null}\u0022,\u0022{\\u0022id\\u0022:2,\\u0022name\\u0022:\\u0022Mercenary\\u0022,\\u0022stats\\u0022:{\\u0022maxHealth\\u0022:21,\\u0022attack\\u0022:7,\\u0022defense\\u0022:4,\\u0022speed\\u0022:7,\\u0022movement\\u0022:5,\\u0022movementType\\u0022:0},\\u0022currentStatus\\u0022:{\\u0022CurrentHealth\\u0022:21,\\u0022CurrentShieldCount\\u0022:0},\\u0022isUnique\\u0022:false,\\u0022team\\u0022:1,\\u0022playerClassEnum\\u0022:2,\\u0022isTurnOver\\u0022:false,\\u0022xPos\\u0022:2,\\u0022yPos\\u0022:8,\\u0022UnitLoadout\\u0022:{\\u0022playerClassID\\u0022:0,\\u0022ModuleIDsCSV\\u0022:null,\\u0022AvailibleAttackIDsCSV\\u0022:null,\\u0022AvailaibeSupportIDsCSV\\u0022:null,\\u0022ActiveSkillsIDsCSV\\u0022:null},\\u0022serializedUnitLoadout\\u0022:null}\u0022]","serializedNpcUnits":"[\u0022{\\u0022id\\u0022:2,\\u0022name\\u0022:\\u0022Mercenary\\u0022,\\u0022stats\\u0022:{\\u0022maxHealth\\u0022:21,\\u0022attack\\u0022:7,\\u0022defense\\u0022:4,\\u0022speed\\u0022:7,\\u0022movement\\u0022:5,\\u0022movementType\\u0022:0},\\u0022currentStatus\\u0022:{\\u0022CurrentHealth\\u0022:21,\\u0022CurrentShieldCount\\u0022:0},\\u0022isUnique\\u0022:false,\\u0022team\\u0022:2,\\u0022playerClassEnum\\u0022:2,\\u0022isTurnOver\\u0022:false,\\u0022xPos\\u0022:5,\\u0022yPos\\u0022:8,\\u0022UnitLoadout\\u0022:{\\u0022playerClassID\\u0022:0,\\u0022ModuleIDsCSV\\u0022:null,\\u0022AvailibleAttackIDsCSV\\u0022:null,\\u0022AvailaibeSupportIDsCSV\\u0022:null,\\u0022ActiveSkillsIDsCSV\\u0022:null},\\u0022serializedUnitLoadout\\u0022:null}\u0022,\u0022{\\u0022id\\u0022:2,\\u0022name\\u0022:\\u0022Mercenary\\u0022,\\u0022stats\\u0022:{\\u0022maxHealth\\u0022:21,\\u0022attack\\u0022:7,\\u0022defense\\u0022:4,\\u0022speed\\u0022:7,\\u0022movement\\u0022:5,\\u0022movementType\\u0022:0},\\u0022currentStatus\\u0022:{\\u0022CurrentHealth\\u0022:21,\\u0022CurrentShieldCount\\u0022:0},\\u0022isUnique\\u0022:false,\\u0022team\\u0022:2,\\u0022playerClassEnum\\u0022:2,\\u0022isTurnOver\\u0022:false,\\u0022xPos\\u0022:6,\\u0022yPos\\u0022:8,\\u0022UnitLoadout\\u0022:{\\u0022playerClassID\\u0022:0,\\u0022ModuleIDsCSV\\u0022:null,\\u0022AvailibleAttackIDsCSV\\u0022:null,\\u0022AvailaibeSupportIDsCSV\\u0022:null,\\u0022ActiveSkillsIDsCSV\\u0022:null},\\u0022serializedUnitLoadout\\u0022:null}\u0022,\u0022{\\u0022id\\u0022:2,\\u0022name\\u0022:\\u0022Mercenary\\u0022,\\u0022stats\\u0022:{\\u0022maxHealth\\u0022:21,\\u0022attack\\u0022:7,\\u0022defense\\u0022:4,\\u0022speed\\u0022:7,\\u0022movement\\u0022:5,\\u0022movementType\\u0022:0},\\u0022currentStatus\\u0022:{\\u0022CurrentHealth\\u0022:21,\\u0022CurrentShieldCount\\u0022:0},\\u0022isUnique\\u0022:false,\\u0022team\\u0022:2,\\u0022playerClassEnum\\u0022:2,\\u0022isTurnOver\\u0022:false,\\u0022xPos\\u0022:7,\\u0022yPos\\u0022:8,\\u0022UnitLoadout\\u0022:{\\u0022playerClassID\\u0022:0,\\u0022ModuleIDsCSV\\u0022:null,\\u0022AvailibleAttackIDsCSV\\u0022:null,\\u0022AvailaibeSupportIDsCSV\\u0022:null,\\u0022ActiveSkillsIDsCSV\\u0022:null},\\u0022serializedUnitLoadout\\u0022:null}\u0022]"} \ No newline at end of file diff --git a/Johnmagotchi/Data/SaveMapData/map-4.json b/Johnmagotchi/Data/SaveMapData/map-4.json new file mode 100644 index 0000000..c27e9cd --- /dev/null +++ b/Johnmagotchi/Data/SaveMapData/map-4.json @@ -0,0 +1 @@ +{"width":24,"height":20,"serializedMapTiles":"[\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:4,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022,\u0022[{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0},{\\u0022Type\\u0022:0,\\u0022SubType\\u0022:0}]\u0022]","serializedPlayerUnits":"[]","serializedEnemyUnits":"[]","serializedNpcUnits":"[]"} \ No newline at end of file diff --git a/Johnmagotchi/Data/SaveMapData/map-5.json b/Johnmagotchi/Data/SaveMapData/map-5.json new file mode 100644 index 0000000..afb797c --- /dev/null +++ b/Johnmagotchi/Data/SaveMapData/map-5.json @@ -0,0 +1,10 @@ +{ + "exclude": [ + "**/bin", + "**/bower_components", + "**/jspm_packages", + "**/node_modules", + "**/obj", + "**/platforms" + ] +} \ No newline at end of file diff --git a/Johnmagotchi/Data/SaveMapData/map-6.json b/Johnmagotchi/Data/SaveMapData/map-6.json new file mode 100644 index 0000000..afb797c --- /dev/null +++ b/Johnmagotchi/Data/SaveMapData/map-6.json @@ -0,0 +1,10 @@ +{ + "exclude": [ + "**/bin", + "**/bower_components", + "**/jspm_packages", + "**/node_modules", + "**/obj", + "**/platforms" + ] +} \ No newline at end of file diff --git a/Johnmagotchi/Data/SaveMapData/map-7.json b/Johnmagotchi/Data/SaveMapData/map-7.json new file mode 100644 index 0000000..afb797c --- /dev/null +++ b/Johnmagotchi/Data/SaveMapData/map-7.json @@ -0,0 +1,10 @@ +{ + "exclude": [ + "**/bin", + "**/bower_components", + "**/jspm_packages", + "**/node_modules", + "**/obj", + "**/platforms" + ] +} \ No newline at end of file diff --git a/Johnmagotchi/Data/SaveMapData/map-8.json b/Johnmagotchi/Data/SaveMapData/map-8.json new file mode 100644 index 0000000..afb797c --- /dev/null +++ b/Johnmagotchi/Data/SaveMapData/map-8.json @@ -0,0 +1,10 @@ +{ + "exclude": [ + "**/bin", + "**/bower_components", + "**/jspm_packages", + "**/node_modules", + "**/obj", + "**/platforms" + ] +} \ No newline at end of file diff --git a/Johnmagotchi/Data/SaveMapData/map-9.json b/Johnmagotchi/Data/SaveMapData/map-9.json new file mode 100644 index 0000000..afb797c --- /dev/null +++ b/Johnmagotchi/Data/SaveMapData/map-9.json @@ -0,0 +1,10 @@ +{ + "exclude": [ + "**/bin", + "**/bower_components", + "**/jspm_packages", + "**/node_modules", + "**/obj", + "**/platforms" + ] +} \ No newline at end of file diff --git a/Johnmagotchi/Data/readme.txt b/Johnmagotchi/Data/readme.txt new file mode 100644 index 0000000..ddba1e8 --- /dev/null +++ b/Johnmagotchi/Data/readme.txt @@ -0,0 +1 @@ +this directory is used for game save data and other persistant data \ No newline at end of file diff --git a/Johnmagotchi/GameContent/.DS_Store b/Johnmagotchi/GameContent/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..3d0db0d163c9bab938685fb99229c25fad24e849 GIT binary patch literal 6148 zcmeHK%}T>S5T0$TO({YTiXH=A3s%Ki@e*P^3r6&yQWIM=8ndNI&7l->)fe(jd>&_Z zH(<5kO~lT??l(I>yO|HNKL8-yaeo`20RR>@LP5$LA@f{U$pjM$HODQakOWyW45B#` z{Y4XfdlgO~fCm`Br|*{mdftLz6eek_^)5=~%F=Sxs#<*j8sC{A7IGUMHu&G=E`y0PgJg_9ahb%^&0Dw$!=%AX}3Gm zrad`m@1eTWo=$7l+UC~bY40(5isg%DQXuI{Rty&KiprOwp1n~V$@mUEMOG2b$P6$8 z%m6d6U<{apz^X4;-CQm+zzqD%0PPPpHbTc>u2F3r*wOWw{1rkH)afljXd844<{Ht1 zB6KREP8H^fA#^(0Z4>7h%r)wC5Nc(d$E;jDUW8g5?Y0UB;b`QZ8DIux87S*vgU3Urki!x{HxAN$$wXxk`BcZsQ6cp5FE&({8ePly9wcjQk Z;~ayzMw*4}Djkt80*Vmsn1Nql-~+PXOg8`k literal 0 HcmV?d00001 diff --git a/Johnmagotchi/GameContent/Logic/BattleLogic.cs b/Johnmagotchi/GameContent/Logic/BattleLogic.cs new file mode 100644 index 0000000..8a59565 --- /dev/null +++ b/Johnmagotchi/GameContent/Logic/BattleLogic.cs @@ -0,0 +1,121 @@ +using Johnmagotchi.GameContent.Objects.Units.BattleObjects; +using Johnmagotchi.GameContent.Units; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Reflection.Metadata; +using System.Runtime.ConstrainedExecution; +using System.Text; +using System.Threading.Tasks; + +namespace Johnmagotchi.GameContent.Logic +{ + public static class BattleLogic + { + private static double CriticalMultiplier = 1.5; + public static Random Random = new Random(); + public static BattleResults RunBattle(ref UnitObject Attacker, ref UnitObject Defender, AttackObj attack, AttackObj counterAttack) { + + // these are debugs, should be parsed from attack + unit combos + bool IsCounterAttackOccuring = true; + bool IsDoubleAttackOccuring = false; + bool IsDoubleCounterAttackOccuring = false; + + BattleResults results = new BattleResults(); // battle results will determine how the battles are animated + + // for each combat, we need to do each attack phase that occurs apply results here + + //Initial Attack + HandleAttackPhase(ref Attacker, ref Defender, attack, ref results, false); + + //Enemy's counter attack + if (IsCounterAttackOccuring) + { + HandleAttackPhase(ref Defender, ref Attacker, counterAttack, ref results, true); + } + // FE style double attack + if (IsDoubleAttackOccuring) + { + HandleAttackPhase(ref Attacker, ref Defender, attack, ref results, false); + } + // FE style Double Counter Attack + if (IsDoubleCounterAttackOccuring) + { + HandleAttackPhase(ref Defender, ref Attacker, counterAttack, ref results, true); + } + + + return results; + } + + // this is each step + public static void HandleAttackPhase( + ref UnitObject Attacker, ref UnitObject Defender, AttackObj attack, + ref BattleResults results, bool isCounter) + { + int hitcount = attack.BaseHitCount; // anything that adjusts how many times an attack happens PER PHASE should be adjusted here + + for (int i = 0; i < hitcount; i++) { + + int hitRoll = BattleLogic.Random.Next(100) + 1; // random int 1 - 100 + int hitThreshold = attack.BaseAccuracy + Attacker.stats.Speed - Defender.stats.Speed; + + // this should be adjusted, in FE games its usally something like...... + // ATTACKER = Hit + (Skill × 2) + (Luck / 2) + (Support bonus)+(Weapon triangle advantage/ disadvantage) +(S level bonus) + // DEFENDER = ((Attack speed × 2) +(Luck) + (Terrain bonus) +(Support bonus) +Tactician bonus) ) + // hit perentage = attacker - defender + + int critThreshold = 95; + + + if (hitRoll < hitThreshold) //handle misses + { + + results.addResult(BattleResults.resultType.MISS, 0, isCounter); + } + else if (hitRoll >= critThreshold) //Handle Crits + { + + if (Defender.currentStatus.CurrentShieldCount > 1) Defender.currentStatus.CurrentShieldCount--; // as is, crits ignore shields but should still tick a shield down + if (Defender.currentStatus.CurrentShieldCount < 0) Defender.currentStatus.CurrentShieldCount = 0; + int BaseDamage = CalculateDamage(Attacker,Defender,attack); + int TotalCritDamage = (int) Math.Ceiling (BaseDamage * CriticalMultiplier); + + //apply Damage to defending unit, then add to result report + Defender.currentStatus.CurrentHealth -= TotalCritDamage; + results.addResult(BattleResults.resultType.CRITICAL, TotalCritDamage, isCounter); + + } + else if (Defender.currentStatus.CurrentShieldCount > 1) // Shielded + { + Defender.currentStatus.CurrentShieldCount--; + results.addResult(BattleResults.resultType.SHIELDED,1, isCounter); // 1 siginfies 1 shield lost + } + else // normal attack + { + int BaseDamage = CalculateDamage(Attacker, Defender, attack); + + //Apply damage + report to animation handler + Defender.currentStatus.CurrentHealth -= BaseDamage; + results.addResult(BattleResults.resultType.ATTACK, BaseDamage, isCounter); + } + } + return; + } + + private static int CalculateDamage( UnitObject Attacker, UnitObject Defender, AttackObj attack) + { + int damage = 0; + + damage += attack.BaseDamage; + damage += Attacker.stats.Attack; + + damage -= Defender.stats.Defense; + + + if (damage < 0) damage = 0; + return damage ; + } + } +} diff --git a/Johnmagotchi/GameContent/Logic/BattleResults.cs b/Johnmagotchi/GameContent/Logic/BattleResults.cs new file mode 100644 index 0000000..7f3a76c --- /dev/null +++ b/Johnmagotchi/GameContent/Logic/BattleResults.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Johnmagotchi.GameContent.Logic +{ + public class BattleResults + { + /* + This class is basically a summary of the "math" that happened in the battle routines + that will *eventually* be displayed in the battle animation. + + */ + public enum resultType + { + MISS, + ATTACK, + CRITICAL, + SHIELDED, + SPECIAL, + } + + public List> results; + + public void addResult(resultType result, int val, bool isCounter) { + results.Add(new Tuple(result, val, isCounter)); + } + } +} diff --git a/Johnmagotchi/GameContent/Logic/MovementCostTable.cs b/Johnmagotchi/GameContent/Logic/MovementCostTable.cs new file mode 100644 index 0000000..5c2c06c --- /dev/null +++ b/Johnmagotchi/GameContent/Logic/MovementCostTable.cs @@ -0,0 +1,110 @@ +using Johnmagotchi.Core.tools; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using static Johnmagotchi.GameContent.Objects.Units.BattleObjects.UnitStatBlock; + +namespace Johnmagotchi.GameContent.Logic +{ + public static class MovementCostTable + { + public static int getMoveCost(MovementType moveType, TileType tileType) { + switch (moveType) { + case MovementType.FOOT: + return FootMovement(tileType); + case MovementType.WHEELS: + return WheelMovement(tileType); + case MovementType.HORSE: + return HorseMovement(tileType); + case MovementType.FLYING: + return FlyingMovement(tileType); + default: + return FootMovement(tileType); + } + } + + private static int FootMovement(TileType tileType) { + switch (tileType) { + case TileType.GRASS: + case TileType.ROAD: + case TileType.BASE: + case TileType.CITY: + case TileType.HQ: + return 1; + + case TileType.RIVER: + case TileType.MOUNTAIN: + return 2; + + case TileType.SEA: + return 9999; + default: + return 9999; + } + } + private static int WheelMovement(TileType tileType) + { + switch (tileType) + { + case TileType.GRASS: + case TileType.ROAD: + case TileType.BASE: + case TileType.CITY: + case TileType.HQ: + return 1; + + case TileType.RIVER: + case TileType.MOUNTAIN: + return 2; + + case TileType.SEA: + return 9999; + default: + return 9999; + } + } + private static int HorseMovement(TileType tileType) + { + switch (tileType) + { + case TileType.GRASS: + case TileType.ROAD: + case TileType.BASE: + case TileType.CITY: + case TileType.HQ: + return 1; + + case TileType.RIVER: + case TileType.MOUNTAIN: + return 2; + + case TileType.SEA: + return 9999; + default: + return 9999; + } + } + + private static int FlyingMovement(TileType tileType) + { + + switch (tileType) + { + case TileType.GRASS: + case TileType.ROAD: + case TileType.BASE: + case TileType.CITY: + case TileType.HQ: + case TileType.RIVER: + case TileType.MOUNTAIN: + case TileType.SEA: + return 1; + default: + return 9999; + } + } + + } +} diff --git a/Johnmagotchi/GameContent/Objects/.DS_Store b/Johnmagotchi/GameContent/Objects/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f87428353358f2eb5d9e55f32e44e064f4515d59 GIT binary patch literal 6148 zcmeHKJE{Uf5bX9T2quPxa|LfOh@L>q4IYRfEBK2y@?0Lx>QAyPW*R8f&{H!#T{BDt z+uI_di|hYfWGW(KxS`x_=$q}E_iT_61;TO0`L;eahhwwr<-Q6ScO)BWWG|Nv-*#wJ zfC^9nDnJFOz`GU53Ok;>`(U0&1*pK+D`4M;0ynIQZJ>WTFn9|993t$7x%U#lVgX=H zYy%O2X;6Vd)od{|=!lohtBGx3&_%QP(7ai*Ls7pS=NC^Gt$`e=02Sye@E6Oe)&CXz zMgQL=aYY5Fz)vZl!{vIpz>~7J_8w=ow!pV=%Xz@fFn0c7o_SK_6`Nzf VCbof2N8IT^{tTEdG%E0E1)fEO6wCks literal 0 HcmV?d00001 diff --git a/Johnmagotchi/GameContent/Objects/Maps/BattleMap.cs b/Johnmagotchi/GameContent/Objects/Maps/BattleMap.cs new file mode 100644 index 0000000..8d46c98 --- /dev/null +++ b/Johnmagotchi/GameContent/Objects/Maps/BattleMap.cs @@ -0,0 +1,521 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Text.Json; +using System.Threading.Tasks; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using TibzGame.Core.ScreenManager; +using Johnmagotchi.GameContent.Units; +using Johnmagotchi.Core.tools; +using System.Runtime.ExceptionServices; + + +namespace Johnmagotchi.GameContent.Objects +{ + public class BattleMap + { + public int width { get; set; } + public int height{ get; set; } + + public string serializedMapTiles{ get; set; } + public string serializedPlayerUnits { get; set; } + public string serializedEnemyUnits{ get; set; } + public string serializedNpcUnits { get; set; } + + + private MapTile [,] MapTileGrid; + + private List playerUnits; + private List enemyUnits; + private List npcUnits; + + private SpriteBatch _spriteBatch; + private ScreenManager _screenManager; + private SpriteEffects currentSpriteEffects; + public Boolean OutlineEnabled; + + Texture2D _outlineTexture; + + public BattleMap(){ + buildMap(10,10); + } + public BattleMap(int width, int height) + { + buildMap(width,height); + } + + public void buildMap(int w, int h){ + this.height = h; // default min height (shooting for 360 x 640 res, 40x40 pixel grid) + this.width = w; + MapTileGrid = new MapTile[width,height]; + this.playerUnits = new List(); + this.npcUnits = new List(); + this.enemyUnits = new List(); + } + + public void Init(ScreenManager ScreenManager){ + this.OutlineEnabled = true; + this._screenManager = ScreenManager; + initArray(); + _spriteBatch = new SpriteBatch(_screenManager.GraphicsDevice); + _outlineTexture = _screenManager.contentRef.Load("Map-UI/outline-32"); + } + + + public void InitFromReload(ScreenManager ScreenManager){ + this.OutlineEnabled = true; + this._screenManager = ScreenManager; + _spriteBatch = new SpriteBatch(_screenManager.GraphicsDevice); + _outlineTexture = _screenManager.contentRef.Load("Map-UI/outline-32"); + } + + public void Update() + { + foreach (UnitObject unit in playerUnits) + { + unit.Update(); + } + foreach (UnitObject unit in enemyUnits) + { + unit.Update(); + } + foreach (UnitObject unit in npcUnits) + { + unit.Update(); + } + + for (int x = 0; x < width; x++) + { + for (int y = 0; y < height; y++) + { + MapTileGrid[x,y].Update(); + } + } + } + + public void initArray(){ + // init tiles + for (int x =0; x < width; x++) + { + for (int y =0; y < height; y++) + { + MapTileGrid[x,y] = new MapTile(); + MapTileGrid[x,y].Init(_screenManager); + } + } + //set neighbors + for (int x =0; x < width; x++) + { + for (int y =0; y < height; y++) + { + if (x -1 >= 0) MapTileGrid[x,y].WestNeighborType = MapTileGrid[x-1,y].Type; + if (x+1 < height) MapTileGrid[x,y].WestNeighborType = MapTileGrid[x+1,y].Type; + if (y -1 >= 0) MapTileGrid[x,y].WestNeighborType = MapTileGrid[x,y-1].Type; + if (y+1 < height) MapTileGrid[x,y].WestNeighborType = MapTileGrid[x,y+1].Type; + } + } + } + public void DrawMap(int xOffset, int yOffset){ + // this could probably be changed to only draw visible tiles instead of every single tile in the future + for (int x =0; x < width; x++) + { + for (int y =0; y < height; y++) + { + int xLocation = (x * MapTile.TILE_WIDTH_PX) + xOffset; + int yLocation = (y * MapTile.TILE_HEIGHT_PX)+ yOffset; + MapTileGrid[x,y].DrawAt(xLocation, yLocation); + } + } + + +// ADD IN an if statment, 'IF OUTLINE IS ENABLED' + if (this.OutlineEnabled == true) + { + _spriteBatch.Begin(SpriteSortMode.Deferred, null, SamplerState.PointClamp); + for (int x =0; x < width; x++) + { + for (int y =0; y < height; y++) + { + int xLocation = (x * MapTile.TILE_WIDTH_PX) + xOffset; + int yLocation = (y * MapTile.TILE_HEIGHT_PX)+ yOffset; + this.DrawOutlineSquare(xLocation, yLocation); + } + } + _spriteBatch.End(); + } + } + + private void DrawOutlineSquare(int posX, int posY) + { + // all rectangles should do the scaling from world coordinates to screen coordinates + Rectangle tileRect = _screenManager.GetScaledRectangle(posX, posY, MapTile.TILE_WIDTH_PX, MapTile.TILE_HEIGHT_PX); + + _spriteBatch.Draw( + _outlineTexture, tileRect, null, Color.White, 0, new Vector2(0, 0), + currentSpriteEffects, 1); + } + + + public void DrawUnits(int xOffset, int yOffset) { + + foreach(UnitObject unit in playerUnits) { + int xLocation = (unit.xPos * MapTile.TILE_WIDTH_PX) + xOffset; + int yLocation = (unit.yPos * MapTile.TILE_HEIGHT_PX) + yOffset; + unit.DrawAt( xLocation, yLocation); + } + foreach (UnitObject unit in enemyUnits) + { + int xLocation = (unit.xPos * MapTile.TILE_WIDTH_PX) + xOffset; + int yLocation = (unit.yPos * MapTile.TILE_HEIGHT_PX) + yOffset; + unit.DrawAt( xLocation, yLocation); + } + foreach (UnitObject unit in npcUnits) + { + int xLocation = (unit.xPos * MapTile.TILE_WIDTH_PX) + xOffset; + int yLocation = (unit.yPos * MapTile.TILE_HEIGHT_PX) + yOffset; + unit.DrawAt(xLocation, yLocation); + } + } + + public void ChangeTileType(int x, int y, TileType newType) + { + MapTileGrid[x,y].ChangeType(newType); + if(x > 0){MapTileGrid[x-1,y].EastNeighborType = newType;} //update left neighbor + if(x < width -1){MapTileGrid[x +1,y].WestNeighborType = newType;} //update right neighbor + if(y > 0){MapTileGrid[x,y-1].SouthNeighborType = newType;} //update top neighbor + if(y < height -1){MapTileGrid[x ,y+1].NorthNeighborType = newType;} //update bottom neighbor + } + + public void serializeMapTiles(){ + List serializedRows = new List(); + for (int row = 0; row < this.height; row ++){ + + List rowData = new List(); + for (int column =0; column < this.width; column++){ + rowData.Add( MapTileGrid[column, row]); // grid is width, height + } + serializedRows.Add( JsonSerializer.Serialize(rowData)); + } + serializedMapTiles = JsonSerializer.Serialize(serializedRows); + } + + public void deserializeMapTiles(){ + MapTileGrid = new MapTile[width,height]; + List serializedRows = JsonSerializer.Deserialize>(serializedMapTiles); + for (int row= 0; row < serializedRows.Count; row++){ + string currentRow = serializedRows[row]; + List rowData = JsonSerializer.Deserialize>(currentRow); + for (int column =0; column < rowData.Count; column++){ + MapTile tile = rowData[column]; + MapTileGrid[column, row] = tile; + MapTileGrid[column, row].Init(_screenManager); + } + } + // initArray(); + System.Console.WriteLine("Deserialition Completed!"); + } + public void SerializeAll() + { + this.serializeMapTiles(); + this.SerializeUnitData(); + + } + + public void SerializeUnitData() { + List player = new List(); + List enemy = new List(); + List npc = new List(); + + foreach (UnitObject unit in playerUnits) { + player.Add(unit.GetAsSerialized()); + } + foreach (UnitObject unit in enemyUnits) { + enemy.Add(unit.GetAsSerialized()); + } + foreach (UnitObject unit in npcUnits) + { + npc.Add(unit.GetAsSerialized()); + } + serializedPlayerUnits = JsonSerializer.Serialize(player); + serializedEnemyUnits = JsonSerializer.Serialize(enemy); + serializedNpcUnits = JsonSerializer.Serialize(npc); + + TibzLog.Debug("P:" + player.Count + " E:" + enemy.Count + " N:" + npc.Count); + + } + public void DeserializeUnitData() { + TibzLog.Debug("Deserializing unit data"); + List OutPlayerUnits = new List(); + List OutEnemyUnits = new List(); + List OutNpcUnits = new List(); + + List players = JsonSerializer.Deserialize>(serializedPlayerUnits); + List enemies = JsonSerializer.Deserialize>(serializedEnemyUnits); + List npcs = JsonSerializer.Deserialize>(serializedNpcUnits); + + foreach(string entry in players) { + UnitObject newUnit = new UnitObject(entry); + TibzLog.Debug(JsonSerializer.Serialize(newUnit)); + OutPlayerUnits.Add(newUnit); // makes new instance from serialized string + newUnit.InitSprite(_screenManager, UnitObject.UnitTeam.PLAYER); + } + foreach (string entry in enemies) + { + UnitObject newUnit = new UnitObject(entry); + OutEnemyUnits.Add(newUnit); // makes new instance from serialized string + newUnit.InitSprite(_screenManager, UnitObject.UnitTeam.ENEMY); + } + foreach (string entry in npcs) + { + UnitObject newUnit = new UnitObject(entry); + OutNpcUnits.Add(newUnit); // makes new instance from serialized string + newUnit.InitSprite(_screenManager,UnitObject.UnitTeam.NPC); + } + + playerUnits = OutPlayerUnits; + enemyUnits = OutEnemyUnits; + npcUnits = OutNpcUnits; + + TibzLog.Debug("P:" + playerUnits.Count + " E:" + enemyUnits.Count + " N:" + npcUnits.Count); + } + + public void AddPlayerUnit(UnitObject unitRef, int xpos, int ypos) + { + if (! CheckIfUnitCanBePlaced(unitRef, xpos, ypos)) + { + return; + } + + UnitObject unit = new UnitObject(unitRef); + unit.SetShaderSet(UnitObject.SpriteShaderSets.PLAYER_NORMAL); + unit.xPos = xpos; + unit.yPos = ypos; + if (unit.isUnique == true) + { + //check then replace + for (int i = 0; i < playerUnits.Count; i++) + { + if (playerUnits[i].id == unit.id ) + { + playerUnits[i].xPos = xpos; + playerUnits[i].yPos = ypos; + return; // dont add + } + } + playerUnits.Add(unit); // else add + } + else { + playerUnits.Add(unit); + } + + unit.InitSprite(_screenManager, UnitObject.UnitTeam.PLAYER); + } + public void AddEnemyUnit(UnitObject unitRef, int xpos, int ypos) + { + if (!CheckIfUnitCanBePlaced(unitRef, xpos, ypos)) + { + return; + } + UnitObject unit = new UnitObject(unitRef); + + unit.SetShaderSet(UnitObject.SpriteShaderSets.ENEMY_NORMAL); + unit.xPos = xpos; + unit.yPos = ypos; + if (unit.isUnique == true) + { + //check then replace + for (int i = 0; i < enemyUnits.Count; i++) + { + if (enemyUnits[i].id == unit.id) + { + enemyUnits[i].xPos = xpos; + enemyUnits[i].yPos = ypos; + return; // dont add + } + } + enemyUnits.Add(unit); // else add + } + else + { + enemyUnits.Add(unit); + } + unit.InitSprite(_screenManager, UnitObject.UnitTeam.ENEMY); + } + + public void AddNpcUnit(UnitObject unitRef, int xpos, int ypos) + { + + if (!CheckIfUnitCanBePlaced(unitRef, xpos, ypos)) + { + return; + } + + UnitObject unit = new UnitObject(unitRef); + unit.SetShaderSet(UnitObject.SpriteShaderSets.NPC_NORMAL); + unit.xPos = xpos; + unit.yPos = ypos; + + if (unit.isUnique == true) + { + //check then replace + for (int i = 0; i < npcUnits.Count; i++) + { + if (npcUnits[i].id == unit.id) + { + enemyUnits[i] = unit; + return; // dont add + } + } + npcUnits.Add(unit); // else add + } + else + { + npcUnits.Add(unit); + } + unit.InitSprite(_screenManager, UnitObject.UnitTeam.NPC); + + TibzLog.Debug("NPC obj count: {0}", npcUnits.Count); + + } + + public void deleteUnit(UnitObject unitRef) { + + int removePlayerIndex = -1; + int removeEnemyIndex = -1; + int removeNpcIndex = -1; + + for (int i = 0; i < playerUnits.Count; i++) + { + if (unitRef.internalID == playerUnits[i].internalID) + { + removePlayerIndex = i; + break; + } + } + for (int i = 0; i < enemyUnits.Count; i++) + { + if (unitRef.internalID == enemyUnits[i].internalID) + { + removeEnemyIndex = i; + break; + } + } + for (int i = 0; i < npcUnits.Count; i++) + { + if (unitRef.internalID == npcUnits[i].internalID) + { + removeNpcIndex = i; + break; + } + } + if (removePlayerIndex != -1) { playerUnits.RemoveAt(removePlayerIndex); } + if (removeEnemyIndex != -1) { enemyUnits.RemoveAt(removeEnemyIndex); } + if (removeNpcIndex != -1) { npcUnits.RemoveAt(removeNpcIndex); } + } + + private bool CheckIfUnitCanBePlaced(UnitObject unit, int x, int y) { + + if (MapTileGrid[x,y].Type == TileType.SEA ) { // add a && unit.Traversal type or whatever, so we check if this unit CAN stand on said tile. + return false; + } + // else delete existing units if they overlap then return true + + return true; + } + + + public bool CheckIfAnyUnits(int x, int y) { + return CheckIfPlayerUnits(x, y) || CheckIfEnemyUnits(x,y)|| CheckIfNpcUnits(x,y) ; + } + public bool CheckIfPlayerUnits(int CursorX, int CursorY) + { + foreach (UnitObject Unit in playerUnits) { + if (Unit.xPos == CursorX && Unit.yPos == CursorY) { return true; } + } + return false; + } + public bool CheckIfEnemyUnits(int CursorX, int CursorY) + { + foreach (UnitObject Unit in enemyUnits) + { + if (Unit.xPos == CursorX && Unit.yPos == CursorY) { return true; } + } + return false; + } + public bool CheckIfNpcUnits(int CursorX, int CursorY) + { + foreach (UnitObject Unit in npcUnits) + { + if (Unit.xPos == CursorX && Unit.yPos == CursorY) { return true; } + } + return false; + } + public UnitObject getUnitAtLocation(int CursorX, int CursorY) { + + foreach (UnitObject Unit in playerUnits) + { + if (Unit.xPos == CursorX && Unit.yPos == CursorY) { return Unit; } + } + foreach (UnitObject Unit in enemyUnits) + { + if (Unit.xPos == CursorX && Unit.yPos == CursorY) { return Unit; } + } + foreach (UnitObject Unit in npcUnits) + { + if (Unit.xPos == CursorX && Unit.yPos == CursorY) { return Unit; } + } + return null; + } + + public void moveUnit(UnitObject unitcopy, int x, int y) + { + foreach (UnitObject Unit in playerUnits) + { + if (Unit.internalID == unitcopy.internalID) + { + Unit.xPos = x; + Unit.yPos = y; + } + } + foreach (UnitObject Unit in enemyUnits) + { + if (Unit.internalID == unitcopy.internalID) { } + } + foreach (UnitObject Unit in npcUnits) + { + if (Unit.internalID == unitcopy.internalID) { } + } + } + + public MapTile getTile(int x, int y) { + if (x < 0 || y < 0) return null; + if (x >= width || y >= height) return null; + return MapTileGrid[x, y]; + } + public void ChangeTileHighlight(int x, int y, TileHighlight highlightType) + { + MapTileGrid[x, y].SetTileHighlight(highlightType); + } + + + public BattleMap GetClone() { + BattleMap clone = new BattleMap(this.width, this.height); + clone.Init(this._screenManager); + this.SerializeAll(); + + clone.serializedMapTiles = this.serializedMapTiles; + clone.deserializeMapTiles(); + + clone.serializedPlayerUnits = this.serializedPlayerUnits; + clone.serializedNpcUnits = this.serializedNpcUnits; + clone.serializedEnemyUnits = this.serializedEnemyUnits; + clone.DeserializeUnitData(); + + return clone; + } + + } +} diff --git a/Johnmagotchi/GameContent/Objects/Maps/MapMovementNode.cs b/Johnmagotchi/GameContent/Objects/Maps/MapMovementNode.cs new file mode 100644 index 0000000..3bb4242 --- /dev/null +++ b/Johnmagotchi/GameContent/Objects/Maps/MapMovementNode.cs @@ -0,0 +1,217 @@ +using Johnmagotchi.Core.tools; +using Johnmagotchi.GameContent.Logic; +using Johnmagotchi.GameContent.Units; +using System; +using System.Collections.Generic; +using System.Windows.Forms.VisualStyles; +using static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox; + +namespace Johnmagotchi.GameContent.Objects.Maps +{ + public class MapMovementNode + { + public enum ParentNodeLocation { + NORTH, EAST, SOUTH, WEST, ROOT + } + + + UnitObject selectedUnit; + BattleMap currentMap; + public int movesRemaining; + public int x; + public int y; + public MapMovementNode(UnitObject selectedUnit, BattleMap currentMap, int moveRemaining, int x, int y) { + + this.selectedUnit = selectedUnit; + this.currentMap = currentMap; + this.movesRemaining = moveRemaining; + this.x = x; + this.y = y; + } + + /// Passes a list by reference, recursively creates nodes to traverse tree and then assigns to list + public void GetMoveLocations(ParentNodeLocation parent, ref List> list) { + + if (movesRemaining <= 0) return; // no more moves left, invalid + if (x < 0 || x > currentMap.width || y < 0 || y > currentMap.height) return; // square is out of bounds, invalid + + //this square is valid, add to list + list.Add(new Tuple(x, y)); + // parent north means the unit movement is south, parent east means we moved west, etc + if (parent != ParentNodeLocation.NORTH) // check north movement + { + MapTile destTile = currentMap.getTile(x, y - 1); + if (destTile != null) { + new MapMovementNode(selectedUnit, currentMap, getMovesRemaining(destTile, x, y-1), x, y - 1).GetMoveLocations(ParentNodeLocation.SOUTH, ref list); + } + } + if (parent != ParentNodeLocation.EAST) // check east movement + { + MapTile destTile = currentMap.getTile(x + 1, y); + if (destTile != null) + { + new MapMovementNode(selectedUnit, currentMap, getMovesRemaining(destTile, x+1 ,y), x + 1, y).GetMoveLocations(ParentNodeLocation.WEST, ref list); + } + //new MapMovementNode(ParentNodeLocation.SOUTH, selectedUnit, getMovesRemaining(), x + 1, y).GetLocations(ref list); + } + if (parent != ParentNodeLocation.SOUTH) // check south movement + { + MapTile destTile = currentMap.getTile(x, y + 1); + if (destTile != null) + { + new MapMovementNode(selectedUnit, currentMap, getMovesRemaining(destTile , x, y+1), x, y + 1).GetMoveLocations(ParentNodeLocation.NORTH, ref list); + } + } + if (parent != ParentNodeLocation.WEST) // check west movement + { + MapTile destTile = currentMap.getTile(x - 1, y); + if (destTile != null) + { + new MapMovementNode(selectedUnit, currentMap, getMovesRemaining(destTile,x-1, y), x - 1, y).GetMoveLocations(ParentNodeLocation.EAST, ref list); + } + } + + // all recursions should be completed, prune duplicates + if (parent == ParentNodeLocation.ROOT) { + list = RemoveDuplicates(list); + } + return ; + } + + + public void getDirectAttackLocations( ParentNodeLocation parent, ref List> list) { + if (movesRemaining <= 0) return; // no more moves left, invalid + if (x < 0 || x > currentMap.width || y < 0 || y > currentMap.height) return; // square is out of bounds, invalid + + //add valid attack squares to the list + // list.Add(new Tuple(x, y)); + addAttackRangesToList( ref list); + + // parent north means the unit movement is south, parent east means we moved west, etc + if (parent != ParentNodeLocation.NORTH) // check north movement + { + MapTile destTile = currentMap.getTile(x, y - 1); + if (destTile != null) + { + new MapMovementNode(selectedUnit, currentMap, getMovesRemaining(destTile, x, y - 1), x, y - 1).getDirectAttackLocations(ParentNodeLocation.SOUTH, ref list); + } + } + if (parent != ParentNodeLocation.EAST) // check east movement + { + MapTile destTile = currentMap.getTile(x + 1, y); + if (destTile != null) + { + new MapMovementNode(selectedUnit, currentMap, getMovesRemaining(destTile, x + 1, y), x + 1, y).getDirectAttackLocations(ParentNodeLocation.WEST, ref list); + } + //new MapMovementNode(ParentNodeLocation.SOUTH, selectedUnit, getMovesRemaining(), x + 1, y).GetLocations(ref list); + } + if (parent != ParentNodeLocation.SOUTH) // check south movement + { + MapTile destTile = currentMap.getTile(x, y + 1); + if (destTile != null) + { + new MapMovementNode(selectedUnit, currentMap, getMovesRemaining(destTile, x, y + 1), x, y + 1).getDirectAttackLocations(ParentNodeLocation.NORTH, ref list); + } + } + if (parent != ParentNodeLocation.WEST) // check west movement + { + MapTile destTile = currentMap.getTile(x - 1, y); + if (destTile != null) + { + new MapMovementNode(selectedUnit, currentMap, getMovesRemaining(destTile, x - 1, y), x - 1, y).getDirectAttackLocations(ParentNodeLocation.EAST, ref list); + } + } + + // all recursions should be completed, prune duplicates + if (parent == ParentNodeLocation.ROOT) + { + list = RemoveDuplicates(list); + } + return; + + } + + public void getDirectAttacksNoMovement(ParentNodeLocation parent, ref List> list) + { + addAttackRangesToList(ref list); + + list = RemoveDuplicates(list); + + } + + private int getMovesRemaining(MapTile destTile , int x, int y) { + // check if occupied by another uint + UnitObject targetUnit = currentMap.getUnitAtLocation(x, y); + if (targetUnit != null) { + if ( + (selectedUnit.team == UnitObject.UnitTeam.PLAYER && targetUnit.team == UnitObject.UnitTeam.ENEMY) || + (selectedUnit.team == UnitObject.UnitTeam.ENEMY && (targetUnit.team == UnitObject.UnitTeam.PLAYER || targetUnit.team == UnitObject.UnitTeam.NPC)) + ) + { + return 0; + } + } + + // comare movement type to current tile type then return + + // MovementCostTable.getMoveCost(selectedUnit.stats.movementType, destTile.Type); + + // note that the return value MUST be <= moves remaining, or else we risk infinite recursion + return movesRemaining - MovementCostTable.getMoveCost(selectedUnit.stats.movementType, destTile.Type); + } + + private List> RemoveDuplicates( List> oldList) + { + List < Tuple > newList = new List>(); + + for (int i = 0; i < oldList.Count; i++) + { + bool isUnique = true; + + for (int j = 0; i < newList.Count; j++) + { + if (oldList[i].Item1 == newList[j].Item1 && oldList[i].Item2 == newList[j].Item2) + { + isUnique = false; + } + } + + if (isUnique) + { + newList.Add(oldList[i]); + //TibzLog.Debug("added unique square"); + //TibzLog.Debug(" x: " + oldList[i].Item1, " y: " + oldList[i].Item2); + } + } + + return newList; + } + + private void addAttackRangesToList( ref List> list) { + + for (int i = selectedUnit.DirectAttackRangeMin; i <= selectedUnit.DirectAttackRangeMax; i++) { + getCircleRange(ref list, i); + } + + } + + //gets one ring of an attack range at a time + private void getCircleRange(ref List> list, int range) { + for (int i = range; i > 0; i--) { + int offset = range - i; + addTileIfInBounds(ref list, x + offset, y + i); // top to right + addTileIfInBounds(ref list, x + i, y - offset); //right to bot + addTileIfInBounds(ref list, x - offset, y - i); //bot to left + addTileIfInBounds(ref list, x - i, y + offset); //let to top + } + } + + private bool addTileIfInBounds(ref List> list, int newX, int newY) { + if (newX < 0 || newX > currentMap.width || newY < 0 || newY > currentMap.height) { + return false; + } + list.Add(new Tuple(newX, newY)); + return true; + } + } +} diff --git a/Johnmagotchi/GameContent/Objects/Maps/MapTile.cs b/Johnmagotchi/GameContent/Objects/Maps/MapTile.cs new file mode 100644 index 0000000..f6a6adb --- /dev/null +++ b/Johnmagotchi/GameContent/Objects/Maps/MapTile.cs @@ -0,0 +1,167 @@ +using System; +using System.Reflection.Metadata; +using Johnmagotchi.Core.tools; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using TibzGame.Core.Inputs; +using TibzGame.Core.ScreenManager; + +namespace Johnmagotchi.GameContent.Objects +{ + + public class MapTile + { + public static readonly int TILE_HEIGHT_PX = 32 * ScreenManager.BASE_ZOOM_LEVEL; + public static readonly int TILE_WIDTH_PX = 32 * ScreenManager.BASE_ZOOM_LEVEL; + + public TileType Type { get; set; } + + public TileSubType SubType { get; set; } + + public TileType NorthNeighborType; + public TileType SouthNeighborType; + public TileType EastNeighborType; + public TileType WestNeighborType; + + + private SpriteBatch spriteBatch; + private ScreenManager _screenManager; + + public int width; + public int height; + public int shadowOffset; + public bool facingLeft; + public float spriteRotation; + public SpriteEffects currentSpriteEffects; + Texture2D HighlightTexture; + Texture2D GrassTileTexture; + Texture2D SeaTileTexture; + + public TileHighlight tileHighlight; + public int highlightTimer; + public int highlightTimerDelay; + + public Effect attackTileEffect; + + public Texture2D currentTexture; + public MapTile() + { + this.Type = TileType.GRASS; + this.SubType = TileSubType.NONE; + } + public void Init(ScreenManager screenManager) + { + + _screenManager = screenManager; + spriteBatch = new SpriteBatch(screenManager.GraphicsDevice); + HighlightTexture = screenManager.contentRef.Load("Tiles/tile-highlight"); + GrassTileTexture = screenManager.contentRef.Load("Tiles/Grass/grass-1"); + SeaTileTexture= screenManager.contentRef.Load("Tiles/Sea/ocean"); + attackTileEffect = screenManager.contentRef.Load("Shaders/Tiles/AttackTileShader"); + updateCurrentTexture(); + tileHighlight = TileHighlight.NONE; + highlightTimer = 0; + highlightTimerDelay = 0; + } + public void Update() { + + } + + public void ChangeType(TileType newType) + { + this.Type = newType; + updateCurrentTexture(); + } + + public void NullNeighbors() + { + this.NorthNeighborType = TileType.NULL; + this.SouthNeighborType = TileType.NULL; + this.WestNeighborType = TileType.NULL; + this.EastNeighborType = TileType.NULL; + } + + public void SetTileHighlight(TileHighlight newState) + { + this.tileHighlight = newState; + } + + public void DrawAt(int posX, int posY) + { + // Tick Draw Timers + highlightTimerDelay++; + if (highlightTimerDelay > 2) + { + highlightTimerDelay = 0; + highlightTimer++; + } + if (highlightTimer >= 16) { highlightTimer = 0; } + + // Start Drawing + spriteBatch.Begin(SpriteSortMode.Deferred, null, SamplerState.PointClamp); + + // all rectangles should do the scaling from world coordinates to screen coordinates + Rectangle tileRect = _screenManager.GetScaledRectangle(posX, posY, TILE_WIDTH_PX , TILE_HEIGHT_PX); + + + //TibzLog.Debug("Scaled xPos: {0}, yPos: {1}" , tileRect.X, tileRect.Y); + // Texture2D currentTexture; + + + spriteBatch.Draw( + currentTexture, tileRect, null, Color.White, 0, new Vector2(0, 0), + currentSpriteEffects, 1); + + spriteBatch.End(); + + // Draw Highlights + + if (tileHighlight == TileHighlight.NONE) + { + return; + } + if (tileHighlight == TileHighlight.MOVEMENT) + { + spriteBatch.Begin(SpriteSortMode.Deferred, null, SamplerState.PointClamp); + + // all rectangles should do the scaling from world coordinates to screen coordinates + Rectangle highlightRect = _screenManager.GetScaledRectangle(posX, posY, TILE_WIDTH_PX, TILE_HEIGHT_PX); + Rectangle sourceRect = new Rectangle((40 * highlightTimer) + 1 ,1, 40, 40); + spriteBatch.Draw( + HighlightTexture, highlightRect, sourceRect, Color.White, 0, new Vector2(0, 0), + currentSpriteEffects, 1); + spriteBatch.End(); + } + if (tileHighlight == TileHighlight.ATTACK) + { + spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.PointClamp); + //apply shader + attackTileEffect.CurrentTechnique.Passes[0].Apply(); + // all rectangles should do the scaling from world coordinates to screen coordinates + Rectangle highlightRect = _screenManager.GetScaledRectangle(posX, posY, TILE_WIDTH_PX, TILE_HEIGHT_PX); + Rectangle sourceRect = new Rectangle((40 * highlightTimer) + 1, 1, 40, 40); + spriteBatch.Draw( + HighlightTexture, highlightRect, sourceRect, Color.White, 0, new Vector2(0, 0), + currentSpriteEffects, 1); + spriteBatch.End(); + } + + } + + private void updateCurrentTexture() { + switch (this.Type) + { + case TileType.GRASS: + currentTexture = GrassTileTexture; + break; + case TileType.SEA: + currentTexture = SeaTileTexture; + break; + default: + currentTexture = GrassTileTexture; + break; + } + + } + } +} \ No newline at end of file diff --git a/Johnmagotchi/GameContent/Objects/Maps/TileTypeEnum.cs b/Johnmagotchi/GameContent/Objects/Maps/TileTypeEnum.cs new file mode 100644 index 0000000..fa32369 --- /dev/null +++ b/Johnmagotchi/GameContent/Objects/Maps/TileTypeEnum.cs @@ -0,0 +1,25 @@ +public enum TileType { + GRASS, + ROAD, + RIVER, + MOUNTAIN, + SEA, + CITY, + HQ, + BASE, + SPECIAL, + NULL +} + +public enum TileSubType{ + NONE, + SNOW, + DAMAGED +} + +public enum TileHighlight { + NONE, + MOVEMENT, + ATTACK, + HEAL, +} \ No newline at end of file diff --git a/Johnmagotchi/GameContent/Objects/UI/MapCursor.cs b/Johnmagotchi/GameContent/Objects/UI/MapCursor.cs new file mode 100644 index 0000000..51b74ea --- /dev/null +++ b/Johnmagotchi/GameContent/Objects/UI/MapCursor.cs @@ -0,0 +1,49 @@ +using System; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using TibzGame.Core.Inputs; +using TibzGame.Core.ScreenManager; + +namespace Johnmagotchi.GameContent.Objects +{ + + public class MapCursor + { + private readonly int CURSOR_SIZE = 40 * ScreenManager.BASE_ZOOM_LEVEL; + + private SpriteBatch spriteBatch; + private ScreenManager _screenManager; + + public SpriteEffects currentSpriteEffects; + Texture2D CursorTexture; + + public MapCursor() + { + + } + public void Init(ScreenManager screenManager) + { + _screenManager = screenManager; + spriteBatch = new SpriteBatch(screenManager.GraphicsDevice); + CursorTexture = screenManager.contentRef.Load("Map-UI/cursor"); + } + + public void Draw(int posX, int posY) + { + + spriteBatch.Begin(SpriteSortMode.Deferred, null, SamplerState.PointClamp); + + // offset by 4 X base zoom + posX = posX - (4 * ScreenManager.BASE_ZOOM_LEVEL); + posY = posY - (4 * ScreenManager.BASE_ZOOM_LEVEL); + Rectangle tileRect = _screenManager.GetScaledRectangle(posX , posY, CURSOR_SIZE, CURSOR_SIZE); + + + spriteBatch.Draw( + CursorTexture, tileRect, null, Color.White, 0, new Vector2(0, 0), + currentSpriteEffects, 1); + + spriteBatch.End(); + } + } +} \ No newline at end of file diff --git a/Johnmagotchi/GameContent/Objects/UI/UnitDisplay.cs b/Johnmagotchi/GameContent/Objects/UI/UnitDisplay.cs new file mode 100644 index 0000000..d76187e --- /dev/null +++ b/Johnmagotchi/GameContent/Objects/UI/UnitDisplay.cs @@ -0,0 +1,134 @@ +using Johnmagotchi.Core.tools; +using Johnmagotchi.GameContent.Units; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TibzGame.Core.ScreenManager; + +namespace Johnmagotchi.GameContent.Objects.UI +{ + public class UnitDisplay + { + private SpriteBatch spriteBatch; + private ScreenManager _screenManager; + public SpriteEffects currentSpriteEffects; + Texture2D UnitDisplayTexture; + Texture2D EnemyDisplayTexture; + Texture2D NpcDisplayTexture; + protected SpriteFont kemco; + protected SpriteFont pixsplit; + UnitObject HighlightedUnit; + + + Boolean showDisplay; + + private readonly int DISPLAY_WIDTH = 192 * ScreenManager.BASE_ZOOM_LEVEL; + private readonly int DISPLAY_HEIGHT = 96 * ScreenManager.BASE_ZOOM_LEVEL; + + public UnitDisplay() { + showDisplay = false; + } + public void Init(ScreenManager screenManager) + { + _screenManager = screenManager; + spriteBatch = new SpriteBatch(screenManager.GraphicsDevice); + UnitDisplayTexture = screenManager.contentRef.Load("Map-UI/unit-display-blue-lighter"); + EnemyDisplayTexture = screenManager.contentRef.Load("Map-UI/unit-display-red-lighter"); + NpcDisplayTexture = screenManager.contentRef.Load("Map-UI/unit-display-green-lighter"); + kemco = screenManager.contentRef.Load("Fonts/Kemco-20"); + pixsplit = screenManager.contentRef.Load("Fonts/PixelSplitter"); + + } + + public void Update(UnitObject unit) { + if (unit == null) { + showDisplay = false; + return; + } + else { + showDisplay = true; + HighlightedUnit = unit; + + } + } + + public void Draw(int cursorQuadrant) { + + if (showDisplay == false) { return; } + if (HighlightedUnit == null) { return; } + + Texture2D texture = UnitDisplayTexture; + if (HighlightedUnit.team == UnitObject.UnitTeam.ENEMY) + { + texture = EnemyDisplayTexture; + } + if (HighlightedUnit.team == UnitObject.UnitTeam.NPC) + { + texture = NpcDisplayTexture; + } + + // offset by 4 X base zoom + int posX = (int)Math.Round(.5 * (MapTile.TILE_WIDTH_PX)); + int posY = (int)Math.Round(.5 * (MapTile.TILE_HEIGHT_PX)); + + if (cursorQuadrant == 2 || cursorQuadrant == 3) + { + posX = _screenManager.GetScaledPixelScreenWidth() - DISPLAY_WIDTH- posX; + } + //------------------DRAW BACKGROUND------------------------------------ + spriteBatch.Begin(); + Rectangle tileRect = _screenManager.GetScaledRectangle(posX, posY, DISPLAY_WIDTH, DISPLAY_HEIGHT); + spriteBatch.Draw( + texture, tileRect, null, Color.White, 0, new Vector2(0, 0), + currentSpriteEffects, 1); + spriteBatch.End(); + + // -----------------DRAW TEXT ----------------------------------------- + posX += (int)Math.Round(.05 * DISPLAY_WIDTH); + posY += (15 * ScreenManager.BASE_ZOOM_LEVEL); + DrawText(posX, posY, HighlightedUnit.name); + posY += (15 * ScreenManager.BASE_ZOOM_LEVEL); + DrawText(posX, posY, HighlightedUnit.playerClassEnum.ToString()); + posX += (int)Math.Round(.05 * DISPLAY_WIDTH); + posY += (15 * ScreenManager.BASE_ZOOM_LEVEL); + string DisplayString = HighlightedUnit.currentStatus.CurrentHealth + " HP - " + HighlightedUnit.stats.MaxHealth + " MAX"; + DrawText(posX, posY, DisplayString); + } + + public void DrawText(int x, int y ,string textString) { + Vector2 textRotationOrigin = new Vector2(0, 0); + //Vector2 textRotationOrigin = kemco.MeasureString(HighlightedUnit.name); + //textRotationOrigin.X = textRotationOrigin.X / 2; + + x = _screenManager.getScaledIntX(x); + y = _screenManager.getScaledIntX(y); + Vector2 position = new Vector2(x, y); + + spriteBatch.Begin(); + + // the hackiest white outline of all time. + position = new Vector2(x + 2, y + 2); + spriteBatch.DrawString(kemco, textString, position, Color.White, 0, textRotationOrigin, 00.75f, SpriteEffects.None, 1.0f); + position = new Vector2(x - 2, y - 2); + spriteBatch.DrawString(kemco, textString, position, Color.White, 0, textRotationOrigin, 00.75f, SpriteEffects.None, 1.0f); + position = new Vector2(x + 2, y - 2); + spriteBatch.DrawString(kemco, textString, position, Color.White, 0, textRotationOrigin, 00.75f, SpriteEffects.None, 1.0f); + position = new Vector2(x - 2, y + 2); + spriteBatch.DrawString(kemco, textString, position, Color.White, 0, textRotationOrigin, 00.75f, SpriteEffects.None, 1.0f); + position = new Vector2(x + 2, y); + spriteBatch.DrawString(kemco, textString, position, Color.White, 0, textRotationOrigin, 00.75f, SpriteEffects.None, 1.0f); + position = new Vector2(x - 2, y); + spriteBatch.DrawString(kemco, textString, position, Color.White, 0, textRotationOrigin, 00.75f, SpriteEffects.None, 1.0f); + + // the actual text + position = new Vector2(x, y); + spriteBatch.DrawString(kemco, textString, position, Color.Black, 0, textRotationOrigin, 00.75f, SpriteEffects.None, 1.0f); + + spriteBatch.End(); + } + } +} diff --git a/Johnmagotchi/GameContent/Objects/UglyUnits/BattleObjects/AttackObj.cs b/Johnmagotchi/GameContent/Objects/UglyUnits/BattleObjects/AttackObj.cs new file mode 100644 index 0000000..23af51c --- /dev/null +++ b/Johnmagotchi/GameContent/Objects/UglyUnits/BattleObjects/AttackObj.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using static Johnmagotchi.Data.BattleObjects.AttackDefines; + +namespace Johnmagotchi.GameContent.Objects.Units.BattleObjects +{ + public class AttackObj + { + + public int ID; + public string AttackName; + public int BaseDamage; + public int BaseHitCount; + public int BaseSpeed; + public int BaseAccuracy; + public int AttackRangeMin; + public int AttackRangeMax; + public AttackTypeEnum AttackType; + public SpecialAttackPropertiesEnum SpecialProperties; + + } +} diff --git a/Johnmagotchi/GameContent/Objects/UglyUnits/BattleObjects/BattleObjectManager.cs b/Johnmagotchi/GameContent/Objects/UglyUnits/BattleObjects/BattleObjectManager.cs new file mode 100644 index 0000000..b9cc9fc --- /dev/null +++ b/Johnmagotchi/GameContent/Objects/UglyUnits/BattleObjects/BattleObjectManager.cs @@ -0,0 +1,250 @@ +using Johnmagotchi.Core.tools; +using Johnmagotchi.Data.BattleObjects; +using Johnmagotchi.GameContent.Units; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using static Johnmagotchi.Data.BattleObjects.SupportDefines; + +namespace Johnmagotchi.GameContent.Objects.Units.BattleObjects +{ + public class BattleObjectManager + { + + public static List AllAttacks; + public static List AllSupports; + public static List AllSkills; + + + + public static void LoadBattleObjects() + { + AllAttacks = LoadAttacks(); + AllSupports = LoadSupports(); + AllSkills = LoadSkills(); + + foreach (AttackObj atk in AllAttacks) + { + TibzLog.Debug(" ID: {0}, AttackName: {1}, Base Damamge: {2}, Base Hit Count: {3}, Base Speed: {4}," + + " Base Accuracy {5}, rangeMin: {6}, RangeMax: {7}, Attack Type: {8}, Special Properties {9} ", + atk.ID, atk.AttackName, atk.BaseDamage, atk.BaseHitCount, atk.BaseSpeed, atk.BaseAccuracy, atk.AttackRangeMin, atk.AttackRangeMax, atk.AttackType, atk.SpecialProperties); + } + + foreach (SupportObj support in AllSupports) + { + TibzLog.Debug(" ID: {0}, Name: {1}, Type:{2}, Target: {3}, Val: {4}, Desc: {5} ", support.ID, support.Name, support.type, support.target, support.Value, support.Description); + } + foreach (SkillObj skl in AllSkills) + { + TibzLog.Debug("ID: {0}, Name: {1}, Type: {2}, Val: {3}, Desc: {4} ", skl.ID, skl.SkillName, skl.SkillType, skl.Value, skl.Description); + } + + } + + public static List LoadAttacks() + { + List AttackList = new List(); + System.Console.WriteLine("PATH: {0}", Directory.GetCurrentDirectory()); + var path = "..\\..\\..\\Data\\BattleObjects\\AttackDefinitions.csv"; + System.Console.WriteLine("path: {0} ", path); + + // these let us resolve which column is which + int IDIndex = -1; + int AttackNameIndex = -1; + int BaseDamageIndex = -1; + int BaseHitCountIndex = -1; + int BaseSpeedIndex = -1; + int BaseAccuracyIndex = -1; + int AttackRangeMinIndex = -1; + int AttackRangeMaxIndex = -1; + int AttackTypeIndex = -1; + int SpecialPropertiesIndex = -1; + + bool AreColumnIndexesSet = false; + + using (var reader = new StreamReader(path)) + { + + while (!reader.EndOfStream) + { + var line = reader.ReadLine(); + var values = line.Split(','); + + if (AreColumnIndexesSet == false) + { + //These strings MUST match /GameContent/Data/UnitDefines.CSV + // That file MUST have these in the first row. + for (int i = 0; i < values.Length; i++) + { + + if (values[i].Trim() == "ID") { IDIndex = i; } + if (values[i].Trim() == "AttackName") { AttackNameIndex = i; } + if (values[i].Trim() == "BaseDamage") { BaseDamageIndex = i; } + if (values[i].Trim() == "BaseHitCount") { BaseHitCountIndex = i; } + if (values[i].Trim() == "BaseSpeed") { BaseSpeedIndex = i; } + if (values[i].Trim() == "BaseAccuracy") { BaseAccuracyIndex = i; } + if (values[i].Trim() == "AttackRangeMin") { AttackRangeMinIndex = i; } + if (values[i].Trim() == "AttackRangeMax") { AttackRangeMaxIndex = i; } + if (values[i].Trim() == "AttackType") { AttackTypeIndex = i; } + if (values[i].Trim() == "SpecialProperties") { SpecialPropertiesIndex = i; } + + } + AreColumnIndexesSet = true; + } + else + { + AttackObj attack = new AttackObj(); + + attack.ID = Int32.Parse(values[IDIndex]); + attack.AttackName = values[AttackNameIndex]; + attack.BaseDamage = Int32.Parse(values[BaseDamageIndex]); + attack.BaseHitCount = Int32.Parse(values[BaseHitCountIndex]); + attack.BaseSpeed = Int32.Parse(values[BaseSpeedIndex]); + attack.BaseAccuracy = Int32.Parse(values[BaseAccuracyIndex]); + attack.AttackRangeMin = Int32.Parse(values[AttackRangeMinIndex]); + attack.AttackRangeMax = Int32.Parse(values[AttackRangeMaxIndex]); + attack.AttackType = AttackDefines.ParseAttackTypes(values[AttackTypeIndex]); + attack.SpecialProperties = AttackDefines.ParseSpecialAttackProperties(values[SpecialPropertiesIndex]); + + AttackList.Add(attack); + } + } + } + return AttackList; + + } + + public static List LoadSkills() + { + List SkillList = new List(); + + System.Console.WriteLine("PATH: {0}", Directory.GetCurrentDirectory()); + var path = "..\\..\\..\\Data\\BattleObjects\\SkillDefinitions.csv"; + System.Console.WriteLine("path: {0} ", path); + + // ID,SkillName,SkillType,Value,Description + // these let us resolve which column is which + int IDIndex = -1; + int SkillNameIndex = -1; + int SkillTypeIndex = -1; + int ValueIndex = -1; + int DescriptionIndex = -1; + + + bool AreColumnIndexesSet = false; + + using (var reader = new StreamReader(path)) + { + + while (!reader.EndOfStream) + { + var line = reader.ReadLine(); + var values = line.Split(','); + + if (AreColumnIndexesSet == false) + { + //These strings MUST match /GameContent/Data/SkillDefinitions.CSV + // That file MUST have these in the first row. + for (int i = 0; i < values.Length; i++) + { + //ID,SkillName,SkillType,Value,Description + if (values[i].Trim() == "ID") { IDIndex = i; } + if (values[i].Trim() == "SkillName") { SkillNameIndex = i; } + if (values[i].Trim() == "SkillType") { SkillTypeIndex = i; } + if (values[i].Trim() == "Value") { ValueIndex = i; } + if (values[i].Trim() == "Description") { DescriptionIndex = i; } + + + } + AreColumnIndexesSet = true; + } + else + { + SkillObj skill = new SkillObj(); + + skill.ID = Int32.Parse(values[IDIndex]); + skill.SkillName = values[SkillNameIndex]; + skill.SkillType = SkillDefines.ParseSkillTypes(values[SkillTypeIndex]); + skill.Value = Int32.Parse(values[ValueIndex]); + skill.Description = values[DescriptionIndex]; + + SkillList.Add(skill); + } + } + } + return SkillList; + } + + public static List LoadSupports() + { + List SupportList = new List(); + + + System.Console.WriteLine("PATH: {0}", Directory.GetCurrentDirectory()); + var path = "..\\..\\..\\Data\\BattleObjects\\SupportDefinitions.csv"; + System.Console.WriteLine("path: {0} ", path); + + //ID,SupportName,SupportTarget,SupportType,Value,Description + // these let us resolve which column is which + int IDIndex = -1; + int SupportlNameIndex = -1; + int SupportTargetIndex = -1; + int SupportTypeIndex = -1; + int ValueIndex = -1; + int DescriptionIndex = -1; + + + bool AreColumnIndexesSet = false; + + using (var reader = new StreamReader(path)) + { + + while (!reader.EndOfStream) + { + var line = reader.ReadLine(); + var values = line.Split(','); + + if (AreColumnIndexesSet == false) + { + //These strings MUST match /GameContent/Data/SkillDefinitions.CSV + // That file MUST have these in the first row. + for (int i = 0; i < values.Length; i++) + { + + //ID,SupportName,SupportTarget,SupportType,Value,Description + if (values[i].Trim() == "ID") { IDIndex = i; } + if (values[i].Trim() == "SupportName") { SupportlNameIndex = i; } + if (values[i].Trim() == "SupportTarget") { SupportTargetIndex = i; } + if (values[i].Trim() == "SupportType") { SupportTypeIndex = i; } + if (values[i].Trim() == "Value") { ValueIndex = i; } + if (values[i].Trim() == "Description") { DescriptionIndex = i; } + + + } + AreColumnIndexesSet = true; + } + else + { + SupportObj support = new SupportObj(); + + support.ID = Int32.Parse(values[IDIndex]); + support.Name = values[SupportlNameIndex]; + support.type = SupportDefines.ParseSupportTypes(values[SupportTypeIndex]); + support.target = SupportDefines.ParseSupportTargets(values[SupportTargetIndex]); + support.Value = Int32.Parse(values[ValueIndex]); + support.Description = values[DescriptionIndex]; + + SupportList.Add(support); + } + } + } + + + return SupportList; + + } + } +} diff --git a/Johnmagotchi/GameContent/Objects/UglyUnits/BattleObjects/SkillObj.cs b/Johnmagotchi/GameContent/Objects/UglyUnits/BattleObjects/SkillObj.cs new file mode 100644 index 0000000..19caf99 --- /dev/null +++ b/Johnmagotchi/GameContent/Objects/UglyUnits/BattleObjects/SkillObj.cs @@ -0,0 +1,18 @@ +using Johnmagotchi.Data.BattleObjects; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Johnmagotchi.GameContent.Objects.Units.BattleObjects +{ + public class SkillObj + { + public int ID; + public string SkillName; + public SkillDefines.SkillTypes SkillType; + public int Value; + public string Description; + } +} diff --git a/Johnmagotchi/GameContent/Objects/UglyUnits/BattleObjects/SupportObj.cs b/Johnmagotchi/GameContent/Objects/UglyUnits/BattleObjects/SupportObj.cs new file mode 100644 index 0000000..131cbd3 --- /dev/null +++ b/Johnmagotchi/GameContent/Objects/UglyUnits/BattleObjects/SupportObj.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using static Johnmagotchi.Data.BattleObjects.SupportDefines; + +namespace Johnmagotchi.GameContent.Objects.Units.BattleObjects +{ + public class SupportObj + { + + //ID,SupportName,SupportTarget,SupportType,Value,Description + public int ID; + public string Name; + public SupportTarget target; + public SupportType type; + public int Value; + public string Description; + } +} diff --git a/Johnmagotchi/GameContent/Objects/UglyUnits/BattleObjects/UnitCurrentStatus.cs b/Johnmagotchi/GameContent/Objects/UglyUnits/BattleObjects/UnitCurrentStatus.cs new file mode 100644 index 0000000..4b95463 --- /dev/null +++ b/Johnmagotchi/GameContent/Objects/UglyUnits/BattleObjects/UnitCurrentStatus.cs @@ -0,0 +1,52 @@ +using Johnmagotchi.Core.tools; +using Johnmagotchi.GameContent.Units; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.Threading.Tasks; + +namespace Johnmagotchi.GameContent.Objects.Units.BattleObjects +{ + public class UnitCurrentStatus + { + private readonly UnitStatBlock StatBlock; + public int CurrentHealth { set; get; } + public int CurrentShieldCount { set; get; } + + public bool isTurnOver { set; get; } + + public UnitTeam team { set; get; } + + + // This Constructor is used when init-ing a player object + public UnitCurrentStatus(UnitStatBlock stats) { + StatBlock = stats; + CurrentHealth = StatBlock.MaxHealth; + CurrentShieldCount = 0; + } + + // This Constructor is used when deserializing a unit + [JsonConstructor] + public UnitCurrentStatus(int CurrentHealth, int CurrentShieldCount) { + this.CurrentHealth = CurrentHealth; + this.CurrentShieldCount = CurrentShieldCount; + } + + public void setFromSerialized(UnitObject temp, string data) { + + UnitCurrentStatus parsedData = JsonSerializer.Deserialize(data); + temp.currentStatus.CurrentHealth = parsedData.CurrentHealth;// Update current stats + CurrentShieldCount = 0; + TibzLog.Debug("HP on deserialized: " + parsedData.CurrentHealth); + } + public enum UnitTeam + { + PLAYER, + ENEMY, + NPC + } + } +} diff --git a/Johnmagotchi/GameContent/Objects/UglyUnits/BattleObjects/UnitStatBlock.cs b/Johnmagotchi/GameContent/Objects/UglyUnits/BattleObjects/UnitStatBlock.cs new file mode 100644 index 0000000..ad32fce --- /dev/null +++ b/Johnmagotchi/GameContent/Objects/UglyUnits/BattleObjects/UnitStatBlock.cs @@ -0,0 +1,43 @@ +namespace Johnmagotchi.GameContent.Objects.Units.BattleObjects +{ + public class UnitStatBlock{ + + public string Name { get; set; } + public int MaxHealth {get; set;} + public int Attack {get; set;} + public int Defense {get; set;} + public int Speed {get; set;} + public int Movement { get; set;} + + public MovementType movementType {get; set;} + + public enum MovementType { + FOOT, + WHEELS, + HORSE, + FLYING, + } + + public void setMovementTypeFromFile(string inStr) { + switch (inStr) { + case "FOOT": + movementType = MovementType.FOOT; + return; + case "WHEELS": + movementType= MovementType.WHEELS; + return; + case "HORSE": + movementType = MovementType.HORSE; + return; + case "FLYING": + case "FLYER": + movementType = MovementType.FLYING; + return; + } + + + } + } + + +} \ No newline at end of file diff --git a/Johnmagotchi/GameContent/Objects/UglyUnits/Loadouts/LoadoutModule.cs b/Johnmagotchi/GameContent/Objects/UglyUnits/Loadouts/LoadoutModule.cs new file mode 100644 index 0000000..74e0718 --- /dev/null +++ b/Johnmagotchi/GameContent/Objects/UglyUnits/Loadouts/LoadoutModule.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Johnmagotchi.GameContent.Objects.Units.Loadouts +{ + public class LoadoutModule + { + // This is going to be each little square module in the character customizer + + enum ModuleType { + ATTACK, + ACTIVE_SUPPORT, + PASSIVE_SUPPORT, + STAT_BOOST, + BATTLE_EFFECT + } + + public enum ModuleShape { + SINGLE, + DOUBLE, + TRIPLE_STRAIGHT, + TRIPLE_L, + TETRI_O, + TETRI_I, + TETRI_S, + TETRI_Z, + TETRI_L, + TETRI_J, + TETRI_T, + } + + public enum ShapeOrientation { + NORTH, SOUTH, WEST, EAST + } + + public int activationCost; + public int secondaryActivationCost; + public string ModuleName; + public ModuleShape Shape; + public ShapeOrientation orientation; + + /* + RR - Armor Knight + RB - Mercenary/Axe Fighter + RY - Grappler + RG - Big Shield Bro + RP - Flamethrower Enthusiast + + BB - True Generic Helldiver + BY - call out weakpoints + BG - Arc Weapon Sprayer + BP - Grenadier + + YY - Theif/Assassin + YG - Behind Enemy Lines + YP - Master of Traps + + GG - True Staff User + GP - Aes Sedai + + PP - Elemental Mage + + */ + + } +} diff --git a/Johnmagotchi/GameContent/Objects/UglyUnits/Loadouts/PlayerClasses/PlayerClass.cs b/Johnmagotchi/GameContent/Objects/UglyUnits/Loadouts/PlayerClasses/PlayerClass.cs new file mode 100644 index 0000000..07eae44 --- /dev/null +++ b/Johnmagotchi/GameContent/Objects/UglyUnits/Loadouts/PlayerClasses/PlayerClass.cs @@ -0,0 +1,181 @@ +using Johnmagotchi.Core.tools; +using Johnmagotchi.GameContent.Objects.Units.BattleObjects; +using Johnmagotchi.GameContent.Objects.Units.Loadouts; +using System.Collections.Generic; +using System.Linq; + +namespace Johnmagotchi.GameContent.Objects.Units.Loadouts.PlayerClasses +{ + public class PlayerClass + { + // Class contains a loadout, and default attacks/supports/skills + enum ModuleColor + { + RED, + BLUE, + YELLOW, + GREEN, + PURPLE, + COLORLESS + } + + public enum PlayerClassType + { + CL_COMMONER = 0, + RR_KNIGHT, //Red 1 + RB_MERC, + RY_GRAPPLER, + RG_SHIELD, + RP_PYRO, + BB_HECK_DIVER, //Blue 6 + BY_SPECIALIST, + BG_ORORO_MUNROE, + BP_GRENADIER, + YY_ASSASSIN, //Yellow 10 + YG_SPY, + YP_SURVIVALIST, + GG_HEALER, //Green 13 + GP_MOIRAINE_HERSELF, + PP_ELEMENTALIST, //Purple 15 + + } + + UnitLoadout UnitLoadout { get; set; } + PlayerClassType ClassType { get; set; } + + + ModuleColor PrimaryColor; + ModuleColor SecondaryColor; + + public List ClassAttacks; // default for the class + public List ClassSupports; // default + public List ClassSkills; // default + + public UnitStatBlock StatBoosts; // This is a unit stat block that will be added? to the base stats of a unit. + + List defaultAttackIds; + List defaultSupportIds; + List defaultSkillIds; + + + + public PlayerClass(PlayerClassType type) { + ClassType = type; + + ClassAttacks = new List(); + ClassSupports = new List(); + ClassSkills = new List(); + StatBoosts = new UnitStatBlock(); + + InitClassSpecificFields(); + + } + public void SetAndInitLoadout( UnitLoadout loadout) { + UnitLoadout = loadout; + ClassAttacks.Clear(); + ClassSupports.Clear(); + ClassSkills.Clear(); + InitClassSpecificFields(); // grab attacks again + ClassAttacks = ClassAttacks.Concat(loadout.AvailableAttacks).ToList(); + ClassSupports = ClassSupports.Concat(loadout.AvailableSupports).ToList(); + ClassSkills = ClassSkills.Concat(loadout.ActiveSkills).ToList(); + } + + private void InitClassSpecificFields() { + + switch (ClassType) { + case PlayerClassType.RR_KNIGHT: + PrimaryColor = ModuleColor.RED; SecondaryColor = ModuleColor.RED; + break; + case PlayerClassType.RB_MERC: + PrimaryColor = ModuleColor.RED; SecondaryColor = ModuleColor.BLUE; + break; + case PlayerClassType.RY_GRAPPLER: + PrimaryColor = ModuleColor.RED; SecondaryColor = ModuleColor.YELLOW; + break; + case PlayerClassType.RG_SHIELD: + PrimaryColor = ModuleColor.RED; SecondaryColor = ModuleColor.GREEN; + break; + case PlayerClassType.RP_PYRO: + PrimaryColor = ModuleColor.RED; SecondaryColor = ModuleColor.PURPLE; + break; + case PlayerClassType.BB_HECK_DIVER: + PrimaryColor = ModuleColor.BLUE; SecondaryColor = ModuleColor.BLUE; + break; + case PlayerClassType.BY_SPECIALIST: + PrimaryColor = ModuleColor.BLUE; SecondaryColor = ModuleColor.YELLOW; + break; + case PlayerClassType.BG_ORORO_MUNROE: + PrimaryColor = ModuleColor.BLUE; SecondaryColor = ModuleColor.GREEN; + break; + case PlayerClassType.BP_GRENADIER: + PrimaryColor = ModuleColor.BLUE; SecondaryColor = ModuleColor.PURPLE; + break; + case PlayerClassType.YY_ASSASSIN: + PrimaryColor = ModuleColor.YELLOW; SecondaryColor = ModuleColor.YELLOW; + break; + case PlayerClassType.YG_SPY: + PrimaryColor = ModuleColor.YELLOW; SecondaryColor = ModuleColor.GREEN; + break; + case PlayerClassType.YP_SURVIVALIST: + PrimaryColor = ModuleColor.YELLOW; SecondaryColor = ModuleColor.PURPLE; + break; + case PlayerClassType.GG_HEALER: + PrimaryColor = ModuleColor.GREEN; SecondaryColor = ModuleColor.GREEN; + break; + case PlayerClassType.GP_MOIRAINE_HERSELF: + PrimaryColor = ModuleColor.GREEN; SecondaryColor = ModuleColor.PURPLE; + break; + case PlayerClassType.PP_ELEMENTALIST: + PrimaryColor = ModuleColor.PURPLE; SecondaryColor = ModuleColor.PURPLE; + break; + case PlayerClassType.CL_COMMONER: + TibzLog.Debug("Commoner built"); + PrimaryColor = ModuleColor.COLORLESS; SecondaryColor = ModuleColor.COLORLESS; + break; + + + } + } + public static PlayerClassType GetClassFromShortHand(string shorthand) { + shorthand = shorthand.ToLower(); + switch (shorthand) { + case "rr": + return PlayerClassType.RR_KNIGHT; + case "rb": + return PlayerClassType.RB_MERC; + case "ry": + return PlayerClassType.RY_GRAPPLER; + case "rg": + return PlayerClassType.RG_SHIELD; + case "rp": + return PlayerClassType.RP_PYRO; + case "bb": + return PlayerClassType.BB_HECK_DIVER; + case "by": + return PlayerClassType.BY_SPECIALIST; + case "bg": + return PlayerClassType.BG_ORORO_MUNROE; + case "bp": + return PlayerClassType.BP_GRENADIER; + case "yy": + return PlayerClassType.YY_ASSASSIN; + case "yg": + return PlayerClassType.YG_SPY; + case "yp": + return PlayerClassType.YP_SURVIVALIST; + case "gg": + return PlayerClassType.GG_HEALER; + case "gp": + return PlayerClassType.GP_MOIRAINE_HERSELF; + case "pp": + return PlayerClassType.PP_ELEMENTALIST; + default: + return PlayerClassType.CL_COMMONER; + } + + } + } + +} + diff --git a/Johnmagotchi/GameContent/Objects/UglyUnits/Loadouts/UnitLoadout.cs b/Johnmagotchi/GameContent/Objects/UglyUnits/Loadouts/UnitLoadout.cs new file mode 100644 index 0000000..4dc9f01 --- /dev/null +++ b/Johnmagotchi/GameContent/Objects/UglyUnits/Loadouts/UnitLoadout.cs @@ -0,0 +1,107 @@ +using Johnmagotchi.Core.tools; +using Johnmagotchi.GameContent.Objects.Units.BattleObjects; +using Johnmagotchi.GameContent.Objects.Units.Loadouts.PlayerClasses; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.Json.Serialization; +using System.Threading.Tasks; +using static Johnmagotchi.GameContent.Objects.Units.Loadouts.PlayerClasses.PlayerClass; + +namespace Johnmagotchi.GameContent.Objects.Units.Loadouts +{ + public class UnitLoadout + { + // this class is going to be a summary of both the player's class and thier currently added loadout modules. + // this should effectively be a layer between the character's stats/ablities and the battle system. + + public int playerClassID { get; set; } + public string ModuleIDsCSV { get; set;} // csv list of all Aptitude Grid :TM: modules by ID + public string AvailibleAttackIDsCSV { get; set; } // csv list of all attacks from class + Modules + public string AvailaibeSupportIDsCSV { get; set; } // csv list of all supports from class + Modules + public string ActiveSkillsIDsCSV { get; set; } // csv list of all Skills from class + modules + + public PlayerClass PlayerClass; + + // These get instatiated from the csv save of the loadout + public List Modules; + public List AvailableAttacks; + public List AvailableSupports; + public List ActiveSkills; + + public UnitLoadout(PlayerClassType pclass) { + PlayerClass = new PlayerClass(pclass); + AvailableAttacks = new List(); + AvailableSupports = new List(); + ActiveSkills = new List(); + AvailableAttacks.Concat(PlayerClass.ClassAttacks); + AvailableSupports.Concat(PlayerClass.ClassSupports); + ActiveSkills.Concat(PlayerClass.ClassSkills); + + //TODO - get from module + + } + // This Constructor is used when deserializing a unit + [JsonConstructor] + public UnitLoadout( + int playerClassID, + string ModuleIDsCSV, + string AvailibleAttackIDsCSV, + string AvailaibeSupportIDsCSV, + string ActiveSkillsIDsCSV + ) { + this.playerClassID = playerClassID; + this.ModuleIDsCSV = ModuleIDsCSV; + this.AvailibleAttackIDsCSV = AvailibleAttackIDsCSV; + this.AvailaibeSupportIDsCSV = AvailaibeSupportIDsCSV; + this.ActiveSkillsIDsCSV = ActiveSkillsIDsCSV; + // this.loadAllFromCSV(); + } + + public void loadAllFromCSV() { + + int[] atkIds = Array.ConvertAll(AvailibleAttackIDsCSV.Split(','), int.Parse); + int[] sprtIds = Array.ConvertAll(AvailaibeSupportIDsCSV.Split(','), int.Parse); + int[] sklIds = Array.ConvertAll(ActiveSkillsIDsCSV.Split(','), int.Parse); + + foreach (var attackID in atkIds) + { + foreach (var attackobj in BattleObjectManager.AllAttacks) { + if (attackID == attackobj.ID) { + AvailableAttacks.Add(attackobj); + } + } + } + foreach (var supportID in sprtIds) + { + foreach (var supportobj in BattleObjectManager.AllSupports) + { + if (supportID == supportobj.ID) + { + AvailableSupports.Add(supportobj); + } + } + } + foreach (var skillID in sklIds) + { + foreach (var skillobj in BattleObjectManager.AllSkills) + { + if (skillID == skillobj.ID) + { + ActiveSkills.Add(skillobj); + } + } + } + TibzLog.Debug("Loadout initialized"); + TibzLog.Debug(AvailableAttacks); + + } + public void saveAllToCSV() { + + AvailibleAttackIDsCSV = String.Join(",", AvailableAttacks.Select(atk => atk.ID).ToArray()); + AvailaibeSupportIDsCSV = String.Join(",", AvailableSupports.Select(spt => spt.ID).ToArray()); + ActiveSkillsIDsCSV = String.Join(",", ActiveSkills.Select(skill => skill.ID).ToArray()); + } + } +} diff --git a/Johnmagotchi/GameContent/Objects/UglyUnits/Loadouts/UnitLoadoutManager.cs b/Johnmagotchi/GameContent/Objects/UglyUnits/Loadouts/UnitLoadoutManager.cs new file mode 100644 index 0000000..626c268 --- /dev/null +++ b/Johnmagotchi/GameContent/Objects/UglyUnits/Loadouts/UnitLoadoutManager.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Johnmagotchi.GameContent.Objects.Units.Loadouts +{ + internal class UnitLoadoutManager + { + } +} diff --git a/Johnmagotchi/GameContent/Objects/UglyUnits/UnitLoader.cs b/Johnmagotchi/GameContent/Objects/UglyUnits/UnitLoader.cs new file mode 100644 index 0000000..65fb631 --- /dev/null +++ b/Johnmagotchi/GameContent/Objects/UglyUnits/UnitLoader.cs @@ -0,0 +1,125 @@ +using System; +using System.IO; +using System.Collections.Generic; +using System.Diagnostics; +using Johnmagotchi.Core.tools; +using System.Collections; +using System.Net.Http.Headers; +using static Johnmagotchi.GameContent.Objects.Units.BattleObjects.UnitStatBlock; +using Johnmagotchi.GameContent.Objects.Units.Loadouts.PlayerClasses; + +namespace Johnmagotchi.GameContent.Units +{ + public class UnitLoader + { + public static List GetTest(){ + // MAC OS also prly Linux - var path = Path.Combine(Directory.GetCurrentDirectory(), "GameContent/Objects/Units/UnitDefines.csv"); + + //System.Console.WriteLine("PATH: {0}", Directory.GetCurrentDirectory()); + //var path = "..\\..\\..\\GameContent\\Objects\\Units\\UnitDefines.csv"; + List listA = new List(); + //List listB = new List(); + //System.Console.WriteLine("path: {0} ", path); + //using(var reader = new StreamReader(path)) + //{ + + // while (!reader.EndOfStream) + // { + // var line = reader.ReadLine(); + // var values = line.Split(','); + + // listA.Add(values[0]); + // listB.Add(values[1]); + + // } + //} + return listA; + } + public static List LoadBaseUnits(){ + List unitList = new List(); + System.Console.WriteLine("PATH: {0}", Directory.GetCurrentDirectory()); + var path = "..\\..\\..\\Data\\BattleObjects\\UnitDefinitions.csv"; + List listA = new List(); + List listB = new List(); + System.Console.WriteLine("path: {0} ", path); + + // these let us resolve which column is which + int IdIndex = -1; + int NameIndex = -1; + int ClassIndex = -1; + int isUniqueIndex = -1; + int HealthIndex = -1; + int AttackIndex = -1; + int DefenseIndex = -1; + int SpeedIndex = -1; + int MovementIndex = -1; + int MovementTypeIndex = -1; + + bool AreColumnIndexesSet = false; + + using (var reader = new StreamReader(path)) + { + + while (!reader.EndOfStream) + { + var line = reader.ReadLine(); + var values = line.Split(','); + + if (AreColumnIndexesSet == false) + { + //These strings MUST match /GameContent/Data/UnitDefines.CSV + // That file MUST have these in the first row. + for (int i = 0; i < values.Length; i++) { + + if (values[i].Trim() == "ID") { IdIndex = i; } + if (values[i].Trim() == "NAME") { NameIndex = i; } + if (values[i].Trim() == "CLASS") { ClassIndex = i; } + if (values[i].Trim() == "IS_UNIQUE") { isUniqueIndex = i; } + if (values[i].Trim() == "HEALTH") { HealthIndex = i; } + if (values[i].Trim() == "ATTACK") { AttackIndex = i; } + if (values[i].Trim() == "DEFENSE") { DefenseIndex = i; } + if (values[i].Trim() == "SPEED") { SpeedIndex = i; } + if (values[i].Trim() == "MOVEMENT") { MovementIndex = i; } + if (values[i].Trim() == "MOVEMENT_TYPE") { MovementTypeIndex = i; } + + + } + AreColumnIndexesSet = true; + } + else { + UnitObject unit = new UnitObject(); + unit.id = Int32.Parse(values[IdIndex]); + unit.name = values[NameIndex]; + unit.playerClassEnum = PlayerClass.GetClassFromShortHand(values[ClassIndex]); + unit.isUnique = ( values[isUniqueIndex].ToLower() == "true"); + unit.stats.MaxHealth = Int32.Parse(values[HealthIndex]); + unit.stats.Attack = Int32.Parse(values[AttackIndex]); + unit.stats.Defense = Int32.Parse(values[DefenseIndex]); + unit.stats.Speed = Int32.Parse(values[SpeedIndex]); + unit.stats.Movement = Int32.Parse(values[MovementIndex]); + unit.stats.setMovementTypeFromFile(values[MovementTypeIndex]); + + + + switch (unit.id){ + case 0: + // Add texture + break; + case 1: + //add texture + break; + case 2: + break; + // add texture + default: + break; + } + + unitList.Add(unit); + } + } + } + return unitList; + } + } +} \ No newline at end of file diff --git a/Johnmagotchi/GameContent/Objects/UglyUnits/UnitObject.cs b/Johnmagotchi/GameContent/Objects/UglyUnits/UnitObject.cs new file mode 100644 index 0000000..76f36a5 --- /dev/null +++ b/Johnmagotchi/GameContent/Objects/UglyUnits/UnitObject.cs @@ -0,0 +1,226 @@ + + + +using Johnmagotchi.Core.tools; +using Johnmagotchi.GameContent.Objects; +using Johnmagotchi.GameContent.Objects.Units.BattleObjects; +using Johnmagotchi.GameContent.Objects.Units.Loadouts; +using Johnmagotchi.GameContent.Objects.Units.Loadouts.PlayerClasses; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using System.Collections.Generic; +using System.ComponentModel; +using System.Security.Cryptography.X509Certificates; +using System.Text.Json; +using System.Text.Json.Serialization; +using TibzGame.Core.ScreenManager; +using static Johnmagotchi.GameContent.Objects.Units.Loadouts.PlayerClasses.PlayerClass; + +namespace Johnmagotchi.GameContent.Units +{ + ///

+ /// TO DO -- THIS SHOULD BE DELETED AFTER REFACTOR TO *BASE UNIT* + /// + public class UnitObject{ + //defined stats + public int internalID; // used to reference this object internally + public int id { get; set; } // used to reference this unit as "Byleth" or "Marth" or whatever, you know? + public string name { get; set; } + + + // REMOVING TEMPORARILY + public UnitStatBlock stats { set; get; } + public UnitCurrentStatus currentStatus { get; set; } + public bool isUnique { set; get; } + public UnitTeam team { set; get; } + public PlayerClassType playerClassEnum { get; set; } + + // Stats for battle screens + + public bool isTurnOver { set; get; } + // public statusEnum status {get;set;} + public int xPos { set; get; } + public int yPos { set; get; } + + PlayerClass playerClassInstance; + public UnitLoadout UnitLoadout { get; set; } + + public string serializedUnitLoadout { get; set;} + +// ------------------------------------------------------------------------------------------------------------- + + + + //drawing and state management + public SpriteShaderSets shaderSet; + public Texture2D sprite; + private Effect TurnEndedEffect; + + private SpriteBatch spriteBatch; + private ScreenManager _screenManager; + private bool IsInit; + + // DEBUG VARS + // this needs to be expanded for attacks/ items eventually, does not need saved atm + public int DirectAttackRangeMin = 2; + public int DirectAttackRangeMax = 4; + public int IndirectAttackRangeMin; + public int IndirectAttackRangeMax; + + + public enum UnitTeam + { + PLAYER, + ENEMY, + NPC + } + public enum SpriteShaderSets { + PLAYER_NORMAL, + ENEMY_NORMAL, + NPC_NORMAL + } + + + public UnitObject(){ + IsInit = false; + xPos = 0; + yPos = 0; + stats = new UnitStatBlock(); + currentStatus = new UnitCurrentStatus(stats); + // playerClassInstance = new PlayerClass(playerClassEnum); + + } + + public UnitObject(UnitObject template) { + IsInit = false; + CopyFromTemplate(template); + isTurnOver = false; + playerClassInstance = new PlayerClass(playerClassEnum); + UnitLoadout = new UnitLoadout(playerClassEnum); + currentStatus = new UnitCurrentStatus(stats); + + } + + + public UnitObject(string serializedData) + { + IsInit = false; + SetFromSerialized(serializedData); + + //this.currentStatus = new UnitCurrentStatus(stats); + this.UnitLoadout = new UnitLoadout(playerClassEnum); + + } + + public string GetAsSerialized() + { + string json = JsonSerializer.Serialize(this); + return json; + } + + public void SetFromSerialized(string data) + { + UnitObject temp = JsonSerializer.Deserialize(data); + CopyFromTemplate(temp); // get base stats + isTurnOver = temp.isTurnOver; + return ; + } + + + public void setTeam(UnitTeam team) + { + this.team = team; + this.ReinitSprite(); + } + + public void SetShaderSet(SpriteShaderSets inSet) { + shaderSet = inSet; + } + + public void InitSprite(ScreenManager screenManager, UnitTeam team) { + _screenManager = screenManager; + spriteBatch = new SpriteBatch(screenManager.GraphicsDevice); + this.team = team; + string path = getSpriteTexturePath(); + sprite = screenManager.contentRef.Load(path); + this.internalID = screenManager.getUnitId(); + TurnEndedEffect = screenManager.contentRef.Load("Shaders/Units/UnitTurnEnded_S"); + IsInit = true; + + } + + public void ReinitSprite() + { + spriteBatch = new SpriteBatch(_screenManager.GraphicsDevice); + string path = getSpriteTexturePath(); + sprite = _screenManager.contentRef.Load(path); + IsInit = true; + } + + public void Update() { + + + } + + public void CopyFromTemplate(UnitObject template) + { + this.id = template.id; + this.name = template.name; + this.stats = template.stats; + this.xPos = template.xPos; + this.yPos = template.yPos; + this.isUnique = template.isUnique; + this.playerClassEnum = template.playerClassEnum; + this.currentStatus = template.currentStatus; + + //this.sprite = template.sprite; + } + + public void DrawAt( int x, int y) { + if (IsInit == false) return; + + SpriteEffects effects = getSpriteShaderEffects(shaderSet); + spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.PointClamp); + + // all rectangles should do the scaling from world coordinates to screen coordinates + Rectangle rect = _screenManager.GetScaledRectangle(x, y, MapTile.TILE_WIDTH_PX, MapTile.TILE_HEIGHT_PX); + + //TibzLog.Debug("Scaled xPos: {0}, yPos: {1}" , tileRect.X, tileRect.Y); + // Texture2D currentTexture; + + if (isTurnOver) { + //apply shader + TurnEndedEffect.CurrentTechnique.Passes[0].Apply(); + } + + spriteBatch.Draw( + sprite, rect, null, Color.White, 0, new Vector2(0, 0), + effects, 1); + + spriteBatch.End(); + } + + + private SpriteEffects getSpriteShaderEffects(SpriteShaderSets shaderEnum) { + + return SpriteEffects.None; + + } + public string getSpriteTexturePath() + { + if (team == UnitTeam.PLAYER) + { + return "Units/unit-test"; + } + if (team == UnitTeam.ENEMY) + { + return "Units/unit-test-enemy"; + } + if (team == UnitTeam.NPC) + { + return "Units/unit-test-npc"; + } + return "Units/unit-test"; + } + } +} \ No newline at end of file diff --git a/Johnmagotchi/GameContent/Objects/Units/GameLogic/BaseUnitGameObject.cs b/Johnmagotchi/GameContent/Objects/Units/GameLogic/BaseUnitGameObject.cs new file mode 100644 index 0000000..ad9781b --- /dev/null +++ b/Johnmagotchi/GameContent/Objects/Units/GameLogic/BaseUnitGameObject.cs @@ -0,0 +1,165 @@ +using Johnmagotchi.GameContent.Objects.Units.BattleObjects; +using Johnmagotchi.GameContent.Objects.Units.Loadouts; +using Johnmagotchi.GameContent.Objects.Units.Loadouts.PlayerClasses; +using Johnmagotchi.GameContent.Objects.Units.Stats; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.Json; +using System.Threading.Tasks; +using TibzGame.Core.ScreenManager; +using static Johnmagotchi.GameContent.Objects.Units.BattleObjects.UnitCurrentStatus; +using static Johnmagotchi.GameContent.Objects.Units.Loadouts.PlayerClasses.PlayerClass; + +namespace Johnmagotchi.GameContent.Objects.Units.GameLogic +{ + internal abstract class BaseUnitGameObject + { + + //defined stats + public int internalID; // used to reference this object internally + public int id { get; set; } // used to reference this unit as "Byleth" or "Marth" or whatever, you know? + public string name { get; set; } + + private UnitStats stats; + + public PlayerClassType playerClassEnum { get; set; } + + // public statusEnum status {get;set;} + public int xPos { set; get; } + public int yPos { set; get; } + + + // ------------------------------------------------------------------------------------------------------------- + + + + //drawing and state management + public SpriteShaderSets shaderSet; + public Texture2D sprite; + private Effect TurnEndedEffect; + + private SpriteBatch spriteBatch; + private ScreenManager _screenManager; + private bool IsInit; + private bool hasStats; + + + + + public enum SpriteShaderSets + { + PLAYER_NORMAL, + ENEMY_NORMAL, + NPC_NORMAL + } + + + public BaseUnitGameObject() + { + IsInit = false; + hasStats = false; + xPos = 0; + yPos = 0; + } + + public void SetStats(UnitStats newStats) + { + stats = newStats; + hasStats = true; + } + public string GetAsSerialized() + { + string json = JsonSerializer.Serialize(this); + return json; + } + + + + public void SetShaderSet(SpriteShaderSets inSet) + { + shaderSet = inSet; + } + + public void InitSprite(ScreenManager screenManager) + { + _screenManager = screenManager; + spriteBatch = new SpriteBatch(screenManager.GraphicsDevice); + string path = getSpriteTexturePath(); + sprite = screenManager.contentRef.Load(path); + this.internalID = screenManager.getUnitId(); + TurnEndedEffect = screenManager.contentRef.Load("Shaders/Units/UnitTurnEnded_S"); + IsInit = true; + + } + + public void ReinitSprite() + { + spriteBatch = new SpriteBatch(_screenManager.GraphicsDevice); + string path = getSpriteTexturePath(); + sprite = _screenManager.contentRef.Load(path); + IsInit = true; + } + + public void Update() + { + + + } + + public void DrawAt(int x, int y) + { + if (IsInit == false) return; + if (hasStats == false) return; + + SpriteEffects effects = getSpriteShaderEffects(shaderSet); + spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.PointClamp); + + // all rectangles should do the scaling from world coordinates to screen coordinates + Rectangle rect = _screenManager.GetScaledRectangle(x, y, MapTile.TILE_WIDTH_PX, MapTile.TILE_HEIGHT_PX); + + //TibzLog.Debug("Scaled xPos: {0}, yPos: {1}" , tileRect.X, tileRect.Y); + // Texture2D currentTexture; + + if (stats.status.isTurnOver) + { + //apply shader + TurnEndedEffect.CurrentTechnique.Passes[0].Apply(); + } + + spriteBatch.Draw( + sprite, rect, null, Color.White, 0, new Vector2(0, 0), + effects, 1); + + spriteBatch.End(); + } + + + private SpriteEffects getSpriteShaderEffects(SpriteShaderSets shaderEnum) + { + + return SpriteEffects.None; + + } + public string getSpriteTexturePath() + { + UnitTeam team = stats.status.team; + if (team == UnitTeam.PLAYER) + { + return "Units/unit-test"; + } + if (team == UnitTeam.ENEMY) + { + return "Units/unit-test-enemy"; + } + if (team == UnitTeam.NPC) + { + return "Units/unit-test-npc"; + } + return "Units/unit-test"; + } + } + } diff --git a/Johnmagotchi/GameContent/Objects/Units/Stats/UnitStats.cs b/Johnmagotchi/GameContent/Objects/Units/Stats/UnitStats.cs new file mode 100644 index 0000000..a66130f --- /dev/null +++ b/Johnmagotchi/GameContent/Objects/Units/Stats/UnitStats.cs @@ -0,0 +1,43 @@ +using Johnmagotchi.GameContent.Objects.Units.BattleObjects; +using Johnmagotchi.GameContent.Objects.Units.Loadouts; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using static Johnmagotchi.GameContent.Objects.Units.Loadouts.PlayerClasses.PlayerClass; + +namespace Johnmagotchi.GameContent.Objects.Units.Stats +{ + internal class UnitStats + { + internal UnitStatBlock statblock; + internal UnitCurrentStatus status; + internal UnitLoadout loadout; + internal PlayerClassType classId; + + public UnitStats() + { + // Default Stats + classId = PlayerClassType.CL_COMMONER; + statblock = new UnitStatBlock(); + status = new UnitCurrentStatus(statblock); + loadout = new UnitLoadout(classId); + } + + // Deserializes Stats + public UnitStats(string serializedStatData) { + + + + + } + + //Returns This Unit's stats as a serialized String. + public string getAsSerialized() { + + return ""; + } + + } +} diff --git a/Johnmagotchi/GameContent/Objects/Units/Unit.cs b/Johnmagotchi/GameContent/Objects/Units/Unit.cs new file mode 100644 index 0000000..8802f92 --- /dev/null +++ b/Johnmagotchi/GameContent/Objects/Units/Unit.cs @@ -0,0 +1,42 @@ +using Johnmagotchi.GameContent.Objects.Units.GameLogic; +using Johnmagotchi.GameContent.Objects.Units.Loadouts; +using Johnmagotchi.GameContent.Objects.Units.Stats; +using Johnmagotchi.GameContent.Units; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Transactions; + +namespace Johnmagotchi.GameContent.Objects.Units +{ + internal class Unit : BaseUnitGameObject + { + + internal UnitStats stats; + + public Unit() + { + SetStats(new UnitStats()); + } + public Unit(Unit template) + { + SetStats(template.GetStats()); + } + public Unit(string serializeStatdData) + { + SetStats(LoadStatsFromSerialized(serializeStatdData)); + } + + public UnitStats GetStats() + { + return stats; + } + public UnitStats LoadStatsFromSerialized(string data) + { + + return new UnitStats(); + } + } +} diff --git a/Johnmagotchi/GameContent/Objects/Units/image.png b/Johnmagotchi/GameContent/Objects/Units/image.png new file mode 100644 index 0000000000000000000000000000000000000000..94ef5e75f9e686bcab25af4adaaf683daf6f883d GIT binary patch literal 72045 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
jA>rl$(ByD)dUJDA
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
sW*<)mN6xs(bAgo_xhG+A*)*Z$Cd0Pn4eFaQ7m

literal 0
HcmV?d00001

diff --git a/Johnmagotchi/GameContent/Screens/MapScreens/BaseMapScreen.cs b/Johnmagotchi/GameContent/Screens/MapScreens/BaseMapScreen.cs
new file mode 100644
index 0000000..7e62815
--- /dev/null
+++ b/Johnmagotchi/GameContent/Screens/MapScreens/BaseMapScreen.cs
@@ -0,0 +1,437 @@
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using Microsoft.Xna.Framework.Input;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using TibzGame.Core.Inputs;
+using TibzGame.Core.ScreenManager;
+using Johnmagotchi.GameContent.Objects;
+using System.Text.Json;
+using Johnmagotchi.GameContent.Units;
+using Johnmagotchi.GameContent.Objects.UI;
+using Johnmagotchi.Core.tools;
+
+namespace Johnmagotchi.Screen.BattleMapScreens
+{
+    public abstract class BaseMapScreen : GameScreen
+    {
+         SpriteBatch SpriteBatch;
+        protected BattleMap CurrentMap;
+
+        public MapCursor MapCursor;
+        public UnitDisplay UnitDisplay;
+
+        protected int cursorIndexX;
+
+        protected int cursorIndexY;
+
+        protected int scrollOffsetX;
+        protected int scrollOffsetY;
+
+        public int CursorQuadrant;
+
+        private readonly ulong CURSOR_HOLD_FRAMES = 25;
+        private readonly int SCROLL_BOOST_TIME_FRAMES = 60;
+        private readonly int CURSOR_SCROLL_NEXT_INC_FRAMES= 5;
+
+        private readonly int SCROLL_TILES_FROM_EDGE_X = 3;
+        private readonly int SCROLL_TILES_FROM_EDGE_Y = 2;
+
+        private int scrollTimer ; // frames until click to next 
+        private int scrollTotalDuration;
+
+        protected string tempSave;
+
+        public bool ScreenScrollLock = false;
+
+        private bool IsNewMap = true;
+
+
+        public abstract void ChildInit();
+        public abstract void ChildUpdate();
+        public abstract void ChildDraw();
+
+
+        public BaseMapScreen(){
+            this.CurrentMap = new BattleMap(24,20);
+            this.MapCursor = new MapCursor();
+            this.UnitDisplay = new UnitDisplay();
+            this.isDrawPriority = true;
+            this.isUpdatePriority = true;
+
+            saveCurrentMap();
+        }
+        public BaseMapScreen(BattleMap existingMap){
+
+            this.CurrentMap = existingMap.GetClone();
+
+            this.MapCursor = new MapCursor();
+            this.UnitDisplay = new UnitDisplay();
+            this.isDrawPriority = true;
+            this.isUpdatePriority = true;
+            this.IsNewMap = false;
+        }
+
+        public override void Init()
+        {
+            scrollTimer =0;
+            scrollTotalDuration =0;
+            cursorIndexX = 2;
+            cursorIndexY = 2;
+            scrollOffsetX=0;
+            scrollOffsetY=0;
+
+            SpriteBatch = new SpriteBatch(screenManager.GraphicsDevice);
+          
+            this.MapCursor.Init(screenManager);
+            this.UnitDisplay.Init(screenManager);
+            if (this.IsNewMap)
+            {
+                this.CurrentMap.Init(screenManager);
+            }
+            else
+            {
+                this.CurrentMap.InitFromReload(ScreenManager);
+            }
+
+            ChildInit();
+        }
+
+        public override void Destroy()
+        {
+            throw new NotImplementedException();
+        }
+
+        public override void Draw()
+        {
+           // bool stopXScroll = false;
+            //bool stopYScroll = false;
+            if ((this.CurrentMap.width * MapTile.TILE_WIDTH_PX) < this.ScreenManager.GetScaledPixelScreenWidth()) { // center width
+                scrollOffsetX = (this.ScreenManager.GetScaledPixelScreenWidth() - (this.CurrentMap.width * MapTile.TILE_WIDTH_PX))/2;
+             //   stopXScroll = true;
+            }
+            if ((this.CurrentMap.height * MapTile.TILE_HEIGHT_PX) < this.ScreenManager.GetScaledPixelScreenHeight()){ // center height
+                scrollOffsetY = (this.ScreenManager.GetScaledPixelScreenHeight() - (this.CurrentMap.height * MapTile.TILE_HEIGHT_PX))/2;
+            //    stopYScroll = true;
+            }
+
+           
+            this.CurrentMap.DrawMap(scrollOffsetX, scrollOffsetY);// should draw background
+         
+            //draw on top of background :
+            //cursor
+            this.MapCursor.Draw( (MapTile.TILE_WIDTH_PX *cursorIndexX) + scrollOffsetX , (MapTile.TILE_HEIGHT_PX * cursorIndexY) + scrollOffsetY);
+
+            // units
+            this.CurrentMap.DrawUnits(scrollOffsetX, scrollOffsetY);// should draw background
+
+
+        
+            // Call child draw classes
+            ChildDraw();
+
+            // anthing that has priorty top layer should go here
+
+            // ui overlay 
+            UnitDisplay.Draw(CursorQuadrant);
+
+
+        }
+
+        public override void Update()
+        {
+         // Updates
+            UpdateCursorQuadrant(); // This doesnt need to be called every frame, but its easy. so.
+
+
+            /// Keyboard / Controller controls
+            if (! screenManager.inputs.isMouseMode)
+            {
+
+                if (screenManager.inputs.mouseInput.leftClick.isJustReleased) {
+                    TibzLog.Debug(" Changed To Mouse Controls");
+                    screenManager.inputs.isMouseMode = true;
+                }
+                //Check Button Presses
+                if (screenManager.inputs.editorInputs.navLeft.isJustPressed)
+                {
+                    TickCursorLeft();
+                }
+                if (screenManager.inputs.editorInputs.navRight.isJustPressed)
+                {
+                    TickCursorRight();
+                }
+                if (screenManager.inputs.editorInputs.navUp.isJustPressed)
+                {
+                    TickCursorUp();
+                }
+                if (screenManager.inputs.editorInputs.navDown.isJustPressed)
+                {
+                    TickCursorDown();
+                }
+                if (screenManager.inputs.editorInputs.saveButton.isJustPressed)
+                {
+                    saveCurrentMap();
+                }
+                if (screenManager.inputs.editorInputs.loadButton.isJustPressed)
+                {
+                    loadCurrentMap();
+                }
+
+
+                //Button Holds
+                if (screenManager.inputs.editorInputs.navLeft.heldTime > CURSOR_HOLD_FRAMES)
+                {
+                    IncrementScrollTimers();
+                    if (scrollTimer > CURSOR_SCROLL_NEXT_INC_FRAMES)
+                    {
+                        scrollTimer = 0;
+                        TickCursorLeft();
+                    }
+
+                }
+                if (screenManager.inputs.editorInputs.navRight.heldTime > CURSOR_HOLD_FRAMES)
+                {
+                    IncrementScrollTimers();
+                    if (scrollTimer > CURSOR_SCROLL_NEXT_INC_FRAMES)
+                    {
+                        scrollTimer = 0;
+                        TickCursorRight();
+                    }
+                }
+                if (screenManager.inputs.editorInputs.navUp.heldTime > CURSOR_HOLD_FRAMES)
+                {
+                    IncrementScrollTimers();
+                    if (scrollTimer > CURSOR_SCROLL_NEXT_INC_FRAMES)
+                    {
+                        scrollTimer = 0;
+                        TickCursorUp();
+                    }
+                }
+                if (screenManager.inputs.editorInputs.navDown.heldTime > CURSOR_HOLD_FRAMES)
+                {
+                    IncrementScrollTimers();
+                    if (scrollTimer > CURSOR_SCROLL_NEXT_INC_FRAMES)
+                    {
+                        scrollTimer = 0;
+                        TickCursorDown();
+                    }
+                }
+                if (ScreenManager.inputs.editorInputs.navLeft.isJustReleased || // reset scroll timers on release
+                ScreenManager.inputs.editorInputs.navRight.isJustReleased ||
+                ScreenManager.inputs.editorInputs.navUp.isJustReleased ||
+                ScreenManager.inputs.editorInputs.navDown.isJustReleased)
+                {
+                    scrollTimer = 0;
+                    scrollTotalDuration = 0;
+                }
+            }
+
+            else {
+                if (screenManager.inputs.editorInputs.confirm.isJustPressed)
+                {
+                    TibzLog.Debug(" Reverted to keyboard controls");
+                    screenManager.inputs.isMouseMode =  false;
+                }
+
+                UpdateCursorMouse();
+
+                if (screenManager.inputs.mouseInput.leftClick.isJustPressed)
+                {
+                    screenManager.inputs.editorInputs.confirm.isJustPressed = true;
+                }
+                if (screenManager.inputs.mouseInput.rightClick.isJustPressed)
+                { 
+                    screenManager.inputs.editorInputs.cancel.isJustPressed = true;
+                }
+            }
+
+                // update battle map 
+                CurrentMap.Update();
+
+            // update unit display
+            UnitDisplay.Update( CurrentMap.getUnitAtLocation(cursorIndexX, cursorIndexY));
+
+        // End Update, call child
+            ChildUpdate();
+
+        }
+
+        protected virtual void TickCursorLeft()
+        {
+            if (cursorIndexX > 0) cursorIndexX --;
+            else cursorIndexX = 0;
+                 // adjust screen after mouse movement
+            tickLeftScroll();
+        }
+        protected virtual void TickCursorRight()
+        {
+            if (cursorIndexX < CurrentMap.width -1) cursorIndexX ++; // zero indexed so -1
+            else cursorIndexX = CurrentMap.width -1;
+                 // adjust screen after mouse movement
+            tickRightScroll();
+        }
+        protected virtual void TickCursorUp()
+        {
+            if (cursorIndexY > 0) cursorIndexY --;
+            else cursorIndexY = 0;
+                 // adjust screen after mouse movement
+             tickUpScroll();
+        }
+        protected virtual void TickCursorDown()
+        {
+            if (cursorIndexY < CurrentMap.height -1) cursorIndexY ++; // zero indexed so -1
+            else cursorIndexY = CurrentMap.height -1;
+                 // adjust screen after mouse movement
+            tickDownScroll();
+        }
+        private void IncrementScrollTimers()
+        {
+                scrollTimer++;
+                scrollTotalDuration++;
+                if (scrollTotalDuration > SCROLL_BOOST_TIME_FRAMES){
+                   scrollTimer ++; // double the speed of scroll if held for over 70 frames
+                }
+              
+        }
+
+        protected void tickLeftScroll(){
+            if (ScreenScrollLock){ return; }
+            int currentOffsetTilesX = - scrollOffsetX / MapTile.TILE_WIDTH_PX; // since the offset scrolling left is negative we need to invert this sign
+            int currentOffsetTilesY = scrollOffsetY / MapTile.TILE_HEIGHT_PX;
+            int totalWidthTiles =  this.screenManager.GetScaledPixelScreenWidth() / MapTile.TILE_WIDTH_PX;
+            int TilesFromLeftEdge =  cursorIndexX - currentOffsetTilesX;
+              
+               System.Console.WriteLine("Scroll offset px: {0}", scrollOffsetX);
+           
+            if (  TilesFromLeftEdge < SCROLL_TILES_FROM_EDGE_X)
+            {
+                scrollOffsetX += MapTile.TILE_WIDTH_PX; // scroll left
+            }
+            if (scrollOffsetX >= 0 ) // scroll limit
+            {
+                scrollOffsetX = 0;
+            }
+        }
+        protected void tickRightScroll(){
+            if (ScreenScrollLock){ return; }
+            int currentOffsetTilesX = - scrollOffsetX / MapTile.TILE_WIDTH_PX; // invert sign here
+            int currentOffsetTilesY = scrollOffsetY / MapTile.TILE_HEIGHT_PX;
+            int totalWidthTiles =  this.screenManager.GetScaledPixelScreenWidth() / MapTile.TILE_WIDTH_PX;
+            int TilesFromLeftEdge = cursorIndexX - currentOffsetTilesX;
+               System.Console.WriteLine("Scroll offset px: {0}", scrollOffsetX);
+
+                System.Console.WriteLine("Scroll offset limit: {0}", -1* (CurrentMap.width * MapTile.TILE_WIDTH_PX - this.screenManager.GetScaledPixelScreenWidth()));
+
+       
+            if (  TilesFromLeftEdge >=  totalWidthTiles - SCROLL_TILES_FROM_EDGE_X)
+            {
+                scrollOffsetX -= MapTile.TILE_WIDTH_PX; // scroll right
+            }
+            if (scrollOffsetX <= -1* (CurrentMap.width * MapTile.TILE_WIDTH_PX - this.screenManager.GetScaledPixelScreenWidth()))
+            {
+                scrollOffsetX =  -1* (CurrentMap.width * MapTile.TILE_WIDTH_PX - this.screenManager.GetScaledPixelScreenWidth());
+            }
+        }
+        protected void tickUpScroll(){
+            if (ScreenScrollLock){ return; }
+            int currentOffsetTilesY = - scrollOffsetY / MapTile.TILE_HEIGHT_PX;
+            int totalHeightTiles = this.screenManager.GetScaledPixelScreenHeight() / MapTile.TILE_HEIGHT_PX;
+            int tilesFromTop =  cursorIndexY - currentOffsetTilesY;
+            //System.Console.WriteLine("Scroll offset px: {0}", scrollOffsetY);
+            if (  tilesFromTop < SCROLL_TILES_FROM_EDGE_Y){
+                scrollOffsetY += MapTile.TILE_HEIGHT_PX; // scroll up
+            }
+             if (scrollOffsetY >= 0 )
+            {
+                scrollOffsetY = 0;
+            }
+        }
+        protected void tickDownScroll(){
+            if (ScreenScrollLock){ return; }
+            int currentOffsetTilesY = - scrollOffsetY / MapTile.TILE_HEIGHT_PX;
+            int totalHeightTiles = this.screenManager.GetScaledPixelScreenHeight() / MapTile.TILE_HEIGHT_PX;
+            int tilesFromTop =  cursorIndexY - currentOffsetTilesY;
+           // System.Console.WriteLine("Scroll offset px: {0}", scrollOffsetY);
+           
+            if ( tilesFromTop >  totalHeightTiles  - SCROLL_TILES_FROM_EDGE_Y){
+                scrollOffsetY -= MapTile.TILE_HEIGHT_PX; // scroll up
+            }
+             if (scrollOffsetY <= -1* (CurrentMap.height * MapTile.TILE_HEIGHT_PX - this.screenManager.GetScaledPixelScreenHeight()))
+            {
+                scrollOffsetY =  -1* (CurrentMap.height * MapTile.TILE_HEIGHT_PX - this.screenManager.GetScaledPixelScreenHeight());
+            }  
+        }
+
+
+
+
+        public string saveCurrentMap(){  
+            System.Console.WriteLine("Saving....");
+            CurrentMap.SerializeAll();
+            
+            tempSave = JsonSerializer.Serialize(CurrentMap);
+            // System.Console.WriteLine("save json: {0}", tempSave);
+            return tempSave;
+        }
+
+        public void loadCurrentMap(){
+            if (tempSave.Length > 10){
+                System.Console.WriteLine("Loading....");
+                this.CurrentMap = JsonSerializer.Deserialize(tempSave);
+                this.CurrentMap.InitFromReload(screenManager);
+                this.CurrentMap.deserializeMapTiles();
+                this.CurrentMap.DeserializeUnitData();
+            }
+             else{
+                  System.Console.WriteLine("valid save state not found");
+             }
+           
+        }
+
+        private void UpdateCursorQuadrant() {
+            
+            if ((MapTile.TILE_HEIGHT_PX * cursorIndexY) + scrollOffsetY < ScreenManager.GetScaledPixelScreenHeight() / 2) // top
+            {
+                if ((MapTile.TILE_WIDTH_PX * cursorIndexX) + scrollOffsetX > ScreenManager.GetScaledPixelScreenWidth() / 2) // right
+                {
+                    CursorQuadrant = 1;
+                }
+                else // left
+                {
+                    CursorQuadrant = 2;
+                }
+            }
+
+            else //bottom
+            {
+                if ((MapTile.TILE_WIDTH_PX * cursorIndexX) + scrollOffsetX < ScreenManager.GetScaledPixelScreenWidth() / 2) // left
+                {
+                    CursorQuadrant = 3;
+                }
+                else // right
+                {
+                    CursorQuadrant = 4;
+                }
+            }
+        }
+
+        private void UpdateCursorMouse() 
+        {
+            int x = screenManager.inputs.mouseInput.x; 
+            int y = screenManager.inputs.mouseInput.y;
+            //TibzLog.Debug("Mouse Pos: x - "+  x + " , y - " + y );
+
+            int xSelectedTileIndex =  x * ScreenManager.BASE_ZOOM_LEVEL / ( MapTile.TILE_WIDTH_PX * 2 );
+            int ySelectedTileIndex = y * ScreenManager.BASE_ZOOM_LEVEL / (MapTile.TILE_HEIGHT_PX * 2 );
+
+            cursorIndexX = xSelectedTileIndex;
+            cursorIndexY = ySelectedTileIndex;
+
+        }
+    }
+}
\ No newline at end of file
diff --git a/Johnmagotchi/GameContent/Screens/MapScreens/BattleMapScreen/BattleAnimationScreen.cs b/Johnmagotchi/GameContent/Screens/MapScreens/BattleMapScreen/BattleAnimationScreen.cs
new file mode 100644
index 0000000..2e00448
--- /dev/null
+++ b/Johnmagotchi/GameContent/Screens/MapScreens/BattleMapScreen/BattleAnimationScreen.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using TibzGame.Core.ScreenManager;
+
+namespace Johnmagotchi.GameContent.Screens.MapScreens.BattleMapScreen
+{
+    internal class BattleAnimationScreen : GameScreen
+    {
+        public override void Destroy()
+        {
+            throw new NotImplementedException();
+        }
+
+        public override void Draw()
+        {
+            throw new NotImplementedException();
+        }
+
+        public override void Init()
+        {
+            throw new NotImplementedException();
+        }
+
+        public override void Update()
+        {
+            throw new NotImplementedException();
+        }
+    }
+}
diff --git a/Johnmagotchi/GameContent/Screens/MapScreens/BattleMapScreen/BattleMapScreen.cs b/Johnmagotchi/GameContent/Screens/MapScreens/BattleMapScreen/BattleMapScreen.cs
new file mode 100644
index 0000000..e83861b
--- /dev/null
+++ b/Johnmagotchi/GameContent/Screens/MapScreens/BattleMapScreen/BattleMapScreen.cs
@@ -0,0 +1,327 @@
+using Johnmagotchi.Core.tools;
+using Johnmagotchi.GameContent.Logic;
+using Johnmagotchi.GameContent.Objects;
+using Johnmagotchi.GameContent.Objects.Maps;
+using Johnmagotchi.GameContent.Screens.Menu.BattleMap;
+using Johnmagotchi.GameContent.Units;
+using Johnmagotchi.Screen.BattleMapScreens;
+using System;
+using System.Collections.Generic;
+using TibzGame.Core.ScreenManager;
+
+namespace Johnmagotchi.GameContent.Screens.BattleMapScreens.BattleMapScreen
+{
+    internal class BattleMapScreen : BaseMapScreen
+    {
+        enum SelectionState
+        {
+            MOVE,
+            CHOOSE_ACTION,
+            END_ACTION,
+        }
+
+        UnitObject selectedToMoveUnit;
+        UnitObject attackedUnit;
+        private Tuple originalLocation;
+        private List> validMoves;
+        private List> validAttacks;
+        private int initInputDelay = 40; // frames till inputs work
+        public BattleMapScreen(BattleMap map) : base(map)
+        {
+            selectedToMoveUnit = null;
+        }
+        public override void Destroy()
+        {
+            // throw new NotImplementedException();
+        }
+
+        public override void ChildInit()
+        {
+            TibzLog.Debug("Child init hit");
+
+
+        }
+
+        public override void ChildUpdate()
+        {
+
+            // Wait until delay ends to start input
+            if (initInputDelay > 0)
+            {
+                initInputDelay--;
+                return;
+            }
+
+
+            // Handle inputs
+            if (screenManager.inputs.editorInputs.confirm.isJustPressed)
+            {
+                TibzLog.Debug("Select Pressed");
+
+
+                UnitObject newSelectedUnit = CurrentMap.getUnitAtLocation(cursorIndexX, cursorIndexY);
+                TibzLog.Debug(newSelectedUnit.UnitLoadout.AvailableAttacks);
+                if (newSelectedUnit != null && newSelectedUnit.isTurnOver == false && selectedToMoveUnit == null)
+                {
+                    selectedToMoveUnit = newSelectedUnit;
+                    this.originalLocation = new Tuple(cursorIndexX, cursorIndexY);
+
+                    ShowAllMoveHighlights();
+
+                }
+                else if (selectedToMoveUnit != null) // unit is selected, movement not confirmed
+                {
+                    if (newSelectedUnit == null) // space is not occupied with another unit
+                    {
+                        //  normal movement                 
+                        if (validMoves != null)
+                        {
+                            bool isMoveValid = false;
+                            foreach (Tuple tile in validMoves)
+                            {
+                                if (tile.Item1 == cursorIndexX && tile.Item2 == cursorIndexY)
+                                {
+                                    isMoveValid = true;
+                                }
+                            }
+                            if (isMoveValid)
+                            {
+                                //clear highlights and move
+                                clearValidTiles();
+                                CurrentMap.moveUnit(this.selectedToMoveUnit, cursorIndexX, cursorIndexY);
+
+                                ShowDirectAttackHighlights();
+                                // This menu directly calls: 
+                                //AfterMoveWait(), AfterMoveAttack(), AfterMoveWait()
+                                TibzLog.Debug(selectedToMoveUnit.UnitLoadout.AvailableAttacks);
+                                screenManager.addScreen(
+                                  new AfterMovementMenu(
+                                  this,
+                                  MapTile.TILE_WIDTH_PX * cursorIndexX + scrollOffsetX,
+                                   MapTile.TILE_HEIGHT_PX * cursorIndexY + scrollOffsetY,
+                                  CursorQuadrant, true));
+
+                            }
+                            else
+                            {
+                                // Move is not valid, probably play a sound effect or something
+                            }
+
+
+                        }
+
+                    }
+                    else if (selectedToMoveUnit.internalID == newSelectedUnit.internalID)
+                    {
+                        clearValidTiles();
+                        CurrentMap.moveUnit(this.selectedToMoveUnit, cursorIndexX, cursorIndexY);
+                        // The same unit has been selected 
+                        ShowDirectAttackHighlights();
+                        // This menu calls: 
+                        //AfterMoveWait(), AfterMoveAttack(), AfterMoveWait()
+                        screenManager.addScreen(
+                          new AfterMovementMenu(
+                          this,
+                          MapTile.TILE_WIDTH_PX * cursorIndexX + scrollOffsetX,
+                           MapTile.TILE_HEIGHT_PX * cursorIndexY + scrollOffsetY,
+                          CursorQuadrant, true));
+
+                    }
+                    else // new unit selected while attempting to move
+                    {
+
+
+                    }
+
+                }
+                else
+                {
+                    screenManager.addScreen(
+                    new BattleMapMenu(
+                    this,
+                    MapTile.TILE_WIDTH_PX * cursorIndexX + scrollOffsetX,
+                     MapTile.TILE_HEIGHT_PX * cursorIndexY + scrollOffsetY,
+                    CursorQuadrant));
+                }
+            }
+
+            if (screenManager.inputs.editorInputs.cancel.isJustPressed)
+            {
+                if (selectedToMoveUnit != null)
+                {
+
+                    if (validMoves != null)
+                    {
+                        clearValidTiles();
+                    }
+
+                    this.selectedToMoveUnit = null;
+
+                }
+            }
+        }
+
+        public override void ChildDraw()
+        {
+            // throw new NotImplementedException();
+        }
+
+        public List> GetValidMoveCoordinates(UnitObject unit, Tuple coords)
+        {
+            List> validTiles = new List>();
+            int x = coords.Item1;
+            int y = coords.Item2;
+
+            int range = unit.stats.Movement;
+
+            // tree traversal time
+            TibzLog.Debug(" - BM screen - ");
+            TibzLog.Debug(unit.stats.movementType);
+            MapMovementNode rootNode = new MapMovementNode(unit, CurrentMap, range, x, y);
+            rootNode.GetMoveLocations(MapMovementNode.ParentNodeLocation.ROOT, ref validTiles);
+
+            return validTiles;
+        }
+
+        public List> GetValidAttackHighlights(UnitObject unit, Tuple coords)
+        {
+            List> validTiles = new List>();
+            int x = coords.Item1;
+            int y = coords.Item2;
+            int range = unit.stats.Movement;
+            MapMovementNode rootNode = new MapMovementNode(unit, CurrentMap, range, x, y);
+            rootNode.getDirectAttackLocations(MapMovementNode.ParentNodeLocation.ROOT, ref validTiles);
+
+            return validTiles;
+        }
+
+        protected override void TickCursorLeft()
+        {
+            if (cursorIndexX > 0) cursorIndexX--;
+            else cursorIndexX = 0;
+            // adjust screen after mouse movement
+            tickLeftScroll();
+        }
+        protected override void TickCursorRight()
+        {
+            if (cursorIndexX < CurrentMap.width - 1) cursorIndexX++; // zero indexed so -1
+            else cursorIndexX = CurrentMap.width - 1;
+            // adjust screen after mouse movement
+            tickRightScroll();
+        }
+        protected override void TickCursorUp()
+        {
+            if (cursorIndexY > 0) cursorIndexY--;
+            else cursorIndexY = 0;
+            // adjust screen after mouse movement
+            tickUpScroll();
+        }
+        protected override void TickCursorDown()
+        {
+            if (cursorIndexY < CurrentMap.height - 1) cursorIndexY++; // zero indexed so -1
+            else cursorIndexY = CurrentMap.height - 1;
+            // adjust screen after mouse movement
+            tickDownScroll();
+        }
+
+
+
+        private void finishMovement()
+        {
+
+            this.selectedToMoveUnit.isTurnOver = true;
+            this.selectedToMoveUnit = null;
+        }
+
+        public void AfterMoveWait()
+        {
+            ClearDirectAttackHighlights();
+            finishMovement();
+        }
+        public void AfterMoveAttack()
+        {
+            ClearDirectAttackHighlights();
+            finishMovement();
+            MapScreens.BattleMapScreen.BattlePreviewScreen.confirmCallback attackPreviewCallback = delegate (bool confirmed) { AttackPreviewConfirmed(confirmed); };
+            screenManager.addScreen(new MapScreens.BattleMapScreen.BattlePreviewScreen(ref attackPreviewCallback) );
+
+        }
+
+        public void AttackPreviewConfirmed(bool isConfirmed) {
+            if (isConfirmed)
+            {
+             //   BattleLogic.RunBattle(selectedToMoveUnit,attackedUnit, selectedAttack, defenderAttack);
+                BattleLogic.RunBattle(ref selectedToMoveUnit, ref attackedUnit, null, null);
+                screenManager.addScreen(new MapScreens.BattleMapScreen.BattleAnimationScreen());
+            }
+         
+        }
+
+
+        public void AfterMoveItem()
+        {
+            ClearDirectAttackHighlights();
+            finishMovement();
+
+        }
+
+        public void AfterMoveCancelled()
+        {
+            CurrentMap.moveUnit(this.selectedToMoveUnit, this.originalLocation.Item1, this.originalLocation.Item2);
+            ShowAllMoveHighlights();
+        }
+
+        private void ShowAllMoveHighlights()
+        {
+            validAttacks = GetValidAttackHighlights(selectedToMoveUnit, new Tuple(originalLocation.Item1, originalLocation.Item2));
+            foreach (Tuple tile in validAttacks)
+            {
+                CurrentMap.ChangeTileHighlight(tile.Item1, tile.Item2, TileHighlight.ATTACK);
+            }
+
+
+            validMoves = GetValidMoveCoordinates(selectedToMoveUnit, new Tuple(originalLocation.Item1, originalLocation.Item2));
+            foreach (Tuple tile in validMoves)
+            {
+                CurrentMap.ChangeTileHighlight(tile.Item1, tile.Item2, TileHighlight.MOVEMENT);
+            }
+        }
+        private void clearValidTiles()
+        {
+
+            foreach (Tuple tile in validMoves)
+            {
+                CurrentMap.ChangeTileHighlight(tile.Item1, tile.Item2, TileHighlight.NONE);
+            }
+
+            foreach (Tuple tile in validAttacks)
+            {
+                CurrentMap.ChangeTileHighlight(tile.Item1, tile.Item2, TileHighlight.NONE);
+            }
+            validMoves = null;
+            validAttacks = null;
+        }
+
+        private void ShowDirectAttackHighlights()
+        {
+            List> tiles = new List>();
+            MapMovementNode rootNode = new MapMovementNode(this.selectedToMoveUnit, CurrentMap, 0, this.selectedToMoveUnit.xPos, this.selectedToMoveUnit.yPos);
+            rootNode.getDirectAttacksNoMovement(MapMovementNode.ParentNodeLocation.ROOT, ref tiles);
+            foreach (Tuple tile in tiles)
+            {
+                CurrentMap.ChangeTileHighlight(tile.Item1, tile.Item2, TileHighlight.ATTACK);
+            }
+        }
+        private void ClearDirectAttackHighlights()
+        {
+            List> tiles = new List>();
+            MapMovementNode rootNode = new MapMovementNode(this.selectedToMoveUnit, CurrentMap, 0, this.selectedToMoveUnit.xPos, this.selectedToMoveUnit.yPos);
+            rootNode.getDirectAttacksNoMovement(MapMovementNode.ParentNodeLocation.ROOT, ref tiles);
+            foreach (Tuple tile in tiles)
+            {
+                CurrentMap.ChangeTileHighlight(tile.Item1, tile.Item2, TileHighlight.NONE);
+            }
+
+        }
+    }
+}
\ No newline at end of file
diff --git a/Johnmagotchi/GameContent/Screens/MapScreens/BattleMapScreen/BattlePreviewScreen.cs b/Johnmagotchi/GameContent/Screens/MapScreens/BattleMapScreen/BattlePreviewScreen.cs
new file mode 100644
index 0000000..95224db
--- /dev/null
+++ b/Johnmagotchi/GameContent/Screens/MapScreens/BattleMapScreen/BattlePreviewScreen.cs
@@ -0,0 +1,67 @@
+using Johnmagotchi.GameContent.Screens.Menu;
+using Microsoft.Xna.Framework.Graphics;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using TibzGame.Core.ScreenManager;
+
+namespace Johnmagotchi.GameContent.Screens.MapScreens.BattleMapScreen
+{
+    internal class BattlePreviewScreen : GameScreen
+    {
+        public delegate void confirmCallback(bool confirmed);
+
+        protected GameScreen ParentGameScreen;
+        protected SpriteBatch spriteBatch;
+        public SpriteEffects currentSpriteEffects;
+
+        protected int xPos;
+        protected int yPos;
+
+        protected int xDrawOffset;
+        protected int yDrawOffset;
+
+        protected int SelectedIndex;
+        protected MenuOption[] CurrentOptions;
+
+        protected Texture2D button;
+        protected Texture2D buttonHighlight;
+        protected SpriteFont kemco;
+        protected SpriteFont pixsplit;
+
+
+        confirmCallback callback;
+        public BattlePreviewScreen(ref confirmCallback newCallback) {
+
+            this.callback = newCallback;
+        
+        }
+        public override void Destroy()
+        {
+            throw new NotImplementedException();
+        }
+
+        public override void Draw()
+        {
+            throw new NotImplementedException();
+        }
+
+        public override void Init()
+        {
+            spriteBatch = new SpriteBatch(screenManager.GraphicsDevice);
+            button = screenManager.contentRef.Load("Map-UI/test-menu-item-64-28");
+            buttonHighlight = screenManager.contentRef.Load("Map-UI/test-menu-item-64-28-selected");
+            //load fonts
+            kemco = screenManager.contentRef.Load("Fonts/Kemco-20");
+            pixsplit = screenManager.contentRef.Load("Fonts/PixelSplitter");
+           
+        }
+
+        public override void Update()
+        {
+            throw new NotImplementedException();
+        }
+    }
+}
diff --git a/Johnmagotchi/GameContent/Screens/MapScreens/MapEditor/MapEditorInfoText.cs b/Johnmagotchi/GameContent/Screens/MapScreens/MapEditor/MapEditorInfoText.cs
new file mode 100644
index 0000000..933c4c8
--- /dev/null
+++ b/Johnmagotchi/GameContent/Screens/MapScreens/MapEditor/MapEditorInfoText.cs
@@ -0,0 +1,75 @@
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using TibzGame.Core.ScreenManager;
+
+namespace Johnmagotchi.GameContent.Screens.BattleMapScreens.MapEditor
+{
+    internal class MapEditorInfoText
+    {
+        protected SpriteFont kemco;
+        protected SpriteFont pixsplit;
+        protected ScreenManager ScreenManager;
+        protected SpriteBatch spriteBatch;
+
+        public MapEditorInfoText() { 
+           
+        }
+        public void Init(ScreenManager screenManager)
+        {
+            ScreenManager = screenManager;
+            spriteBatch = new SpriteBatch(screenManager.GraphicsDevice);
+            kemco = ScreenManager.contentRef.Load("Fonts/Kemco-20");
+            pixsplit = ScreenManager.contentRef.Load("Fonts/PixelSplitter");
+        }
+        public void Draw( int cursorQuadrant, int offsetX, int offsetY, string CurrentToolString)
+        {
+
+            Vector2 textRotationOrigin = kemco.MeasureString(CurrentToolString);
+            textRotationOrigin.X = textRotationOrigin.X / 2;
+
+            float x = textRotationOrigin.X - 40 ;
+            int y = 40;
+            y += offsetY;
+            if (cursorQuadrant == 1 || cursorQuadrant ==2) {
+                y = 700; // these values need to be adjust to match screen resolution
+                y -= offsetY;
+            }
+
+            x += offsetX;
+         
+     
+            Vector2 position = new Vector2(x,y);
+         
+           
+
+            spriteBatch.Begin();
+
+            // the hackiest white outline of all time.
+            position = new Vector2(x+2, y+2);
+            spriteBatch.DrawString(kemco, CurrentToolString, position, Color.White, 0, textRotationOrigin, 00.75f, SpriteEffects.None, 1.0f);
+            position = new Vector2(x-2, y-2);
+            spriteBatch.DrawString(kemco, CurrentToolString, position, Color.White, 0, textRotationOrigin, 00.75f, SpriteEffects.None, 1.0f);
+            position = new Vector2(x+2, y-2);
+            spriteBatch.DrawString(kemco, CurrentToolString, position, Color.White, 0, textRotationOrigin, 00.75f, SpriteEffects.None, 1.0f);
+            position = new Vector2(x-2, y+2);
+            spriteBatch.DrawString(kemco, CurrentToolString, position, Color.White, 0, textRotationOrigin, 00.75f, SpriteEffects.None, 1.0f);
+            position = new Vector2(x+2, y);
+            spriteBatch.DrawString(kemco, CurrentToolString, position, Color.White, 0, textRotationOrigin, 00.75f, SpriteEffects.None, 1.0f);
+            position = new Vector2(x-2, y);
+            spriteBatch.DrawString(kemco, CurrentToolString, position, Color.White, 0, textRotationOrigin, 00.75f, SpriteEffects.None, 1.0f);
+
+
+            // the actual text
+            position = new Vector2(x, y);
+            spriteBatch.DrawString(kemco, CurrentToolString, position, Color.Black, 0, textRotationOrigin, 00.75f, SpriteEffects.None, 1.0f);
+
+
+            spriteBatch.End();
+        }
+    }
+}
diff --git a/Johnmagotchi/GameContent/Screens/MapScreens/MapEditor/MapEditorScreen.cs b/Johnmagotchi/GameContent/Screens/MapScreens/MapEditor/MapEditorScreen.cs
new file mode 100644
index 0000000..e881ada
--- /dev/null
+++ b/Johnmagotchi/GameContent/Screens/MapScreens/MapEditor/MapEditorScreen.cs
@@ -0,0 +1,233 @@
+using Johnmagotchi.GameContent.Objects;
+using System.Collections.Generic;
+using  Johnmagotchi.GameContent.Units;
+using Johnmagotchi.Core.tools;
+using Johnmagotchi.GameContent.Screens.Menu;
+using Johnmagotchi.GameContent.Screens.BattleMapScreens.MapEditor;
+using Microsoft.VisualBasic;
+using static System.Net.Mime.MediaTypeNames;
+using System.IO;
+using System;
+using Johnmagotchi.GameContent.Objects.Units.Loadouts;
+using Johnmagotchi.GameContent.Objects.Units.BattleObjects;
+
+namespace Johnmagotchi.Screen.BattleMapScreens
+{
+    public class MapEditorScreen : BaseMapScreen
+    {
+
+        public enum EditorToolType
+        {
+            TILE_EDIT,
+            UNIT_ADD,
+            UNIT_DELETE
+        }
+        private enum UnitFactionType {  // this could be replaced with the team enum in unit stats
+            PLAYER,
+            ENEMY,
+            NPC
+        }
+        private readonly bool AUTOLOAD_SLOT_0 = true;
+        private TileType selectedTileType;
+        private int selectedUnitIndex;
+        private EditorToolType CurrentTool;
+        private MapEditorInfoText InfoText;
+        public List AvailableUnits;
+        public List AvailableLoadouts;
+        private UnitFactionType UnitFaction; 
+
+
+        public MapEditorScreen(){
+
+            this.isUpdatePriority = true;
+            this.InfoText = new MapEditorInfoText();
+        }
+        public MapEditorScreen(BattleMap existingMap){
+            this.CurrentMap = existingMap;
+        }
+
+        public BattleMap GetMap() {
+            return CurrentMap;        
+        }
+
+        public override void ChildInit()
+        {
+            InfoText.Init(screenManager);
+            selectedTileType = TileType.GRASS;         
+            AvailableUnits = UnitLoader.LoadBaseUnits();
+            
+
+
+            selectedUnitIndex = 0;
+            UnitFaction = UnitFactionType.PLAYER;
+            foreach (UnitObject unit in AvailableUnits) {
+                TibzLog.Debug(" Unit id: {0}, name: {1},  health: {2}, atk: {3}, def: {4}, spd {5}, unique: {6}, movementType {7} ",
+                    unit.id, unit.name, unit.stats.MaxHealth, unit.stats.Attack, unit.stats.Defense,unit.stats.Speed , unit.isUnique, unit.stats.movementType);
+            }
+
+            if (AUTOLOAD_SLOT_0) { 
+                this.LoadMapAtSlot(0);
+            }
+
+        }
+        public override void ChildUpdate() {
+            if (CurrentTool == EditorToolType.TILE_EDIT)
+            {
+                if (screenManager.inputs.editorInputs.special1.isJustPressed)
+                {
+                    this.selectedTileType = TileType.GRASS;
+                }
+                if (screenManager.inputs.editorInputs.special2.isJustPressed)
+                {
+                    this.selectedTileType = TileType.SEA;
+                }
+                if (screenManager.inputs.editorInputs.confirm.isPressed)
+                {
+                    CurrentMap.ChangeTileType(this.cursorIndexX, this.cursorIndexY, this.selectedTileType);
+                }
+            }
+// ----------------------------------------------------------------------------------------------------------------------
+            if (CurrentTool == EditorToolType.UNIT_ADD)
+            {
+                if (screenManager.inputs.editorInputs.special1.isJustPressed)
+                {
+                    selectedUnitIndex ++;
+                    if (selectedUnitIndex > AvailableUnits.Count -1) {
+                        selectedUnitIndex = 0;
+                    }
+                }
+                if (screenManager.inputs.editorInputs.special2.isJustPressed)
+                {
+                   selectedUnitIndex --;
+                    if (selectedUnitIndex < 0)
+                    {
+                        selectedUnitIndex = AvailableUnits.Count - 1;
+                    }
+                }
+
+                if (screenManager.inputs.editorInputs.special3.isJustPressed)
+                {
+                    UnitFaction++;
+                    if (UnitFaction > UnitFactionType.NPC)
+                    {
+                        UnitFaction = UnitFactionType.PLAYER;
+                    }
+                }
+                if (screenManager.inputs.editorInputs.special4.isJustPressed)
+                {
+                    UnitFaction--;
+                    if (UnitFaction < UnitFactionType.PLAYER)
+                    {
+                        UnitFaction = UnitFactionType.NPC;
+                    }
+                }
+                if (screenManager.inputs.editorInputs.confirm.isJustPressed)
+                {
+                    if (UnitFaction == UnitFactionType.PLAYER) 
+                    {
+                        CurrentMap.AddPlayerUnit(AvailableUnits[selectedUnitIndex], cursorIndexX, cursorIndexY);
+                    }
+                    else if (UnitFaction == UnitFactionType.ENEMY)
+                    {
+                        CurrentMap.AddEnemyUnit(AvailableUnits[selectedUnitIndex], cursorIndexX, cursorIndexY);
+                    }
+                   else  if (UnitFaction == UnitFactionType.NPC)
+                    {
+                        CurrentMap.AddNpcUnit(AvailableUnits[selectedUnitIndex], cursorIndexX, cursorIndexY);
+                    }
+                  //  CurrentMap.ChangeTileType(this.cursorIndexX, this.cursorIndexY, this.selectedTileType);
+                }
+            }
+            // ----------------------------------------------------------------------------------------------------------------------
+
+            if (CurrentTool == EditorToolType.UNIT_DELETE)
+            {
+               
+                if (screenManager.inputs.editorInputs.confirm.isJustPressed)
+                {
+                    UnitObject deleteUnit =  CurrentMap.getUnitAtLocation(cursorIndexX, cursorIndexY);
+                    if (deleteUnit != null)
+                    {
+                        CurrentMap.deleteUnit(deleteUnit);
+                    }
+                }
+            }
+            // --------------------------------------------------------------------------------------------------------------------------
+            if (screenManager.inputs.editorInputs.cancel.isJustPressed)
+            {         
+                this.screenManager.addScreen(
+                    new MapEditorMenu(
+                    this,
+                    (MapTile.TILE_WIDTH_PX * cursorIndexX) + scrollOffsetX, 
+                    (MapTile.TILE_HEIGHT_PX * cursorIndexY) + scrollOffsetY,
+                    CursorQuadrant));
+            }
+            
+        }
+
+        public void UpdateEditorTool(EditorToolType tool) { 
+            CurrentTool = tool;
+
+            TibzLog.Debug("Tool Updated: {0}", CurrentTool);
+        }
+
+        public override void ChildDraw()
+        {
+            string tooltext = CurrentTool.ToString().Replace("_", " ");
+            InfoText.Draw( CursorQuadrant,0,0, "Current Tool : " + tooltext);
+            if (CurrentTool == EditorToolType.TILE_EDIT) {
+                InfoText.Draw(CursorQuadrant, 15 , 30, "Current Tile : " + selectedTileType);
+            }
+            if (CurrentTool == EditorToolType.UNIT_ADD)
+            {
+                InfoText.Draw(CursorQuadrant, 15, 30, "Current Unit : " + AvailableUnits[selectedUnitIndex].name); 
+                InfoText.Draw(CursorQuadrant, 15, 60, "Current Faction : " + UnitFaction);
+            }
+        }
+
+        public void SaveMap() {
+            this.saveCurrentMap();
+        }
+        public void SaveMapAtSlot( int saveslot)
+        {
+            TibzLog.Debug("Save slot : " + saveslot);
+            // write to GameContent/Data/SaveMapData/Map-.json
+          var path = "..\\..\\..\\Data\\SaveMapData\\map-" +saveslot + ".json";
+            File.WriteAllText(path, this.saveCurrentMap());
+        }
+
+        public void LoadMapAtSlot(int saveslot) {
+            TibzLog.Debug("LoadMAp hit");
+            try
+            {
+                var path = "..\\..\\..\\Data\\SaveMapData\\map-" + saveslot + ".json";
+                //Pass the file path and file name to the StreamReader constructor
+                StreamReader sr = new StreamReader(path);
+                //We should only need to read the first line of text
+                string line = sr.ReadLine();
+                TibzLog.Debug(line);
+                this.tempSave = line;
+                this.loadCurrentMap();
+                //if needed we do this to continue to read until you reach end of file
+                //while (line != null)
+                //{
+                //    TibzLog.Debug(line);
+                //    //Read the next line
+                //    line = sr.ReadLine();
+                //}
+                //close the file
+                sr.Close();
+                TibzLog.Debug("File Stream Closeds");
+
+
+
+            }
+            catch (Exception e)
+            {
+                TibzLog.Debug("File Read Error: \n" + e);
+            }
+        }
+    }
+}
+
+ 
\ No newline at end of file
diff --git a/Johnmagotchi/GameContent/Screens/Menu/BaseMapMenu.cs b/Johnmagotchi/GameContent/Screens/Menu/BaseMapMenu.cs
new file mode 100644
index 0000000..3ed5083
--- /dev/null
+++ b/Johnmagotchi/GameContent/Screens/Menu/BaseMapMenu.cs
@@ -0,0 +1,184 @@
+using Johnmagotchi.Core.tools;
+using Johnmagotchi.GameContent.Objects;
+using Johnmagotchi.Screen.BattleMapScreens;
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection.Metadata;
+using System.Text;
+using System.Threading.Tasks;
+using TibzGame.Core.ScreenManager;
+
+
+namespace Johnmagotchi.GameContent.Screens.Menu
+    {
+    public abstract class BaseMapMenu : GameScreen
+    {
+        protected GameScreen ParentGameScreen;
+        protected SpriteBatch spriteBatch;
+        public SpriteEffects currentSpriteEffects;
+
+        protected int xPos;
+        protected int yPos;
+
+        protected int xDrawOffset;
+        protected int yDrawOffset;
+
+        protected int SelectedIndex;
+        protected MenuOption[] CurrentOptions;
+
+        protected Texture2D button;
+        protected Texture2D buttonHighlight;
+        protected SpriteFont kemco;
+        protected SpriteFont pixsplit;
+        protected int screenQuadrant; // 1 - top left, 2 top right, 3 bottom left, 4 bottom right. if right, submenus push out left. if bottom, start drawing from bottom up
+
+        public BaseMapMenu(GameScreen parentScreen, int x, int y, int screenQuadrant)
+        {
+            ParentGameScreen = parentScreen;
+            xPos = x;
+            yPos = y;
+            this.screenQuadrant = screenQuadrant;
+            isUpdatePriority = true;
+            SelectedIndex = 0;
+
+            // Child class needs to init: 
+            // parent screen
+            // CurrentOptions List
+            // X & Y Draw Offsets
+
+        }
+
+        public override void Init()
+        {
+            spriteBatch = new SpriteBatch(screenManager.GraphicsDevice);
+            button = screenManager.contentRef.Load("Map-UI/test-menu-item-64-28");
+            buttonHighlight = screenManager.contentRef.Load("Map-UI/test-menu-item-64-28-selected");
+            //load fonts
+            kemco = screenManager.contentRef.Load("Fonts/Kemco-20");
+            pixsplit = screenManager.contentRef.Load("Fonts/PixelSplitter");
+            ChildInit();
+        }
+
+        public override void Update()
+        {
+
+            if (ScreenManager.inputs.isMouseMode)
+            {
+                //Handle Mouse Buttons
+                if (screenManager.inputs.mouseInput.leftClick.isJustPressed)
+                {
+                    screenManager.inputs.editorInputs.confirm.isJustPressed = true;
+                }
+                if (screenManager.inputs.mouseInput.rightClick.isJustPressed)
+                {
+                    screenManager.inputs.editorInputs.cancel.isJustPressed = true;
+                }
+                HandleMouseCursor();
+            }
+            else
+            {
+                if (screenManager.inputs.editorInputs.navUp.isJustPressed)
+                {
+                    SelectedIndex--;
+                    if (SelectedIndex < 0) { SelectedIndex = CurrentOptions.Length - 1; }
+                }
+                if (screenManager.inputs.editorInputs.navDown.isJustPressed)
+                {
+                    SelectedIndex++;
+                    if (SelectedIndex >= CurrentOptions.Length) { SelectedIndex = 0; }
+                }
+            }
+
+            if (screenManager.inputs.editorInputs.cancel.isJustPressed)
+            {
+                TibzLog.Debug("Removing screen");
+                screenManager.removeTopScreens(1); // remove this screen
+            }
+
+            //Child should implement what happens on confirm
+            ChildUpdate();
+        }
+
+        public abstract void ChildInit();
+        public abstract void ChildUpdate();
+        public override void Draw()
+        {
+            spriteBatch.Begin(SpriteSortMode.Deferred, null, SamplerState.PointClamp);
+
+            int yOffset = yDrawOffset;
+            if (screenQuadrant > 2)
+            { // adjust y offset so it starts a full length higher up
+
+            }
+
+            //------------------------- Draw boxes -----------------------------
+            for (int i = CurrentOptions.Length; i > 0; i--)
+            {
+                Texture2D buttonSprite = button;
+                if (i - 1 == SelectedIndex)
+                {
+                    buttonSprite = buttonHighlight;
+                }
+                // Box
+                Rectangle tileRect = screenManager.GetScaledRectangle(xPos - xDrawOffset, yPos - yOffset, 6400, 2800);
+                spriteBatch.Draw(
+                             buttonSprite, tileRect, null, Color.White, 0, new Vector2(0, 0),
+                             currentSpriteEffects, 1);
+
+                // increase offset for next item
+                yOffset += 2800;
+            }
+
+            // ------------------------- Draw text -----------------------------
+            yOffset = yDrawOffset;
+            int textOffsetX = 1000;
+            int textOffsetY = 1000;
+            for (int j = CurrentOptions.Length; j > 0; j--)
+            {
+                int i = j - 1;
+                //text
+                Vector2 position = new(screenManager.getScaledIntX(xPos - xDrawOffset + textOffsetX), screenManager.getScaledIntY(yPos - (yOffset - textOffsetY)));  // add 20 to each
+                Vector2 textRotationOrigin = new Vector2(0, 0);
+                spriteBatch.DrawString(kemco, CurrentOptions[i].OptionLabel, position, Color.Black, 0, textRotationOrigin, 00.75f, SpriteEffects.None, 1.0f);
+                // increase offset for next item
+                yOffset += 2800;
+            }
+
+            spriteBatch.End();
+        }
+        public override void Destroy()
+        {
+
+        }
+
+        private void HandleMouseCursor()
+        {
+            int x = screenManager.inputs.mouseInput.x;
+            int y = screenManager.inputs.mouseInput.y;
+            TibzLog.Debug("Mouse y -   " + y);
+
+
+
+            TibzLog.Debug("top bounds???  -  " + ScreenManager.getScaledIntY( yPos - yDrawOffset));
+
+            // screenManager.getScaledIntX(xPos - xDrawOffset + textOffsetX),
+            //TODO STILL WORKING O{N THIS 7/18/26
+
+            //screenManager.GetScaledRectangle(xPos - xDrawOffset, yPos - yOffset, 6400, 2800);
+            int yOffset = yDrawOffset;
+            for (int i = CurrentOptions.Length; i > 0; i--)
+            {
+                if (y < ScreenManager.getScaledIntY(yPos - yOffset))
+                {
+                    SelectedIndex = i-1;
+
+                    TibzLog.Debug("index set! " +  i);
+                }
+                yOffset += 2800;
+            }
+        }
+    }
+}
diff --git a/Johnmagotchi/GameContent/Screens/Menu/BattleMap/AfterMovementMenu.cs b/Johnmagotchi/GameContent/Screens/Menu/BattleMap/AfterMovementMenu.cs
new file mode 100644
index 0000000..4ff8b13
--- /dev/null
+++ b/Johnmagotchi/GameContent/Screens/Menu/BattleMap/AfterMovementMenu.cs
@@ -0,0 +1,109 @@
+using Johnmagotchi.Core.tools;
+using Johnmagotchi.GameContent.Screens.BattleMapScreens.BattleMapScreen;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Johnmagotchi.GameContent.Screens.Menu.BattleMap
+{
+    internal class AfterMovementMenu :BaseMapMenu
+    {
+        private BattleMapScreen BattleMapInstance;
+        public AfterMovementMenu(BattleMapScreen parentScreen, int x, int y, int screenQuadrant, bool isAttackAvailable) : base(parentScreen, x, y, screenQuadrant)
+        {
+            this.isUpdatePriority = true;
+            this.isDrawPriority = false;
+            BattleMapInstance = parentScreen;
+            if (isAttackAvailable)
+            {
+                CurrentOptions = new MenuOption[3];
+                CurrentOptions[0] = new MenuOption(MenuOption.MenuOptionType.ATTACK);
+                CurrentOptions[1] = new MenuOption(MenuOption.MenuOptionType.ITEM);
+                CurrentOptions[2] = new MenuOption(MenuOption.MenuOptionType.WAIT);
+            }
+            else {
+                CurrentOptions = new MenuOption[2];
+                CurrentOptions[0] = new MenuOption(MenuOption.MenuOptionType.ITEM);
+                CurrentOptions[1] = new MenuOption(MenuOption.MenuOptionType.WAIT);
+            }
+          
+            if (screenQuadrant == 1)
+            {
+                xDrawOffset = 7000;
+                yDrawOffset = -2800 * (CurrentOptions.Length - 1) - 300;
+            }
+            else if (screenQuadrant == 2)
+            {
+                xDrawOffset = -3800;
+                yDrawOffset = -2800 * (CurrentOptions.Length - 1) - 300;
+            }
+            else if (screenQuadrant == 3)
+            {
+                xDrawOffset = -3800;
+                yDrawOffset = 0;
+            }
+            else
+            {
+                xDrawOffset = 7000;
+                yDrawOffset = 0;
+            }
+        }
+        public override void ChildInit()
+        {
+            //  throw new NotImplementedException();
+        }
+
+        public override void ChildUpdate()
+        {
+            if (screenManager.inputs.editorInputs.confirm.isJustPressed)
+            {
+                int subX = xPos;
+                int subY = yPos;
+                if (screenQuadrant == 1)
+                {
+                    subX -= 800;
+                    subY += 800;
+                }
+                else if (screenQuadrant == 2)
+                {
+                    subX += 800;
+                    subY += 800;
+                }
+                else if (screenQuadrant == 3)
+                {
+                    subX += 800;
+                    subY -= ((CurrentOptions.Length - 3) * 2800) - 800;
+                }
+                else
+                {
+                    subX -= 800;
+                    subY -= ((CurrentOptions.Length - 3) * 2800) - 800;
+
+                }
+
+                if (CurrentOptions[SelectedIndex].OptionType == MenuOption.MenuOptionType.ATTACK)
+                {
+                    screenManager.removeTopScreens(1);
+                    BattleMapInstance.AfterMoveAttack();
+                }
+                if (CurrentOptions[SelectedIndex].OptionType == MenuOption.MenuOptionType.ITEM)
+                {
+                    screenManager.removeTopScreens(1);
+                    BattleMapInstance.AfterMoveItem();
+                }
+                if (CurrentOptions[SelectedIndex].OptionType == MenuOption.MenuOptionType.WAIT)
+                {             
+                    screenManager.removeTopScreens(1);  
+                    BattleMapInstance.AfterMoveWait();
+                }
+            }
+            if (screenManager.inputs.editorInputs.cancel.isJustPressed) {
+                screenManager.removeTopScreens(1);
+                BattleMapInstance.AfterMoveCancelled();
+            }
+
+        }
+    }
+}
diff --git a/Johnmagotchi/GameContent/Screens/Menu/BattleMap/BattleMapMenu.cs b/Johnmagotchi/GameContent/Screens/Menu/BattleMap/BattleMapMenu.cs
new file mode 100644
index 0000000..81f20e6
--- /dev/null
+++ b/Johnmagotchi/GameContent/Screens/Menu/BattleMap/BattleMapMenu.cs
@@ -0,0 +1,115 @@
+using Johnmagotchi.Core.tools;
+using Johnmagotchi.GameContent.Screens.BattleMapScreens.BattleMapScreen;
+using Johnmagotchi.GameContent.Screens.Menu.MapEditor;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Johnmagotchi.GameContent.Screens.Menu.BattleMap
+{
+    internal class BattleMapMenu : BaseMapMenu
+    {
+        private BattleMapScreen BattleMapInstance;
+        public BattleMapMenu(BattleMapScreen parentScreen, int x, int y, int screenQuadrant) : base(parentScreen, x, y, screenQuadrant)
+        {
+            BattleMapInstance = parentScreen;
+            CurrentOptions = new MenuOption[4];
+            CurrentOptions[0] = new MenuOption(MenuOption.MenuOptionType.DEBUG_RETURN_TO_EDITOR);
+            CurrentOptions[1] = new MenuOption(MenuOption.MenuOptionType.END_TURN);
+            CurrentOptions[2] = new MenuOption(MenuOption.MenuOptionType.EXPORT_MAP);
+          //  CurrentOptions[3] = new MenuOption(MenuOption.MenuOptionType.ENTER_BATTLE_SCREEN);
+            CurrentOptions[3] = new MenuOption(MenuOption.MenuOptionType.EXIT);
+            if (screenQuadrant == 1)
+            {
+                xDrawOffset = 7000;
+                yDrawOffset = -2800 * (CurrentOptions.Length - 1) - 300;
+            }
+            else if (screenQuadrant == 2)
+            {
+                xDrawOffset = -3800;
+                yDrawOffset = -2800 * (CurrentOptions.Length - 1) - 300;
+            }
+            else if (screenQuadrant == 3)
+            {
+                xDrawOffset = -3800;
+                yDrawOffset = 0;
+            }
+            else
+            {
+                xDrawOffset = 7000;
+                yDrawOffset = 0;
+            }
+        }
+
+        public override void ChildInit()
+        {
+          //  throw new NotImplementedException();
+        }
+
+        public override void ChildUpdate()
+        {
+            // throw new NotImplementedException();
+
+
+            if (screenManager.inputs.editorInputs.confirm.isJustPressed)
+            {
+                TibzLog.Debug("Menu Selected Option Type :{0}", CurrentOptions[SelectedIndex]);
+                int subX = xPos;
+                int subY = yPos;
+                if (screenQuadrant == 1)
+                {
+                    subX -= 800;
+                    subY += 800;
+                }
+                else if (screenQuadrant == 2)
+                {
+                    subX += 800;
+                    subY += 800;
+                }
+                else if (screenQuadrant == 3)
+                {
+                    subX += 800;
+                    subY -= ((CurrentOptions.Length - 3) * 2800) - 800;
+                }
+                else
+                {
+                    subX -= 800;
+                    subY -= ((CurrentOptions.Length - 3) * 2800) - 800;
+
+                }
+
+                if (CurrentOptions[SelectedIndex].OptionType == MenuOption.MenuOptionType.DEBUG_RETURN_TO_EDITOR)
+                {
+                      screenManager.removeTopScreens(2); // remove this screen and base screen
+                   // MapEditorInstance.SaveMap();
+                 //   screenManager.addScreen(new BattleMapScreen(MapEditorInstance.GetMap()));
+                }
+                if (CurrentOptions[SelectedIndex].OptionType == MenuOption.MenuOptionType.CHOOSE_NEW_TOOL)
+                {
+
+                //    screenManager.addScreen(new ToolSelectMenu(this, subX, subY, screenQuadrant));
+                }
+                if (CurrentOptions[SelectedIndex].OptionType == MenuOption.MenuOptionType.EXPORT_MAP)
+                {
+                  //  screenManager.addScreen(new SaveSlotSelect(this, subX, subY, screenQuadrant, SaveSlotSelected));
+                    // this would use the windows API to save, for now I am just going to use save slots bc I dont want to deal with it needing to be single threaded
+                    //SaveFileDialog saveFileDialog1 = new SaveFileDialog();
+                    //saveFileDialog1.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif";
+                    //saveFileDialog1.Title = "Save an Image File";
+                    //saveFileDialog1.ShowDialog();
+                }
+                if (CurrentOptions[SelectedIndex].OptionType == MenuOption.MenuOptionType.IMPORT_MAP)
+                {
+                  //  screenManager.addScreen(new SaveSlotSelect(this, subX, subY, screenQuadrant, LoadSlotSelected));
+                }
+                if (CurrentOptions[SelectedIndex].OptionType == MenuOption.MenuOptionType.EXIT) {
+                    screenManager.removeTopScreens(1); // remove this screen 
+                }
+            }
+
+
+        }
+     }
+}
diff --git a/Johnmagotchi/GameContent/Screens/Menu/MapEditor/MapEditorMenu.cs b/Johnmagotchi/GameContent/Screens/Menu/MapEditor/MapEditorMenu.cs
new file mode 100644
index 0000000..a9c5ca4
--- /dev/null
+++ b/Johnmagotchi/GameContent/Screens/Menu/MapEditor/MapEditorMenu.cs
@@ -0,0 +1,125 @@
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using Microsoft.Xna.Framework.Input;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using TibzGame.Core.Inputs;
+using TibzGame.Core.ScreenManager;
+
+using Johnmagotchi.GameContent.Objects;
+using System.Text.Json;
+using Johnmagotchi.Core.tools;
+using Johnmagotchi.GameContent.Screens.Menu;
+using Johnmagotchi.Screen.BattleMapScreens;
+using Johnmagotchi.GameContent.Screens.Menu.MapEditor;
+using System.Windows.Forms;
+using Johnmagotchi.GameContent.Screens.BattleMapScreens.BattleMapScreen;
+
+namespace Johnmagotchi.GameContent.Screens.Menu
+{
+    public class MapEditorMenu : BaseMapMenu
+    {
+        public MapEditorScreen MapEditorInstance;
+
+        public MapEditorMenu(MapEditorScreen parentScreen, int x, int y, int screenQuadrant) : base (parentScreen, x ,y ,screenQuadrant)
+        {
+            MapEditorInstance = parentScreen;
+            CurrentOptions = new MenuOption[5];
+            CurrentOptions[0] = new MenuOption(MenuOption.MenuOptionType.CHOOSE_NEW_TOOL);
+            CurrentOptions[1] = new MenuOption(MenuOption.MenuOptionType.IMPORT_MAP);
+            CurrentOptions[2] = new MenuOption(MenuOption.MenuOptionType.EXPORT_MAP);
+            CurrentOptions[3] = new MenuOption(MenuOption.MenuOptionType.ENTER_BATTLE_SCREEN);
+            CurrentOptions[4] = new MenuOption(MenuOption.MenuOptionType.EXIT);
+            if (screenQuadrant == 1)
+            {
+                xDrawOffset = 7000;
+                yDrawOffset = -2800 * (CurrentOptions.Length - 1) - 300;
+            }
+            else if (screenQuadrant == 2)
+            {
+                xDrawOffset = -3800;
+                yDrawOffset = -2800 * (CurrentOptions.Length - 1) - 300;
+            }
+            else if (screenQuadrant == 3)
+            {
+                xDrawOffset = -3800;
+                yDrawOffset = 0;
+            }
+            else
+            {
+                xDrawOffset = 7000;
+                yDrawOffset = 0;
+            }
+
+        }
+
+        public override void ChildInit()
+        {
+       
+        }
+        public override void ChildUpdate()
+        {
+            if (screenManager.inputs.editorInputs.confirm.isJustPressed)
+            {
+                TibzLog.Debug("Menu Selected Option Type :{0}", CurrentOptions[SelectedIndex]);
+                int subX = xPos;
+                int subY = yPos;
+                if (screenQuadrant == 1)
+                {
+                    subX -= 800;
+                    subY += 800;
+                }
+                else if (screenQuadrant == 2)
+                {
+                    subX += 800;
+                    subY += 800;
+                }
+                else if (screenQuadrant == 3)
+                {
+                    subX += 800;
+                    subY -= ((CurrentOptions.Length - 3) * 2800) - 800;
+                }
+                else
+                {
+                    subX -= 800;
+                    subY -= ((CurrentOptions.Length - 3) * 2800) - 800;
+
+                }
+
+                if (CurrentOptions[SelectedIndex].OptionType == MenuOption.MenuOptionType.ENTER_BATTLE_SCREEN)
+                {
+                    //    screenManager.removeTopScreens(1); // remove this screen
+                    MapEditorInstance.SaveMap();
+                    screenManager.addScreen(new BattleMapScreen(MapEditorInstance.GetMap()));
+                }
+                if (CurrentOptions[SelectedIndex].OptionType == MenuOption.MenuOptionType.CHOOSE_NEW_TOOL)
+                {
+           
+                    screenManager.addScreen(new ToolSelectMenu(this, subX,subY, screenQuadrant));
+                }
+                if (CurrentOptions[SelectedIndex].OptionType == MenuOption.MenuOptionType.EXPORT_MAP) {
+                    screenManager.addScreen(new SaveSlotSelect(this, subX, subY, screenQuadrant, SaveSlotSelected));
+                    // this would use the windows API to save, for now I am just going to use save slots bc I dont want to deal with it needing to be single threaded
+                    //SaveFileDialog saveFileDialog1 = new SaveFileDialog();
+                    //saveFileDialog1.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif";
+                    //saveFileDialog1.Title = "Save an Image File";
+                    //saveFileDialog1.ShowDialog();
+                }
+                if (CurrentOptions[SelectedIndex].OptionType == MenuOption.MenuOptionType.IMPORT_MAP)
+                {
+                    screenManager.addScreen(new SaveSlotSelect(this, subX, subY, screenQuadrant, LoadSlotSelected));              
+                }
+            }
+        }
+        public void SaveSlotSelected(int slot) {
+            MapEditorInstance.SaveMapAtSlot(slot);        
+        }
+        public void LoadSlotSelected(int slot) {        
+            MapEditorInstance.LoadMapAtSlot(slot);   
+        }
+    }
+}
\ No newline at end of file
diff --git a/Johnmagotchi/GameContent/Screens/Menu/MapEditor/SaveSlotSelect.cs b/Johnmagotchi/GameContent/Screens/Menu/MapEditor/SaveSlotSelect.cs
new file mode 100644
index 0000000..c199e35
--- /dev/null
+++ b/Johnmagotchi/GameContent/Screens/Menu/MapEditor/SaveSlotSelect.cs
@@ -0,0 +1,73 @@
+using Johnmagotchi.Core.tools;
+using Johnmagotchi.Screen.BattleMapScreens;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms.Design;
+using TibzGame.Core.ScreenManager;
+using static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox;
+
+namespace Johnmagotchi.GameContent.Screens.Menu.MapEditor
+{
+    internal class SaveSlotSelect : BaseMapMenu
+    {
+        private MapEditorMenu Parent;
+        private Action Callback;
+        public SaveSlotSelect(MapEditorMenu parentScreen, int x, int y, int screenQuadrant, Action callback) : base(parentScreen, x, y, screenQuadrant)
+        {
+            Parent = parentScreen;
+            Callback = callback;
+            CurrentOptions = new MenuOption[5];
+            CurrentOptions[0] = new MenuOption(MenuOption.MenuOptionType.SAVE_SLOT_0);
+            CurrentOptions[1] = new MenuOption(MenuOption.MenuOptionType.SAVE_SLOT_1);
+            CurrentOptions[2] = new MenuOption(MenuOption.MenuOptionType.SAVE_SLOT_2);
+            CurrentOptions[3] = new MenuOption(MenuOption.MenuOptionType.SAVE_SLOT_3);
+            CurrentOptions[4] = new MenuOption(MenuOption.MenuOptionType.SAVE_SLOT_4);
+            //CurrentOptions[5] = new MenuOption(MenuOption.MenuOptionType.SAVE_SLOT_5);
+            //CurrentOptions[6] = new MenuOption(MenuOption.MenuOptionType.SAVE_SLOT_6);
+            //CurrentOptions[7] = new MenuOption(MenuOption.MenuOptionType.SAVE_SLOT_7);
+            //CurrentOptions[8] = new MenuOption(MenuOption.MenuOptionType.SAVE_SLOT_8);
+            //CurrentOptions[9] = new MenuOption(MenuOption.MenuOptionType.SAVE_SLOT_9);
+            if (screenQuadrant == 1)
+            {
+                xDrawOffset = 7000;
+                yDrawOffset = -2800 * (CurrentOptions.Length - 1) - 300;
+            }
+            else if (screenQuadrant == 2)
+            {
+                xDrawOffset = -3800;
+                yDrawOffset = -2800 * (CurrentOptions.Length - 1) - 300;
+            }
+            else if (screenQuadrant == 3)
+            {
+                xDrawOffset = -3800;
+                yDrawOffset = 0;
+            }
+            else
+            {
+                xDrawOffset = 7000;
+                yDrawOffset = 0;
+            }
+        }
+
+        public override void ChildInit()
+        {
+           
+        }
+
+        public override void ChildUpdate()
+        {
+            if (screenManager.inputs.editorInputs.confirm.isJustPressed)
+            {
+                TibzLog.Debug("Closing Menu with Option Type :{0}", CurrentOptions[SelectedIndex]);
+
+                this.Callback(SelectedIndex); // index should just match 1 to 1 with slot
+              //  Parent.SaveSlotSelected(SelectedIndex); // index should just match 1 to 1 with slot
+
+                screenManager.removeTopScreens(2); // remove this screen & previous
+            }   
+        }
+    }
+}
diff --git a/Johnmagotchi/GameContent/Screens/Menu/MapEditor/ToolSelectMenu.cs b/Johnmagotchi/GameContent/Screens/Menu/MapEditor/ToolSelectMenu.cs
new file mode 100644
index 0000000..25bf20a
--- /dev/null
+++ b/Johnmagotchi/GameContent/Screens/Menu/MapEditor/ToolSelectMenu.cs
@@ -0,0 +1,68 @@
+using Johnmagotchi.Core.tools;
+using Johnmagotchi.Screen.BattleMapScreens;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Johnmagotchi.GameContent.Screens.Menu.MapEditor
+{
+    internal class ToolSelectMenu : BaseMapMenu
+    {
+        private MapEditorMenu Parent;
+        public ToolSelectMenu(MapEditorMenu parent, int x, int y , int q): base(parent.MapEditorInstance, x,y,q) {
+            Parent = parent;
+            CurrentOptions = new MenuOption[3];
+            CurrentOptions[0] = new MenuOption(MenuOption.MenuOptionType.EDITOR_TOOL_TERRAIN);
+            CurrentOptions[1] = new MenuOption(MenuOption.MenuOptionType.EDITOR_TOOL_PLACE_UNIT);
+            CurrentOptions[2] = new MenuOption(MenuOption.MenuOptionType.EDITOR_TOOL_DELETE_UNIT);
+            if (screenQuadrant == 1)
+            {
+                xDrawOffset = 7000;
+                yDrawOffset = -2800 * (CurrentOptions.Length - 1) - 300;
+            }
+            else if (screenQuadrant == 2)
+            {
+                xDrawOffset = -3800;
+                yDrawOffset = -2800 * (CurrentOptions.Length - 1) - 300;
+            }
+            else if (screenQuadrant == 3)
+            {
+                xDrawOffset = -3800;
+                yDrawOffset = 0;
+            }
+            else
+            {
+                xDrawOffset = 7000;
+                yDrawOffset = 0;
+            }
+        }
+        public override void ChildInit()
+        {
+           // throw new NotImplementedException();
+        }
+
+        public override void ChildUpdate()
+        {
+            if (screenManager.inputs.editorInputs.confirm.isJustPressed)
+            {
+                TibzLog.Debug("Closing Menu with Option Type :{0}", CurrentOptions[SelectedIndex]);
+                screenManager.removeTopScreens(2); // remove this screen and the previous menu screen
+                if (CurrentOptions[SelectedIndex].OptionType == MenuOption.MenuOptionType.EDITOR_TOOL_TERRAIN)
+                {
+                    //screenManager.addScreen(new BattleMapScreen(mapEditor.GetMap()));1
+                    Parent.MapEditorInstance.UpdateEditorTool(MapEditorScreen.EditorToolType.TILE_EDIT);
+                }
+                if (CurrentOptions[SelectedIndex].OptionType == MenuOption.MenuOptionType.EDITOR_TOOL_PLACE_UNIT)
+                {
+                    Parent.MapEditorInstance.UpdateEditorTool(MapEditorScreen.EditorToolType.UNIT_ADD);
+                }
+                if (CurrentOptions[SelectedIndex].OptionType == MenuOption.MenuOptionType.EDITOR_TOOL_DELETE_UNIT)
+                {
+                    Parent.MapEditorInstance.UpdateEditorTool(MapEditorScreen.EditorToolType.UNIT_DELETE);
+                }
+            }
+        }
+    }
+}
diff --git a/Johnmagotchi/GameContent/Screens/Menu/MenuOption.cs b/Johnmagotchi/GameContent/Screens/Menu/MenuOption.cs
new file mode 100644
index 0000000..f78a279
--- /dev/null
+++ b/Johnmagotchi/GameContent/Screens/Menu/MenuOption.cs
@@ -0,0 +1,102 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Johnmagotchi.GameContent.Screens.Menu
+{
+    public class MenuOption
+    {
+        public enum MenuOptionType
+        {
+            //Editor Menu
+            CHOOSE_NEW_TOOL,
+            ENTER_BATTLE_SCREEN,
+            IMPORT_MAP,
+            EXPORT_MAP,
+            EXIT,
+            //Editor Tool Select
+            EDITOR_TOOL_TERRAIN,
+            EDITOR_TOOL_PLACE_UNIT,
+            EDITOR_TOOL_DELETE_UNIT,
+            //Save Slot
+            SAVE_SLOT_0,
+            SAVE_SLOT_1,
+            SAVE_SLOT_2,
+            SAVE_SLOT_3,
+            SAVE_SLOT_4,
+            SAVE_SLOT_5,
+            SAVE_SLOT_6,
+            SAVE_SLOT_7,
+            SAVE_SLOT_8,
+            SAVE_SLOT_9,
+            //Battle Menu
+            DEBUG_RETURN_TO_EDITOR,
+            END_TURN,
+            //After Movement Action Menu
+            ATTACK,
+            ITEM,
+            WAIT,
+
+            // Unit End Movement
+        }
+        public string OptionLabel;
+        public MenuOptionType OptionType;
+
+        public MenuOption(MenuOptionType type) { 
+        this.OptionType = type;
+        this.OptionLabel = GetMenuString(type);
+        }
+        public static string GetMenuString(MenuOptionType type) {
+            switch (type) {
+                //Editor Menu
+                case MenuOptionType.CHOOSE_NEW_TOOL:
+                    return "Tools";
+                case MenuOptionType.ENTER_BATTLE_SCREEN:
+                    return "Battle";
+                case MenuOptionType.IMPORT_MAP:
+                    return "Load";
+                case MenuOptionType.EXPORT_MAP:
+                    return "Save";
+                case MenuOptionType.EXIT:
+                    return "Exit";
+                //Editor tool select
+                case MenuOptionType.EDITOR_TOOL_TERRAIN:
+                    return "Tiles";
+                case MenuOptionType.EDITOR_TOOL_PLACE_UNIT:
+                    return "Units";
+                case MenuOptionType.EDITOR_TOOL_DELETE_UNIT:
+                    return "Delete";
+                // Save Slots 
+                case MenuOptionType.SAVE_SLOT_0:
+                case MenuOptionType.SAVE_SLOT_1:
+                case MenuOptionType.SAVE_SLOT_2:
+                case MenuOptionType.SAVE_SLOT_3:
+                case MenuOptionType.SAVE_SLOT_4:
+                case MenuOptionType.SAVE_SLOT_5:
+                case MenuOptionType.SAVE_SLOT_6:
+                case MenuOptionType.SAVE_SLOT_7:
+                case MenuOptionType.SAVE_SLOT_8:
+                case MenuOptionType.SAVE_SLOT_9:
+                    return "Slot " + (type - MenuOptionType.SAVE_SLOT_0 );
+                case MenuOptionType.DEBUG_RETURN_TO_EDITOR:
+                    return "Editor";
+
+                case MenuOptionType.END_TURN:
+                    return "End Turn";
+
+                case MenuOptionType.ATTACK:
+                    return "Attack";
+                case MenuOptionType.ITEM:
+                    return "Items";
+                case MenuOptionType.WAIT:
+                    return "Wait";
+
+                default:
+                    return "";
+
+            }
+        }
+    }
+}
diff --git a/Johnmagotchi/GameContent/Screens/titleScreen.cs b/Johnmagotchi/GameContent/Screens/titleScreen.cs
new file mode 100644
index 0000000..04a23a6
--- /dev/null
+++ b/Johnmagotchi/GameContent/Screens/titleScreen.cs
@@ -0,0 +1,43 @@
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using TibzGame.Core.ScreenManager;
+
+namespace Johnmagotchi.Screen
+{
+    internal class titleScreen : GameScreen
+    {
+        public override void Init()
+        {
+
+        }
+    
+
+        public override void Draw()
+        {
+            throw new NotImplementedException();
+        }
+
+       
+
+        public override void Update()
+        {
+           if ( screenManager.inputs.mouseInput.y > 0 &&
+                screenManager.inputs.mouseInput.y < 1280 &&
+                screenManager.inputs.mouseInput.x > 0 && 
+                screenManager.inputs.mouseInput.x < 720 &&
+                screenManager.inputs.mouseInput.leftClick.isJustPressed)
+            {
+                // screenManager.addScreen(new MainGameScreen());
+            }
+        }
+
+        public override void Destroy()
+        {
+
+        }
+    }
+}
diff --git a/Johnmagotchi/Icon.bmp b/Johnmagotchi/Icon.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..2b481653e241818d2894e4ef33234eaff9aad701
GIT binary patch
literal 262282
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
RJoIeLznU7AhJ`o~_y6Yy51#-4

literal 0
HcmV?d00001

diff --git a/Johnmagotchi/Johnmagotchi.cs b/Johnmagotchi/Johnmagotchi.cs
new file mode 100644
index 0000000..6d5781a
--- /dev/null
+++ b/Johnmagotchi/Johnmagotchi.cs
@@ -0,0 +1,84 @@
+using Johnmagotchi.Screen.BattleMapScreens;
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Content;
+using Microsoft.Xna.Framework.Graphics;
+using Microsoft.Xna.Framework.Input;
+using TibzGame.Core.Inputs;
+using TibzGame.Core.ScreenManager;
+
+namespace Johnmagotchi
+{
+    public class Johnmagotchi : Game
+    {
+        public GraphicsDeviceManager graphics;
+        private SpriteBatch _spriteBatch;
+        private ScreenManager _screenManager;
+        public InputManager inputManager;
+        public ContentManager contentRef;
+
+        public MapEditorScreen gameScrn;
+
+        public Johnmagotchi()
+        {
+            contentRef = Content;
+            graphics = new GraphicsDeviceManager(this);
+            inputManager = new InputManager();
+            _screenManager = new ScreenManager(this, ref graphics,  ref contentRef, ref inputManager); // pass a ref to gfx for screen size changes
+           
+            Content.RootDirectory = "Content";
+            IsMouseVisible = true;
+           
+        }
+
+        protected override void Initialize()
+        {
+            // TODO: Add your initialization logic here
+
+            base.Initialize();
+            Components.Add(_screenManager);
+
+            //_screenManager.setWindowSize(1920,1080);
+            //_screenManager.setFullScreen(true);
+
+            _screenManager.setWindowSize(1280, 720); // 720p
+            //_screenManager.setFullScreen(false);
+
+            // _screenManager.setWindowSize(800, 800); // 4:3 
+            // _screenManager.setWindowSize(640, 480); // 4:3 
+            // _screenManager.setWindowSize(1440, 900); // some weird mac size
+
+
+            gameScrn = new MapEditorScreen();
+            _screenManager.addScreen(gameScrn);
+          
+        }
+
+        protected override void LoadContent()
+        {
+            _spriteBatch = new SpriteBatch(GraphicsDevice);
+
+            // TODO: use this.Content to load your game content here
+        }
+
+        protected override void Update(GameTime gameTime)
+        {
+            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
+                Exit();
+
+            inputManager.getInputs();
+
+            // TODO: Add your update logic here
+
+            base.Update(gameTime);
+        }
+
+        protected override void Draw(GameTime gameTime)
+        {
+            GraphicsDevice.Clear(Color.CornflowerBlue);
+
+            // TODO: Add your drawing code here
+
+            base.Draw(gameTime);
+        }
+    }
+}
diff --git a/Johnmagotchi/Johnmagotchi.csproj b/Johnmagotchi/Johnmagotchi.csproj
new file mode 100644
index 0000000..958fcc5
--- /dev/null
+++ b/Johnmagotchi/Johnmagotchi.csproj
@@ -0,0 +1,45 @@
+
+  
+    WinExe
+    net6.0-windows
+    true
+    Major
+    false
+    false
+  
+  
+    app.manifest
+    Icon.ico
+  
+  
+    
+    
+    
+  
+  
+    
+  
+  
+    
+      tlbimp
+      4
+      2
+      215d64d2-031c-33c7-96e3-61794cd1ee61
+    
+  
+  
+    
+    
+  
+  
+    
+    
+  
+  
+    
+  
+  
+    
+    
+  
+
\ No newline at end of file
diff --git a/Johnmagotchi/Program.cs b/Johnmagotchi/Program.cs
new file mode 100644
index 0000000..ed41ab1
--- /dev/null
+++ b/Johnmagotchi/Program.cs
@@ -0,0 +1,3 @@
+
+using var game = new Johnmagotchi.Johnmagotchi();
+game.Run();
diff --git a/Johnmagotchi/app.manifest b/Johnmagotchi/app.manifest
new file mode 100644
index 0000000..8d9121f
--- /dev/null
+++ b/Johnmagotchi/app.manifest
@@ -0,0 +1,43 @@
+
+
+  
+  
+    
+      
+        
+      
+    
+  
+
+  
+    
+      
+
+      
+      
+
+      
+      
+
+      
+      
+
+      
+      
+
+      
+      
+
+    
+  
+
+  
+    
+      true/pm
+      permonitorv2,permonitor
+    
+  
+
+
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..9842da2
--- /dev/null
+++ b/README.md
@@ -0,0 +1,7 @@
+This is a project I made for Monogame Jam 5.
+
+It is a quick little tamagatchi- like game, made to fit the theme of "John". 
+
+If you follow the monogame quickstart guides it should be fairly straightforward to load this project after that. 
+It was made with VS community 2022 and the most recent release of monogame as of dec 2023.
+https://docs.monogame.net/articles/getting_started/0_getting_started.html