From c737089e7fa487aac172b6c831e838a3f87508e4 Mon Sep 17 00:00:00 2001 From: Lev Date: Sun, 18 Aug 2024 15:52:35 +0300 Subject: [PATCH 01/10] fix merge bags --- .../GameManagers/NetworkManager/ClientNetworkManager.cs | 6 +++--- .../GameManagers/NetworkManager/ServerNetworkManager.cs | 6 +++--- ZoFo/GameCore/Server.cs | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs b/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs index 6f58b5e..f75fb9a 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs @@ -98,7 +98,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager public static IPAddress GetIp() { - string hostName = Dns.GetHostName(); // Retrive the Name of HOST + /*string hostName = Dns.GetHostName(); // Retrive the Name of HOST var ipList = Dns.GetHostByName(hostName).AddressList; foreach (var ip in ipList) { @@ -106,8 +106,8 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager { return ip; } - } - return IPAddress.Loopback; + }*/ + return IPAddress.Parse("127.0.0.1"); } //поток 2 diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs b/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs index 98b93b6..ba4b981 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs @@ -52,7 +52,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager /// public static IPAddress GetIp() { - string hostName = Dns.GetHostName(); // Retrive the Name of HOST + /*string hostName = Dns.GetHostName(); // Retrive the Name of HOST var ipList = Dns.GetHostByName(hostName).AddressList; foreach (var ip in ipList) { @@ -60,8 +60,8 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager { return ip; } - } - return IPAddress.Loopback; + }*/ + return IPAddress.Parse("127.0.0.1"); } /// diff --git a/ZoFo/GameCore/Server.cs b/ZoFo/GameCore/Server.cs index 329763c..dbbfa94 100644 --- a/ZoFo/GameCore/Server.cs +++ b/ZoFo/GameCore/Server.cs @@ -127,7 +127,7 @@ namespace ZoFo.GameCore players = new List(); new MapManager().LoadMap(); - AppManager.Instance.server.RegisterGameObject(new EntittyForAnimationTests(new Vector2(0, 0))); + //AppManager.Instance.server.RegisterGameObject(new EntittyForAnimationTests(new Vector2(0, 0))); AppManager.Instance.server.RegisterGameObject(new Player(new Vector2(740, 140))); AppManager.Instance.server.RegisterGameObject(new Zombie(new Vector2(1000, 1000))); AppManager.Instance.server.RegisterGameObject(new Ammo(new Vector2(140, 440))); From 7325f9d308c490574cad2a918f2b522df508b9ba Mon Sep 17 00:00:00 2001 From: Kaktus200020 Date: Sun, 18 Aug 2024 16:54:40 +0300 Subject: [PATCH 02/10] addRockAndBuildings --- ZoFo/Content/MapData/MapSession.tiled-session | 23 +- ZoFo/Content/MapData/TileMaps/main.tmj | 1052 ++++++++++++++++- 2 files changed, 1060 insertions(+), 15 deletions(-) diff --git a/ZoFo/Content/MapData/MapSession.tiled-session b/ZoFo/Content/MapData/MapSession.tiled-session index e679791..d0db47c 100644 --- a/ZoFo/Content/MapData/MapSession.tiled-session +++ b/ZoFo/Content/MapData/MapSession.tiled-session @@ -5,20 +5,20 @@ }, "activeFile": "TileMaps/main.tmj", "expandedProjectPaths": [ + ".", "TileSets", - "TileMaps", - "." + "TileMaps" ], "fileStates": { "TileMaps/TileSets/TileSet 1.tsj": { "scaleInDock": 1 }, "TileMaps/main.tmj": { - "scale": 0.5, + "scale": 0.33, "selectedLayer": 1, "viewCenter": { - "x": 895, - "y": 270 + "x": 1010.6060606060606, + "y": 553.0303030303031 } }, "TileSets/CollisionTileSet.tsj": { @@ -29,25 +29,30 @@ "scaleInDock": 1, "scaleInEditor": 1.5 }, + "TileSets/TilesetNature.tsj": { + "scaleInDock": 1 + }, "TileSets/WallSet.tsj": { "scaleInDock": 1, "scaleInEditor": 1 + }, + "TileSets/tileset 1 collision.tsj": { + "scaleInDock": 1 } }, "last.imagePath": "D:/C#/Я смотрел ваши ХАКАТОНЫ/ZoFo/ZoFo/Content/Textures/TileSetImages", "openFiles": [ "TileSets/TileSet 1.tsj", - "TileMaps/main.tmj", - "TileSets/CollisionTileSet.tsj" + "TileMaps/main.tmj" ], "project": "MapSession.tiled-project", "recentFiles": [ + "TileSets/TileSet 1.tsj", "TileMaps/main.tmj", "TileSets/CollisionTileSet.tsj", - "TileSets/TileSet 1.tsj", "TileSets/WallSet.tsj" ], - "stampsFolder": "D:/C#/Я смотрел ваши ХАКАТОНЫ/ZoFo/ZoFo/Content/MapData/TileStamps", + "stampsFolder": "C:/Users/artem/source/repos/ZoFo/ZoFo/Content/MapData/TileStamps", "tileset.lastUsedFormat": "json", "tileset.margin": 0, "tileset.spacing": 0, diff --git a/ZoFo/Content/MapData/TileMaps/main.tmj b/ZoFo/Content/MapData/TileMaps/main.tmj index 1f5921c..136574c 100644 --- a/ZoFo/Content/MapData/TileMaps/main.tmj +++ b/ZoFo/Content/MapData/TileMaps/main.tmj @@ -1076,16 +1076,1052 @@ "y":0 }, { - "chunks":[], - "height":80, + "chunks":[ + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1074, 1075, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1098, 1099, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1122, 1123, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1068, 1069, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1092, 1093, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1116, 1117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1140, 1141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1074, 1075, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":16, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1144, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":32, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1018, 1019, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1042, 1043, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 573, 574, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, 594, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, 614, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":48, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1074, 1075, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1098, 1099, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1122, 1123, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 575, 576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 595, 596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 615, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1068, 1069, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":64, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1116, 1117, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1140, 1141, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":80, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 650, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1074, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 584, 585, 586, 0, 0, 1098, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 604, 605, 606, 0, 0, 1122, + 0, 0, 0, 0, 0, 650, 651, 652, 0, 0, 624, 625, 626, 0, 0, 0, + 0, 0, 0, 0, 0, 670, 671, 672, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1143, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":96, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 651, 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 671, 672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1075, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1099, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1044, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":112, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1144, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":0, + "y":16 + }, + { + "data":[0, 1098, 1099, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1122, 1123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1068, 1069, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1092, 1093, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":16, + "y":16 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1068, 1069, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1092, 1093, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":32, + "y":16 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1018, 1019, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1042, 1043, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":48, + "y":16 + }, + { + "data":[0, 0, 0, 1092, 1093, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1018, 1019, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1042, 1043, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1068, 1069, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1092, 1093, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":64, + "y":16 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1068, 1069, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1092, 1093, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1074, 1075, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1098, 1099, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1122, 1123, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 650, 651, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, 671, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":80, + "y":16 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1143, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1070, 1071, 1072, 1073, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1094, 1095, 1096, 1097, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1118, 1119, 1120, 1121, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":96, + "y":16 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1044, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 577, 578, 579, 580, 0, 1044, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 597, 598, 599, 600, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 617, 618, 619, 620, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":112, + "y":16 + }, + + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 945, 946, 947, 948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 969, 970, 971, 972, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 993, 994, 995, 996, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1068, 1069, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1092, 1093, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1074, 1075, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1098, 1099, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1122, 1123, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1116, 1117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":0, + "y":32 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":16, + "y":32 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1018, 1019, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1042, 1043, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1068, 1069, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1092, 1093, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1143, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":32, + "y":32 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1068, 1069, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1092, 1093, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1018, 1019, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1042, 1043, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1144, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1144, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":48, + "y":32 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1074, 1075, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1098, 1099, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1122, 1123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1143, 0, 0, 0, 0, 0, 0, 0, 1116, 1117, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1140, 1141, 0, 0], + "height":16, + "width":16, + "x":64, + "y":32 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1068, 1069, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1018, + 0, 0, 0, 0, 1092, 1093, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1042, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1116, 1117, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1140, 1141, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":80, + "y":32 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1019, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1043, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1074, 1075, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1098, 1099, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1122, 1123, 0, 0, 0, 1068], + "height":16, + "width":16, + "x":96, + "y":32 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1142, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1044, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1069, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":112, + "y":32 + }, + { + "data":[0, 0, 0, 1140, 1141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":0, + "y":48 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1144, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, 582, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 602, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 621, 622, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":16, + "y":48 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 584, 585, 586, 0, 0, 0, 577, 578, 579, 580, 0, 0, 0, 0, 0, + 0, 604, 605, 606, 0, 0, 0, 597, 598, 599, 600, 0, 0, 0, 0, 0, + 0, 624, 625, 626, 0, 0, 0, 617, 618, 619, 620, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 573, 574, 575, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, 594, 595, + 583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, 614, 615, + 603, 0, 0, 0, 0, 0, 0, 1144, 0, 0, 0, 0, 0, 0, 0, 0, + 623, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":32, + "y":48 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1070, 1071, 1072, 1073, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1094, 1095, 1096, 1097, 0, 0, 0, 0, 0, + 576, 0, 0, 0, 0, 0, 0, 1118, 1119, 1120, 1121, 0, 0, 0, 0, 0, + 596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1068, 1069, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1092, 1093, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":48, + "y":48 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 650, 651, 652, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":64, + "y":48 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1092, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 945, 946, 947, 948, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 969, 970, 971, 972, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 993, 994, 995, 996, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1144, 0, 0, 0, 1070, 1071, 1072, 1073, 0, 0, 0], + "height":16, + "width":16, + "x":96, + "y":48 + }, + { + "data":[1093, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1044, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, 582, 583, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 602, 603, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 621, 622, 623, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":112, + "y":48 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1143, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1144, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1018, 1019, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1042, 1043, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":0, + "y":64 + }, + + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1143, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1144, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1074, 1075, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1098, 1099, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1122, 1123, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":16, + "y":64 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1068, 1069, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1092, 1093, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 945, 946, 947, 948, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 969, 970, 971, 972, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 993, 994, 995, 996, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":32, + "y":64 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1018, 1019, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1042, 1043, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":48, + "y":64 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 670, 671, 672, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, 582, 583, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 602, 603, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 621, 622, 623, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1074, 1075, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":64, + "y":64 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1116, 1117, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1140, 1141, 0, 0], + "height":16, + "width":16, + "x":80, + "y":64 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 1094, 1095, 1096, 1097, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1118, 1119, 1120, 1121, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1074, 1075, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1098, 1099, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1122, 1123, 0, 0, 0, 0, 0, 0, 0, 1144, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":96, + "y":64 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1068, 1069, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1044, 0, 1092, 1093, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":112, + "y":64 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 584, 585, 586, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 604, 605, 606, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 624, 625, 626, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1018, 1019, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1042, 1043, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":0, + "y":80 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":16, + "y":80 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 577, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 597, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 617, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1018, 1019, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1042, 1043, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":32, + "y":80 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 578, 579, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 598, 599, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 618, 619, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":48, + "y":80 + }, + { + "data":[1098, 1099, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1122, 1123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1074, 1075, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1098, 1099, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1074, 1075, 0, 1122, 1123, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1098, 1099, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1122, 1123, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":64, + "y":80 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1116, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1140, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":80, + "y":80 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1116, 1117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1140, 1141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1144, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":96, + "y":80 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1074, 1075, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1098, 1099, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1122, 1123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 584, 585, 586, 0, 0, 0, 0, 0, 0, 1074, 1075, 0, 0, 0, + 0, 0, 604, 605, 606, 0, 0, 0, 0, 0, 0, 1098, 1099, 0, 0, 0, + 0, 0, 624, 625, 626, 0, 0, 0, 0, 0, 0, 1122, 1123, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":112, + "y":80 + }], + "height":144, "id":5, "name":"Collidable", "opacity":1, - "startx":0, - "starty":0, + "startx":-16, + "starty":-16, "type":"tilelayer", "visible":true, - "width":64, + "width":208, "x":0, "y":0 }, @@ -1115,7 +2151,7 @@ "nextobjectid":1, "orientation":"orthogonal", "renderorder":"right-down", - "tiledversion":"1.10.2", + "tiledversion":"1.11.0", "tileheight":16, "tilesets":[ { @@ -1125,6 +2161,10 @@ { "firstgid":573, "source":"..\/TileSets\/tileset 1 collision.tsj" + }, + { + "firstgid":813, + "source":"..\/TileSets\/TilesetNature.tsj" }], "tilewidth":16, "type":"map", From c9c281a4be18e738d9fa246489e96f0f545a06d6 Mon Sep 17 00:00:00 2001 From: SergoDobro Date: Sun, 18 Aug 2024 22:51:47 +0300 Subject: [PATCH 03/10] Object delete allowed + minor collision fix --- ZoFo/GameCore/Client.cs | 24 ++- .../CollisionManager/CollisionManager.cs | 146 +++++++++++------- .../Entities/LivingEntities/Enemies/Zombie.cs | 2 +- .../Entities/LivingEntities/LivingEntity.cs | 17 +- .../Entities/LivingEntities/Player/Player.cs | 13 +- ZoFo/GameCore/Server.cs | 12 +- 6 files changed, 141 insertions(+), 73 deletions(-) diff --git a/ZoFo/GameCore/Client.cs b/ZoFo/GameCore/Client.cs index 47fdc88..25ae68c 100644 --- a/ZoFo/GameCore/Client.cs +++ b/ZoFo/GameCore/Client.cs @@ -167,14 +167,22 @@ namespace ZoFo.GameCore { var ent = FindEntityById(update.IdEntity); - ent.position = (update as UpdatePosition).NewPosition; + ent.position = (update as UpdatePosition).NewPosition; } else if (update is UpdateAnimation) + { + var ent = FindEntityById(update.IdEntity); + if (ent != null) + ((ent as Entity).graphicsComponent as AnimatedGraphicsComponent).StartAnimation((update as UpdateAnimation).animationId); + //DebugHUD.Instance.Log("new Animation " + ent.position); + } + else if (update is UpdateGameObjectDeleted) { var ent = FindEntityById(update.IdEntity); - ((ent as Entity).graphicsComponent as AnimatedGraphicsComponent).StartAnimation((update as UpdateAnimation).animationId); - DebugHUD.Instance.Log("new Animation " + ent.position); + if (ent != null) + DeleteObject(ent); + } } @@ -193,6 +201,16 @@ namespace ZoFo.GameCore } return null; } + public void DeleteObject(Entity entity) + { + + if (gameObjects.Contains(entity)) + gameObjects.Remove(entity); + //if (entities.Contains(entity)) + // entities.Remove(entity); + if (players.Contains(entity)) + players.Remove(entity as Player); + } } } \ No newline at end of file diff --git a/ZoFo/GameCore/GameManagers/CollisionManager/CollisionManager.cs b/ZoFo/GameCore/GameManagers/CollisionManager/CollisionManager.cs index f1acc92..fc9ee75 100644 --- a/ZoFo/GameCore/GameManagers/CollisionManager/CollisionManager.cs +++ b/ZoFo/GameCore/GameManagers/CollisionManager/CollisionManager.cs @@ -12,7 +12,7 @@ using ZoFo.GameCore.GameObjects.Entities; using ZoFo.GameCore.GameObjects.Entities.LivingEntities; using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient; using ZoFo.GameCore.Graphics; -using ZoFo.GameCore.GameObjects.Entities.LivingEntities.Player; +using ZoFo.GameCore.GameObjects.Entities.LivingEntities.Player; namespace ZoFo.GameCore.GameManagers.CollisionManager { @@ -26,107 +26,123 @@ namespace ZoFo.GameCore.GameManagers.CollisionManager //чекаем коллизии в листе + + /// + /// минимальный накоп изменения перед перевдижением + /// + const float minimalValueToChange = 4; public void CheckComponentCollision(CollisionComponent componentOfEntity) { var entity = componentOfEntity.gameObject as LivingEntity; //for (int i = 0; i < ObjectsWithCollisions.Count; i++) //{ var currentRect = entity.collisionComponent.stopRectangle;//задаём РЕК - currentRect.X+=(int)entity.position.X; - currentRect.Y+=(int)entity.position.Y; + currentRect.X += (int)entity.position.X; + currentRect.Y += (int)entity.position.Y; var newRect = currentRect; // задаём значение старого РЕК новому РЕК - var collidedX = false; // соприкосновение - var tryingRectX = currentRect;//переменная для попытки перемещения по X - - tryingRectX.Offset((int)(entity.velocity.X), 0);//задаём значения для tryingRectX по X и по Y - - foreach (var item in ObjectsWithCollisions)//фильтрация + if (Math.Abs((int)entity.velocity.X) > minimalValueToChange ) //TODO { - if (item == componentOfEntity) continue; - - Rectangle rectChecking = item.stopRectangle.SetOrigin(item.gameObject.position); - if (Math.Abs(item.gameObject.position.X - componentOfEntity.gameObject.position.X) < 550 - && Math.Abs(item.gameObject.position.Y - componentOfEntity.gameObject.position.Y) < 550 - && tryingRectX.Intersects(rectChecking)) + var collidedX = false; // соприкосновение + var tryingRectX = currentRect;//переменная для попытки перемещения по X + tryingRectX.Offset((int)(entity.velocity.X), 0);//задаём значения для tryingRectX по X и по Y + + foreach (var item in ObjectsWithCollisions)//фильтрация { - collidedX = true;// меняем значение соприкосновения на true - //entity.OnCollision(item);//подписываем entity на ивент коллизии - item.OnCollisionWithObject(entity); - entity.collisionComponent.OnCollisionWithObject(item.gameObject); - break;// выход + if (item == componentOfEntity) continue; + + Rectangle rectChecking = item.stopRectangle.SetOrigin(item.gameObject.position); + if (Math.Abs(item.gameObject.position.X - componentOfEntity.gameObject.position.X) < 550 + && Math.Abs(item.gameObject.position.Y - componentOfEntity.gameObject.position.Y) < 550 + && tryingRectX.Intersects(rectChecking)) + + { + collidedX = true;// меняем значение соприкосновения на true + //entity.OnCollision(item);//подписываем entity на ивент коллизии + item.OnCollisionWithObject(entity); + entity.collisionComponent.OnCollisionWithObject(item.gameObject); + break;// выход + } } - } - if (collidedX)// срабатывает, если перемещение блокируется - { - entity.velocity.X = 0;// задаём значение смещения entity на 0 - } - else - { - entity.position.X += entity.velocity.X; //update player position - newRect.X = tryingRectX.X;//значение по X для нового РЕК приравниваем к значению испытуемого РЕК - } + if (collidedX)// срабатывает, если перемещение блокируется + { + entity.velocity.X = 0;// задаём значение смещения entity на 0 + } + else + { + entity.position.X += entity.velocity.X; //update player position + newRect.X = tryingRectX.X;//значение по X для нового РЕК приравниваем к значению испытуемого РЕК + } + entity.velocity.X = 0; + } //==ПОВТОРЯЕМ ТОЖЕ САМОЕ ДЛЯ Y== var collidedY = false; // соприкосновение var tryingRectY = currentRect;//переменная для попытки перемещения по X - tryingRectY.Offset(new Point(0, (int)entity.velocity.Y));//задаём значения для tryingRectX по X и по Y - - foreach (var item in ObjectsWithCollisions)//фильтрация + if (Math.Abs((int)entity.velocity.Y)> minimalValueToChange) //TODO { - if (item == componentOfEntity) continue; - Rectangle rectChecking = item.stopRectangle.SetOrigin(item.gameObject.position); - if (Math.Abs(item.gameObject.position.X - componentOfEntity.gameObject.position.X) < 550 - && Math.Abs(item.gameObject.position.Y - componentOfEntity.gameObject.position.Y) < 550 - && tryingRectY.Intersects(rectChecking)) + tryingRectY.Offset(new Point(0, (int)entity.velocity.Y));//задаём значения для tryingRectX по X и по Y + + foreach (var item in ObjectsWithCollisions)//фильтрация { - collidedY = true;// меняем значение соприкосновения на true - entity.OnCollision(item);//подписываем entity на ивент коллизии + if (item == componentOfEntity) continue; + Rectangle rectChecking = item.stopRectangle.SetOrigin(item.gameObject.position); + if (Math.Abs(item.gameObject.position.X - componentOfEntity.gameObject.position.X) < 550 + && Math.Abs(item.gameObject.position.Y - componentOfEntity.gameObject.position.Y) < 550 + && tryingRectY.Intersects(rectChecking)) - break;// выход + { + collidedY = true;// меняем значение соприкосновения на true + entity.OnCollision(item);//подписываем entity на ивент коллизии + + break;// выход + } } + + if (collidedY)// срабатывает, если перемещение блокируется + { + entity.velocity.Y = 0;// задаём значение смещения entity на 0 + } + else + { + entity.position.Y += entity.velocity.Y; + newRect.Y = tryingRectY.Y;//значение по X для нового РЕК приравниваем к значению испытуемого РЕК + } + entity.velocity.Y = 0; } - if (collidedY)// срабатывает, если перемещение блокируется - { - entity.velocity.Y = 0;// задаём значение смещения entity на 0 - } - else - { - entity.position.Y += entity.velocity.Y; - newRect.Y = tryingRectY.Y;//значение по X для нового РЕК приравниваем к значению испытуемого РЕК - } - + entity.graphicsComponent.ObjectDrawRectangle.X = (int)entity.position.X; entity.graphicsComponent.ObjectDrawRectangle.Y = (int)entity.position.Y; AppManager.Instance.server.AddData(new UpdatePosition() { NewPosition = entity.position, IdEntity = entity.Id }); AppManager.Instance.debugHud.Set("testPos", entity.position.ToString()); //TODO remove - entity.velocity = Vector2.Zero; } public void UpdateTriggerZones(Player player) { - var entity = player as LivingEntity; + var entity = player as LivingEntity; var currentRect = entity.collisionComponent.stopRectangle;//задаём РЕК currentRect.X += (int)entity.position.X; currentRect.Y += (int)entity.position.Y; - - - foreach (var item in ObjectsWithTriggers)//фильтрация + + for (int i = 0; i < ObjectsWithTriggers.Count; i++) { - if (item.triggerRectangle.SetOrigin(item.gameObject.position).Intersects(currentRect)) + int c = ObjectsWithTriggers.Count; + + if (ObjectsWithTriggers[i].triggerRectangle.SetOrigin(ObjectsWithTriggers[i].gameObject.position).Intersects(currentRect)) { - item.PlayerInZone(player); + ObjectsWithTriggers[i].PlayerInZone(player); } + i -= c - ObjectsWithTriggers.Count; } } @@ -146,7 +162,7 @@ namespace ZoFo.GameCore.GameManagers.CollisionManager public CollisionManager() - { + { EntitiesWithMovements = new List(); ObjectsWithCollisions = new List(); ObjectsWithTriggers = new List(); @@ -163,6 +179,18 @@ namespace ZoFo.GameCore.GameManagers.CollisionManager EntitiesWithMovements.Add(component); } } + public void Deregister(CollisionComponent component) + { + if (ObjectsWithCollisions.Contains(component)) + ObjectsWithCollisions.Remove(component); + if (ObjectsWithTriggers.Contains(component)) + ObjectsWithTriggers.Remove(component); + if (component.gameObject is LivingEntity) + { + if (EntitiesWithMovements.Contains(component)) + EntitiesWithMovements.Remove(component); + } + } public Player[] GetPlayersInZone(Rectangle rectangle) { diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs index 4e2ce66..7741cee 100644 --- a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs @@ -25,7 +25,7 @@ namespace ZoFo.GameCore.GameObjects.Entities.LivingEntities.Enemies Vector2 duration = Vector2.Normalize( AppManager.Instance.server.players[0].position - position ); - velocity=new Vector2(duration.X * speed, duration.Y*speed); + velocity+=new Vector2(duration.X * speed, duration.Y*speed); if (Random.Shared.NextDouble() > 0.9) { diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/LivingEntity.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/LivingEntity.cs index cc6cb9c..c1f95ac 100644 --- a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/LivingEntity.cs +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/LivingEntity.cs @@ -19,6 +19,7 @@ public class LivingEntity : Entity public LivingEntity(Vector2 position) : base(position) { inputManager = new InputManager(); + collisionComponent.hasCollision = true; } public override GraphicsComponent graphicsComponent { get; } = null; @@ -34,7 +35,21 @@ public class LivingEntity : Entity { } - + + public override void UpdateAnimations() + { + base.UpdateAnimations(); + } + Vector2 prevPosition_forClient; + public override void Draw(SpriteBatch spriteBatch) + { + if ((position - prevPosition_forClient).X< 0) + graphicsComponent.Flip = SpriteEffects.FlipHorizontally; + else if((position - prevPosition_forClient).X > 0) + graphicsComponent.Flip = SpriteEffects.None; + base.Draw(spriteBatch); + prevPosition_forClient = position; + } } diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs index 84d3e74..0041c90 100644 --- a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs @@ -29,6 +29,8 @@ public class Player : LivingEntity //InputPlayerRotation = new Vector2(0, 0); graphicsComponent.ObjectDrawRectangle = new Rectangle(0, 0, 100, 100); collisionComponent.stopRectangle = new Rectangle(0, 0, 100, 100); + + StartAnimation("player_look_down"); } @@ -40,17 +42,16 @@ public class Player : LivingEntity float t; public void MovementLogic() { - IsTryingToShoot = true; - StartAnimation("player_look_down");//gslkjfsnblkjsdfnnlkjbn;zkcjnb;kkjnzx;cjkb;kzjxb;kSErgo + IsTryingToShoot = true; //gslkjfsnblkjsdfnnlkjbn;zkcjnb;kkjnzx;cjkb;kzjxb;kSErgo //velocity.X = 3+(float)Math.Sin(t); t++; if (InputPlayerRotation.X > 0.9) { } - if (Keyboard.GetState().IsKeyDown(Keys.D)) velocity.X = 5; - if (Keyboard.GetState().IsKeyDown(Keys.A)) velocity.X = -5; - if (Keyboard.GetState().IsKeyDown(Keys.S)) velocity.Y = 5; - if (Keyboard.GetState().IsKeyDown(Keys.W)) velocity.Y = -5; + if (Keyboard.GetState().IsKeyDown(Keys.D)) velocity.X += 5; + if (Keyboard.GetState().IsKeyDown(Keys.A)) velocity.X += -5; + if (Keyboard.GetState().IsKeyDown(Keys.S)) velocity.Y += 5; + if (Keyboard.GetState().IsKeyDown(Keys.W)) velocity.Y += -5; } public void HandleNewInput(UpdateInput updateInput) { diff --git a/ZoFo/GameCore/Server.cs b/ZoFo/GameCore/Server.cs index 3658bb9..944b098 100644 --- a/ZoFo/GameCore/Server.cs +++ b/ZoFo/GameCore/Server.cs @@ -212,12 +212,18 @@ namespace ZoFo.GameCore /// Удаляет игровой объект /// /// - public void DeleteObject(GameObject gameObject) + public void DeleteObject(Entity entity) { - gameObjects.Remove(gameObject); + if (gameObjects.Contains(entity)) + gameObjects.Remove(entity); + if (entities.Contains(entity)) + entities.Remove(entity); + if (players.Contains(entity)) + players.Remove(entity as Player); AddData(new UpdateGameObjectDeleted() - { GameObjectType = gameObject.GetType().Name} + { GameObjectType = entity.GetType().Name, IdEntity = entity .Id} ); + collisionManager.Deregister(entity.collisionComponent); } } From f379f14ec7ef18a292930baca4fc844670914fdd Mon Sep 17 00:00:00 2001 From: SergoDobro Date: Sun, 18 Aug 2024 23:34:26 +0300 Subject: [PATCH 04/10] debug draw --- ZoFo/GameCore/GameObjects/Entities/Entity.cs | 6 ++++++ ZoFo/GameCore/GameObjects/GameObject.cs | 2 -- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ZoFo/GameCore/GameObjects/Entities/Entity.cs b/ZoFo/GameCore/GameObjects/Entities/Entity.cs index 3b88ad8..f0e4ebf 100644 --- a/ZoFo/GameCore/GameObjects/Entities/Entity.cs +++ b/ZoFo/GameCore/GameObjects/Entities/Entity.cs @@ -48,6 +48,12 @@ namespace ZoFo.GameCore.GameObjects.Entities }); } + public override void Draw(SpriteBatch spriteBatch) + { + DrawDebugRectangle(spriteBatch, collisionComponent.stopRectangle.SetOrigin(position), Color.Orange); + + base.Draw(spriteBatch); + } } } diff --git a/ZoFo/GameCore/GameObjects/GameObject.cs b/ZoFo/GameCore/GameObjects/GameObject.cs index 85189ea..5e40de1 100644 --- a/ZoFo/GameCore/GameObjects/GameObject.cs +++ b/ZoFo/GameCore/GameObjects/GameObject.cs @@ -83,8 +83,6 @@ public abstract class GameObject { graphicsComponent.Draw(graphicsComponent.ObjectDrawRectangle, spriteBatch); //debug - DrawDebugRectangle(spriteBatch, graphicsComponent.ObjectDrawRectangle); - if (AppManager.Instance.InputManager.CollisionsCheat) DrawDebugRectangle(spriteBatch, graphicsComponent.ObjectDrawRectangle); From 22e63c7c88d6f36c21454dd5d4e6b93ec7ebe71a Mon Sep 17 00:00:00 2001 From: Lev Date: Sun, 18 Aug 2024 23:44:35 +0300 Subject: [PATCH 05/10] add shootEvent, OnInteract events to Game, Player can move with WASD and arrows --- ZoFo/GameCore/Client.cs | 12 ++++++++ ZoFo/GameCore/GameManagers/InputManager.cs | 15 ++++++++-- .../NetworkManager/ClientNetworkManager.cs | 7 +++++ .../ClientToServer/UpdateInputInteraction.cs | 12 ++++++++ .../ClientToServer/UpdateShootInteraction.cs | 9 ++++++ .../ServerToClient/UpdateInteraction.cs | 2 ++ .../Entities/LivingEntities/Enemies/Zombie.cs | 2 +- .../Entities/LivingEntities/Player/Player.cs | 29 ++++++++++--------- ZoFo/GameCore/Server.cs | 14 +++++++-- 9 files changed, 83 insertions(+), 19 deletions(-) create mode 100644 ZoFo/GameCore/GameManagers/NetworkManager/Updates/ClientToServer/UpdateInputInteraction.cs create mode 100644 ZoFo/GameCore/GameManagers/NetworkManager/Updates/ClientToServer/UpdateShootInteraction.cs diff --git a/ZoFo/GameCore/Client.cs b/ZoFo/GameCore/Client.cs index 626f732..7ef5ac6 100644 --- a/ZoFo/GameCore/Client.cs +++ b/ZoFo/GameCore/Client.cs @@ -49,6 +49,15 @@ namespace ZoFo.GameCore InputMovementDirection = AppManager.Instance.InputManager.InputMovementDirection, InputAttackDirection = AppManager.Instance.InputManager.InputAttackDirection }); + + }; + AppManager.Instance.InputManager.OnInteract += () => + { + networkManager.AddData(new UpdateInputInteraction() { }); + }; + AppManager.Instance.InputManager.ShootEvent += () => + { + networkManager.AddData(new UpdateInputShoot() { }); }; } @@ -77,6 +86,7 @@ namespace ZoFo.GameCore List gameObjects = new List(); List players = new List(); List stopObjects = new List(); + /// /// Клиент должен обнговлять игру анимаций /// @@ -88,6 +98,8 @@ namespace ZoFo.GameCore AppManager.Instance.debugHud.Set("GameTime", gameTime.TotalGameTime.ToString()); gameObjects[i].UpdateAnimations(); } + + networkManager.SendData();//set to ticks } internal void Draw(SpriteBatch spriteBatch) { diff --git a/ZoFo/GameCore/GameManagers/InputManager.cs b/ZoFo/GameCore/GameManagers/InputManager.cs index dd13535..c390273 100644 --- a/ZoFo/GameCore/GameManagers/InputManager.cs +++ b/ZoFo/GameCore/GameManagers/InputManager.cs @@ -10,6 +10,7 @@ using System.Linq; using System.Reflection.Metadata.Ecma335; using System.Text; using System.Threading.Tasks; +using ZoFo.GameCore.GUI; namespace ZoFo.GameCore.GameManagers { @@ -27,9 +28,6 @@ namespace ZoFo.GameCore.GameManagers private Vector2 prevInputMovementDirection; public Vector2 InputAttackDirection; private Vector2 prevInputAttackDirection; - - public event Action TalkEvent; - public ScopeState currentScopeState; // Положение оружия. Left, Right, Straight, Back, StraightLeft, StraightRight, BackLeft, BackRight. private ScopeState prevCurrentScopeState; private bool _cheatsEnabled = false; @@ -48,6 +46,7 @@ namespace ZoFo.GameCore.GameManagers public InputManager() { + isInteract = true; InputMovementDirection = new Vector2(0, 0); InputAttackDirection = new Vector2(0, 0); this.isShoot = false; @@ -173,38 +172,46 @@ namespace ZoFo.GameCore.GameManagers if (keyBoardState.IsKeyDown(Keys.Up) || keyBoardState.IsKeyDown(Keys.W)) { currentScopeState = ScopeState.Straight; + InputMovementDirection = new Vector2(0, -1); } else if (keyBoardState.IsKeyDown(Keys.Down) || keyBoardState.IsKeyDown(Keys.S)) { currentScopeState = ScopeState.Back; + InputMovementDirection = new Vector2(0, 1); } else if(keyBoardState.IsKeyDown(Keys.Left) || keyBoardState.IsKeyDown(Keys.A)) { currentScopeState = ScopeState.Left; + InputMovementDirection = new Vector2(-1, 0); } else if(keyBoardState.IsKeyDown(Keys.Right) || keyBoardState.IsKeyDown(Keys.D)) { currentScopeState = ScopeState.Right; + InputMovementDirection = new Vector2(1, 0); } else if(keyBoardState.IsKeyDown(Keys.Right) && keyBoardState.IsKeyDown(Keys.Up) || keyBoardState.IsKeyDown(Keys.D) && keyBoardState.IsKeyDown(Keys.W)) { currentScopeState = ScopeState.StraightRight; + InputMovementDirection = new Vector2(1, 1); } else if(keyBoardState.IsKeyDown(Keys.Left) && keyBoardState.IsKeyDown(Keys.Up) || keyBoardState.IsKeyDown(Keys.A) && keyBoardState.IsKeyDown(Keys.W)) { currentScopeState = ScopeState.StraightLeft; + InputMovementDirection = new Vector2(-1, 1); } else if(keyBoardState.IsKeyDown(Keys.Right) && keyBoardState.IsKeyDown(Keys.Down) || keyBoardState.IsKeyDown(Keys.D) && keyBoardState.IsKeyDown(Keys.S)) { currentScopeState = ScopeState.BackRight; + InputMovementDirection = new Vector2(1, -1); } else if(keyBoardState.IsKeyDown(Keys.Left) && keyBoardState.IsKeyDown(Keys.Down) || keyBoardState.IsKeyDown(Keys.A) && keyBoardState.IsKeyDown(Keys.S)) { currentScopeState = ScopeState.BackLeft; + InputMovementDirection = new Vector2(-1, -1); } #endregion @@ -247,6 +254,8 @@ namespace ZoFo.GameCore.GameManagers prevInputAttackDirection = InputAttackDirection; prevCurrentScopeState = currentScopeState; #endregion + + DebugHUD.Instance.Set("controls", currentScopeState.ToString()); } } } diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs b/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs index f75fb9a..f24e951 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs @@ -42,6 +42,13 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager public void SendData() { + for (int i = 0; i < updates.Count; i++) + { + + AppManager.Instance.server.ProcessIUpdateData(updates[i]); + } + updates.Clear(); + return;// TODO remove byte[] bytes = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(updates)); //нужно сериализовать socket.Send(bytes); } diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ClientToServer/UpdateInputInteraction.cs b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ClientToServer/UpdateInputInteraction.cs new file mode 100644 index 0000000..243fce0 --- /dev/null +++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ClientToServer/UpdateInputInteraction.cs @@ -0,0 +1,12 @@ +using System; +using ZoFo.GameCore.GameManagers.NetworkManager; + +namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ClientToServer; + +/// +/// уведомляет сервер о том, что игрок взаимодействует +/// +public class UpdateInputInteraction : UpdateData +{ + public UpdateInputInteraction() { UpdateType = "UpdateInputInteraction"; } +} diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ClientToServer/UpdateShootInteraction.cs b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ClientToServer/UpdateShootInteraction.cs new file mode 100644 index 0000000..d5ef20c --- /dev/null +++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ClientToServer/UpdateShootInteraction.cs @@ -0,0 +1,9 @@ +using System; +using ZoFo.GameCore.GameManagers.NetworkManager.Updates; + +namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ClientToServer; + +public class UpdateInputShoot : UpdateData +{ + public UpdateInputShoot() { UpdateType = "UpdateInputShoot"; } +} diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateInteraction.cs b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateInteraction.cs index 6f4711d..25848ca 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateInteraction.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateInteraction.cs @@ -2,6 +2,8 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient; /// /// При попытке взаимодействия с объектом +/// отправляет пользователю разрешение на взаимодействие +/// TODO: Вероятно убрать(обсудить) /// public class UpdateInteraction : UpdateData { diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs index bc504f9..e0dcb39 100644 --- a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs @@ -15,7 +15,7 @@ namespace ZoFo.GameCore.GameObjects.Entities.LivingEntities.Enemies public Zombie(Vector2 position) : base(position) { health = 5; - speed =2; + speed =5; collisionComponent.stopRectangle = new Rectangle(0, 0, 100, 100); graphicsComponent.ObjectDrawRectangle = new Rectangle(0, 0, 100, 100); } diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs index 42d89c2..b6d43be 100644 --- a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs @@ -18,17 +18,19 @@ public class Player : LivingEntity /// /// Факт того, что плеер в этом апдейте пытается стрелять /// - public bool IsTryingToShoot { get; set; } + //public bool IsTryingToShoot { get; set; } private float speed; private int health; public override GraphicsComponent graphicsComponent { get; } = new AnimatedGraphicsComponent(new List { "player_look_down" }, "player_look_down"); private LootData lootData; + //public bool isTryingToInteract { get; set; } public Player(Vector2 position) : base(position) { - //InputWeaponRotation = new Vector2(0, 0); - //InputPlayerRotation = new Vector2(0, 0); graphicsComponent.ObjectDrawRectangle = new Rectangle(0, 0, 100, 100); collisionComponent.stopRectangle = new Rectangle(0, 0, 100, 100); + speed = 10; + //isTryingToInteract = false; + //IsTryingToShoot = false; } @@ -37,20 +39,21 @@ public class Player : LivingEntity MovementLogic(); } - float t; public void MovementLogic() { - //velocity.X = 3+(float)Math.Sin(t); - t++; - if (InputPlayerRotation.X > 0.9) - { - } - if (Keyboard.GetState().IsKeyDown(Keys.D)) velocity.X = 5; - if (Keyboard.GetState().IsKeyDown(Keys.A)) velocity.X = -5; - if (Keyboard.GetState().IsKeyDown(Keys.S)) velocity.Y = 5; - if (Keyboard.GetState().IsKeyDown(Keys.W)) velocity.Y = -5; + velocity = InputPlayerRotation * speed; } public void HandleNewInput(UpdateInput updateInput) + { + InputPlayerRotation = updateInput.InputMovementDirection; + InputWeaponRotation = updateInput.InputAttackDirection; + + } + public void HandleInteract(UpdateInputInteraction updateInputInteraction) + { + //isTryingToInteract = true; + } + public void HandleShoot(UpdateInputShoot updateInputShoot) { } diff --git a/ZoFo/GameCore/Server.cs b/ZoFo/GameCore/Server.cs index dbbfa94..1e4ec8d 100644 --- a/ZoFo/GameCore/Server.cs +++ b/ZoFo/GameCore/Server.cs @@ -12,6 +12,7 @@ using ZoFo.GameCore.GameManagers.CollisionManager; using ZoFo.GameCore.GameManagers.MapManager; using ZoFo.GameCore.GameManagers.NetworkManager; using ZoFo.GameCore.GameManagers.NetworkManager.Updates; +using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ClientToServer; using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient; using ZoFo.GameCore.GameObjects; using ZoFo.GameCore.GameObjects.Entities; @@ -77,11 +78,17 @@ namespace ZoFo.GameCore break; case "UpdatePlayerParametrs": break; - case "UpdatePosition": + case "UpdateInput": + players[0].HandleNewInput(updateData as UpdateInput); break; case "UpdateTileCreated": break; - + case "UpdateInputInteraction": + players[0].HandleInteract(updateData as UpdateInputInteraction); + break; + case "UpdateInputShoot": + players[0].HandleShoot(updateData as UpdateInputShoot); + break; } } @@ -130,6 +137,9 @@ namespace ZoFo.GameCore //AppManager.Instance.server.RegisterGameObject(new EntittyForAnimationTests(new Vector2(0, 0))); AppManager.Instance.server.RegisterGameObject(new Player(new Vector2(740, 140))); AppManager.Instance.server.RegisterGameObject(new Zombie(new Vector2(1000, 1000))); + AppManager.Instance.server.RegisterGameObject(new Zombie(new Vector2(1300, 1000))); + AppManager.Instance.server.RegisterGameObject(new Zombie(new Vector2(1500, 1000))); + AppManager.Instance.server.RegisterGameObject(new Zombie(new Vector2(1700, 1000))); AppManager.Instance.server.RegisterGameObject(new Ammo(new Vector2(140, 440))); AppManager.Instance.server.RegisterGameObject(new Ammo(new Vector2(240, 440))); } From b895535153f5564958697d693c35fe1522cc7ebd Mon Sep 17 00:00:00 2001 From: polten0 Date: Mon, 19 Aug 2024 00:24:57 +0300 Subject: [PATCH 06/10] =?UTF-8?q?=D0=94=D0=BE=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BB/=D0=BF=D0=B5=D1=80=D0=B5=D0=B0=D0=B8=D1=81=D0=B0=D0=BB?= =?UTF-8?q?=20Collectbles=20=D0=B8=20=D0=B5=D0=B3=D0=BE=20=D0=BD=D0=B0?= =?UTF-8?q?=D1=81=D0=BB=D0=B5=D0=B4=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2,=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B8=20=D0=BA=D1=83=D1=87?= =?UTF-8?q?=D1=83=20=D0=B8=D0=BA=D0=BE=D0=BD=D0=BE=D0=BA,=20=D0=BA=D0=B0?= =?UTF-8?q?=D1=80=D1=82=D0=B0=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=B0=D1=82?= =?UTF-8?q?=D1=8B=D0=B2=D0=B0=D0=B5=D1=82=20=D0=BF=D0=B8=D0=BA=D0=B0=D0=BF?= =?UTF-8?q?=D1=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZoFo/Content/Content.mgcb | 865 +++++++++++++++++- ZoFo/Content/MapData/MapSession.tiled-session | 21 +- ZoFo/Content/MapData/Templates/Ammo.tj | 18 + .../MapData/Templates/BottleOfWater.tj | 18 + ZoFo/Content/MapData/Templates/Peeble.tj | 18 + .../MapData/Templates/PureBottleOfWater.tj | 18 + ZoFo/Content/MapData/Templates/RottenFlesh.tj | 18 + ZoFo/Content/MapData/Templates/Steel.tj | 18 + ZoFo/Content/MapData/Templates/Wood.tj | 18 + ZoFo/Content/MapData/TileSets/IconSet.tsj | 60 ++ .../Textures/icons/Collectables/Ammo.png | Bin 0 -> 21460 bytes .../icons/Collectables/BottleOfWater.png | Bin 0 -> 1581 bytes .../Textures/icons/Collectables/Peeble.png | Bin 0 -> 80760 bytes .../icons/Collectables/PureBottleOfWater.png | Bin 0 -> 1647 bytes .../icons/Collectables/RottenFlesh.png | Bin 0 -> 1683 bytes .../Textures/icons/Collectables/Steel.png | Bin 0 -> 1421 bytes .../Textures/icons/Collectables/Wood.png | Bin 0 -> 1612 bytes .../Textures/icons/Material/Fabric.png | Bin 0 -> 1606 bytes .../Textures/icons/Material/Leather.png | Bin 0 -> 1453 bytes .../Content/Textures/icons/Material/Paper.png | Bin 0 -> 1603 bytes ZoFo/Content/Textures/icons/Material/Rope.png | Bin 0 -> 1461 bytes .../Textures/icons/Material/String.png | Bin 0 -> 1577 bytes .../Textures/icons/Material/Wooden Plank.png | Bin 0 -> 1472 bytes ZoFo/Content/Textures/icons/Material/Wool.png | Bin 0 -> 1462 bytes ZoFo/Content/Textures/icons/Misc/Book 2.png | Bin 0 -> 1640 bytes ZoFo/Content/Textures/icons/Misc/Book 3.png | Bin 0 -> 1624 bytes ZoFo/Content/Textures/icons/Misc/Book.png | Bin 0 -> 1618 bytes ZoFo/Content/Textures/icons/Misc/Candle.png | Bin 0 -> 1074 bytes ZoFo/Content/Textures/icons/Misc/Chest.png | Bin 0 -> 2052 bytes .../Textures/icons/Misc/Copper Coin.png | Bin 0 -> 1537 bytes ZoFo/Content/Textures/icons/Misc/Crate.png | Bin 0 -> 1970 bytes ZoFo/Content/Textures/icons/Misc/Envolop.png | Bin 0 -> 1479 bytes ZoFo/Content/Textures/icons/Misc/Gear.png | Bin 0 -> 1703 bytes .../Textures/icons/Misc/Golden Coin.png | Bin 0 -> 1534 bytes .../Textures/icons/Misc/Golden Key.png | Bin 0 -> 1274 bytes ZoFo/Content/Textures/icons/Misc/Heart.png | Bin 0 -> 1546 bytes ZoFo/Content/Textures/icons/Misc/Iron Key.png | Bin 0 -> 1233 bytes ZoFo/Content/Textures/icons/Misc/Lantern.png | Bin 0 -> 1882 bytes ZoFo/Content/Textures/icons/Misc/Map.png | Bin 0 -> 1619 bytes .../Textures/icons/Misc/Rune Stone.png | Bin 0 -> 1574 bytes ZoFo/Content/Textures/icons/Misc/Scroll.png | Bin 0 -> 1421 bytes .../Textures/icons/Misc/Silver Coin.png | Bin 0 -> 1560 bytes .../Textures/icons/Misc/Silver Key.png | Bin 0 -> 1293 bytes .../Textures/icons/Monster Part/Bone.png | Bin 0 -> 1110 bytes .../Textures/icons/Monster Part/Egg.png | Bin 0 -> 1011 bytes .../Textures/icons/Monster Part/Feather.png | Bin 0 -> 1028 bytes .../icons/Monster Part/Monster Egg.png | Bin 0 -> 1558 bytes .../icons/Monster Part/Monster Eye.png | Bin 0 -> 1442 bytes .../Textures/icons/Monster Part/Skull.png | Bin 0 -> 1746 bytes .../Textures/icons/Monster Part/Slime Gel.png | Bin 0 -> 1357 bytes .../Content/Textures/icons/Ore & Gem/Coal.png | Bin 0 -> 1130 bytes .../Textures/icons/Ore & Gem/Copper Ingot.png | Bin 0 -> 1383 bytes .../icons/Ore & Gem/Copper Nugget.png | Bin 0 -> 999 bytes .../Textures/icons/Ore & Gem/Crystal.png | Bin 0 -> 1434 bytes .../Textures/icons/Ore & Gem/Cut Emerald.png | Bin 0 -> 1497 bytes .../Textures/icons/Ore & Gem/Cut Ruby.png | Bin 0 -> 1469 bytes .../Textures/icons/Ore & Gem/Cut Sapphire.png | Bin 0 -> 1458 bytes .../Textures/icons/Ore & Gem/Cut Topaz.png | Bin 0 -> 1577 bytes .../Textures/icons/Ore & Gem/Diamond.png | Bin 0 -> 1379 bytes .../Textures/icons/Ore & Gem/Emerald.png | Bin 0 -> 1368 bytes .../Textures/icons/Ore & Gem/Gold Nugget.png | Bin 0 -> 921 bytes .../Textures/icons/Ore & Gem/Golden Ingot.png | Bin 0 -> 1379 bytes .../Textures/icons/Ore & Gem/Obsidian.png | Bin 0 -> 1249 bytes .../Textures/icons/Ore & Gem/Pearl.png | Bin 0 -> 1245 bytes .../Content/Textures/icons/Ore & Gem/Ruby.png | Bin 0 -> 1267 bytes .../Textures/icons/Ore & Gem/Sapphire.png | Bin 0 -> 1185 bytes .../icons/Ore & Gem/Silver Nugget.png | Bin 0 -> 973 bytes .../Textures/icons/Ore & Gem/Topaz.png | Bin 0 -> 1482 bytes .../Textures/icons/Potion/Blue Potion 2.png | Bin 0 -> 1740 bytes .../Textures/icons/Potion/Blue Potion 3.png | Bin 0 -> 1836 bytes .../Textures/icons/Potion/Empty Bottle.png | Bin 0 -> 1732 bytes .../Textures/icons/Potion/Green Potion 2.png | Bin 0 -> 1772 bytes .../Textures/icons/Potion/Green Potion 3.png | Bin 0 -> 1889 bytes .../Textures/icons/Potion/Green Potion.png | Bin 0 -> 1674 bytes .../Textures/icons/Potion/Red Potion 2.png | Bin 0 -> 1785 bytes .../Textures/icons/Potion/Red Potion 3.png | Bin 0 -> 1860 bytes .../Textures/icons/Potion/Red Potion.png | Bin 0 -> 1643 bytes .../MapManager/MapElements/Layer.cs | 3 + .../MapManager/MapElements/Object.cs | 7 +- .../MapManager/MapElements/Template.cs | 15 + .../GameManagers/MapManager/MapManager.cs | 144 +-- .../Interactables/Collectables/Ammo.cs | 2 +- .../Collectables/BottleOfWater.cs | 2 +- .../Interactables/Collectables/Collectable.cs | 1 + .../Interactables/Collectables/Peeble.cs | 2 +- .../Collectables/PureBottleOfWater.cs | 2 +- .../Interactables/Collectables/RottenFlesh.cs | 2 +- .../Interactables/Collectables/Steel.cs | 2 +- .../Interactables/Collectables/Wood.cs | 2 +- 89 files changed, 1152 insertions(+), 104 deletions(-) create mode 100644 ZoFo/Content/MapData/Templates/Ammo.tj create mode 100644 ZoFo/Content/MapData/Templates/BottleOfWater.tj create mode 100644 ZoFo/Content/MapData/Templates/Peeble.tj create mode 100644 ZoFo/Content/MapData/Templates/PureBottleOfWater.tj create mode 100644 ZoFo/Content/MapData/Templates/RottenFlesh.tj create mode 100644 ZoFo/Content/MapData/Templates/Steel.tj create mode 100644 ZoFo/Content/MapData/Templates/Wood.tj create mode 100644 ZoFo/Content/MapData/TileSets/IconSet.tsj create mode 100644 ZoFo/Content/Textures/icons/Collectables/Ammo.png create mode 100644 ZoFo/Content/Textures/icons/Collectables/BottleOfWater.png create mode 100644 ZoFo/Content/Textures/icons/Collectables/Peeble.png create mode 100644 ZoFo/Content/Textures/icons/Collectables/PureBottleOfWater.png create mode 100644 ZoFo/Content/Textures/icons/Collectables/RottenFlesh.png create mode 100644 ZoFo/Content/Textures/icons/Collectables/Steel.png create mode 100644 ZoFo/Content/Textures/icons/Collectables/Wood.png create mode 100644 ZoFo/Content/Textures/icons/Material/Fabric.png create mode 100644 ZoFo/Content/Textures/icons/Material/Leather.png create mode 100644 ZoFo/Content/Textures/icons/Material/Paper.png create mode 100644 ZoFo/Content/Textures/icons/Material/Rope.png create mode 100644 ZoFo/Content/Textures/icons/Material/String.png create mode 100644 ZoFo/Content/Textures/icons/Material/Wooden Plank.png create mode 100644 ZoFo/Content/Textures/icons/Material/Wool.png create mode 100644 ZoFo/Content/Textures/icons/Misc/Book 2.png create mode 100644 ZoFo/Content/Textures/icons/Misc/Book 3.png create mode 100644 ZoFo/Content/Textures/icons/Misc/Book.png create mode 100644 ZoFo/Content/Textures/icons/Misc/Candle.png create mode 100644 ZoFo/Content/Textures/icons/Misc/Chest.png create mode 100644 ZoFo/Content/Textures/icons/Misc/Copper Coin.png create mode 100644 ZoFo/Content/Textures/icons/Misc/Crate.png create mode 100644 ZoFo/Content/Textures/icons/Misc/Envolop.png create mode 100644 ZoFo/Content/Textures/icons/Misc/Gear.png create mode 100644 ZoFo/Content/Textures/icons/Misc/Golden Coin.png create mode 100644 ZoFo/Content/Textures/icons/Misc/Golden Key.png create mode 100644 ZoFo/Content/Textures/icons/Misc/Heart.png create mode 100644 ZoFo/Content/Textures/icons/Misc/Iron Key.png create mode 100644 ZoFo/Content/Textures/icons/Misc/Lantern.png create mode 100644 ZoFo/Content/Textures/icons/Misc/Map.png create mode 100644 ZoFo/Content/Textures/icons/Misc/Rune Stone.png create mode 100644 ZoFo/Content/Textures/icons/Misc/Scroll.png create mode 100644 ZoFo/Content/Textures/icons/Misc/Silver Coin.png create mode 100644 ZoFo/Content/Textures/icons/Misc/Silver Key.png create mode 100644 ZoFo/Content/Textures/icons/Monster Part/Bone.png create mode 100644 ZoFo/Content/Textures/icons/Monster Part/Egg.png create mode 100644 ZoFo/Content/Textures/icons/Monster Part/Feather.png create mode 100644 ZoFo/Content/Textures/icons/Monster Part/Monster Egg.png create mode 100644 ZoFo/Content/Textures/icons/Monster Part/Monster Eye.png create mode 100644 ZoFo/Content/Textures/icons/Monster Part/Skull.png create mode 100644 ZoFo/Content/Textures/icons/Monster Part/Slime Gel.png create mode 100644 ZoFo/Content/Textures/icons/Ore & Gem/Coal.png create mode 100644 ZoFo/Content/Textures/icons/Ore & Gem/Copper Ingot.png create mode 100644 ZoFo/Content/Textures/icons/Ore & Gem/Copper Nugget.png create mode 100644 ZoFo/Content/Textures/icons/Ore & Gem/Crystal.png create mode 100644 ZoFo/Content/Textures/icons/Ore & Gem/Cut Emerald.png create mode 100644 ZoFo/Content/Textures/icons/Ore & Gem/Cut Ruby.png create mode 100644 ZoFo/Content/Textures/icons/Ore & Gem/Cut Sapphire.png create mode 100644 ZoFo/Content/Textures/icons/Ore & Gem/Cut Topaz.png create mode 100644 ZoFo/Content/Textures/icons/Ore & Gem/Diamond.png create mode 100644 ZoFo/Content/Textures/icons/Ore & Gem/Emerald.png create mode 100644 ZoFo/Content/Textures/icons/Ore & Gem/Gold Nugget.png create mode 100644 ZoFo/Content/Textures/icons/Ore & Gem/Golden Ingot.png create mode 100644 ZoFo/Content/Textures/icons/Ore & Gem/Obsidian.png create mode 100644 ZoFo/Content/Textures/icons/Ore & Gem/Pearl.png create mode 100644 ZoFo/Content/Textures/icons/Ore & Gem/Ruby.png create mode 100644 ZoFo/Content/Textures/icons/Ore & Gem/Sapphire.png create mode 100644 ZoFo/Content/Textures/icons/Ore & Gem/Silver Nugget.png create mode 100644 ZoFo/Content/Textures/icons/Ore & Gem/Topaz.png create mode 100644 ZoFo/Content/Textures/icons/Potion/Blue Potion 2.png create mode 100644 ZoFo/Content/Textures/icons/Potion/Blue Potion 3.png create mode 100644 ZoFo/Content/Textures/icons/Potion/Empty Bottle.png create mode 100644 ZoFo/Content/Textures/icons/Potion/Green Potion 2.png create mode 100644 ZoFo/Content/Textures/icons/Potion/Green Potion 3.png create mode 100644 ZoFo/Content/Textures/icons/Potion/Green Potion.png create mode 100644 ZoFo/Content/Textures/icons/Potion/Red Potion 2.png create mode 100644 ZoFo/Content/Textures/icons/Potion/Red Potion 3.png create mode 100644 ZoFo/Content/Textures/icons/Potion/Red Potion.png create mode 100644 ZoFo/GameCore/GameManagers/MapManager/MapElements/Template.cs diff --git a/ZoFo/Content/Content.mgcb b/ZoFo/Content/Content.mgcb index 14c8973..23d954d 100644 --- a/ZoFo/Content/Content.mgcb +++ b/ZoFo/Content/Content.mgcb @@ -37,6 +37,9 @@ #begin MapData/TileMaps/main.tmj /copy:MapData/TileMaps/main.tmj +#begin MapData/TileSets/IconSet.tsj +/copy:MapData/TileSets/IconSet.tsj + #begin MapData/TileSets/tileset 1 collision.tsj /copy:MapData/TileSets/tileset 1 collision.tsj @@ -124,54 +127,54 @@ #begin Textures/Animations/player_left_idle.animation /copy:Textures/Animations/player_left_idle.animation -#begin Textures/Animations/player_look_down_weapon.animation -/copy:Textures/Animations/player_look_down_weapon.animation - #begin Textures/Animations/player_look_down.animation /copy:Textures/Animations/player_look_down.animation -#begin Textures/Animations/player_look_left_down_weapon.animation -/copy:Textures/Animations/player_look_left_down_weapon.animation - -#begin Textures/Animations/player_look_left_down.animation -/copy:Textures/Animations/player_look_left_down.animation - -#begin Textures/Animations/player_look_left_up_weapon.animation -/copy:Textures/Animations/player_look_left_up_weapon.animation - -#begin Textures/Animations/player_look_left_up.animation -/copy:Textures/Animations/player_look_left_up.animation - -#begin Textures/Animations/player_look_left_weapon.animation -/copy:Textures/Animations/player_look_left_weapon.animation +#begin Textures/Animations/player_look_down_weapon.animation +/copy:Textures/Animations/player_look_down_weapon.animation #begin Textures/Animations/player_look_left.animation /copy:Textures/Animations/player_look_left.animation -#begin Textures/Animations/player_look_right_down_weapon.animation -/copy:Textures/Animations/player_look_right_down_weapon.animation +#begin Textures/Animations/player_look_left_down.animation +/copy:Textures/Animations/player_look_left_down.animation -#begin Textures/Animations/player_look_right_down.animation -/copy:Textures/Animations/player_look_right_down.animation +#begin Textures/Animations/player_look_left_down_weapon.animation +/copy:Textures/Animations/player_look_left_down_weapon.animation -#begin Textures/Animations/player_look_right_up_weapon.animation -/copy:Textures/Animations/player_look_right_up_weapon.animation +#begin Textures/Animations/player_look_left_up.animation +/copy:Textures/Animations/player_look_left_up.animation -#begin Textures/Animations/player_look_right_up.animation -/copy:Textures/Animations/player_look_right_up.animation +#begin Textures/Animations/player_look_left_up_weapon.animation +/copy:Textures/Animations/player_look_left_up_weapon.animation -#begin Textures/Animations/player_look_right_weapon.animation -/copy:Textures/Animations/player_look_right_weapon.animation +#begin Textures/Animations/player_look_left_weapon.animation +/copy:Textures/Animations/player_look_left_weapon.animation #begin Textures/Animations/player_look_right.animation /copy:Textures/Animations/player_look_right.animation -#begin Textures/Animations/player_look_up_weapon.animation -/copy:Textures/Animations/player_look_up_weapon.animation +#begin Textures/Animations/player_look_right_down.animation +/copy:Textures/Animations/player_look_right_down.animation + +#begin Textures/Animations/player_look_right_down_weapon.animation +/copy:Textures/Animations/player_look_right_down_weapon.animation + +#begin Textures/Animations/player_look_right_up.animation +/copy:Textures/Animations/player_look_right_up.animation + +#begin Textures/Animations/player_look_right_up_weapon.animation +/copy:Textures/Animations/player_look_right_up_weapon.animation + +#begin Textures/Animations/player_look_right_weapon.animation +/copy:Textures/Animations/player_look_right_weapon.animation #begin Textures/Animations/player_look_up.animation /copy:Textures/Animations/player_look_up.animation +#begin Textures/Animations/player_look_up_weapon.animation +/copy:Textures/Animations/player_look_up_weapon.animation + #begin Textures/Animations/player_right_idle.animation /copy:Textures/Animations/player_right_idle.animation @@ -568,6 +571,810 @@ /processorParam:TextureFormat=Color /build:Textures/icons/9.png +#begin Textures/icons/Collectables/Ammo.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:Textures/icons/Collectables/Ammo.png + +#begin Textures/icons/Collectables/BottleOfWater.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:Textures/icons/Collectables/BottleOfWater.png + +#begin Textures/icons/Collectables/Peeble.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:Textures/icons/Collectables/Peeble.png + +#begin Textures/icons/Collectables/PureBottleOfWater.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:Textures/icons/Collectables/PureBottleOfWater.png + +#begin Textures/icons/Collectables/RottenFlesh.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:Textures/icons/Collectables/RottenFlesh.png + +#begin Textures/icons/Collectables/Steel.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:Textures/icons/Collectables/Steel.png + +#begin Textures/icons/Collectables/Wood.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:Textures/icons/Collectables/Wood.png + +#begin Textures/icons/Material/Fabric.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:Textures/icons/Material/Fabric.png + +#begin Textures/icons/Material/Leather.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:Textures/icons/Material/Leather.png + +#begin Textures/icons/Material/Paper.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:Textures/icons/Material/Paper.png + +#begin Textures/icons/Material/Rope.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:Textures/icons/Material/Rope.png + +#begin Textures/icons/Material/String.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:Textures/icons/Material/String.png + +#begin Textures/icons/Material/Wooden Plank.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:Textures/icons/Material/Wooden Plank.png + +#begin Textures/icons/Material/Wool.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:Textures/icons/Material/Wool.png + +#begin Textures/icons/Misc/Book 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:Textures/icons/Misc/Book 2.png + +#begin Textures/icons/Misc/Book 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:Textures/icons/Misc/Book 3.png + +#begin Textures/icons/Misc/Book.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:Textures/icons/Misc/Book.png + +#begin Textures/icons/Misc/Candle.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:Textures/icons/Misc/Candle.png + +#begin Textures/icons/Misc/Chest.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:Textures/icons/Misc/Chest.png + +#begin Textures/icons/Misc/Copper Coin.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:Textures/icons/Misc/Copper Coin.png + +#begin Textures/icons/Misc/Crate.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:Textures/icons/Misc/Crate.png + +#begin Textures/icons/Misc/Envolop.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:Textures/icons/Misc/Envolop.png + +#begin Textures/icons/Misc/Gear.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:Textures/icons/Misc/Gear.png + +#begin Textures/icons/Misc/Golden Coin.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:Textures/icons/Misc/Golden Coin.png + +#begin Textures/icons/Misc/Golden Key.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:Textures/icons/Misc/Golden Key.png + +#begin Textures/icons/Misc/Heart.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:Textures/icons/Misc/Heart.png + +#begin Textures/icons/Misc/Iron Key.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:Textures/icons/Misc/Iron Key.png + +#begin Textures/icons/Misc/Lantern.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:Textures/icons/Misc/Lantern.png + +#begin Textures/icons/Misc/Map.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:Textures/icons/Misc/Map.png + +#begin Textures/icons/Misc/Rune Stone.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:Textures/icons/Misc/Rune Stone.png + +#begin Textures/icons/Misc/Scroll.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:Textures/icons/Misc/Scroll.png + +#begin Textures/icons/Misc/Silver Coin.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:Textures/icons/Misc/Silver Coin.png + +#begin Textures/icons/Misc/Silver Key.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:Textures/icons/Misc/Silver Key.png + +#begin Textures/icons/Monster Part/Bone.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:Textures/icons/Monster Part/Bone.png + +#begin Textures/icons/Monster Part/Egg.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:Textures/icons/Monster Part/Egg.png + +#begin Textures/icons/Monster Part/Feather.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:Textures/icons/Monster Part/Feather.png + +#begin Textures/icons/Monster Part/Monster Egg.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:Textures/icons/Monster Part/Monster Egg.png + +#begin Textures/icons/Monster Part/Monster Eye.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:Textures/icons/Monster Part/Monster Eye.png + +#begin Textures/icons/Monster Part/Skull.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:Textures/icons/Monster Part/Skull.png + +#begin Textures/icons/Monster Part/Slime Gel.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:Textures/icons/Monster Part/Slime Gel.png + +#begin Textures/icons/Ore & Gem/Coal.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:Textures/icons/Ore & Gem/Coal.png + +#begin Textures/icons/Ore & Gem/Copper Ingot.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:Textures/icons/Ore & Gem/Copper Ingot.png + +#begin Textures/icons/Ore & Gem/Copper Nugget.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:Textures/icons/Ore & Gem/Copper Nugget.png + +#begin Textures/icons/Ore & Gem/Crystal.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:Textures/icons/Ore & Gem/Crystal.png + +#begin Textures/icons/Ore & Gem/Cut Emerald.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:Textures/icons/Ore & Gem/Cut Emerald.png + +#begin Textures/icons/Ore & Gem/Cut Ruby.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:Textures/icons/Ore & Gem/Cut Ruby.png + +#begin Textures/icons/Ore & Gem/Cut Sapphire.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:Textures/icons/Ore & Gem/Cut Sapphire.png + +#begin Textures/icons/Ore & Gem/Cut Topaz.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:Textures/icons/Ore & Gem/Cut Topaz.png + +#begin Textures/icons/Ore & Gem/Diamond.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:Textures/icons/Ore & Gem/Diamond.png + +#begin Textures/icons/Ore & Gem/Emerald.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:Textures/icons/Ore & Gem/Emerald.png + +#begin Textures/icons/Ore & Gem/Gold Nugget.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:Textures/icons/Ore & Gem/Gold Nugget.png + +#begin Textures/icons/Ore & Gem/Golden Ingot.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:Textures/icons/Ore & Gem/Golden Ingot.png + +#begin Textures/icons/Ore & Gem/Obsidian.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:Textures/icons/Ore & Gem/Obsidian.png + +#begin Textures/icons/Ore & Gem/Pearl.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:Textures/icons/Ore & Gem/Pearl.png + +#begin Textures/icons/Ore & Gem/Ruby.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:Textures/icons/Ore & Gem/Ruby.png + +#begin Textures/icons/Ore & Gem/Sapphire.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:Textures/icons/Ore & Gem/Sapphire.png + +#begin Textures/icons/Ore & Gem/Silver Nugget.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:Textures/icons/Ore & Gem/Silver Nugget.png + +#begin Textures/icons/Ore & Gem/Topaz.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:Textures/icons/Ore & Gem/Topaz.png + +#begin Textures/icons/Potion/Blue Potion 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:Textures/icons/Potion/Blue Potion 2.png + +#begin Textures/icons/Potion/Blue Potion 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:Textures/icons/Potion/Blue Potion 3.png + +#begin Textures/icons/Potion/Empty Bottle.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:Textures/icons/Potion/Empty Bottle.png + +#begin Textures/icons/Potion/Green Potion 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:Textures/icons/Potion/Green Potion 2.png + +#begin Textures/icons/Potion/Green Potion 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:Textures/icons/Potion/Green Potion 3.png + +#begin Textures/icons/Potion/Green Potion.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:Textures/icons/Potion/Green Potion.png + +#begin Textures/icons/Potion/Red Potion 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:Textures/icons/Potion/Red Potion 2.png + +#begin Textures/icons/Potion/Red Potion 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:Textures/icons/Potion/Red Potion 3.png + +#begin Textures/icons/Potion/Red Potion.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:Textures/icons/Potion/Red Potion.png + #begin Textures/Test/pickaxe.webp /importer:TextureImporter /processor:TextureProcessor diff --git a/ZoFo/Content/MapData/MapSession.tiled-session b/ZoFo/Content/MapData/MapSession.tiled-session index e679791..ff9e4e4 100644 --- a/ZoFo/Content/MapData/MapSession.tiled-session +++ b/ZoFo/Content/MapData/MapSession.tiled-session @@ -10,6 +10,9 @@ "." ], "fileStates": { + "": { + "scaleInDock": 1 + }, "TileMaps/TileSets/TileSet 1.tsj": { "scaleInDock": 1 }, @@ -21,20 +24,32 @@ "y": 270 } }, + "TileMaps/main.tmj#IconSet": { + "dynamicWrapping": true, + "scaleInEditor": 1 + }, "TileSets/CollisionTileSet.tsj": { "scaleInDock": 0.75, "scaleInEditor": 1 }, + "TileSets/IconSet.tsj": { + "dynamicWrapping": true + }, "TileSets/TileSet 1.tsj": { + "dynamicWrapping": false, "scaleInDock": 1, "scaleInEditor": 1.5 }, + "TileSets/TilesetNature.tsj": { + "dynamicWrapping": false + }, "TileSets/WallSet.tsj": { "scaleInDock": 1, "scaleInEditor": 1 } }, - "last.imagePath": "D:/C#/Я смотрел ваши ХАКАТОНЫ/ZoFo/ZoFo/Content/Textures/TileSetImages", + "last.imagePath": "D:/C#/Я смотрел ваши ХАКАТОНЫ/ZoFo/ZoFo/Content/Textures/icons", + "last.objectTemplatePath": "D:/C#/Я смотрел ваши ХАКАТОНЫ/ZoFo/ZoFo/Content/MapData/Templates", "openFiles": [ "TileSets/TileSet 1.tsj", "TileMaps/main.tmj", @@ -48,11 +63,13 @@ "TileSets/WallSet.tsj" ], "stampsFolder": "D:/C#/Я смотрел ваши ХАКАТОНЫ/ZoFo/ZoFo/Content/MapData/TileStamps", + "tileset.embedInMap": false, "tileset.lastUsedFormat": "json", "tileset.margin": 0, "tileset.spacing": 0, "tileset.tileSize": { "height": 16, "width": 16 - } + }, + "tileset.type": 1 } diff --git a/ZoFo/Content/MapData/Templates/Ammo.tj b/ZoFo/Content/MapData/Templates/Ammo.tj new file mode 100644 index 0000000..6bba547 --- /dev/null +++ b/ZoFo/Content/MapData/Templates/Ammo.tj @@ -0,0 +1,18 @@ +{ "object": + { + "gid":1, + "height":16, + "id":13, + "name":"Ammo", + "rotation":0, + "type":"", + "visible":true, + "width":16 + }, + "tileset": + { + "firstgid":1, + "source":"..\/TileSets\/IconSet.tsj" + }, + "type":"template" +} \ No newline at end of file diff --git a/ZoFo/Content/MapData/Templates/BottleOfWater.tj b/ZoFo/Content/MapData/Templates/BottleOfWater.tj new file mode 100644 index 0000000..14ab412 --- /dev/null +++ b/ZoFo/Content/MapData/Templates/BottleOfWater.tj @@ -0,0 +1,18 @@ +{ "object": + { + "gid":3, + "height":16, + "id":11, + "name":"BottleOfWater", + "rotation":0, + "type":"", + "visible":true, + "width":16 + }, + "tileset": + { + "firstgid":1, + "source":"..\/TileSets\/IconSet.tsj" + }, + "type":"template" +} \ No newline at end of file diff --git a/ZoFo/Content/MapData/Templates/Peeble.tj b/ZoFo/Content/MapData/Templates/Peeble.tj new file mode 100644 index 0000000..70ff1ff --- /dev/null +++ b/ZoFo/Content/MapData/Templates/Peeble.tj @@ -0,0 +1,18 @@ +{ "object": + { + "gid":7, + "height":16, + "id":17, + "name":"Peeble", + "rotation":0, + "type":"", + "visible":true, + "width":16 + }, + "tileset": + { + "firstgid":1, + "source":"..\/TileSets\/IconSet.tsj" + }, + "type":"template" +} \ No newline at end of file diff --git a/ZoFo/Content/MapData/Templates/PureBottleOfWater.tj b/ZoFo/Content/MapData/Templates/PureBottleOfWater.tj new file mode 100644 index 0000000..72944f8 --- /dev/null +++ b/ZoFo/Content/MapData/Templates/PureBottleOfWater.tj @@ -0,0 +1,18 @@ +{ "object": + { + "gid":2, + "height":16, + "id":10, + "name":"PureBottleOfWater", + "rotation":0, + "type":"", + "visible":true, + "width":16 + }, + "tileset": + { + "firstgid":1, + "source":"..\/TileSets\/IconSet.tsj" + }, + "type":"template" +} \ No newline at end of file diff --git a/ZoFo/Content/MapData/Templates/RottenFlesh.tj b/ZoFo/Content/MapData/Templates/RottenFlesh.tj new file mode 100644 index 0000000..620179c --- /dev/null +++ b/ZoFo/Content/MapData/Templates/RottenFlesh.tj @@ -0,0 +1,18 @@ +{ "object": + { + "gid":6, + "height":16, + "id":16, + "name":"RottenFlesh", + "rotation":0, + "type":"", + "visible":true, + "width":16 + }, + "tileset": + { + "firstgid":1, + "source":"..\/TileSets\/IconSet.tsj" + }, + "type":"template" +} \ No newline at end of file diff --git a/ZoFo/Content/MapData/Templates/Steel.tj b/ZoFo/Content/MapData/Templates/Steel.tj new file mode 100644 index 0000000..64fa222 --- /dev/null +++ b/ZoFo/Content/MapData/Templates/Steel.tj @@ -0,0 +1,18 @@ +{ "object": + { + "gid":5, + "height":16, + "id":15, + "name":"Steel", + "rotation":0, + "type":"", + "visible":true, + "width":16 + }, + "tileset": + { + "firstgid":1, + "source":"..\/TileSets\/IconSet.tsj" + }, + "type":"template" +} \ No newline at end of file diff --git a/ZoFo/Content/MapData/Templates/Wood.tj b/ZoFo/Content/MapData/Templates/Wood.tj new file mode 100644 index 0000000..b4c4b4e --- /dev/null +++ b/ZoFo/Content/MapData/Templates/Wood.tj @@ -0,0 +1,18 @@ +{ "object": + { + "gid":4, + "height":16, + "id":12, + "name":"Wood", + "rotation":0, + "type":"", + "visible":true, + "width":16 + }, + "tileset": + { + "firstgid":1, + "source":"..\/TileSets\/IconSet.tsj" + }, + "type":"template" +} \ No newline at end of file diff --git a/ZoFo/Content/MapData/TileSets/IconSet.tsj b/ZoFo/Content/MapData/TileSets/IconSet.tsj new file mode 100644 index 0000000..186df25 --- /dev/null +++ b/ZoFo/Content/MapData/TileSets/IconSet.tsj @@ -0,0 +1,60 @@ +{ "columns":0, + "grid": + { + "height":1, + "orientation":"orthogonal", + "width":1 + }, + "margin":0, + "name":"IconSet", + "spacing":0, + "tilecount":7, + "tiledversion":"1.10.2", + "tileheight":1200, + "tiles":[ + { + "id":0, + "image":"..\/..\/Textures\/icons\/Collectables\/ammunition.png", + "imageheight":512, + "imagewidth":512 + }, + { + "id":1, + "image":"..\/..\/Textures\/icons\/Collectables\/Blue Potion.png", + "imageheight":32, + "imagewidth":32 + }, + { + "id":2, + "image":"..\/..\/Textures\/icons\/Collectables\/Water Bottle.png", + "imageheight":32, + "imagewidth":32 + }, + { + "id":3, + "image":"..\/..\/Textures\/icons\/Collectables\/Wood Log.png", + "imageheight":32, + "imagewidth":32 + }, + { + "id":4, + "image":"..\/..\/Textures\/icons\/Collectables\/Silver Ingot.png", + "imageheight":32, + "imagewidth":32 + }, + { + "id":5, + "image":"..\/..\/Textures\/icons\/Collectables\/Monster Meat.png", + "imageheight":32, + "imagewidth":32 + }, + { + "id":6, + "image":"..\/..\/Textures\/icons\/Collectables\/Stone.png", + "imageheight":1200, + "imagewidth":1200 + }], + "tilewidth":1200, + "type":"tileset", + "version":"1.10" +} \ No newline at end of file diff --git a/ZoFo/Content/Textures/icons/Collectables/Ammo.png b/ZoFo/Content/Textures/icons/Collectables/Ammo.png new file mode 100644 index 0000000000000000000000000000000000000000..9c793f7a07483c75ca56057a733a9a96fc9d7a86 GIT binary patch literal 21460 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 literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Collectables/BottleOfWater.png b/ZoFo/Content/Textures/icons/Collectables/BottleOfWater.png new file mode 100644 index 0000000000000000000000000000000000000000..86015b65caf51c2477ee655144827f8c36319563 GIT binary patch literal 1581 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�GtSwSeS*P>uSG{*L3VrF9PGcR|6r7tHJlMHl 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%0DTen2%gS4)bh;=dxN?sY><%tg`d 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%0ABbcohv4RFm`2{$&YheqA~l|V2#Vc z+p9VF6Y8-yVzKj^yL;}>yqr|H>RavnaX1!ZI;n!SAS zpaY5IGbMVKqw2V~HiGfp6U6<*`c(R)!ks^|GaTaV{lsQw65kKKYZ&ztoLkd~))MM( zNl*EmMQ= zVsivG$)n@rzqeOpqt(?*YD)ePsfTLm7;t!gqhE*8sLK8E+RFV&FQ<(pr<|cx7y*-L z%-nGT8BvNiSP3I_?3JJnwIc}rT+#~9JeGM|D97(AO7)V6xdFPU?lijT|JvymPe#=o zB(mKdBZfSbpC9UXur zUSL1CuwXvOH&|NS+qD9Y2)KqN<lFfw^ZNLiOGe)?(dV>KSCCeMtz7ZZ2z%XF7 z&%CFY71=dd_BVTCQof}6Q^m-#skJpL_yfzk>=otZeK@j>)O3J39}OY_6K#qtUY^9RMVg1$A?G(UFKC+>-l zS@E5@_DUkaC0A&eiN^R0Pxm>Sy&}h_szqY#4yp<(d~22j1J3%Eow@2cli^U;ul{Y& zIRkdg?2k`?P;otYP)wE!4c)m#c@vkHmx)OMkDN5xcZ?ud3&MN$kA}bI)(^t@6wpCo zXWPPL1%8LbWj(rkp6V&$;MM}U@Z!oznUS@x?_}2PM%(NGtJp7Jme^+}I@UFL1s^Q; z)El2VgAv)B7K{*Bfv0y-^K&D7pnKKrRr#vLsVb(SCk5*rDpK8qpEbaDpZQ~ajq(}> z&uMOMh8DiMPVtgtzy~#8#V@a*Pn`o+7nk6J7fQK~#}@hKv!_y|Ktu=5$kn1HRyZBX z7?>gx6k&{OdPyty_jm1t`@G(ZR{L8+GfLFYeE7_~ygbtvFYa})c4+BqcWt+qkahIA z0iw;tCluY=+xtFjU4J7l{DYb4&+wmO<#DD}12%BZTxd`RlSHmz<{79*>JGbUAyCDS z?MLd?ebT7- zB9f4rnhL9J;cUv&)YLSA7X4)9Z6gAvB?(IS#$+$3WUbxH2rj9Lw<50z8_)=*XDG`8LD_z(0@7wrmae|TI93{8-3 z*;;+2TK(>4K9)>RF2S8mO-=a~(GmkaJs+8y(Z0EW1V4w(L}LcfmX#DK!mQ7VkDamd z`_v-F;(tCos-Il-gKMIihV{q?rveZ(GjDH^+1XkC(*zI_0D$uB^V~Qv-hDY>9(Cnj z$4MErBV8>=PxwZuM?g1&VD{RdKSQdrKBx@UDY6XD0IO`V z&qqCW*||fj*J)_jj`AG@64*Tv2<8ZXJc6%)!zwx+swW9^3u|*;tcH_wH&!kOfEZ@6c?+xS2yb;5M|1 zP8>q2=U%6x`ej&qJpNl~~6xFf?;H49t>2Jlb8 z1r=r?)42ly7hefDY25pE&AFqM$gss+E&3iD%ouHRs1io zNz$aTHrT3lu^ql%)O7d-)=4u%D8XqJY<0JXX z*Kc&JpWXlr_&00Kq_6z^;F);M$GIeiDJP^~5@I(|8ph8bN{c~wV>q!{6YK|k|l zd<&NZ5#L#pta+*TDMWD_l$i`EI*bGnr_0OEhQrM8D9Rn_|WgjFX9CLqZngCJ>$c^)^Pie6<=M_T<{%Z ztlju?;Wob>E51R%P7&=-8?XgTJ+G|l$<(RtvLVJlhkvCmRDXy0l`Q<~HLP$&q_;tY zpFaGyCbvFrPHAk15TQTOFc>YlhIIt)VS}}pIULAwa}fF{3{9f+xBks^xD4ZgRmN`U z>{WVq*AQzrC;s9;AeS#&8wZ1+-tIVJjz9856*=Nwwe$$_-Q!56m`37)11@YQzvwxI zW#2{$MDwuxwv)`6=oTSjuN9t%kCnKWp)E$+J>5=aIG2ntk*X)~r=Kg8IkN$M{(9XW zF)WTnl%g~t+c3(pV6j=(XH+`F5@*HJFw-egR=HHhp{^w)+WX?J!xzu)# z@t9LNGQ1AZg|J$k@jem%Gx25rvV1qozrm3w@)3Z8Pa*DZ7Dk?UN1P)EY@GLwO~#d36tGj2vL<15(KT@e>HRh>v#^6vsv-z?e#c-_k@ zLOfv%l-#yByqc192JhdA<^J+7vo&|MyVI5|zn#qJA=kTup!w(; zVIaq^dwP^l!+7vNGs`8$vc`nTD()VF;~(Wxwd8@Y`$35TFfhXHw$V>n{O>4A{<8{Y z3@Ev6y1R!>GH*hYE>5e7#LU6+7Q*s!yUh~)`z%zoa0c~jl{ilxMx1lD9n+g*&2KtJ z_ah;VrHg%qMak4pdFGrEVh+5&T+?Y8^vsS&{xp$bF# zo;uG^A30ay*}(*p2$dpr$@=#mpZ#5&;PowiqTz$Wku~%al9%b2J=q0bjmn6{%(;1W zFhzJ54A^`NrCqc8-!~b=SeCN4{fTvG<-5E&gRp!=^-$bRU=Ae6tk#n6f>wR6ww9AijF02g8I8P zHMxpa$}7eZF@0ewlo4=LH#;jO)cG7fM~-N6cpBRM?++S(|Ibz=tDQFmlU3~WMu%bV z&imA5^^Co->{?0vq#9FdH9s+@Qn4|WN z7QQ18`eFa~KR}bipU-js{U>I5{<|9g-3H`5GZa#SFf8HRs+?gu(Q z$h%)(nFI3liWLN*p=(P!w|smGK92EeLcXVms8ptP`G&Lf`W?_$qS`M$uXO?SbyYOf z*Wg66cjqpuhYlgA%+fgW8iq91@xz7pz`*ic6#yzS0f&zqW#V;BC_I4)IJ|2&+4@?% zhivT-h74_B*@DjxfVgS^^>x+!ZQC{;XkALaw}AK1v1<<%HPvM6>cNE64{hY}d3T-# zaU}rKA1DkpRaF^=H`b%I;fr5+ij!SEl*$Rax4+HSzi%O^sU@tb!}+t%;^iDd0a)_= zC3x}Rz&cN{RN%HLH;^$Ej2=0fI89me{NtF=;H;-uiYb(0K6>+qdE|R9qW*UZ2m2e! z(r1>T70kYG8sa^O$BF0ljlbW&eb0gMQ$I9;{T&AwF>Dl{eQ*({bA7!2%Vor=C9#e$ zleugMWa$r{X4bU3P{7t5n-3`sK6R9nM53rHeWl2Ebr;4@YHp^l7?aEQG5Xpu6iYF= zo?d$U`pD%A{OsA~gLXicEPskQ_f2Q(&Mk+6K&jiNe(G8gVbfcG=nPdzYAsv}Ij)2LDWb<<|z#4@hwI;?jXZ3gXtEMEE@?r*u5tvlX2xVLKJxX+BNW7P0k zoCpC)`j>zFu`^Ar6bePj=L)VnU+^bR^w`6lU6XYXFuY+HUIcN%tE*Q6?;3Dv4u}U4 z*k+o?-SvTLycRl7_c5ZOhFHSzSi_BD>yG~OV3InCQcM1ZmI+a_V_{Rm%WHl^KA*#T z#hdG1J}c=<0g!JkevAiZ&*0guT}*Fo#Cq_lCp1FauH%UEDA61laqGB`O|BtI9qoI2 zuwIiok8{EsYkxJs@&5H*eLz|lJ<7}((|KaeL8dljDU}j>OEDJBZ;zLV&_q6<=ru*J zuz(ds>J*U!r@;TewC5d07ji)6KfI7H&2C}Q&-ZZm9b<{S!a5;~rhRi4cu)vF5r%$n z2&q%7J5r=C_UzuckHV=EZhkW|u>D^YK)&4iP3Fv+!NQ;H;`UFErR0S~gwSa=?Cu2( zN*g2vt32J?bCmKar9v5B>G3rglB2yi0Xcu-7X*-p<}YC8tQNlUqaA$Y_HpzHD6i1Y zu=8*Un+Xv#D6j&)?1{aQXb+>SiMu0W=dhyjN}(>&?FTsEMUi@iQ-(4M?G@e|{&Orr zRaW4%#(Iqx!5WBFiq~Mqge1K&u?fg^oZ^{BCbD7ede*=2W4J*5&jpbC=Y5TPX14Iv z6`Pqj<$5A#z#9&nw&-jI8-_SzuwLU3Tr4CZR5oRa3T2YW(H8}HT|rqC?jrUNaKJiG z?7->_vDP2~ojH%G&7v|Dq+x&yLcBn#K&+!`QU!6*Vkyg|dQ({Z^_%JJD3YMb467tI6_mq(Vh~c&0g(!*z9t|sh9nF)b=Xku zhEh=Cs8?71ls8{lL*79WIZmHcL`D=SzySa&nzDlj=ZvR#s!Xm+)77OZ>VQOR5>cc|V^N$uZb%Qr zeDWs8mQ}0R-aa_-vo@bG4doMaA7;`QW)Tyx?%x(0R1)4e6dxKSG>BFp;NC8BYg3Vq z_BQsfSvn~3{%LrjaV%5kew*gcwNN$zsR`J)uL6_-rLkV24BRp%;@G;?9B6xD@R?r( z06=b<`y^xToJL|ai8eUVIHmCdh|sxyEr(V;HfZrn1ptuAbC=;wfRg|xf)^0)P~LIy t#YZnod@ulTp4-fsaV|&vOn~=&{TJmG72YrSi;MsO002ovPDHLkV1jmUB0K;9 literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Collectables/RottenFlesh.png b/ZoFo/Content/Textures/icons/Collectables/RottenFlesh.png new file mode 100644 index 0000000000000000000000000000000000000000..beb390440977a44a1de13b2476448709d93ac0cc GIT binary patch literal 1683 zcmV;E25k9>P))I{n-ANmJW zYSp5OH1r~&UZh4;ZHgh31RD%Cu??hZQ4+v&x5qPc=A5(lUVRvIF*YTkeQVaykc;3h?!po@dRP9tQdb znJ*SdbaqoHr0MKTlAljeUms&g6!mp={AuI7^3~TL z3Gy(2j2t=0`k_Ahd;3`|&(o9WWwBHs5l=E-%nYdH3o zvmlnCp+TBsF*4a4vBpN;nYn?8@T=EOt$Pza(Fh|m@9!1Jr5=CUgwRsekE z#e=LJOw!+%WU;(RUr!&E>H_Vp?f5~JjPcs^{Of}|7;E{?zGraUC;-+3 zh*+$#h#0gVaQw^#nwuL}K&$}x@(TwT-ue`ar4j@Ey;Qsky@_tBL7DcpIMr&2SYwPr zvB31Tn|%B82XNge*|D=IC5WlrB(b$5Vy(d%Xdd3kZ^tHyxGt%=EWbW+YRSLCc`zm- z!ktu_#)cTTZ>OlQt0SGw;JOhC3k4eL8_DMKT%G+V-`w{s7mgn%ef~6JETRR>(yJ{J zXfQRJ;+0uOhBp(9xRgtkWe0H?Kp1N3>l(;pGDM?MQt1rWW^XcnX&OODrPEw{_a@)? z>|Wmd$$v3cVVK^UL_E1(pJu_z0IW@=*gUI?5e51-h&31c)`gL0Pb zcclVV-^Z`|6bcKZGxL0D{aTdkaD4PF)(rOW_Sgh3?%2lY&tF9l#0oQ$*D*$O>C!a& zkG{--@4v#qmtP^)-a=cli_4QUXl)T=m>a*!{=t62P_GK0&W?_g&lfS;P+BZuwc*5> zF*@Vzlq(gCwJ0Zo6%bJfg2i(2;yZld=uvW$eMs~p4%)@T&qMkA~nT1)@HKrNUe;5y(ch`2b>2t#{z zbN8Yd0b>m&)XVDo!vJdh?MbrvBJbV0L%Hl>w8mJASMf2{qP50YA>Q4IABI#ypTJtI zSj2HrZnUNlH6RfoFyL!VU^G@+Fy@}a)%pQ-@xqh<9RAGHm}nHE4aN#4v}kRxB2=nA zQ3tFMbZD?zLtO+>4sOI{6Fc#lvLSt)+D)U%?dseD=l*=AL5Mad+ z1OdiXRKozz5Ab}A#d6{YKcqh1Ph(;&4T*I$#QUi4NOJN=KSqE`5EAMT6B-`ueLhrA z`1H0-tQ$;H$S?4%y}OyYco_!=*HI`DloE=?QthOv+M@rFyI8wnh~rZ; z{Oyf#SS=MlDjZW+u5fA^H<>^2HJ(TQ^Y`b%;6RrEqG+03)^KC&sTZ z<0wW)?>m1|09Yy_+jnfjaU5_IuH!Hq2Hc1>p_Bp#9I2fT0kpN8J9lN7^Zy258OTSl dReQpZ?cY62elF1vgUS^zpv$zn*_g%-Q ze)(<2S}leLhsY{9Aq1olgb)cKqEbbgW#si52S?uI?E`)6_~(;w?&X@bP65P+*M5ao z>n)6Ns8lkr;}sTu=yGC&EX%1>65c*KN;R+Y`mUXP>=W0qb<1WJU%iBp!Sxpm(RDzV z25U6dS&Xq{dB%q4*3;9Rhm>&i=wWX7^i2#6{EIK#dIv8(zn*0`-ptF}w~?k9t=Bi5 zf|wJ?sSLz>?z)M^ANg=M4?+YKk|dFQan)T&so2r~BDbu(jsBN5am&ivd3SuAJg=eB z1OzzakW#Q{$>+Q8KC8G8(?S@(_T^8}+j|u;c!UTfN}-gXEF3;~?q2&%(zHTRltck} zH7Bpt5K|@?)Vdb>!;J1AOr{zocDMa zu*Oi7hJ}|k`Q4*GCyJ@e#mP2BNQeR{Br;J1=g`{l&cS||C7d$>0EplGbvy0$Bm_|s zV#GR!F_sVlA6&G6XVyJ|k_zwbly@MNL`aF03aJu~whlAAdw}snFV6^ZwzB{ruDNqL zwOWI`nv!J+X_7Fn*`VH2qcOjSP>ofx#q~>Xh8UQbI6+>m z&|I{vt2@f%h^ zjC9%)liw`@^*p1~>2O)^XQuRL&cGQi{rZ{h6h#{;CBX;0_mri@losb4S+$4$zJE~f zX|Q<7)m-z*WfVmRQ)*O_pb|+nt1_^2=X=XFRp$fHg*blVBtA@q(py{vX9HFnDwP_2 z&p%6=CREatW>159qeeZiQp>9h?H(Y6z@C9u85`aRQ+YUF008mmQ(JiF*fFe+cn?xU zjMg~k2q7?k{uONN+r+jl8wnv0qG#XUA%=Dh;;hA%9jvi<@8|457vizMY~^rk3}Xz| zSb~p}8<4eFt;zES_4+)#GaNeb2GIwcvlQ(KO06-bU}XRP3kH~kczPR$j{F;IElLTT z^H^)JR^zR~ni8uG-g~SmF{VJ9g0g7S8Xe`cx8Da-op2!l0OA*a-ps*6N3g~ag2(6* zqxIy8YDV004-e{dOaJhers(Yb_{^C|1{Lzy$ieD-K0P*mzo~1QTAk(00000NkvXXu0mjf1B9>I literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Collectables/Wood.png b/ZoFo/Content/Textures/icons/Collectables/Wood.png new file mode 100644 index 0000000000000000000000000000000000000000..661a581db8ce9109adbb155bbab39080ad80e0e4 GIT binary patch literal 1612 zcmV-S2DABzP) zKz{3iTM1*y4}SalW-%KCAo{rE=XcQT-CGA_UWxerh*=a`zhhTStY(z?OK#2EW;+QToueLt+-7E0wJ zLSb9xt93a5`JIOjQyDE&8y_c*Bh-|^9x8$2H2PZ2`CD>nZg;^v>Pp|wJQB?k4C-D#N-6SzJ)@H>t?3O=F^PiGuXCAekA{2 z0m#q1ZyKRM5+%fbf|^QUWHQvx*QtzG7~eIH=Y>p6*64P+L{W??pw;e@&1W!8gCBqS z=<;jqJOe=#5duMkh0~7(a(^+aV zGE$&#b{xlSknW)Ib9Zn+(swPFDA z^lNqMO^Y~6Xtn$3DUGFe8^`l$cX}A6PJ5|C-x^|O46L3-I%CpzT(bErBl!&3jKNp$ zI3Z40EN z+qLn0pCFPPf9XvCu~iXn3i05fNeZPbm0})6QOKmzq|FrRjEV30q)h{Xz;axo&?gFD zICODbpF56ym|!^M`DgyX$lS&IyU*7LC+eZ3aITGC8g=~EC=0C z5lIXPhQ7;(K5;imBnjh~SSBc9?SZ&b4Xl=U@r@Q;Yd{<)bb2ng-gc1N58pA^6io#LiIiM8bB4;y_59-T@~ zH=(CfG~WIfv4q<69s=Lz#1qGP>XrHi^X>jG*i?=m5K9%;3n*2`nES^W6h$y|!(Jj8 z^W>vX5Jm~l{-v?Oe6_9?K)m!%OCH@@z#R-xg``j@p&AB1dF)AKB6;rh#!Bp#3oSqF za0^zZ9l2oyGo>PgKnVE#8=dVLUqvh46k`3_+nFT9&aQ6%GyNN1IkX{r?d-+?0000< KMNUMnLSTX>HVk3_ literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Material/Fabric.png b/ZoFo/Content/Textures/icons/Material/Fabric.png new file mode 100644 index 0000000000000000000000000000000000000000..86f1feaf70415b686b5e2bfb24adec423fd8026a GIT binary patch literal 1606 zcmV-M2D$l(P)ZZo11n=Ay(9L!HCy&x~9m5E1Qz3Lr?`z_8mA>oQvwn~le(}A{ zJ=@xn0{t)$2}$ETcFp2kfl87qf%(o?A7B`I(ky1SdmVt<=cHN2;2pxG^mR!*nKJ+9 z>r7YIcT#YfKqx}mwn1t`U3t>gDfxWPiSK`fvu9o<(h-3W#7T+}5kU~*>k`I2xT++Z zuG0IG$RxCNPBxkG+S$MDNMI=ieGfsTX&R3*hN`Tvamv45J4ZUr5JHorDS?PkI-zTO zf>BVrl8_KzIznw}>k?s7nxAt*C2!+UBHVsPz zLaB(Pp=)}Sl=!N`Xw9uh?;;Q|_B~o_dI4Hny0#+_0af7$!-&Eyh?J%(7bty^yiyk5 zctm)0(cO*!0Yl%RmBv>U%2?{UMruvx8zQA)1fvxFIH2MfU$+p3l=%fjBq_@aNS)w{ z9Bt!^l~HMCd-rkd$KTwd!t!4b1W0XguENAI&Xp*s@U^EOM*5*6n@kA*Yal#7BaTcNHTli7@}8;DIp?Q232kryRe8H&XM6(^KMj*^O|_9$go z-+zcFAOF%)8ZHxvLZsF>H%CiDKA$6{rYapaPRJJv(k!J|%$cpO(f9_tlF|1KN*UV5 z6G?-wYqT-siwj60Da#xYMfk=eWlYnw+bdv%!M8QmWaMRzwF%CZNUdp`7OgdH7m}<@ zDCQSfnM@e^o;X_}7z1paF)|Qoi*t@Rozevn$#jiSCd_v2CYjDSaLZx7`?ZHIsc4+QF_fwRPG)~Ej9BDK#Vswm<8f{~K zbNpwN<$_=YAtXgUC!4Ht^v?J5ms2M%3%_}xwc)lq?m|h+55N5|L)Q=nf=Ea{`kBvT ztfA{#Vxw8i&$F_+M(rFzDXfW!vlYf6vm+XR z`h#!q#}hv%2qLC?_d_re1{YsBfA$qV@`(p|>BZ-n?O9{v$Q^iJVUrYJx14<8IlS{k zQgYv?zOWQ~8@trz1wn9`z(e=n%WQQwZCmr#7mp*NkO0BqyYC?kC2ySjI|tr%I~%vZ zhu=N>6nk&H0aw-pk>HaLe(Oqr>uzM1TC$;UaIWO#lfOb5NtzmzlDvBA1UGGbfUa+O z{p>3o`}3c8_=#g%VqGujwi`E_Qh<-&vyMzGla&cpOI%s;2SD)H zbN?VV3aKK(NNj=!SFN|qwi`^~KQx>K!P`3b{Fm6j0oz}lRD%#JE&u=k07*qoM6N<$ Ef*7U+u>b%7 literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Material/Leather.png b/ZoFo/Content/Textures/icons/Material/Leather.png new file mode 100644 index 0000000000000000000000000000000000000000..54696475788323b82eab3a7e16ec110db1722a2d GIT binary patch literal 1453 zcmV;e1ycHnP)nK0Av5_9Luwl8pcO*Ni{MKU5kb%w@hRwoFN(g1 z558H!B7#s5wD=$*BHD^gr>UtXQ;Hw4dB|iklbN|Q_v74i&)$3aaA(p?({^qqd2_*m z!(pHG|E=@id+mMT|2-6di0m|OrvYkL;!2SWBJ#D_!-zm6qENiU8v(^n{(N0_3$XCRp2lk@Xt_puI01zK&tTjlq0YGWZmNQyGh=LM@LV*&*S2$}Q z3P5k.yc3Pcd;S1U0fG4`JYLA*eW1YZHd+U-@QPafmqGc#Bnie3OcQVqFYdQORB0z6pytDwb~H%dd}F$C}Vpj7#|zMH#_ti zZOTTI!^dVeZF(>Z0OWJW#>lK=_UUsdt@-Dh|0Z=7>k_gwC$D7;j|`F5b5fg<)@m57 z!DzgX5PDQqV0dDJYnNW(>(Bk+eXY390zm!hT0;Q7czQny#hG)TWa-u|YQsZ}3=dPw zbLzD^HnkY5K|DTcR&FjaG&(}%d*}$gqD^z7x#JgjH^5!mpU*7{z*o*4;!~fQWo>1d z%sKLUj!hF#^m~F2+<5zKrlzK7H5vq8QC5L$q|V0r#;ySF1(D!;pf!ngU=%S3-J*vt z3#!T!MQE=#XpfB2T5sa39%ZM?_`XSsPVrCx0P6Wy7UbfEN;l6^JpS&CYFlAb@74O;rWfS2xf~p(FyZvT}#Llas72ub{O?ZSD&u(L^B4@*Q&z zd>(lA)FekAKf?0TT7Lslk)qRKd~%X*r-L;HV+=|wjL~SL_~?n_T$_8H@4fiOU9D~6 zN^NUI9~iApNl{dEx?PI0OHuX+0x@_b1O!28!C6baR;NBR%IzCB`NUIa`TnzKVEbNi zx8i{;0EkKxB~q3pCP^R$_KfeL-E5Lri&mhGCCzi{!^2pYkT}bog+)%BJZyZ7eQHNb?Nm5=>@s+MyC?+*xA(!4Gp_ z|0Do&m)<$V3=AL$Js*gnA|@JV9A(+XB?;D~*wm8NGBWFM)?uwf>Hb{UyJrk#3|Hp< zMp3l*_6wI`b50Bn5TL3&L4gHO8m%=ZF(iq>WjT3TL#Ga9HHkJTqnX$@!TjH^((M#n z{Mk!e>F!R*K>^h7uD9ixBg0G|JIcb%1vH>df-#Q7Inp#m5>2861bmF_+c&}0EC1jd zKmPrF!Vd}nfDaLEO#j5B4N7UyhA4sni8h3wm>8*HUCNcquW|ADm)}!(8_@uLU@PSO z;bBgmnr3lviJ^LibB=nRlV=%e&GFd5DgO1=e`s}@eD{~Hf3Ubx4-5bx7d|%1$&)kG z@{HSy%edT;rH;owbb$G5^Zf9)Z*D8_Q3C+T`NMV6G-Y=739>B3S;wWnyvlPg|93~> zM*#qv-R#2Aaa0Uw124|64=nyD0Jec_<$RDA)kFT&Jd*eyOEYe~rg$}W00000NkvXX Hu0mjfGq12X literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Material/Paper.png b/ZoFo/Content/Textures/icons/Material/Paper.png new file mode 100644 index 0000000000000000000000000000000000000000..a2745c27a3b65a764ea720dc89e504871837eb09 GIT binary patch literal 1603 zcmV-J2E6%+P)s#<1n|N!Wl)BZtTYlWj-$avzz?eknM~i0|jTNrvf>L;X6`{bbR1iX8Ne89I zJb31;x^0LZWu??pUwQy(T9m3pT9UCEQ>|1uc=QmqTSr5~t5py}VB0m&N=(ZGrO*wN z?e%MX;=v~-j)V~6rWB|rAHAP@K6W=625z;6rW9_?N1@?V8fXG4wL0Y(Y}=-!#IPJF z$LN~D>e6}cJN2!JAcPQTH@^Gful~-3moH;Un{kn0*cC>@636pU;}MQqV>}#TdoHC= zNY?{OOzD88c>f1K!nr^E04A)P8vy{s(?9zw7hZY|&5{iB6x($fWjSu8%6ODvS1OE( z3~4)*!vbl!sPP!nv?-OsFytiKZwmk*7N7Ye7hgD!WqYK91X-z5q!H5f$p!;#+oMP` zOv`0F$}yzPcs#-|Es7#~*8l(*(&XZcFOY;GSI)nL<@jVt57(-w(xJ!` zG|i;QQw|(F&YypG7A8o;joWZn6u$Gl-|uqp+%r%04<9?>CvlHTb%rF0@M?APBtqI1 ziafzEB}JBD==!w-aGXwa1!;RE{Wj965{F%+^oYVP!jhz64`mpnafEI-cMJf__GoRa zB4v$EYZJ$HiGnRG+o2bwsa9h9N?fr0L+!0jw>(iDkRATdUZXO{ckmVY&3W zEp*eO*K1J_B`UCjpbAbyIoAvBuQfoT_;bI9r1sk`z^h03%@?Y zu}?m->%^R-A5h;uy};ok3z)V=wcY?>;CUW-mSbCzVpyQ*I>RhMHzoaG3(KzJx>Xue zb5wkvT4R21FkfsquKE%{bvLr^jCh;Ic z*GyU)D_EAphmYJttuf0e&uGltMH2O>HRgzd7G7hT&h|3Z>NIb>`mY_o69eRVjv5b1 zvIuF~BtcFXg$#>=dms1=f|7b;o}x(br{{?KUHryAx~&!b#ysuyWn8by%F=68s#CWQ zP?m~3A0kVQb|<1NhkW$-eMqMYs-!+MN0x-trsnB)oA^_6w6~Y3`TJ7dv|Ls$y@Dldu3dbYJdJtfpZ{QUZS5xUcNBrgPaWpK{{3WGj%}E%HCue)D_F_)Y-8-W~64Uryh1`wxzLy4uQbJ%j)N002ovPDHLkV1i_D B2o3-M literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Material/Rope.png b/ZoFo/Content/Textures/icons/Material/Rope.png new file mode 100644 index 0000000000000000000000000000000000000000..aadc1f6a52ebf5a41d61ffafbb7d13a31c3f2052 GIT binary patch literal 1461 zcmV;m1xosfP)BtEk#EAqOYcluSX>O_OeXx=(;E;*<5)JHXX98Fm6etJ@u@e> zOhLfa889zwS&L-}mabe$I1<5gJ-l#;a77Hy3o~-2mlYfSGWPDz7XBdv;{nVw8<(@F zymX4ux5^?oKc;^mUe7{`B0mAT9w|;}KYsQ-+@m+1k7Hrm`~n(5+<*cse=F*W6TrxEG9KKMXIKnNM(e>`#Z3N zh3DDKo>j$?)xW{D9sF}=NjEJ6+oHE~FSl-feJswjGT_S+QfiEb|LoXFG8w0~W)8JA zX`<06*^W*E454Hd-5q-%Fz7%{Hv!`SN{T>hr1UA3e7aBM=<4bwn>~Tn3eR=u+`Su( zh0+?O6x>Kc2fNDt%O`fb$&GAEI~q?j+FR6wCLN+9Ko0RSMSqOT`Mp-`Y{Ni(CP zdCm-$Cs!; zQ-A$j22T&scF*rQaj=smD^^l@O`4ID$7y@`)v4qO%YCxy#=0s!;;mUVnLaGGyV4HKKOllz9D zp(3{HAbo}9*c>}}1YIhSsGh^D`8DkM`(w1f@fiF>n@%*4T+}xP@gu+($iF+j8w+;- zsua@K1R9i71j?uD;9(pAo@24R?YDT*DEt5U6szvrHsK&MX%{@X?R}bCTKMy(6<6*+ zTnZ$FKq-T8Z31Pup}B>^Xr7wdG<6HESFm{-Tnzdd?cCdvVnwS2)Rz+ejt z%eGj(zLi43#}=zAur= zAf-ZT z9)G2MO!Joj05A`(t-}`JI2PfMhwIq5j>YruWXAMNJCSdxZ%W) P00000NkvXXu0mjf=d!`j literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Material/String.png b/ZoFo/Content/Textures/icons/Material/String.png new file mode 100644 index 0000000000000000000000000000000000000000..e5b737d9e88e2c53fff18c559409fa5e6377c1c1 GIT binary patch literal 1577 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 Q$p8QV07*qoM6N<$g8!n*6aWAK literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Misc/Book 2.png b/ZoFo/Content/Textures/icons/Misc/Book 2.png new file mode 100644 index 0000000000000000000000000000000000000000..36476439428a35a3f1f311299ede62e3b27dc3f4 GIT binary patch literal 1640 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 literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Misc/Candle.png b/ZoFo/Content/Textures/icons/Misc/Candle.png new file mode 100644 index 0000000000000000000000000000000000000000..668d746f51bfc4f0d6633ed8e37397e845e58fe7 GIT binary patch literal 1074 zcmV-21kL-2P)}Egm_THH@$6^zW#O%8_iFn{vGjrz8??3mP8DWDkvyFxU zu1=5}O%S=^5CCr24jXO0_{LTi-`skwkk+xGye0&e-r0dUVeG(}f6ez_5&*!D6yy^f zmOs1?Zi2+E5U|T1?ZovVAI%BNiLl_F4-<4n>y}pG}d1qxaAkFvQkd5n#U@dx^7O zzP7%wa7eGmH%G?U^Vkaf?R6^*O%I{{c=Sak?zoG*?BPVwYMJTrPdNE;mtBuXE?n4) znW15g&ASi%mHW2+hIwA#%O1VyElAcSFDJNo=}}@Bu(0$9<@k2G6Wf^Hxrg6Qz77pZ zG!bB5y?=oI^mh7FTd0;V;j#jkb?}{%!Q~2H^bwz9;uy@$la-^KId-s-h(>>bs$n>A zIZiS}44gw;#;&KILy8{d%-uj_Fn1bp4#~PrQa7_;{`4$bRV>fXt_#7hFO?k0bHsP4 z7tc{$JcqfQrMXi>y}ufb2qf>A{q8v3Qn>fQ{p2H))Jx|v5sZTB;%RUhVfA-3DxL8i zgu%*f6o7!wh$194s!M->8JI9wn58qa8F3EZnIu%Jgn9)j#u^D|Vu9>Ce2k^VCGZ8` zfBrVAfuxa@^FQITKDZ3B9+H=M-^EGEw)>xl21TiHDXwcHs*xl^H6aE`a*zTu0fS_a z#1UH*!^U+$qY;Ba-X%p?nEwG+jFTiI;jV~q>&~R+0vZzts%V6iAZj3)$MC2+L>NU_%ko9e$FcJHpK7 zJIRX<^S}N~R^*iZ5wfDB(;dUP4n7l{D=2#k1!PEDY(T&rqF0X2-R&N0M~eVx{5n4}LjV8(07*qoM6N<$f~~RlM*si- literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Misc/Chest.png b/ZoFo/Content/Textures/icons/Misc/Chest.png new file mode 100644 index 0000000000000000000000000000000000000000..c489e1963d6afda0e9f13806c230a175472ca481 GIT binary patch literal 2052 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 literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Misc/Gear.png b/ZoFo/Content/Textures/icons/Misc/Gear.png new file mode 100644 index 0000000000000000000000000000000000000000..ca61852a5dabad6ad5222ea34e8dec005bc82054 GIT binary patch literal 1703 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 literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Misc/Golden Key.png b/ZoFo/Content/Textures/icons/Misc/Golden Key.png new file mode 100644 index 0000000000000000000000000000000000000000..6a38826da77794392a0ecea842f9272b5463fbf5 GIT binary patch literal 1274 zcmVq1Ai#%Iab!StHLk>+mWiq+A?(T6oyj=WG!P0>hB0*wBNW64-^U6EkkZEF z`MUu`bOz!9kmn9A#hsdjGbsh9D~+!D{F+YJw_oAEcO63u;4Rro)vlZT<2O0A zryj#Fu*{)>#tJ|^5tb&F zX(FXH#9z#tFrb-qHeaM<;am`cny+s~#8~lBcO=9Cn{DBSDul3xo(tm0fIn!W=@Km% z#t0jit0d3N~d^P-4M7~0mPPuAfb@S`Q{FOYCH>=w0&6-fryS# zep8c)qB?Q7JUE=LVI9Vt0YGeR(h!&!x=C+qCqhbkPQA#lts5gC0AgL;Z8{D&;BioyZo>t7nJRhE{A};JN9{{m>&mUYqbO6=m;qK47qQ}MsAh#`1 zm{jN`JHLPl-r3kx4*~y8kkEDfxrmSiaJwDY><$#wJ;YJmrC10-;LhKqPRs`^^x!S- z+~}pZ-eqtEDndDq~;BT-2t{Cl{oGUkUqhU84A<>c^!rppts{3J!h_R zUjrj7QB*s=)s@VuekoFKNh_#@ah?JIx#xvcO3I6Q>iK8zBWT#Zoz4?&tora8x*@rI z^fWe`icPg6YyyD<%we6y+6!d;t6qvL=8~CH$o+eNaiOt=^}BCG`;!2TuVmv}yAajw z;gPa^1N7o;M)KI}lbBh#h>V;ff_;9v+fK9iwT^y2gXa$pwErOrV62}&*4L&mvuY_B zIWsVI$@Px&BZ)`e53Yx zldh9TP&}!L(j5^%zWc0$(uxvti)H|DrRfBDkC)Wot{JX z<8sRnOq??dyJ|-d{mGOkm(u#NFJTbT0CIDMAip4!$up;5nv(Y8r%BJt$Dx4Y zP;e!CxpB1x#CUG=11;i7zPUh8RiL<1$H8dMS!jL{e$H1WX)eK0;qV!U9C zsQ-cwNE(w?)J8z95R?`}TWM=8@$gUsXsgxQa(=&=z4ux^{CYpVf{8EeWHQOj%J=)3 zHEXYx4R5ah^AZ3vyI9P*FXa-NmmM!6gi8tiaOE1tYflpbP3^e<*&Qbh&J{L*ou9l9 z34#?PC1w4iKf6%;>4)dZfPH8AY9{)D>uy}i#LNWKGgH))W4y9!H?BB7@XKGHDQbH^ z_c3DCFn8x2h!`bj%0kQVUq|`J?tQ%L$3I^LAtL7mux~D3&DC=g%ue;0otqery_{C3f)%x2B%{Z>A5$~v1t;b4>4i`AQbqk08cz|_3+I$wo z`2g%2%U3f!-eY>AVRp#`)60IrJoszRz7@fCN` zG4D|=xSY{8QQQI+8c>G-ieV+8T|pOGY?vseV2Q;57+4HsRdO+M&h)E>5F^2Pa@S#9 z#3&F9D;`xva))*id^h@#s7MHi2&iBrG-tGHDeaIvRN77#6`?%z@}Kz6ftQFk-$X72 z)k0FB6tomH8N=fP(x64VJQ7WcWkcJJG8mwP0XiIx?t>OhLu}X)m%WX=FyP4c?Hrju z$i}C)o$3W=&4R8dDT5WI%Z{8Ac>p2?;_*SqT^@BX=RiD$;1ygkD2gOSq63MDXH)~n z2IRqz;qi_(<+HZoqE7hWvfH?N?JcGdn> zx}vTs>MG)Tp6Dx@$uWH6aXyl}3{}8|h>sCdp(LRlw)}P19`4%uqTb9dsMxMh~lFs29G~c@h$|!JE~rVRF0gKl;H1wImkUv zY+Gc0IRF6m@QO7o{mcWTEsxQ!0#y^KgChh_j1CtCM}Qb`0^SF3j-;6*uN>muC!apA z`Q-ut*!Neg<@zstn)Z=L={1oUJQHIzRSY=i803VQVd6l9V#dPJV|@6x&s@;_N&o=t z2P@Zd-De+QxalV}jc0Of9OoDTq=W#4Q44R|mXANP{i5bq3IJdauUN}l?z@}()Kg52 zjXI8qh008!- wYgXdK@!ePVU$OcB0su~*g09&7B*2^Nzd*(6ghew;VgLXD07*qoM6N<$f|N7Z{r~^~ literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Misc/Iron Key.png b/ZoFo/Content/Textures/icons/Misc/Iron Key.png new file mode 100644 index 0000000000000000000000000000000000000000..05431f33bc25d3b6b96d5f26153c5f3b5c3e74f3 GIT binary patch literal 1233 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 U<<5;w$N&HU07*qoM6N<$f?^h#QUCw| literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Misc/Map.png b/ZoFo/Content/Textures/icons/Misc/Map.png new file mode 100644 index 0000000000000000000000000000000000000000..dd03538c07e2a596423dcc34f0121993e8dc0ec2 GIT binary patch literal 1619 zcmV-Z2CVssP)!X=`=G|e#E0TT)rY=V zqluTAXqp&(^4cbfV9jlz#9fa~qoZ?w7YvS685W^Ct4M3b;BNg*0BH@BASaw|Ct>1LlsK;T~}{ za04?22TtP{Zp!tmmnjw-xPN6AO)brsDH4rqLl>A;KZ{(hfJ=l744m0V>ykB-vM{L# zRSZ={)i4Z+!oSX!YvH4-B}o#lUw@Mj1E$76rH|vU?4@$<463yP%!T3Mp=sC4tpNN} zk94x?ealfb1_v%->XgryM|y?G;VUmGTxpc1+8;!c{n*HPKMoouea zVEH(?LIF=E7s3PpB1(*os$!|44y8MqX>FQ~E0_yn8C0R^gP*|E7#nx<4kpmB9K z7OOPA{{vWzhzW1>9m5^^Pwj6098RT-!<4y-QG04jehj>y<&o1LyZ2 zz(r6|%mjC%wbX&Rq9nws5n?1tAPvg=2UjAoN(>{237#<$vzmyf(}1Hy6FeF*I2x3` z3xgQSRM!LuwNNkYrGGpw=@rL2wq{(Tt_SoVjyHm!M;6h#4YExm=-|DlrvC z(kda1geasTA`+R`)<&^78&yMXJPYGQSQDv@?Sd3cxr3Fo-u_nGGfwqN<$QKI4x2vcbv**k~Z2UwT$AGy32?ngVX9;+MYQpZ9 z4si6?XmK{~E%`>x-F@=|9X!19J?wk6mn55I+x}A%`~d&iGhZQ_ z&9GwC8iuY7@$#;n6bd=WpK0j>$`l0@&4>npRYM_dnco*?B>9ko|+s;k|}n`|J#4n{tfTcIa)6> RFIfNp002ovPDHLkV1im(05AXm literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Misc/Rune Stone.png b/ZoFo/Content/Textures/icons/Misc/Rune Stone.png new file mode 100644 index 0000000000000000000000000000000000000000..c859aa16d83437ae9e5088765bc5dabc939e04e7 GIT binary patch literal 1574 zcmV+>2HE+EP)Xg;zzX@qlp?5&`%D z(aym~SaRDPI1$7-Qc8@CHaYh1!>qjf)04a=nTuREfIaq`hY4ARbB+ZIZ{^I$E8qkW zX3d&Sb8MWLDoz|90)rK6@4p1%dI4<5;3nqGTYwJ%C!W#s=h}i^z+hn39LAgDBvn$3 zAj-+(L#$Z)z$A$40kFphH#29>e43+8ocD+ahad>}34Onp4sAdii5QibDpD00dhQTk{?ljKjDcBm89H(p z0F6qOO0-JER8Uok!w2^B_3!=S(k@U{z)(ww2`MF_YtQ!>OCgnwvrV>j=iV;VU;o%oU;kA4rc9?XW$K0Vi^M7ttAbP|VwG@NjwVCZNU0)LEi@&XqvMR8AEPJ> z%GNkVtDr1elvP2iC?-{WCj(}RnPH|>vEtyqy@V`~2hWmaA7uQ@%cyf8IZ8pWIz7D& z1cx|}!%!2RKXj0oA}L0ym?(--@>&-bD~4V;%#XM2?d<-NBQP^m1@D!p5lK**ap1|_ z+7UO+D zMDW1;n-}9ma4z7yka>p_p|7u>tQG)4RKYpGXiS>{DUnFTGNLh&Vnr1brpl@R9OFBi zem80N7hguUcIiU$JOgn!96gOX!Fi_5m`MnpEX%l|(TC3ih9DSDpfPniXd+p{q7q|5 zwIW3&rNptLNBREGADd);Ie-p?^Nu_OdK%q$7urA~^fr2#IWU(HG6V&{JLvA~Lt{cy zM9olDR255!V?#%IXv-6qn7?Xlv6jQs5Pf9t=J`LzOEYrNr~k_mvf<1LT> Y17CCZO-@Ix;{X5v07*qoM6N<$g6A>y@Bjb+ literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Misc/Scroll.png b/ZoFo/Content/Textures/icons/Misc/Scroll.png new file mode 100644 index 0000000000000000000000000000000000000000..a9150e0bd121c5184110e3e5a25f22ddf3242648 GIT binary patch literal 1421 zcmV;81#{5G0iXs%S7!VPP+$2I8!Ap$sicu33H5z#^CL~^hiAD{O z7-NVg>Vt_I6}1o)&W_+Yvs_qOZ*bTXNl@5?{`{F7q< zXsyX}oV=lNu8AVwWI#WCZ#9mzh=(5YU-+~~=8Pf+lA19~#zDF=iS~E8okl%ZGqo^4LsDFRjFK zeT1!$wuO{7rYY&xFs9~i_SMxg_=@Q?t^SBiri;4wp90W%DMBeFw(DX$3ddGhj)!4N zq_8mzllG=nR7|{QgUG13R0D$ z$wo1vY=-8ItNHWK6FE5ay$|R+CYCUH+5{>tuf$P4!txNdgOCnF2oCL7O=3tD*=&p` z8}ak*?bJN7tY>|$5A;Pq-#lgjH{5YEVKRvqgjj9@$MKPtg(+ej*s&I`WGGQ4OSg{r zY5z_p-}&Ny!2J=xb8VETaDxEbiDNr1!m^Rl;oy!sfwz2Rg7-#1-#WgK%E5)C3p@s<14fN1 zXUp=paomstjdi$%g>-au(6V(Cw>LBZt+IT!S)+Yf|2z)P&vR$Nfh)IF4Y}%UY zNevlF%v9(o!@TGIg##1~O!a*B8h)~XvGm<<`1zMZNZUpL(zMyLVKp+9#t=4LQAFGR zy{B!^{>#z6a8DBeAnM3q8YY$>(6nw1DwV`EExNOC==)~oE;y~r8K3XzICZR7aq2bv z=L+6GiK2=!+(Z)PhO{&`v0!O!zd&b;QyY;17z5`EHaXbx{r?8fZF-is;DUd# b`xAcyB!`;O9cW2j00000NkvXXu0mjf$V00l literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Misc/Silver Coin.png b/ZoFo/Content/Textures/icons/Misc/Silver Coin.png new file mode 100644 index 0000000000000000000000000000000000000000..3fd8a1bd7b61c09bb5ef37046ecb2b9ad4ae8722 GIT binary patch literal 1560 zcmV+z2Iu*SP){rxm8p6V&><^XA%rqc48L;yHdYmMDgv+uiBW8xp~ z{CA&o?m3@)&wcK>@UH#8o0_}`AykX2>Zq3M9Rt-{p=O%c0C4){XAl!1N>EB8A|MuH zBQmpdc%PD~ZMg_JW02_p!j3yX&P^ZP$obb_2LzkVpv7WsgpD%HZ*C(1A`xlv3~A{c z+4@EQ7D%-ggxhak$LH_b#@JuSu#v?WivpfH_&6beLJ?U_#t7DGZu{y^d|beLk3_S{ z);3m!nB0O&0O6CH)^Nv{@8H$ruMlOkL?+@_PaZ;R!@}-%28P~CLt`s1{O)NoQG~V` zPP}vsZH4PLf0k@*J;6C@=CoFXm<%A*q{-L_9|CEb@XRlMNn=Zn){bTd2GzRgef-j9e-E|zF&YojoppNI##dIo6i?&09RU0gVK z?qWw~)&da)0pcV^DTPuBttY~?7>uzDZCJF!^_*k6t#qOp-h#9*vp^XI-oDPKg1 zLE`{;=zH6-Mnh0^E?YvH#-uJr>u6>QSYuF1@$l#clU6QQ-HK9|DY6%-J>4=4rB zrDU=-*eIf_Z!JbCdRF)G;JtTKcXgC?+XMTt-#+6DzjB`G8i6LOJ32Cx1puOFLQ{vYA=*4}Fl}Qo7d+ z@S~Bt&>|25-Y2a4&}M$Pbl9XeTa+xG4&j>(0@c0q__~$Wv8YmP> zl*$(-3MtS^Gqip)Ml}8FuVL@@FY%L|-@v6M(xk-IH{8e%M(&}xrG^8*W8Snnu-zk^25)hZ#F@ia7BU@?}Q9`z@4KZ&C|N z!SdDbXUWP9IG^I3BTW<1G{(D>WOI8gpm?ErQmH z&)oAJd~kpw5P0LvYk2R8OGREeeiWQ1j$>+T8^~WcPcc7EzEI#3+wKG2CP4LZd=YTh zBfsUu$-k2?lqr;A%5lobowp-OAqu>Y@gXHRhr-j>zn0#mtC%-`0pKBcoO7%kT2;Bg zGzwgDZQVGGh@yV(TtotjiMjE`Z;mj2_ADU;^5f^JtGkT2RN&;v6O>B@^5f$y=vct= z_uO)+-gGabst^EMHw~jjV~i$~&ETC!3)EgVhg-JZ#@u;16oE6RPZ7Lh;fjq@YW=4G zZvz3?vT^v$WC4Xn;9dKl+dl#4VO?{#3@j}G0000< KMNUMnLSTZPe(1UY literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Misc/Silver Key.png b/ZoFo/Content/Textures/icons/Misc/Silver Key.png new file mode 100644 index 0000000000000000000000000000000000000000..a8d1a881a0e75782560a98d1b3818879143c4e8c GIT binary patch literal 1293 zcmV+o1@iidP)Y zX>3$g7>1uSb7!X0ZI}Y>P?=(<%XFJ|3LT(`7AP8RSe1%fD~kcKKuZ%7B!D6kz+lB7 zPzwQRY0=g~kt(t%!Nl@Y!3O^jlY(MMg9|97+dckhXVU2gGo3fN$;~<6ci#7Y%lWRL z7g9=m#9$8MVV#BOF;#qJb(8PfxSS{F%t0R%j83OVXasS|Go&vf05txPZ&_D}YkCf< zD$yzm8bv`-3|zm~1cOIrNO;sfWD4Zw;+Jta9Yk89Xs9`YA{30lL72@Z@>i_ozq@y_ zr_Uae$FtyX3e?UHf`as%IQl8Ot1o)iH?5inNJ7F*0F-Ze4WZQ{5Uki({@~O|DIeyM zrOW2Z#+owO3$MNHC5vR!xzFUsn_iVISI^5E*S?pxe!nb_l$8vycf;oz=xA@Jt*vd) zy|(st?zi8=YLBP&_TT*T*B$iw5ESjuG`Hk% z=lR+N0J3n73sgzog1J3ysL{~+$8XpYlL#LbL4so<7f)3))@sL|lz>q5XcPmZBU3$` z?k@000D#QTbuii#%FMiHxOu&WWJd;J;o-!kI5=H>5NnbXDJ5SXt3o2!x~~GzU>=jy z%Re#!(3{u|E9dgq%$bCRg<*}4qv_07m?C57?rdXz!Fm8n3v%zK}!Agz>1|Di*7irgNt;MOo?Y>Tr__K$KN}i%wB`3)1`Q@pl#g(B0k1)ho^X za;2FdqX9*$p{wIQQXLpgt)fL$B|>=b`8|x5<~hl7IWZW6Y5wU7m(HCI*_k~CCp?|A{aZQXM$D=DF? z>po{|_IMrU^DtVua4M6hP9(;bM0B);+M|_h+27drJh`=K0Xcb3p%n@tVW9*WgE5AN zaiO7(CF{$<&n}Qf`O|Sta}k@EOib(qzNxQg)usxsbKJJ?tyzdpuk_p#LW54PXU)5Z zJ+{6IkZ&xS&Xk;N;^I?CaHP>#Tg~#)-Gh;PdB_*KoIyfb8ebo; zr?6<-aO4k!Tfl>gP!_+EOQvfQ_7o?H=@~TE*N&LHFNPB!ix$ryb8;5R4hM-2Cv^wP zS+aUZz{tH0>X!n!>iHb9re=|rk%2WXfrB4@z~+y>2pIWrDUeI&O~IMvB;IakY;?4& zD&J3MM|U822cW+IS(xV{JtK{z)D*^AqNv>WiI|u@jU}tsu(LEDeEjS6MS#qol}19M z4U^e~Mx&vs;t;8sPE4jSgjP#I@mp*!em0;Yydt32>5xJY92!FXv3lZ@>_kLFU>;-P zhf}pk2^vkn>TiGmQGMn|T3T-K-Pwy+#*G6Ye3Y4!l?Nzzb1yY}c7hnu03CqAxx*a6OD+OI-WNl~ zQ`DWmEMI&&3uBN0trFOj1l600000NkvXXu0mjf DWSev= literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Monster Part/Bone.png b/ZoFo/Content/Textures/icons/Monster Part/Bone.png new file mode 100644 index 0000000000000000000000000000000000000000..875f234d3e50de9bb2d9c3cf3a78893c3cf60f19 GIT binary patch literal 1110 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 IM6N<$g6g;QaR2}S literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Monster Part/Monster Eye.png b/ZoFo/Content/Textures/icons/Monster Part/Monster Eye.png new file mode 100644 index 0000000000000000000000000000000000000000..46f7dd9da64b0c56b55467f7b390aeb59f92ca3f GIT binary patch literal 1442 zcmV;T1zq}yP)I}eOmB|m%fLfsBb|7Xutqy zKvIMhkreL)7vBEGcey@mdG6vtCyolBFFr0jJjpqG{@cT9LyN`^^&T+^!ysx*LSh1q z7%V7=IIg_$8rQZP&h1ObQ2=z~^dSD!xv!(KgVdAyT}VB`V7n3c$5z8*Cmb3*76x$@ za2Z0*f8P8VSGQZfxCi2X0D9p`!%CTP=JPKPmWKvXhlUnX2PmQ*Bf_7q?DE8^5oknG z8iJ<;(SR{1BR2o|Yc6j#oWB(A=-+1>T7k7`j`$gb4tzuM4G>A{F_ORse*e!IDFrV5 zS^3z9#~4)}`_wl8`0LNV22oIY@+zaO{4%NK0OOIx2)zBqYvh%~<&M$BaqQ8Ll43io zkjU-ZH6caN2*H6QR1yOC8-JtsJ+Vn71UY1f?@xh#^Q`0ev4XP78I3YrZm@-r=NV!x zNfiNp^wuU(K~xa|6?pEMN3a5R^6(I_Pee7;SN=ucMy_t{@}-O2JvlhwfH6>2j%uaA z6^<-3IA3rG;V1QudYqUzn_Q52lZFu5RU2QfmsXb7FhP>X9+AOZd8j+`v|I6ab4eGO&gK zy+cf7G%Yap-4$EI9SE>0C{T=ZM3j_3oDy13H}C1%$YSP)!f`)xg#qb zZafs9;&@5$iiSYu1c^%2A^#%aN{g`|*3#bcM3a!rA-xhY=#t7{_IH%I#Tg~DLS9*l ziDUKDD#uPe1U}&mWVz#8ubyF)31uM^x$x@Cr^zQdl4WQR#_J_3C&!q~Ab>_?S*h6% zAfNr^jCQA`m==srR!lxP#n(NdYse}~R$8jHF@j~Sw5*htX=N##qZ*eKS&nsvzV2za z1Jm__YOQ3q?s@*V3)r{wmYxI2N4gs|MnPMpSQ&zXp|zg?4Mj%n$LnotF69l;0k zQAY4RVh!M_w|eUB1wN%^QU_B2Lq0>Bh>b_?2$ZW+s?}rodV$F@ib=%_UwMjY;do)= z40+)oDShL~ih{g!pb75-z6*q~RDUUeeDd|1)Ys;OwkNhdC(nL|@uL@L<}-$3D_Ak0 zinV}35`hFM1=@K-v(sS;gI@%$U)|-)znLGf|4;`2dFCfKnP0wzj4Yw`XadskA?1^j zZr-9Kp56F3F-E$&Lvn-fBcV(9E-<^c;M$cr=YBO?Dt@4I*$>I3XHT&Hkq?j`ugF&m zY~~n^$N1e2QNa|B#ZE)l_9Rsn+Y7qR)9iFyzkHj|{dDVq&faQxm;-mmKK+9&w*GR1 z#b!-&V?lSTWAdR_=zCAwcC?F@wrObVmUiB-yVEk;T(I@;`BL!*b>Qx+x4v)!TR8I7 z5u+1hvPq5_izzINn+v)+aO=Nwx;79(;xj+IeyI3^{*>N*{lA+x&z~d(B>^!hK0pY{ wr+>V8=;Hn#083%^$3DtrSyB_;Z|_-q2Lbq^l;BF4Pyhe`07*qoM6N<$f?Daap8x;= literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Monster Part/Skull.png b/ZoFo/Content/Textures/icons/Monster Part/Skull.png new file mode 100644 index 0000000000000000000000000000000000000000..a43677fcc1744865477ccdf90f7f2ce4c825d611 GIT binary patch literal 1746 zcmV;@1}*uCP)!dQzk z28d`hK_b_Deq$#GvcD!;l#0ro5BQ}rAX~q82mOr!7LTl^ui8(4eGpqNVT{d>kw|c! z5Isi@9l-TcK6}%57(KGTDnd_U3@et;X5msxAdha^!17hA=$|)4tuc>kwNANKr(CIE zbdo#8NDO(R-h0y41c(2#kM%cgX7sK7MM2#1;SbCKpf8j*AP?SoJqwpCrc$k8OI0eB zI;FlUg<=V<5{%W@#9~VcNuh*IN)(D^%9VbWu3F0rzudyI;WfQ8$ev{v0w53Ev7QCP z%P5rV*g}y;qk%F8Z47!w2}+~1LZLC%Vys0QgDsY+RQg#wyqaI{c$nqGYvSbqkj=MV z%lrk4sr8ph3YOZyAjVjf*5uioS-c{lc!K9T-IZLqrtM_rR;y@Hw-Me;+zbe4M4ti!zY+O*g&fyC_PPf?)LI8o}|)O zKte#G!)1<;IlK!5@A18i$<{bTA#^ih^bmwd(k-h zc=NS60OZc~SFvR2aQR0F5UpoRauxs) zq1WjVMG!BLC`1B23rsbeNC` zJ2b+EyYDCX4A)I57v~XUBq{arnOnaJMw65()cPCw?Whe&u}qBP(@*#5HkbtXifA;U_7wFRR0C~HWHMS5w5DHgG| zn8%X20MyQx_sH$nT}8cKqfjc7b=q9{{xwLVh`|%QLm5rfid{RmLq3%8srA>RZGsOT z?L4J{8WJNudWw9;5*aW3F`U0mikbYMR| zWVkG)IdOtsdx~DC&D%#ualyZa04qm6I77fWpJTOi_a51Jj2=D4yn3DB1x#S;vwxhk>8VFI(d~42Wcy3(etriE#lQFc1Dg~8xci}>LM}qd zS%~Ka0HA*I+#fD9rOuf!zINXe@A{7&Jq&1m_~ftHvGx1YzYZ`RTtPlV&N}Ea{tGU} oW)4$lt!J51=bx0`v;Ud>7apfwzb~lN%m4rY07*qoM6N<$f;?Y0c>n+a literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Monster Part/Slime Gel.png b/ZoFo/Content/Textures/icons/Monster Part/Slime Gel.png new file mode 100644 index 0000000000000000000000000000000000000000..348dc3a496aa6d41a92e77843a317a2ed6fa200e GIT binary patch literal 1357 zcmV-T1+w~yP)3j{o-%05iMQ^EWyuZHtQ#{ukkczwX0%a8B^vz#L!w(upfjZGqfM z1?<4D`Uz3^^ryZ^bS0ekI0sG~Zyb9OQ+RauTOSD_BFhG_{fD-&eft*(&U1NY6z3h$ z3nGH^o|PSah{2JghZx-T;SkFOu%906WyeFixOk~XDMUi_l)S@v!Fh*>!_jKV$L`w7 zKaL#W(cPzR3bAYtco7f-$ifha8fF=@0<$K9ad~Elhj;AZr9bwZgF^&@$YSXYxZ}<( zy!Q74JUKYNsJAFC(q;=3F26sGQJ|K&aIuD|k`<;e4D;^Aw^7TOWipBC>aVlvo~J0R z$%X$M=Q9uQVgHM(t}tB_AJqc;?h94=2OeZ>^i9fTM44v2({B_Wfcd-`ac8uCBz*T3`U*dG2od?tg&u^)r;qfl3fUB@kmE zMn{Y#qIa!%_Cj^lIuPN#=~0w|j+N_Ch5FPmIYD*pHr_aLm}j4vS?IvhJzxNPzv-#O zz>b|eIbW~QY|hZP`SVPid!2IG5n>>EPiN6z2ssj{WOrn1ZRJRH~xEF*aU9m_b}?`H1(BKzu=MWQtmtVsrN?n0!%Q0`Pq3CXk1Q+6AAz^Qigk0_i_B#Kl#b?cD3A+DX?9S z3o*jhZ5vo|hfp7@(P%oHGh%ElnBJZqq7yc6`Ua&^g+CmA8i!yR)DlL(2^bmEmPkkE zChFrS`T0J(R{XllNdEj%i)3)G5CaT+vKt>FLvNiXslz$tpDQd#lnMtz3UtV6?f_5Jy_SoK**?Ridp$e7^1%^*gAQ@ghbZw4ZgDqcV zgTudDYQE(Hz(PU4yhp%Ve-H5cU*0%5Tyyc<^hI<_kJ9V&Ea&j`0Jr16pw(Lmu9H8& P00000NkvXXu0mjf$cB%T literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Ore & Gem/Coal.png b/ZoFo/Content/Textures/icons/Ore & Gem/Coal.png new file mode 100644 index 0000000000000000000000000000000000000000..4b312307dcfda6782a4af66166113da12ec2dafa GIT binary patch literal 1130 zcmV-w1eN=VP)x-nH^VkiSj0tgDqI?Q&L?ml@i!I423 ze2w2**FEQa-`Q?Ae8pG%-=R7WBGRkhe}?L_R-YnOAKdg8_{+Dm*SLH0dZ&;t#ziY2 zKi$1a94P{=IjCnm`r~C+oO4M#DsT}2^7F&nOpFc?2AaTVobxO`f5+pcm5<_IL_pA^ zXnFYk4Q@>jQ!0iG4^`3PaL!}cW`1IfN+rfw;mON&=|#kuYCll{xi>e(^@$-yM+X?X zROQ+4Ybf=e=k?nfLqiqP#NoVf)M)c$WxXr*N2C`RLb*LN#mHcZAb?7#z|+N5z~cmJ z%>>aJZv|sCS}RoVo79s4L_w|AqB>CK>2GV~PDoRsQO~H=GR80W5l4n{F`!rsxl}E) zFnbMp+>mo;KyptK8g_S^wA!91)HrKt=avU|uhM8+tQFEMCy2o14x8H(_l{6!w&Zg& zAoG*sm{1cMg;Ed(0ZJ>fc20k#NTnQd`_>qZW=4``AVMp#92~US+SwzHBML!)*YIfR zuM@srwm^QIpJsS4CJaKf5tLUL4UJU52nggBR#tbIof*Z8$7oHpTBd%SVvJ_t&J@S> zCb_jdn4jjC=WAUXa@GvUz1b=H`(pn-luI#D6i_OJ6ygY_ z6vk*uk!GMABj$a}L_E$qN`;7}>ak49IFyV5n*7k&eAx}03lM2N+IT`-X=7L>FEKUK3k*J&hg^0R?ujS7LMu}j~CZ5 zT9fBJ2tYxSI;_pu+O9D_HwNAjnwZi^Op+uV*Hetj$($o|mhGKG($wQTWVxf(Xi+G} zB-V43C1?aKisj9>oSuO$0V0s)f)YogmGS3`ZSMat!*RVyU^Ge@OkfB@MPD4US5K(5 zGD>ksmglsRlu{g13^c9O5_sXsi;a%-y7KKL7n!&;LR`>9VSq83IMkGjF%RzFK%7N@ zgZ(<2+lRc_X|nWc6M#F@lb|&=&zYMVBzGQho-Fs&TPeRTZ=CR*cN@yY&Px#07*qoM6N<$f|JM;jsO4v literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Ore & Gem/Copper Ingot.png b/ZoFo/Content/Textures/icons/Ore & Gem/Copper Ingot.png new file mode 100644 index 0000000000000000000000000000000000000000..87b541473b273a80127dcdb6548eaaaaaef5e7d5 GIT binary patch literal 1383 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 literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Ore & Gem/Cut Emerald.png b/ZoFo/Content/Textures/icons/Ore & Gem/Cut Emerald.png new file mode 100644 index 0000000000000000000000000000000000000000..f6915ff67a145cf2e6b0c4782c35745fc5d8c4ec GIT binary patch literal 1497 zcmV;~1t$85P)zROlrlB654`-5=2W7O~DUn1$|Jo55-ngP-ljNvlx2IJZCJXl@qaaX`;V>#pw`MApSf@0`RYLy zM_gHfk(YPg|2aYsR24-*I)LJpcTB&FtKW0OIUyDlSP5Y9!PoEqEKSp+iIJe8yCfh% z0eIV6H^ah!qRbrr6W4!m*NPD50`Q;wemlob%+kajDJCRDk}6RXAqJ+_yoDGND$22w z&msuboi}Zm=J1h2xL2;da_6!TE5(3c^OY?$P2^)A_$a3br)Xj#gv7eZDVo$HhQQp3 z+0F%;=rPd@WRO> zym;z)n$)M?jMGbrUTg>&NU_1i2^tAR9-G+GxG!z1dW0O z&?udenh`({(5?-gX5~{Oc(+Dyad( zNj)JoLh3hs>!$DV?A#$@YEX&8S`a%RLYKVS)PMn%ye#J*CcbeI8d`R?br>q~nu%culGP^=W3q3;2A8OB4Um{Y59`Nf-g{J8@> z^p{6gi~-rd_h{!saXR;T_dkHEqXB{{O>79Nu;6!%s6>Q-ih_3_;xN`9CtJ&-`~Lt4 zwfeFEi%}s_(4d5MB^Xi!oUC{}P$#GM=OxsJQOum^GBrBlaAF)`Mg zV8?yiz!b}sGN|NvBe%7KunIWl=LV3+zCY_*Z@2_p@ao{9Q?)u(97PaOQfL^or}@S& zwlipRr%G$o?Bs0ZQm6&2RB~H5cwmN$r#G%bfzFFvUWbIom^pgL@M z?>ou4P)fyGC+A9O3pRk94T>_>A0q|BiV?!7$>mlnN;RjNv3uJCu%rMkyBq`Lfprk(cyXF0as24Z zSOF`Jxbw${4q|Pkw1&0D#&s7lwRVd27p(7MAZOg1T8y*ej}ek(_Jn@rP1D4rgrpoh z@)A}J6~PMBwo;07)kofsn9>f6c2H^0WZL=6{F(Wo|0}=QePG1qs&~aQ2#5xrd+Hbx zyN{|=sx2l8bpW}|Sgy1Kqhw=nW`P`*?+C9+^Ks!>c$KoG;9(PeV%qUibE2%;&@oNhg;w00000NkvXXu0mjf6CTwu literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Ore & Gem/Cut Ruby.png b/ZoFo/Content/Textures/icons/Ore & Gem/Cut Ruby.png new file mode 100644 index 0000000000000000000000000000000000000000..f3324b8a8b949f66b9c876b6aee423f350de8b70 GIT binary patch literal 1469 zcmV;u1w#6XP)vJrtk^ zF|a%Fr|-N(eW*#TStn{hLuBmBUm-My5WuTbR0K0;`1r?Zo*I83i2WGwH(vfO)N6D$ zH>uYepaLj}@X;@vV|%%UhQNWbaRk8~%pDO0hxXhw%~KP;9}_xg;jO7lT$#Ge;S(n~ zJaMYxLpXN!EbW`ics4v|wq~zYYX)v0j)))#?YWsACi{(n8W78fDp&tHMYCSx^WS_C zccZ<&hK2}YSOyJ&&4pl z@4j<|dJxROvT^;@KcX?9fT}Y7wdcT%+w(IVJTVSlIwT_C&Ihdpwp%wi`pmgKOxzE^ zU-`__G-4!c#NB!C+EwbRWKj$!6$y`qnxjz(?o9vTRe~xS6jkAKKe$MHWf_SPMDDWD zXY3K7yVDhAVQGn(xp~a3Of!LZ-n@jV(6vmqL`s=tM#`BYby=F7W%0i=%>Mqj6zi)L z>o<{#MG)36Pr-en+!KNVxV5rMT?J9W5g_1FdT4HVb~GB`xGBp^i>N9=g$S4#jv+Xm ztqtl2596wRRd_E0{_@iktZi(fB8X_IWsQK79kM~rhMSRrm4y~7i;H+vyedK`&z_;Z zzQOyK|3+CHGR67|WW!Qo^)GMqu+YQ6?K^EkP-3VNRf#HuiiseloP#QB%Zs3b1_i2Y z$d0IhIp#)iExoP;U97h7RIuGz=CLn+secI8w%Z^OwLl$eArMt@%cwwI1CJe9#DSVB zDgg-~mEuLT%%JQfj2n}$F?Q~JSw&M~V|o_1JTL_Eo3-`b6hgppx;axhkGpeyeu+j1 z1ksW$jl>X$F@hV}tQ2TbVBLg^;Mp*DiaQ_BEsB8vdO#S0x#NK4Dt$$8oa+lM=30vc z@v{782TL4(>Pb?kLoT|cqC>ZvnVozMcVp$szsRXe?sOgq04jP@&ZKNe1ww#B^;qJd zEK)N!T13&ZPkE{SoHIpH5Sk6*$S`4al-w=oY;9AtJ9OIZ9$Wn?q5OPh)n7Pz1arqK zlUV_18_V$f1i9E)kp}D@cJarzW6QP|IfeiUI`3tMwOt; zFbF6m{o;<9qGBY=Wrqg-{Ld?VcJmhPqEl5rMLnYqL6ym${gm?;F0gd<-TgxV$ggj% z6Sb`6=HTL(Ws*DD3^O5_F~70J+^yRrGeV3Ej~rllbd>tg5ZR%f5}lOjq|D?me#yti zCwdL-eDu2!edFj61ZV{1P`yS?APA@g0>a|v zskZ=RryCBukO1}7GuZX|OSwziqy+#iPIG%oh>d?y4C`!48NeE#sEouBT45W%Xs^PhMM zL%4Y9%{`9Z58z?n1w9A+ZsXP-v|m3oTEY||WBlmS+kFiWJoph_MuWy9Jxq2O_;CCW X732V67J6}d00000NkvXXu0mjf32(OP literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Ore & Gem/Cut Sapphire.png b/ZoFo/Content/Textures/icons/Ore & Gem/Cut Sapphire.png new file mode 100644 index 0000000000000000000000000000000000000000..bc10d1876753d74b1ed4cb0eda5a9de1d3fefc5c GIT binary patch literal 1458 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 literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Ore & Gem/Golden Ingot.png b/ZoFo/Content/Textures/icons/Ore & Gem/Golden Ingot.png new file mode 100644 index 0000000000000000000000000000000000000000..0ce2a776205bd3d4ac5d925997f4c333daa1bed2 GIT binary patch literal 1379 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 LNkvXXu0mjfeIhw? literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Ore & Gem/Pearl.png b/ZoFo/Content/Textures/icons/Ore & Gem/Pearl.png new file mode 100644 index 0000000000000000000000000000000000000000..c05a104d120fb6d8a1ebe8672c601fbd06b87c68 GIT binary patch literal 1245 zcmV<31S0#1P)*KfAde*ZR9GCyQn3XS7 zbv<^olvep$rC<(M@#~4UGU(3do+2~@st`a0MJYLP&8>I*6YQukYbwpifWEx_QRWsF znP1$%ri-`GG%Xmr?8Sl+zW(SVa-1;fmbm7&JJ zP`54iF90lxAVmO#<=V^vRs=CD(OI20) z;Bn4ktfgoHRg_H5J(_#w78m&H!*{spo*kGKZLnqroH1By&>|ESO3JuNh2b|eCvu8d zzeH#UIAd|4!FfBi^8kVxD5VFcXC&pk{t_6gSmy}AQ*r_wEiWAbm0T3xT2fl)Z6Xprt6JtVk+UG>DPEpMmqbQD`0kvRFplOFV zuc#`92{~p`AJ-31QX-AVcwgb`z+i4jEsDW`ft-3mXt2JGpC$&7R_LRb~rb^35`c`#yXE0WzY`r-eax9`sJQ?Qy(gk z7$d5}m%HBM&K<7;tD0c;Jo7U!52l6$Yel+#Y%NL|;2%2T%i7Xr>0j5UY|7)WV49S4gGeDT3& zY<=zhRWXhQ06_1%?h@KTgSD2EPCgOq9LC6WD^f_3IJEB&F(pKVCtu&arvGCFfPc*M z`)|06$~v+Zvu-h#IsQH3_5AaT3fj@8f*mIeV|w!x?R+@iL$ERtwI3 z9~k)b{RO%fX{P$RxtSa$8C#fSAe~K*FuUc!v~Ld4&NwnjSj?l zBzX32{-`Yx?QBAO?T*{Y8#yj`yz|WJ=|N+OMdPabmtiqtW~5e=>37~UuKpNso14&H zxNbJ(@DMn`i7@M?`Dluuf;br1vy#U9IbgkOp1>CkocH)5Cj^hF60(A> z?rtOmaKeG!UaZ+9HHS$@k5e5wfMfybn8ciiA4AL_R&+02ewukc2W;~*Pa=&1yx@xh zA2KA%a3Rn&dk!wk5GM$5#o|TaJZ6UEInp^9^PU+GJ&H6MkY`BeWClO`V4M?Y5@4Ix zuED8|%)G#50oTZo5O76-b0BVHs0d;Zhfg9tK<*$#x*vRmtRn|Ad`A~PFK|VJ!QQdG zBK#Bn#j{W2Gmpy(oYdC)yn)LCh;hk`*;rKqiipQFp;ZY6ib2-k>XoYqc>xM$i61w< zfr!IGhRXuoi|^)a0{CtF_xRutCrq2ygLn_V-e6hdBE&h&dn|#ah$3uxc^%FR+rHaY z7v1y@x7<3PP;@|%OfzEXVN1ErFV%NfCoTcm2R0{o6V6)6X3JWj9?{POCSn zT5Ww^(D(dvm>5ZoXkg-rru1#yPAn6a48xI9q#Pb1mGRsH3@|ZF6*G_^ptUGdJ)LEm z=v}*(WQL|hN{MJj6hX}}OZ4||qdai})ksQ-s@Y`t=#eqJaZ6w%z@utdO5g*js@S(> zEBpJtX2*^naKYEPQJFbwCIUE5?SL5uG(rba;oJTlTt9Cvc_XK4maKU16Bu>;$2(w< zDn(5(Gh(b5=<6d^B~@8+!`y4A)Tq>m4u07)K&#c{N6x?5(|WIk|YIPMyN8!TmJyoccx( z>XT};lCkc*lgiL00BvfSeAI_h^h=%75k5zAgLh&G1V2tVEvzm&IoQt z0D!%CD_uC-YeCL;=Ho$$sW5I2moD)@g2MNkpdXm zUNXR-|KuOAv}gV`0PB7EQ<5k#M*6-O0?GD7GSH!uL-P>VUn`PUIbgl7^dTasS3*N* zyQ78{j_uEOQ7r`TGrxC=AqEEjh^mydhTwc>#jCB?yTSxoEJVicnMX-IYk_3 zjtT46RH#*jN}(J+b$(fh8v)oGdyb+`5d;KkRiRo_I@i@eK~(5F@+YE#S$3y55CyN` zTvl}a+u@cFO99xMdyY|fmrv_*2ojQOKnzJ)V?=OX@P%M1s7THu2kM|&C`BQhI&xkpr)!p4+lv0mSuXXq#VnpGP0*#HpfA5Cd^JSLG~>arS9nbQ{` z1wwNcv%tk)28fLYF_eU|B$cxZj4v001xxcc-4E@?L=aU}3d9vyh@_A!rha7WYlt3;?vA?<@X6od>uj|GE4P^mGIy0+Ucs00000NkvXXu0mjfF|Qlq literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Ore & Gem/Silver Nugget.png b/ZoFo/Content/Textures/icons/Ore & Gem/Silver Nugget.png new file mode 100644 index 0000000000000000000000000000000000000000..12ba6f83f07f6623e3ed6dbff5f3d1fb45c7a9fb GIT binary patch literal 973 zcmV;;12X)HP)0zYsaE1qHRKjTDVgq_zsS2%%Ig7+UcH3bjNK`cx65Xnj!x zFDPCpRv!wMmfGMY*ed$cij~rsYB036P&b!N%yci=ncX?Z2b0i^-PT=@zU=>L=5YS= z{~f;Xd;@jWRaad%SYqKpYhA7PN`t7lt5UG|$6{7%TnN7~{3TP9<0!vC?}IyZEf4^* zmhg+iN71@OqN5XmQA=*k0Q&stL!cG5Wh14aW5q3;{Q6xeFUkJ~fYd(9FCh(qVOki5 zNqfAVk?%jO38HF%-$sTBHH6Sgfv`zWTw-!^f>bKScL!gt8loBiJ@n}dcy56+Kc50& zGLbrmkOH^hA`J`2aX9eS&Z;2(>n+glyx7kjJ>7V22>?}^BcILSmlUo$M{7JmYuj=> z&#U50*Pa853m?7m6!}~Mgk;s7D=|!)_CyDxzmAg2&amd5bx3J|6lkTeOp6sgeP!SO zSMdBCs05(D`RsKPT?zbBkspSRQE&?whKbS&+X^Ct!VZ|UcP3fA=5CNCmK6XrrBV^C z6v^(56%TwZ0R8QuH*sB$+g9C&&Ssq?fZbDr}r+xktnyWT#aD{ zKuCmEj0~S5)DWR7*@YGozgQsIy=gIX0bpqp>SG7rAeYM!j)Vy|G|?E2Aj}YEu#tzi zZRe54w~@`{aI!fZCqpK488@Hj!uc@_DKG^5cw&f&i(|NRSxh^C5Q4_02!EV8QdU|h zZ$dq|e=oCt&0<)Rct|luB&z@!~^(RAvgFLhQgT>KZb_+(&jxsYd&9ZP9Z!S+VnZz`0 z&W(+czdVbOlIe7so9D~;+9${L^V=Vw;CduF+W6wgQ9REh>o|C>OEh(f<6j--z6}q7 z_AxDqWtNZbD|tm@#Lf76k_eVwMbH5X$JP}TN=J-U-G`NNAG^R55qK2O0jv%MtV2x1QzovUqgU_{`CZHn@}jop7%bl v6n;HjZ7NeBh=RoMKod*^Zw-g7O1 zvTeuR5W&dxcf?X8=CQko0&^cn_wGSU!%{-k5Cu?mOZ@fzFCk{6RG>wPm5G!RYKa#P-Umg2mTkgHz=(j2@BbVz0}@Uji8mq; z0Ed5Z7l?o;nha4xQ=({~K6XA@!=hJhT zOA&~}_kR&lMKvLonzmUpb1Sj3jV2geeKlf+Fgr`fy=H9m$9Ns&9IW5^sTuGfa?Qx~ zck~hHGvWRReuk=W%kIx0Du^gz1)>FFiO%Y)uv9dvGzI`1L@*ULy!-QnXT}cShgb zKnst+y#i5ihiG>6vIuwt;f{n5;RudLps6|4Bo%}^uROCK&ly5FJ9d!l@am~Uc-kp&3b7Oc5x92S2!fyiQ|G5qZ7ePVf#7wf``UQ~<;=-P@Bm2#+8*TGsY8TU zga^o<0pyIkaqh$k21gEIWe2cEJ+GnF z=HJgh$*T45MZ9bVjf^bU1EQd<6-^u1@{uoKodHn8I)j|~=X0F-#|d)fNFfPh z6i8UB!@o{GPR|ICRVK5d{F}NwOiYCI>tjk`X1pu&;oRTO&|U$W24V<^59Xb zu2a=eRk`tiq?t#F5F!MTgcc>IjvQdcWgCg=98phldUP)=aKk(W1PE!)jD0`&I-~(e zElxl6Yqsv#MODLeH?vcCGY`pPyyv{`J;DP5!UK;)7JQDLf z5P-*p_pv|z5LH;Y_A1<+I)fTWotskYv&K}!Gw#~_*X^=l>u%h8kSkOjuO^Y!Fd_53 z&_^JkajZgjs=`b-`{FT<9yo#~C1r>Z3UMMzh^Ewf1k_GFJ;i00e*mwh&{X2}dH(kB zPtZ{6oXJ(q&g(uoPxS_TrWk$WqXU#J;fibCj;YdW8Bgqgin1jPv;|cqr6#{^$0wRn zixXZG5%ea;Ir-!h#aO@Toph&z>1k(bqT~G!dg)NZ+zeI4lCov{c04kXGu8A2WT!iMo@1lW5Cmevoj-qd9^P{9 zgnfj*z3URx8reh@0n`)~R@9bKEijqwD>;q?)1X_~K kn~#-1mL;2XG_~9-yFWd;WNK-+R8_ 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 acl#fMBWfxwW6I0`00008FG05 literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Potion/Empty Bottle.png b/ZoFo/Content/Textures/icons/Potion/Empty Bottle.png new file mode 100644 index 0000000000000000000000000000000000000000..14d86eb119fd9f764fd5597ea65e739682e3c988 GIT binary patch literal 1732 zcmV;#20QtQP)uw-n*n`nrRP@ICAV5_y$mcFL7)hW|&ei1)tTd1~l z?5NX1L0Xw2iGT#emQIUP9Z)Jz##RR+k0gZ1Bgsv2UuU2FTB~0qLy8~|neLhW;mqu{ ze!soe-g7qae;xt=nE6^V&L$Vm@_q=Scw9qyqf><`>ZakJm8$ z&N@&o53M5Pa|Jx~_}U@vwWqu)6W#Z!Cs!7MZ$v=|ED!9vrxwYv?gN z2$u-rv3L-R5wj$sf^}{{Thrg0&mSC}DW5c^qGH00Bd)*RSVN}=&eRYY7akTnVrC~*lyywfI#<-z=KBiyj>>epR$G&kM(dK2vb($Mb8H>4W#R0V z3-C`j{2uqrx_!l@sv90*W)mveLqw5ru3)Si$QJX*MwX>&lvP=&w9A)5vvcpRDr+=Z zrI}fHhAw=_FDAfC*FKAd_49r{dEA6Ym^mt`@T4P-taCYSZ9ZEl9LXdT6GIjCDr-=b z60iSj_YEqHoRTJp$I99|I=kr!c?ajwhzxIPr(X92I1#gNTeJ zlG@t-Y@yI@$)Olgud&vXTKR7tczaS<$g_+jCF04p$e7f{%6}mNUh?cR+&O*r6ZO@# z-(iLxDCFKJX6=ZKakkiB$hSLd5fOXZa6YGWeD8n$d5exBRz`6$mOLE!L8kM-(M9iU zZoS~{KTd!jetIcxtDXMj{Ass-jfi#6VBdZKL`2Fs(%E9Zlbl27v?q;3VK9`3x(?PV zr9>1NFCmgg{ZW;p|NX}9`}VZFa#8sI3h?)T_9&)Is#!L*x~7`R>F&NW?=nLXlXgTh zo6nze0zzAb!D3OAN+oXVY@6X6``VdUQY6|(R8OjUg~2s7z#zOk2=6d-Lj5vv#d}`Lf}|1hfhfhSJ-y_pJrDPp;kG+t(|- zAeLYvXUKWhQgG-*djk^(ju4E_R2-h#^p*NoR;`?}YyHM6f)5igN~2UL1>OCpyq8b* z+&g3ZP1^`?!e?mX{9~s-yn`7+0A6LP{P489o9bJC`+V*0<}FtY9}4{FLBb2Z_f=G; z%b#iM>s{n|FrE-rFdTfJe8J2PJUU&`Hsikgr@a2sx+!lpZ@oIW5a+#!_=}6bjC3Ng zlG*dSa@qNw2wVX07wYOxBrC2<$J42@eXnkxwrBJ9tAbxh006k*fqMaBq|=$!AeAT! zlF4Lm_sO~B9M}`s+q&bb;TIDCK6-M`Zn_H)9@sI!!2ZAdeJJ*7;h!WhOyt~{PXm0e az<&XY+Yl&AUkjc900005b-g7_C_j7%( z`?~f#0-&m##5nkJIr4^xU{0nopwIsPHXi%+bq7HPWqPsz6wsese*sa{M!79!-2)3* zb{gdmJqwrJjA5GNWyZ~ftyiQ*EE{^m|b zoKhl+L;ka4E9Ft+Ib~cYHVC=@nwwr}|-|Jd|5 zhL7u{edNf2{U;oteOQ^%qejxb=Or$``gV4|xsP}D_0rQ*rKi&1$;bZ4QyVrPH-HXt z0T2Y1&T(TgLBd;ay~J0px`kJ_|C=4Vy6Nk$QLpE$ShocZv}N!<1P9{2#S1V3A_t!r zyc+PrbvN9vix(|m*6jH#zI)Ltm(Q8?@hnZ*)b%7^`{vE;+PRG<*8Yx9e)_`01Ox^R zqJhO-zqp1lv{>u0foJxt8xSjp?@~qa?0VxbOqld39$db3TVG$*_g89u#*A~O?Rk42 z-TU6*-Ti%h;;gf%H&SlB{XPH@kwFgVk8i$$C=Q9kfH`xo#afHC79*C;UF&xmYh?12 zQKxr|Igia<>v!fwLDtCh)YC>!)`5&b4D#5zr(c>hY3!Ljy?xZ{DbGIl9BUtcVIc7% zOQ1ix@e=0GTSyQ_1fga1%H^*OYcHEPj-;HFwA6T}6)oV8&nxqU`sH%Sd`Y*EJ>V+&_`m0yk+e^|`Dw{cT=Z%h&k`2Sq zoHC-L9T5a8je1YLzxS`hIy$EF+%u2wOtVaD)tVnaq5Z=jnsPq%dW~wehkNf|#>zFD z28j-cA6f$M9FQ}0%H;S16FS356FWoiovNy;Zyl1S*RR-ZttAXYIb&*Rn8)LsQ&;57 zyy&vAS(f&8b*&xI*HdTTyZt!lj;4E93;-wvN|R5gcYnX{tyI0LoAzD+hjxM9@ZFhwYyMYR zvSiK6?d@gLR!SsJA}J-YoIQQVN8&IfvLQw+B1)dlVC?wMuy^lmJoD7#*DIBp-`~^c ztF?w!Ds{c`>tC9-{I`$r#QGPHT86=0AWf7$K6>u!)5>v3sT`0bG38POnqUY355@q7 zGUAphCbfD>Uw?*k8Bn~x5&$?!@xGU>TdRy2lMt06&YT)y3_}=^l+`H;Q zCX_<{wYxz%cC@#7N^#B^AB<4r0cbWIuE^N(Vi&bqO10WYrPiRQx0n8El?%^54;cC& z4jRQ?>ZsPid2j_*ggCTBu_v@Sd%AlOYe9w6Cr{=1zyBF$H&WFmJw?j+&Xlm6vTI9* z`m>P(u*U$MGo(jNn^jkYdh{FY0qiYJyw)Zlu}aQRq@`n z4!0fJfg>v1$9*JW-SrMHyjK5ZERY$9;h}-daKwXPCevVTN}p zUNe%Qpd5QdJkB|U{MZ}-P%MCll=(CP8cqlH6_wa1K;q%|n%;#YNr|pk>1G$B_Pu3|*f8OZ*qg2~B-XJu89$ O00008qOwRLr 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 UzVc7|Gynhq07*qoM6N<$f-mJUi~s-t literal 0 HcmV?d00001 diff --git a/ZoFo/Content/Textures/icons/Potion/Red Potion 2.png b/ZoFo/Content/Textures/icons/Potion/Red Potion 2.png new file mode 100644 index 0000000000000000000000000000000000000000..775547cde9e685b65ef909ab44fc907460e1d402 GIT binary patch literal 1785 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 Chunks { get; set; } + public List Objects { get; set; } public int Height { get; set; } public int Width { get; set; } public int Id { get; set; } public bool Visibility { get; set; } public string Class { get; set; } public string Type { get; set; } + public string Name { get; set; } + } } diff --git a/ZoFo/GameCore/GameManagers/MapManager/MapElements/Object.cs b/ZoFo/GameCore/GameManagers/MapManager/MapElements/Object.cs index f4c4336..96a15e1 100644 --- a/ZoFo/GameCore/GameManagers/MapManager/MapElements/Object.cs +++ b/ZoFo/GameCore/GameManagers/MapManager/MapElements/Object.cs @@ -4,13 +4,16 @@ using System.Linq; using System.Text; using System.Threading.Tasks; + namespace ZoFo.GameCore.GameManagers.MapManager.MapElements { public class Object { public double Height { get; set; } public double Width { get; set; } - public double X { get; set; } - public double Y { get; set; } + public float X { get; set; } + public float Y { get; set; } + public string Template { get; set; } + public string Type { get; set; } } } diff --git a/ZoFo/GameCore/GameManagers/MapManager/MapElements/Template.cs b/ZoFo/GameCore/GameManagers/MapManager/MapElements/Template.cs new file mode 100644 index 0000000..f954c37 --- /dev/null +++ b/ZoFo/GameCore/GameManagers/MapManager/MapElements/Template.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ZoFo.GameCore.GameManagers.MapManager.MapElements; + +namespace ZoFo.GameCore.GameManagers.MapManager.MapElements +{ + public class Template + { + public Object Object { get; set; } + public string Type { get; set; } + } +} diff --git a/ZoFo/GameCore/GameManagers/MapManager/MapManager.cs b/ZoFo/GameCore/GameManagers/MapManager/MapManager.cs index 94bf9e3..7bf166d 100644 --- a/ZoFo/GameCore/GameManagers/MapManager/MapManager.cs +++ b/ZoFo/GameCore/GameManagers/MapManager/MapManager.cs @@ -9,6 +9,7 @@ using System.Text; using System.Text.Json; using System.Threading.Tasks; using ZoFo.GameCore.GameManagers.MapManager.MapElements; +using ZoFo.GameCore.GameObjects; using ZoFo.GameCore.GameObjects.MapObjects; using ZoFo.GameCore.GameObjects.MapObjects.StopObjects; @@ -17,9 +18,16 @@ namespace ZoFo.GameCore.GameManagers.MapManager public class MapManager { private static readonly string _templatePath = "Content/MapData/TileMaps/{0}.tmj"; + private static readonly JsonSerializerOptions _options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true }; // Задача настроек для JsonSerialize + private static readonly Dictionary _classPath = new Dictionary() { + { "Collectables", "ZoFo.GameCore.GameObjects.Entities.Interactables.Collectables." }, + { "Enemies", "ZoFo.GameCore.GameObjects.Entities.LivingEntities.Enemies." } + }; //private static readonly float _scale = 1.0f; private List _tileSets = new List(); + private TileMap _tileMap = new TileMap(); + /// /// Загрузка карты. Передаётся название файла карты. По умолчанию main. @@ -28,85 +36,95 @@ namespace ZoFo.GameCore.GameManagers.MapManager public void LoadMap(string mapName = "main") { // Загрузка TileMap - var options = new JsonSerializerOptions - { - PropertyNameCaseInsensitive = true - }; - TileMap tileMap = - JsonSerializer.Deserialize(File.ReadAllText(string.Format(_templatePath, mapName)), options); + _tileMap = JsonSerializer.Deserialize(File.ReadAllText(string.Format(_templatePath, mapName)), _options); // Загрузка TileSet-ов по TileSetInfo - List tileSets = new List(); - foreach (TileSetInfo tileSetInfo in tileMap.TileSets) + foreach (TileSetInfo tileSetInfo in _tileMap.TileSets) { TileSet tileSet = LoadTileSet(Path.Combine("Content", "MapData", "TileMaps", tileSetInfo.Source)); tileSet.FirstGid = tileSetInfo.FirstGid; - tileSets.Add(tileSet); + _tileSets.Add(tileSet); } - tileSets.Reverse(); + _tileSets.Reverse(); - foreach (var layer in tileMap.Layers) + + foreach (var layer in _tileMap.Layers) { if (layer.Type == "objectgroup") { - + ProcessObjectLayers(layer); } else { - foreach (var chunk in layer.Chunks) + ProcessTileLayers(layer); + } + } + } + + private void ProcessTileLayers(Layer layer) + { + foreach (var chunk in layer.Chunks) + { + for (int i = 0; i < chunk.Data.Length; i++) + { + foreach (var tileSet in _tileSets) { - for (int i = 0; i < chunk.Data.Length; i++) + if (tileSet.FirstGid <= chunk.Data[i]) { - foreach (var tileSet in tileSets) + int number = chunk.Data[i] - tileSet.FirstGid; + + int relativeColumn = number % tileSet.Columns; + int relativeRow = number / tileSet.Columns; // относительно левого угла чанка + + Rectangle sourceRectangle = new Rectangle(relativeColumn * (tileSet.TileWidth + tileSet.Spacing) + tileSet.Margin, + relativeRow * (tileSet.TileHeight + tileSet.Spacing) + tileSet.Margin, + tileSet.TileWidth, tileSet.TileHeight); + + Vector2 position = new Vector2( + (i % chunk.Width) * _tileMap.TileWidth + chunk.X * _tileMap.TileWidth, + (i / chunk.Height) * _tileMap.TileHeight + chunk.Y * _tileMap.TileHeight); + + Tile tile = tileSet.Tiles[number]; // По факту может быть StopObjectom, но на уровне Tiled это все в первую очередь Tile + + switch (tile.Type) { - if (tileSet.FirstGid <= chunk.Data[i]) - { - int number = chunk.Data[i] - tileSet.FirstGid; - - int relativeColumn = number % tileSet.Columns; - int relativeRow = number / tileSet.Columns; // относительно левого угла чанка - - Rectangle sourceRectangle = new Rectangle(relativeColumn * (tileSet.TileWidth + tileSet.Spacing) + tileSet.Margin, - relativeRow * (tileSet.TileHeight + tileSet.Spacing) + tileSet.Margin, - tileSet.TileWidth, tileSet.TileHeight); - - Vector2 position = new Vector2( - (i % chunk.Width) * tileMap.TileWidth + chunk.X * tileMap.TileWidth, - (i / chunk.Height) * tileMap.TileHeight + chunk.Y * tileMap.TileHeight); - - Tile tile = tileSet.Tiles[number]; // По факту может быть StopObjectom, но на уровне Tiled это все в первую очередь Tile - - switch (tile.Type) - { - case "Tile": - AppManager.Instance.server.RegisterGameObject(new MapObject(position, - new Vector2(tileSet.TileWidth, tileSet.TileHeight), - sourceRectangle, - "Textures/TileSetImages/" + Path.GetFileName(tileSet.Image).Replace(".png", ""))); - break; - - case "StopObject": - var collisionRectangles = LoadRectangles(tile); // Грузит коллизии обьектов - - AppManager.Instance.server.RegisterGameObject(new StopObject(position, - new Vector2(tileSet.TileWidth, tileSet.TileHeight), - sourceRectangle, - "Textures/TileSetImages/" + Path.GetFileName(tileSet.Image).Replace(".png", ""), - collisionRectangles.ToArray())); - break; - - default: - break; - } + case "Tile": + AppManager.Instance.server.RegisterGameObject(new MapObject(position, + new Vector2(tileSet.TileWidth, tileSet.TileHeight), + sourceRectangle, + "Textures/TileSetImages/" + Path.GetFileName(tileSet.Image).Replace(".png", ""))); + break; + + case "StopObject": + var collisionRectangles = LoadRectangles(tile); // Грузит коллизии обьектов + + AppManager.Instance.server.RegisterGameObject(new StopObject(position, + new Vector2(tileSet.TileWidth, tileSet.TileHeight), + sourceRectangle, + "Textures/TileSetImages/" + Path.GetFileName(tileSet.Image).Replace(".png", ""), + collisionRectangles.ToArray())); + break; + + default: break; - } } + break; } } } } } + private void ProcessObjectLayers(Layer layer) + { + foreach (var item in layer.Objects) + { + string type = Path.GetFileName(item.Template).Replace(".tj", ""); + var collectable = Activator.CreateInstance(Type.GetType(_classPath[layer.Name] + type), new Vector2(item.X, item.Y)); + AppManager.Instance.server.RegisterGameObject(collectable as GameObject); + } + } + /// /// Загружает и парсит TileSet по его пути. /// @@ -114,15 +132,8 @@ namespace ZoFo.GameCore.GameManagers.MapManager /// private TileSet LoadTileSet(string path) { - using (StreamReader reader = new StreamReader(path)) - { - var options = new JsonSerializerOptions //TODO Remove - { - PropertyNameCaseInsensitive = true - }; - string data = reader.ReadToEnd(); - return JsonSerializer.Deserialize(data, options); - } + return JsonSerializer.Deserialize(File.ReadAllText(path), _options); + } /// @@ -145,5 +156,10 @@ namespace ZoFo.GameCore.GameManagers.MapManager return collisionRectangles; } + + private MapElements.Object LoadObject(string path) + { + return JsonSerializer.Deserialize(File.ReadAllText(path), _options); + } } } \ No newline at end of file diff --git a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Ammo.cs b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Ammo.cs index ba4f1bc..cbdd1d7 100644 --- a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Ammo.cs +++ b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Ammo.cs @@ -13,7 +13,7 @@ namespace ZoFo.GameCore.GameObjects.Entities.Interactables.Collectables { class Ammo:Collectable { - public override StaticGraphicsComponent graphicsComponent { get; } = new("Textures/icons/8"); + public override StaticGraphicsComponent graphicsComponent { get; } = new(_path + "Ammo"); public Ammo(Vector2 position) : base(position) { graphicsComponent.ObjectDrawRectangle.Width = 20; diff --git a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/BottleOfWater.cs b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/BottleOfWater.cs index 528f614..72be154 100644 --- a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/BottleOfWater.cs +++ b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/BottleOfWater.cs @@ -14,7 +14,7 @@ namespace ZoFo.GameCore.GameObjects.Entities.Interactables.Collectables { public class BottleOfWater : Collectable { - public override StaticGraphicsComponent graphicsComponent { get; } = new("BottleOfWater"); + public override StaticGraphicsComponent graphicsComponent { get; } = new(_path + "BottleOfWater"); public BottleOfWater(Vector2 position) : base(position) { diff --git a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Collectable.cs b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Collectable.cs index 9bb5227..74aec83 100644 --- a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Collectable.cs +++ b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Collectable.cs @@ -7,6 +7,7 @@ using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient; namespace ZoFo.GameCore.GameObjects.Entities.Interactables.Collectables; public class Collectable : Interactable { + protected static readonly string _path = "Textures/icons/Collectables/"; public Collectable(Vector2 position) : base(position) { } diff --git a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Peeble.cs b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Peeble.cs index 5525cfd..1ef595f 100644 --- a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Peeble.cs +++ b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Peeble.cs @@ -14,7 +14,7 @@ namespace ZoFo.GameCore.GameObjects.Entities.Interactables.Collectables { public class Peeble:Collectable { - public override StaticGraphicsComponent graphicsComponent { get; } = new("Peeble"); + public override StaticGraphicsComponent graphicsComponent { get; } = new(_path + "Peeble"); public Peeble(Vector2 position) : base(position) { diff --git a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/PureBottleOfWater.cs b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/PureBottleOfWater.cs index 1523f6e..fad13a2 100644 --- a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/PureBottleOfWater.cs +++ b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/PureBottleOfWater.cs @@ -13,7 +13,7 @@ namespace ZoFo.GameCore.GameObjects.Entities.Interactables.Collectables { class PureBottleOfWater:Collectable { - public override StaticGraphicsComponent graphicsComponent { get; } = new("PureBottleOfWater"); + public override StaticGraphicsComponent graphicsComponent { get; } = new(_path + "PureBottleOfWater"); public PureBottleOfWater(Vector2 position) : base(position) { diff --git a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/RottenFlesh.cs b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/RottenFlesh.cs index 147f30d..984a222 100644 --- a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/RottenFlesh.cs +++ b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/RottenFlesh.cs @@ -13,7 +13,7 @@ namespace ZoFo.GameCore.GameObjects.Entities.Interactables.Collectables { class RottenFlesh:Collectable { - public override StaticGraphicsComponent graphicsComponent { get; } = new("RottenFlesh"); + public override StaticGraphicsComponent graphicsComponent { get; } = new(_path + "RottenFlesh"); public RottenFlesh(Vector2 position) : base(position) { diff --git a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Steel.cs b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Steel.cs index 5618236..10a0961 100644 --- a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Steel.cs +++ b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Steel.cs @@ -13,7 +13,7 @@ namespace ZoFo.GameCore.GameObjects.Entities.Interactables.Collectables { class Steel:Collectable { - public override StaticGraphicsComponent graphicsComponent { get; } = new("Steel"); + public override StaticGraphicsComponent graphicsComponent { get; } = new(_path + "Steel"); public Steel(Vector2 position) : base(position) { diff --git a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Wood.cs b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Wood.cs index 85af71b..baccc6b 100644 --- a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Wood.cs +++ b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Wood.cs @@ -9,7 +9,7 @@ namespace ZoFo.GameCore.GameObjects.Entities.Interactables.Collectables; public class Wood : Collectable { - public override StaticGraphicsComponent graphicsComponent { get; } = new("Wood"); + public override StaticGraphicsComponent graphicsComponent { get; } = new(_path + "Wood"); public Wood(Vector2 position) : base(position) { From 269905b3399597ecf60e8fa5d65235da238b43bd Mon Sep 17 00:00:00 2001 From: Mootfrost777 Date: Mon, 19 Aug 2024 00:41:26 +0300 Subject: [PATCH 07/10] Add recursive load of animations --- .../GameManagers/NetworkManager/ClientNetworkManager.cs | 2 +- .../GameManagers/NetworkManager/ServerNetworkManager.cs | 2 +- ZoFo/GameCore/Graphics/AnimationBuilder.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs b/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs index b8e3737..85d8a19 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs @@ -124,7 +124,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager while(socket.Connected) { byte[] bytes = new byte[65535]; - var countAnsw = socket.Receive(bytes, SocketFlags.Partial); //Вылетает если кто то закрыл + var countAnsw = socket.Receive(bytes); //Вылетает если кто то закрыл string update = Encoding.UTF8.GetString(bytes, 0, countAnsw); // обновление отосланные сервером GetDataSent(update); } diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs b/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs index e8be1b5..366bafc 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs @@ -171,7 +171,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager while (client.Connected) { var buff = new byte[65535]; - var answ = client.Receive(buff, SocketFlags.Partial); + var answ = client.Receive(buff); string response = Encoding.UTF8.GetString(buff, 0, answ); GetDataSend(response); } diff --git a/ZoFo/GameCore/Graphics/AnimationBuilder.cs b/ZoFo/GameCore/Graphics/AnimationBuilder.cs index 50f9162..6dd24de 100644 --- a/ZoFo/GameCore/Graphics/AnimationBuilder.cs +++ b/ZoFo/GameCore/Graphics/AnimationBuilder.cs @@ -12,7 +12,7 @@ namespace ZoFo.GameCore.Graphics public void LoadAnimations() { Animations = new List(); - string[] animationFilesNames = Directory.GetFiles(Path.Combine(AppContext.BaseDirectory, "Content", "Textures", "Animations")); + string[] animationFilesNames = Directory.GetFiles(Path.Combine(AppContext.BaseDirectory, "Content", "Textures", "Animations"), "*.animation", SearchOption.AllDirectories); StreamReader reader; foreach (var fileName in animationFilesNames) From ec275c7584b68ba6c964c4f4319eec7c000efd94 Mon Sep 17 00:00:00 2001 From: SergoDobro Date: Mon, 19 Aug 2024 01:20:28 +0300 Subject: [PATCH 08/10] hotfixes camera scaling --- ZoFo/GameCore/Client.cs | 25 ++++++---- .../CollisionManager/CollisionManager.cs | 4 +- ZoFo/GameCore/GameManagers/InputManager.cs | 50 +++++++++---------- .../ServerToClient/UpdateStopObjectCreated.cs | 22 ++++++++ .../Entities/LivingEntities/Enemies/Zombie.cs | 14 +++--- .../Entities/LivingEntities/LivingEntity.cs | 6 +-- .../Entities/LivingEntities/Player/Player.cs | 4 +- ZoFo/GameCore/Graphics/GraphicsComponent.cs | 2 +- ZoFo/GameCore/Server.cs | 22 ++++++-- 9 files changed, 95 insertions(+), 54 deletions(-) create mode 100644 ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateStopObjectCreated.cs diff --git a/ZoFo/GameCore/Client.cs b/ZoFo/GameCore/Client.cs index 973097d..82e5f20 100644 --- a/ZoFo/GameCore/Client.cs +++ b/ZoFo/GameCore/Client.cs @@ -93,6 +93,7 @@ namespace ZoFo.GameCore #endregion + Player myPlayer; List mapObjects = new List(); List gameObjects = new List(); List players = new List(); @@ -111,6 +112,8 @@ namespace ZoFo.GameCore } networkManager.SendData();//set to ticks + if (myPlayer!=null) + GraphicsComponent.CameraPosition = (myPlayer.position + myPlayer.graphicsComponent.ObjectDrawRectangle.Size.ToVector2()/2 - AppManager.Instance.CurentScreenResolution.ToVector2()/(2*GraphicsComponent.scaling)).ToPoint(); } internal void Draw(SpriteBatch spriteBatch) { @@ -140,16 +143,17 @@ namespace ZoFo.GameCore (update as UpdateTileCreated).tileSetName )); } - //else if (update is UpdateStopObjectCreated) - //{ - // stopObjects.Add( - // new StopObject( - // (update as UpdateStopObjectCreated).Position, - // (update as UpdateStopObjectCreated).Size.ToVector2(), - // (update as UpdateStopObjectCreated).sourceRectangle, - // (update as UpdateStopObjectCreated).tileSetName - // )); - //} + else if (update is UpdateStopObjectCreated) + { + stopObjects.Add( + new StopObject( + (update as UpdateStopObjectCreated).Position, + (update as UpdateStopObjectCreated).Size.GetPoint().ToVector2(), + (update as UpdateStopObjectCreated).sourceRectangle.GetRectangle(), + (update as UpdateStopObjectCreated).tileSetName, + (update as UpdateStopObjectCreated).collisions.Select(x =>x.GetRectangle()).ToArray() + )); + } else if (update is UpdateGameObjectCreated) { GameObject created_gameObject; @@ -159,6 +163,7 @@ namespace ZoFo.GameCore { created_gameObject = new Player((update as UpdateGameObjectCreated).position); players.Add(created_gameObject as Player); + myPlayer = players[0]; gameObjects.Add(created_gameObject); } if ((update as UpdateGameObjectCreated).GameObjectType == "Ammo") diff --git a/ZoFo/GameCore/GameManagers/CollisionManager/CollisionManager.cs b/ZoFo/GameCore/GameManagers/CollisionManager/CollisionManager.cs index fc9ee75..84d4f10 100644 --- a/ZoFo/GameCore/GameManagers/CollisionManager/CollisionManager.cs +++ b/ZoFo/GameCore/GameManagers/CollisionManager/CollisionManager.cs @@ -211,8 +211,8 @@ namespace ZoFo.GameCore.GameManagers.CollisionManager { public static Rectangle SetOrigin(this Rectangle rectangle, Vector2 origin) { - rectangle.X = (int)origin.X; - rectangle.Y = (int)origin.Y; + rectangle.X += (int)origin.X; + rectangle.Y += (int)origin.Y; return rectangle; } } diff --git a/ZoFo/GameCore/GameManagers/InputManager.cs b/ZoFo/GameCore/GameManagers/InputManager.cs index c390273..552552f 100644 --- a/ZoFo/GameCore/GameManagers/InputManager.cs +++ b/ZoFo/GameCore/GameManagers/InputManager.cs @@ -169,7 +169,31 @@ namespace ZoFo.GameCore.GameManagers #endregion // Cheats #region Обработка состояния объекта. Задает значение полю scopeState. - if (keyBoardState.IsKeyDown(Keys.Up) || keyBoardState.IsKeyDown(Keys.W)) + if(keyBoardState.IsKeyDown(Keys.Right) && keyBoardState.IsKeyDown(Keys.Up) || + keyBoardState.IsKeyDown(Keys.D) && keyBoardState.IsKeyDown(Keys.W)) + { + currentScopeState = ScopeState.StraightRight; + InputMovementDirection = new Vector2(1, -1); + } + else if(keyBoardState.IsKeyDown(Keys.Left) && keyBoardState.IsKeyDown(Keys.Up) || + keyBoardState.IsKeyDown(Keys.A) && keyBoardState.IsKeyDown(Keys.W)) + { + currentScopeState = ScopeState.StraightLeft; + InputMovementDirection = new Vector2(-1, -1); + } + else if(keyBoardState.IsKeyDown(Keys.Right) && keyBoardState.IsKeyDown(Keys.Down) || + keyBoardState.IsKeyDown(Keys.D) && keyBoardState.IsKeyDown(Keys.S)) + { + currentScopeState = ScopeState.BackRight; + InputMovementDirection = new Vector2(1, 1); + } + else if(keyBoardState.IsKeyDown(Keys.Left) && keyBoardState.IsKeyDown(Keys.Down) || + keyBoardState.IsKeyDown(Keys.A) && keyBoardState.IsKeyDown(Keys.S)) + { + currentScopeState = ScopeState.BackLeft; + InputMovementDirection = new Vector2(-1, 1); + } + else if (keyBoardState.IsKeyDown(Keys.Up) || keyBoardState.IsKeyDown(Keys.W)) { currentScopeState = ScopeState.Straight; InputMovementDirection = new Vector2(0, -1); @@ -189,30 +213,6 @@ namespace ZoFo.GameCore.GameManagers currentScopeState = ScopeState.Right; InputMovementDirection = new Vector2(1, 0); } - else if(keyBoardState.IsKeyDown(Keys.Right) && keyBoardState.IsKeyDown(Keys.Up) || - keyBoardState.IsKeyDown(Keys.D) && keyBoardState.IsKeyDown(Keys.W)) - { - currentScopeState = ScopeState.StraightRight; - InputMovementDirection = new Vector2(1, 1); - } - else if(keyBoardState.IsKeyDown(Keys.Left) && keyBoardState.IsKeyDown(Keys.Up) || - keyBoardState.IsKeyDown(Keys.A) && keyBoardState.IsKeyDown(Keys.W)) - { - currentScopeState = ScopeState.StraightLeft; - InputMovementDirection = new Vector2(-1, 1); - } - else if(keyBoardState.IsKeyDown(Keys.Right) && keyBoardState.IsKeyDown(Keys.Down) || - keyBoardState.IsKeyDown(Keys.D) && keyBoardState.IsKeyDown(Keys.S)) - { - currentScopeState = ScopeState.BackRight; - InputMovementDirection = new Vector2(1, -1); - } - else if(keyBoardState.IsKeyDown(Keys.Left) && keyBoardState.IsKeyDown(Keys.Down) || - keyBoardState.IsKeyDown(Keys.A) && keyBoardState.IsKeyDown(Keys.S)) - { - currentScopeState = ScopeState.BackLeft; - InputMovementDirection = new Vector2(-1, -1); - } #endregion #region Обработка нажатия выстрела. Вызывает событие ShootEvent diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateStopObjectCreated.cs b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateStopObjectCreated.cs new file mode 100644 index 0000000..a8389e3 --- /dev/null +++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateStopObjectCreated.cs @@ -0,0 +1,22 @@ +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 ZoFo.GameCore.GameManagers.NetworkManager.SerializableDTO; + +namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient +{ + internal class UpdateStopObjectCreated : UpdateData + { + public UpdateStopObjectCreated() { UpdateType = "UpdateStopObjectCreated"; } + public Texture2D TextureTile { get; set; } + public Vector2 Position { get; set; } + public SerializablePoint Size { get; set; } + public SerializableRectangle sourceRectangle { get; set; } + public string tileSetName { get; set; } + public SerializableRectangle[] collisions { get; set; } + } +} diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs index 4f3d21c..e37f822 100644 --- a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs @@ -11,21 +11,21 @@ namespace ZoFo.GameCore.GameObjects.Entities.LivingEntities.Enemies { class Zombie : Enemy { - public override GraphicsComponent graphicsComponent { get; } = new AnimatedGraphicsComponent(new List { "zombie_damaged","zombie_walk","zombie_idle","zombie_attack","zombie_death" }, "zombie_walk"); + public override GraphicsComponent graphicsComponent { get; } = new AnimatedGraphicsComponent(new List { "zombie_damaged", "zombie_walk", "zombie_idle", "zombie_attack", "zombie_death" }, "zombie_walk"); public Zombie(Vector2 position) : base(position) { - health = 5; - speed =2; - collisionComponent.stopRectangle = new Rectangle(0, 0, 52, 100); - graphicsComponent.ObjectDrawRectangle = new Rectangle(0, 0, 100, 100); + health = 5; + speed = 2; + graphicsComponent.ObjectDrawRectangle = new Rectangle(0, 0, 30, 30); + collisionComponent.stopRectangle = new Rectangle(0, 10, 30, 20); } - + public override void Update() { Vector2 duration = Vector2.Normalize( AppManager.Instance.server.players[0].position - position ); - velocity+=new Vector2(duration.X * speed, duration.Y*speed); + velocity += new Vector2(duration.X * speed, duration.Y * speed); if (Random.Shared.NextDouble() > 0.9) { diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/LivingEntity.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/LivingEntity.cs index c1f95ac..36523a8 100644 --- a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/LivingEntity.cs +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/LivingEntity.cs @@ -33,7 +33,7 @@ public class LivingEntity : Entity public void OnCollision(CollisionComponent component) { - + } public override void UpdateAnimations() @@ -43,9 +43,9 @@ public class LivingEntity : Entity Vector2 prevPosition_forClient; public override void Draw(SpriteBatch spriteBatch) { - if ((position - prevPosition_forClient).X< 0) + if ((position - prevPosition_forClient).X < 0) graphicsComponent.Flip = SpriteEffects.FlipHorizontally; - else if((position - prevPosition_forClient).X > 0) + else if ((position - prevPosition_forClient).X > 0) graphicsComponent.Flip = SpriteEffects.None; base.Draw(spriteBatch); prevPosition_forClient = position; diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs index a03eb95..04143f1 100644 --- a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs @@ -26,8 +26,8 @@ public class Player : LivingEntity //public bool isTryingToInteract { get; set; } public Player(Vector2 position) : base(position) { - graphicsComponent.ObjectDrawRectangle = new Rectangle(0, 0, 100, 100); - collisionComponent.stopRectangle = new Rectangle(0, 0, 100, 100); + graphicsComponent.ObjectDrawRectangle = new Rectangle(0, 0, 30, 30); + collisionComponent.stopRectangle = new Rectangle(0, 20, 30, 10); speed = 10; //isTryingToInteract = false; //IsTryingToShoot = false; diff --git a/ZoFo/GameCore/Graphics/GraphicsComponent.cs b/ZoFo/GameCore/Graphics/GraphicsComponent.cs index 3fa8fa4..b4580ab 100644 --- a/ZoFo/GameCore/Graphics/GraphicsComponent.cs +++ b/ZoFo/GameCore/Graphics/GraphicsComponent.cs @@ -6,7 +6,7 @@ namespace ZoFo.GameCore.Graphics; public abstract class GraphicsComponent { public Rectangle ObjectDrawRectangle; - public static int scaling = 1; + public static int scaling = 3; public string mainTextureName;//TODO костыль - пофиксить public SpriteEffects Flip = SpriteEffects.None; diff --git a/ZoFo/GameCore/Server.cs b/ZoFo/GameCore/Server.cs index f3433d0..e604cb1 100644 --- a/ZoFo/GameCore/Server.cs +++ b/ZoFo/GameCore/Server.cs @@ -183,6 +183,22 @@ namespace ZoFo.GameCore { gameObjects.Add(gameObject); + if (gameObject is StopObject) + { + AddData(new UpdateStopObjectCreated() + { + Position = (gameObject as StopObject).position, + sourceRectangle = new SerializableRectangle((gameObject as StopObject).sourceRectangle), + Size = new SerializablePoint((gameObject as StopObject).graphicsComponent.ObjectDrawRectangle.Size), + tileSetName = ((gameObject as StopObject).graphicsComponent as StaticGraphicsComponent)._textureName, + collisions = (gameObject as StopObject).collisionComponents.Select(x=>new SerializableRectangle(x.stopRectangle)).ToArray() + });//TODO + foreach (var col in (gameObject as StopObject).collisionComponents) + { + collisionManager.Register(col); + } + return; + } if (gameObject is MapObject) { AddData(new UpdateTileCreated() @@ -191,7 +207,7 @@ namespace ZoFo.GameCore sourceRectangle = new SerializableRectangle((gameObject as MapObject).sourceRectangle), Size = new SerializablePoint((gameObject as MapObject).graphicsComponent.ObjectDrawRectangle.Size), tileSetName = ((gameObject as MapObject).graphicsComponent as StaticGraphicsComponent)._textureName - });//TODO + }); return; } if (gameObject is Entity entity) @@ -207,9 +223,7 @@ namespace ZoFo.GameCore if (gameObject is Player) - { - players.Add(gameObject as Player); - } + players.Add(gameObject as Player); ////var elems = gameObject.GetType().GetProperties(System.Reflection.BindingFlags.Public); ////if (elems.Count()>0) TODO ////{ From a1d209ba37e0115a8b99f94325485b7dea13713e Mon Sep 17 00:00:00 2001 From: SergoDobro Date: Mon, 19 Aug 2024 01:43:34 +0300 Subject: [PATCH 09/10] scaling --- .../GameObjects/Entities/LivingEntities/Enemies/Zombie.cs | 2 +- ZoFo/GameCore/Server.cs | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs index e37f822..da9e759 100644 --- a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs @@ -17,7 +17,7 @@ namespace ZoFo.GameCore.GameObjects.Entities.LivingEntities.Enemies health = 5; speed = 2; graphicsComponent.ObjectDrawRectangle = new Rectangle(0, 0, 30, 30); - collisionComponent.stopRectangle = new Rectangle(0, 10, 30, 20); + collisionComponent.stopRectangle = new Rectangle(10, 20, 10, 10); } public override void Update() diff --git a/ZoFo/GameCore/Server.cs b/ZoFo/GameCore/Server.cs index e604cb1..01a01f0 100644 --- a/ZoFo/GameCore/Server.cs +++ b/ZoFo/GameCore/Server.cs @@ -141,6 +141,8 @@ namespace ZoFo.GameCore AppManager.Instance.server.RegisterGameObject(new Zombie(new Vector2(1300, 1000))); AppManager.Instance.server.RegisterGameObject(new Zombie(new Vector2(1500, 1000))); AppManager.Instance.server.RegisterGameObject(new Zombie(new Vector2(1700, 1000))); + AppManager.Instance.server.RegisterGameObject(new Zombie(new Vector2(1900, 1000))); + AppManager.Instance.server.RegisterGameObject(new Zombie(new Vector2(2100, 1000))); AppManager.Instance.server.RegisterGameObject(new Ammo(new Vector2(140, 440))); AppManager.Instance.server.RegisterGameObject(new Ammo(new Vector2(240, 440))); } From 784deabe9bddb625e253f6d9f9ffc36ef269cc27 Mon Sep 17 00:00:00 2001 From: SergoDobro Date: Mon, 19 Aug 2024 10:13:05 +0300 Subject: [PATCH 10/10] Working Version --- .../Entities/LivingEntities/Enemies/Zombie.cs | 5 +-- ZoFo/GameCore/Server.cs | 36 ++++++++++--------- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs index da9e759..496382f 100644 --- a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs @@ -18,6 +18,7 @@ namespace ZoFo.GameCore.GameObjects.Entities.LivingEntities.Enemies speed = 2; graphicsComponent.ObjectDrawRectangle = new Rectangle(0, 0, 30, 30); collisionComponent.stopRectangle = new Rectangle(10, 20, 10, 10); + StartAnimation("zombie_walk"); } public override void Update() @@ -29,12 +30,12 @@ namespace ZoFo.GameCore.GameObjects.Entities.LivingEntities.Enemies if (Random.Shared.NextDouble() > 0.9) { - StartAnimation("zombie_damaged"); + StartAnimation("zombie_walk"); } if (Random.Shared.NextDouble() > 0.9) { - StartAnimation("zombie_idle"); + //StartAnimation("zombie_idle"); } } diff --git a/ZoFo/GameCore/Server.cs b/ZoFo/GameCore/Server.cs index 01a01f0..baa753a 100644 --- a/ZoFo/GameCore/Server.cs +++ b/ZoFo/GameCore/Server.cs @@ -30,7 +30,7 @@ namespace ZoFo.GameCore { private ServerNetworkManager networkManager; private int ticks = 0; - public IPEndPoint MyIp { get { return networkManager.InfoConnect; } } + public IPEndPoint MyIp { get { return networkManager.InfoConnect; } } public Server() { networkManager = new ServerNetworkManager(); @@ -137,12 +137,10 @@ namespace ZoFo.GameCore //AppManager.Instance.server.RegisterGameObject(new EntittyForAnimationTests(new Vector2(0, 0))); AppManager.Instance.server.RegisterGameObject(new Player(new Vector2(740, 140))); - AppManager.Instance.server.RegisterGameObject(new Zombie(new Vector2(1000, 1000))); - AppManager.Instance.server.RegisterGameObject(new Zombie(new Vector2(1300, 1000))); - AppManager.Instance.server.RegisterGameObject(new Zombie(new Vector2(1500, 1000))); - AppManager.Instance.server.RegisterGameObject(new Zombie(new Vector2(1700, 1000))); - AppManager.Instance.server.RegisterGameObject(new Zombie(new Vector2(1900, 1000))); - AppManager.Instance.server.RegisterGameObject(new Zombie(new Vector2(2100, 1000))); + for (int i = 0; i < 20; i++) + for (int j = 0; j < 20; j++) + AppManager.Instance.server.RegisterGameObject(new Zombie(new Vector2(1300 + i*70, 1000+j*70))); + AppManager.Instance.server.RegisterGameObject(new Ammo(new Vector2(140, 440))); AppManager.Instance.server.RegisterGameObject(new Ammo(new Vector2(240, 440))); } @@ -159,7 +157,7 @@ namespace ZoFo.GameCore public List gameObjects; public List entities; //entity - public List players; + public List players; public void Update(GameTime gameTime) { if (ticks == 3) //ОБРАБАТЫВАЕТСЯ 20 РАЗ В СЕКУНДУ @@ -193,7 +191,7 @@ namespace ZoFo.GameCore sourceRectangle = new SerializableRectangle((gameObject as StopObject).sourceRectangle), Size = new SerializablePoint((gameObject as StopObject).graphicsComponent.ObjectDrawRectangle.Size), tileSetName = ((gameObject as StopObject).graphicsComponent as StaticGraphicsComponent)._textureName, - collisions = (gameObject as StopObject).collisionComponents.Select(x=>new SerializableRectangle(x.stopRectangle)).ToArray() + collisions = (gameObject as StopObject).collisionComponents.Select(x => new SerializableRectangle(x.stopRectangle)).ToArray() });//TODO foreach (var col in (gameObject as StopObject).collisionComponents) { @@ -209,17 +207,23 @@ namespace ZoFo.GameCore sourceRectangle = new SerializableRectangle((gameObject as MapObject).sourceRectangle), Size = new SerializablePoint((gameObject as MapObject).graphicsComponent.ObjectDrawRectangle.Size), tileSetName = ((gameObject as MapObject).graphicsComponent as StaticGraphicsComponent)._textureName - }); + }); return; } if (gameObject is Entity entity) { - AddData(new UpdateGameObjectCreated() { GameObjectType = gameObject.GetType().Name, IdEntity = entity.Id, - position = gameObject.position}); + AddData(new UpdateGameObjectCreated() + { + GameObjectType = gameObject.GetType().Name, + IdEntity = entity.Id, + position = gameObject.position + }); collisionManager.Register(entity.collisionComponent); } else - AddData(new UpdateGameObjectCreated() { GameObjectType = gameObject.GetType().Name, + AddData(new UpdateGameObjectCreated() + { + GameObjectType = gameObject.GetType().Name, position = gameObject.position }); @@ -233,7 +237,7 @@ namespace ZoFo.GameCore ////} } - + /// /// Удаляет игровой объект /// @@ -247,12 +251,12 @@ namespace ZoFo.GameCore if (players.Contains(entity)) players.Remove(entity as Player); AddData(new UpdateGameObjectDeleted() - { GameObjectType = entity.GetType().Name, IdEntity = entity .Id} + { GameObjectType = entity.GetType().Name, IdEntity = entity.Id } ); collisionManager.Deregister(entity.collisionComponent); } } - + #endregion #endregion