diff --git a/CMakeLists.txt b/CMakeLists.txt index cc9a15ad..f7dabca5 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,10 @@ set(SOURCE_FILES src/Anchor.h src/Animation.cpp src/Animation.h + src/AnimationType.h src/AudioSource.h + src/BaseAnimation.cpp + src/BaseAnimation.h src/BitmapButton.cpp src/BitmapButton.h src/BitmapFont.cpp @@ -48,7 +51,8 @@ set(SOURCE_FILES src/FadeInOut.h src/FileUtils.cpp src/FileUtils.h - src/Font2.h + src/Font.h + src/FreeTypeFont.h src/Game.cpp src/Game.h src/GameUtils.cpp @@ -199,8 +203,6 @@ set(SOURCE_FILES src/Parser/ParseAudio.h src/Parser/ParseAudioCommon.cpp src/Parser/ParseAudioCommon.h - src/Parser/ParseBitmapFont.cpp - src/Parser/ParseBitmapFont.h src/Parser/ParseButton.cpp src/Parser/ParseButton.h src/Parser/ParseCircle.cpp @@ -321,10 +323,10 @@ set(SOURCE_FILES src/rapidjson/msinttypes/stdint.h src/TexturePacks/CachedTexturePack.cpp src/TexturePacks/CachedTexturePack.h + src/TexturePacks/IndexedTexturePack.cpp + src/TexturePacks/IndexedTexturePack.h src/TexturePacks/RectTexturePack.cpp src/TexturePacks/RectTexturePack.h - src/TexturePacks/SimpleIndexedTexturePack.cpp - src/TexturePacks/SimpleIndexedTexturePack.h src/TexturePacks/SimpleTexturePack.cpp src/TexturePacks/SimpleTexturePack.h src/TexturePacks/TexturePack.cpp diff --git a/DGEngine.vcxproj b/DGEngine.vcxproj index 8814ee0f..676cf43f 100755 --- a/DGEngine.vcxproj +++ b/DGEngine.vcxproj @@ -32,6 +32,7 @@ + @@ -86,7 +87,6 @@ - @@ -141,8 +141,8 @@ + - @@ -186,11 +186,15 @@ + + + + @@ -242,7 +246,6 @@ - @@ -301,7 +304,6 @@ - @@ -320,8 +322,8 @@ + - diff --git a/android/jni/Android.mk b/android/jni/Android.mk index a1618b00..678440b0 100755 --- a/android/jni/Android.mk +++ b/android/jni/Android.mk @@ -12,7 +12,10 @@ LOCAL_SRC_FILES += Alignment.h LOCAL_SRC_FILES += Anchor.h LOCAL_SRC_FILES += Animation.cpp LOCAL_SRC_FILES += Animation.h +LOCAL_SRC_FILES += AnimationType.h LOCAL_SRC_FILES += AudioSource.h +LOCAL_SRC_FILES += BaseAnimation.cpp +LOCAL_SRC_FILES += BaseAnimation.h LOCAL_SRC_FILES += BitmapButton.cpp LOCAL_SRC_FILES += BitmapButton.h LOCAL_SRC_FILES += BitmapFont.cpp @@ -34,7 +37,8 @@ LOCAL_SRC_FILES += FadeInOut.cpp LOCAL_SRC_FILES += FadeInOut.h LOCAL_SRC_FILES += FileUtils.cpp LOCAL_SRC_FILES += FileUtils.h -LOCAL_SRC_FILES += Font2.h +LOCAL_SRC_FILES += Font.h +LOCAL_SRC_FILES += FreeTypeFont.h LOCAL_SRC_FILES += Game.cpp LOCAL_SRC_FILES += Game.h LOCAL_SRC_FILES += GameUtils.cpp @@ -185,8 +189,6 @@ LOCAL_SRC_FILES += Parser/ParseAudio.cpp LOCAL_SRC_FILES += Parser/ParseAudio.h LOCAL_SRC_FILES += Parser/ParseAudioCommon.cpp LOCAL_SRC_FILES += Parser/ParseAudioCommon.h -LOCAL_SRC_FILES += Parser/ParseBitmapFont.cpp -LOCAL_SRC_FILES += Parser/ParseBitmapFont.h LOCAL_SRC_FILES += Parser/ParseButton.cpp LOCAL_SRC_FILES += Parser/ParseButton.h LOCAL_SRC_FILES += Parser/ParseCircle.cpp @@ -307,10 +309,10 @@ LOCAL_SRC_FILES += rapidjson/msinttypes/inttypes.h LOCAL_SRC_FILES += rapidjson/msinttypes/stdint.h LOCAL_SRC_FILES += TexturePacks/CachedTexturePack.cpp LOCAL_SRC_FILES += TexturePacks/CachedTexturePack.h +LOCAL_SRC_FILES += TexturePacks/IndexedTexturePack.cpp +LOCAL_SRC_FILES += TexturePacks/IndexedTexturePack.h LOCAL_SRC_FILES += TexturePacks/RectTexturePack.cpp LOCAL_SRC_FILES += TexturePacks/RectTexturePack.h -LOCAL_SRC_FILES += TexturePacks/SimpleIndexedTexturePack.cpp -LOCAL_SRC_FILES += TexturePacks/SimpleIndexedTexturePack.h LOCAL_SRC_FILES += TexturePacks/SimpleTexturePack.cpp LOCAL_SRC_FILES += TexturePacks/SimpleTexturePack.h LOCAL_SRC_FILES += TexturePacks/TexturePack.cpp diff --git a/gamefilesd/level/item/amulets.json b/gamefilesd/level/item/amulets.json index 8df58524..84a9773e 100755 --- a/gamefilesd/level/item/amulets.json +++ b/gamefilesd/level/item/amulets.json @@ -2,37 +2,29 @@ "itemClass": [ { "id": "amulet", - "replaceVars": true, - "dropTexturePack": "itemDrop", - "dropTextureIndex": 35, + "fromId": "baseItem", + "dropTexturePack": "ring", "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 56, "name": "Amulet", "shortName": "Amulet", "type": "Amulet", - "defaultOutline": "%outlineItem%", - "defaultOutlineIgnore": "0x000000", "defaults": { "price": 1200, + "identified": false, "magical": true, "durability": "max", "durabilityMax": "max" }, - "formulas": { - "sell": "price * 0.25" - }, "descriptions": [ { "index": 0, "name": "indestructible" }, { "index": 1, "name": "magic" }, { "index": 2, "name": "magic", "skip": 1 }, { "index": 3, "name": "noAttributes" } ], - "inventorySize": [1, 1], "actions": { - "action": "pickItemInLevel", "levelDrop": { "name": "sound.play", "id": "flipring" }, - "inventoryDrop": { "name": "sound.play", "id": "invring" }, - "inventoryPick": "pickItemInInventory" + "inventoryDrop": { "name": "sound.play", "id": "invring" } }, "prefix": "jewelleryPrefixes", "suffix": "jewellerySuffixes" diff --git a/gamefilesd/level/item/armors.json b/gamefilesd/level/item/armors.json index b10517fe..feed3966 100755 --- a/gamefilesd/level/item/armors.json +++ b/gamefilesd/level/item/armors.json @@ -3,9 +3,7 @@ { "id": "rags", "fromId": "baseArmor", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 32, - "inventoryTexturePack": "itemIcons", + "dropTexturePack": "larmor", "inventoryTextureIndex": 139, "name": "Rags", "shortName": "Rags", @@ -21,9 +19,6 @@ { "id": "cape", "fromId": "rags", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 32, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 161, "name": "Cape", "shortName": "Cape", @@ -37,9 +32,6 @@ { "id": "cloak", "fromId": "rags", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 32, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 160, "name": "Cloak", "shortName": "Cloak", @@ -53,9 +45,6 @@ { "id": "robe", "fromId": "rags", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 32, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 148, "name": "Robe", "shortName": "Robe", @@ -69,9 +58,6 @@ { "id": "quiltedArmor", "fromId": "rags", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 32, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 140, "name": "Quilted Armor", "shortName": "Armor", @@ -86,9 +72,6 @@ { "id": "leatherArmor", "fromId": "quiltedArmor", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 32, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 146, "name": "Leather Armor", "defaults": { @@ -101,9 +84,6 @@ { "id": "hardLeatherArmor", "fromId": "quiltedArmor", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 32, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 138, "name": "Hard Leather Armor", "defaults": { @@ -116,9 +96,6 @@ { "id": "studdedLeatherArmor", "fromId": "quiltedArmor", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 32, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 118, "name": "Studded Leather Armor", "defaults": { @@ -132,10 +109,8 @@ { "id": "ringMail", "fromId": "quiltedArmor", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 28, - "inventoryTexturePack": "itemIcons", - "inventoryTextureIndex": {1}, + "dropTexturePack": "FPlateAr", + "inventoryTextureIndex": 165, "name": "Ring Mail", "shortName": "Mail", "subType": "Plate", @@ -154,9 +129,6 @@ { "id": "chainMail", "fromId": "ringMail", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 28, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 122, "name": "Chain Mail", "defaults": { @@ -170,9 +142,6 @@ { "id": "scaleMail", "fromId": "ringMail", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 28, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 125, "name": "Scale Mail", "defaults": { @@ -186,9 +155,6 @@ { "id": "breastPlate", "fromId": "ringMail", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 28, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 164, "name": "Breast Plate", "shortName": "Plate", @@ -203,9 +169,6 @@ { "id": "splintMail", "fromId": "ringMail", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 28, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 147, "name": "Splint Mail", "defaults": { @@ -219,9 +182,6 @@ { "id": "fieldPlate", "fromId": "breastPlate", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 28, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 114, "name": "Field Plate", "defaults": { @@ -235,10 +195,7 @@ { "id": "gothicPlate", "fromId": "breastPlate", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 28, - "inventoryTexturePack": "itemIcons", - "inventoryTextureIndex": {2}, + "inventoryTextureIndex": 163, "name": "Gothic Plate", "defaults": { "price": 8000, @@ -251,9 +208,6 @@ { "id": "fullPlateMail", "fromId": "breastPlate", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 28, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 162, "name": "Full Plate Mail", "defaults": { @@ -267,10 +221,8 @@ { "id": "valorArmor", "fromId": "ringMail", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 0, - "inventoryTexturePack": "itemIcons", - "inventoryTextureIndex": {3}, + "dropTexturePack": "armor2", + "inventoryTextureIndex": 168, "name": "Arkaine's Valor", "shortName": "Arkaine's Valor", "descriptions": [ diff --git a/gamefilesd/level/item/axes.json b/gamefilesd/level/item/axes.json index 8db75f4c..c884be68 100755 --- a/gamefilesd/level/item/axes.json +++ b/gamefilesd/level/item/axes.json @@ -3,9 +3,7 @@ { "id": "smallAxe", "fromId": "baseWeapon", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 1, - "inventoryTexturePack": "itemIcons", + "dropTexturePack": "axe", "inventoryTextureIndex": 123, "name": "Small Axe", "shortName": "Axe", @@ -27,9 +25,6 @@ { "id": "axe", "fromId": "smallAxe", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 1, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 155, "name": "Axe", "defaults": { @@ -44,9 +39,6 @@ { "id": "largeAxe", "fromId": "smallAxe", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 1, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 153, "name": "Large Axe", "defaults": { @@ -61,9 +53,6 @@ { "id": "broadAxe", "fromId": "smallAxe", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 1, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 152, "name": "Broad Axe", "defaults": { @@ -78,9 +67,6 @@ { "id": "battleAxe", "fromId": "smallAxe", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 1, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 112, "name": "Battle Axe", "defaults": { @@ -95,9 +81,6 @@ { "id": "greatAxe", "fromId": "smallAxe", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 1, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 154, "name": "Great Axe", "defaults": { diff --git a/gamefilesd/level/item/baseItems.json b/gamefilesd/level/item/baseItems.json index 75630f35..34142bc8 100755 --- a/gamefilesd/level/item/baseItems.json +++ b/gamefilesd/level/item/baseItems.json @@ -1,23 +1,38 @@ { "itemClass": [ { - "id": "baseArmor", + "id": "baseItem", "replaceVars": true, - "dropTexturePack": "itemDrop", - "dropTextureIndex": 32, + "dropTexturePack": "fbttle", "inventoryTexturePack": "itemIcons", - "inventoryTextureIndex": 161, - "name": "Armor", - "type": "Armor", + "inventoryTextureIndex": 43, + "name": "Item", + "type": "Item", "defaultOutline": "%outlineItem%", "defaultOutlineIgnore": "0x000000", "defaults": { - "identified": true, - "magical": false + "identified": true }, "formulas": { "sell": "price * 0.25" }, + "inventorySize": [1, 1], + "actions": { + "action": "pickItemInLevel", + "inventoryPick": "pickItemInInventory" + } + }, + { + "id": "baseArmor", + "fromId": "baseItem", + "dropTexturePack": "larmor", + "inventoryTexturePack": "itemIcons", + "inventoryTextureIndex": 161, + "name": "Armor", + "type": "Armor", + "defaults": { + "magical": false + }, "descriptions": [ { "index": 0, "name": "armor" }, { "index": 1, "name": "magic" }, @@ -26,44 +41,33 @@ ], "inventorySize": [2, 3], "actions": { - "action": "pickItemInLevel", "levelDrop": { "name": "sound.play", "id": "fliplarm" }, - "inventoryDrop": { "name": "sound.play", "id": "invlarm" }, - "inventoryPick": "pickItemInInventory" + "inventoryDrop": { "name": "sound.play", "id": "invlarm" } }, "prefix": "armorPrefixes", "suffix": "armorSuffixes" }, { "id": "baseWeapon", - "replaceVars": true, - "dropTexturePack": "itemDrop", - "dropTextureIndex": 32, + "fromId": "baseItem", + "dropTexturePack": "swrdflip", "inventoryTexturePack": "itemIcons", - "inventoryTextureIndex": 161, + "inventoryTextureIndex": 75, "name": "Weapon", "type": "Weapon", - "defaultOutline": "%outlineItem%", - "defaultOutlineIgnore": "0x000000", "defaults": { - "identified": true, "magical": false }, - "formulas": { - "sell": "price * 0.25" - }, "descriptions": [ { "index": 0, "name": "weapon" }, { "index": 1, "name": "magic" }, { "index": 2, "name": "magic", "skip": 1 }, { "index": 3, "name": "required" } ], - "inventorySize": [2, 3], + "inventorySize": [1, 3], "actions": { - "action": "pickItemInLevel", "levelDrop": { "name": "sound.play", "id": "flipswor" }, - "inventoryDrop": { "name": "sound.play", "id": "invsword" }, - "inventoryPick": "pickItemInInventory" + "inventoryDrop": { "name": "sound.play", "id": "invsword" } }, "prefix": "weaponPrefixes", "suffix": "weaponSuffixes" diff --git a/gamefilesd/level/item/books.json b/gamefilesd/level/item/books.json index 26d05902..666b2f31 100755 --- a/gamefilesd/level/item/books.json +++ b/gamefilesd/level/item/books.json @@ -2,21 +2,14 @@ "itemClass": [ { "id": "book", - "replaceVars": true, - "dropTexturePack": "itemDrop", - "dropTextureIndex": 10, + "fromId": "baseItem", + "dropTexturePack": "fbook", "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 97, "name": "Book", "type": "Book", - "defaultOutline": "%outlineItem%", - "defaultOutlineIgnore": "0x000000", "defaults": { - "price": 1000, - "identified": true - }, - "formulas": { - "sell": "price * 0.25" + "price": 1000 }, "descriptions": [ { "index": 0, "name": "rightClickToRead" }, @@ -24,10 +17,8 @@ ], "inventorySize": [2, 2], "actions": { - "action": "pickItemInLevel", "levelDrop": { "name": "sound.play", "id": "flipbook" }, - "inventoryDrop": { "name": "sound.play", "id": "invbook" }, - "inventoryPick": "pickItemInInventory" + "inventoryDrop": { "name": "sound.play", "id": "invbook" } } } ] diff --git a/gamefilesd/level/item/bows.json b/gamefilesd/level/item/bows.json index 49c85645..4dbb18b4 100755 --- a/gamefilesd/level/item/bows.json +++ b/gamefilesd/level/item/bows.json @@ -3,9 +3,7 @@ { "id": "shortBow", "fromId": "baseWeapon", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 11, - "inventoryTexturePack": "itemIcons", + "dropTexturePack": "bow", "inventoryTextureIndex": 129, "name": "Short Bow", "shortName": "Bow", @@ -27,9 +25,6 @@ { "id": "longBow", "fromId": "shortBow", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 11, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 113, "name": "Long Bow", "defaults": { @@ -45,9 +40,6 @@ { "id": "huntersBow", "fromId": "shortBow", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 11, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 113, "name": "Hunter's Bow", "defaults": { @@ -63,9 +55,6 @@ { "id": "compositeBow", "fromId": "shortBow", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 11, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 144, "name": "Composite Bow", "defaults": { @@ -81,10 +70,7 @@ { "id": "shortBattleBow", "fromId": "shortBow", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 11, - "inventoryTexturePack": "itemIcons", - "inventoryTextureIndex": {1}, + "inventoryTextureIndex": 178, "name": "Short Battle Bow", "defaults": { "price": 750, @@ -99,9 +85,6 @@ { "id": "longBattleBow", "fromId": "shortBow", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 11, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 130, "name": "Long Battle Bow", "defaults": { @@ -117,10 +100,7 @@ { "id": "shortWarBow", "fromId": "shortBow", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 11, - "inventoryTexturePack": "itemIcons", - "inventoryTextureIndex": {2}, + "inventoryTextureIndex": 176, "name": "Short War Bow", "defaults": { "price": 1500, @@ -135,9 +115,6 @@ { "id": "longWarBow", "fromId": "shortBow", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 11, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 130, "name": "Long War Bow", "defaults": { diff --git a/gamefilesd/level/item/loadItemClasses.json b/gamefilesd/level/item/classes.json similarity index 70% rename from gamefilesd/level/item/loadItemClasses.json rename to gamefilesd/level/item/classes.json index 24e79e01..98b700a8 100755 --- a/gamefilesd/level/item/loadItemClasses.json +++ b/gamefilesd/level/item/classes.json @@ -4,8 +4,14 @@ "name": "if.equal", "param1": "%beta%", "param2": true, - "then": { "name": "load", "file": "level/item/itemCelFilesBeta.json" }, - "else": { "name": "load", "file": "level/item/itemCelFiles.json" } + "then": [ + { "name": "load", "file": "level/item/itemCelFilesBeta.json" }, + { "name": "load", "file": "level/item/inventoryTexturesBeta.json" } + ], + "else": [ + { "name": "load", "file": "level/item/itemCelFiles.json" }, + { "name": "load", "file": "level/item/inventoryTextures.json" } + ] }, { "name": "action.set", @@ -97,64 +103,10 @@ } } ], - "texturePack": { - "id": "itemDrop", - "imageContainer": [ - "armor2", - "axe", - "axeflip", - "bldstn", - "bottle", - "bow", - "cleaver", - "crownf", - "duricons", - "fanvil", - "fbook", - "fbow", - "fbrain", - "fbttle", - "fbttlebb", - "fbttlebl", - "fbttlebr", - "fbttleby", - "fbttledb", - "fbttledy", - "fbttleor", - "fbttlewh", - "fear", - "feye", - "fheart", - "flazstaf", - "fmush", - "food", - "FPlateAr", - "goldflip", - "helmut", - "innsign", - "larmor", - "mace", - "manaflip", - "ring", - "rock", - "scroll", - "shield", - "staff", - "swrdflip", - "wand", - "wshield" - ], - "palette": "town" - }, - "imageContainer": { "file": "data/inv/objcurs.cel" }, - "texturePack": { - "id": "itemIcons", - "imageContainer": "objcurs", - "palette": "town" - }, + "load": "level/item/dropTextures.json", "load": "level/item/prefixes.json", "load": "level/item/suffixes.json", "load": "level/item/descriptions.json", "load": "level/item/descriptionsUnique.json", - "load": "level/item/loadItemClasses2.json" + "load": "level/item/classes2.json" } \ No newline at end of file diff --git a/gamefilesd/level/item/classes2.json b/gamefilesd/level/item/classes2.json new file mode 100755 index 00000000..12967112 --- /dev/null +++ b/gamefilesd/level/item/classes2.json @@ -0,0 +1,17 @@ +{ + "load": "level/item/baseItems.json", + "load": "level/item/amulets.json", + "load": "level/item/armors.json", + "load": "level/item/axes.json", + "load": "level/item/books.json", + "load": "level/item/bows.json", + "load": "level/item/clubs.json", + "load": "level/item/helmets.json", + "load": "level/item/misc.json", + "load": "level/item/potions.json", + "load": "level/item/rings.json", + "load": "level/item/scrolls.json", + "load": "level/item/shields.json", + "load": "level/item/staffs.json", + "load": "level/item/swords.json" +} \ No newline at end of file diff --git a/gamefilesd/level/item/clubs.json b/gamefilesd/level/item/clubs.json index f676c271..411d8bdb 100755 --- a/gamefilesd/level/item/clubs.json +++ b/gamefilesd/level/item/clubs.json @@ -3,9 +3,7 @@ { "id": "club", "fromId": "baseWeapon", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 40, - "inventoryTexturePack": "itemIcons", + "dropTexturePack": "mace", "inventoryTextureIndex": 77, "name": "Club", "shortName": "Club", @@ -22,9 +20,6 @@ { "id": "spikedClub", "fromId": "club", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 40, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 81, "name": "Spiked Club", "defaults": { @@ -39,9 +34,6 @@ { "id": "mace", "fromId": "club", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 40, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 70, "name": "Mace", "shortName": "Mace", @@ -57,9 +49,6 @@ { "id": "morningStar", "fromId": "mace", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 40, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 74, "name": "Morning Star", "defaults": { @@ -74,9 +63,6 @@ { "id": "flail", "fromId": "mace", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 40, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 142, "name": "Flail", "shortName": "Flail", @@ -93,9 +79,6 @@ { "id": "warHammer", "fromId": "flail", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 40, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 132, "name": "War Hammer", "shortName": "Hammer", @@ -111,9 +94,6 @@ { "id": "maul", "fromId": "flail", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 40, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 133, "name": "Maul", "shortName": "Maul", diff --git a/gamefilesd/level/item/dropTextures.json b/gamefilesd/level/item/dropTextures.json new file mode 100755 index 00000000..fd549040 --- /dev/null +++ b/gamefilesd/level/item/dropTextures.json @@ -0,0 +1,54 @@ +{ + "action": { + "name": "if.equal", + "param1": "%beta%", + "param2": true, + "then": { "name": "load", "file": "level/item/itemCelFilesBeta.json" }, + "else": { "name": "load", "file": "level/item/itemCelFiles.json" } + }, + "texturePack": [ + { "id": "armor2", "imageContainer": "armor2", "palette": "town" }, + { "id": "axe", "imageContainer": "axe", "palette": "town" }, + { "id": "axeflip", "imageContainer": "axeflip", "palette": "town" }, + { "id": "bldstn", "imageContainer": "bldstn", "palette": "town" }, + { "id": "bottle", "imageContainer": "bottle", "palette": "town" }, + { "id": "bow", "imageContainer": "bow", "palette": "town" }, + { "id": "cleaver", "imageContainer": "cleaver", "palette": "town" }, + { "id": "crownf", "imageContainer": "crownf", "palette": "town" }, + { "id": "duricons", "imageContainer": "duricons", "palette": "town" }, + { "id": "fanvil", "imageContainer": "fanvil", "palette": "town" }, + { "id": "fbook", "imageContainer": "fbook", "palette": "town" }, + { "id": "fbow", "imageContainer": "fbow", "palette": "town" }, + { "id": "fbrain", "imageContainer": "fbrain", "palette": "town" }, + { "id": "fbttle", "imageContainer": "fbttle", "palette": "town" }, + { "id": "fbttlebb", "imageContainer": "fbttlebb", "palette": "town" }, + { "id": "fbttlebl", "imageContainer": "fbttlebl", "palette": "town" }, + { "id": "fbttlebr", "imageContainer": "fbttlebr", "palette": "town" }, + { "id": "fbttleby", "imageContainer": "fbttleby", "palette": "town" }, + { "id": "fbttledb", "imageContainer": "fbttledb", "palette": "town" }, + { "id": "fbttledy", "imageContainer": "fbttledy", "palette": "town" }, + { "id": "fbttleor", "imageContainer": "fbttleor", "palette": "town" }, + { "id": "fbttlewh", "imageContainer": "fbttlewh", "palette": "town" }, + { "id": "fear", "imageContainer": "fear", "palette": "town" }, + { "id": "feye", "imageContainer": "feye", "palette": "town" }, + { "id": "fheart", "imageContainer": "fheart", "palette": "town" }, + { "id": "flazstaf", "imageContainer": "flazstaf", "palette": "town" }, + { "id": "fmush", "imageContainer": "fmush", "palette": "town" }, + { "id": "food", "imageContainer": "food", "palette": "town" }, + { "id": "FPlateAr", "imageContainer": "FPlateAr", "palette": "town" }, + { "id": "goldflip", "imageContainer": "goldflip", "palette": "town" }, + { "id": "helmut", "imageContainer": "helmut", "palette": "town" }, + { "id": "innsign", "imageContainer": "innsign", "palette": "town" }, + { "id": "larmor", "imageContainer": "larmor", "palette": "town" }, + { "id": "mace", "imageContainer": "mace", "palette": "town" }, + { "id": "manaflip", "imageContainer": "manaflip", "palette": "town" }, + { "id": "ring", "imageContainer": "ring", "palette": "town" }, + { "id": "rock", "imageContainer": "rock", "palette": "town" }, + { "id": "scroll", "imageContainer": "scroll", "palette": "town" }, + { "id": "shield", "imageContainer": "shield", "palette": "town" }, + { "id": "staff", "imageContainer": "staff", "palette": "town" }, + { "id": "swrdflip", "imageContainer": "swrdflip", "palette": "town" }, + { "id": "wand", "imageContainer": "wand", "palette": "town" }, + { "id": "wshield", "imageContainer": "wshield", "palette": "town" } + ] +} \ No newline at end of file diff --git a/gamefilesd/level/item/helmets.json b/gamefilesd/level/item/helmets.json index aa81c491..c44d0009 100755 --- a/gamefilesd/level/item/helmets.json +++ b/gamefilesd/level/item/helmets.json @@ -3,9 +3,7 @@ { "id": "cap", "fromId": "baseArmor", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 30, - "inventoryTexturePack": "itemIcons", + "dropTexturePack": "helmut", "inventoryTextureIndex": 102, "name": "Cap", "shortName": "Cap", @@ -25,9 +23,6 @@ { "id": "skullCap", "fromId": "cap", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 30, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 101, "name": "Skull Cap", "defaults": { @@ -40,9 +35,6 @@ { "id": "helm", "fromId": "cap", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 30, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 93, "name": "Helm", "shortName": "Helm", @@ -57,9 +49,6 @@ { "id": "fullHelm", "fromId": "helm", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 30, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 86, "name": "Full Helm", "defaults": { @@ -73,9 +62,6 @@ { "id": "crown", "fromId": "helm", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 30, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 106, "name": "Crown", "shortName": "Crown", @@ -90,9 +76,6 @@ { "id": "greatHelm", "fromId": "helm", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 30, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 109, "name": "Great Helm", "defaults": { diff --git a/gamefilesd/level/item/inventoryTextures.json b/gamefilesd/level/item/inventoryTextures.json new file mode 100755 index 00000000..68bd6151 --- /dev/null +++ b/gamefilesd/level/item/inventoryTextures.json @@ -0,0 +1,8 @@ +{ + "imageContainer": { "file": "data/inv/objcurs.cel" }, + "texturePack": { + "id": "itemIcons", + "imageContainer": "objcurs", + "palette": "town" + } +} \ No newline at end of file diff --git a/gamefilesd/level/item/inventoryTexturesBeta.json b/gamefilesd/level/item/inventoryTexturesBeta.json new file mode 100755 index 00000000..95ee6f72 --- /dev/null +++ b/gamefilesd/level/item/inventoryTexturesBeta.json @@ -0,0 +1,32 @@ +{ + "imageContainer": { "file": "data/inv/objcurs.cel" }, + "texturePack": { + "id": "itemIcons", + "imageContainer": "objcurs", + "palette": "town", + "onlyUseIndexed": false, + "textureIndexes": [ + [26, 40], + [27, 49], + [28, 44], + [29, 21], + [31, 30], + [32, 30], + [60, 31], + [163, 114], + [165, 150], + [166, 134], + [168, 150], + [169, 131], + [170, 147], + [171, 117], + [172, 145], + [173, 133], + [174, 112], + [175, 131], + [176, 131], + [177, 135], + [178, 131] + ] + } +} \ No newline at end of file diff --git a/gamefilesd/level/item/loadItemClasses2.json b/gamefilesd/level/item/loadItemClasses2.json deleted file mode 100755 index 4fd31768..00000000 --- a/gamefilesd/level/item/loadItemClasses2.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "load": "level/item/baseItems.json", - "action": { - "name": "if.equal", - "param1": "%beta%", - "param2": true, - "then": [ - { "name": "load", "file": "level/item/amulets.json" }, - { "name": "load", "file": ["level/item/armors.json", "150", "114", "162"] }, - { "name": "load", "file": "level/item/axes.json" }, - { "name": "load", "file": "level/item/books.json" }, - { "name": "load", "file": ["level/item/bows.json", "119", "119"] }, - { "name": "load", "file": "level/item/clubs.json" }, - { "name": "load", "file": "level/item/helmets.json" }, - { "name": "load", "file": "level/item/misc.json" }, - { "name": "load", "file": ["level/item/potions.json", "40"] }, - { "name": "load", "file": "level/item/rings.json" }, - { "name": "load", "file": "level/item/scrolls.json" }, - { "name": "load", "file": "level/item/shields.json" }, - { "name": "load", "file": ["level/item/staffs.json", "135"] }, - { "name": "load", "file": "level/item/swords.json" } - ], - "else": [ - { "name": "load", "file": "level/item/amulets.json" }, - { "name": "load", "file": ["level/item/armors.json", "165", "163", "168"] }, - { "name": "load", "file": "level/item/axes.json" }, - { "name": "load", "file": "level/item/books.json" }, - { "name": "load", "file": ["level/item/bows.json", "178", "176"] }, - { "name": "load", "file": "level/item/clubs.json" }, - { "name": "load", "file": "level/item/helmets.json" }, - { "name": "load", "file": "level/item/misc.json" }, - { "name": "load", "file": ["level/item/potions.json", "26"] }, - { "name": "load", "file": "level/item/rings.json" }, - { "name": "load", "file": "level/item/scrolls.json" }, - { "name": "load", "file": "level/item/shields.json" }, - { "name": "load", "file": ["level/item/staffs.json", "177"] }, - { "name": "load", "file": "level/item/swords.json" } - ] - } -} \ No newline at end of file diff --git a/gamefilesd/level/item/misc.json b/gamefilesd/level/item/misc.json index 19b12bb6..e6efc0df 100755 --- a/gamefilesd/level/item/misc.json +++ b/gamefilesd/level/item/misc.json @@ -2,27 +2,20 @@ "itemClass": [ { "id": "gold", - "replaceVars": true, - "dropTexturePack": "itemDrop", - "dropTextureIndex": 29, + "fromId": "baseItem", + "dropTexturePack": "goldflip", "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 17, "name": "Gold", "shortName": "Gold", "type": "Gold", - "defaultOutline": "%outlineItem%", - "defaultOutlineIgnore": "0x000000", "defaults": { - "identified": true, "gold": 1, "goldMax": 5000 }, - "inventorySize": [1, 1], "actions": { - "action": "pickItemInLevel", "levelDrop": { "name": "sound.play", "id": "gold" }, - "inventoryDrop": { "name": "sound.play", "id": "gold" }, - "inventoryPick": "pickItemInInventory" + "inventoryDrop": { "name": "sound.play", "id": "gold" } }, "prefix": "goldPrefix", "suffix": "goldSuffix" diff --git a/gamefilesd/level/item/potions.json b/gamefilesd/level/item/potions.json index 84fc85f4..e8754488 100755 --- a/gamefilesd/level/item/potions.json +++ b/gamefilesd/level/item/potions.json @@ -2,24 +2,19 @@ "itemClass": [ { "id": "potionOfHealing", - "replaceVars": true, - "dropTexturePack": "itemDrop", - "dropTextureIndex": 13, + "fromId": "baseItem", + "dropTexturePack": "fbttle", "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 43, "name": "Potion of Healing", "shortName": "Potion", "type": "Potion", - "defaultOutline": "%outlineItem%", - "defaultOutlineIgnore": "0x000000", "defaults": { "price": 50, - "identified": true, "useOn": "lifeDamage", "useOp": "-" }, "formulas": { - "sell": "price * 0.25", "value": "$bonusLife * $life * 0.125", "valueMax": "$bonusLife * 3 * $life * 0.125" }, @@ -27,21 +22,15 @@ { "index": 0, "name": "potionOfHealing" }, { "index": 1, "name": "rightClickToUse" } ], - "inventorySize": [1, 1], "actions": { - "action": "pickItemInLevel", "levelDrop": { "name": "sound.play", "id": "flippot" }, "inventoryDrop": { "name": "sound.play", "id": "invpot" }, - "inventoryPick": "pickItemInInventory", "use": "inventoryDrop" } }, { "id": "potionOfMana", "fromId": "potionOfHealing", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 13, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 50, "name": "Potion of Mana", "defaults": { @@ -58,9 +47,7 @@ { "id": "potionOfFullHealing", "fromId": "potionOfHealing", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 16, - "inventoryTexturePack": "itemIcons", + "dropTexturePack": "fbttlebr", "inventoryTextureIndex": 46, "name": "Potion of Full Healing", "defaults": { @@ -77,9 +64,7 @@ { "id": "potionOfFullMana", "fromId": "potionOfFullHealing", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 14, - "inventoryTexturePack": "itemIcons", + "dropTexturePack": "fbttlebb", "inventoryTextureIndex": 11, "name": "Potion of Full Mana", "defaults": { @@ -92,9 +77,7 @@ { "id": "potionOfRejuvenation", "fromId": "potionOfHealing", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 17, - "inventoryTexturePack": "itemIcons", + "dropTexturePack": "fbttleby", "inventoryTextureIndex": 48, "name": "Potion of Rejuvenation", "defaults": { @@ -111,10 +94,7 @@ }, { "id": "potionOfFullRejuvenation", - "fromId": "potionOfFullHealing", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 17, - "inventoryTexturePack": "itemIcons", + "fromId": "potionOfRejuvenation", "inventoryTextureIndex": 44, "name": "Potion of Full Rejuvenation", "defaults": { @@ -129,10 +109,8 @@ { "id": "spectralElixir", "fromId": "potionOfFullHealing", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 19, - "inventoryTexturePack": "itemIcons", - "inventoryTextureIndex": {1}, + "dropTexturePack": "fbttledy", + "inventoryTextureIndex": 26, "name": "Spectral Elixir", "defaults": { "price": 10000, diff --git a/gamefilesd/level/item/rings.json b/gamefilesd/level/item/rings.json index d7e8aa77..89e88fa6 100755 --- a/gamefilesd/level/item/rings.json +++ b/gamefilesd/level/item/rings.json @@ -3,9 +3,6 @@ { "id": "ring", "fromId": "amulet", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 35, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 23, "name": "Ring", "shortName": "Ring", diff --git a/gamefilesd/level/item/scrolls.json b/gamefilesd/level/item/scrolls.json index 0c1f6b74..f073e6b7 100755 --- a/gamefilesd/level/item/scrolls.json +++ b/gamefilesd/level/item/scrolls.json @@ -2,32 +2,22 @@ "itemClass": [ { "id": "scroll", - "replaceVars": true, - "dropTexturePack": "itemDrop", - "dropTextureIndex": 37, + "fromId": "baseItem", + "dropTexturePack": "scroll", "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 12, "name": "Scroll", "type": "Scroll", - "defaultOutline": "%outlineItem%", - "defaultOutlineIgnore": "0x000000", "defaults": { - "price": 50, - "identified": true - }, - "formulas": { - "sell": "price * 0.25" + "price": 50 }, "descriptions": [ { "index": 0, "name": "rightClickToRead2" }, { "index": 1, "name": "required" } ], - "inventorySize": [1, 1], "actions": { - "action": "pickItemInLevel", "levelDrop": { "name": "sound.play", "id": "flipscrl" }, - "inventoryDrop": { "name": "sound.play", "id": "invscrol" }, - "inventoryPick": "pickItemInInventory" + "inventoryDrop": { "name": "sound.play", "id": "invscrol" } } } ] diff --git a/gamefilesd/level/item/shields.json b/gamefilesd/level/item/shields.json index 87f766a6..3903c1ae 100755 --- a/gamefilesd/level/item/shields.json +++ b/gamefilesd/level/item/shields.json @@ -3,9 +3,7 @@ { "id": "buckler", "fromId": "baseArmor", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 38, - "inventoryTexturePack": "itemIcons", + "dropTexturePack": "shield", "inventoryTextureIndex": 94, "name": "Buckler", "shortName": "Buckler", @@ -31,9 +29,6 @@ { "id": "smallShield", "fromId": "buckler", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 38, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 116, "name": "Small Shield", "shortName": "Shield", @@ -49,9 +44,6 @@ { "id": "largeShield", "fromId": "smallShield", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 38, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 158, "name": "Large Shield", "defaults": { @@ -65,9 +57,6 @@ { "id": "kiteShield", "fromId": "smallShield", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 38, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 124, "name": "Kite Shield", "defaults": { @@ -81,9 +70,6 @@ { "id": "towerShield", "fromId": "smallShield", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 38, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 143, "name": "Tower Shield", "defaults": { @@ -97,9 +83,6 @@ { "id": "gothicShield", "fromId": "smallShield", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 38, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 159, "name": "Gothic Shield", "defaults": { diff --git a/gamefilesd/level/item/staffs.json b/gamefilesd/level/item/staffs.json index 3a91d065..765b5abe 100755 --- a/gamefilesd/level/item/staffs.json +++ b/gamefilesd/level/item/staffs.json @@ -3,9 +3,7 @@ { "id": "shortStaff", "fromId": "baseWeapon", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 39, - "inventoryTexturePack": "itemIcons", + "dropTexturePack": "staff", "inventoryTextureIndex": 120, "name": "Short Staff", "shortName": "Staff", @@ -28,9 +26,6 @@ { "id": "longStaff", "fromId": "shortStaff", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 39, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 134, "name": "Long Staff", "defaults": { @@ -44,10 +39,7 @@ { "id": "compositeStaff", "fromId": "shortStaff", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 39, - "inventoryTexturePack": "itemIcons", - "inventoryTextureIndex": {1}, + "inventoryTextureIndex": 177, "name": "Composite Staff", "defaults": { "price": 500, @@ -60,9 +52,6 @@ { "id": "quarterStaff", "fromId": "shortStaff", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 39, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 120, "name": "Quarter Staff", "defaults": { @@ -77,9 +66,6 @@ { "id": "warStaff", "fromId": "shortStaff", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 39, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 135, "name": "War Staff", "defaults": { diff --git a/gamefilesd/level/item/swords.json b/gamefilesd/level/item/swords.json index 7cbd6f6a..f3b48579 100755 --- a/gamefilesd/level/item/swords.json +++ b/gamefilesd/level/item/swords.json @@ -3,9 +3,7 @@ { "id": "dagger", "fromId": "baseWeapon", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 40, - "inventoryTexturePack": "itemIcons", + "dropTexturePack": "swrdflip", "inventoryTextureIndex": 62, "name": "Dagger", "shortName": "Dagger", @@ -23,9 +21,6 @@ { "id": "shortSword", "fromId": "dagger", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 40, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 75, "name": "Short Sword", "shortName": "Sword", @@ -42,9 +37,6 @@ { "id": "sabre", "fromId": "shortSword", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 40, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 78, "name": "Sabre", "shortName": "Sabre", @@ -60,9 +52,6 @@ { "id": "scimitar", "fromId": "shortSword", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 40, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 83, "name": "Scimitar", "shortName": "Scimitar", @@ -79,9 +68,6 @@ { "id": "blade", "fromId": "shortSword", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 40, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 67, "name": "Blade", "shortName": "Blade", @@ -98,9 +84,6 @@ { "id": "falchion", "fromId": "shortSword", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 40, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 73, "name": "Falchion", "shortName": "Falchion", @@ -116,9 +99,6 @@ { "id": "longSword", "fromId": "shortSword", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 40, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 71, "name": "Long Sword", "shortName": "Sword", @@ -135,9 +115,6 @@ { "id": "claymore", "fromId": "longSword", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 40, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 76, "name": "Claymore", "defaults": { @@ -153,9 +130,6 @@ { "id": "broadSword", "fromId": "claymore", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 40, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 72, "name": "Broad Sword", "defaults": { @@ -170,9 +144,6 @@ { "id": "bastardSword", "fromId": "claymore", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 40, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 68, "name": "Bastard Sword", "defaults": { @@ -187,9 +158,6 @@ { "id": "twoHandedSword", "fromId": "claymore", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 40, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 121, "name": "Two-Handed Sword", "defaults": { @@ -206,9 +174,6 @@ { "id": "greatSword", "fromId": "twoHandedSword", - "dropTexturePack": "itemDrop", - "dropTextureIndex": 40, - "inventoryTexturePack": "itemIcons", "inventoryTextureIndex": 145, "name": "Great Sword", "defaults": { diff --git a/gamefilesd/level/l1/level.json b/gamefilesd/level/l1/level.json index 35bfe70d..6d4080e7 100755 --- a/gamefilesd/level/l1/level.json +++ b/gamefilesd/level/l1/level.json @@ -10,7 +10,6 @@ "name": "King Leoric's Lair", "palette": "l1_1", "file": "levels/l1data/l1.cel", - "mapSize": [96, 96], "map": { "file": "levels/l1data/sklkng1.dun" }, "til": "levels/l1data/l1.til", "min": "levels/l1data/l1.min", diff --git a/gamefilesd/level/l10/level.json b/gamefilesd/level/l10/level.json index 8a1f0048..334af573 100755 --- a/gamefilesd/level/l10/level.json +++ b/gamefilesd/level/l10/level.json @@ -10,7 +10,6 @@ "name": "Foul Water", "palette": "l3pwater", "file": "levels/l3data/l3.cel", - "mapSize": [96, 96], "map": { "file": "levels/l3data/foulwatr.dun" }, "til": "levels/l3data/l3.til", "min": "levels/l3data/l3.min", diff --git a/gamefilesd/level/l5/level.json b/gamefilesd/level/l5/level.json index 025c327d..29710192 100755 --- a/gamefilesd/level/l5/level.json +++ b/gamefilesd/level/l5/level.json @@ -10,7 +10,6 @@ "name": "Chamber of Bones", "palette": "l2", "file": "levels/l2data/l2.cel", - "mapSize": [96, 96], "map": { "file": "levels/l2data/bonecha1.dun" }, "til": "levels/l2data/l2.til", "min": "levels/l2data/l2.min", diff --git a/gamefilesd/level/loadBase.json b/gamefilesd/level/loadBase.json index b7c66659..7b4b436f 100755 --- a/gamefilesd/level/loadBase.json +++ b/gamefilesd/level/loadBase.json @@ -24,7 +24,7 @@ { "name": "loadingScreen.setProgress", "progress": 35 }, { "name": "load", "file": "level/loadBaseLevel.json" }, { "name": "loadingScreen.setProgress", "progress": 45 }, - { "name": "load", "file": "level/item/loadItemClasses.json" }, + { "name": "load", "file": "level/item/classes.json" }, { "name": "loadingScreen.setProgress", "progress": 50 }, { "name": "load", "file": "res/player/sounds.json" }, { "name": "loadingScreen.setProgress", "progress": 55 }, diff --git a/gamefilesd/level/newGame.json b/gamefilesd/level/newGame.json index c65d1c60..4b4bf3f7 100755 --- a/gamefilesd/level/newGame.json +++ b/gamefilesd/level/newGame.json @@ -24,7 +24,7 @@ { "name": "loadingScreen.setProgress", "progress": 35 }, { "name": "load", "file": "level/loadBaseLevel.json" }, { "name": "loadingScreen.setProgress", "progress": 45 }, - { "name": "load", "file": "level/item/loadItemClasses.json" }, + { "name": "load", "file": "level/item/classes.json" }, { "name": "loadingScreen.setProgress", "progress": 50 }, { "name": "load", "file": "res/player/sounds.json" }, { "name": "loadingScreen.setProgress", "progress": 55 }, diff --git a/gamefilesd/res/actions.json b/gamefilesd/res/actions.json index eda4677f..44eba709 100755 --- a/gamefilesd/res/actions.json +++ b/gamefilesd/res/actions.json @@ -19,6 +19,14 @@ "name": "action.set", "id": "focus.moveUp", "action": { "name": "focus.moveUp" } + }, + { + "name": "action.set", + "id": "anchorPentagrams", + "action": [ + { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, + { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } + ] } ] } \ No newline at end of file diff --git a/gamefilesd/res/fonts.json b/gamefilesd/res/fonts.json index 034d18f7..8d4eec13 100755 --- a/gamefilesd/res/fonts.json +++ b/gamefilesd/res/fonts.json @@ -1,5 +1,5 @@ { - "bitmapFont": [ + "font": [ { "id": "font16g", "texture": "font16g", diff --git a/gamefilesd/res/level/baseLevelActions.json b/gamefilesd/res/level/baseLevelActions.json index 82428587..9e335404 100755 --- a/gamefilesd/res/level/baseLevelActions.json +++ b/gamefilesd/res/level/baseLevelActions.json @@ -11,7 +11,13 @@ { "name": "item.drop" }, "clearPanelText" ], - "else": { "name": "player.moveToClick", "player": "hero" } + "else": { + "name": "if.equal", + "param1": "|currentLevel|hasCurrentPlayer|", + "param2": true, + "then": { "name": "player.moveToClick", "player": "hero" }, + "else": { "name": "level.moveToClick" } + } } }, { diff --git a/gamefilesd/res/level/fonts.json b/gamefilesd/res/level/fonts.json index 735c7891..3c36ffcb 100755 --- a/gamefilesd/res/level/fonts.json +++ b/gamefilesd/res/level/fonts.json @@ -1,5 +1,5 @@ { - "bitmapFont": [ + "font": [ { "id": "smaltext", "texture": "smaltext", diff --git a/gamefilesd/towners/adria/buy/common.json b/gamefilesd/towners/adria/buy/common.json index 40a28768..4b33c0a0 100755 --- a/gamefilesd/towners/adria/buy/common.json +++ b/gamefilesd/towners/adria/buy/common.json @@ -50,7 +50,7 @@ "text": { "id": "panelTitle", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [320, 46], "anchor": "none", diff --git a/gamefilesd/towners/adria/buy/confirm2.json b/gamefilesd/towners/adria/buy/confirm2.json index ca367553..dc0e3016 100755 --- a/gamefilesd/towners/adria/buy/confirm2.json +++ b/gamefilesd/towners/adria/buy/confirm2.json @@ -33,7 +33,7 @@ { "id": "itemInfo", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "position": [52, 130], "anchor": "none", "horizontalSpaceOffset": 1, @@ -42,7 +42,7 @@ { "id": "itemPrice", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "position": [571, 130], "anchor": "none", "horizontalAlign": "right", @@ -50,7 +50,7 @@ }, { "id": "confirm", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [320, 214], "anchor": "none", "horizontalAlign": "center", @@ -61,7 +61,7 @@ "button": [ { "id": "yes", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", @@ -92,7 +92,7 @@ }, { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/towners/adria/buy/listItems.json b/gamefilesd/towners/adria/buy/listItems.json index 62007880..9bafe7ad 100755 --- a/gamefilesd/towners/adria/buy/listItems.json +++ b/gamefilesd/towners/adria/buy/listItems.json @@ -16,7 +16,7 @@ ], "menu": { "id": "menuPrices", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [571, 94], "horizontalAlign": "right", diff --git a/gamefilesd/towners/adria/buy/panel.json b/gamefilesd/towners/adria/buy/panel.json index 4b66929b..b99efd02 100755 --- a/gamefilesd/towners/adria/buy/panel.json +++ b/gamefilesd/towners/adria/buy/panel.json @@ -54,7 +54,7 @@ ], "menu": { "id": "mainMenu", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [52, 94], "horizontalSpaceOffset": 1, @@ -88,7 +88,7 @@ }, "button": { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [320, 304], "anchor": "none", diff --git a/gamefilesd/towners/adria/panelMain.json b/gamefilesd/towners/adria/panelMain.json index 704d0748..04b5bfbd 100755 --- a/gamefilesd/towners/adria/panelMain.json +++ b/gamefilesd/towners/adria/panelMain.json @@ -23,7 +23,7 @@ { "id": "panelTitle1", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 58], "anchor": "none", @@ -34,7 +34,7 @@ { "id": "panelText", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 142], "anchor": "none", @@ -46,7 +46,7 @@ "button": [ { "id": "talk", - "bitmapFont": "smaltext", + "font": "smaltext", "replaceVars": true, "color": "%textBlue%", "sound": "titlslct", @@ -65,7 +65,7 @@ }, { "id": "buyItems", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", @@ -89,7 +89,7 @@ }, { "id": "sellItems", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", @@ -113,7 +113,7 @@ }, { "id": "RechargeStaves", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", @@ -137,7 +137,7 @@ }, { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/towners/adria/panelTalk.json b/gamefilesd/towners/adria/panelTalk.json index 2f8195a8..f45b06e3 100755 --- a/gamefilesd/towners/adria/panelTalk.json +++ b/gamefilesd/towners/adria/panelTalk.json @@ -31,7 +31,7 @@ { "id": "panelTitle1", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 58], "anchor": "none", @@ -42,7 +42,7 @@ ], "menu": { "id": "panelQuests", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [480, 195], "horizontalAlign": "center", "verticalAlign": "center", @@ -87,7 +87,7 @@ }, "button": { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/towners/adria/recharge/common.json b/gamefilesd/towners/adria/recharge/common.json index 50edf57d..29e168f4 100755 --- a/gamefilesd/towners/adria/recharge/common.json +++ b/gamefilesd/towners/adria/recharge/common.json @@ -50,7 +50,7 @@ "text": { "id": "panelTitle", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [320, 46], "anchor": "none", diff --git a/gamefilesd/towners/adria/recharge/confirm2.json b/gamefilesd/towners/adria/recharge/confirm2.json index ed42b6a9..a6a8943a 100755 --- a/gamefilesd/towners/adria/recharge/confirm2.json +++ b/gamefilesd/towners/adria/recharge/confirm2.json @@ -33,7 +33,7 @@ { "id": "itemInfo", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "position": [52, 130], "anchor": "none", "horizontalSpaceOffset": 1, @@ -42,7 +42,7 @@ { "id": "itemPrice", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "position": [571, 130], "anchor": "none", "horizontalAlign": "right", @@ -50,7 +50,7 @@ }, { "id": "confirm", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [320, 214], "anchor": "none", "horizontalAlign": "center", @@ -61,7 +61,7 @@ "button": [ { "id": "yes", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", @@ -92,7 +92,7 @@ }, { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/towners/adria/recharge/listItems.json b/gamefilesd/towners/adria/recharge/listItems.json index 2dbb755a..894d307f 100755 --- a/gamefilesd/towners/adria/recharge/listItems.json +++ b/gamefilesd/towners/adria/recharge/listItems.json @@ -17,7 +17,7 @@ "menu": { "id": "menuPrices", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [571, 94], "horizontalAlign": "right", diff --git a/gamefilesd/towners/adria/recharge/panel.json b/gamefilesd/towners/adria/recharge/panel.json index 0bbe0245..c753db4d 100755 --- a/gamefilesd/towners/adria/recharge/panel.json +++ b/gamefilesd/towners/adria/recharge/panel.json @@ -55,7 +55,7 @@ "menu": { "id": "mainMenu", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [52, 94], "horizontalSpaceOffset": 1, @@ -251,7 +251,7 @@ }, "button": { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [320, 304], "anchor": "none", diff --git a/gamefilesd/towners/adria/sell/common.json b/gamefilesd/towners/adria/sell/common.json index ca8cf4e7..74273fed 100755 --- a/gamefilesd/towners/adria/sell/common.json +++ b/gamefilesd/towners/adria/sell/common.json @@ -50,7 +50,7 @@ "text": { "id": "panelTitle", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [320, 46], "anchor": "none", diff --git a/gamefilesd/towners/adria/sell/confirm2.json b/gamefilesd/towners/adria/sell/confirm2.json index d060030c..d39516a1 100755 --- a/gamefilesd/towners/adria/sell/confirm2.json +++ b/gamefilesd/towners/adria/sell/confirm2.json @@ -33,7 +33,7 @@ { "id": "itemInfo", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "position": [52, 130], "anchor": "none", "horizontalSpaceOffset": 1, @@ -42,7 +42,7 @@ { "id": "itemPrice", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "position": [571, 130], "anchor": "none", "horizontalAlign": "right", @@ -50,7 +50,7 @@ }, { "id": "confirm", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [320, 214], "anchor": "none", "horizontalAlign": "center", @@ -61,7 +61,7 @@ "button": [ { "id": "yes", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", @@ -84,7 +84,7 @@ }, { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/towners/adria/sell/listItems.json b/gamefilesd/towners/adria/sell/listItems.json index 399bd608..6463cb34 100755 --- a/gamefilesd/towners/adria/sell/listItems.json +++ b/gamefilesd/towners/adria/sell/listItems.json @@ -16,7 +16,7 @@ ], "menu": { "id": "menuPrices", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [571, 94], "horizontalAlign": "right", diff --git a/gamefilesd/towners/adria/sell/panel.json b/gamefilesd/towners/adria/sell/panel.json index cb6e5cd4..f6764917 100755 --- a/gamefilesd/towners/adria/sell/panel.json +++ b/gamefilesd/towners/adria/sell/panel.json @@ -54,7 +54,7 @@ ], "menu": { "id": "mainMenu", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [52, 94], "horizontalSpaceOffset": 1, @@ -115,7 +115,7 @@ }, "button": { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [320, 304], "anchor": "none", diff --git a/gamefilesd/towners/cain/identify/common.json b/gamefilesd/towners/cain/identify/common.json index c767bf94..e622cb3e 100755 --- a/gamefilesd/towners/cain/identify/common.json +++ b/gamefilesd/towners/cain/identify/common.json @@ -35,7 +35,7 @@ "text": { "id": "panelTitle", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [320, 46], "anchor": "none", diff --git a/gamefilesd/towners/cain/identify/confirm2.json b/gamefilesd/towners/cain/identify/confirm2.json index 5441f99b..89aaa2c5 100755 --- a/gamefilesd/towners/cain/identify/confirm2.json +++ b/gamefilesd/towners/cain/identify/confirm2.json @@ -33,7 +33,7 @@ { "id": "itemInfo", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "position": [51, 130], "anchor": "none", "horizontalSpaceOffset": 1, @@ -42,7 +42,7 @@ { "id": "itemPrice", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "position": [571, 130], "anchor": "none", "horizontalAlign": "right", @@ -51,7 +51,7 @@ }, { "id": "confirm", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [320, 214], "anchor": "none", "horizontalAlign": "center", @@ -62,7 +62,7 @@ "button": [ { "id": "yes", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", @@ -93,7 +93,7 @@ }, { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/towners/cain/identify/item.json b/gamefilesd/towners/cain/identify/item.json index d964cacf..3bd0454e 100755 --- a/gamefilesd/towners/cain/identify/item.json +++ b/gamefilesd/towners/cain/identify/item.json @@ -35,7 +35,7 @@ { "id": "thisItemIs", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "position": [320, 118], "anchor": "none", "horizontalAlign": "center", @@ -45,7 +45,7 @@ { "id": "itemInfo", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "position": [51, 166], "anchor": "none", "horizontalSpaceOffset": 1, @@ -54,7 +54,7 @@ ], "button": { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/towners/cain/identify/listItems.json b/gamefilesd/towners/cain/identify/listItems.json index e2c845b3..cd8b8c74 100755 --- a/gamefilesd/towners/cain/identify/listItems.json +++ b/gamefilesd/towners/cain/identify/listItems.json @@ -17,7 +17,7 @@ "menu": { "id": "menuPrices", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [571, 94], "horizontalAlign": "right", diff --git a/gamefilesd/towners/cain/identify/panel.json b/gamefilesd/towners/cain/identify/panel.json index 7d5d6283..0c6cf033 100755 --- a/gamefilesd/towners/cain/identify/panel.json +++ b/gamefilesd/towners/cain/identify/panel.json @@ -54,7 +54,7 @@ ], "menu": { "id": "mainMenu", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [52, 94], "horizontalSpaceOffset": 1, @@ -136,7 +136,7 @@ }, "button": { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [320, 304], "anchor": "none", diff --git a/gamefilesd/towners/cain/panelMain.json b/gamefilesd/towners/cain/panelMain.json index 428265ef..8f77535a 100755 --- a/gamefilesd/towners/cain/panelMain.json +++ b/gamefilesd/towners/cain/panelMain.json @@ -23,7 +23,7 @@ { "id": "panelTitle1", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 58], "anchor": "none", @@ -34,7 +34,7 @@ { "id": "panelText", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 142], "anchor": "none", @@ -47,7 +47,7 @@ { "id": "talk", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textBlue%", "sound": "titlslct", "focus": true, @@ -65,7 +65,7 @@ }, { "id": "identifyItem", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", @@ -89,7 +89,7 @@ }, { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/towners/cain/panelTalk.json b/gamefilesd/towners/cain/panelTalk.json index 935429ce..78975ad9 100755 --- a/gamefilesd/towners/cain/panelTalk.json +++ b/gamefilesd/towners/cain/panelTalk.json @@ -31,7 +31,7 @@ { "id": "panelTitle1", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 58], "anchor": "none", @@ -42,7 +42,7 @@ ], "menu": { "id": "panelQuests", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [480, 195], "horizontalAlign": "center", "verticalAlign": "center", @@ -87,7 +87,7 @@ }, "button": { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/towners/farnham/panelMain.json b/gamefilesd/towners/farnham/panelMain.json index aa2e28d3..ef28b340 100755 --- a/gamefilesd/towners/farnham/panelMain.json +++ b/gamefilesd/towners/farnham/panelMain.json @@ -23,7 +23,7 @@ { "id": "panelTitle1", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 58], "anchor": "none", @@ -34,7 +34,7 @@ { "id": "panelText", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 142], "anchor": "none", @@ -47,7 +47,7 @@ { "id": "talk", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textBlue%", "sound": "titlslct", "focus": true, @@ -65,7 +65,7 @@ }, { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/towners/farnham/panelTalk.json b/gamefilesd/towners/farnham/panelTalk.json index 8a346dd3..1dfc4641 100755 --- a/gamefilesd/towners/farnham/panelTalk.json +++ b/gamefilesd/towners/farnham/panelTalk.json @@ -31,7 +31,7 @@ { "id": "panelTitle1", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 58], "anchor": "none", @@ -42,7 +42,7 @@ ], "menu": { "id": "panelQuests", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [480, 195], "horizontalAlign": "center", "verticalAlign": "center", @@ -87,7 +87,7 @@ }, "button": { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/towners/gillian/panelMain.json b/gamefilesd/towners/gillian/panelMain.json index cc6a9219..025c418b 100755 --- a/gamefilesd/towners/gillian/panelMain.json +++ b/gamefilesd/towners/gillian/panelMain.json @@ -23,7 +23,7 @@ { "id": "panelTitle1", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 58], "anchor": "none", @@ -34,7 +34,7 @@ { "id": "panelText", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 142], "anchor": "none", @@ -47,7 +47,7 @@ { "id": "talk", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textBlue%", "sound": "titlslct", "focus": true, @@ -65,7 +65,7 @@ }, { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/towners/gillian/panelTalk.json b/gamefilesd/towners/gillian/panelTalk.json index 109e2484..143b59fa 100755 --- a/gamefilesd/towners/gillian/panelTalk.json +++ b/gamefilesd/towners/gillian/panelTalk.json @@ -31,7 +31,7 @@ { "id": "panelTitle1", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 58], "anchor": "none", @@ -42,7 +42,7 @@ ], "menu": { "id": "panelQuests", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [480, 195], "horizontalAlign": "center", "verticalAlign": "center", @@ -87,7 +87,7 @@ }, "button": { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/towners/griswold/buy/common.json b/gamefilesd/towners/griswold/buy/common.json index 40a28768..4b33c0a0 100755 --- a/gamefilesd/towners/griswold/buy/common.json +++ b/gamefilesd/towners/griswold/buy/common.json @@ -50,7 +50,7 @@ "text": { "id": "panelTitle", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [320, 46], "anchor": "none", diff --git a/gamefilesd/towners/griswold/buy/confirm2.json b/gamefilesd/towners/griswold/buy/confirm2.json index 4acde99a..b98d5502 100755 --- a/gamefilesd/towners/griswold/buy/confirm2.json +++ b/gamefilesd/towners/griswold/buy/confirm2.json @@ -33,7 +33,7 @@ { "id": "itemInfo", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "position": [52, 130], "anchor": "none", "horizontalSpaceOffset": 1, @@ -42,7 +42,7 @@ { "id": "itemPrice", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "position": [571, 130], "anchor": "none", "horizontalAlign": "right", @@ -50,7 +50,7 @@ }, { "id": "confirm", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [320, 214], "anchor": "none", "horizontalAlign": "center", @@ -61,7 +61,7 @@ "button": [ { "id": "yes", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", @@ -92,7 +92,7 @@ }, { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/towners/griswold/buy/listItems.json b/gamefilesd/towners/griswold/buy/listItems.json index 09162bda..e1701919 100755 --- a/gamefilesd/towners/griswold/buy/listItems.json +++ b/gamefilesd/towners/griswold/buy/listItems.json @@ -16,7 +16,7 @@ ], "menu": { "id": "menuPrices", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [571, 94], "horizontalAlign": "right", diff --git a/gamefilesd/towners/griswold/buy/panel.json b/gamefilesd/towners/griswold/buy/panel.json index 073307c8..78cb7844 100755 --- a/gamefilesd/towners/griswold/buy/panel.json +++ b/gamefilesd/towners/griswold/buy/panel.json @@ -54,7 +54,7 @@ ], "menu": { "id": "mainMenu", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [52, 94], "horizontalSpaceOffset": 1, @@ -88,7 +88,7 @@ }, "button": { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [320, 304], "anchor": "none", diff --git a/gamefilesd/towners/griswold/buyPremium/common.json b/gamefilesd/towners/griswold/buyPremium/common.json index 40a28768..4b33c0a0 100755 --- a/gamefilesd/towners/griswold/buyPremium/common.json +++ b/gamefilesd/towners/griswold/buyPremium/common.json @@ -50,7 +50,7 @@ "text": { "id": "panelTitle", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [320, 46], "anchor": "none", diff --git a/gamefilesd/towners/griswold/buyPremium/confirm2.json b/gamefilesd/towners/griswold/buyPremium/confirm2.json index 377a1958..3a8b6217 100755 --- a/gamefilesd/towners/griswold/buyPremium/confirm2.json +++ b/gamefilesd/towners/griswold/buyPremium/confirm2.json @@ -33,7 +33,7 @@ { "id": "itemInfo", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "position": [52, 130], "anchor": "none", "horizontalSpaceOffset": 1, @@ -42,7 +42,7 @@ { "id": "itemPrice", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "position": [571, 130], "anchor": "none", "horizontalAlign": "right", @@ -50,7 +50,7 @@ }, { "id": "confirm", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [320, 214], "anchor": "none", "horizontalAlign": "center", @@ -61,7 +61,7 @@ "button": [ { "id": "yes", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", @@ -92,7 +92,7 @@ }, { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/towners/griswold/buyPremium/listItems.json b/gamefilesd/towners/griswold/buyPremium/listItems.json index dec42987..cd0640f8 100755 --- a/gamefilesd/towners/griswold/buyPremium/listItems.json +++ b/gamefilesd/towners/griswold/buyPremium/listItems.json @@ -16,7 +16,7 @@ ], "menu": { "id": "menuPrices", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [571, 94], "horizontalAlign": "right", diff --git a/gamefilesd/towners/griswold/buyPremium/panel.json b/gamefilesd/towners/griswold/buyPremium/panel.json index c03c4b50..f7b90942 100755 --- a/gamefilesd/towners/griswold/buyPremium/panel.json +++ b/gamefilesd/towners/griswold/buyPremium/panel.json @@ -54,7 +54,7 @@ ], "menu": { "id": "mainMenu", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [52, 94], "horizontalSpaceOffset": 1, @@ -88,7 +88,7 @@ }, "button": { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [320, 304], "anchor": "none", diff --git a/gamefilesd/towners/griswold/panelMain.json b/gamefilesd/towners/griswold/panelMain.json index 425e9a6f..51334b2f 100755 --- a/gamefilesd/towners/griswold/panelMain.json +++ b/gamefilesd/towners/griswold/panelMain.json @@ -23,7 +23,7 @@ { "id": "panelTitle1", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 46], "anchor": "none", @@ -34,7 +34,7 @@ { "id": "panelTitle2", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 70], "anchor": "none", @@ -45,7 +45,7 @@ { "id": "panelText", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 118], "anchor": "none", @@ -58,7 +58,7 @@ { "id": "talk", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textBlue%", "sound": "titlslct", "focus": true, @@ -76,7 +76,7 @@ }, { "id": "buyBasic", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", @@ -100,7 +100,7 @@ }, { "id": "buyPremium", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", @@ -124,7 +124,7 @@ }, { "id": "sell", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", @@ -148,7 +148,7 @@ }, { "id": "repair", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", @@ -172,7 +172,7 @@ }, { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/towners/griswold/panelTalk.json b/gamefilesd/towners/griswold/panelTalk.json index c4bc0625..7ed27d03 100755 --- a/gamefilesd/towners/griswold/panelTalk.json +++ b/gamefilesd/towners/griswold/panelTalk.json @@ -31,7 +31,7 @@ { "id": "panelTitle1", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 58], "anchor": "none", @@ -42,7 +42,7 @@ ], "menu": { "id": "panelQuests", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [480, 195], "horizontalAlign": "center", "verticalAlign": "center", @@ -87,7 +87,7 @@ }, "button": { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/towners/griswold/repair/common.json b/gamefilesd/towners/griswold/repair/common.json index 6a510f5b..cc178054 100755 --- a/gamefilesd/towners/griswold/repair/common.json +++ b/gamefilesd/towners/griswold/repair/common.json @@ -50,7 +50,7 @@ "text": { "id": "panelTitle", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [320, 46], "anchor": "none", diff --git a/gamefilesd/towners/griswold/repair/confirm2.json b/gamefilesd/towners/griswold/repair/confirm2.json index b0a6600c..68517951 100755 --- a/gamefilesd/towners/griswold/repair/confirm2.json +++ b/gamefilesd/towners/griswold/repair/confirm2.json @@ -33,7 +33,7 @@ { "id": "itemInfo", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "position": [52, 130], "anchor": "none", "horizontalSpaceOffset": 1, @@ -42,7 +42,7 @@ { "id": "itemPrice", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "position": [571, 130], "anchor": "none", "horizontalAlign": "right", @@ -50,7 +50,7 @@ }, { "id": "confirm", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [320, 214], "anchor": "none", "horizontalAlign": "center", @@ -61,7 +61,7 @@ "button": [ { "id": "yes", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", @@ -92,7 +92,7 @@ }, { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/towners/griswold/repair/listItems.json b/gamefilesd/towners/griswold/repair/listItems.json index 53ea1054..c7a1ab41 100755 --- a/gamefilesd/towners/griswold/repair/listItems.json +++ b/gamefilesd/towners/griswold/repair/listItems.json @@ -17,7 +17,7 @@ "menu": { "id": "menuPrices", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [571, 94], "horizontalAlign": "right", diff --git a/gamefilesd/towners/griswold/repair/panel.json b/gamefilesd/towners/griswold/repair/panel.json index d69a189c..7a639e50 100755 --- a/gamefilesd/towners/griswold/repair/panel.json +++ b/gamefilesd/towners/griswold/repair/panel.json @@ -55,7 +55,7 @@ "menu": { "id": "mainMenu", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [52, 94], "horizontalSpaceOffset": 1, @@ -251,7 +251,7 @@ }, "button": { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [320, 304], "anchor": "none", diff --git a/gamefilesd/towners/griswold/sell/common.json b/gamefilesd/towners/griswold/sell/common.json index ca8cf4e7..74273fed 100755 --- a/gamefilesd/towners/griswold/sell/common.json +++ b/gamefilesd/towners/griswold/sell/common.json @@ -50,7 +50,7 @@ "text": { "id": "panelTitle", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [320, 46], "anchor": "none", diff --git a/gamefilesd/towners/griswold/sell/confirm2.json b/gamefilesd/towners/griswold/sell/confirm2.json index 4bea01e3..feb5fe48 100755 --- a/gamefilesd/towners/griswold/sell/confirm2.json +++ b/gamefilesd/towners/griswold/sell/confirm2.json @@ -33,7 +33,7 @@ { "id": "itemInfo", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "position": [52, 130], "anchor": "none", "horizontalSpaceOffset": 1, @@ -42,7 +42,7 @@ { "id": "itemPrice", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "position": [571, 130], "anchor": "none", "horizontalAlign": "right", @@ -50,7 +50,7 @@ }, { "id": "confirm", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [320, 214], "anchor": "none", "horizontalAlign": "center", @@ -61,7 +61,7 @@ "button": [ { "id": "yes", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", @@ -83,7 +83,7 @@ }, { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/towners/griswold/sell/listItems.json b/gamefilesd/towners/griswold/sell/listItems.json index 7d9fd3ec..572ad0b9 100755 --- a/gamefilesd/towners/griswold/sell/listItems.json +++ b/gamefilesd/towners/griswold/sell/listItems.json @@ -16,7 +16,7 @@ ], "menu": { "id": "menuPrices", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [571, 94], "horizontalAlign": "right", diff --git a/gamefilesd/towners/griswold/sell/panel.json b/gamefilesd/towners/griswold/sell/panel.json index 4a6b8ed4..294d58a1 100755 --- a/gamefilesd/towners/griswold/sell/panel.json +++ b/gamefilesd/towners/griswold/sell/panel.json @@ -54,7 +54,7 @@ ], "menu": { "id": "mainMenu", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [52, 94], "horizontalSpaceOffset": 1, @@ -92,7 +92,7 @@ }, "button": { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [320, 304], "anchor": "none", diff --git a/gamefilesd/towners/ogden/panelMain.json b/gamefilesd/towners/ogden/panelMain.json index ae3efe6c..c31f30af 100755 --- a/gamefilesd/towners/ogden/panelMain.json +++ b/gamefilesd/towners/ogden/panelMain.json @@ -23,7 +23,7 @@ { "id": "panelTitle1", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 46], "anchor": "none", @@ -34,7 +34,7 @@ { "id": "panelTitle2", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 70], "anchor": "none", @@ -45,7 +45,7 @@ { "id": "panelText", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 142], "anchor": "none", @@ -58,7 +58,7 @@ { "id": "talk", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textBlue%", "sound": "titlslct", "focus": true, @@ -76,7 +76,7 @@ }, { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/towners/ogden/panelTalk.json b/gamefilesd/towners/ogden/panelTalk.json index 866fdcc5..841debc9 100755 --- a/gamefilesd/towners/ogden/panelTalk.json +++ b/gamefilesd/towners/ogden/panelTalk.json @@ -31,7 +31,7 @@ { "id": "panelTitle1", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 58], "anchor": "none", @@ -42,7 +42,7 @@ ], "menu": { "id": "panelQuests", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [480, 195], "horizontalAlign": "center", "verticalAlign": "center", @@ -87,7 +87,7 @@ }, "button": { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/towners/pepin/buy/common.json b/gamefilesd/towners/pepin/buy/common.json index 40a28768..4b33c0a0 100755 --- a/gamefilesd/towners/pepin/buy/common.json +++ b/gamefilesd/towners/pepin/buy/common.json @@ -50,7 +50,7 @@ "text": { "id": "panelTitle", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [320, 46], "anchor": "none", diff --git a/gamefilesd/towners/pepin/buy/confirm2.json b/gamefilesd/towners/pepin/buy/confirm2.json index 114c4fea..1beaf7c2 100755 --- a/gamefilesd/towners/pepin/buy/confirm2.json +++ b/gamefilesd/towners/pepin/buy/confirm2.json @@ -33,7 +33,7 @@ { "id": "itemInfo", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "position": [52, 130], "anchor": "none", "horizontalSpaceOffset": 1, @@ -42,7 +42,7 @@ { "id": "itemPrice", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "position": [571, 130], "anchor": "none", "horizontalAlign": "right", @@ -50,7 +50,7 @@ }, { "id": "confirm", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [320, 214], "anchor": "none", "horizontalAlign": "center", @@ -61,7 +61,7 @@ "button": [ { "id": "yes", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", @@ -92,7 +92,7 @@ }, { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/towners/pepin/buy/listItems.json b/gamefilesd/towners/pepin/buy/listItems.json index 428708c9..3d8107c8 100755 --- a/gamefilesd/towners/pepin/buy/listItems.json +++ b/gamefilesd/towners/pepin/buy/listItems.json @@ -16,7 +16,7 @@ ], "menu": { "id": "menuPrices", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [571, 94], "horizontalAlign": "right", diff --git a/gamefilesd/towners/pepin/buy/panel.json b/gamefilesd/towners/pepin/buy/panel.json index c985102a..572cb493 100755 --- a/gamefilesd/towners/pepin/buy/panel.json +++ b/gamefilesd/towners/pepin/buy/panel.json @@ -54,7 +54,7 @@ ], "menu": { "id": "mainMenu", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [52, 94], "horizontalSpaceOffset": 1, @@ -88,7 +88,7 @@ }, "button": { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [320, 304], "anchor": "none", diff --git a/gamefilesd/towners/pepin/panelMain.json b/gamefilesd/towners/pepin/panelMain.json index e817f12a..020d9502 100755 --- a/gamefilesd/towners/pepin/panelMain.json +++ b/gamefilesd/towners/pepin/panelMain.json @@ -23,7 +23,7 @@ { "id": "panelTitle1", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 46], "anchor": "none", @@ -34,7 +34,7 @@ { "id": "panelTitle2", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 70], "anchor": "none", @@ -45,7 +45,7 @@ { "id": "panelText", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 142], "anchor": "none", @@ -58,7 +58,7 @@ { "id": "talk", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textBlue%", "sound": "titlslct", "focus": true, @@ -76,7 +76,7 @@ }, { "id": "receiveHealing", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", @@ -102,7 +102,7 @@ }, { "id": "buyItems", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", @@ -126,7 +126,7 @@ }, { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/towners/pepin/panelTalk.json b/gamefilesd/towners/pepin/panelTalk.json index e819a4c1..0a7f2fa5 100755 --- a/gamefilesd/towners/pepin/panelTalk.json +++ b/gamefilesd/towners/pepin/panelTalk.json @@ -31,7 +31,7 @@ { "id": "panelTitle1", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 58], "anchor": "none", @@ -42,7 +42,7 @@ ], "menu": { "id": "panelQuests", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [480, 195], "horizontalAlign": "center", "verticalAlign": "center", @@ -86,7 +86,7 @@ }, "button": { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/towners/wirt/buy/common.json b/gamefilesd/towners/wirt/buy/common.json index 2c47c12a..ac368c10 100755 --- a/gamefilesd/towners/wirt/buy/common.json +++ b/gamefilesd/towners/wirt/buy/common.json @@ -40,7 +40,7 @@ "text": { "id": "panelTitle", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [320, 46], "anchor": "none", diff --git a/gamefilesd/towners/wirt/buy/confirm2.json b/gamefilesd/towners/wirt/buy/confirm2.json index 3efc5c04..669c1c4b 100755 --- a/gamefilesd/towners/wirt/buy/confirm2.json +++ b/gamefilesd/towners/wirt/buy/confirm2.json @@ -23,7 +23,7 @@ { "id": "itemInfo", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "position": [52, 130], "anchor": "none", "horizontalSpaceOffset": 1, @@ -32,7 +32,7 @@ { "id": "itemPrice", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "position": [571, 130], "anchor": "none", "horizontalAlign": "right", @@ -40,7 +40,7 @@ }, { "id": "confirm", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [320, 214], "anchor": "none", "horizontalAlign": "center", @@ -51,7 +51,7 @@ "button": [ { "id": "yes", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", @@ -81,7 +81,7 @@ }, { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/towners/wirt/buy/listItems.json b/gamefilesd/towners/wirt/buy/listItems.json index b074f8e1..41ca122c 100755 --- a/gamefilesd/towners/wirt/buy/listItems.json +++ b/gamefilesd/towners/wirt/buy/listItems.json @@ -28,7 +28,7 @@ }, "menu": { "id": "menuPrices", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [571, 154], "horizontalAlign": "right", diff --git a/gamefilesd/towners/wirt/buy/noGold.json b/gamefilesd/towners/wirt/buy/noGold.json index c36ebb0b..da219432 100755 --- a/gamefilesd/towners/wirt/buy/noGold.json +++ b/gamefilesd/towners/wirt/buy/noGold.json @@ -14,7 +14,7 @@ "text": { "id": "panelTitle", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [320, 58], "anchor": "none", diff --git a/gamefilesd/towners/wirt/buy/panel.json b/gamefilesd/towners/wirt/buy/panel.json index 3ee8c53f..fe60f284 100755 --- a/gamefilesd/towners/wirt/buy/panel.json +++ b/gamefilesd/towners/wirt/buy/panel.json @@ -18,7 +18,7 @@ ], "menu": { "id": "mainMenu", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [52, 154], "horizontalSpaceOffset": 1, @@ -42,7 +42,7 @@ }, "button": { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [320, 304], "anchor": "none", diff --git a/gamefilesd/towners/wirt/panelMain.json b/gamefilesd/towners/wirt/panelMain.json index f1162e73..a048a38b 100755 --- a/gamefilesd/towners/wirt/panelMain.json +++ b/gamefilesd/towners/wirt/panelMain.json @@ -23,7 +23,7 @@ { "id": "panelTitle1", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 58], "anchor": "none", @@ -34,7 +34,7 @@ { "id": "panelText1", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 178], "anchor": "none", @@ -45,7 +45,7 @@ { "id": "panelText2", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 202], "anchor": "none", @@ -56,7 +56,7 @@ { "id": "panelText3", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [476, 226], "anchor": "none", @@ -69,7 +69,7 @@ { "id": "talk", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textBlue%", "sound": "titlslct", "focus": true, @@ -87,7 +87,7 @@ }, { "id": "ShowItem", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", @@ -104,7 +104,7 @@ }, { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/towners/wirt/panelTalk.json b/gamefilesd/towners/wirt/panelTalk.json index 60724c2b..5b7725b2 100755 --- a/gamefilesd/towners/wirt/panelTalk.json +++ b/gamefilesd/towners/wirt/panelTalk.json @@ -31,7 +31,7 @@ { "id": "panelTitle1", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [480, 58], "anchor": "none", @@ -42,7 +42,7 @@ ], "menu": { "id": "panelQuests", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [480, 195], "horizontalAlign": "center", "verticalAlign": "center", @@ -87,7 +87,7 @@ }, "button": { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/ui/credits.json b/gamefilesd/ui/credits.json index c1bfa3b4..c47475e9 100755 --- a/gamefilesd/ui/credits.json +++ b/gamefilesd/ui/credits.json @@ -52,7 +52,7 @@ "file": "ui/credits.txt", "anchor": "none", "position": [30, 115], - "boxSize": [580, 250], + "size": [580, 250], "onComplete": { "name": "game.fadeOut", "action": [ diff --git a/gamefilesd/ui/gameInfo.json b/gamefilesd/ui/gameInfo.json index 89cfdfe9..fb08e492 100755 --- a/gamefilesd/ui/gameInfo.json +++ b/gamefilesd/ui/gameInfo.json @@ -63,7 +63,7 @@ "text": [ { "id": "openGLVersion", - "bitmapFont": "font42g", + "font": "font42g", "binding": ["|game|openGL.majorVersion|", "|game|openGL.minorVersion|"], "format": "OpenGL [1].[2]", "position": [319, 192], @@ -72,28 +72,28 @@ }, { "id": "hasShaders", - "bitmapFont": "font42g", + "font": "font42g", "position": [319, 235], "anchor": "none", "horizontalAlign": "center" }, { "id": "hasGeometryShaders", - "bitmapFont": "font42g", + "font": "font42g", "position": [319, 277], "anchor": "none", "horizontalAlign": "center" }, { "id": "supportsPalettes", - "bitmapFont": "font42g", + "font": "font42g", "position": [319, 320], "anchor": "none", "horizontalAlign": "center" }, { "id": "supportsOutlines", - "bitmapFont": "font42g", + "font": "font42g", "position": [319, 363], "anchor": "none", "horizontalAlign": "center" @@ -101,7 +101,7 @@ ], "button": { "id": "back", - "bitmapFont": "font42g", + "font": "font42g", "sound": "titlslct", "focus": true, "position": [319, 406], diff --git a/gamefilesd/ui/level/char/beltInventory.json b/gamefilesd/ui/level/char/beltInventory.json index 6c3043a4..45f7f766 100755 --- a/gamefilesd/ui/level/char/beltInventory.json +++ b/gamefilesd/ui/level/char/beltInventory.json @@ -174,7 +174,7 @@ "text": [ { "id": "txtBelt1", - "bitmapFont": "smaltext", + "font": "smaltext", "anchor": "bottom", "position": [228, 374], "visible": false, @@ -182,7 +182,7 @@ }, { "id": "txtBelt2", - "bitmapFont": "smaltext", + "font": "smaltext", "anchor": "bottom", "position": [255, 374], "visible": false, @@ -190,7 +190,7 @@ }, { "id": "txtBelt3", - "bitmapFont": "smaltext", + "font": "smaltext", "anchor": "bottom", "position": [284, 374], "visible": false, @@ -198,7 +198,7 @@ }, { "id": "txtBelt4", - "bitmapFont": "smaltext", + "font": "smaltext", "anchor": "bottom", "position": [312, 374], "visible": false, @@ -206,7 +206,7 @@ }, { "id": "txtBelt5", - "bitmapFont": "smaltext", + "font": "smaltext", "anchor": "bottom", "position": [342, 374], "visible": false, @@ -214,7 +214,7 @@ }, { "id": "txtBelt6", - "bitmapFont": "smaltext", + "font": "smaltext", "anchor": "bottom", "position": [371, 374], "visible": false, @@ -222,7 +222,7 @@ }, { "id": "txtBelt7", - "bitmapFont": "smaltext", + "font": "smaltext", "anchor": "bottom", "position": [400, 374], "visible": false, @@ -230,7 +230,7 @@ }, { "id": "txtBelt8", - "bitmapFont": "smaltext", + "font": "smaltext", "anchor": "bottom", "position": [429, 374], "visible": false, diff --git a/gamefilesd/ui/level/char/panel.json b/gamefilesd/ui/level/char/panel.json index fd8b2a1a..7634fd0d 100755 --- a/gamefilesd/ui/level/char/panel.json +++ b/gamefilesd/ui/level/char/panel.json @@ -11,7 +11,7 @@ }, "text": { "id": "txtLevelUp", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [60, 298], "anchor": "bottom", "horizontalAlign": "center", @@ -64,7 +64,7 @@ { "id": "itemInfoTitle", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "anchor": "right", "color": "%textGold%", "position": [160, 63], @@ -76,7 +76,7 @@ }, { "id": "itemInfoDescr", - "bitmapFont": "smaltext", + "font": "smaltext", "anchor": "right", "position": [160, 195], "horizontalAlign": "center", @@ -89,7 +89,7 @@ { "id": "txtMapLabel", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [8, 10], "horizontalSpaceOffset": 1, @@ -101,7 +101,7 @@ "id": "txtZoom", "replaceVars": true, "anchor": "topRight", - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [632, 10], "horizontalAlign": "right", @@ -114,8 +114,8 @@ "button": [ { "id": "charPanel", - "anchor": "left", "texture": "char", + "anchor": "left", "captureInputEvents": true, "visible": false, "onHoverEnter": "clearLevelHoverActions", @@ -124,9 +124,9 @@ }, { "id": "invPanel", + "texture": "inv", "anchor": "right", "position": [320, 0], - "texture": "inv", "captureInputEvents": true, "visible": false, "onHoverEnter": "clearLevelHoverActions", @@ -135,8 +135,8 @@ }, { "id": "questPanel", - "anchor": "left", "texture": "quest", + "anchor": "left", "captureInputEvents": true, "visible": false, "onHoverEnter": "clearLevelHoverActions", @@ -145,9 +145,9 @@ }, { "id": "spellPanel", + "texture": "spellbk", "anchor": "right", "position": [320, 0], - "texture": "spellbk", "captureInputEvents": true, "visible": false, "onHoverEnter": "clearLevelHoverActions", @@ -418,7 +418,7 @@ ], "text": { "id": "txtPanel", - "bitmapFont": "smaltext", + "font": "smaltext", "anchor": "bottom", "position": [320, 429], "horizontalAlign": "center", diff --git a/gamefilesd/ui/level/char/panelLabels.json b/gamefilesd/ui/level/char/panelLabels.json index ef2fe70e..4afecacb 100755 --- a/gamefilesd/ui/level/char/panelLabels.json +++ b/gamefilesd/ui/level/char/panelLabels.json @@ -3,7 +3,7 @@ "text": [ { "id": "charName", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [86, 22], "anchor": "left", "horizontalAlign": "center", @@ -11,7 +11,7 @@ }, { "id": "charClass", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [234, 22], "anchor": "left", "horizontalAlign": "center", @@ -19,7 +19,7 @@ }, { "id": "charLevel", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [88, 59], "anchor": "left", "horizontalAlign": "center", @@ -27,7 +27,7 @@ }, { "id": "charExp", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [258, 59], "anchor": "left", "horizontalAlign": "center", @@ -35,7 +35,7 @@ }, { "id": "charExpNext", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [258, 87], "anchor": "left", "horizontalAlign": "center", @@ -43,7 +43,7 @@ }, { "id": "charGold", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [258, 136], "anchor": "left", "horizontalAlign": "center", @@ -52,7 +52,7 @@ }, { "id": "charStr", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [110, 145], "anchor": "left", "horizontalAlign": "center", @@ -61,7 +61,7 @@ }, { "id": "charStrNow", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [158, 145], "anchor": "left", "horizontalAlign": "center", @@ -70,7 +70,7 @@ }, { "id": "charMag", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [111, 173], "anchor": "left", "horizontalAlign": "center", @@ -79,7 +79,7 @@ }, { "id": "charMagNow", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [158, 173], "anchor": "left", "horizontalAlign": "center", @@ -88,7 +88,7 @@ }, { "id": "charDex", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [110, 201], "anchor": "left", "horizontalAlign": "center", @@ -97,7 +97,7 @@ }, { "id": "charDexNow", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [158, 201], "anchor": "left", "horizontalAlign": "center", @@ -106,7 +106,7 @@ }, { "id": "charVit", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [110, 229], "anchor": "left", "horizontalAlign": "center", @@ -115,7 +115,7 @@ }, { "id": "charVitNow", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [158, 229], "anchor": "left", "horizontalAlign": "center", @@ -125,7 +125,7 @@ { "id": "charPoints", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textRed%", "position": [111, 256], "anchor": "left", @@ -134,7 +134,7 @@ }, { "id": "charLife", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [111, 294], "anchor": "left", "horizontalAlign": "center", @@ -143,7 +143,7 @@ }, { "id": "charLifeNow", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [159, 294], "anchor": "left", "horizontalAlign": "center", @@ -152,7 +152,7 @@ }, { "id": "charMana", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [111, 322], "anchor": "left", "horizontalAlign": "center", @@ -161,7 +161,7 @@ }, { "id": "charManaNow", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [159, 322], "anchor": "left", "horizontalAlign": "center", @@ -170,7 +170,7 @@ }, { "id": "charArmor", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [280, 173], "anchor": "left", "horizontalAlign": "center", @@ -179,7 +179,7 @@ }, { "id": "charToHit", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [279, 201], "anchor": "left", "horizontalAlign": "center", @@ -188,7 +188,7 @@ }, { "id": "charDamage", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [280, 229], "anchor": "left", "horizontalAlign": "center", @@ -196,7 +196,7 @@ }, { "id": "charResMagic", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [279, 266], "anchor": "left", "horizontalAlign": "center", @@ -205,7 +205,7 @@ }, { "id": "charResFire", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [279, 294], "anchor": "left", "horizontalAlign": "center", @@ -214,7 +214,7 @@ }, { "id": "charResLight", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [279, 322], "anchor": "left", "horizontalAlign": "center", diff --git a/gamefilesd/ui/level/char/panelQuests.json b/gamefilesd/ui/level/char/panelQuests.json index 284d6a2e..f4ced182 100755 --- a/gamefilesd/ui/level/char/panelQuests.json +++ b/gamefilesd/ui/level/char/panelQuests.json @@ -49,7 +49,7 @@ ], "menu": { "id": "menuQuests", - "bitmapFont": "smaltext", + "font": "smaltext", "position": [160, 130], "horizontalAlign": "center", "horizontalSpaceOffset": 1, @@ -86,7 +86,7 @@ "button": { "id": "closeQuestLog", "anchor": "left", - "bitmapFont": "smaltext", + "font": "smaltext", "focus": true, "focusSound": "titlemov", "position": [160, 298], diff --git a/gamefilesd/ui/level/menu/game.json b/gamefilesd/ui/level/menu/game.json index c88bf53e..e37598a6 100755 --- a/gamefilesd/ui/level/menu/game.json +++ b/gamefilesd/ui/level/menu/game.json @@ -6,7 +6,7 @@ "button": [ { "id": "saveGame", - "bitmapFont": "bigtgold", + "font": "bigtgold", "sound": "titlemov", "focus": true, "focusSound": "titlemov", @@ -22,7 +22,7 @@ }, { "id": "options", - "bitmapFont": "bigtgold", + "font": "bigtgold", "sound": "titlemov", "focus": true, "focusSound": "titlemov", @@ -42,7 +42,7 @@ }, { "id": "newGame", - "bitmapFont": "bigtgold", + "font": "bigtgold", "sound": "titlemov", "focus": true, "focusSound": "titlemov", @@ -65,7 +65,7 @@ }, { "id": "loadGame", - "bitmapFont": "bigtgold", + "font": "bigtgold", "sound": "titlemov", "focus": true, "focusSound": "titlemov", @@ -81,7 +81,7 @@ }, { "id": "quitDiablo", - "bitmapFont": "bigtgold", + "font": "bigtgold", "sound": "titlemov", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/ui/level/menu/game2.json b/gamefilesd/ui/level/menu/game2.json index f1801b9b..03e884e3 100755 --- a/gamefilesd/ui/level/menu/game2.json +++ b/gamefilesd/ui/level/menu/game2.json @@ -218,7 +218,7 @@ }, { "id": "music", - "bitmapFont": "bigtgold", + "font": "bigtgold", "sound": "titlemov", "focus": true, "focusOnClick": false, @@ -248,7 +248,7 @@ }, { "id": "sound", - "bitmapFont": "bigtgold", + "font": "bigtgold", "sound": "titlemov", "focus": true, "focusOnClick": false, @@ -278,7 +278,7 @@ }, { "id": "gamma", - "bitmapFont": "bigtgold", + "font": "bigtgold", "sound": "titlemov", "focus": true, "focusOnClick": false, @@ -308,7 +308,7 @@ }, { "id": "colorCycling", - "bitmapFont": "bigtgold", + "font": "bigtgold", "sound": "titlemov", "focus": true, "focusSound": "titlemov", @@ -335,7 +335,7 @@ }, { "id": "previousMenu", - "bitmapFont": "bigtgold", + "font": "bigtgold", "sound": "titlemov", "focus": true, "focusSound": "titlemov", diff --git a/gamefilesd/ui/level/msgBox/show2.json b/gamefilesd/ui/level/msgBox/show2.json index 250de376..e5bbb413 100755 --- a/gamefilesd/ui/level/msgBox/show2.json +++ b/gamefilesd/ui/level/msgBox/show2.json @@ -40,7 +40,7 @@ "text": { "id": "textMsg", "replaceVars": true, - "bitmapFont": "smaltext", + "font": "smaltext", "color": "%textGold%", "position": [322, 172], "anchor": "none", diff --git a/gamefilesd/ui/level/panel/big/inventoryFull.json b/gamefilesd/ui/level/panel/big/inventoryFull.json index c266668e..039f0a58 100755 --- a/gamefilesd/ui/level/panel/big/inventoryFull.json +++ b/gamefilesd/ui/level/panel/big/inventoryFull.json @@ -16,7 +16,7 @@ ], "button": { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [320, 202], "anchor": "none", diff --git a/gamefilesd/ui/level/panel/big/noGold.json b/gamefilesd/ui/level/panel/big/noGold.json index c3a3a54c..6802c79f 100755 --- a/gamefilesd/ui/level/panel/big/noGold.json +++ b/gamefilesd/ui/level/panel/big/noGold.json @@ -16,7 +16,7 @@ ], "button": { "id": "back", - "bitmapFont": "smaltext", + "font": "smaltext", "sound": "titlslct", "position": [320, 202], "anchor": "none", diff --git a/gamefilesd/ui/level/showText.json b/gamefilesd/ui/level/showText.json index 9c966d04..c0089162 100755 --- a/gamefilesd/ui/level/showText.json +++ b/gamefilesd/ui/level/showText.json @@ -37,15 +37,15 @@ }, "scrollableText": { "id": "textBox", - "bitmapFont": "medtexts", + "font": "medtexts", "refresh": {2}, "file": "{3}", "horizontalSpaceOffset": 2, "verticalSpaceOffset": 17, "splitText": 40, "position": [48, 49], + "size": [550, 257], "anchor": "none", - "boxSize": [550, 257], "onComplete": [ { "name": "resource.pop" }, "afterShowText" diff --git a/gamefilesd/ui/mainMenu.json b/gamefilesd/ui/mainMenu.json index 2f1963d8..970140b4 100755 --- a/gamefilesd/ui/mainMenu.json +++ b/gamefilesd/ui/mainMenu.json @@ -95,13 +95,12 @@ ], "menu": { "id": "menu", - "bitmapFont": "font42g", + "font": "font42g", "position": [319, 192], "sound": "titlslct", "focus": true, "focusSound": "titlemov", "anchor": "none", - "verticalPad": 1, "items": [ { "text": "Single Player", @@ -110,19 +109,13 @@ "name": "load", "file": "ui/singlePlayer/main.json" }, - "onFocus": [ - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } - ] + "onFocus": "anchorPentagrams" }, { "text": "Multi Player", "position": [172, 235], "enable": false, - "onFocus": [ - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } - ] + "onFocus": "anchorPentagrams" }, { "text": "Replay Intro", @@ -131,10 +124,7 @@ "name": "load", "file": ["ui/playIntro.json", "ui/fadeIn.json"] }, - "onFocus": [ - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } - ] + "onFocus": "anchorPentagrams" }, { "text": "Show Credits", @@ -146,10 +136,7 @@ "file": "ui/credits.json" } }, - "onFocus": [ - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } - ] + "onFocus": "anchorPentagrams" }, { "text": "Exit Diablo", @@ -160,16 +147,13 @@ "name": "game.close" } }, - "onFocus": [ - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } - ] + "onFocus": "anchorPentagrams" } ] }, "button": { "id": "versionInfo", - "bitmapFont": "font16s", + "font": "font16s", "position": [17, 444], "sound": "titlslct", "anchor": "none", diff --git a/gamefilesd/ui/settings.json b/gamefilesd/ui/settings.json index 8fd0c630..3e3a3993 100755 --- a/gamefilesd/ui/settings.json +++ b/gamefilesd/ui/settings.json @@ -1,17 +1,7 @@ { "action": [ { "name": "resource.add", "id": "settings", "ignorePrevious": true }, - { "name": "game.fadeIn" }, - { - "name": "action.set", - "id": "anchorLeftPentagram", - "action": { "name": "drawable.verticalAnchorToFocused", "id": "pent1" } - }, - { - "name": "action.set", - "id": "anchorRightPentagram", - "action": { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } - } + { "name": "game.fadeIn" } ], "keyboard": [ { @@ -61,7 +51,7 @@ "button": [ { "id": "windowSize", - "bitmapFont": "font42g", + "font": "font42g", "sound": "titlemov", "focus": true, "focusSound": "titlemov", @@ -85,14 +75,11 @@ ], "default": { "name": "loadJson", "json": { "windowSize": [640, 480] } } }, - "onFocus": [ - "anchorLeftPentagram", - "anchorRightPentagram" - ] + "onFocus": "anchorPentagrams" }, { "id": "stretchToFit", - "bitmapFont": "font42g", + "font": "font42g", "sound": "titlemov", "focus": true, "focusSound": "titlemov", @@ -112,14 +99,11 @@ { "name": "text.setText", "id": "stretchToFit", "text": "Stretch to Fit: Off" } ] }, - "onFocus": [ - "anchorLeftPentagram", - "anchorRightPentagram" - ] + "onFocus": "anchorPentagrams" }, { "id": "keepAR", - "bitmapFont": "font42g", + "font": "font42g", "sound": "titlemov", "focus": true, "focusSound": "titlemov", @@ -139,14 +123,11 @@ { "name": "text.setText", "id": "keepAR", "text": "Keep Ratio: Off" } ] }, - "onFocus": [ - "anchorLeftPentagram", - "anchorRightPentagram" - ] + "onFocus": "anchorPentagrams" }, { "id": "smoothScreen", - "bitmapFont": "font42g", + "font": "font42g", "sound": "titlemov", "focus": true, "focusSound": "titlemov", @@ -166,14 +147,11 @@ { "name": "text.setText", "id": "smoothScreen", "text": "Smooth Screen: Off" } ] }, - "onFocus": [ - "anchorLeftPentagram", - "anchorRightPentagram" - ] + "onFocus": "anchorPentagrams" }, { "id": "framerate", - "bitmapFont": "font42g", + "font": "font42g", "sound": "titlemov", "focus": true, "focusSound": "titlemov", @@ -222,14 +200,11 @@ ], "default": { "name": "loadJson", "json": { "windowSize": [640, 480] } } }, - "onFocus": [ - "anchorLeftPentagram", - "anchorRightPentagram" - ] + "onFocus": "anchorPentagrams" }, { "id": "back", - "bitmapFont": "font42g", + "font": "font42g", "sound": "titlslct", "focus": true, "focusSound": "titlemov", @@ -245,10 +220,7 @@ { "name": "game.fadeIn" } ] }, - "onFocus": [ - "anchorLeftPentagram", - "anchorRightPentagram" - ] + "onFocus": "anchorPentagrams" } ], "action": [ @@ -280,7 +252,6 @@ "then": { "name": "text.setText", "id": "framerate", "text": "Framerate Limit: Off" }, "else": { "name": "text.setText", "id": "framerate", "binding": "|game|framerate|", "format": "Framerate Limit: [1]" } }, - "anchorLeftPentagram", - "anchorRightPentagram" + "anchorPentagrams" ] } \ No newline at end of file diff --git a/gamefilesd/ui/settings2.json b/gamefilesd/ui/settings2.json index 0c9799eb..2ab76f34 100755 --- a/gamefilesd/ui/settings2.json +++ b/gamefilesd/ui/settings2.json @@ -2,7 +2,7 @@ "animation": { "id": "smlogo", "texturePack": "smlogo", - "position": [125, 0], + "position": ["center", 0], "anchor": "none", "refresh": 50 } diff --git a/gamefilesd/ui/singlePlayer/delete.json b/gamefilesd/ui/singlePlayer/delete.json index 8a70bb5e..2f2e238d 100755 --- a/gamefilesd/ui/singlePlayer/delete.json +++ b/gamefilesd/ui/singlePlayer/delete.json @@ -24,7 +24,7 @@ }, "text": { "id": "areYouSure", - "bitmapFont": "font24s", + "font": "font24s", "position": [120, 236], "anchor": "none", "text": "Are you sure you want to\ndelete the character \"{1}\"?" @@ -49,7 +49,7 @@ { "id": "yes", "horizontalAlign": "center", - "bitmapFont": "font30g", + "font": "font30g", "position": [319, 392], "anchor": "none", "focus": true, @@ -59,17 +59,14 @@ { "name": "resource.pop" }, { "name": "load", "file": "ui/singlePlayer/select.json" } ], - "onFocus": [ - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } - ], + "onFocus": "anchorPentagrams", "sound": "titlslct", "text": "Yes" }, { "id": "no", "horizontalAlign": "center", - "bitmapFont": "font30g", + "font": "font30g", "position": [319, 428], "anchor": "none", "focus": true, @@ -78,10 +75,7 @@ { "name": "resource.pop" }, { "name": "load", "file": "ui/singlePlayer/select.json" } ], - "onFocus": [ - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } - ], + "onFocus": "anchorPentagrams", "sound": "titlslct", "text": "No" } diff --git a/gamefilesd/ui/singlePlayer/main.json b/gamefilesd/ui/singlePlayer/main.json index cf84c399..c395ddfe 100755 --- a/gamefilesd/ui/singlePlayer/main.json +++ b/gamefilesd/ui/singlePlayer/main.json @@ -82,28 +82,28 @@ "animation": { "id": "smlogo", "texturePack": "smlogo", - "position": [125, 0], + "position": ["center", 0], "anchor": "none", "refresh": 50 }, "text": [ { "id": "label1", - "bitmapFont": "font30s", + "font": "font30s", "position": [319, 161], "anchor": "none", "horizontalAlign": "center" }, { "id": "label2", - "bitmapFont": "font30s", + "font": "font30s", "position": [424, 211], "anchor": "none", "horizontalAlign": "center" }, { "id": "level", - "bitmapFont": "font16s", + "font": "font16s", "text": "Level:", "position": [149, 323], "anchor": "none", @@ -111,7 +111,7 @@ }, { "id": "strength", - "bitmapFont": "font16s", + "font": "font16s", "text": "Strength:", "position": [149, 358], "anchor": "none", @@ -119,7 +119,7 @@ }, { "id": "magic", - "bitmapFont": "font16s", + "font": "font16s", "text": "Magic:", "position": [149, 380], "anchor": "none", @@ -127,7 +127,7 @@ }, { "id": "dexterity", - "bitmapFont": "font16s", + "font": "font16s", "text": "Dexterity:", "position": [149, 401], "anchor": "none", @@ -135,7 +135,7 @@ }, { "id": "vitality", - "bitmapFont": "font16s", + "font": "font16s", "text": "Vitality:", "position": [149, 422], "anchor": "none", @@ -143,7 +143,7 @@ }, { "id": "txtLevel", - "bitmapFont": "font16s", + "font": "font16s", "text": "--", "position": [179, 323], "anchor": "none", @@ -151,7 +151,7 @@ }, { "id": "txtStrength", - "bitmapFont": "font16s", + "font": "font16s", "text": "--", "position": [179, 358], "anchor": "none", @@ -159,7 +159,7 @@ }, { "id": "txtMagic", - "bitmapFont": "font16s", + "font": "font16s", "text": "--", "position": [179, 380], "anchor": "none", @@ -167,7 +167,7 @@ }, { "id": "txtDexterity", - "bitmapFont": "font16s", + "font": "font16s", "text": "--", "position": [179, 401], "anchor": "none", @@ -175,7 +175,7 @@ }, { "id": "txtVitality", - "bitmapFont": "font16s", + "font": "font16s", "text": "--", "position": [179, 422], "anchor": "none", diff --git a/gamefilesd/ui/singlePlayer/newHero.json b/gamefilesd/ui/singlePlayer/newHero.json index 2f65e716..877e8f5e 100755 --- a/gamefilesd/ui/singlePlayer/newHero.json +++ b/gamefilesd/ui/singlePlayer/newHero.json @@ -30,7 +30,7 @@ { "id": "warrior", "horizontalAlign": "center", - "bitmapFont": "font24g", + "font": "font24g", "position": [424, 285], "anchor": "none", "onClick": [ @@ -42,8 +42,7 @@ { "name": "text.setText", "id": "txtMagic", "text": "10" }, { "name": "text.setText", "id": "txtDexterity", "text": "20" }, { "name": "text.setText", "id": "txtVitality", "text": "25" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } + "anchorPentagrams" ], "onFocus": { "name": "button.click", "id": "warrior" }, "focusOnClick": false, @@ -53,7 +52,7 @@ { "id": "rogue", "horizontalAlign": "center", - "bitmapFont": "font24g", + "font": "font24g", "position": [424, 318], "anchor": "none", "onClick": [ @@ -65,8 +64,7 @@ { "name": "text.setText", "id": "txtMagic", "text": "15" }, { "name": "text.setText", "id": "txtDexterity", "text": "30" }, { "name": "text.setText", "id": "txtVitality", "text": "20" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } + "anchorPentagrams" ], "onFocus": { "name": "button.click", "id": "rogue" }, "focusOnClick": false, @@ -76,7 +74,7 @@ { "id": "sorcerer", "horizontalAlign": "center", - "bitmapFont": "font24g", + "font": "font24g", "position": [424, 352], "anchor": "none", "onClick": [ @@ -88,8 +86,7 @@ { "name": "text.setText", "id": "txtMagic", "text": "35" }, { "name": "text.setText", "id": "txtDexterity", "text": "15" }, { "name": "text.setText", "id": "txtVitality", "text": "20" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } + "anchorPentagrams" ], "onFocus": { "name": "button.click", "id": "sorcerer" }, "focusOnClick": false, @@ -98,7 +95,7 @@ }, { "id": "ok", - "bitmapFont": "font30g", + "font": "font30g", "position": [329, 429], "anchor": "none", "onClick": [ @@ -110,7 +107,7 @@ }, { "id": "cancel", - "bitmapFont": "font30g", + "font": "font30g", "position": [451, 429], "anchor": "none", "onClick": [ diff --git a/gamefilesd/ui/singlePlayer/newName.json b/gamefilesd/ui/singlePlayer/newName.json index 2f4e5235..d081da14 100755 --- a/gamefilesd/ui/singlePlayer/newName.json +++ b/gamefilesd/ui/singlePlayer/newName.json @@ -10,7 +10,7 @@ }, "inputText": { "id": "heroName", - "bitmapFont": "font24g", + "font": "font24g", "position": [308, 318], "anchor": "none", "minSize": 1, @@ -44,7 +44,7 @@ "button": [ { "id": "ok", - "bitmapFont": "font30g", + "font": "font30g", "position": [329, 429], "anchor": "none", "onClick": { "name": "inputText.click", "id": "heroName" }, @@ -53,7 +53,7 @@ }, { "id": "cancel", - "bitmapFont": "font30g", + "font": "font30g", "position": [451, 429], "anchor": "none", "onClick": [ diff --git a/gamefilesd/ui/singlePlayer/newNameExists.json b/gamefilesd/ui/singlePlayer/newNameExists.json index 8e6d94dd..58e61035 100755 --- a/gamefilesd/ui/singlePlayer/newNameExists.json +++ b/gamefilesd/ui/singlePlayer/newNameExists.json @@ -23,7 +23,7 @@ }, "text": { "id": "characterExists", - "bitmapFont": "font24s", + "font": "font24s", "position": [120, 236], "anchor": "none", "text": "Character already exists. Do you\nwant to overwrite \"{1}\"?" @@ -48,7 +48,7 @@ { "id": "yes", "horizontalAlign": "center", - "bitmapFont": "font30g", + "font": "font30g", "position": [319, 392], "anchor": "none", "focus": true, @@ -57,17 +57,14 @@ { "name": "io.deleteAll", "file": "{1}" }, { "name": "load", "file": "level/newGame.json" } ], - "onFocus": [ - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } - ], + "onFocus": "anchorPentagrams", "sound": "titlslct", "text": "Yes" }, { "id": "no", "horizontalAlign": "center", - "bitmapFont": "font30g", + "font": "font30g", "position": [319, 428], "anchor": "none", "focus": true, @@ -77,10 +74,7 @@ { "name": "resource.pop" }, { "name": "load", "file": "ui/singlePlayer/newName.json" } ], - "onFocus": [ - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } - ], + "onFocus": "anchorPentagrams", "sound": "titlslct", "text": "No" } diff --git a/gamefilesd/ui/singlePlayer/newNameTooShort.json b/gamefilesd/ui/singlePlayer/newNameTooShort.json index 8941522f..d050c326 100755 --- a/gamefilesd/ui/singlePlayer/newNameTooShort.json +++ b/gamefilesd/ui/singlePlayer/newNameTooShort.json @@ -31,7 +31,7 @@ ], "text": { "id": "tooShort", - "bitmapFont": "font24s", + "font": "font24s", "position": [140, 236], "anchor": "none", "text": "Invalid name. A name cannot\ncontain spaces, reserved\ncharacters, or reserved words." @@ -39,7 +39,7 @@ "button": { "id": "ok", "horizontalAlign": "center", - "bitmapFont": "font30g", + "font": "font30g", "position": [319, 392], "anchor": "none", "onClick": [ diff --git a/gamefilesd/ui/singlePlayer/select.json b/gamefilesd/ui/singlePlayer/select.json index 9942b370..d3f8077e 100755 --- a/gamefilesd/ui/singlePlayer/select.json +++ b/gamefilesd/ui/singlePlayer/select.json @@ -69,7 +69,7 @@ ], "menu": { "id": "menuLoadGame", - "bitmapFont": "font24g", + "font": "font24g", "position": [423, 260], "horizontalAlign": "center", "anchor": "none", @@ -88,8 +88,7 @@ "onClick": [ { "name": "load", "file": ["ui/loadCharInfo.json", "|focus|text|"] }, { "name": "load", "file": "ui/singlePlayer/setPlayerImage.json" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" }, + "anchorPentagrams", { "name": "button.enable", "id": "delete" }, { "name": "text.setFont", "id": "delete", "idFont": "font30g" }, "saveMenu.moveScrollbar" @@ -102,8 +101,7 @@ "onClick": [ { "name": "load", "file": "ui/charInfoDefault.json" }, { "name": "load", "file": "ui/singlePlayer/setPlayerImage.json" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" }, + "anchorPentagrams", { "name": "button.enable", "id": "delete", "enable": false }, { "name": "text.setFont", "id": "delete", "idFont": "font30s" }, "saveMenu.moveScrollbar" @@ -116,7 +114,7 @@ "button": [ { "id": "ok", - "bitmapFont": "font30g", + "font": "font30g", "position": [279, 429], "anchor": "none", "onClick": { @@ -134,7 +132,7 @@ }, { "id": "delete", - "bitmapFont": "font30g", + "font": "font30g", "position": [378, 429], "anchor": "none", "onClick": [ @@ -145,7 +143,7 @@ }, { "id": "cancel", - "bitmapFont": "font30g", + "font": "font30g", "position": [501, 429], "anchor": "none", "onClick": { diff --git a/gamefilesd/ui/splashScreen2.json b/gamefilesd/ui/splashScreen2.json index cebe8a4d..dd9ab770 100755 --- a/gamefilesd/ui/splashScreen2.json +++ b/gamefilesd/ui/splashScreen2.json @@ -55,7 +55,7 @@ }, "text": { "id": "copyright", - "bitmapFont": "font24s", + "font": "font24s", "text": "Copyright © 1996-2001 Blizzard Entertainment", "position": [59, 410], "anchor": "none" diff --git a/gamefilesflare/level/item/dropTextures.json b/gamefilesflare/level/item/dropTextures.json new file mode 100755 index 00000000..add96ac3 --- /dev/null +++ b/gamefilesflare/level/item/dropTextures.json @@ -0,0 +1,215 @@ +{ + "texturePack": [ + { + "id": "armor2", + "texture": { + "file": "images/loot/leather_armor.png" + }, + "referenceTextureSize": [64, 128], + "rects": [ + { "index": 0, "rect": [119, 0, 36, 46], "offset": [9, 61] }, + { "index": 0, "rect": [77, 0, 42, 53], "offset": [10, 76] }, + { "index": 0, "rect": [0, 0, 40, 62], "offset": [8, 94] }, + { "index": 0, "rect": [40, 0, 37, 56], "offset": [8, 79] }, + { "index": 0, "rect": [155, 0, 27, 34], "offset": [9, 38] }, + { "index": 0, "rect": [119, 46, 23, 14], "offset": [10, 8] } + ] + }, + { + "id": "axe", + "texture": { + "file": "images/loot/longsword.png" + }, + "referenceTextureSize": [64, 128], + "rects": [ + { "index": 0, "rect": [42, 52, 41, 53], "offset": [10, 74] }, + { "index": 0, "rect": [42, 0, 44, 52], "offset": [12, 83] }, + { "index": 0, "rect": [0, 0, 42, 66], "offset": [10, 100] }, + { "index": 0, "rect": [86, 0, 25, 60], "offset": [3, 80] }, + { "index": 0, "rect": [0, 66, 34, 26], "offset": [14, 34] }, + { "index": 0, "rect": [0, 92, 33, 8], "offset": [19, 5] } + ] + }, + { "id": "axeflip", "fromId": "axe" }, + { + "id": "bldstn", + "texture": { + "file": "images/loot/hp_potion.png" + }, + "referenceTextureSize": [64, 128], + "rects": [ + { "index": 0, "rect": [0, 140, 21, 34], "offset": [4, 51] }, + { "index": 0, "rect": [0, 96, 25, 44], "offset": [4, 67] }, + { "index": 0, "rect": [0, 0, 30, 52], "offset": [5, 82] }, + { "index": 0, "rect": [0, 52, 26, 44], "offset": [6, 67] }, + { "index": 0, "rect": [0, 174, 15, 23], "offset": [5, 32] }, + { "index": 0, "rect": [21, 140, 9, 9], "offset": [4, 8] } + ] + }, + { "id": "bottle", "fromId": "bldstn" }, + { + "id": "bow", + "texture": { + "file": "images/loot/longbow.png" + }, + "referenceTextureSize": [64, 128], + "rects": [ + { "index": 0, "rect": [39, 0, 27, 64], "offset": [11, 73] }, + { "index": 0, "rect": [54, 64, 47, 63], "offset": [21, 84] }, + { "index": 0, "rect": [0, 0, 39, 67], "offset": [7, 92] }, + { "index": 0, "rect": [0, 67, 54, 61], "offset": [22, 79] }, + { "index": 0, "rect": [66, 0, 40, 37], "offset": [22, 42] }, + { "index": 0, "rect": [66, 37, 30, 19], "offset": [13, 12] } + ] + }, + { "id": "cleaver", "fromId": "axe" }, + { "id": "crownf", "fromId": "armor2" }, + { "id": "duricons", "fromId": "armor2" }, + { "id": "fanvil", "fromId": "armor2" }, + { + "id": "fbook", + "texture": { + "file": "images/loot/book.png" + }, + "referenceTextureSize": [64, 128], + "rects": [ + { "index": 0, "rect": [33, 45, 28, 44], "offset": [8, 60] }, + { "index": 0, "rect": [0, 58, 33, 50], "offset": [6, 71] }, + { "index": 0, "rect": [0, 0, 30, 58], "offset": [4, 86] }, + { "index": 0, "rect": [30, 0, 33, 45], "offset": [8, 66] }, + { "index": 0, "rect": [33, 89, 17, 28], "offset": [7, 33] }, + { "index": 0, "rect": [0, 108, 18, 13], "offset": [9, 8] } + ] + }, + { "id": "fbow", "fromId": "bow" }, + { "id": "fbrain", "fromId": "bottle" }, + { "id": "fbttle", "fromId": "bottle" }, + { "id": "fbttlebb", "fromId": "bottle" }, + { "id": "fbttlebl", "fromId": "bottle" }, + { "id": "fbttlebr", "fromId": "bottle" }, + { "id": "fbttleby", "fromId": "bottle" }, + { "id": "fbttledb", "fromId": "bottle" }, + { "id": "fbttledy", "fromId": "bottle" }, + { "id": "fbttleor", "fromId": "bottle" }, + { "id": "fbttlewh", "fromId": "bottle" }, + { "id": "fear", "fromId": "bottle" }, + { "id": "feye", "fromId": "bottle" }, + { "id": "fheart", "fromId": "bottle" }, + { "id": "flazstaf", "fromId": "armor2" }, + { "id": "fmush", "fromId": "bottle" }, + { "id": "food", "fromId": "bottle" }, + { + "id": "FPlateAr", + "texture": { + "file": "images/loot/steel_armor.png" + }, + "referenceTextureSize": [64, 128], + "rects": [ + { "index": 0, "rect": [132, 29, 34, 52], "offset": [13, 64] }, + { "index": 0, "rect": [47, 0, 39, 61], "offset": [11, 80] }, + { "index": 0, "rect": [0, 0, 47, 68], "offset": [15, 93] }, + { "index": 0, "rect": [86, 0, 46, 53], "offset": [16, 73] }, + { "index": 0, "rect": [132, 0, 35, 29], "offset": [16, 34] }, + { "index": 0, "rect": [47, 61, 30, 17], "offset": [17, 11] } + ] + }, + { + "id": "goldflip", + "texture": { + "file": "images/loot/coins100.png" + }, + "referenceTextureSize": [64, 128], + "rects": [ + { "index": 0, "rect": [129, 0, 38, 52], "offset": [10, 70] }, + { "index": 0, "rect": [41, 0, 44, 64], "offset": [12, 85] }, + { "index": 0, "rect": [85, 0, 44, 64], "offset": [13, 86] }, + { "index": 0, "rect": [0, 0, 41, 71], "offset": [14, 75] }, + { "index": 0, "rect": [167, 0, 31, 43], "offset": [15, 36] }, + { "index": 0, "rect": [167, 43, 29, 15], "offset": [15, 8] } + ] + }, + { "id": "helmut", "fromId": "armor2" }, + { "id": "innsign", "fromId": "armor2" }, + { "id": "larmor", "fromId": "armor2" }, + { + "id": "mace", + "texture": { + "file": "images/loot/shortsword.png" + }, + "referenceTextureSize": [64, 128], + "rects": [ + { "index": 0, "rect": [0, 103, 27, 53], "offset": [4, 71] }, + { "index": 0, "rect": [0, 156, 22, 61], "offset": [2, 84] }, + { "index": 0, "rect": [0, 0, 36, 62], "offset": [12, 91] }, + { "index": 0, "rect": [0, 62, 36, 41], "offset": [15, 64] }, + { "index": 0, "rect": [22, 167, 13, 25], "offset": [4, 26] }, + { "index": 0, "rect": [22, 156, 14, 11], "offset": [2, 3] } + ] + }, + { "id": "manaflip", "fromId": "bottle" }, + { + "id": "ring", + "texture": { + "file": "images/loot/ring.png" + }, + "referenceTextureSize": [64, 128], + "rects": [ + { "index": 0, "rect": [26, 41, 19, 35], "offset": [3, 55] }, + { "index": 0, "rect": [0, 51, 23, 44], "offset": [3, 69] }, + { "index": 0, "rect": [0, 0, 26, 51], "offset": [2, 82] }, + { "index": 0, "rect": [26, 0, 22, 41], "offset": [3, 65] }, + { "index": 0, "rect": [23, 76, 13, 18], "offset": [3, 27] }, + { "index": 0, "rect": [36, 76, 6, 4], "offset": [3, 3] } + ] + }, + { "id": "rock", "fromId": "armor2" }, + { + "id": "scroll", + "texture": { + "file": "images/loot/scroll.png" + }, + "referenceTextureSize": [64, 128], + "rects": [ + { "index": 0, "rect": [18, 17, 18, 14], "offset": [6, 49] }, + { "index": 0, "rect": [18, 0, 25, 6], "offset": [12, 65] }, + { "index": 0, "rect": [25, 6, 16, 11], "offset": [8, 69] }, + { "index": 0, "rect": [0, 0, 6, 18], "offset": [5, 57] }, + { "index": 0, "rect": [0, 18, 18, 12], "offset": [4, 27] }, + { "index": 0, "rect": [6, 6, 19, 11], "offset": [7, 7] } + ] + }, + { + "id": "shield", + "texture": { + "file": "images/loot/shield.png" + }, + "referenceTextureSize": [64, 128], + "rects": [ + { "index": 0, "rect": [29, 67, 33, 53], "offset": [12, 64] }, + { "index": 0, "rect": [0, 67, 29, 57], "offset": [6, 80] }, + { "index": 0, "rect": [0, 0, 42, 67], "offset": [10, 91] }, + { "index": 0, "rect": [42, 0, 42, 49], "offset": [12, 72] }, + { "index": 0, "rect": [62, 49, 22, 33], "offset": [9, 39] }, + { "index": 0, "rect": [42, 49, 17, 16], "offset": [10, 9] } + ] + }, + { + "id": "staff", + "texture": { + "file": "images/loot/staff.png" + }, + "referenceTextureSize": [64, 128], + "rects": [ + { "index": 0, "rect": [0, 132, 31, 66], "offset": [11, 75] }, + { "index": 0, "rect": [0, 0, 59, 47], "offset": [28, 74] }, + { "index": 0, "rect": [0, 47, 45, 85], "offset": [13, 105] }, + { "index": 0, "rect": [31, 132, 30, 77], "offset": [5, 87] }, + { "index": 0, "rect": [45, 47, 19, 48], "offset": [7, 43] }, + { "index": 0, "rect": [0, 198, 27, 25], "offset": [13, 13] } + ] + }, + { "id": "swrdflip", "fromId": "mace" }, + { "id": "wand", "fromId": "staff" }, + { "id": "wshield", "fromId": "shield" } + ] +} \ No newline at end of file diff --git a/gamefilesflare/level/item/inventoryTextures.json b/gamefilesflare/level/item/inventoryTextures.json new file mode 100755 index 00000000..e6e34999 --- /dev/null +++ b/gamefilesflare/level/item/inventoryTextures.json @@ -0,0 +1,168 @@ +{ + "texturePack": { + "id": "itemIcons", + "texture": { + "id": "icons", + "file": "images/icons/icons.png", + "frames": [8, 32], + "direction": "horizontal" + }, + "textureIndexes": [ + [11, 65], + [12, 72], + [13, 73], + [14, 74], + [15, 88], + [16, 88], + [17, 88], + [18, 199], + [19, 201], + [20, 203], + [21, 200], + [22, 206], + [23, 198], + [24, 205], + [25, 203], + [26, 64], + [27, 64], + [28, 64], + [29, 200], + [40, 64], + [41, 64], + [42, 64], + [43, 64], + [44, 64], + [45, 64], + [46, 64], + [47, 64], + [48, 64], + [49, 64], + [50, 65], + [51, 219], + [52, 219], + [53, 219], + [54, 219], + [55, 219], + [56, 219], + [57, 219], + [58, 219], + [59, 219], + [60, 219], + [61, 97], + [62, 97], + [63, 97], + [64, 97], + [65, 97], + [66, 97], + [67, 97], + [68, 97], + [69, 97], + [70, 97], + [71, 97], + [72, 97], + [73, 97], + [74, 97], + [75, 97], + [76, 97], + [77, 97], + [78, 97], + [79, 97], + [80, 97], + [81, 97], + [82, 97], + [83, 97], + [84, 97], + [85, 97], + [86, 152], + [87, 217], + [88, 152], + [89, 152], + [90, 152], + [91, 152], + [92, 152], + [93, 152], + [94, 120], + [95, 152], + [96, 152], + [97, 225], + [98, 225], + [99, 225], + [101, 152], + [102, 152], + [103, 153], + [104, 152], + [105, 153], + [106, 152], + [109, 152], + [110, 152], + [111, 120], + [112, 99], + [113, 113], + [114, 121], + [115, 99], + [116, 120], + [117, 99], + [118, 121], + [119, 113], + [120, 104], + [121, 99], + [122, 121], + [123, 99], + [124, 120], + [125, 121], + [126, 120], + [127, 120], + [128, 120], + [129, 113], + [130, 113], + [131, 113], + [132, 99], + [133, 99], + [134, 104], + [135, 104], + [136, 104], + [137, 120], + [138, 121], + [139, 121], + [140, 121], + [141, 99], + [142, 99], + [143, 120], + [144, 113], + [145, 99], + [146, 121], + [147, 121], + [148, 121], + [149, 121], + [150, 121], + [151, 120], + [152, 99], + [153, 99], + [154, 99], + [155, 99], + [156, 113], + [157, 120], + [158, 120], + [159, 120], + [160, 121], + [161, 121], + [162, 121], + [163, 121], + [164, 121], + [165, 121], + [166, 104], + [167, 99], + [168, 121], + [169, 113], + [170, 121], + [171, 99], + [172, 99], + [173, 99], + [174, 99], + [175, 113], + [176, 113], + [177, 104], + [178, 113] + ] + } +} \ No newline at end of file diff --git a/gamefilesflare/level/l1/level.json b/gamefilesflare/level/l1/level.json new file mode 100755 index 00000000..1a57d936 --- /dev/null +++ b/gamefilesflare/level/l1/level.json @@ -0,0 +1,85 @@ +{ + "texturePack": { + "id": "levelBack", + "texture": [ + { + "file": "images/tilesets/tileset_cave.png", + "trim": [0, 0, 1024, 96], + "frames": [16, 3], + "startIndex": 16, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_cave.png", + "trim": [0, 128, 1024, 512], + "frames": [16, 4], + "startIndex": 64, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_cave.png", + "trim": [0, 640, 512, 64], + "frames": [8, 1], + "startIndex": 128, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_cave.png", + "trim": [0, 704, 1024, 128], + "frames": [16, 1], + "startIndex": 144, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_cave.png", + "trim": [768, 704, 256, 64], + "frames": [4, 1], + "startIndex": 160, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_cave.png", + "trim": [768, 768, 256, 64], + "frames": [4, 1], + "startIndex": 176, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_cave.png", + "trim": [0, 832, 1024, 48], + "frames": [16, 1], + "offset": [0, 16], + "startIndex": 192, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_cave.png", + "trim": [0, 896, 768, 48], + "frames": [12, 1], + "offset": [0, 16], + "startIndex": 208, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_cave.png", + "trim": [0, 1152, 128, 128], + "frames": [2, 1], + "startIndex": 240, + "direction": "horizontal" + } + ] + }, + "level": { + "id": "level", + "name": "Town Center", + "texturePackBottom": "levelBack", + "texturePackTop": "levelBack", + "map": { + "file": "level/l1/mineshaft_longsword.json", + "back": "background", + "front": "object", + "sol": "collision" + } + }, + "load": "level/l1/levelObjects.json" +} \ No newline at end of file diff --git a/gamefilesflare/level/l1/levelObjects.json b/gamefilesflare/level/l1/levelObjects.json new file mode 100755 index 00000000..b9f312a3 --- /dev/null +++ b/gamefilesflare/level/l1/levelObjects.json @@ -0,0 +1,10 @@ +{ + "levelObject": { + "id": "town", + "name": "Up to town", + "mapPosition": [43, 63], + "texture": "empty", + "textureRect": [32, 32], + "action": { "name": "load", "file": ["level/town/load.json", "positionPlayer", "[20, 12]"] } + } +} \ No newline at end of file diff --git a/gamefilesflare/level/l1/mineshaft_longsword.json b/gamefilesflare/level/l1/mineshaft_longsword.json new file mode 100755 index 00000000..9e91173a --- /dev/null +++ b/gamefilesflare/level/l1/mineshaft_longsword.json @@ -0,0 +1,385 @@ +{ "backgroundcolor":"#000000", + "height":64, + "infinite":false, + "layers":[ + { + "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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 19, 27, 31, 31, 29, 24, 30, 23, 17, 29, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 16, 23, 16, 28, 16, 24, 25, 17, 30, 51, 18, 21, 21, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 28, 19, 31, 27, 21, 18, 22, 20, 18, 19, 28, 16, 26, 29, 29, 18, 20, 29, 25, 0, 0, 0, 20, 25, 25, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 26, 26, 21, 31, 31, 16, 36, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 37, 21, 50, 28, 19, 20, 23, 25, 22, 29, 29, 24, 16, 26, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 23, 22, 29, 27, 19, 23, 31, 33, 31, 21, 30, 21, 26, 26, 16, 24, 26, 27, 33, 29, 16, 27, 16, 27, 21, 51, 21, 48, 26, 21, 21, 31, 17, 25, 19, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 26, 21, 36, 32, 32, 32, 32, 32, 38, 21, 18, 17, 30, 27, 23, 26, 18, 48, 21, 39, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 37, 31, 18, 21, 25, 27, 16, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 30, 28, 20, 33, 21, 17, 23, 31, 31, 28, 29, 30, 26, 16, 29, 18, 16, 18, 16, 21, 29, 26, 22, 21, 20, 49, 17, 27, 23, 18, 25, 18, 39, 32, 32, 32, 32, 37, 21, 28, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 21, 23, 17, 16, 33, 25, 20, 20, 30, 25, 21, 21, 25, 21, 0, 0, 0, 0, 0, 0, 56, 18, 22, 19, 28, 23, 16, 30, 23, 19, 30, 28, 16, 25, 18, 21, 29, 19, 33, 29, 23, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 26, 21, 52, 27, 24, 33, 16, 20, 21, 26, 23, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 30, 27, 29, 23, 17, 18, 16, 22, 20, 23, 25, 33, 23, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 19, 30, 50, 23, 16, 33, 16, 30, 26, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 21, 29, 29, 17, 33, 26, 16, 22, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 17, 22, 20, 30, 27, 33, 29, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 18, 19, 23, 33, 25, 26, 28, 30, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 31, 21, 33, 19, 24, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 29, 31, 33, 16, 20, 23, 30, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 30, 30, 26, 33, 27, 27, 26, 24, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 33, 17, 19, 18, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 20, 33, 19, 50, 17, 31, 26, 27, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 24, 39, 34, 34, 34, 37, 22, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 23, 17, 30, 21, 28, 33, 21, 30, 29, 18, 27, 30, 31, 17, 18, 17, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 33, 23, 31, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 17, 22, 20, 53, 31, 33, 26, 20, 29, 23, 17, 28, 18, 28, 22, 27, 31, 18, 22, 18, 19, 21, 28, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 16, 16, 33, 27, 30, 16, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 20, 55, 21, 18, 33, 21, 20, 19, 20, 17, 21, 31, 31, 20, 17, 18, 22, 22, 28, 26, 19, 19, 28, 31, 21, 24, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 33, 18, 16, 16, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 20, 30, 31, 30, 21, 41, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 37, 16, 23, 23, 22, 25, 27, 28, 21, 25, 17, 0, 0, 0, 0, 0, 0, 0, 16, 16, 33, 16, 28, 27, 28, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 26, 21, 25, 54, 27, 33, 27, 29, 27, 23, 28, 27, 20, 31, 30, 24, 20, 16, 26, 20, 17, 18, 25, 33, 25, 29, 21, 26, 18, 21, 26, 23, 22, 28, 29, 0, 0, 0, 0, 0, 0, 16, 16, 33, 21, 16, 25, 20, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 16, 17, 22, 20, 33, 27, 27, 29, 48, 23, 22, 26, 18, 29, 22, 29, 17, 21, 27, 25, 26, 28, 39, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 37, 16, 16, 0, 0, 0, 0, 16, 16, 33, 20, 30, 29, 22, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 18, 23, 17, 22, 33, 29, 26, 23, 30, 16, 27, 25, 27, 24, 0, 0, 0, 0, 0, 0, 56, 16, 18, 18, 18, 31, 25, 31, 17, 30, 27, 26, 24, 33, 16, 16, 0, 0, 0, 0, 16, 16, 33, 23, 30, 23, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 31, 22, 28, 16, 29, 25, 26, 20, 23, 27, 31, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 22, 23, 17, 24, 25, 19, 24, 18, 19, 25, 33, 16, 16, 0, 0, 0, 0, 16, 16, 33, 17, 30, 19, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 21, 18, 16, 25, 23, 31, 31, 19, 31, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 28, 26, 16, 19, 21, 31, 33, 16, 16, 0, 0, 0, 0, 16, 16, 33, 19, 27, 22, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 20, 16, 24, 28, 18, 27, 21, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 25, 24, 29, 30, 33, 16, 16, 0, 0, 0, 0, 16, 16, 33, 26, 29, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 17, 29, 22, 20, 28, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 16, 22, 19, 33, 16, 16, 0, 0, 0, 0, 0, 16, 33, 19, 27, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 23, 23, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 25, 33, 16, 16, 0, 0, 0, 0, 16, 16, 33, 19, 23, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 28, 33, 16, 16, 16, 0, 0, 16, 16, 16, 33, 31, 23, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 21, 33, 16, 16, 16, 16, 16, 16, 36, 32, 38, 31, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 16, 39, 32, 32, 37, 16, 16, 36, 38, 23, 19, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 22, 21, 26, 25, 41, 32, 32, 38, 25, 21, 28, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 28, 22, 27, 23, 33, 31, 31, 30, 27, 29, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 21, 31, 23, 33, 26, 30, 17, 23, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 19, 16, 33, 22, 18, 22, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 28, 25, 33, 25, 27, 18, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 31, 39, 32, 37, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 30, 23, 26, 33, 24, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 31, 23, 33, 25, 25, 21, 27, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 39, 32, 37, 20, 19, 26, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 33, 23, 31, 26, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 16, 39, 32, 32, 37, 21, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 20, 18, 17, 33, 26, 20, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 22, 18, 33, 24, 17, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 31, 33, 22, 28, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 26, 33, 20, 31, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 23, 33, 17, 17, 28, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 18, 33, 22, 24, 23, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 24, 20, 33, 31, 17, 26, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 28, 31, 16, 33, 20, 24, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 22, 19, 16, 18, 18, 18, 33, 18, 20, 30, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 20, 17, 30, 31, 28, 22, 33, 19, 27, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 18, 27, 30, 18, 19, 16, 26, 21, 23, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 26, 18, 19, 29, 24, 19, 18, 28, 19, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":64, + "name":"background", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":64, + "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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 65, 65, 113, 65, 69, 97, 65, 105, 65, 65, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 103, 162, 132, 133, 134, 0, 0, 0, 0, 0, 0, 81, 65, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 65, 101, 65, 73, 0, 0, 0, 72, 113, 65, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 65, 65, 99, 0, 0, 0, 0, 0, 129, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 81, 65, 109, 65, 80, 0, 0, 81, 101, 65, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 80, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 65, 105, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 81, 65, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 65, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 65, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 67, 107, 67, 67, 67, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 67, 67, 74, 0, 0, 0, 0, 0, 75, 67, 67, 67, 67, 67, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 82, 67, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 67, 67, 67, 67, 67, 83, 133, 134, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 128, 0, 0, 82, 67, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 83, 135, 0, 0, 0, 0, 146, 81, 65, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 67, 83, 0, 0, 128, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 83, 0, 0, 151, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 81, 65, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 148, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 81, 65, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 65, 65, 103, 0, 0, 130, 0, 0, 0, 0, 0, 0, 81, 65, 97, 65, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 83, 0, 0, 0, 0, 0, 81, 65, 65, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 65, 105, 65, 101, 65, 65, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 83, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 65, 109, 65, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 178, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 81, 65, 65, 105, 65, 97, 65, 73, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 150, 0, 0, 81, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 65, 65, 73, 0, 0, 0, 96, 0, 0, 153, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 147, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 67, 67, 107, 67, 67, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 145, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 82, 74, 0, 0, 0, 0, 0, 79, 67, 83, 0, 0, 0, 0, 0, 0, 111, 0, 0, 152, 0, 0, 0, 66, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 82, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 83, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 74, 0, 0, 0, 0, 0, 0, 0, 0, 79, 67, 67, 67, 83, 0, 0, 151, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 83, 144, 0, 0, 0, 0, 0, 0, 0, 82, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 83, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 75, 83, 0, 0, 0, 0, 82, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 83, 0, 0, 0, 0, 0, 0, 82, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 107, 83, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 64, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 83, 0, 0, 0, 82, 67, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 83, 0, 0, 0, 0, 66, 0, 0, 0, 72, 80, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 67, 67, 67, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 66, 0, 0, 102, 80, 163, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 81, 69, 65, 80, 0, 0, 0, 0, 0, 82, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 153, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 83, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 83, 0, 0, 0, 0, 0, 0, 0, 0, 82, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 82, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 83, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 179, 0, 0, 0, 0, 82, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 83, 178, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 81, 65, 101, 65, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 83, 0, 0, 0, 0, 150, 0, 81, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 83, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 83, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 81, 65, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 83, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 148, 0, 0, 81, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 128, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 99, 134, 0, 0, 0, 144, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 115, 133, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 97, 65, 80, 0, 0, 0, 0, 0, 135, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 82, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 145, 133, 146, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 241, 241, 82, 67, 67, 67, 67, 67, 67, 67, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":64, + "name":"object", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":64, + "x":0, + "y":0 + }, + { + "data":[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 3, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 2, 0, 0, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 0, 0, 0, 0, 0, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0, 0, 2, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 2, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 1, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 2, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 2, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 3, 3, 3, 1, 0, 0, 1, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 1, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 1, 1, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 0, 0, 0, 0, 0, 1, 3, 3, 3, 3, 1, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 1, 3, 3, 3, 1, 1, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 1, 3, 3, 1, 1, 2, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 2, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 2, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 0, 0, 0, 0, 2, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 1, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 2, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 2, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3], + "height":64, + "name":"collision", + "opacity":1, + "type":"tilelayer", + "visible":false, + "width":64, + "x":0, + "y":0 + }, + { + "draworder":"topdown", + "name":"event", + "objects":[ + { + "height":32, + "id":1, + "name":"to Frontier Outpost", + "properties": + { + "activate":"on_trigger", + "hotspot":"location", + "intermap":"maps\/frontier_outpost.txt,20,13", + "tooltip":"Frontier Outpost" + }, + "propertytypes": + { + "activate":"string", + "hotspot":"string", + "intermap":"string", + "tooltip":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":64, + "x":1376, + "y":2016 + }, + { + "height":32, + "id":2, + "name":"fork_crate", + "properties": + { + "activate":"on_trigger", + "hotspot":"location", + "loot":"loot\/leveled_low.txt", + "mapmod":"object,47,37,179", + "repeat":"false", + "soundfx":"soundfx\/wood_open.ogg", + "tooltip":"Crate" + }, + "propertytypes": + { + "activate":"string", + "hotspot":"string", + "loot":"string", + "mapmod":"string", + "repeat":"string", + "soundfx":"string", + "tooltip":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":32, + "x":1504, + "y":1184 + }, + { + "height":32, + "id":3, + "name":"backside_crate", + "properties": + { + "activate":"on_trigger", + "hotspot":"location", + "loot":"loot\/leveled_low.txt", + "mapmod":"object,28,15,179", + "repeat":"false", + "soundfx":"soundfx\/wood_open.ogg", + "tooltip":"Crate" + }, + "propertytypes": + { + "activate":"string", + "hotspot":"string", + "loot":"string", + "mapmod":"string", + "repeat":"string", + "soundfx":"string", + "tooltip":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":32, + "x":896, + "y":480 + }, + { + "height":32, + "id":4, + "name":"backside_barrel", + "properties": + { + "activate":"on_trigger", + "hotspot":"location", + "loot":"loot\/leveled_low.txt", + "mapmod":"object,15,12,178", + "repeat":"false", + "soundfx":"soundfx\/wood_open.ogg", + "tooltip":"Barrel" + }, + "propertytypes": + { + "activate":"string", + "hotspot":"string", + "loot":"string", + "mapmod":"string", + "repeat":"string", + "soundfx":"string", + "tooltip":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":32, + "x":480, + "y":384 + }, + { + "height":32, + "id":5, + "name":"wind sound", + "properties": + { + " soundfx":"soundfx\/environment\/cave_wind_loop.ogg", + "activate":"on_load" + }, + "propertytypes": + { + " soundfx":"string", + "activate":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":32, + "x":0, + "y":0 + }, + { + "height":32, + "id":6, + "name":"droplets sound", + "properties": + { + "activate":"on_load", + "soundfx":"soundfx\/environment\/cave_droplets_loop.ogg" + }, + "propertytypes": + { + "activate":"string", + "soundfx":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":32, + "x":256, + "y":768 + }, + { + "height":128, + "id":7, + "name":"spawn_reanimated_skeleton", + "properties": + { + "activate":"on_load", + "requires_not_status":"ml_skeleton_defeated", + "requires_status":"ml_skeleton_search", + "spawn":"reanimated_skeleton,6,28" + }, + "propertytypes": + { + "activate":"string", + "requires_not_status":"string", + "requires_status":"string", + "spawn":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":128, + "x":704, + "y":1472 + }], + "opacity":1, + "type":"objectgroup", + "visible":false, + "x":0, + "y":0 + }, + { + "draworder":"topdown", + "name":"enemy", + "objects":[ + { + "height":192, + "id":8, + "name":"", + "properties": + { + "category":"miner", + "level":"1,1", + "number":"1,3" + }, + "propertytypes": + { + "category":"string", + "level":"string", + "number":"string" + }, + "rotation":0, + "type":"enemy", + "visible":true, + "width":480, + "x":800, + "y":832 + }, + { + "height":320, + "id":9, + "name":"", + "properties": + { + "category":"miner", + "level":"1,1", + "number":"2,4" + }, + "propertytypes": + { + "category":"string", + "level":"string", + "number":"string" + }, + "rotation":0, + "type":"enemy", + "visible":true, + "width":128, + "x":352, + "y":704 + }, + { + "height":192, + "id":10, + "name":"", + "properties": + { + "category":"miner", + "level":"1,1", + "number":"2,4" + }, + "propertytypes": + { + "category":"string", + "level":"string", + "number":"string" + }, + "rotation":0, + "type":"enemy", + "visible":true, + "width":608, + "x":480, + "y":384 + }, + { + "height":416, + "id":11, + "name":"", + "properties": + { + "category":"miner", + "level":"1,1", + "number":"2,4" + }, + "propertytypes": + { + "category":"string", + "level":"string", + "number":"string" + }, + "rotation":0, + "type":"enemy", + "visible":true, + "width":480, + "x":1152, + "y":384 + }], + "opacity":1, + "type":"objectgroup", + "visible":false, + "x":0, + "y":0 + }], + "nextobjectid":12, + "orientation":"isometric", + "properties": + { + "hero_pos":"44,61", + "music":"music\/cave_theme.ogg", + "tileset":"tilesetdefs\/tileset_cave.txt", + "title":"Mineshaft Longsword" + }, + "propertytypes": + { + "hero_pos":"string", + "music":"string", + "tileset":"string", + "title":"string" + }, + "renderorder":"right-down", + "tiledversion":"1.1.1", + "tileheight":32, + "tilesets":[ + { + "columns":15, + "firstgid":1, + "image":"..\/cave\/tiled_collision.png", + "imageheight":32, + "imagewidth":960, + "margin":0, + "name":"tiled_collision", + "spacing":0, + "tilecount":15, + "tileheight":32, + "tilewidth":64 + }, + { + "columns":16, + "firstgid":16, + "image":"..\/cave\/tiled_cave.png", + "imageheight":1920, + "imagewidth":1024, + "margin":0, + "name":"tiled_cave", + "spacing":0, + "tilecount":240, + "tileheight":128, + "tilewidth":64 + }], + "tilewidth":64, + "type":"map", + "version":1, + "width":64 +} \ No newline at end of file diff --git a/gamefilesflare/level/l1/music.json b/gamefilesflare/level/l1/music.json new file mode 100755 index 00000000..81878c59 --- /dev/null +++ b/gamefilesflare/level/l1/music.json @@ -0,0 +1,8 @@ +{ + "audio": { + "id": "main", + "file": "music/cave_theme.ogg", + "loop": true, + "play": true + } +} \ No newline at end of file diff --git a/gamefilesflare/level/player/Rogue/cel.json b/gamefilesflare/level/player/Rogue/cel.json new file mode 100755 index 00000000..3c669bb5 --- /dev/null +++ b/gamefilesflare/level/player/Rogue/cel.json @@ -0,0 +1,7 @@ +{ + "load": "level/player/Warrior/cel.json", + "texturePack": { + "id": "rogueNormal", + "fromId": "warriorNormal" + } +} \ No newline at end of file diff --git a/gamefilesflare/level/player/Rogue/class.json b/gamefilesflare/level/player/Rogue/class.json new file mode 100755 index 00000000..ec98083d --- /dev/null +++ b/gamefilesflare/level/player/Rogue/class.json @@ -0,0 +1,59 @@ +{ + "playerClass": { + "id": "Rogue", + "replaceVars": true, + "name": "Rogue", + "type": "Human", + "description": "Rogue", + "defaultOutline": "%outlineFriend%", + "defaultOutlineIgnore": "0x000000", + "defaults": { + "experience": 0, + "points": 0, + "strength": 20, + "magic": 15, + "dexterity": 30, + "vitality": 20, + "bonusLife": 1.5, + "bonusMana": 1.5, + "defaultDamageMin": 1, + "levelUp": 5 + }, + "maxStrength": 55, + "maxMagic": 70, + "maxDexterity": 250, + "maxVitality": 80, + "maxResistMagic": 75, + "maxResistFire": 75, + "maxResistLightning": 75, + "lifeFormula": "vitality + (1.5 * vitalityItems) + (2 * level) + lifeItems + 23", + "manaFormula": "magic + (1.5 * magicItems) + (2 * level) + manaItems + 5", + "armorFormula": "dexterityNow * 0.2 + armorItems", + "toHitFormula": "dexterityNow * 0.5 + toHitItems + 50", + "damageFormula": "strengthNow + dexterityNow * level / 200", + "texturePacks": { + "texturePack": "rogueNormal", + "animations": [ + { "range": [0, 32], "type": "backAndForth" }, + { "range": [32, 96], "type": "looped" } + ] + }, + "textureIndexes": [ + { "name": "Stand1", "index": 0 }, + { "name": "Stand2", "index": 0 }, + { "name": "Walk1", "index": 1 }, + { "name": "Walk2", "index": 1 } + ], + "animationSpeeds": [ + { "name": "Walk1", "animation": 8, "walk": 25 }, + { "name": "Walk2", "animation": 8, "walk": 25 } + ], + "actions": { + "levelChange": "updateCharPoints" + }, + "sounds": [ + { "index": 0, "id": "walk" } + ], + "defaultWalkSound": 0 + } +} \ No newline at end of file diff --git a/gamefilesflare/level/player/Rogue/defaults.json b/gamefilesflare/level/player/Rogue/defaults.json new file mode 100755 index 00000000..fed06f9e --- /dev/null +++ b/gamefilesflare/level/player/Rogue/defaults.json @@ -0,0 +1,51 @@ +{ + "player": { + "id": "hero", + "class": "Rogue", + "name": "{1}", + "currentPlayer": true, + "direction": "Front", + "mapPosition": [45, 60], + "enableHover": false, + "inventory": [ + { + "index": "Body", + "bodyInventory": true, + "allowedClassTypes": ["Amulet", "Armor", "Axe", "Bow", "Club", "Helmet", "Ring", "Shield", "Staff", "Sword"], + "item": [ + { + "index": "LeftHand", + "class": "shortBow" + } + ] + }, + { + "index": "Belt", + "size": 8, + "allowedClassTypes": ["Potion", "Scroll"], + "item": [ + { + "index": 0, + "class": "potionOfHealing" + }, + { + "index": 1, + "class": "potionOfHealing" + } + ] + }, + { + "index": "Stash", + "enforceItemSize": true, + "size": [8, 4], + "item": { + "index": [0, 3], + "class": "gold", + "properties": { + "gold": 100 + } + } + } + ] + } +} \ No newline at end of file diff --git a/gamefilesflare/level/player/Sorceror/cel.json b/gamefilesflare/level/player/Sorceror/cel.json new file mode 100755 index 00000000..a020543c --- /dev/null +++ b/gamefilesflare/level/player/Sorceror/cel.json @@ -0,0 +1,7 @@ +{ + "load": "level/player/Warrior/cel.json", + "texturePack": { + "id": "sorcerorNormal", + "fromId": "warriorNormal" + } +} \ No newline at end of file diff --git a/gamefilesflare/level/player/Sorceror/class.json b/gamefilesflare/level/player/Sorceror/class.json new file mode 100755 index 00000000..d9b69698 --- /dev/null +++ b/gamefilesflare/level/player/Sorceror/class.json @@ -0,0 +1,59 @@ +{ + "playerClass": { + "id": "Sorceror", + "replaceVars": true, + "name": "Sorceror", + "type": "Human", + "description": "Sorceror", + "defaultOutline": "%outlineFriend%", + "defaultOutlineIgnore": "0x000000", + "defaults": { + "experience": 0, + "points": 0, + "strength": 15, + "magic": 35, + "dexterity": 15, + "vitality": 20, + "bonusLife": 1, + "bonusMana": 2, + "defaultDamageMin": 1, + "levelUp": 5 + }, + "maxStrength": 45, + "maxMagic": 250, + "maxDexterity": 85, + "maxVitality": 80, + "maxResistMagic": 75, + "maxResistFire": 75, + "maxResistLightning": 75, + "lifeFormula": "vitality + vitalityItems + level + lifeItems + 9", + "manaFormula": "(2 * magic) + (2 * magicItems) + (2 * level) + manaItems - 2", + "armorFormula": "dexterityNow * 0.2 + armorItems", + "toHitFormula": "dexterityNow * 0.5 + toHitItems + 50", + "damageFormula": "strengthNow * level / 100", + "texturePacks": { + "texturePack": "sorcerorNormal", + "animations": [ + { "range": [0, 32], "type": "backAndForth" }, + { "range": [32, 96], "type": "looped" } + ] + }, + "textureIndexes": [ + { "name": "Stand1", "index": 0 }, + { "name": "Stand2", "index": 0 }, + { "name": "Walk1", "index": 1 }, + { "name": "Walk2", "index": 1 } + ], + "animationSpeeds": [ + { "name": "Walk1", "animation": 8, "walk": 25 }, + { "name": "Walk2", "animation": 8, "walk": 25 } + ], + "actions": { + "levelChange": "updateCharPoints" + }, + "sounds": [ + { "index": 0, "id": "walk" } + ], + "defaultWalkSound": 0 + } +} \ No newline at end of file diff --git a/gamefilesflare/level/player/Sorceror/defaults.json b/gamefilesflare/level/player/Sorceror/defaults.json new file mode 100755 index 00000000..2ed65195 --- /dev/null +++ b/gamefilesflare/level/player/Sorceror/defaults.json @@ -0,0 +1,51 @@ +{ + "player": { + "id": "hero", + "class": "Sorceror", + "name": "{1}", + "currentPlayer": true, + "direction": "Front", + "mapPosition": [45, 60], + "enableHover": false, + "inventory": [ + { + "index": "Body", + "bodyInventory": true, + "allowedClassTypes": ["Amulet", "Armor", "Axe", "Bow", "Club", "Helmet", "Ring", "Shield", "Staff", "Sword"], + "item": [ + { + "index": "LeftHand", + "class": "shortStaff" + } + ] + }, + { + "index": "Belt", + "size": 8, + "allowedClassTypes": ["Potion", "Scroll"], + "item": [ + { + "index": 0, + "class": "potionOfMana" + }, + { + "index": 1, + "class": "potionOfMana" + } + ] + }, + { + "index": "Stash", + "enforceItemSize": true, + "size": [8, 4], + "item": { + "index": [0, 3], + "class": "gold", + "properties": { + "gold": 100 + } + } + } + ] + } +} \ No newline at end of file diff --git a/gamefilesflare/level/player/Warrior/cel.json b/gamefilesflare/level/player/Warrior/cel.json new file mode 100755 index 00000000..66dcd2ab --- /dev/null +++ b/gamefilesflare/level/player/Warrior/cel.json @@ -0,0 +1,114 @@ +{ + "texturePack": { + "id": "warriorNormal", + "texture": { + "id": "skeleton", + "file": "images/enemies/skeleton.png", + "frames": [1, 1] + }, + "referenceTextureSize": [128, 128], + "rects": [ + { "index": 0, "rect": [452, 72, 43, 51], "offset": [24, 47] }, + { "index": 0, "rect": [495, 72, 42, 51], "offset": [23, 47] }, + { "index": 0, "rect": [537, 72, 41, 51], "offset": [22, 47] }, + { "index": 0, "rect": [6772, 49, 41, 49], "offset": [22, 45] }, + { "index": 0, "rect": [6638, 57, 53, 57], "offset": [28, 50] }, + { "index": 0, "rect": [6584, 57, 54, 57], "offset": [28, 50] }, + { "index": 0, "rect": [1817, 68, 56, 56], "offset": [29, 49] }, + { "index": 0, "rect": [1873, 68, 56, 56], "offset": [29, 49] }, + { "index": 0, "rect": [4066, 63, 87, 61], "offset": [32, 54] }, + { "index": 0, "rect": [4825, 0, 86, 62], "offset": [31, 54] }, + { "index": 0, "rect": [4153, 63, 86, 61], "offset": [31, 53] }, + { "index": 0, "rect": [3075, 65, 86, 59], "offset": [31, 52] }, + { "index": 0, "rect": [3826, 64, 81, 60], "offset": [24, 55] }, + { "index": 0, "rect": [3907, 64, 80, 60], "offset": [23, 55] }, + { "index": 0, "rect": [3411, 65, 78, 59], "offset": [22, 54] }, + { "index": 0, "rect": [3489, 65, 76, 59], "offset": [21, 54] }, + { "index": 0, "rect": [1362, 0, 47, 69], "offset": [17, 54] }, + { "index": 0, "rect": [1758, 0, 46, 68], "offset": [17, 53] }, + { "index": 0, "rect": [1503, 0, 45, 69], "offset": [17, 53] }, + { "index": 0, "rect": [1850, 0, 45, 68], "offset": [17, 52] }, + { "index": 0, "rect": [2210, 0, 56, 67], "offset": [18, 50] }, + { "index": 0, "rect": [2643, 0, 56, 66], "offset": [19, 50] }, + { "index": 0, "rect": [3038, 0, 59, 65], "offset": [21, 49] }, + { "index": 0, "rect": [3097, 0, 59, 65], "offset": [21, 49] }, + { "index": 0, "rect": [2988, 65, 87, 59], "offset": [48, 48] }, + { "index": 0, "rect": [2641, 66, 88, 58], "offset": [49, 47] }, + { "index": 0, "rect": [2085, 67, 88, 57], "offset": [49, 46] }, + { "index": 0, "rect": [2173, 67, 87, 57], "offset": [49, 46] }, + { "index": 0, "rect": [1176, 69, 83, 55], "offset": [51, 46] }, + { "index": 0, "rect": [1259, 69, 81, 55], "offset": [50, 46] }, + { "index": 0, "rect": [795, 70, 79, 54], "offset": [49, 44] }, + { "index": 0, "rect": [663, 71, 77, 53], "offset": [48, 44] }, + + { "index": 0, "rect": [2420, 0, 47, 67], "offset": [18, 54] }, + { "index": 0, "rect": [4456, 0, 50, 63], "offset": [22, 53] }, + { "index": 0, "rect": [4300, 0, 53, 63], "offset": [25, 52] }, + { "index": 0, "rect": [5028, 62, 51, 62], "offset": [23, 53] }, + { "index": 0, "rect": [2467, 0, 47, 67], "offset": [18, 54] }, + { "index": 0, "rect": [1895, 0, 44, 68], "offset": [16, 53] }, + { "index": 0, "rect": [3964, 0, 43, 64], "offset": [16, 52] }, + { "index": 0, "rect": [1939, 0, 44, 68], "offset": [16, 53] }, + { "index": 0, "rect": [6011, 0, 57, 59], "offset": [36, 54] }, + { "index": 0, "rect": [1929, 68, 54, 56], "offset": [33, 54] }, + { "index": 0, "rect": [6045, 59, 54, 59], "offset": [29, 53] }, + { "index": 0, "rect": [6331, 58, 55, 58], "offset": [31, 54] }, + { "index": 0, "rect": [1760, 68, 57, 56], "offset": [36, 54] }, + { "index": 0, "rect": [2797, 66, 66, 58], "offset": [39, 53] }, + { "index": 0, "rect": [4610, 63, 65, 61], "offset": [35, 52] }, + { "index": 0, "rect": [4675, 63, 64, 61], "offset": [39, 53] }, + { "index": 0, "rect": [5578, 60, 53, 60], "offset": [34, 56] }, + { "index": 0, "rect": [6252, 59, 44, 59], "offset": [24, 55] }, + { "index": 0, "rect": [6641, 0, 53, 57], "offset": [27, 54] }, + { "index": 0, "rect": [6203, 59, 49, 59], "offset": [25, 55] }, + { "index": 0, "rect": [6099, 59, 53, 59], "offset": [34, 56] }, + { "index": 0, "rect": [5918, 59, 66, 59], "offset": [49, 55] }, + { "index": 0, "rect": [5772, 60, 76, 59], "offset": [52, 54] }, + { "index": 0, "rect": [5945, 0, 66, 59], "offset": [47, 55] }, + { "index": 0, "rect": [5726, 60, 46, 60], "offset": [23, 57] }, + { "index": 0, "rect": [3913, 0, 51, 64], "offset": [26, 57] }, + { "index": 0, "rect": [3755, 0, 53, 64], "offset": [28, 56] }, + { "index": 0, "rect": [3861, 0, 52, 64], "offset": [27, 57] }, + { "index": 0, "rect": [5079, 62, 46, 62], "offset": [23, 57] }, + { "index": 0, "rect": [6173, 0, 50, 59], "offset": [30, 56] }, + { "index": 0, "rect": [5984, 59, 61, 59], "offset": [38, 56] }, + { "index": 0, "rect": [6439, 58, 47, 58], "offset": [27, 56] }, + { "index": 0, "rect": [5030, 0, 47, 62], "offset": [20, 58] }, + { "index": 0, "rect": [4555, 0, 46, 63], "offset": [20, 57] }, + { "index": 0, "rect": [4601, 0, 46, 63], "offset": [19, 56] }, + { "index": 0, "rect": [4647, 0, 46, 63], "offset": [20, 57] }, + { "index": 0, "rect": [5077, 0, 47, 62], "offset": [20, 58] }, + { "index": 0, "rect": [5124, 0, 46, 62], "offset": [20, 57] }, + { "index": 0, "rect": [1804, 0, 46, 68], "offset": [20, 62] }, + { "index": 0, "rect": [5125, 62, 46, 62], "offset": [20, 57] }, + { "index": 0, "rect": [4405, 0, 51, 63], "offset": [12, 57] }, + { "index": 0, "rect": [6152, 59, 51, 59], "offset": [16, 56] }, + { "index": 0, "rect": [6121, 0, 52, 59], "offset": [22, 55] }, + { "index": 0, "rect": [6068, 0, 53, 59], "offset": [20, 56] }, + { "index": 0, "rect": [5523, 60, 55, 60], "offset": [16, 57] }, + { "index": 0, "rect": [4172, 0, 65, 63], "offset": [19, 57] }, + { "index": 0, "rect": [4104, 0, 68, 63], "offset": [22, 56] }, + { "index": 0, "rect": [4237, 0, 63, 63], "offset": [18, 57] }, + { "index": 0, "rect": [5269, 0, 52, 61], "offset": [15, 56] }, + { "index": 0, "rect": [4506, 0, 49, 63], "offset": [16, 55] }, + { "index": 0, "rect": [3156, 0, 58, 65], "offset": [22, 54] }, + { "index": 0, "rect": [3701, 0, 54, 64], "offset": [20, 55] }, + { "index": 0, "rect": [5271, 61, 52, 61], "offset": [15, 56] }, + { "index": 0, "rect": [5806, 0, 71, 59], "offset": [15, 55] }, + { "index": 0, "rect": [2260, 67, 81, 57], "offset": [19, 54] }, + { "index": 0, "rect": [5848, 59, 70, 59], "offset": [17, 55] }, + { "index": 0, "rect": [1265, 0, 49, 69], "offset": [16, 54] }, + { "index": 0, "rect": [2318, 0, 51, 67], "offset": [16, 53] }, + { "index": 0, "rect": [2699, 0, 52, 66], "offset": [16, 53] }, + { "index": 0, "rect": [2369, 0, 51, 67], "offset": [16, 53] }, + { "index": 0, "rect": [1314, 0, 48, 69], "offset": [15, 54] }, + { "index": 0, "rect": [3808, 0, 53, 64], "offset": [16, 54] }, + { "index": 0, "rect": [2729, 66, 68, 58], "offset": [20, 53] }, + { "index": 0, "rect": [3484, 0, 51, 65], "offset": [17, 54] } + ] + } +} + + + + diff --git a/gamefilesflare/level/player/Warrior/class.json b/gamefilesflare/level/player/Warrior/class.json new file mode 100755 index 00000000..935c1a72 --- /dev/null +++ b/gamefilesflare/level/player/Warrior/class.json @@ -0,0 +1,59 @@ +{ + "playerClass": { + "id": "Warrior", + "replaceVars": true, + "name": "Warrior", + "type": "Human", + "description": "Warrior", + "defaultOutline": "%outlineFriend%", + "defaultOutlineIgnore": "0x000000", + "defaults": { + "experience": 0, + "points": 0, + "strength": 30, + "magic": 10, + "dexterity": 20, + "vitality": 25, + "bonusLife": 2, + "bonusMana": 1, + "defaultDamageMin": 1, + "levelUp": 5 + }, + "maxStrength": 250, + "maxMagic": 50, + "maxDexterity": 60, + "maxVitality": 100, + "maxResistMagic": 75, + "maxResistFire": 75, + "maxResistLightning": 75, + "lifeFormula": "(2 * vitality) + (2 * vitalityItems) + (2 * level) + lifeItems + 18", + "manaFormula": "magic + magicItems + level + manaItems - 1", + "armorFormula": "dexterityNow * 0.2 + armorItems", + "toHitFormula": "dexterityNow * 0.5 + toHitItems + 50", + "damageFormula": "strengthNow * level / 100", + "texturePacks": { + "texturePack": "warriorNormal", + "animations": [ + { "range": [0, 32], "type": "backAndForth" }, + { "range": [32, 96], "type": "looped" } + ] + }, + "textureIndexes": [ + { "name": "Stand1", "index": 0 }, + { "name": "Stand2", "index": 0 }, + { "name": "Walk1", "index": 1 }, + { "name": "Walk2", "index": 1 } + ], + "animationSpeeds": [ + { "name": "Walk1", "animation": 8, "walk": 25 }, + { "name": "Walk2", "animation": 8, "walk": 25 } + ], + "actions": { + "levelChange": "updateCharPoints" + }, + "sounds": [ + { "index": 0, "id": "walk" } + ], + "defaultWalkSound": 0 + } +} \ No newline at end of file diff --git a/gamefilesflare/level/player/Warrior/defaults.json b/gamefilesflare/level/player/Warrior/defaults.json new file mode 100755 index 00000000..7592679c --- /dev/null +++ b/gamefilesflare/level/player/Warrior/defaults.json @@ -0,0 +1,65 @@ +{ + "player": { + "id": "hero", + "class": "Warrior", + "name": "{1}", + "currentPlayer": true, + "direction": "Front", + "mapPosition": [45, 60], + "enableHover": false, + "inventory": [ + { + "index": "Body", + "bodyInventory": true, + "allowedClassTypes": ["Amulet", "Armor", "Axe", "Bow", "Club", "Helmet", "Ring", "Shield", "Staff", "Sword"], + "item": [ + { + "index": "LeftHand", + "class": "shortSword" + }, + { + "index": "RightHand", + "class": "buckler", + "properties": { + "armor": 3, + "durability": 10, + "durabilityMax": 10 + } + } + ] + }, + { + "index": "Belt", + "size": 8, + "allowedClassTypes": ["Potion", "Scroll"], + "item": [ + { + "index": 0, + "class": "potionOfHealing" + }, + { + "index": 1, + "class": "potionOfHealing" + } + ] + }, + { + "index": "Stash", + "size": [8, 4], + "item": [ + { + "index": [0, 0], + "class": "club" + }, + { + "index": [0, 3], + "class": "gold", + "properties": { + "gold": 100 + } + } + ] + } + ] + } +} \ No newline at end of file diff --git a/gamefilesflare/level/town/frontier_outpost.json b/gamefilesflare/level/town/frontier_outpost.json new file mode 100755 index 00000000..7288e9ad --- /dev/null +++ b/gamefilesflare/level/town/frontier_outpost.json @@ -0,0 +1,776 @@ +{ "backgroundcolor":"#000000", + "height":64, + "infinite":false, + "layers":[ + { + "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, 19, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 159, 167, 176, 176, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 23, 33, 21, 22, 23, 20, 21, 0, 0, 0, 0, 0, 16, 16, 144, 176, 162, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 26, 35, 33, 32, 26, 27, 24, 25, 26, 0, 0, 0, 0, 16, 152, 164, 176, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 28, 29, 30, 35, 28, 32, 30, 31, 28, 29, 30, 0, 0, 0, 16, 16, 144, 176, 176, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 153, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 19, 16, 17, 18, 19, 16, 17, 156, 149, 149, 153, 18, 19, 16, 17, 152, 145, 164, 176, 162, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 165, 149, 157, 20, 21, 22, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 22, 23, 20, 21, 22, 23, 20, 156, 164, 176, 176, 161, 145, 145, 149, 149, 160, 176, 176, 176, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 181, 182, 161, 157, 25, 26, 27, 24, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 27, 24, 25, 26, 156, 149, 164, 176, 166, 151, 147, 163, 176, 176, 176, 176, 176, 176, 166, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 185, 186, 187, 165, 149, 157, 31, 28, 29, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 28, 29, 30, 148, 184, 185, 166, 154, 17, 18, 159, 167, 176, 176, 176, 176, 176, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 189, 190, 191, 188, 189, 161, 145, 153, 17, 18, 19, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 16, 17, 18, 148, 188, 189, 150, 20, 0, 0, 23, 155, 147, 147, 147, 147, 147, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 177, 178, 179, 176, 177, 178, 179, 161, 153, 22, 23, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 20, 21, 22, 144, 176, 177, 150, 24, 264, 0, 17, 24, 25, 26, 27, 24, 25, 26, 0, 0, 0, 0, 0, 24, 25, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 147, 151, 151, 167, 181, 182, 183, 180, 165, 157, 27, 24, 25, 26, 0, 0, 0, 26, 27, 24, 0, 26, 27, 24, 25, 26, 155, 163, 181, 161, 149, 153, 20, 21, 28, 29, 30, 31, 28, 29, 30, 0, 0, 0, 0, 31, 28, 29, 30, 31, 28, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 18, 19, 155, 147, 163, 187, 184, 185, 146, 31, 28, 29, 30, 31, 28, 29, 35, 34, 28, 29, 30, 31, 28, 29, 30, 31, 148, 185, 186, 162, 158, 18, 19, 16, 17, 18, 19, 16, 17, 0, 0, 0, 0, 0, 19, 16, 17, 18, 19, 16, 17, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 36, 20, 21, 159, 167, 188, 189, 161, 153, 16, 17, 18, 19, 16, 17, 32, 34, 16, 17, 18, 19, 16, 17, 18, 19, 148, 189, 190, 150, 21, 22, 23, 20, 21, 22, 23, 20, 21, 22, 0, 0, 0, 22, 23, 20, 21, 22, 23, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 37, 37, 26, 159, 167, 177, 178, 165, 145, 153, 22, 23, 20, 21, 32, 35, 20, 21, 22, 23, 20, 21, 22, 23, 155, 167, 178, 146, 25, 26, 27, 24, 25, 26, 27, 24, 25, 26, 27, 24, 25, 26, 27, 24, 25, 26, 27, 24, 25, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, 28, 29, 38, 31, 155, 163, 182, 183, 180, 161, 157, 27, 24, 25, 32, 42, 34, 43, 36, 38, 39, 25, 26, 27, 24, 144, 182, 165, 157, 30, 31, 28, 29, 30, 31, 28, 29, 30, 31, 28, 29, 30, 31, 28, 29, 30, 31, 28, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 19, 16, 144, 186, 187, 184, 185, 150, 31, 28, 29, 30, 37, 28, 37, 30, 31, 28, 39, 39, 31, 28, 144, 186, 187, 150, 18, 19, 16, 17, 18, 19, 16, 17, 18, 19, 16, 17, 18, 19, 16, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 23, 34, 159, 167, 191, 188, 189, 161, 149, 157, 17, 18, 41, 35, 40, 18, 19, 16, 17, 34, 38, 39, 192, 204, 198, 194, 39, 36, 37, 37, 37, 39, 36, 33, 43, 23, 20, 21, 22, 23, 20, 21, 22, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 24, 25, 159, 167, 176, 177, 178, 179, 146, 21, 22, 23, 20, 35, 22, 23, 20, 21, 34, 23, 152, 160, 178, 179, 150, 26, 27, 24, 25, 26, 27, 21, 45, 33, 27, 24, 25, 26, 27, 24, 25, 26, 27, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 29, 30, 155, 163, 181, 182, 183, 161, 149, 157, 27, 24, 33, 156, 149, 157, 25, 33, 152, 160, 181, 182, 183, 146, 30, 31, 28, 29, 30, 31, 28, 28, 32, 31, 28, 29, 30, 31, 28, 156, 145, 157, 28, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 33, 19, 148, 185, 186, 187, 184, 185, 165, 145, 145, 193, 164, 187, 161, 145, 193, 160, 184, 185, 186, 187, 161, 153, 19, 16, 17, 18, 19, 16, 25, 33, 19, 16, 17, 18, 19, 152, 164, 176, 146, 16, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 32, 23, 144, 189, 190, 191, 188, 189, 190, 191, 188, 199, 190, 191, 188, 189, 205, 191, 188, 189, 190, 191, 188, 150, 23, 20, 21, 22, 23, 20, 46, 39, 23, 20, 21, 22, 23, 159, 151, 163, 165, 153, 21, 22, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 24, 25, 35, 27, 159, 163, 178, 179, 176, 177, 178, 179, 162, 195, 151, 151, 151, 163, 199, 179, 176, 177, 178, 179, 176, 161, 153, 24, 25, 38, 38, 36, 33, 33, 27, 24, 25, 26, 27, 24, 25, 155, 167, 165, 157, 26, 27, 24, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 29, 33, 31, 28, 144, 182, 183, 180, 181, 182, 166, 154, 32, 18, 19, 16, 159, 195, 163, 180, 181, 182, 183, 180, 181, 146, 28, 29, 37, 36, 39, 39, 33, 31, 28, 29, 30, 31, 28, 29, 30, 144, 176, 165, 149, 157, 28, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 34, 19, 16, 148, 186, 187, 184, 185, 186, 146, 20, 33, 34, 23, 20, 21, 35, 159, 151, 167, 186, 187, 184, 185, 161, 153, 17, 18, 19, 16, 17, 18, 19, 16, 17, 18, 19, 16, 17, 18, 159, 151, 167, 176, 150, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 23, 20, 21, 33, 35, 20, 148, 190, 191, 188, 189, 190, 150, 24, 41, 35, 27, 24, 46, 32, 27, 24, 148, 190, 191, 188, 189, 190, 161, 149, 153, 23, 20, 21, 22, 23, 20, 21, 22, 23, 20, 21, 22, 23, 20, 155, 147, 154, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 26, 27, 24, 25, 45, 35, 24, 159, 167, 179, 176, 177, 178, 150, 28, 29, 33, 31, 28, 33, 33, 31, 28, 144, 178, 179, 176, 177, 178, 179, 176, 161, 145, 153, 25, 26, 27, 24, 25, 26, 27, 24, 25, 26, 27, 24, 25, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 30, 31, 28, 29, 30, 31, 35, 29, 155, 163, 180, 181, 182, 146, 16, 17, 32, 19, 16, 34, 37, 37, 36, 192, 202, 198, 206, 196, 182, 183, 180, 181, 182, 161, 157, 30, 31, 28, 29, 30, 31, 28, 29, 30, 31, 0, 29, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19, 16, 17, 18, 32, 16, 17, 18, 148, 184, 185, 186, 150, 20, 21, 35, 23, 20, 32, 37, 38, 37, 192, 202, 204, 202, 196, 186, 187, 184, 185, 186, 187, 165, 193, 153, 16, 17, 18, 19, 16, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, 20, 21, 22, 34, 35, 21, 22, 155, 163, 189, 190, 165, 157, 25, 33, 33, 35, 32, 26, 156, 145, 160, 190, 191, 188, 189, 190, 191, 188, 189, 190, 191, 188, 197, 165, 153, 21, 22, 23, 20, 21, 22, 23, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 24, 25, 26, 27, 34, 47, 26, 27, 155, 163, 178, 179, 150, 29, 45, 35, 33, 29, 30, 159, 167, 177, 178, 179, 176, 177, 178, 179, 176, 177, 178, 179, 176, 177, 178, 165, 149, 153, 27, 24, 25, 26, 27, 24, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 28, 29, 30, 31, 28, 29, 30, 31, 33, 35, 30, 31, 28, 155, 163, 183, 165, 157, 18, 32, 32, 17, 18, 19, 144, 181, 182, 183, 180, 181, 182, 183, 180, 181, 182, 183, 180, 181, 182, 183, 180, 165, 153, 28, 29, 30, 31, 28, 29, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 16, 17, 18, 19, 16, 17, 18, 19, 34, 34, 18, 19, 16, 17, 159, 167, 176, 161, 153, 32, 32, 21, 22, 23, 144, 185, 186, 187, 184, 185, 186, 187, 184, 185, 186, 187, 184, 185, 186, 187, 184, 185, 165, 145, 153, 18, 19, 16, 17, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 23, 20, 21, 22, 23, 20, 21, 22, 23, 45, 34, 33, 23, 20, 21, 22, 159, 167, 176, 161, 149, 193, 145, 145, 149, 160, 189, 190, 191, 188, 189, 190, 191, 188, 189, 166, 147, 147, 151, 151, 147, 167, 189, 190, 191, 161, 153, 23, 20, 21, 22, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 24, 25, 26, 27, 24, 25, 26, 27, 24, 35, 33, 27, 24, 25, 26, 27, 155, 147, 163, 179, 199, 177, 178, 179, 176, 177, 178, 179, 176, 177, 178, 179, 176, 177, 146, 27, 24, 25, 26, 27, 155, 151, 163, 179, 176, 161, 145, 145, 157, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 28, 29, 30, 31, 28, 29, 30, 31, 28, 35, 32, 47, 28, 29, 30, 31, 28, 29, 159, 147, 195, 167, 182, 162, 147, 147, 163, 183, 180, 181, 182, 183, 180, 166, 154, 31, 28, 29, 30, 31, 28, 29, 155, 163, 180, 181, 182, 183, 165, 153, 31, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 18, 19, 16, 17, 18, 19, 16, 17, 35, 32, 47, 17, 18, 19, 16, 17, 18, 19, 34, 159, 167, 146, 16, 17, 155, 163, 184, 185, 186, 162, 147, 154, 18, 19, 16, 17, 18, 19, 16, 17, 18, 144, 184, 185, 186, 187, 184, 146, 19, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, 20, 21, 22, 23, 20, 21, 45, 35, 33, 21, 22, 23, 20, 21, 22, 23, 35, 21, 159, 158, 20, 21, 22, 159, 147, 147, 151, 158, 20, 21, 22, 23, 20, 21, 22, 23, 20, 21, 22, 159, 167, 189, 190, 191, 188, 165, 153, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 27, 24, 25, 26, 27, 24, 25, 26, 32, 35, 35, 26, 27, 24, 25, 26, 27, 32, 32, 26, 27, 24, 25, 26, 27, 24, 25, 30, 27, 24, 25, 26, 27, 24, 25, 26, 27, 24, 25, 26, 27, 159, 151, 167, 179, 176, 162, 158, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 28, 29, 30, 31, 28, 29, 30, 45, 34, 34, 34, 35, 32, 35, 30, 31, 45, 39, 39, 38, 36, 37, 39, 37, 28, 29, 30, 31, 28, 29, 30, 31, 28, 29, 30, 31, 28, 29, 30, 31, 28, 29, 144, 183, 180, 150, 31, 28, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 16, 17, 18, 19, 16, 17, 18, 19, 16, 39, 34, 35, 33, 34, 36, 37, 34, 37, 37, 38, 36, 38, 39, 36, 37, 39, 36, 39, 36, 17, 18, 19, 16, 17, 18, 19, 16, 17, 18, 19, 16, 17, 155, 163, 184, 161, 153, 16, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, 20, 21, 22, 23, 20, 39, 38, 33, 35, 34, 37, 38, 44, 45, 37, 23, 20, 21, 22, 23, 20, 36, 37, 39, 38, 39, 37, 36, 43, 21, 22, 23, 20, 21, 22, 23, 20, 21, 22, 144, 188, 189, 161, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 24, 25, 26, 27, 24, 36, 37, 34, 34, 38, 36, 36, 24, 25, 26, 27, 24, 25, 26, 27, 24, 25, 26, 27, 45, 38, 39, 38, 37, 36, 47, 27, 24, 25, 26, 27, 24, 25, 26, 144, 176, 177, 178, 150, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 28, 29, 30, 31, 28, 29, 30, 31, 28, 39, 39, 32, 35, 34, 37, 37, 28, 29, 30, 31, 28, 29, 30, 31, 28, 29, 30, 31, 28, 45, 36, 38, 38, 39, 38, 39, 36, 29, 30, 31, 28, 29, 30, 155, 163, 181, 182, 161, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 16, 17, 18, 19, 16, 17, 18, 19, 16, 17, 18, 34, 34, 35, 34, 19, 16, 17, 18, 19, 16, 17, 18, 19, 16, 17, 18, 19, 16, 17, 18, 19, 16, 17, 36, 39, 39, 43, 18, 19, 16, 17, 18, 19, 155, 167, 186, 187, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 20, 21, 22, 23, 20, 21, 22, 23, 20, 21, 22, 23, 20, 21, 22, 23, 20, 21, 22, 23, 20, 21, 22, 23, 20, 21, 22, 23, 20, 21, 22, 23, 20, 21, 22, 45, 33, 32, 43, 23, 20, 21, 22, 23, 20, 148, 190, 191, 150, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 24, 25, 26, 27, 24, 25, 26, 27, 24, 25, 26, 27, 24, 25, 26, 27, 24, 25, 26, 27, 24, 25, 26, 27, 24, 25, 26, 27, 24, 25, 26, 27, 34, 32, 33, 43, 24, 25, 26, 27, 24, 148, 178, 179, 165, 153, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 29, 30, 31, 28, 29, 30, 31, 28, 29, 30, 31, 28, 29, 30, 31, 28, 29, 30, 31, 28, 29, 30, 31, 28, 29, 30, 31, 0, 0, 30, 31, 28, 29, 30, 31, 45, 35, 32, 32, 28, 29, 30, 31, 28, 148, 182, 183, 166, 158, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 18, 19, 16, 17, 18, 19, 16, 17, 18, 19, 16, 17, 18, 19, 16, 17, 18, 19, 16, 17, 18, 19, 16, 17, 18, 19, 0, 0, 0, 19, 16, 17, 18, 19, 16, 32, 35, 34, 16, 17, 18, 19, 152, 160, 186, 187, 150, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 22, 23, 20, 21, 22, 23, 20, 21, 22, 23, 20, 21, 22, 23, 20, 21, 22, 23, 20, 21, 22, 23, 20, 21, 22, 0, 0, 0, 0, 0, 20, 21, 22, 23, 20, 34, 33, 44, 20, 21, 22, 152, 164, 189, 190, 191, 150, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 27, 24, 25, 26, 27, 24, 25, 26, 27, 24, 25, 26, 27, 24, 25, 26, 27, 24, 25, 26, 27, 24, 25, 26, 0, 0, 0, 0, 0, 0, 0, 26, 27, 24, 32, 35, 27, 24, 25, 26, 155, 163, 177, 178, 179, 161, 149, 153, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 29, 30, 31, 28, 29, 30, 31, 28, 29, 30, 31, 28, 29, 30, 31, 0, 0, 30, 31, 28, 29, 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, 28, 32, 32, 31, 28, 29, 30, 31, 148, 181, 182, 183, 166, 147, 158, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19, 16, 17, 18, 19, 16, 17, 18, 19, 16, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 19, 16, 32, 34, 19, 16, 17, 18, 19, 148, 185, 186, 187, 146, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 23, 20, 21, 22, 23, 20, 21, 0, 0, 0, 21, 22, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 23, 33, 35, 34, 23, 20, 21, 22, 156, 164, 189, 190, 191, 161, 157, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 27, 24, 25, 26, 27, 24, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 27, 32, 32, 35, 27, 24, 25, 26, 148, 176, 177, 178, 179, 162, 158, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 28, 29, 30, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 30, 31, 34, 32, 44, 31, 28, 29, 30, 148, 180, 181, 182, 183, 150, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 18, 19, 32, 34, 18, 19, 16, 17, 18, 148, 184, 185, 186, 162, 158, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, 35, 32, 22, 23, 156, 149, 149, 164, 188, 189, 166, 158, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 32, 33, 26, 156, 160, 177, 178, 179, 176, 177, 146, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 30, 31, 34, 34, 30, 148, 180, 181, 182, 183, 180, 181, 150, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 32, 33, 17, 18, 148, 184, 185, 186, 187, 184, 166, 154, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 35, 34, 21, 152, 160, 188, 189, 190, 191, 188, 150, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 26, 16, 16, 25, 148, 179, 176, 177, 178, 179, 176, 150, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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":64, + "name":"background", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":64, + "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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 53, 49, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 68, 0, 140, 69, 53, 53, 53, 53, 57, 0, 0, 0, 0, 52, 0, 0, 0, 0, 248, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 245, 142, 0, 140, 246, 124, 0, 123, 69, 57, 0, 0, 0, 48, 0, 250, 0, 0, 66, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 49, 53, 64, 124, 119, 126, 0, 0, 0, 0, 127, 125, 54, 0, 60, 53, 64, 0, 115, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 65, 53, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 64, 119, 0, 0, 0, 0, 0, 125, 0, 0, 0, 244, 114, 65, 49, 68, 125, 116, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 53, 53, 49, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 125, 0, 127, 127, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 70, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 69, 53, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 67, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 114, 0, 128, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 65, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 67, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 70, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 53, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 124, 127, 0, 0, 0, 115, 0, 124, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 125, 112, 65, 57, 0, 0, 0, 0, 0, 0, 0, 56, 68, 136, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 54, 0, 0, 0, 56, 53, 49, 53, 49, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 100, 65, 57, 0, 56, 230, 231, 53, 61, 52, 98, 101, 0, 0, 0, 115, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 52, 0, 0, 0, 0, 69, 53, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 124, 103, 96, 69, 49, 68, 0, 0, 0, 69, 64, 0, 124, 126, 127, 0, 0, 0, 0, 0, 0, 126, 0, 0, 122, 0, 0, 251, 0, 70, 62, 0, 0, 60, 64, 0, 252, 0, 124, 247, 117, 69, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 126, 0, 0, 0, 97, 126, 0, 0, 73, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 61, 0, 0, 48, 0, 115, 0, 127, 0, 0, 127, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 127, 124, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 126, 0, 0, 0, 99, 72, 0, 72, 0, 0, 127, 0, 0, 0, 0, 0, 0, 126, 0, 0, 106, 107, 110, 111, 106, 107, 65, 53, 49, 64, 0, 0, 121, 115, 0, 251, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 55, 67, 0, 0, 0, 0, 125, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 105, 113, 112, 113, 113, 113, 113, 113, 113, 113, 113, 105, 0, 0, 0, 0, 0, 0, 70, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 55, 51, 51, 71, 0, 0, 0, 0, 0, 0, 114, 0, 127, 0, 74, 75, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 116, 117, 116, 117, 116, 116, 117, 117, 116, 116, 104, 0, 0, 0, 0, 66, 51, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 126, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 75, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 114, 114, 115, 109, 0, 0, 253, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 71, 126, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 127, 0, 0, 0, 0, 125, 0, 0, 253, 0, 0, 0, 0, 0, 0, 109, 122, 123, 122, 123, 123, 0, 122, 122, 123, 122, 108, 130, 0, 113, 0, 65, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 67, 124, 0, 130, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 114, 0, 0, 108, 121, 120, 121, 120, 121, 0, 121, 121, 120, 120, 105, 246, 114, 0, 0, 121, 69, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 127, 0, 114, 114, 114, 114, 104, 125, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, 127, 0, 0, 113, 113, 113, 113, 105, 0, 0, 0, 0, 0, 0, 69, 49, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 106, 107, 127, 110, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 117, 116, 117, 116, 104, 0, 0, 0, 0, 0, 0, 242, 126, 69, 53, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 67, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 209, 0, 0, 0, 0, 0, 123, 122, 123, 123, 105, 0, 113, 124, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 121, 120, 121, 104, 0, 124, 0, 0, 0, 0, 0, 0, 0, 66, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 53, 53, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, 110, 111, 106, 107, 0, 0, 0, 115, 118, 124, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 126, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 66, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 136, 0, 124, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 96, 0, 0, 0, 0, 128, 114, 0, 120, 0, 121, 125, 0, 124, 0, 242, 0, 0, 70, 67, 0, 70, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 64, 0, 106, 107, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 125, 130, 0, 0, 0, 126, 127, 128, 54, 63, 55, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 98, 105, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 169, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 120, 0, 65, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 64, 124, 0, 0, 0, 104, 0, 0, 127, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 125, 0, 65, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 128, 0, 0, 0, 0, 211, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 240, 0, 0, 0, 126, 69, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 68, 0, 0, 0, 0, 0, 210, 0, 125, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 114, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 208, 209, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 117, 251, 0, 116, 69, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 67, 0, 0, 0, 0, 100, 101, 0, 125, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 124, 0, 127, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 113, 69, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 71, 0, 136, 125, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 245, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 127, 125, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252, 0, 127, 124, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 51, 71, 0, 0, 0, 0, 0, 127, 0, 0, 0, 124, 0, 0, 212, 213, 214, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 254, 0, 0, 0, 0, 0, 125, 0, 0, 129, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 127, 126, 0, 0, 124, 0, 0, 127, 0, 0, 0, 0, 112, 124, 65, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 125, 133, 0, 0, 0, 0, 0, 128, 0, 0, 0, 247, 124, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 71, 126, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 125, 0, 0, 0, 0, 0, 70, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 68, 0, 128, 113, 0, 0, 0, 0, 210, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 65, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 127, 0, 0, 0, 208, 209, 0, 0, 0, 0, 0, 0, 0, 74, 75, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 124, 0, 126, 0, 125, 0, 115, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 127, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 125, 0, 0, 135, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 112, 245, 0, 0, 244, 123, 0, 0, 126, 0, 0, 73, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 118, 127, 0, 249, 0, 127, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, 65, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 71, 0, 0, 245, 249, 136, 0, 0, 112, 0, 0, 72, 0, 0, 73, 125, 0, 124, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 129, 0, 0, 0, 0, 122, 0, 0, 96, 72, 0, 0, 127, 127, 125, 0, 0, 0, 125, 0, 0, 0, 0, 66, 55, 71, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 123, 127, 0, 130, 127, 0, 126, 0, 0, 0, 0, 0, 0, 125, 115, 0, 0, 0, 0, 254, 0, 0, 54, 0, 59, 71, 0, 244, 0, 0, 0, 0, 0, 0, 124, 124, 0, 0, 0, 0, 0, 0, 0, 120, 128, 69, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 67, 241, 0, 254, 0, 0, 127, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 122, 0, 124, 0, 117, 0, 0, 70, 62, 0, 0, 59, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 126, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 71, 0, 124, 0, 251, 0, 0, 0, 0, 0, 126, 0, 0, 125, 123, 136, 0, 0, 0, 0, 123, 123, 0, 0, 0, 54, 0, 0, 0, 0, 63, 51, 67, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 55, 67, 255, 0, 0, 0, 0, 0, 0, 0, 0, 240, 128, 125, 0, 126, 0, 70, 51, 67, 0, 0, 0, 70, 62, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 114, 125, 116, 65, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 67, 124, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 54, 0, 63, 55, 51, 55, 62, 0, 0, 0, 0, 0, 0, 0, 52, 123, 0, 0, 0, 0, 0, 0, 0, 130, 125, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 71, 0, 0, 0, 112, 0, 243, 0, 70, 51, 51, 67, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 252, 0, 0, 0, 0, 54, 0, 0, 63, 55, 55, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 64, 126, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 67, 246, 0, 0, 0, 66, 55, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 124, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 55, 51, 55, 51, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 64, 0, 0, 0, 0, 138, 0, 0, 0, 241, 0, 131, 0, 0, 0, 0, 126, 117, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 253, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 115, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 66, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 71, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 126, 112, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 68, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 115, 0, 0, 70, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 71, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 247, 125, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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":64, + "name":"object", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":64, + "x":0, + "y":0 + }, + { + "data":[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 2, 2, 2, 2, 2, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 4, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 0, 2, 2, 2, 2, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 4, 0, 4, 3, 0, 0, 0, 1, 1, 3, 3, 3, 1, 2, 2, 2, 2, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 1, 2, 2, 2, 2, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 3, 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 3, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 3, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 1, 1, 4, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 4, 1, 1, 3, 1, 0, 0, 1, 1, 1, 4, 4, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 1, 0, 0, 0, 0, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 4, 4, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 1, 1, 0, 3, 0, 0, 3, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 4, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 4, 0, 0, 0, 0, 0, 4, 2, 0, 2, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 0, 0, 0, 0, 0, 3, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 2, 2, 2, 0, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 2, 2, 2, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 2, 2, 2, 2, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 2, 2, 2, 2, 2, 0, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 4, 4, 0, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 2, 2, 2, 2, 3, 0, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 2, 2, 2, 2, 2, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 4, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 3, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 4, 4, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 1, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 4, 4, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 4, 0, 0, 0, 0, 0, 4, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 4, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 4, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 3, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 3, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 3, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 2, 2, 2, 2, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 2, 2, 2, 2, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 2, 2, 2, 2, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 4, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 3, 1, 1, 1, 0, 3, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 3, 0, 1, 1, 1, 1, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 3, 0, 0, 0, 0, 1, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 3, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 3, 0, 0, 0, 3, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 3, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 3, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 3, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 3, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3], + "height":64, + "name":"collision", + "opacity":1, + "type":"tilelayer", + "visible":false, + "width":64, + "x":0, + "y":0 + }, + { + "draworder":"topdown", + "name":"npc", + "objects":[ + { + "height":32, + "id":1, + "name":"Trader", + "properties": + { + "filename":"npcs\/kenrik.txt" + }, + "propertytypes": + { + "filename":"string" + }, + "rotation":0, + "type":"npc", + "visible":true, + "width":32, + "x":928, + "y":864 + }, + { + "height":32, + "id":2, + "name":"Alchemist", + "properties": + { + "filename":"npcs\/kayl.txt" + }, + "propertytypes": + { + "filename":"string" + }, + "rotation":0, + "type":"npc", + "visible":true, + "width":32, + "x":1312, + "y":576 + }, + { + "height":32, + "id":3, + "name":"Overseer", + "properties": + { + "filename":"npcs\/martigan.txt" + }, + "propertytypes": + { + "filename":"string" + }, + "rotation":0, + "type":"npc", + "visible":true, + "width":32, + "x":672, + "y":480 + }, + { + "height":32, + "id":4, + "name":"Blacksmith", + "properties": + { + "filename":"npcs\/lorund.txt" + }, + "propertytypes": + { + "filename":"string" + }, + "rotation":0, + "type":"npc", + "visible":true, + "width":32, + "x":736, + "y":1248 + }, + { + "height":32, + "id":5, + "name":"Bowyer", + "properties": + { + "filename":"npcs\/nerin.txt" + }, + "propertytypes": + { + "filename":"string" + }, + "rotation":0, + "type":"npc", + "visible":true, + "width":32, + "x":384, + "y":1120 + }, + { + "height":0, + "id":6, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":0, + "x":736, + "y":1280 + }], + "opacity":1, + "type":"objectgroup", + "visible":false, + "x":0, + "y":0 + }, + { + "draworder":"topdown", + "name":"event", + "objects":[ + { + "height":32, + "id":7, + "name":"to Mineshaft Longsword", + "properties": + { + "activate":"on_trigger", + "hotspot":"location", + "intermap":"maps\/mineshaft_longsword.txt,44,61", + "tooltip":"Mineshaft Longsword" + }, + "propertytypes": + { + "activate":"string", + "hotspot":"string", + "intermap":"string", + "tooltip":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":64, + "x":608, + "y":352 + }, + { + "height":64, + "id":9, + "name":"to Frontier Plains", + "properties": + { + "activate":"on_trigger", + "hotspot":"location", + "intermap":"maps\/frontier_plains.txt,248,186", + "tooltip":"Frontier Plains" + }, + "propertytypes": + { + "activate":"string", + "hotspot":"string", + "intermap":"string", + "tooltip":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":32, + "x":32, + "y":384 + }, + { + "height":32, + "id":10, + "name":"Shared stash", + "properties": + { + "activate":"on_trigger", + "hotspot":"location", + "soundfx":"soundfx\/wood_open.ogg", + "stash":"true", + "tooltip":"Shared Stash" + }, + "propertytypes": + { + "activate":"string", + "hotspot":"string", + "soundfx":"string", + "stash":"string", + "tooltip":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":32, + "x":704, + "y":896 + }, + { + "height":160, + "id":11, + "name":"Activate_Teleporter", + "properties": + { + "activate":"on_trigger", + "mapmod":"background,33,10,265", + "msg":"Frontier Outpost waypoint discovered.", + "repeat":"false", + "requires_not_status":"waypoint_frontier_outpost", + "set_status":"waypoint_frontier_outpost" + }, + "propertytypes": + { + "activate":"string", + "mapmod":"string", + "msg":"string", + "repeat":"string", + "requires_not_status":"string", + "set_status":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":160, + "x":1024, + "y":256 + }, + { + "height":32, + "id":12, + "name":"", + "properties": + { + "activate":"on_load", + "mapmod":"background,33,10,265", + "requires_status":"waypoint_frontier_outpost" + }, + "propertytypes": + { + "activate":"string", + "mapmod":"string", + "requires_status":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":32, + "x":1024, + "y":192 + }, + { + "height":64, + "id":13, + "name":"Warp Zone", + "properties": + { + "activate":"on_trigger", + "hotspot":"location", + "intermap":"maps\/warp_zone.txt,29,44", + "soundfx":"soundfx\/environment\/teleporter.ogg,0,0", + "tooltip":"Warp Zone" + }, + "propertytypes": + { + "activate":"string", + "hotspot":"string", + "intermap":"string", + "soundfx":"string", + "tooltip":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":64, + "x":1056, + "y":288 + }, + { + "height":32, + "id":14, + "name":"River sound", + "rotation":0, + "type":"", + "visible":true, + "width":32, + "x":160, + "y":320 + }, + { + "height":32, + "id":15, + "name":"River sound", + "properties": + { + "activate":"on_load", + "soundfx":"soundfx\/environment\/river_loop.ogg" + }, + "propertytypes": + { + "activate":"string", + "soundfx":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":32, + "x":160, + "y":320 + }, + { + "height":32, + "id":16, + "name":"River sound", + "properties": + { + "activate":"on_load", + "soundfx":"soundfx\/environment\/river_loop.ogg" + }, + "propertytypes": + { + "activate":"string", + "soundfx":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":32, + "x":832, + "y":1120 + }, + { + "height":32, + "id":17, + "name":"River sound", + "properties": + { + "activate":"on_load", + "soundfx":"soundfx\/environment\/river_loop.ogg" + }, + "propertytypes": + { + "activate":"string", + "soundfx":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":32, + "x":736, + "y":704 + }, + { + "height":32, + "id":18, + "name":"River sound", + "properties": + { + "activate":"on_load", + "soundfx":"soundfx\/environment\/river_loop.ogg" + }, + "propertytypes": + { + "activate":"string", + "soundfx":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":32, + "x":896, + "y":736 + }, + { + "height":32, + "id":19, + "name":"River sound", + "properties": + { + "activate":"on_load", + "soundfx":"soundfx\/environment\/river_loop.ogg" + }, + "propertytypes": + { + "activate":"string", + "soundfx":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":32, + "x":1024, + "y":576 + }, + { + "height":32, + "id":20, + "name":"River sound", + "properties": + { + "activate":"on_load", + "soundfx":"soundfx\/environment\/river_loop.ogg" + }, + "propertytypes": + { + "activate":"string", + "soundfx":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":32, + "x":1472, + "y":1056 + }, + { + "height":32, + "id":21, + "name":"River sound", + "properties": + { + "activate":"on_load", + "soundfx":"soundfx\/environment\/river_loop.ogg" + }, + "propertytypes": + { + "activate":"string", + "soundfx":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":32, + "x":1792, + "y":1440 + }, + { + "height":32, + "id":22, + "name":"River sound", + "properties": + { + "activate":"on_load", + "soundfx":"soundfx\/environment\/river_loop.ogg" + }, + "propertytypes": + { + "activate":"string", + "soundfx":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":32, + "x":1760, + "y":1760 + }, + { + "height":32, + "id":23, + "name":"River sound", + "properties": + { + "activate":"on_load", + "soundfx":"soundfx\/environment\/river_loop.ogg" + }, + "propertytypes": + { + "activate":"string", + "soundfx":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":32, + "x":1184, + "y":256 + }, + { + "height":32, + "id":24, + "name":"Forrest owl sound effect", + "properties": + { + "activate":"on_load", + "soundfx":"soundfx\/environment\/forest_owl_loop.ogg" + }, + "propertytypes": + { + "activate":"string", + "soundfx":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":32, + "x":640, + "y":800 + }, + { + "height":32, + "id":25, + "name":"Wind and crickets sound effect", + "properties": + { + "activate":"on_load", + "soundfx":"soundfx\/environment\/wind_loop.ogg" + }, + "propertytypes": + { + "activate":"string", + "soundfx":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":32, + "x":0, + "y":0 + }, + { + "height":32, + "id":26, + "name":"Anvil sound", + "properties": + { + "activate":"on_load", + "soundfx":"soundfx\/environment\/anvil_loop.ogg" + }, + "propertytypes": + { + "activate":"string", + "soundfx":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":32, + "x":736, + "y":1216 + }, + { + "height":32, + "id":27, + "name":"Bird twitter", + "properties": + { + "activate":"on_load", + "soundfx":"soundfx\/environment\/bird_twitter_loop.ogg" + }, + "propertytypes": + { + "activate":"string", + "soundfx":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":32, + "x":1600, + "y":384 + }, + { + "height":32, + "id":28, + "name":"Raven sound effect", + "properties": + { + "activate":"on_load", + "soundfx":"soundfx\/environment\/raven_loop.ogg" + }, + "propertytypes": + { + "activate":"string", + "soundfx":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":32, + "x":1536, + "y":1216 + }, + { + "height":32, + "id":29, + "name":"Raven sound effect", + "properties": + { + "activate":"on_load", + "soundfx":"soundfx\/environment\/raven_loop.ogg" + }, + "propertytypes": + { + "activate":"string", + "soundfx":"string" + }, + "rotation":0, + "type":"event", + "visible":true, + "width":32, + "x":352, + "y":1376 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }], + "nextobjectid":30, + "orientation":"isometric", + "properties": + { + "hero_pos":"46,57", + "music":"music\/unrest_theme.ogg", + "tileset":"tilesetdefs\/tileset_grassland.txt", + "title":"Frontier Outpost" + }, + "propertytypes": + { + "hero_pos":"string", + "music":"string", + "tileset":"string", + "title":"string" + }, + "renderorder":"right-down", + "tiledversion":"1.1.1", + "tileheight":32, + "tilesets":[ + { + "columns":15, + "firstgid":1, + "image":"..\/grassland\/tiled_collision.png", + "imageheight":32, + "imagewidth":960, + "margin":0, + "name":"collision", + "spacing":0, + "tilecount":15, + "tileheight":32, + "tilewidth":64 + }, + { + "columns":16, + "firstgid":16, + "image":"..\/grassland\/grassland.png", + "imageheight":1024, + "imagewidth":1024, + "margin":0, + "name":"grassland", + "spacing":0, + "tilecount":128, + "tileheight":128, + "tilewidth":64 + }, + { + "columns":16, + "firstgid":144, + "image":"..\/grassland\/grassland_water.png", + "imageheight":256, + "imagewidth":1024, + "margin":0, + "name":"water", + "spacing":0, + "tilecount":64, + "tileheight":64, + "tileoffset": + { + "x":0, + "y":32 + }, + "tilewidth":64 + }, + { + "columns":16, + "firstgid":208, + "image":"..\/grassland\/grassland_structures.png", + "imageheight":512, + "imagewidth":1024, + "margin":0, + "name":"tall structures", + "spacing":0, + "tilecount":32, + "tileheight":256, + "tilewidth":64 + }, + { + "columns":8, + "firstgid":240, + "image":"..\/grassland\/grassland_trees.png", + "imageheight":512, + "imagewidth":1024, + "margin":0, + "name":"trees", + "spacing":0, + "tilecount":16, + "tileheight":256, + "tileoffset": + { + "x":-32, + "y":0 + }, + "tilewidth":128 + }, + { + "columns":2, + "firstgid":256, + "image":"..\/grassland\/set_rules.png", + "imageheight":128, + "imagewidth":128, + "margin":0, + "name":"set_rules", + "spacing":0, + "tilecount":8, + "tileheight":32, + "tilewidth":64 + }, + { + "columns":4, + "firstgid":264, + "image":"..\/grassland\/tiled_grassland_2x2.png", + "imageheight":512, + "imagewidth":512, + "margin":0, + "name":"tiled_grassland_2x2", + "spacing":0, + "tilecount":32, + "tileheight":64, + "tileoffset": + { + "x":0, + "y":16 + }, + "tilewidth":128 + }], + "tilewidth":64, + "type":"map", + "version":1, + "width":64 +} \ No newline at end of file diff --git a/gamefilesflare/level/town/items.json b/gamefilesflare/level/town/items.json new file mode 100755 index 00000000..308f282a --- /dev/null +++ b/gamefilesflare/level/town/items.json @@ -0,0 +1,121 @@ +{ + "item": [ + { + "class": "shortSword", + "properties": { + "requiredStrength": 5, + "strength": 5, + "toDamage": 120, + "identified": false, + "magical": true + }, + "mapPosition": [42, 43] + }, + { + "class": "smallShield", + "mapPosition": [43, 43] + }, + { + "class": "ring", + "mapPosition": [44, 43], + "properties": { + "strength": 5 + } + }, + { + "class": "potionOfMana", + "mapPosition": [45, 43] + }, + { + "class": "potionOfRejuvenation", + "mapPosition": [42, 40] + }, + { + "class": "potionOfFullRejuvenation", + "mapPosition": [43, 40] + }, + { + "class": "potionOfMana", + "mapPosition": [44, 40] + }, + { + "class": "spectralElixir", + "mapPosition": [42, 41] + }, + { + "class": "amulet", + "mapPosition": [46, 43], + "properties": { + "resistAll": 10 + } + }, + { + "class": "gothicPlate", + "mapPosition": [47, 43] + }, + { + "class": "cap", + "mapPosition": [48, 43], + "properties": { + "durability": 12 + } + }, + { + "class": "leatherArmor", + "mapPosition": [49, 43] + }, + { + "class": "valorArmor", + "mapPosition": [43, 44] + }, + { + "class": "largeAxe", + "properties": { + "toDamage": 120, + "identified": false, + "magical": true + }, + "mapPosition": [44, 44] + }, + { + "class": "book", + "mapPosition": [45, 44] + }, + { + "class": "club", + "mapPosition": [46, 44] + }, + { + "class": "compositeBow", + "mapPosition": [47, 44] + }, + { + "class": "potionOfFullHealing", + "mapPosition": [48, 44] + }, + { + "class": "potionOfFullMana", + "mapPosition": [49, 44] + }, + { + "class": "scroll", + "mapPosition": [50, 44] + }, + { + "class": "shortStaff", + "mapPosition": [45, 45], + "properties": { + "price": 120, + "charges": 12, + "chargesMax": 35 + } + }, + { + "class": "gold", + "mapPosition": [46, 45], + "properties": { + "gold": 4800 + } + } + ] +} \ No newline at end of file diff --git a/gamefilesflare/level/town/level.json b/gamefilesflare/level/town/level.json new file mode 100755 index 00000000..845894ff --- /dev/null +++ b/gamefilesflare/level/town/level.json @@ -0,0 +1,305 @@ +{ + "texturePack": { + "id": "levelBack", + "texture": [ + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [0, 0, 1024, 64], + "frames": [16, 2], + "startIndex": 16, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [0, 64, 1024, 96], + "frames": [16, 1], + "startIndex": 48, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [0, 160, 768, 96], + "frames": [12, 1], + "startIndex": 64, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [768, 160, 128, 64], + "frames": [2, 1], + "startIndex": 76, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [768, 224, 256, 32], + "frames": [4, 1], + "startIndex": 92, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [0, 256, 1024, 128], + "frames": [16, 2], + "startIndex": 96, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [0, 384, 1024, 96], + "frames": [16, 1], + "startIndex": 128, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [0, 480, 1024, 128], + "frames": [16, 2], + "offset": [0, 32], + "startIndex": 144, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [0, 608, 1024, 32], + "frames": [16, 1], + "offset": [0, 32], + "startIndex": 176, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [0, 640, 1024, 64], + "frames": [16, 1], + "offset": [0, 32], + "startIndex": 192, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [0, 704, 512, 160], + "frames": [8, 1], + "startIndex": 208, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [512, 752, 32, 160], + "frames": [1, 1], + "startIndex": 216, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [544, 736, 32, 192], + "frames": [1, 1], + "startIndex": 217, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [576, 736, 32, 208], + "frames": [1, 1], + "startIndex": 218, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [608, 752, 64, 192], + "frames": [1, 1], + "offset": [0, -16], + "startIndex": 219, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [672, 784, 32, 160], + "frames": [1, 1], + "offset": [32, 0], + "startIndex": 220, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [704, 832, 32, 96], + "frames": [1, 1], + "offset": [32, 0], + "startIndex": 221, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [736, 832, 32, 80], + "frames": [1, 1], + "offset": [32, 0], + "startIndex": 222, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [0, 864, 64, 128], + "frames": [1, 1], + "startIndex": 224, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [64, 864, 32, 112], + "frames": [1, 1], + "offset": [32, 0], + "startIndex": 225, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [96, 864, 32, 112], + "frames": [1, 1], + "startIndex": 226, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [128, 864, 128, 128], + "frames": [2, 1], + "startIndex": 227, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [256, 864, 32, 112], + "frames": [1, 1], + "offset": [32, 0], + "startIndex": 229, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [288, 864, 32, 112], + "frames": [1, 1], + "startIndex": 230, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [320, 864, 64, 128], + "frames": [1, 1], + "startIndex": 231, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [768, 752, 32, 32], + "frames": [1, 1], + "startIndex": 232, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [800, 736, 32, 64], + "frames": [1, 1], + "startIndex": 233, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [832, 720, 32, 96], + "frames": [1, 1], + "startIndex": 234, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [864, 704, 64, 128], + "frames": [1, 1], + "startIndex": 235, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [928, 720, 32, 96], + "frames": [1, 1], + "startIndex": 236, + "offset": [32, 0], + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [960, 736, 32, 64], + "frames": [1, 1], + "startIndex": 237, + "offset": [32, 0], + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [992, 752, 32, 32], + "frames": [1, 1], + "offset": [32, 0], + "startIndex": 238, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [0, 992, 512, 128], + "frames": [4, 1], + "offset": [-32, 0], + "startIndex": 240, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [512, 960, 512, 224], + "frames": [4, 1], + "offset": [-32, 0], + "startIndex": 244, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [0, 1120, 512, 224], + "frames": [4, 1], + "offset": [-32, 0], + "startIndex": 248, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [512, 1184, 512, 160], + "frames": [4, 1], + "offset": [-32, 0], + "startIndex": 252, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [0, 1344, 256, 64], + "frames": [2, 1], + "offset": [0, 16], + "startIndex": 264, + "direction": "horizontal" + }, + { + "file": "images/tilesets/tileset_grassland.png", + "trim": [704, 1344, 320, 352], + "frames": [1, 1], + "offset": [0, 48], + "startIndex": 296, + "direction": "horizontal" + } + ] + }, + "level": { + "id": "level", + "name": "Town Center", + "texturePackBottom": "levelBack", + "texturePackTop": "levelBack", + "map": { + "file": "level/town/frontier_outpost.json", + "back": "background", + "front": "object", + "sol": "collision" + } + }, + "load": "level/town/levelObjects.json", + "load": "level/town/items.json" +} \ No newline at end of file diff --git a/gamefilesflare/level/town/levelObjects.json b/gamefilesflare/level/town/levelObjects.json new file mode 100755 index 00000000..56247c23 --- /dev/null +++ b/gamefilesflare/level/town/levelObjects.json @@ -0,0 +1,10 @@ +{ + "levelObject": { + "id": "l1", + "name": "Down to dungeon", + "mapPosition": [19, 11], + "texture": "empty", + "textureRect": [32, 32], + "action": { "name": "load", "file": ["level/l1/load.json", "positionPlayer", "[43, 62]"] } + } +} \ No newline at end of file diff --git a/gamefilesflare/level/town/music.json b/gamefilesflare/level/town/music.json new file mode 100755 index 00000000..189f6986 --- /dev/null +++ b/gamefilesflare/level/town/music.json @@ -0,0 +1,8 @@ +{ + "audio": { + "id": "main", + "file": "music/unrest_theme.ogg", + "loop": true, + "play": true + } +} \ No newline at end of file diff --git a/gamefilesflare/main.json b/gamefilesflare/main.json new file mode 100755 index 00000000..60c6b919 --- /dev/null +++ b/gamefilesflare/main.json @@ -0,0 +1,24 @@ +{ + "title" : "Diablo Flare", + "version": "0.1", + "saveDir": ".diabloflare", + "refWindowSize": [640, 480], + "minWindowSize": [640, 480], + "windowSize": [800, 600], + "keepAR": true, + "stretchToFit": true, + "smoothScreen": true, + "load": "settings.json", + "init": true, + "mountFile": [ + { "file": "gamefilesd" }, + { "file": "fantasycore.zip" } + ], + "action": { + "name": "if.equal", + "param1": { "name": "file.exists", "file": "images/logo/icon.png" }, + "param2": true, + "then": { "name": "load", "file": "ui/loadMain.json" }, + "else": { "name": "load", "file": ["ui/dataMissing.json", "fantasycore"] } + } +} \ No newline at end of file diff --git a/gamefilesflare/res/fonts.json b/gamefilesflare/res/fonts.json new file mode 100755 index 00000000..08ad35d4 --- /dev/null +++ b/gamefilesflare/res/fonts.json @@ -0,0 +1,36 @@ +{ + "font": [ + { + "id": "font16g", + "file": "fonts/LiberationSans-Bold.ttf" + }, + { + "id": "font16s", + "fromId": "font16g" + }, + { + "id": "font24g", + "fromId": "font16g" + }, + { + "id": "font24s", + "fromId": "font16g" + }, + { + "id": "font30g", + "fromId": "font16g" + }, + { + "id": "font30s", + "fromId": "font16g" + }, + { + "id": "font42g", + "fromId": "font16g" + }, + { + "id": "font42y", + "fromId": "font16g" + } + ] +} \ No newline at end of file diff --git a/gamefilesflare/res/level/actions/playerTexture.json b/gamefilesflare/res/level/actions/playerTexture.json new file mode 100755 index 00000000..2abdcf11 --- /dev/null +++ b/gamefilesflare/res/level/actions/playerTexture.json @@ -0,0 +1,7 @@ +{ + "action": { + "name": "action.set", + "id": "updatePlayerTexture", + "action": null + } +} \ No newline at end of file diff --git a/gamefilesflare/res/level/actions/playerUpdate.json b/gamefilesflare/res/level/actions/playerUpdate.json new file mode 100755 index 00000000..6facf64d --- /dev/null +++ b/gamefilesflare/res/level/actions/playerUpdate.json @@ -0,0 +1,63 @@ +{ + "action": [ + { + "name": "action.set", + "id": "updateLifeManaOrbs", + "action": [ + { + "name": "<=", + "param1": "|currentLevel|currentPlayer.life|", + "param2": 0, + "then": { + "name": "drawable.resizeX", + "id": "lifeOrbFull", + "size": 1, + "inputRangeMax": 1, + "range": [0, 106] + }, + "else": { + "name": "drawable.resizeX", + "id": "lifeOrbFull", + "size": "|currentLevel|currentPlayer.lifeNow|", + "inputRangeMax": "|currentLevel|currentPlayer.life|", + "range": [0, 106] + } + }, + { + "name": "<=", + "param1": "|currentLevel|currentPlayer.mana|", + "param2": 0, + "then": { + "name": "drawable.resizeX", + "id": "manaOrbFull", + "size": 1, + "inputRangeMax": 1, + "range": [0, 106] + }, + "else": { + "name": "drawable.resizeX", + "id": "manaOrbFull", + "size": "|currentLevel|currentPlayer.manaNow|", + "inputRangeMax": "|currentLevel|currentPlayer.mana|", + "range": [0, 106] + } + } + ] + }, + { + "name": "action.set", + "id": "updateAllPlayerStats", + "action": [ + "updateLifeManaOrbs", + "updateBeltItems", + { + "name": "if.equal", + "param1": "|game|hasResource.charPanelInventory|", + "param2": true, + "then": ["updateStashItems", "updateBodyItems"] + }, + "updateCharLabels" + ] + } + ] +} \ No newline at end of file diff --git a/gamefilesflare/res/level/fonts.json b/gamefilesflare/res/level/fonts.json new file mode 100755 index 00000000..8843a2d4 --- /dev/null +++ b/gamefilesflare/res/level/fonts.json @@ -0,0 +1,16 @@ +{ + "font": [ + { + "id": "smaltext", + "fromId": "font16g" + }, + { + "id": "medtexts", + "fromId": "font16g" + }, + { + "id": "bigtgold", + "fromId": "font16g" + } + ] +} \ No newline at end of file diff --git a/gamefilesflare/res/level/textures.json b/gamefilesflare/res/level/textures.json new file mode 100755 index 00000000..f6867d8c --- /dev/null +++ b/gamefilesflare/res/level/textures.json @@ -0,0 +1,60 @@ +{ + "texture": [ + { + "id": "bar_hp", + "file": "images/menus/bar_hp.png" + }, + { + "id": "bar_hp_background", + "file": "images/menus/bar_hp_background.png" + }, + { + "id": "bar_mp", + "file": "images/menus/bar_mp.png" + }, + { + "id": "bar_mp_background", + "file": "images/menus/bar_mp_background.png" + }, + { + "id": "character", + "file": "images/menus/character.png" + }, + { + "id": "config", + "file": "images/menus/config.png" + }, + { + "id": "inventory", + "file": "images/menus/inventory.png" + }, + { + "id": "log", + "file": "images/menus/log.png" + }, + { + "id": "powers", + "file": "images/menus/powers.png" + }, + { + "id": "red", + "color": "0xFF000022", + "size": [1, 1] + }, + { + "id": "grey", + "color": "0x4C4A48", + "size": [1, 1] + }, + { + "id": "tab_active", + "file": "images/menus/tab_active.png" + } + ], + "texturePack": { + "id": "pentspn2", + "texture": "pentspn2", + "frames": 8 + }, + "load": "res/level/textures2.json" +} \ No newline at end of file diff --git a/gamefilesflare/res/sounds.json b/gamefilesflare/res/sounds.json new file mode 100755 index 00000000..f6aafae7 --- /dev/null +++ b/gamefilesflare/res/sounds.json @@ -0,0 +1,20 @@ +{ + "sound": [ + { + "id": "door_open", + "file": "soundfx/door_open.ogg" + }, + { + "id": "inventory_wood", + "file": "soundfx/inventory/inventory_wood.ogg" + }, + { + "id": "titlslct", + "fromId": "door_open" + }, + { + "id": "titlemov", + "fromId": "inventory_wood" + } + ] +} \ No newline at end of file diff --git a/gamefilesflare/ui/credits.json b/gamefilesflare/ui/credits.json new file mode 100755 index 00000000..37b30593 --- /dev/null +++ b/gamefilesflare/ui/credits.json @@ -0,0 +1,90 @@ +{ + "action": { + "name": "resource.add", + "id": "credits", + "ignorePrevious": true + }, + "cursor": null, + "keyboard": { + "key": ["enter", "esc", " "], + "action": { "name": "button.click", "id": "back" } + }, + "texture": [ + { + "id": "credits1", + "file":"images/menus/credits_alpha_demo.png" + }, + { + "id": "credits2", + "file":"images/menus/credits_fantasycore.png" + } + ], + "image": [ + { + "id": "credits1", + "texture": "credits1", + "position": [192, 140], + "anchor": "none" + }, + { + "id": "credits2", + "texture": "credits2", + "position": [224, 30], + "anchor": "top" + } + ], + "button": { + "id": "back", + "texture": "empty", + "textureRect": [640, 480], + "resizable": true, + "anchor": "all", + "onClick": { + "name": "game.fadeOut", + "action": [ + { + "name": "resource.pop", + "ignorePrevious": false + }, + { + "name": "cursor.pop" + }, + { + "name": "game.fadeIn" + } + ] + } + }, + "font": { + "id": "liberationSerif", + "file": "res/LiberationSerif-Regular.ttf" + }, + "scrollableText": { + "id": "creditsText", + "font": "liberationSerif", + "fontSize": 16, + "refresh": 50, + "file": "ui/credits.txt", + "anchor": "none", + "position": [30, 115], + "size": [580, 250], + "onComplete": { + "name": "game.fadeOut", + "action": [ + { + "name": "resource.pop", + "ignorePrevious": false + }, + { + "name": "cursor.pop" + }, + { + "name": "game.fadeIn" + } + ] + } + }, + "action": { + "name": "game.fadeIn" + } +} \ No newline at end of file diff --git a/gamefilesflare/ui/credits.txt b/gamefilesflare/ui/credits.txt new file mode 100755 index 00000000..88f2c531 --- /dev/null +++ b/gamefilesflare/ui/credits.txt @@ -0,0 +1,67 @@ +Flare Engine Credits + +Lead Programmers - Clint Bellanger, Henrik Andersson, Igor Paliychuk, +Justin Jacobs, Stefan Beller, and Thane Brimhall + +Programmers - Anton Golov, Artur Rojek, blazindragon, Bonbadil, +Chris Oelmueller, David Bariod, Daniel Santos, Gallaecio, Joseph Bleu, +Juan PabloTamayo, Kitano, Kyle Belanger, LongerDev, +Manuel A. Fernandez Montecelo, Matthew Krohn, Nojan, Pavel Kirpichyov, +runtime-x86, and Ryan Dansie + +Default Art - Clint Bellanger + +Translators - Adrian Chaves Fernandez, Andrea Ranaldi, Andreas Berheim Brudin, +Bas Doodeman, Bonbadil, Carlos Sanchez, Chris Oelmueller, +Christoph J. Thompson, Evgen Pavlov, Giovanni Dalla Torre, gunchleoc, +Hans Joachim Desserud, Igor Paliychuk, Juan Pablo Tamayo, losine, +Michael Papageorgiou, Mikhail Karalevich, Miro Jánošík, Morgan Strauss, +Nikita Vanku, Paul Wortmann, Pawel Puszczynski, Quentin Stievenart, +Sergey Basalaev, Stefan Beller, Thomas Glamsch, Timo Sievänen, Wuzzy2, +and Yannis Anthymidis + +Distributors - Ablu, Feillyne, Jan-Hendrik Peters, +Manuel A. Fernandez Montecelo, miffe + +Special Thanks - Bart Kelsey and the community at OpenGameArt, +for giving constant feedback and testing. +Thorbjørn Lindeijer, Stefan Beller, and Ranie Jade Ramiso for +Tiled and the Flare map exporter. + + + +Flare Game Credits - fantasycore + +Lead Visual Artists - Clint Bellanger and Justin Nichol + +Visual Artists - Blarumyrran, Jessica Cox, Sarah Benalene, Scrittl, +and Stefan Beller + +Composers - Brandon Morris and remaxim + +Foley Artist - Brandon Morris + +Voice Actors - Brandon Morris and Holly Daniel + +Translators - Adrian Chaves Fernandez, Andrea Ranaldi, +Andreas Berheim Brudin, Bas Doodeman, Bonbadil, Carlos Sanchez, +Chris Oelmueller, Christoph J. Thompson, Evgen Pavlov, Giovanni Dalla Torre, +Hans Joachim Desserud, Igor Paliychuk, Juan Pablo Tamayo, Mikhail Karalevich, +Miro Jánošík, Morgan Strauss, Nikita Vanku, Paul Wortmann, Pawel Puszczynski, +Quentin Stievenart, Sergey Basalaev, Stefan Beller, Thomas Glamsch, +Timo Sievänen, and Yannis Anthymidis + + + +Flare Game Credits - alpha_demo + +Content Designers - Clint Bellanger, Justin Jacobs, Stefan Beller, +and Thane Brimhall + +Translators - Adrian Chaves Fernandez, Andrea Ranaldi, +Andreas Berheim Brudin, Bas Doodeman, Bonbadil, Carlos Sanchez, +Chris Oelmueller, Christoph J. Thompson, Evgen Pavlov, Giovanni Dalla Torre, +Hans Joachim Desserud, Igor Paliychuk, Juan Pablo Tamayo, Mikhail Karalevich, +Miro Jánošík, Morgan Strauss, Nikita Vanku, Paul Wortmann, Pawel Puszczynski, +Quentin Stievenart, Sergey Basalaev, Stefan Beller, Thomas Glamsch, +Timo Sievänen, and Yannis Anthymidis diff --git a/gamefilesflare/ui/dataMissing.json b/gamefilesflare/ui/dataMissing.json new file mode 100755 index 00000000..e80046d3 --- /dev/null +++ b/gamefilesflare/ui/dataMissing.json @@ -0,0 +1,22 @@ +{ + "keyboard": { + "key": ["enter", " ", "esc"], + "action": { "name": "game.close" } + }, + "font": { + "id": "liberationSerif", + "file": "res/LiberationSerif-Regular.ttf" + }, + "button": { + "id": "quit", + "font": "liberationSerif", + "fontSize": 28, + "color": "0xFFFFFF", + "position": [320, 240], + "anchor": "none", + "horizontalAlign": "center", + "verticalAlign": "center", + "text": "Error loading {1}\nMake sure Flare game data is present.", + "onClick": "game.close" + } +} \ No newline at end of file diff --git a/gamefilesflare/ui/level/char/beltInventory.json b/gamefilesflare/ui/level/char/beltInventory.json new file mode 100755 index 00000000..5af3259f --- /dev/null +++ b/gamefilesflare/ui/level/char/beltInventory.json @@ -0,0 +1,240 @@ +{ + "button": [ + { + "id": "playerBelt1", + "texture": "red", + "textureRect": [32, 32], + "anchor": "bottom", + "position": [193, 357], + "onClick": "updateBelt1Click", + "onRightClick": "useBelt1Item", + "onHoverEnter": "updateBelt1Text", + "onHoverLeave": "hoverBelt1Leave" + }, + { + "id": "playerBelt2", + "texture": "red", + "textureRect": [32, 32], + "anchor": "bottom", + "position": [225, 357], + "onClick": "updateBelt2Click", + "onRightClick": "useBelt2Item", + "onHoverEnter": "updateBelt2Text", + "onHoverLeave": "hoverBelt2Leave" + }, + { + "id": "playerBelt3", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "bottom", + "position": [257, 357], + "onClick": "updateBelt3Click", + "onRightClick": "useBelt3Item", + "onHoverEnter": "updateBelt3Text", + "onHoverLeave": "hoverBelt3Leave" + }, + { + "id": "playerBelt4", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "bottom", + "position": [289, 357], + "onClick": "updateBelt4Click", + "onRightClick": "useBelt4Item", + "onHoverEnter": "updateBelt4Text", + "onHoverLeave": "hoverBelt4Leave" + }, + { + "id": "playerBelt5", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "bottom", + "position": [321, 357], + "onClick": "updateBelt5Click", + "onRightClick": "useBelt5Item", + "onHoverEnter": "updateBelt5Text", + "onHoverLeave": "hoverBelt5Leave" + }, + { + "id": "playerBelt6", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "bottom", + "position": [353, 357], + "onClick": "updateBelt6Click", + "onRightClick": "useBelt6Item", + "onHoverEnter": "updateBelt6Text", + "onHoverLeave": "hoverBelt6Leave" + }, + { + "id": "playerBelt7", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "bottom", + "position": [385, 357], + "onClick": "updateBelt7Click", + "onRightClick": "useBelt7Item", + "onHoverEnter": "updateBelt7Text", + "onHoverLeave": "hoverBelt7Leave" + }, + { + "id": "playerBelt8", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "bottom", + "position": [417, 357], + "onClick": "updateBelt8Click", + "onRightClick": "useBelt8Item", + "onHoverEnter": "updateBelt8Text", + "onHoverLeave": "hoverBelt8Leave" + } + ], + "image": [ + { + "id": "imgBelt1", + "replaceVars": true, + "texture": "empty", + "textureRect": [32, 32], + "outline": "%outlineItemInv%", + "outlineIgnore": "0x000000", + "anchor": "bottom", + "position": [193, 357] + }, + { + "id": "imgBelt2", + "replaceVars": true, + "texture": "empty", + "textureRect": [32, 32], + "outline": "%outlineItemInv%", + "outlineIgnore": "0x000000", + "anchor": "bottom", + "position": [225, 357] + }, + { + "id": "imgBelt3", + "replaceVars": true, + "texture": "empty", + "textureRect": [32, 32], + "outline": "%outlineItemInv%", + "outlineIgnore": "0x000000", + "anchor": "bottom", + "position": [257, 357] + }, + { + "id": "imgBelt4", + "replaceVars": true, + "texture": "empty", + "textureRect": [32, 32], + "outline": "%outlineItemInv%", + "outlineIgnore": "0x000000", + "anchor": "bottom", + "position": [289, 357] + }, + { + "id": "imgBelt5", + "replaceVars": true, + "texture": "empty", + "textureRect": [32, 32], + "outline": "%outlineItemInv%", + "outlineIgnore": "0x000000", + "anchor": "bottom", + "position": [321, 357] + }, + { + "id": "imgBelt6", + "replaceVars": true, + "texture": "empty", + "textureRect": [32, 32], + "outline": "%outlineItemInv%", + "outlineIgnore": "0x000000", + "anchor": "bottom", + "position": [353, 357] + }, + { + "id": "imgBelt7", + "replaceVars": true, + "texture": "empty", + "textureRect": [32, 32], + "outline": "%outlineItemInv%", + "outlineIgnore": "0x000000", + "anchor": "bottom", + "position": [385, 357] + }, + { + "id": "imgBelt8", + "replaceVars": true, + "texture": "empty", + "textureRect": [32, 32], + "outline": "%outlineItemInv%", + "outlineIgnore": "0x000000", + "anchor": "bottom", + "position": [417, 357] + } + ], + "text": [ + { + "id": "txtBelt1", + "font": "smaltext", + "anchor": "bottom", + "position": [216, 374], + "visible": false, + "text": "1" + }, + { + "id": "txtBelt2", + "font": "smaltext", + "anchor": "bottom", + "position": [248, 374], + "visible": false, + "text": "2" + }, + { + "id": "txtBelt3", + "font": "smaltext", + "anchor": "bottom", + "position": [280, 374], + "visible": false, + "text": "3" + }, + { + "id": "txtBelt4", + "font": "smaltext", + "anchor": "bottom", + "position": [312, 374], + "visible": false, + "text": "4" + }, + { + "id": "txtBelt5", + "font": "smaltext", + "anchor": "bottom", + "position": [344, 374], + "visible": false, + "text": "5" + }, + { + "id": "txtBelt6", + "font": "smaltext", + "anchor": "bottom", + "position": [376, 374], + "visible": false, + "text": "6" + }, + { + "id": "txtBelt7", + "font": "smaltext", + "anchor": "bottom", + "position": [408, 374], + "visible": false, + "text": "7" + }, + { + "id": "txtBelt8", + "font": "smaltext", + "anchor": "bottom", + "position": [440, 374], + "visible": false, + "text": "8" + } + ] +} \ No newline at end of file diff --git a/gamefilesflare/ui/level/char/panel.json b/gamefilesflare/ui/level/char/panel.json new file mode 100755 index 00000000..fb900815 --- /dev/null +++ b/gamefilesflare/ui/level/char/panel.json @@ -0,0 +1,675 @@ +{ + "action": [ + { + "name": "action.set", + "id": "menu.saveAndCloseAction", + "action": [ + { "name": "load", "file": "ui/level/saveSettings.json" }, + { "name": "resource.popAll", "id": "gameMenuCommon" }, + { "name": "resource.ignore", "id": "level", "ignore": "none" }, + { "name": "level.pause", "pause": false } + ] + }, + { + "name": "action.set", + "id": "showCharPanel", + "action": [ + { "name": "drawable.visible", "id": "charPanel", "visible": true }, + { "name": "drawable.visible", "id": "charPanel2", "visible": true } + ] + }, + { + "name": "action.set", + "id": "hideCharPanel", + "action": [ + { "name": "drawable.visible", "id": "charPanel", "visible": false }, + { "name": "drawable.visible", "id": "charPanel2", "visible": false } + ] + }, + { + "name": "action.set", + "id": "showQuestPanel", + "action": [ + { "name": "drawable.visible", "id": "questPanel", "visible": true }, + { "name": "drawable.visible", "id": "questPanel2", "visible": true }, + { "name": "drawable.visible", "id": "questPanel3", "visible": true }, + { "name": "drawable.visible", "id": "questPanel4", "visible": true } + ] + }, + { + "name": "action.set", + "id": "hideQuestPanel", + "action": [ + { "name": "drawable.visible", "id": "questPanel", "visible": false }, + { "name": "drawable.visible", "id": "questPanel2", "visible": false }, + { "name": "drawable.visible", "id": "questPanel3", "visible": false }, + { "name": "drawable.visible", "id": "questPanel4", "visible": false } + ] + }, + { + "name": "action.set", + "id": "showInvPanel", + "action": [ + { "name": "drawable.visible", "id": "invPanel", "visible": true }, + { "name": "drawable.visible", "id": "invPanel2", "visible": true }, + { "name": "drawable.visible", "id": "invPanel3", "visible": true } + ] + }, + { + "name": "action.set", + "id": "hideInvPanel", + "action": [ + { "name": "drawable.visible", "id": "invPanel", "visible": false }, + { "name": "drawable.visible", "id": "invPanel2", "visible": false }, + { "name": "drawable.visible", "id": "invPanel3", "visible": false } + ] + }, + { + "name": "action.set", + "id": "showSpellPanel", + "action": [ + { "name": "drawable.visible", "id": "spellPanel", "visible": true }, + { "name": "drawable.visible", "id": "spellPanel2", "visible": true } + ] + }, + { + "name": "action.set", + "id": "hideSpellPanel", + "action": [ + { "name": "drawable.visible", "id": "spellPanel", "visible": false }, + { "name": "drawable.visible", "id": "spellPanel2", "visible": false } + ] + } + ], + "text": { + "id": "txtLevelUp", + "font": "smaltext", + "position": [60, 298], + "anchor": "bottom", + "horizontalAlign": "center", + "horizontalSpaceOffset": 1, + "verticalAlign": "center", + "visible": false, + "text": "Level Up" + }, + "button": { + "id": "btnLevelUp", + "texture": "grey", + "textureRect": [0, 22, 41, 22], + "position": [40, 314], + "anchor": "bottom", + "captureInputEvents": true, + "clickUp": true, + "visible": false, + "onClick": { "name": "button.click", "id": "char" }, + "onClickIn": { "name": "image.setTextureRect", "id": "btnLevelUp", "rect": [0, 44, 41, 22] }, + "onClickOut": { "name": "image.setTextureRect", "id": "btnLevelUp", "rect": [0, 22, 41, 22] } + }, + "image": [ + { + "id": "itemInfoBk", + "position": [27, 28], + "anchor": "right", + "textureRect": [267, 300], + "texture": "textWallBackground", + "visible": false + }, + { + "id": "itemInfoSp", + "position": [26, 98], + "anchor": "right", + "textureRect": [2, 0, 266, 3], + "texture": "textbox2", + "visible": false + } + ], + "button": { + "id": "itemInfoBr", + "position": [24, 25], + "anchor": "right", + "texture": "textbox2", + "visible": false, + "onHoverEnter": "hideItemInfo", + "onHoverLeave": "hideItemInfo" + }, + "text": [ + { + "id": "itemInfoTitle", + "replaceVars": true, + "font": "smaltext", + "anchor": "right", + "color": "%textGold%", + "position": [160, 63], + "horizontalAlign": "center", + "horizontalSpaceOffset": 1, + "verticalAlign": "center", + "visible": false, + "text": "" + }, + { + "id": "itemInfoDescr", + "font": "smaltext", + "anchor": "right", + "position": [160, 195], + "horizontalAlign": "center", + "horizontalSpaceOffset": 1, + "verticalSpaceOffset": 14, + "verticalAlign": "center", + "visible": false, + "text": "" + }, + { + "id": "txtMapLabel", + "replaceVars": true, + "font": "smaltext", + "color": "%textGold%", + "position": [8, 10], + "horizontalSpaceOffset": 1, + "binding": "|currentLevel|name|", + "format": "Level: [1]", + "visible": false + }, + { + "id": "txtZoom", + "replaceVars": true, + "anchor": "topRight", + "font": "smaltext", + "color": "%textGold%", + "position": [632, 10], + "horizontalAlign": "right", + "horizontalSpaceOffset": 1, + "binding": "|currentLevel|zoomPercentage|", + "format": "Zoom: [1]%", + "visible": false + } + ], + "button": [ + { + "id": "charPanel", + "texture": "config", + "textureRect": [0, 0, 316, 352], + "anchor": "left", + "captureInputEvents": true, + "visible": false, + "onHoverEnter": "clearLevelHoverActions", + "onHoverLeave": "setLevelHoverActions", + "onRightClick": "rightClickLevel" + }, + { + "id": "charPanel2", + "texture": "config", + "textureRect": [636, 0, 4, 352], + "anchor": "left", + "position": [316, 0], + "captureInputEvents": true, + "visible": false, + "onHoverEnter": "clearLevelHoverActions", + "onHoverLeave": "setLevelHoverActions", + "onRightClick": "rightClickLevel" + }, + { + "id": "invPanel", + "texture": "inventory", + "textureRect": [0, 0, 320, 352], + "anchor": "right", + "position": [320, 0], + "captureInputEvents": true, + "visible": false, + "onHoverEnter": "clearLevelHoverActions", + "onHoverLeave": "setLevelHoverActions", + "onRightClick": "rightClickLevel" + }, + { + "id": "invPanel2", + "texture": "character", + "textureRect": [0, 0, 26, 26], + "anchor": "right", + "position": [320, 0], + "captureInputEvents": true, + "visible": false, + "onHoverEnter": "clearLevelHoverActions", + "onHoverLeave": "setLevelHoverActions", + "onRightClick": "rightClickLevel" + }, + { + "id": "invPanel3", + "texture": "inventory", + "textureRect": [0, 414, 320, 2], + "anchor": "right", + "position": [320, 351], + "captureInputEvents": true, + "visible": false, + "onHoverEnter": "clearLevelHoverActions", + "onHoverLeave": "setLevelHoverActions", + "onRightClick": "rightClickLevel" + }, + { + "id": "questPanel", + "texture": "powers", + "textureRect": [0, 0, 320, 318], + "anchor": "left", + "captureInputEvents": true, + "visible": false, + "onHoverEnter": "clearLevelHoverActions", + "onHoverLeave": "setLevelHoverActions", + "onRightClick": "rightClickLevel" + }, + { + "id": "questPanel2", + "texture": "character", + "textureRect": [0, 318, 320, 34], + "anchor": "left", + "position": [0, 318], + "captureInputEvents": true, + "visible": false, + "onHoverEnter": "clearLevelHoverActions", + "onHoverLeave": "setLevelHoverActions", + "onRightClick": "rightClickLevel" + }, + { + "id": "questPanel3", + "texture": "powers", + "textureRect": [0, 412, 320, 4], + "anchor": "left", + "position": [0, 348], + "captureInputEvents": true, + "visible": false, + "onHoverEnter": "clearLevelHoverActions", + "onHoverLeave": "setLevelHoverActions", + "onRightClick": "rightClickLevel" + }, + { + "id": "questPanel4", + "texture": "powers", + "textureRect": [29, 384, 262, 4], + "anchor": "left", + "position": [29, 318], + "captureInputEvents": true, + "visible": false, + "onHoverEnter": "clearLevelHoverActions", + "onHoverLeave": "setLevelHoverActions", + "onRightClick": "rightClickLevel" + }, + { + "id": "spellPanel", + "texture": "config", + "textureRect": [0, 0, 320, 352], + "anchor": "right", + "position": [320, 0], + "captureInputEvents": true, + "visible": false, + "onHoverEnter": "clearLevelHoverActions", + "onHoverLeave": "setLevelHoverActions", + "onRightClick": "rightClickLevel" + }, + { + "id": "spellPanel2", + "texture": "config", + "textureRect": [636, 0, 4, 352], + "anchor": "right", + "position": [636, 0], + "captureInputEvents": true, + "visible": false, + "onHoverEnter": "clearLevelHoverActions", + "onHoverLeave": "setLevelHoverActions", + "onRightClick": "rightClickLevel" + }, + { + "id": "panel", + "texture": "config", + "position": [0, 352], + "textureRect": [0, 0, 640, 124], + "anchor": "bottom", + "onRightClick": "rightClickLevel" + }, + { + "id": "panel2", + "texture": "config", + "position": [0, 476], + "textureRect": [0, 348, 640, 4], + "anchor": "bottom", + "onRightClick": "rightClickLevel" + } + ], + "image": [ + { + "id": "lifeOrbEmpty", + "texture": "bar_hp_background", + "position": [87, 353], + "anchor": "bottom" + }, + { + "id": "manaOrbEmpty", + "texture": "bar_mp_background", + "position": [449, 353], + "anchor": "bottom" + }, + { + "id": "lifeOrbFull", + "texture": "bar_hp", + "position": [87, 353], + "anchor": "bottom" + }, + { + "id": "manaOrbFull", + "texture": "bar_mp", + "position": [449, 353], + "anchor": "bottom" + }, + { + "id": "belt", + "texture": "inventory", + "textureRect": [31, 353, 258, 32], + "position": [192, 357], + "anchor": "bottom" + }, + { + "id": "txtPanelBk", + "texture": "background", + "textureRect": [0, 0, 304, 70], + "position": [170, 392], + "anchor": "bottom" + } + ], + "button": [ + { + "id": "char", + "font": "smaltext", + "anchor": "bottom", + "position": [9, 361], + "text": "Char", + "verticalAlign": "center", + "clickUp": true, + "onClick": [ + { + "name": "if.equal", + "param1": "|charPanel|visible|", + "param2": false, + "then": [ + { "name": "resource.pop", "id": "charPanelQuests" }, + { "name": "load", "file": "ui/level/char/panelLabels.json" }, + "showCharPanel", + "hideQuestPanel" + ], + "else": [ + { "name": "resource.pop", "id": "charPanelLabels" }, + { "name": "resource.pop", "id": "charPanelQuests" }, + "hideCharPanel", + "hideQuestPanel", + "setLevelHoverActions" + ] + }, + "resizeLevel" + ], + "onHoverEnter": { + "name": "if.notEqual", + "param1": "|currentLevel|currentPlayer.hasSelectedItem|", + "param2": true, + "then": [ + { "name": "text.setText", "id": "txtPanel", "text": "Character Information\nHotkey : 'C'" }, + "setPanelTextColorWhite", + "updatePanelTextSpacing" + ] + }, + "onHoverLeave": "clearPanelText" + }, + { + "id": "quest", + "font": "smaltext", + "anchor": "bottom", + "position": [9, 387], + "text": "Quests", + "verticalAlign": "center", + "clickUp": true, + "onClick": [ + { + "name": "if.equal", + "param1": "|questPanel|visible|", + "param2": false, + "then": [ + { "name": "resource.pop", "id": "charPanelLabels" }, + { "name": "load", "file": "ui/level/char/panelQuests.json" }, + "hideCharPanel", + "showQuestPanel" + ], + "else": [ + { "name": "resource.pop", "id": "charPanelLabels" }, + { "name": "resource.pop", "id": "charPanelQuests" }, + "hideCharPanel", + "hideQuestPanel", + "setLevelHoverActions" + ] + }, + "resizeLevel" + ], + "onHoverEnter": { + "name": "if.notEqual", + "param1": "|currentLevel|currentPlayer.hasSelectedItem|", + "param2": true, + "then": [ + { "name": "text.setText", "id": "txtPanel", "text": "Quests Log\nHotkey : 'Q'" }, + "setPanelTextColorWhite", + "updatePanelTextSpacing" + ] + }, + "onHoverLeave": "clearPanelText" + }, + { + "id": "inv", + "font": "smaltext", + "anchor": "bottom", + "position": [560, 361], + "text": "Inventory", + "verticalAlign": "center", + "clickUp": true, + "onClick": [ + { + "name": "if.equal", + "param1": "|invPanel|visible|", + "param2": false, + "then": [ + { "name": "resource.pop", "id": "charPanelSpells" }, + { "name": "load", "file": "ui/level/char/panelInventory.json" }, + "showInvPanel", + "hideSpellPanel" + ], + "else": [ + { "name": "resource.pop", "id": "charPanelInventory" }, + { "name": "resource.pop", "id": "charPanelSpells" }, + "hideInvPanel", + "hideSpellPanel", + "setLevelHoverActions" + ] + }, + "resizeLevel" + ], + "onHoverEnter": { + "name": "if.notEqual", + "param1": "|currentLevel|currentPlayer.hasSelectedItem|", + "param2": true, + "then": [ + { "name": "text.setText", "id": "txtPanel", "text": "Inventory\nHotkey : 'I'" }, + "setPanelTextColorWhite", + "updatePanelTextSpacing" + ] + }, + "onHoverLeave": "clearPanelText" + }, + { + "id": "spell", + "font": "smaltext", + "anchor": "bottom", + "position": [560, 387], + "text": "Spells", + "verticalAlign": "center", + "clickUp": true, + "onClick": [ + { + "name": "if.equal", + "param1": "|spellPanel|visible|", + "param2": false, + "then": [ + { "name": "resource.pop", "id": "charPanelInventory" }, + { "name": "load", "file": "ui/level/char/panelSpells.json" }, + "hideInvPanel", + "showSpellPanel" + ], + "else": [ + { "name": "resource.pop", "id": "charPanelInventory" }, + { "name": "resource.pop", "id": "charPanelSpells" }, + "hideInvPanel", + "hideSpellPanel", + "setLevelHoverActions" + ] + }, + "resizeLevel" + ], + "onHoverEnter": { + "name": "if.notEqual", + "param1": "|currentLevel|currentPlayer.hasSelectedItem|", + "param2": true, + "then": [ + { "name": "text.setText", "id": "txtPanel", "text": "Spell Book\nHotkey : 'B'" }, + "setPanelTextColorWhite", + "updatePanelTextSpacing" + ] + }, + "onHoverLeave": "clearPanelText" + }, + { + "id": "map", + "font": "smaltext", + "anchor": "bottom", + "position": [9, 427], + "text": "Map", + "verticalAlign": "center", + "clickUp": true, + "onHoverEnter": { + "name": "if.notEqual", + "param1": "|currentLevel|currentPlayer.hasSelectedItem|", + "param2": true, + "then": [ + { "name": "text.setText", "id": "txtPanel", "text": "Automap\nHotkey : Tab" }, + "setPanelTextColorWhite", + "updatePanelTextSpacing" + ] + }, + "onHoverLeave": "clearPanelText" + }, + { + "id": "menu", + "font": "smaltext", + "anchor": "bottom", + "position": [9, 453], + "sound": "titlemov", + "text": "Menu", + "verticalAlign": "center", + "clickUp": true, + "onClick": { + "name": "if.equal", + "param1": "|game|hasResource.gameMenuCommon|", + "param2": true, + "then": "menu.saveAndCloseAction", + "else": [ + { "name": "load", "file": "ui/level/menu/common.json" }, + { "name": "load", "file": "ui/level/menu/game.json" } + ] + }, + "onHoverEnter": { + "name": "if.notEqual", + "param1": "|currentLevel|currentPlayer.hasSelectedItem|", + "param2": true, + "then": [ + { "name": "text.setText", "id": "txtPanel", "text": "Main Menu\nHotkey : Esc" }, + "setPanelTextColorWhite", + "updatePanelTextSpacing" + ] + }, + "onHoverLeave": "clearPanelText" + } + ], + "text": { + "id": "txtPanel", + "font": "smaltext", + "anchor": "bottom", + "position": [320, 429], + "horizontalAlign": "center", + "horizontalSpaceOffset": 2, + "verticalAlign": "center" + }, + "keyboard": [ + { "key": "1", "action": "useBelt1Item" }, + { "key": "2", "action": "useBelt2Item" }, + { "key": "3", "action": "useBelt3Item" }, + { "key": "4", "action": "useBelt4Item" }, + { "key": "5", "action": "useBelt5Item" }, + { "key": "6", "action": "useBelt6Item" }, + { "key": "7", "action": "useBelt7Item" }, + { "key": "8", "action": "useBelt8Item" }, + { "key": "b", "action": { "name": "button.click", "id": "spell" } }, + { "key": "c", "action": { "name": "button.click", "id": "char" } }, + { "key": "esc", "action": { "name": "button.click", "id": "menu" } }, + { "key": "i", "action": { "name": "button.click", "id": "inv" } }, + { "key": "q", "action": { "name": "button.click", "id": "quest" } }, + { "key": "tab", "action": { "name": "button.click", "id": "map" } }, + { + "key": "f1", + "action": [ + { "name": "player.addGold", "gold": -4000 }, + "updateStashItems", + "updateCharLabels" + ] + }, + { + "key": "f2", + "action": [ + { "name": "player.addGold", "gold": 4000 }, + "updateStashItems", + "updateCharLabels" + ] + }, + { + "key": "f3", + "action": [ + { "name": "player.addToProperty", "property": "lifeDamage", "value": 10 }, + "updateAllPlayerStats" + ] + }, + { + "key": "f4", + "action": [ + { "name": "player.addToProperty", "property": "lifeDamage", "value": -10 }, + "updateAllPlayerStats" + ] + }, + { + "key": "f5", + "action": [ + { "name": "player.addToProperty", "property": "manaDamage", "value": 10 }, + "updateAllPlayerStats" + ] + }, + { + "key": "f6", + "action": [ + { "name": "player.addToProperty", "property": "manaDamage", "value": -10 }, + "updateAllPlayerStats" + ] + }, + { + "key": "f7", + "action": [ + { "name": "player.addToProperty", "property": "experience", "value": -2000 }, + "updateAllPlayerStats" + ] + }, + { + "key": "f8", + "action": [ + { "name": "player.addToProperty", "property": "experience", "value": 2000 }, + "updateAllPlayerStats" + ] + } + ], + "load": "ui/level/char/beltInventory.json" +} \ No newline at end of file diff --git a/gamefilesflare/ui/level/char/panelInventory.json b/gamefilesflare/ui/level/char/panelInventory.json new file mode 100755 index 00000000..6cd8b4f2 --- /dev/null +++ b/gamefilesflare/ui/level/char/panelInventory.json @@ -0,0 +1,407 @@ +{ + "action": { "name": "resource.add", "id": "charPanelInventory" }, + "button": [ + { + "id": "playerLeftHand", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [416, 112], + "onClick": "updateLeftHandClick", + "onHoverEnter": "updateLeftHandText", + "onHoverLeave": "hoverLeftHandLeave" + }, + { + "id": "playerRightHand", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [512, 112], + "onClick": "updateRightHandClick", + "onHoverEnter": "updateRightHandText", + "onHoverLeave": "hoverRightHandLeave" + }, + { + "id": "playerArmor", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [464, 80], + "onClick": "updateArmorClick", + "onHoverEnter": "updateArmorText", + "onHoverLeave": "hoverArmorLeave" + }, + { + "id": "playerHelmet", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [464, 32], + "onClick": "updateHelmetClick", + "onHoverEnter": "updateHelmetText", + "onHoverLeave": "hoverHelmetLeave" + }, + { + "id": "playerAmulet", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [512, 64], + "onClick": "updateAmuletClick", + "onHoverEnter": "updateAmuletText", + "onHoverLeave": "hoverAmuletLeave" + }, + { + "id": "playerLeftRing", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [416, 160], + "onClick": "updateLeftRingClick", + "onHoverEnter": "updateLeftRingText", + "onHoverLeave": "hoverLeftRingLeave" + }, + { + "id": "playerRightRing", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [512, 160], + "onClick": "updateRightRingClick", + "onHoverEnter": "updateRightRingText", + "onHoverLeave": "hoverRightRingLeave" + }, + { + "id": "btnStash11", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [352, 224], + "onClick": "updateStash11Click" + }, + { + "id": "btnStash12", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [352, 256], + "onClick": "updateStash12Click" + }, + { + "id": "btnStash13", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [352, 288], + "onClick": "updateStash13Click" + }, + { + "id": "btnStash14", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [352, 320], + "onClick": "updateStash14Click" + }, + { + "id": "btnStash21", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [384, 224], + "onClick": "updateStash21Click" + }, + { + "id": "btnStash22", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [384, 256], + "onClick": "updateStash22Click" + }, + { + "id": "btnStash23", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [384, 288], + "onClick": "updateStash23Click" + }, + { + "id": "btnStash24", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [384, 320], + "onClick": "updateStash24Click" + }, + { + "id": "btnStash31", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [416, 224], + "onClick": "updateStash31Click" + }, + { + "id": "btnStash32", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [416, 256], + "onClick": "updateStash32Click" + }, + { + "id": "btnStash33", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [416, 288], + "onClick": "updateStash33Click" + }, + { + "id": "btnStash34", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [416, 320], + "onClick": "updateStash34Click" + }, + { + "id": "btnStash41", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [448, 224], + "onClick": "updateStash41Click" + }, + { + "id": "btnStash42", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [448, 256], + "onClick": "updateStash42Click" + }, + { + "id": "btnStash43", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [448, 288], + "onClick": "updateStash43Click" + }, + { + "id": "btnStash44", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [448, 320], + "onClick": "updateStash44Click" + }, + { + "id": "btnStash51", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [480, 224], + "onClick": "updateStash51Click" + }, + { + "id": "btnStash52", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [480, 256], + "onClick": "updateStash52Click" + }, + { + "id": "btnStash53", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [480, 288], + "onClick": "updateStash53Click" + }, + { + "id": "btnStash54", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [480, 320], + "onClick": "updateStash54Click" + }, + { + "id": "btnStash61", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [512, 224], + "onClick": "updateStash61Click" + }, + { + "id": "btnStash62", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [512, 256], + "onClick": "updateStash62Click" + }, + { + "id": "btnStash63", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [512, 288], + "onClick": "updateStash63Click" + }, + { + "id": "btnStash64", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [512, 320], + "onClick": "updateStash64Click" + }, + { + "id": "btnStash71", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [544, 224], + "onClick": "updateStash71Click" + }, + { + "id": "btnStash72", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [544, 256], + "onClick": "updateStash72Click" + }, + { + "id": "btnStash73", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [544, 288], + "onClick": "updateStash73Click" + }, + { + "id": "btnStash74", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [544, 320], + "onClick": "updateStash74Click" + }, + { + "id": "btnStash81", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [576, 224], + "onClick": "updateStash81Click" + }, + { + "id": "btnStash82", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [576, 256], + "onClick": "updateStash82Click" + }, + { + "id": "btnStash83", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [576, 288], + "onClick": "updateStash83Click" + }, + { + "id": "btnStash84", + "texture": "empty", + "textureRect": [32, 32], + "anchor": "right", + "position": [576, 320], + "onClick": "updateStash84Click" + } + ], + "image": [ + { + "id": "imgLeftHand", + "replaceVars": true, + "texture": "empty", + "textureRect": [32, 32], + "outline": "%outlineItemInv%", + "outlineIgnore": "0x000000", + "anchor": "right", + "position": [337, 77] + }, + { + "id": "imgRightHand", + "replaceVars": true, + "texture": "empty", + "textureRect": [32, 32], + "outline": "%outlineItemInv%", + "outlineIgnore": "0x000000", + "anchor": "right", + "position": [569, 77] + }, + { + "id": "imgArmor", + "replaceVars": true, + "texture": "empty", + "textureRect": [32, 32], + "outline": "%outlineItemInv%", + "outlineIgnore": "0x000000", + "anchor": "right", + "position": [453, 77] + }, + { + "id": "imgHelmet", + "replaceVars": true, + "texture": "empty", + "textureRect": [32, 32], + "outline": "%outlineItemInv%", + "outlineIgnore": "0x000000", + "anchor": "right", + "position": [453, -10] + }, + { + "id": "imgAmulet", + "replaceVars": true, + "texture": "empty", + "textureRect": [32, 32], + "outline": "%outlineItemInv%", + "outlineIgnore": "0x000000", + "anchor": "right", + "position": [511, 5] + }, + { + "id": "imgLeftRing", + "replaceVars": true, + "texture": "empty", + "textureRect": [32, 32], + "outline": "%outlineItemInv%", + "outlineIgnore": "0x000000", + "anchor": "right", + "position": [354, 150] + }, + { + "id": "imgRightRing", + "replaceVars": true, + "texture": "empty", + "textureRect": [32, 32], + "outline": "%outlineItemInv%", + "outlineIgnore": "0x000000", + "anchor": "right", + "position": [555, 150] + } + ], + "action": [ + "updateBodyItems", + "updateStashItems" + ] +} \ No newline at end of file diff --git a/gamefilesflare/ui/level/char/panelLabels.json b/gamefilesflare/ui/level/char/panelLabels.json new file mode 100755 index 00000000..2bb5c263 --- /dev/null +++ b/gamefilesflare/ui/level/char/panelLabels.json @@ -0,0 +1,276 @@ +{ + "action": { "name": "resource.add", "id": "charPanelLabels" }, + "text": [ + { + "id": "charName", + "font": "smaltext", + "position": [86, 22], + "anchor": "left", + "horizontalAlign": "center", + "horizontalSpaceOffset": 1 + }, + { + "id": "charClass", + "font": "smaltext", + "position": [234, 22], + "anchor": "left", + "horizontalAlign": "center", + "horizontalSpaceOffset": 1 + }, + { + "id": "charLevel", + "font": "smaltext", + "position": [88, 59], + "anchor": "left", + "horizontalAlign": "center", + "horizontalSpaceOffset": 1 + }, + { + "id": "charExp", + "font": "smaltext", + "position": [258, 59], + "anchor": "left", + "horizontalAlign": "center", + "horizontalSpaceOffset": 1 + }, + { + "id": "charExpNext", + "font": "smaltext", + "position": [258, 87], + "anchor": "left", + "horizontalAlign": "center", + "horizontalSpaceOffset": 1 + }, + { + "id": "charGold", + "font": "smaltext", + "position": [258, 136], + "anchor": "left", + "horizontalAlign": "center", + "horizontalSpaceOffset": 1, + "binding": "|currentLevel|currentPlayer.gold|" + }, + { + "id": "charStr", + "font": "smaltext", + "position": [110, 145], + "anchor": "left", + "horizontalAlign": "center", + "horizontalSpaceOffset": 1, + "onChange": "updateCharStrengthColor" + }, + { + "id": "charStrNow", + "font": "smaltext", + "position": [158, 145], + "anchor": "left", + "horizontalAlign": "center", + "horizontalSpaceOffset": 1, + "onChange": "updateCharStrengthNowColor" + }, + { + "id": "charMag", + "font": "smaltext", + "position": [111, 173], + "anchor": "left", + "horizontalAlign": "center", + "horizontalSpaceOffset": 1, + "onChange": "updateCharMagicColor" + }, + { + "id": "charMagNow", + "font": "smaltext", + "position": [158, 173], + "anchor": "left", + "horizontalAlign": "center", + "horizontalSpaceOffset": 1, + "onChange": "updateCharMagicNowColor" + }, + { + "id": "charDex", + "font": "smaltext", + "position": [110, 201], + "anchor": "left", + "horizontalAlign": "center", + "horizontalSpaceOffset": 1, + "onChange": "updateCharDexterityColor" + }, + { + "id": "charDexNow", + "font": "smaltext", + "position": [158, 201], + "anchor": "left", + "horizontalAlign": "center", + "horizontalSpaceOffset": 1, + "onChange": "updateCharDexterityNowColor" + }, + { + "id": "charVit", + "font": "smaltext", + "position": [110, 229], + "anchor": "left", + "horizontalAlign": "center", + "horizontalSpaceOffset": 1, + "onChange": "updateCharVitalityColor" + }, + { + "id": "charVitNow", + "font": "smaltext", + "position": [158, 229], + "anchor": "left", + "horizontalAlign": "center", + "horizontalSpaceOffset": 1, + "onChange": "updateCharVitalityNowColor" + }, + { + "id": "charPoints", + "replaceVars": true, + "font": "smaltext", + "color": "%textRed%", + "position": [111, 256], + "anchor": "left", + "horizontalAlign": "center", + "horizontalSpaceOffset": 1 + }, + { + "id": "charLife", + "font": "smaltext", + "position": [111, 294], + "anchor": "left", + "horizontalAlign": "center", + "horizontalSpaceOffset": 1, + "onChange": "updateCharLifeColor" + }, + { + "id": "charLifeNow", + "font": "smaltext", + "position": [159, 294], + "anchor": "left", + "horizontalAlign": "center", + "horizontalSpaceOffset": 1, + "onChange": "updateCharLifeNowColor" + }, + { + "id": "charMana", + "font": "smaltext", + "position": [111, 322], + "anchor": "left", + "horizontalAlign": "center", + "horizontalSpaceOffset": 1, + "onChange": "updateCharManaColor" + }, + { + "id": "charManaNow", + "font": "smaltext", + "position": [159, 322], + "anchor": "left", + "horizontalAlign": "center", + "horizontalSpaceOffset": 1, + "onChange": "updateCharManaNowColor" + }, + { + "id": "charArmor", + "font": "smaltext", + "position": [280, 173], + "anchor": "left", + "horizontalAlign": "center", + "horizontalSpaceOffset": 1, + "onChange": "updateCharArmorColor" + }, + { + "id": "charToHit", + "font": "smaltext", + "position": [279, 201], + "anchor": "left", + "horizontalAlign": "center", + "horizontalSpaceOffset": 1, + "onChange": "updateCharToHitColor" + }, + { + "id": "charDamage", + "font": "smaltext", + "position": [280, 229], + "anchor": "left", + "horizontalAlign": "center", + "onChange": "updateCharDamageColor" + }, + { + "id": "charResMagic", + "font": "smaltext", + "position": [279, 266], + "anchor": "left", + "horizontalAlign": "center", + "horizontalSpaceOffset": 1, + "onChange": "updateCharResistMagicColor" + }, + { + "id": "charResFire", + "font": "smaltext", + "position": [279, 294], + "anchor": "left", + "horizontalAlign": "center", + "horizontalSpaceOffset": 1, + "onChange": "updateCharResistFireColor" + }, + { + "id": "charResLight", + "font": "smaltext", + "position": [279, 322], + "anchor": "left", + "horizontalAlign": "center", + "horizontalSpaceOffset": 1, + "onChange": "updateCharResistLightningColor" + } + ], + "button": [ + { + "id": "charStrAddPoint", + "position": [137, 138], + "anchor": "left", + "texture": "red", + "textureRect": [41, 22], + "clickUp": true, + "visible": true, + "onClick": "charStrAddPoint", + "onClickIn": { "name": "image.setTextureRect", "id": "charStrAddPoint", "rect": [0, 44, 41, 22] }, + "onClickOut": { "name": "image.setTextureRect", "id": "charStrAddPoint", "rect": [0, 22, 41, 22] } + }, + { + "id": "charMagAddPoint", + "position": [137, 166], + "anchor": "left", + "texture": "red", + "textureRect": [41, 22], + "clickUp": true, + "visible": true, + "onClick": "charMagAddPoint", + "onClickIn": { "name": "image.setTextureRect", "id": "charMagAddPoint", "rect": [0, 88, 41, 22] }, + "onClickOut": { "name": "image.setTextureRect", "id": "charMagAddPoint", "rect": [0, 66, 41, 22] } + }, + { + "id": "charDexAddPoint", + "position": [137, 195], + "anchor": "left", + "texture": "red", + "textureRect": [41, 22], + "clickUp": true, + "visible": true, + "onClick": "charDexAddPoint", + "onClickIn": { "name": "image.setTextureRect", "id": "charDexAddPoint", "rect": [0, 132, 41, 22] }, + "onClickOut": { "name": "image.setTextureRect", "id": "charDexAddPoint", "rect": [0, 110, 41, 22] } + }, + { + "id": "charVitAddPoint", + "position": [137, 223], + "anchor": "left", + "texture": "red", + "textureRect": [41, 22], + "clickUp": true, + "visible": true, + "onClick": "charVitAddPoint", + "onClickIn": { "name": "image.setTextureRect", "id": "charVitAddPoint", "rect": [0, 176, 41, 22] }, + "onClickOut": { "name": "image.setTextureRect", "id": "charVitAddPoint", "rect": [0, 154, 41, 22] } + } + ], + "action": "updateCharLabels" +} \ No newline at end of file diff --git a/gamefilesflare/ui/level/menu/common.json b/gamefilesflare/ui/level/menu/common.json new file mode 100755 index 00000000..61b0dea0 --- /dev/null +++ b/gamefilesflare/ui/level/menu/common.json @@ -0,0 +1,173 @@ +{ + "action": [ + { "name": "resource.add", "id": "gameMenuCommon", "ignorePrevious": "allUpdates" }, + { "name": "level.pause", "pause": true }, + { + "name": "action.set", + "id": "anchorLeftPentagram", + "action": { "name": "drawable.anchorToFocused", "id": "pent1", "anchor": "left", "offset": [-4, 0] } + }, + { + "name": "action.set", + "id": "anchorRightPentagram", + "action": { "name": "drawable.anchorToFocused", "id": "pent2", "anchor": "right", "offset": [6, 0] } + } + ], + "load": "ui/level/char/disableKeys.json", + "keyboard": [ + { + "key": ["enter", " "], + "action": "focus.click" + }, + { + "key": ["up", "w"], + "action": "focus.moveUp" + }, + { + "key": "tab", + "shift": true, + "action": "focus.moveUp" + }, + { + "key": ["down", "s", "tab"], + "action": "focus.moveDown" + }, + { + "key": "esc", + "action": { "name": "button.click", "id": "menu" } + } + ], + "texture": [ + { + "id": "logo", + "file": "images/menus/logo.png" + }, + { + "id": "down", + "file": "images/menus/buttons/down.png" + } + ], + "texturePack": { + "id": "PentSpin", + "texture": "down", + "frames": 4 + }, + "image": { + "id": "smlogo", + "texturePack": "logo", + "position": [105, 0], + "anchor": "none", + "refresh": 50 + }, + "animation": [ + { + "id": "pent1", + "texturePack": "PentSpin", + "position": [67, 140], + "anchor": "none", + "refresh": 50 + }, + { + "id": "pent2", + "texturePack": "PentSpin", + "position": [537, 140], + "anchor": "none", + "refresh": 50 + } + ], + "button": [ + { + "id": "char2", + "texture": "empty", + "anchor": "bottom", + "position": [9, 361], + "textureRect": [71, 19], + "clickUp": true, + "onClick": [ + { "name": "button.click", "id": "char", "playSound": false } + ], + "onClickIn": { "name": "image.setTexture", "id": "char2", "texture": "panel8bu" }, + "onClickOut": [ + { "name": "image.setTexture", "id": "char2", "texture": "empty" }, + "menu.saveAndCloseAction" + ] + }, + { + "id": "quest2", + "texture": "empty", + "anchor": "bottom", + "position": [9, 387], + "textureRect": [0, 19, 71, 19], + "clickUp": true, + "onClick": [ + { "name": "button.click", "id": "quest", "playSound": false } + ], + "onClickIn": { "name": "image.setTexture", "id": "quest2", "texture": "panel8bu" }, + "onClickOut": [ + { "name": "image.setTexture", "id": "quest2", "texture": "empty" }, + "menu.saveAndCloseAction" + ] + }, + { + "id": "inv2", + "texture": "empty", + "anchor": "bottom", + "position": [560, 361], + "textureRect": [0, 76, 71, 19], + "clickUp": true, + "onClick": [ + { "name": "button.click", "id": "inv", "playSound": false } + ], + "onClickIn": { "name": "image.setTexture", "id": "inv2", "texture": "panel8bu" }, + "onClickOut": [ + { "name": "image.setTexture", "id": "inv2", "texture": "empty" }, + "menu.saveAndCloseAction" + ] + }, + { + "id": "spell2", + "texture": "empty", + "anchor": "bottom", + "position": [560, 387], + "textureRect": [0, 95, 71, 19], + "clickUp": true, + "onClick": [ + { "name": "button.click", "id": "spell", "playSound": false } + ], + "onClickIn": { "name": "image.setTexture", "id": "spell2", "texture": "panel8bu" }, + "onClickOut": [ + { "name": "image.setTexture", "id": "spell2", "texture": "empty" }, + "menu.saveAndCloseAction" + ] + }, + { + "id": "map2", + "texture": "empty", + "anchor": "bottom", + "position": [9, 427], + "textureRect": [0, 38, 71, 19], + "clickUp": true, + "onClick": [ + { "name": "button.click", "id": "map", "playSound": false } + ], + "onClickIn": { "name": "image.setTexture", "id": "map2", "texture": "panel8bu" }, + "onClickOut": [ + { "name": "image.setTexture", "id": "map2", "texture": "empty" }, + "menu.saveAndCloseAction" + ] + }, + { + "id": "menu2", + "texture": "empty", + "anchor": "bottom", + "position": [9, 453], + "textureRect": [0, 57, 71, 19], + "clickUp": true, + "onClickIn": { "name": "image.setTexture", "id": "menu2", "texture": "panel8bu" }, + "onClickOut": [ + { "name": "image.setTexture", "id": "menu2", "texture": "empty" }, + "menu.saveAndCloseAction" + ] + } + ] +} \ No newline at end of file diff --git a/gamefilesflare/ui/level/menu/game2.json b/gamefilesflare/ui/level/menu/game2.json new file mode 100755 index 00000000..a346cc53 --- /dev/null +++ b/gamefilesflare/ui/level/menu/game2.json @@ -0,0 +1,371 @@ +{ + "action": [ + { "name": "resource.add", "id": "gameMenu2" }, + { "name": "variable.setIfNull", "key": "colorCycling", "val": false }, + { + "name": "action.set", + "id": "updateAudioProgressBar", + "action": [ + { "name": "drawable.resizeToPositionX", "id": "progressBar1", "idToPosition": "option1", "offset": 14 }, + { "name": "game.setProperty", "property": "musicVolume", "value": "|progressBar1|size.x|", "propRange": [0, 100], "valueRange": [14, 270] }, + { + "name": "if.equal", + "param1": "|game|musicVolume|", + "param2": 0, + "then": { "name": "audio.stop", "id": "main" }, + "else": { "name": "audio.play", "id": "main" } + } + ] + }, + { + "name": "action.set", + "id": "updateSoundProgressBar", + "action": [ + { "name": "drawable.resizeToPositionX", "id": "progressBar2", "idToPosition": "option2", "offset": 14 }, + { "name": "game.setProperty", "property": "soundVolume", "value": "|progressBar2|size.x|", "propRange": [0, 100], "valueRange": [14, 270] } + ] + }, + { + "name": "action.set", + "id": "updateGammaProgressBar", + "action": { "name": "drawable.resizeToPositionX", "id": "progressBar3", "idToPosition": "option3", "offset": 14 } + }, + { + "name": "action.set", + "id": "updateAudioUpKeyboardShortcut", + "action": [ + { "name": "drawable.moveStepX", "id": "option1", "idAnchorTo": "progressBar1", "range": 283, "steps": 17, "stepOffset": 1 }, + "updateAudioProgressBar" + ] + }, + { + "name": "action.set", + "id": "updateAudioDownKeyboardShortcut", + "action": [ + { "name": "drawable.moveStepX", "id": "option1", "idAnchorTo": "progressBar1", "range": 283, "steps": 17, "stepOffset": -1 }, + "updateAudioProgressBar" + ] + }, + { + "name": "action.set", + "id": "updateColorCyclingLabel", + "action": { + "name": "if.equal", + "param1": "%colorCycling%", + "param2": true, + "then": { "name": "text.setText", "id": "colorCycling", "text": "Color Cycling On" }, + "else": { "name": "text.setText", "id": "colorCycling", "text": "Color Cycling Off" } + } + }, + { + "name": "action.set", + "id": "updateSoundUpKeyboardShortcut", + "action": [ + { "name": "drawable.moveStepX", "id": "option2", "idAnchorTo": "progressBar2", "range": 283, "steps": 17, "stepOffset": 1 }, + "updateSoundProgressBar" + ] + }, + { + "name": "action.set", + "id": "updateSoundDownKeyboardShortcut", + "action": [ + { "name": "drawable.moveStepX", "id": "option2", "idAnchorTo": "progressBar2", "range": 283, "steps": 17, "stepOffset": -1 }, + "updateSoundProgressBar" + ] + }, + { + "name": "action.set", + "id": "updateGammaUpKeyboardShortcut", + "action": [ + { "name": "drawable.moveStepX", "id": "option3", "idAnchorTo": "progressBar3", "range": 283, "steps": 15, "stepOffset": 1 }, + "updateGammaProgressBar" + ] + }, + { + "name": "action.set", + "id": "updateGammaDownKeyboardShortcut", + "action": [ + { "name": "drawable.moveStepX", "id": "option3", "idAnchorTo": "progressBar3", "range": 283, "steps": 15, "stepOffset": -1 }, + "updateGammaProgressBar" + ] + } + ], + "keyboard": [ + { + "key": ["a", "left"], + "action": "updateAudioDownKeyboardShortcut" + }, + { + "key": ["d", "right"], + "action": "updateAudioUpKeyboardShortcut" + } + ], + "texture": [ + { + "id": "optbar", + "fromId": "textWallBackground" + }, + { + "id": "option", + "fromId": "icons" + } + ], + "rectangle": [ + { + "id": "progressBar1", + "color": "0x312816", + "position": [263, 121], + "anchor": "none", + "size": [14, 28] + }, + { + "id": "progressBar2", + "color": "0x312816", + "position": [263, 166], + "anchor": "none", + "size": [14, 28] + }, + { + "id": "progressBar3", + "color": "0x312816", + "position": [263, 211], + "anchor": "none", + "size": [14, 28] + } + ], + "image": [ + { + "id": "optbar1", + "position": [261, 119], + "anchor": "none", + "texture":"optbar", + "textureRect": [0, 0, 287, 32] + }, + { + "id": "option1", + "position": [263, 121], + "anchor": "none", + "texture": "option", + "textureRect": [130, 34, 28, 27] + }, + { + "id": "optbar2", + "position": [261, 164], + "anchor": "none", + "texture": "optbar", + "textureRect": [0, 0, 287, 32] + }, + { + "id": "option2", + "position": [263, 166], + "anchor": "none", + "texture": "option", + "textureRect": [130, 34, 28, 27] + }, + { + "id": "optbar3", + "position": [261, 209], + "anchor": "none", + "texture": "optbar", + "textureRect": [0, 0, 287, 32] + }, + { + "id": "option3", + "position": [263, 211], + "anchor": "none", + "texture": "option", + "textureRect": [130, 34, 28, 27] + } + ], + "button": [ + { + "id": "btnOption1", + "texture": "empty", + "textureRect": [283, 28], + "position": [263, 121], + "anchor": "none", + "sound": "titlemov", + "onClick": [ + { "name": "button.click", "id": "music", "playSound": false }, + { "name": "drawable.centerOnMouseX", "id": "option1", "idAnchorTo": "progressBar1", "range": 283, "steps": 17 }, + "updateAudioProgressBar" + ], + "onClickDrag": { "name": "button.click", "id": "btnOption1", "playSound": false } + }, + { + "id": "btnOption2", + "texture": "empty", + "textureRect": [283, 28], + "position": [263, 166], + "anchor": "none", + "sound": "titlemov", + "onClick": [ + { "name": "button.click", "id": "sound", "playSound": false }, + { "name": "drawable.centerOnMouseX", "id": "option2", "idAnchorTo": "progressBar2", "range": 283, "steps": 17 }, + "updateSoundProgressBar" + ], + "onClickDrag": { "name": "button.click", "id": "btnOption2", "playSound": false } + }, + { + "id": "btnOption3", + "texture": "empty", + "textureRect": [283, 28], + "position": [263, 211], + "anchor": "none", + "sound": "titlemov", + "onClick": [ + { "name": "button.click", "id": "gamma", "playSound": false }, + { "name": "drawable.centerOnMouseX", "id": "option3", "idAnchorTo": "progressBar3", "range": 283, "steps": 15 }, + "updateGammaProgressBar" + ], + "onClickDrag": { "name": "button.click", "id": "btnOption3", "playSound": false } + }, + { + "id": "music", + "font": "bigtgold", + "sound": "titlemov", + "focus": true, + "focusOnClick": false, + "text": "Music", + "position": [75, 116], + "horizontalSpaceOffset": 2, + "anchor": "none", + "onClick": [ + "anchorLeftPentagram", + { "name": "drawable.anchor", "id": "pent2", "idAnchor": "optbar1", "anchor": "right" }, + { "name": "loadJson", + "json": { + "keyboard": [ + { + "key": ["a", "left"], + "action": "updateAudioDownKeyboardShortcut" + }, + { + "key": ["d", "right"], + "action": "updateAudioUpKeyboardShortcut" + } + ] + } + } + ], + "onFocus": { "name": "button.click", "id": "music" } + }, + { + "id": "sound", + "font": "bigtgold", + "sound": "titlemov", + "focus": true, + "focusOnClick": false, + "text": "Sound", + "position": [75, 161], + "anchor": "none", + "horizontalSpaceOffset": 2, + "onClick": [ + "anchorLeftPentagram", + { "name": "drawable.anchor", "id": "pent2", "idAnchor": "optbar2", "anchor": "right" }, + { "name": "loadJson", + "json": { + "keyboard": [ + { + "key": ["a", "left"], + "action": "updateSoundDownKeyboardShortcut" + }, + { + "key": ["d", "right"], + "action": "updateSoundUpKeyboardShortcut" + } + ] + } + } + ], + "onFocus": { "name": "button.click", "id": "sound" } + }, + { + "id": "gamma", + "font": "bigtgold", + "sound": "titlemov", + "focus": true, + "focusOnClick": false, + "text": "Gamma", + "position": [75, 206], + "anchor": "none", + "horizontalSpaceOffset": 2, + "onClick": [ + "anchorLeftPentagram", + { "name": "drawable.anchor", "id": "pent2", "idAnchor": "optbar3", "anchor": "right" }, + { "name": "loadJson", + "json": { + "keyboard": [ + { + "key": ["a", "left"], + "action": "updateGammaDownKeyboardShortcut" + }, + { + "key": ["d", "right"], + "action": "updateGammaUpKeyboardShortcut" + } + ] + } + } + ], + "onFocus": { "name": "button.click", "id": "gamma" } + }, + { + "id": "colorCycling", + "font": "bigtgold", + "sound": "titlemov", + "focus": true, + "focusSound": "titlemov", + "position": [320, 251], + "anchor": "none", + "horizontalAlign": "center", + "horizontalSpaceOffset": 2, + "onClick": [ + { + "name": "if.equal", + "param1": "%colorCycling%", + "param2": false, + "then": { "name": "variable.set", "key": "colorCycling", "val": true }, + "else": { "name": "variable.set", "key": "colorCycling", "val": false } + }, + "updateColorCyclingLabel", + "anchorLeftPentagram", + "anchorRightPentagram" + ], + "onFocus": [ + "anchorLeftPentagram", + "anchorRightPentagram" + ] + }, + { + "id": "previousMenu", + "font": "bigtgold", + "sound": "titlemov", + "focus": true, + "focusSound": "titlemov", + "text": "Previous Menu", + "position": [320, 296], + "anchor": "none", + "horizontalAlign": "center", + "horizontalSpaceOffset": 2, + "onClick": [ + { "name": "resource.pop" }, + { "name": "load", "file": "ui/level/saveSettings.json" }, + { "name": "load", "file": "ui/level/menu/game.json" } + ], + "onFocus": [ + "anchorLeftPentagram", + "anchorRightPentagram" + ] + } + ], + "action": [ + "anchorLeftPentagram", + "updateColorCyclingLabel", + { "name": "drawable.anchor", "id": "pent2", "idAnchor": "optbar1", "anchor": "right" }, + { "name": "drawable.moveX", "id": "option1", "idAnchorTo": "progressBar1", "range": 283, "position": "|game|musicVolume|", "max": 100, "steps": 17 }, + { "name": "drawable.moveX", "id": "option2", "idAnchorTo": "progressBar2", "range": 283, "position": "|game|soundVolume|", "max": 100, "steps": 17 }, + { "name": "drawable.anchorSizeX", "id": "progressBar1", "idAnchorTo": "option1", "offset": 14 }, + { "name": "drawable.anchorSizeX", "id": "progressBar2", "idAnchorTo": "option2", "offset": 14 } + ] +} \ No newline at end of file diff --git a/gamefilesflare/ui/loadMain.json b/gamefilesflare/ui/loadMain.json new file mode 100755 index 00000000..7fd7e254 --- /dev/null +++ b/gamefilesflare/ui/loadMain.json @@ -0,0 +1,12 @@ +{ + "icon": { + "file":"images/logo/icon.png" + }, + "load": "res/actions.json", + "load": "res/fonts.json", + "load": "res/music.json", + "load": "res/palettes.json", + "load": "res/sounds.json", + "load": "res/textures.json", + "load": "ui/mainMenu.json" +} \ No newline at end of file diff --git a/gamefilesflare/ui/mainMenu.json b/gamefilesflare/ui/mainMenu.json new file mode 100755 index 00000000..f7a2c328 --- /dev/null +++ b/gamefilesflare/ui/mainMenu.json @@ -0,0 +1,180 @@ +{ + "action": { + "name": "resource.add", + "id": "mainMenu" + }, + "audio": { + "id": "main", + "file": "music/title_theme.ogg", + "loop": true, + "play": true + }, + "keyboard": [ + { + "key": ["enter", " "], + "action": "focus.click" + }, + { + "key": ["up", "w"], + "action": "focus.moveUp" + }, + { + "key": "tab", + "shift": true, + "action": "focus.moveUp" + }, + { + "key": ["down", "s", "tab"], + "action": "focus.moveDown" + }, + { + "key": "esc", + "action": { "name": "menu.click", "id": "menu", "index": 4 } + }, + { + "key": "f1", + "action": { + "name": "game.fadeOut", + "action": { + "name": "load", + "file": "ui/gameInfo.json" + } + } + } + ], + "texture": [ + { + "id": "logo", + "file": "images/menus/logo.png" + }, + { + "id": "down", + "file": "images/menus/buttons/down.png" + } + ], + "texturePack": [ + { + "id": "smlogo", + "texture": "logo", + "frames": 1 + }, + { + "id": "focus42", + "texture": "down", + "frames": 4 + } + ], + "image": { + "id": "mainmenu", + "texture": "logo", + "position": ["center", 0], + "anchor": "none" + }, + "animation": [ + { + "id": "pent1", + "texturePack": "focus42", + "position": [67, 192], + "anchor": "none", + "refresh": 50 + }, + { + "id": "pent2", + "texturePack": "focus42", + "position": [537, 192], + "anchor": "none", + "refresh": 50 + } + ], + "menu": { + "id": "menu", + "font": "font42g", + "position": ["center", 192], + "horizontalAlign": "center", + "sound": "titlslct", + "focus": true, + "focusSound": "titlemov", + "anchor": "none", + "verticalPad": 28, + "items": [ + { + "text": "Single Player", + "onClick": { + "name": "load", + "file": "ui/singlePlayer/main.json" + }, + "onFocus": "anchorPentagrams" + }, + { + "text": "Settings", + "onClick": { + "name": "game.fadeOut", + "action": { + "name": "load", + "file": "ui/settings.json" + } + }, + "onFocus": "anchorPentagrams" + }, + { + "text": "Replay Intro", + "onClick": { + "name": "load", + "file": ["ui/playIntro.json", "ui/fadeIn.json"] + }, + "onFocus": "anchorPentagrams" + }, + { + "text": "Credits", + "onClick": { + "name": "game.fadeOut", + "action": { + "name": "load", + "file": "ui/credits.json" + } + }, + "onFocus": "anchorPentagrams" + }, + { + "text": "Exit Flare", + "onClick": { + "name": "game.fadeOut", + "action": { + "name": "game.close" + } + }, + "onFocus": "anchorPentagrams" + } + ] + }, + "button": { + "id": "versionInfo", + "font": "font16s", + "position": [17, 444], + "sound": "titlslct", + "anchor": "none", + "onClick": { + "name": "game.fadeOut", + "action": { + "name": "load", + "file": "ui/settings.json" + } + }, + "onHoverEnter": { "name": "text.setText", "id": "versionInfo", "text": "Change Settings" }, + "onHoverLeave": { + "name": "text.setText", + "id": "versionInfo", + "binding": ["|game|title|", "|game|version|"], + "format": "[1] v[2]" + } + }, + "action": [ + { "name": "menu.setFont", "id": "menu", "index": 1, "idFont": "font42y" }, + { + "name": "text.setText", + "id": "versionInfo", + "binding": ["|game|title|", "|game|version|"], + "format": "[1] v[2]" + } + ] +} \ No newline at end of file diff --git a/gamefilesflare/ui/singlePlayer/main.json b/gamefilesflare/ui/singlePlayer/main.json new file mode 100755 index 00000000..f6230133 --- /dev/null +++ b/gamefilesflare/ui/singlePlayer/main.json @@ -0,0 +1,149 @@ +{ + "action": [ + { "name": "resource.add", "id": "singlePlayer", "ignorePrevious": true }, + { "name": "game.fadeIn" } + ], + "keyboard": [ + { + "key": "esc", + "action": { "name": "button.click", "id": "cancel" } + }, + { + "key": "enter", + "action": { "name": "button.click", "id": "ok" } + } + ], + "texture": { + "id": "down", + "file": "images/menus/buttons/down.png" + }, + "texturePack": [ + { + "id": "focus16", + "texture": "down", + "frames": 4 + }, + { + "id": "focus", + "fromId": "focus16" + } + ], + "image": [ + { + "id": "selhero", + "texture": "selhero", + "anchor": "none" + }, + { + "id": "heros", + "position": [30, 211], + "anchor": "none", + "texture": "heros", + "textureRect": [0, 228, 180, 76] + } + ], + "animation": { + "id": "smlogo", + "texturePack": "smlogo", + "position": ["center", 0], + "anchor": "none", + "refresh": 50 + }, + "text": [ + { + "id": "label1", + "font": "font30s", + "position": [319, 161], + "anchor": "none", + "horizontalAlign": "center" + }, + { + "id": "label2", + "font": "font30s", + "position": [424, 211], + "anchor": "none", + "horizontalAlign": "center" + }, + { + "id": "level", + "font": "font16s", + "text": "Level:", + "position": [149, 323], + "anchor": "none", + "horizontalAlign": "right" + }, + { + "id": "strength", + "font": "font16s", + "text": "Strength:", + "position": [149, 358], + "anchor": "none", + "horizontalAlign": "right" + }, + { + "id": "magic", + "font": "font16s", + "text": "Magic:", + "position": [149, 380], + "anchor": "none", + "horizontalAlign": "right" + }, + { + "id": "dexterity", + "font": "font16s", + "text": "Dexterity:", + "position": [149, 401], + "anchor": "none", + "horizontalAlign": "right" + }, + { + "id": "vitality", + "font": "font16s", + "text": "Vitality:", + "position": [149, 422], + "anchor": "none", + "horizontalAlign": "right" + }, + { + "id": "txtLevel", + "font": "font16s", + "text": "--", + "position": [179, 323], + "anchor": "none", + "horizontalAlign": "center" + }, + { + "id": "txtStrength", + "font": "font16s", + "text": "--", + "position": [179, 358], + "anchor": "none", + "horizontalAlign": "center" + }, + { + "id": "txtMagic", + "font": "font16s", + "text": "--", + "position": [179, 380], + "anchor": "none", + "horizontalAlign": "center" + }, + { + "id": "txtDexterity", + "font": "font16s", + "text": "--", + "position": [179, 401], + "anchor": "none", + "horizontalAlign": "center" + }, + { + "id": "txtVitality", + "font": "font16s", + "text": "--", + "position": [179, 422], + "anchor": "none", + "horizontalAlign": "center" + } + ], + "load": "ui/singlePlayer/select.json" +} \ No newline at end of file diff --git a/gamefilesflare/ui/singlePlayer/select.json b/gamefilesflare/ui/singlePlayer/select.json new file mode 100755 index 00000000..5b0b6680 --- /dev/null +++ b/gamefilesflare/ui/singlePlayer/select.json @@ -0,0 +1,261 @@ +{ + "action": [ + { "name": "resource.add", "id": "singlePlayerSelect" }, + { "name": "text.setText", "id": "label1", "text": "Single Player Characters" }, + { "name": "text.setText", "id": "label2", "text": "Select Hero" }, + { "name": "text.setText", "id": "txtLevel", "text": "--" }, + { "name": "text.setText", "id": "txtStrength", "text": "--" }, + { "name": "text.setText", "id": "txtMagic", "text": "--" }, + { "name": "text.setText", "id": "txtDexterity", "text": "--" }, + { "name": "text.setText", "id": "txtVitality", "text": "--" }, + { + "name": "action.set", + "id": "saveMenu.moveScrollbar", + "action": { "name": "menu.moveScrollbar", "idMenu": "menuLoadGame", "idScrollbar": "sb_thumb", "idAnchorTo": "btnDrag", "range": 133 } + } + ], + "keyboard": { + "key": "delete", + "action": { "name": "button.click", "id": "delete" } + }, + "animation": [ + { + "id": "pent1", + "texturePack": "focus16", + "position": [263, 258], + "anchor": "none", + "refresh": 50 + }, + { + "id": "pent2", + "texturePack": "focus16", + "position": [566, 258], + "anchor": "none", + "refresh": 50 + } + ], + "image": [ + { + "id": "sb_bg", + "position": [586, 245], + "anchor": "none", + "texture": "sb_bg", + "textureRect": [24, 176], + "visible": false + }, + { + "id": "sb_arrowTop", + "position": [586, 245], + "anchor": "none", + "texture": "sb_arrow", + "textureRect": [0, 22, 24, 22], + "visible": false + }, + { + "id": "sb_arrowBottom", + "position": [586, 400], + "anchor": "none", + "texture": "sb_arrow", + "textureRect": [0, 66, 24, 22], + "visible": false + }, + { + "id": "sb_thumb", + "position": [589, 267], + "anchor": "none", + "texture": "sb_thumb", + "visible": false + } + ], + "menu": { + "id": "menuLoadGame", + "font": "font24g", + "position": [423, 260], + "horizontalAlign": "center", + "anchor": "none", + "sound": "titlemov", + "focus": true, + "focusOnClick": false, + "focusSound": "titlemov", + "verticalPad": 16, + "visibleItems": 6, + "size": [270, 164], + "onScrollDown": "focus.moveDown", + "onScrollUp": "focus.moveUp", + "items": [ + { + "load": "game|saves", + "text": "%save%", + "onClick": [ + { "name": "load", "file": ["ui/loadCharInfo.json", "|focus|text|"] }, + { "name": "load", "file": "ui/singlePlayer/setPlayerImage.json" }, + "anchorPentagrams", + { "name": "button.enable", "id": "delete" }, + { "name": "text.setFont", "id": "delete", "idFont": "font30g" }, + "saveMenu.moveScrollbar" + ], + "onDoubleClick": { "name": "button.click", "id": "ok" }, + "onFocus": "focus.clickNoSound" + }, + { + "text": "New Hero", + "onClick": [ + { "name": "load", "file": "ui/charInfoDefault.json" }, + { "name": "load", "file": "ui/singlePlayer/setPlayerImage.json" }, + "anchorPentagrams", + { "name": "button.enable", "id": "delete", "enable": false }, + { "name": "text.setFont", "id": "delete", "idFont": "font30s" }, + "saveMenu.moveScrollbar" + ], + "onDoubleClick": { "name": "button.click", "id": "ok" }, + "onFocus": "focus.clickNoSound" + } + ] + }, + "button": [ + { + "id": "ok", + "font": "font30g", + "position": [279, 429], + "anchor": "none", + "onClick": { + "name": "if.equal", + "param1": "|focus|text|", + "param2": "New Hero", + "then": [ + { "name": "resource.pop" }, + { "name": "load", "file": "ui/singlePlayer/new.json" } + ], + "else": { "name": "load", "file": ["level/loadGame.json", "|focus|text|"] } + }, + "sound": "titlslct", + "text": "OK" + }, + { + "id": "delete", + "font": "font30g", + "position": [378, 429], + "anchor": "none", + "onClick": [ + { "name": "load", "file": ["ui/singlePlayer/delete.json", "|focus|text|"] } + ], + "sound": "titlslct", + "text": "Delete" + }, + { + "id": "cancel", + "font": "font30g", + "position": [501, 429], + "anchor": "none", + "onClick": { + "name": "game.fadeOut", + "action": [ + { "name": "resource.pop" }, + { "name": "resource.pop", "ignorePrevious": false }, + { "name": "game.fadeIn" } + ] + }, + "sound": "titlslct", + "text": "Cancel" + }, + { + "id": "btnUp", + "texture": "empty", + "position": [586, 245], + "anchor": "none", + "textureRect": [24, 22], + "onClick": [ + "focus.moveUp", + "saveMenu.moveScrollbar" + ], + "onClickIn": { "name": "image.setTextureRect", "id": "sb_arrowTop", "rect": [0, 0, 24, 22] }, + "onClickOut": { "name": "image.setTextureRect", "id": "sb_arrowTop", "rect": [0, 22, 24, 22] }, + "enable": false + }, + { + "id": "btnDrag", + "texture": "empty", + "position": [589, 267], + "anchor": "none", + "textureRect": [18, 133], + "onClick": [ + { + "name": "drawable.centerOnMouseY", + "id": "sb_thumb", + "idAnchorTo": "btnDrag", + "range": 133, + "steps": "|menuLoadGame|itemCount|" + }, + { + "name": "menu.moveScrollbar", + "idMenu": "menuLoadGame", + "idScrollbar": "sb_thumb", + "idAnchorTo": "btnDrag", + "range": 133, + "focus": true + } + ], + "onClickDrag": { "name": "button.click", "id": "btnDrag" }, + "enable": false + }, + { + "id": "btnDown", + "texture": "empty", + "position": [586, 400], + "anchor": "none", + "textureRect": [24, 22], + "onClick": [ + "focus.moveDown", + "saveMenu.moveScrollbar" + ], + "onClickIn": { "name": "image.setTextureRect", "id": "sb_arrowBottom", "rect": [0, 44, 24, 22] }, + "onClickOut": { "name": "image.setTextureRect", "id": "sb_arrowBottom", "rect": [0, 66, 24, 22] }, + "enable": false + } + ], + "action": [ + "focus.clickNoSound", + { + "name": "if.greater", + "param1": "|menuLoadGame|itemCount|", + "param2": 6, + "then": [ + { "name": "drawable.visible", "id": "sb_bg", "visible": true }, + { "name": "drawable.visible", "id": "sb_arrowTop", "visible": true }, + { "name": "drawable.visible", "id": "sb_arrowBottom", "visible": true }, + { "name": "drawable.visible", "id": "sb_thumb", "visible": true }, + { "name": "button.enable", "id": "btnUp" }, + { "name": "button.enable", "id": "btnDrag" }, + { "name": "button.enable", "id": "btnDown" }, + { "name": "loadJson", + "json": { + "keyboard": [ + { + "key": ["up", "w"], + "action": [ + "focus.moveUp", + "saveMenu.moveScrollbar" + ] + }, + { + "key": "tab", + "shift": true, + "action": [ + "focus.moveUp", + "saveMenu.moveScrollbar" + ] + }, + { + "key": ["down", "s", "tab"], + "action": [ + "focus.moveDown", + "saveMenu.moveScrollbar" + ] + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/gamefileshf/ui/level/menu/game.json b/gamefileshf/ui/level/menu/game.json index e6c44c9b..eb7d212b 100755 --- a/gamefileshf/ui/level/menu/game.json +++ b/gamefileshf/ui/level/menu/game.json @@ -6,7 +6,7 @@ "button": [ { "id": "saveGame", - "bitmapFont": "bigtgold", + "font": "bigtgold", "sound": "titlemov", "focus": true, "focusSound": "titlemov", @@ -22,7 +22,7 @@ }, { "id": "options", - "bitmapFont": "bigtgold", + "font": "bigtgold", "sound": "titlemov", "focus": true, "focusSound": "titlemov", @@ -42,7 +42,7 @@ }, { "id": "newGame", - "bitmapFont": "bigtgold", + "font": "bigtgold", "sound": "titlemov", "focus": true, "focusSound": "titlemov", @@ -65,7 +65,7 @@ }, { "id": "loadGame", - "bitmapFont": "bigtgold", + "font": "bigtgold", "sound": "titlemov", "focus": true, "focusSound": "titlemov", @@ -81,7 +81,7 @@ }, { "id": "quitHellfire", - "bitmapFont": "bigtgold", + "font": "bigtgold", "sound": "titlemov", "focus": true, "focusSound": "titlemov", diff --git a/gamefileshf/ui/level/menu/game2.json b/gamefileshf/ui/level/menu/game2.json index 37ed16c8..28ceeffa 100755 --- a/gamefileshf/ui/level/menu/game2.json +++ b/gamefileshf/ui/level/menu/game2.json @@ -283,7 +283,7 @@ }, { "id": "music", - "bitmapFont": "bigtgold", + "font": "bigtgold", "sound": "titlemov", "focus": true, "focusOnClick": false, @@ -313,7 +313,7 @@ }, { "id": "sound", - "bitmapFont": "bigtgold", + "font": "bigtgold", "sound": "titlemov", "focus": true, "focusOnClick": false, @@ -343,7 +343,7 @@ }, { "id": "gamma", - "bitmapFont": "bigtgold", + "font": "bigtgold", "sound": "titlemov", "focus": true, "focusOnClick": false, @@ -373,7 +373,7 @@ }, { "id": "jog", - "bitmapFont": "bigtgold", + "font": "bigtgold", "sound": "titlemov", "focus": true, "focusOnClick": false, @@ -403,7 +403,7 @@ }, { "id": "previousMenu", - "bitmapFont": "bigtgold", + "font": "bigtgold", "sound": "titlemov", "focus": true, "focusSound": "titlemov", diff --git a/gamefileshf/ui/mainMenu.json b/gamefileshf/ui/mainMenu.json index 8e1d7c59..40e74c89 100755 --- a/gamefileshf/ui/mainMenu.json +++ b/gamefileshf/ui/mainMenu.json @@ -95,13 +95,12 @@ ], "menu": { "id": "menu", - "bitmapFont": "font42g", + "font": "font42g", "position": [319, 192], "sound": "titlslct", "focus": true, "focusSound": "titlemov", "anchor": "none", - "verticalPad": 1, "items": [ { "text": "Single Player", @@ -110,19 +109,13 @@ "name": "load", "file": "ui/singlePlayer/main.json" }, - "onFocus": [ - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } - ] + "onFocus": "anchorPentagrams" }, { "text": "Multi Player", "position": [172, 235], "enable": false, - "onFocus": [ - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } - ] + "onFocus": "anchorPentagrams" }, { "text": "Replay Intro", @@ -131,10 +124,7 @@ "name": "load", "file": ["ui/playIntro.json", "ui/fadeIn.json"] }, - "onFocus": [ - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } - ] + "onFocus": "anchorPentagrams" }, { "text": "Support", @@ -146,10 +136,7 @@ "file": "ui/support.json" } }, - "onFocus": [ - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } - ] + "onFocus": "anchorPentagrams" }, { "text": "Credits", @@ -161,10 +148,7 @@ "file": "ui/credits.json" } }, - "onFocus": [ - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } - ] + "onFocus": "anchorPentagrams" }, { "text": "Exit Hellfire", @@ -175,16 +159,13 @@ "name": "game.close" } }, - "onFocus": [ - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } - ] + "onFocus": "anchorPentagrams" } ] }, "button": { "id": "versionInfo", - "bitmapFont": "font16s", + "font": "font16s", "position": [17, 444], "sound": "titlslct", "anchor": "none", diff --git a/gamefileshf/ui/settings2.json b/gamefileshf/ui/settings2.json deleted file mode 100755 index d47cac9e..00000000 --- a/gamefileshf/ui/settings2.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "animation": { - "id": "smlogo", - "texturePack": "smlogo", - "position": [0, 0], - "anchor": "none", - "refresh": 50 - } -} \ No newline at end of file diff --git a/gamefileshf/ui/singlePlayer/main.json b/gamefileshf/ui/singlePlayer/main.json index 5f4df42d..82b9911e 100755 --- a/gamefileshf/ui/singlePlayer/main.json +++ b/gamefileshf/ui/singlePlayer/main.json @@ -16,35 +16,35 @@ "texture": [ { "id": "selhero", - "file":"ui_art/selhero.pcx" + "file": "ui_art/selhero.pcx" }, { "id": "heros", - "file":"ui_art/heros.pcx" + "file": "ui_art/heros.pcx" }, { "id": "focus16", - "file":"ui_art/focus16.pcx", + "file": "ui_art/focus16.pcx", "mask": "0x00FF00" }, { "id": "focus", - "file":"ui_art/focus.pcx", + "file": "ui_art/focus.pcx", "mask": "0x00FF00" }, { "id": "sb_arrow", - "file":"ui_art/sb_arrow.pcx", + "file": "ui_art/sb_arrow.pcx", "mask": "0xFFFFFF" }, { "id": "sb_bg", - "file":"ui_art/sb_bg.pcx", + "file": "ui_art/sb_bg.pcx", "mask": "0xFFFFFF" }, { "id": "sb_thumb", - "file":"ui_art/sb_thumb.pcx", + "file": "ui_art/sb_thumb.pcx", "mask": "0xFFFFFF" } ], @@ -82,28 +82,28 @@ "animation": { "id": "smlogo", "texturePack": "smlogo", - "position": [0, 0], + "position": ["center", 0], "anchor": "none", "refresh": 50 }, "text": [ { "id": "label1", - "bitmapFont": "font30s", + "font": "font30s", "position": [320, 161], "anchor": "none", "horizontalAlign": "center" }, { "id": "label2", - "bitmapFont": "font30s", + "font": "font30s", "position": [425, 211], "anchor": "none", "horizontalAlign": "center" }, { "id": "level", - "bitmapFont": "font16s", + "font": "font16s", "text": "Level:", "position": [149, 323], "anchor": "none", @@ -111,7 +111,7 @@ }, { "id": "strength", - "bitmapFont": "font16s", + "font": "font16s", "text": "Strength:", "position": [149, 358], "anchor": "none", @@ -119,7 +119,7 @@ }, { "id": "magic", - "bitmapFont": "font16s", + "font": "font16s", "text": "Magic:", "position": [149, 380], "anchor": "none", @@ -127,7 +127,7 @@ }, { "id": "dexterity", - "bitmapFont": "font16s", + "font": "font16s", "text": "Dexterity:", "position": [149, 401], "anchor": "none", @@ -135,7 +135,7 @@ }, { "id": "vitality", - "bitmapFont": "font16s", + "font": "font16s", "text": "Vitality:", "position": [149, 422], "anchor": "none", @@ -143,7 +143,7 @@ }, { "id": "txtLevel", - "bitmapFont": "font16s", + "font": "font16s", "text": "--", "position": [179, 323], "anchor": "none", @@ -151,7 +151,7 @@ }, { "id": "txtStrength", - "bitmapFont": "font16s", + "font": "font16s", "text": "--", "position": [179, 358], "anchor": "none", @@ -159,7 +159,7 @@ }, { "id": "txtMagic", - "bitmapFont": "font16s", + "font": "font16s", "text": "--", "position": [179, 380], "anchor": "none", @@ -167,7 +167,7 @@ }, { "id": "txtDexterity", - "bitmapFont": "font16s", + "font": "font16s", "text": "--", "position": [179, 401], "anchor": "none", @@ -175,7 +175,7 @@ }, { "id": "txtVitality", - "bitmapFont": "font16s", + "font": "font16s", "text": "--", "position": [179, 422], "anchor": "none", diff --git a/gamefileshf/ui/singlePlayer/newHero.json b/gamefileshf/ui/singlePlayer/newHero.json index 4e9e6863..64a5d9a5 100755 --- a/gamefileshf/ui/singlePlayer/newHero.json +++ b/gamefileshf/ui/singlePlayer/newHero.json @@ -30,7 +30,7 @@ { "id": "warrior", "horizontalAlign": "center", - "bitmapFont": "font24g", + "font": "font24g", "position": [424, 256], "anchor": "none", "onClick": [ @@ -42,8 +42,7 @@ { "name": "text.setText", "id": "txtMagic", "text": "10" }, { "name": "text.setText", "id": "txtDexterity", "text": "20" }, { "name": "text.setText", "id": "txtVitality", "text": "25" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } + "anchorPentagrams" ], "onFocus": { "name": "button.click", "id": "warrior" }, "focusOnClick": false, @@ -53,7 +52,7 @@ { "id": "rogue", "horizontalAlign": "center", - "bitmapFont": "font24g", + "font": "font24g", "position": [425, 282], "anchor": "none", "onClick": [ @@ -65,8 +64,7 @@ { "name": "text.setText", "id": "txtMagic", "text": "15" }, { "name": "text.setText", "id": "txtDexterity", "text": "30" }, { "name": "text.setText", "id": "txtVitality", "text": "20" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } + "anchorPentagrams" ], "onFocus": { "name": "button.click", "id": "rogue" }, "focusOnClick": false, @@ -76,7 +74,7 @@ { "id": "sorcerer", "horizontalAlign": "center", - "bitmapFont": "font24g", + "font": "font24g", "position": [424, 308], "anchor": "none", "onClick": [ @@ -88,8 +86,7 @@ { "name": "text.setText", "id": "txtMagic", "text": "35" }, { "name": "text.setText", "id": "txtDexterity", "text": "15" }, { "name": "text.setText", "id": "txtVitality", "text": "20" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } + "anchorPentagrams" ], "onFocus": { "name": "button.click", "id": "sorcerer" }, "focusOnClick": false, @@ -99,7 +96,7 @@ { "id": "monk", "horizontalAlign": "center", - "bitmapFont": "font24g", + "font": "font24g", "position": [424, 334], "anchor": "none", "onClick": [ @@ -111,8 +108,7 @@ { "name": "text.setText", "id": "txtMagic", "text": "15" }, { "name": "text.setText", "id": "txtDexterity", "text": "25" }, { "name": "text.setText", "id": "txtVitality", "text": "20" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } + "anchorPentagrams" ], "onFocus": { "name": "button.click", "id": "monk" }, "focusOnClick": false, @@ -122,7 +118,7 @@ { "id": "bard", "horizontalAlign": "center", - "bitmapFont": "font24g", + "font": "font24g", "position": [424, 363], "anchor": "none", "onClick": [ @@ -134,8 +130,7 @@ { "name": "text.setText", "id": "txtMagic", "text": "20" }, { "name": "text.setText", "id": "txtDexterity", "text": "25" }, { "name": "text.setText", "id": "txtVitality", "text": "20" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } + "anchorPentagrams" ], "onFocus": { "name": "button.click", "id": "bard" }, "focusOnClick": false, @@ -145,7 +140,7 @@ { "id": "barbarian", "horizontalAlign": "center", - "bitmapFont": "font24g", + "font": "font24g", "position": [424, 387], "anchor": "none", "onClick": [ @@ -157,8 +152,7 @@ { "name": "text.setText", "id": "txtMagic", "text": "0" }, { "name": "text.setText", "id": "txtDexterity", "text": "20" }, { "name": "text.setText", "id": "txtVitality", "text": "25" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } + "anchorPentagrams" ], "onFocus": { "name": "button.click", "id": "barbarian" }, "focusOnClick": false, @@ -167,7 +161,7 @@ }, { "id": "ok", - "bitmapFont": "font30g", + "font": "font30g", "position": [329, 429], "anchor": "none", "onClick": [ @@ -179,7 +173,7 @@ }, { "id": "cancel", - "bitmapFont": "font30g", + "font": "font30g", "position": [451, 429], "anchor": "none", "onClick": [ @@ -191,8 +185,5 @@ "text": "Cancel" } ], - "action": [ - { "name": "drawable.verticalAnchorToFocused", "id": "pent1" }, - { "name": "drawable.verticalAnchorToFocused", "id": "pent2" } - ] + "action": "anchorPentagrams" } \ No newline at end of file diff --git a/gamefileshf/ui/support.json b/gamefileshf/ui/support.json index 795237e0..d2d67d37 100755 --- a/gamefileshf/ui/support.json +++ b/gamefileshf/ui/support.json @@ -52,7 +52,7 @@ "file": "ui/support.txt", "anchor": "none", "position": [30, 115], - "boxSize": [580, 250], + "size": [580, 250], "onComplete": { "name": "game.fadeOut", "action": [ diff --git a/src/Actions/ActImage.h b/src/Actions/ActImage.h index cbe092cb..39a44724 100755 --- a/src/Actions/ActImage.h +++ b/src/Actions/ActImage.h @@ -221,14 +221,20 @@ class ActImageSetTextureFromItem : public Action auto item = level->getItem(itemLocation); if (item != nullptr) { - const sf::Texture* texture; - sf::IntRect rect; - if (item->Class()->getInventoryTexture(&texture, rect) == true) + TextureInfo ti; + if (item->Class()->getInventoryTexture(ti) == true) { - image->setTexture(*texture); + image->setTexture(*ti.texture); if (resetRect == true) { - image->setTextureRect(rect); + image->setTextureRect(ti.textureRect); + } + else + { + auto oldRect = image->getTextureRect(); + oldRect.left = ti.textureRect.left; + oldRect.top = ti.textureRect.top; + image->setTextureRect(oldRect); } } if (item->Class()->getInventoryTexturePack()->isIndexed() == true) @@ -251,12 +257,12 @@ class ActImageSetTextureFromPack : public Action private: std::string id; std::string idTexturePack; - std::pair textureIdx; + size_t textureIdx; bool resetRect; public: ActImageSetTextureFromPack(const std::string& id_, - const std::string& idTexturePack_, const std::pair& textureIdx_, + const std::string& idTexturePack_, size_t textureIdx_, bool resetRect_) : id(id_), idTexturePack(idTexturePack_), textureIdx(textureIdx_), resetRect(resetRect_) {} @@ -268,14 +274,20 @@ class ActImageSetTextureFromPack : public Action auto tex = game.Resources().getTexturePack(idTexturePack); if (tex != nullptr) { - const sf::Texture* texture; - sf::IntRect rect; - if (tex->get(textureIdx.first, textureIdx.second, &texture, rect) == true) + TextureInfo ti; + if (tex->get(textureIdx, ti) == true) { - image->setTexture(*texture); + image->setTexture(*ti.texture); if (resetRect == true) { - image->setTextureRect(rect); + image->setTextureRect(ti.textureRect); + } + else + { + auto oldRect = image->getTextureRect(); + oldRect.left = ti.textureRect.left; + oldRect.top = ti.textureRect.top; + image->setTextureRect(oldRect); } } if (tex->isIndexed() == true) diff --git a/src/Actions/ActItem.h b/src/Actions/ActItem.h index 52495974..dbb99211 100755 --- a/src/Actions/ActItem.h +++ b/src/Actions/ActItem.h @@ -9,12 +9,11 @@ static void updateCursorWithItemImage(Game& game, const Item& item) { - const sf::Texture* texture; - sf::IntRect rect; - if (item.Class()->getInventoryTexture(&texture, rect) == true) + TextureInfo ti; + if (item.Class()->getInventoryTexture(ti) == true) { - auto image = std::make_shared(*texture); - image->setTextureRect(rect); + auto image = std::make_shared(*ti.texture); + image->setTextureRect(ti.textureRect); if (item.Class()->getInventoryTexturePack()->isIndexed() == true) { image->setPalette(item.Class()->getInventoryTexturePack()->getPalette()); @@ -68,11 +67,8 @@ class ActItemDrop : public Action auto mapPos = level->getMapCoordOverMouse(); if (level->setItem(mapPos, item2) == true) { - item->resetDropAnimation(); - if (game.Resources().cursorCount() > 1) - { - game.Resources().popCursor(); - } + item->resetDropAnimation(*level); + game.Resources().popCursor(); game.updateCursorPosition(); item->Class()->executeAction(game, str2int16("levelDrop")); @@ -110,7 +106,7 @@ class ActItemExecuteDropAction : public Action auto item = level->getItem(mapPos); if (item != nullptr) { - item->resetDropAnimation(); + item->resetDropAnimation(*level); item->Class()->executeAction(game, str2int16("levelDrop")); } } @@ -355,10 +351,7 @@ class ActItemUpdate : public Action { auto oldItem = oldItem2.get(); player->SelectedItem(std::move(oldItem2)); - if (game.Resources().cursorCount() > 1) - { - game.Resources().popCursor(); - } + game.Resources().popCursor(); if (oldItem != nullptr) { updateCursorWithItemImage(game, *oldItem); diff --git a/src/Actions/ActLevel.h b/src/Actions/ActLevel.h index 2c0bb7c0..8b06e7c0 100755 --- a/src/Actions/ActLevel.h +++ b/src/Actions/ActLevel.h @@ -73,7 +73,7 @@ class ActLevelClearPlayerTextures : public Action public: ActLevelClearPlayerTextures(const std::string& id_) : id(id_) {} - virtual bool execute(Game& game) + virtual bool execute(Game& game) noexcept { auto level = game.Resources().getLevel(id); if (level != nullptr) @@ -117,7 +117,7 @@ class ActLevelMoveToClick : public Action auto level = game.Resources().getLevel(id); if (level != nullptr) { - level->move(game); + level->move(); } return true; } @@ -157,7 +157,7 @@ class ActLevelPause : public Action public: ActLevelPause(const std::string& id_, bool pause_) : id(id_), pause(pause_) {} - virtual bool execute(Game& game) + virtual bool execute(Game& game) noexcept { auto level = game.Resources().getLevel(id); if (level != nullptr) @@ -180,7 +180,7 @@ class ActLevelZoom : public Action ActLevelZoom(const std::string& id_, int percentage_, bool relative_, bool smooth_) : id(id_), percentage(percentage_), relative(relative_), smooth(smooth_) {} - virtual bool execute(Game& game) + virtual bool execute(Game& game) noexcept { auto level = game.Resources().getLevel(id); if (level != nullptr) diff --git a/src/Actions/ActMenu.h b/src/Actions/ActMenu.h index 153903d4..f86f8319 100755 --- a/src/Actions/ActMenu.h +++ b/src/Actions/ActMenu.h @@ -205,27 +205,23 @@ class ActMenuSetFont : public Action auto button = menu->getItem(idx); if (button != nullptr) { + auto newFont = game.Resources().getFont(idFont); auto text = button->getDrawableText(); - if (text != nullptr) + if (hasNullFont(newFont) == false && + text != nullptr) { auto bitmapText = dynamic_cast(text); - if (bitmapText != nullptr) + if (bitmapText != nullptr && + hasBitmapFont(newFont) == true) { - auto newFont = game.Resources().getBitmapFont(idFont); - if (newFont != nullptr) - { - bitmapText->setFont(newFont); - } + bitmapText->setFont(std::get>(newFont)); return true; } auto stringText = dynamic_cast(text); - if (stringText != nullptr) + if (stringText != nullptr && + hasFreeTypeFont(newFont) == true) { - auto newFont = game.Resources().getFont(idFont); - if (newFont != nullptr) - { - stringText->setFont(*newFont); - } + stringText->setFont(*std::get>(newFont)); } } } diff --git a/src/Actions/ActQuest.h b/src/Actions/ActQuest.h index 469e2679..e4d8c6af 100755 --- a/src/Actions/ActQuest.h +++ b/src/Actions/ActQuest.h @@ -58,7 +58,7 @@ class ActQuestSetState : public Action ActQuestSetState(const std::string& idLevel_, const std::string& idQuest_, int state_) : idLevel(idLevel_), idQuest(idQuest_), state(state_) {} - virtual bool execute(Game& game) + virtual bool execute(Game& game) noexcept { auto level = game.Resources().getLevel(idLevel); if (level != nullptr) diff --git a/src/Actions/ActText.h b/src/Actions/ActText.h index 208341b8..5dfd0077 100755 --- a/src/Actions/ActText.h +++ b/src/Actions/ActText.h @@ -82,27 +82,23 @@ class ActTextSetFont : public Action auto text2 = game.Resources().getResource(id); if (text2 != nullptr) { + auto newFont = game.Resources().getFont(idFont); auto text = text2->getDrawableText(); - if (text != nullptr) + if (hasNullFont(newFont) == false && + text != nullptr) { auto bitmapText = dynamic_cast(text); - if (bitmapText != nullptr) + if (bitmapText != nullptr && + hasBitmapFont(newFont) == true) { - auto newFont = game.Resources().getBitmapFont(idFont); - if (newFont != nullptr) - { - bitmapText->setFont(newFont); - } + bitmapText->setFont(std::get>(newFont)); return true; } auto stringText = dynamic_cast(text); - if (stringText != nullptr) + if (stringText != nullptr && + hasFreeTypeFont(newFont) == true) { - auto newFont = game.Resources().getFont(idFont); - if (newFont != nullptr) - { - stringText->setFont(*newFont); - } + stringText->setFont(*std::get>(newFont)); } } } diff --git a/src/Alignment.h b/src/Alignment.h index 4a2a1373..6d40a162 100755 --- a/src/Alignment.h +++ b/src/Alignment.h @@ -9,7 +9,7 @@ enum class HorizontalAlign enum class VerticalAlign { - Bottom, + Top, Center, - Top + Bottom }; diff --git a/src/Animation.cpp b/src/Animation.cpp index 73d7db3b..3a67812a 100755 --- a/src/Animation.cpp +++ b/src/Animation.cpp @@ -2,10 +2,9 @@ #include "Game.h" Animation::Animation(const std::shared_ptr& texturePack_, - size_t frameStart_, size_t frameEnd_, const sf::Time& frameTime, - bool pause_, bool loop_) : texturePack(texturePack_), - frameStart(frameStart_), frameEnd(frameEnd_), frameIdx(frameStart_), - frameTime(frameTime), pause(pause_), loop(loop_) + const std::pair& textureIndexRange, const sf::Time& frameTime, + AnimationType type, bool pause) : texturePack(texturePack_), + base(textureIndexRange, frameTime, type, pause) { if (texturePack_->isIndexed() == true) { @@ -16,51 +15,19 @@ Animation::Animation(const std::shared_ptr& texturePack_, void Animation::updateTexture() { - const sf::Texture* texture; - sf::IntRect rect; - if (texturePack->get(frameIdx, &texture, rect) == true) + TextureInfo ti; + if (texturePack->get(base.currentTextureIdx, ti) == true) { - setTexture(*texture); - setTextureRect(rect); - } -} - -void Animation::updateFrameIndex() noexcept -{ - if (frameIdx < frameEnd) - { - frameIdx++; - } - else - { - frameIdx = frameStart; - - if (loop == false) - { - pause = true; - } + setTexture(*ti.texture); + setTextureRect(ti.textureRect); } } void Animation::update(Game& game) noexcept { - if (pause == true || - frameEnd <= frameStart || - Visible() == false) - { - return; - } - - // add delta time - currentTime += game.getElapsedTime(); - - // if current time is bigger then the frame time advance one frame - if (currentTime >= frameTime) + if (Visible() == true && + base.update(game.getElapsedTime()) == true) { - // reset time, but keep the remainder - currentTime = sf::microseconds(currentTime.asMicroseconds() % frameTime.asMicroseconds()); - updateTexture(); - updateFrameIndex(); } } diff --git a/src/Animation.h b/src/Animation.h index 26d5be73..e9a0830d 100755 --- a/src/Animation.h +++ b/src/Animation.h @@ -1,49 +1,28 @@ -// Based on the Animation class for SFML by Maximilian Wagenbach (aka. Foaly) (foaly.f@web.de) -// https://github.com/SFML/SFML/wiki/Source:-AnimatedSprite - #pragma once +#include "BaseAnimation.h" #include "Image.h" #include -#include #include "TexturePacks/TexturePack.h" class Animation : public Image { private: std::shared_ptr texturePack; - size_t frameStart{ 0 }; - size_t frameEnd{ 0 }; - size_t frameIdx{ 0 }; - - sf::Time frameTime; - sf::Time currentTime; - bool pause{ true }; - bool loop{ false }; + BaseAnimation base; void updateTexture(); - void updateFrameIndex() noexcept; public: Animation(const sf::Texture& texture) : Image(texture) {} Animation(const std::shared_ptr& texturePack_, - size_t frameStart_, size_t frameEnd_, + const std::pair& textureIndexRange, const sf::Time& frameTime = sf::milliseconds(50), - bool pause_ = false, bool loop_ = true); - - sf::Time getFrameTime() const noexcept { return frameTime; } - void setFrameTime(sf::Time time) noexcept { frameTime = time; } + AnimationType type = AnimationType::Looped, bool pause = false); - bool Pause() const noexcept { return pause; } - void Pause(bool pause_) noexcept { pause = pause_; } - bool Loop() const noexcept { return loop; } - void Loop(bool loop_) noexcept { loop = loop_; } - void stop() noexcept - { - pause = true; - frameIdx = frameStart; - } + sf::Time getFrameTime() const noexcept { return base.frameTime; } + void setFrameTime(sf::Time time) noexcept { base.frameTime = time; } virtual void update(Game& game) noexcept; }; diff --git a/src/AnimationType.h b/src/AnimationType.h new file mode 100755 index 00000000..6ebfa421 --- /dev/null +++ b/src/AnimationType.h @@ -0,0 +1,8 @@ +#pragma once + +enum class AnimationType : int +{ + PlayOnce, + Looped, + BackAndForth +}; diff --git a/src/BaseAnimation.cpp b/src/BaseAnimation.cpp new file mode 100755 index 00000000..744686ad --- /dev/null +++ b/src/BaseAnimation.cpp @@ -0,0 +1,69 @@ +#include "BaseAnimation.h" + +void BaseAnimation::updateFrameIndex() noexcept +{ + if (animType != AnimationType::BackAndForth) + { + if (currentTextureIdx < textureIndexRange.second) + { + currentTextureIdx++; + } + else + { + currentTextureIdx = textureIndexRange.first; + } + } + else + { + if (backDirection == false) + { + if (currentTextureIdx < textureIndexRange.second) + { + currentTextureIdx++; + } + if (currentTextureIdx == textureIndexRange.second) + { + backDirection = true; + } + } + else + { + if (currentTextureIdx > textureIndexRange.first) + { + currentTextureIdx--; + } + if (currentTextureIdx == textureIndexRange.first) + { + backDirection = false; + } + } + } +} + +bool BaseAnimation::update(sf::Time elapsedTime) noexcept +{ + if (pause == true || + textureIndexRange.second <= textureIndexRange.first) + { + return false; + } + if (animType == AnimationType::PlayOnce && + currentTextureIdx >= textureIndexRange.second) + { + return false; + } + + // add delta time + currentTime += elapsedTime; + + // if current time is bigger then the frame time advance one frame + if (currentTime >= frameTime) + { + // reset time, but keep the remainder + currentTime = sf::microseconds(currentTime.asMicroseconds() % frameTime.asMicroseconds()); + + updateFrameIndex(); + return true; + } + return false; +} diff --git a/src/BaseAnimation.h b/src/BaseAnimation.h new file mode 100755 index 00000000..449091e2 --- /dev/null +++ b/src/BaseAnimation.h @@ -0,0 +1,45 @@ +// Based on the Animation class for SFML by Maximilian Wagenbach (aka. Foaly) (foaly.f@web.de) +// https://github.com/SFML/SFML/wiki/Source:-AnimatedSprite + +#pragma once + +#include "AnimationType.h" +#include +#include + +class BaseAnimation +{ +public: + std::pair textureIndexRange; + size_t currentTextureIdx{ 0 }; + + sf::Time frameTime{ sf::milliseconds(50) }; + sf::Time currentTime; + AnimationType animType{ AnimationType::PlayOnce }; + bool pause{ false }; + bool backDirection{ false }; + +private: + void updateFrameIndex() noexcept; + +public: + BaseAnimation() {} + BaseAnimation(const std::pair& textureIndexRange_, + const sf::Time& frameTime_, AnimationType animType_, bool pause_) + : textureIndexRange(textureIndexRange_), currentTextureIdx(textureIndexRange_.first), + frameTime(frameTime_), animType(animType_), pause(pause_) {} + + void clear() noexcept + { + textureIndexRange.first = 0; + textureIndexRange.second = 0; + backDirection = false; + } + void reset() noexcept + { + currentTextureIdx = textureIndexRange.first; + backDirection = false; + } + + bool update(sf::Time elapsedTime) noexcept; +}; diff --git a/src/Font.h b/src/Font.h new file mode 100755 index 00000000..e62a95e1 --- /dev/null +++ b/src/Font.h @@ -0,0 +1,15 @@ +#pragma once + +#include "BitmapFont.h" +#include "FreeTypeFont.h" +#include + +typedef std::variant< + nullptr_t, + std::shared_ptr, + std::shared_ptr> + Font; + +#define hasNullFont std::holds_alternative +#define hasBitmapFont std::holds_alternative> +#define hasFreeTypeFont std::holds_alternative> diff --git a/src/Font2.h b/src/FreeTypeFont.h similarity index 71% rename from src/Font2.h rename to src/FreeTypeFont.h index 92a6e4b3..e275a7a3 100755 --- a/src/Font2.h +++ b/src/FreeTypeFont.h @@ -4,13 +4,13 @@ #include #include "PhysFSStream.h" -class Font2 : public sf::Font +class FreeTypeFont : public sf::Font { private: std::shared_ptr file; public: - Font2(const std::shared_ptr& file_) : file(file_) {} + FreeTypeFont(const std::shared_ptr& file_) : file(file_) {} bool load() { diff --git a/src/Game/BaseLevelObject.cpp b/src/Game/BaseLevelObject.cpp index abb85ac0..8eebf2c0 100755 --- a/src/Game/BaseLevelObject.cpp +++ b/src/Game/BaseLevelObject.cpp @@ -2,25 +2,9 @@ #include "Game.h" #include "Game/Level.h" -void BaseLevelObject::checkAndUpdateTextureIndex() noexcept -{ - if (currentTextureIdx < textureStartIdx || currentTextureIdx >= textureEndIdx) - { - currentTextureIdx = textureStartIdx; - } -} - bool BaseLevelObject::hasValidState() const noexcept { - return (texturePack == nullptr || textureStartIdx > textureEndIdx) == false; -} - -sf::Vector2f BaseLevelObject::getBasePosition(const Level& level) const -{ - return sf::Vector2f( - std::round(sprite.getPosition().x + (float)(sprite.getTextureRect().width / 2)), - std::round(sprite.getPosition().y + (float)(sprite.getTextureRect().height - (level.TileHeight() / 2))) - ); + return (texturePack != nullptr); } void BaseLevelObject::updateDrawPosition(const Level& level) @@ -28,12 +12,17 @@ void BaseLevelObject::updateDrawPosition(const Level& level) updateDrawPosition(level, level.Map().getCoord(mapPosition)); } -void BaseLevelObject::updateDrawPosition(const Level& level, sf::Vector2f drawPos) +void BaseLevelObject::updateDrawPosition(const Level& level, const sf::Vector2f& drawPos) { + basePosition.x = drawPos.x + (level.TileWidth() / 2); + basePosition.y = drawPos.y + (level.TileHeight() / 2); + const auto& texSize = sprite.getTextureRect(); - drawPos.x += std::round((float)(-((int)texSize.width / 2)) + (level.TileWidth() / 2)); - drawPos.y += std::round((float)(level.PillarHeight() - ((int)texSize.height))); - sprite.setPosition(drawPos); + + originalPosition.x = basePosition.x - (texSize.width / 2); + originalPosition.y = drawPos.y - texSize.height + level.TileHeight(); + + sprite.setPosition(originalPosition + offset); } void BaseLevelObject::updateHover(Game& game, Level& level, LevelObject* levelObj) @@ -132,12 +121,12 @@ void BaseLevelObject::updateMapPositionFront(Level& level, const MapCoord pos, bool BaseLevelObject::updateTexture() { - const sf::Texture* texture; - sf::IntRect rect; - if (texturePack->get(currentTextureIdx, texturePackIdx, &texture, rect) == true) + TextureInfo ti; + if (texturePack->get(animation.currentTextureIdx, ti) == true) { - sprite.setTexture(*texture, false); - sprite.setTextureRect(rect); + offset = ti.offset; + sprite.setTexture(*ti.texture, false); + sprite.setTextureRect(ti.textureRect); return true; } return false; diff --git a/src/Game/BaseLevelObject.h b/src/Game/BaseLevelObject.h index d3736bff..8db7b2bb 100755 --- a/src/Game/BaseLevelObject.h +++ b/src/Game/BaseLevelObject.h @@ -1,5 +1,6 @@ #pragma once +#include "BaseAnimation.h" #include "BaseClass.h" #include "LevelObject.h" #include @@ -10,13 +11,13 @@ struct BaseLevelObject { public: Sprite2 sprite; + sf::Vector2f originalPosition; + sf::Vector2f basePosition; + sf::Vector2f offset; MapCoord mapPosition; const TexturePack* texturePack{ nullptr }; - size_t textureStartIdx{ 0 }; - size_t textureEndIdx{ 0 }; - size_t currentTextureIdx{ 0 }; - size_t texturePackIdx{ 0 }; + BaseAnimation animation; uint8_t hoverCellSize{ 0 }; @@ -31,11 +32,9 @@ struct BaseLevelObject return sf::Vector2f((float)sprite.getTextureRect().width, (float)sprite.getTextureRect().height); } - void checkAndUpdateTextureIndex() noexcept; bool hasValidState() const noexcept; - sf::Vector2f getBasePosition(const Level& level) const; void updateDrawPosition(const Level& level); - void updateDrawPosition(const Level& level, sf::Vector2f drawPos); + void updateDrawPosition(const Level& level, const sf::Vector2f& drawPos); void updateHover(Game& game, Level& level, LevelObject* levelObj); void updateMapPositionBack(Level& level, const MapCoord pos, LevelObject* levelObj); void updateMapPositionFront(Level& level, const MapCoord pos, LevelObject* levelObj); @@ -48,6 +47,7 @@ struct BaseLevelObject BaseLevelObject() noexcept {} BaseLevelObject(const sf::Texture& texture) : sprite(texture) {} BaseLevelObject(const TexturePack& texturePack_, - const std::pair& frameRange_) : texturePack(&texturePack_), - textureStartIdx(frameRange_.first), textureEndIdx(frameRange_.second) {} + const std::pair& textureIndexRange, + const sf::Time& frameTime, AnimationType type) + : texturePack(&texturePack_), animation(textureIndexRange, frameTime, type, false) {} }; diff --git a/src/Game/GameProperties.h b/src/Game/GameProperties.h index dfc112b8..e33dd8e5 100755 --- a/src/Game/GameProperties.h +++ b/src/Game/GameProperties.h @@ -1,6 +1,6 @@ #pragma once -#include +#include #include "MapCoord.h" #include #include diff --git a/src/Game/Item.cpp b/src/Game/Item.cpp index ee14ae51..201ea07f 100755 --- a/src/Game/Item.cpp +++ b/src/Game/Item.cpp @@ -9,26 +9,33 @@ Item::Item(const ItemClass* class__) : class_(class__) { base.texturePack = class__->getDropTexturePack(); - base.texturePackIdx = class__->getDropTextureIndex(); - base.textureEndIdx = base.texturePack->size(base.texturePackIdx) - 1; - base.currentTextureIdx = base.textureEndIdx; + base.animation.textureIndexRange = class__->getDropTextureIndexRange(); + base.animation.textureIndexRange.second--; + base.animation.currentTextureIdx = base.animation.textureIndexRange.second; + base.animation.frameTime = class_->DefaultAnimationSpeed(); + base.animation.animType = AnimationType::PlayOnce; base.hoverCellSize = 1; if (class__->getInventoryTexturePack()->isIndexed() == true) { base.sprite.setPalette(class__->getInventoryTexturePack()->getPalette()); } base.sprite.setOutline(class__->DefaultOutline(), class__->DefaultOutlineIgnore()); + base.updateTexture(); applyDefaults(); } -void Item::resetDropAnimation() noexcept +void Item::resetDropAnimation(Level& level) noexcept { - base.currentTextureIdx = 0; + base.animation.currentTextureIdx = base.animation.textureIndexRange.first; if (base.enableHover == true) { wasHoverEnabledOnItemDrop = true; base.enableHover = false; } + if (base.updateTexture() == true) + { + base.updateDrawPosition(level); + } } void Item::executeAction(Game& game) const @@ -41,35 +48,13 @@ void Item::update(Game& game, Level& level) base.processQueuedActions(game); base.updateHover(game, level, this); - if (base.hasValidState() == false) - { - return; - } - - // add delta time - currentTime += game.getElapsedTime(); - - // if current time is bigger then the frame time advance one frame - if (currentTime >= frameTime) + if (base.hasValidState() == true && + base.animation.update(game.getElapsedTime()) == true) { - // reset time, but keep the remainder - currentTime = sf::microseconds(currentTime.asMicroseconds() % frameTime.asMicroseconds()); - - if (base.currentTextureIdx < base.textureStartIdx) + if (wasHoverEnabledOnItemDrop == true) { - base.currentTextureIdx = base.textureStartIdx; - } - else if (base.currentTextureIdx < base.textureEndIdx) - { - base.currentTextureIdx++; - } - else - { - if (wasHoverEnabledOnItemDrop == true) - { - base.enableHover = true; - wasHoverEnabledOnItemDrop = false; - } + base.enableHover = true; + wasHoverEnabledOnItemDrop = false; } if (base.updateTexture() == true) { diff --git a/src/Game/Item.h b/src/Game/Item.h index 6ab7aa0b..ec87f99c 100755 --- a/src/Game/Item.h +++ b/src/Game/Item.h @@ -3,7 +3,6 @@ #include "Actions/Action.h" #include "BaseLevelObject.h" #include "ItemClass.h" -#include class Player; @@ -16,9 +15,6 @@ class Item : public LevelObject BaseLevelObject base; - sf::Time frameTime{ sf::milliseconds(40) }; - sf::Time currentTime; - bool wasHoverEnabledOnItemDrop{ false }; mutable bool updateNameAndDescr{ true }; @@ -60,7 +56,7 @@ class Item : public LevelObject Item(const ItemClass* class__); - void resetDropAnimation() noexcept; + void resetDropAnimation(Level& level) noexcept; virtual const sf::Vector2f& Position() const { return base.sprite.getPosition(); } virtual sf::Vector2f Size() const { return base.getSize(); } diff --git a/src/Game/ItemClass.cpp b/src/Game/ItemClass.cpp index e332d0ae..2a467d41 100755 --- a/src/Game/ItemClass.cpp +++ b/src/Game/ItemClass.cpp @@ -3,6 +3,28 @@ #include "Game.h" #include "GameUtils.h" +ItemClass::ItemClass(const std::shared_ptr& textureDrop_, + const std::shared_ptr& textureInventory_, + size_t inventoryIdx_) : textureDrop(textureDrop_), + textureInventory(textureInventory_), inventoryIdx(inventoryIdx_) +{ + if (textureDrop_ != nullptr) + { + dropTextureIndexRange.first = 0; + dropTextureIndexRange.second = textureDrop_->size(); + } +} + +void ItemClass::setDropTexturePack(const std::shared_ptr& textureDrop_) noexcept +{ + textureDrop = textureDrop_; + if (textureDrop_ != nullptr) + { + dropTextureIndexRange.first = 0; + dropTextureIndexRange.second = textureDrop_->size(); + } +} + void ItemClass::setDefault(const char* prop, LevelObjValue val) { auto propertyHash = str2int16(prop); diff --git a/src/Game/ItemClass.h b/src/Game/ItemClass.h index 7f8ec6b5..d52d7438 100755 --- a/src/Game/ItemClass.h +++ b/src/Game/ItemClass.h @@ -14,8 +14,8 @@ class ItemClass : public BaseClass { private: std::shared_ptr textureDrop; - size_t dropIdx; std::shared_ptr textureInventory; + std::pair dropTextureIndexRange; size_t inventoryIdx; std::string name; @@ -36,24 +36,25 @@ class ItemClass : public BaseClass std::array, 6> formulas; size_t formulasSize{ 0 }; + sf::Time defaultAnimationSpeed{ sf::milliseconds(40) }; sf::Color defaultOutline{ sf::Color::Transparent }; sf::Color defaultOutlineIgnore{ sf::Color::Transparent }; public: ItemClass(const std::shared_ptr& textureDrop_, - size_t dropIdx_, const std::shared_ptr& textureInventory_, - size_t inventoryIdx_) : textureDrop(textureDrop_), - dropIdx(dropIdx_), textureInventory(textureInventory_), - inventoryIdx(inventoryIdx_) {} + const std::shared_ptr& textureInventory_, + size_t inventoryIdx_); - void setDropTexturePack(const std::shared_ptr& textureDrop_) noexcept + void setDropTexturePack(const std::shared_ptr& textureDrop_) noexcept; + const std::pair& getDropTextureIndexRange() const noexcept { - textureDrop = textureDrop_; + return dropTextureIndexRange; } - void setDropTextureIndex(size_t dropIdx_) noexcept + void setDropTextureIndexRange(const std::pair& textureIndexRange) noexcept { - dropIdx = dropIdx_; + dropTextureIndexRange = textureIndexRange; } + void setInventoryTexturePack(const std::shared_ptr& textureInventory_) noexcept { textureInventory = textureInventory_; @@ -65,11 +66,10 @@ class ItemClass : public BaseClass const TexturePack* getDropTexturePack() const noexcept { return textureDrop.get(); } const TexturePack* getInventoryTexturePack() const noexcept { return textureInventory.get(); } - size_t getDropTextureIndex() const noexcept { return dropIdx; } - bool getInventoryTexture(const sf::Texture** texture, sf::IntRect& textureRect) const + bool getInventoryTexture(TextureInfo& ti) const { - return textureInventory->get(inventoryIdx, texture, textureRect); + return textureInventory->get(inventoryIdx, ti); } const std::vector& Defaults() const noexcept { return defaults; } @@ -96,6 +96,7 @@ class ItemClass : public BaseClass uint16_t TypeHash16() const noexcept { return typeHash16; } const ItemXY& InventorySize() const noexcept { return inventorySize; } + const sf::Time& DefaultAnimationSpeed() const noexcept { return defaultAnimationSpeed; } const sf::Color& DefaultOutline() const noexcept { return defaultOutline; } const sf::Color& DefaultOutlineIgnore() const noexcept { return defaultOutlineIgnore; } @@ -109,6 +110,7 @@ class ItemClass : public BaseClass void SubType(const std::string subType_) { subType = subType_; } void InventorySize(const ItemXY inventorySize_) noexcept { inventorySize = inventorySize_; } + void DefaultAnimationSpeed(const sf::Time time) noexcept { defaultAnimationSpeed = time; } void DefaultOutline(const sf::Color color) noexcept { defaultOutline = color; } void DefaultOutlineIgnore(const sf::Color color) noexcept { defaultOutlineIgnore = color; } diff --git a/src/Game/ItemCollection.cpp b/src/Game/ItemCollection.cpp index b2b2d0e4..f2ad13e0 100755 --- a/src/Game/ItemCollection.cpp +++ b/src/Game/ItemCollection.cpp @@ -276,9 +276,18 @@ bool ItemCollection::isItemSlotInUse(const ItemXY& position) const bool ItemCollection::isItemSlotEmpty(int x, int y, const ItemXY& itemSize, size_t& itemIdx) const { - size_t sizeX = (size_t)x + itemSize.x; - size_t sizeY = (size_t)y + itemSize.y; - + size_t sizeX = (size_t)x; + size_t sizeY = (size_t)y; + if (enforceItemSize == true) + { + sizeX += itemSize.x; + sizeY += itemSize.y; + } + else + { + sizeX++; + sizeY++; + } for (size_t i = x; i < sizeX; i++) { for (size_t j = y; j < sizeY; j++) diff --git a/src/Game/Level.cpp b/src/Game/Level.cpp index 19301147..10aa70ff 100755 --- a/src/Game/Level.cpp +++ b/src/Game/Level.cpp @@ -6,39 +6,23 @@ void Level::Init(LevelMap map_, std::shared_ptr tilesBottom_, - std::shared_ptr tilesTop_) + std::shared_ptr tilesTop_, + int tileWidth_, int tileHeight_) { map = std::move(map_); tilesBottom = tilesBottom_; tilesTop = tilesTop_; - currentMapPosition = MapCoord(map.Width() / 2, map.Height() / 2); clickedObject = nullptr; hoverObject = nullptr; - sf::Vector2i textureSize; - if (tilesBottom_ != nullptr && - tilesBottom_->getTextureSize(textureSize) == true) - { - tileWidth = textureSize.x; - tileHeight = textureSize.y; - } - else - { - tileWidth = 64; - tileHeight = 32; - } - if (tilesTop_ != nullptr && - tilesTop_->getTextureSize(textureSize) == true) - { - pillarHeight = textureSize.y; - } - else - { - pillarHeight = 256; - } + tileWidth = tileWidth_; + tileHeight = tileHeight_; map.setTileSize(tileWidth, tileHeight); + setCurrentMapPosition(MapCoord(map.Width() / 2, map.Height() / 2)); + updateLevelObjectPositions(); + updateViewPort = true; } void Level::updateLevelObjectPositions() @@ -195,6 +179,7 @@ void::Level::updateZoom(const Game& game) view.setZoom(1.f / currentZoomFactor); view.updateViewport(game); + updateVisibleArea(); } void Level::addLevelObject(std::unique_ptr obj, bool addToFront) @@ -247,17 +232,10 @@ void Level::draw(sf::RenderTarget& target, sf::RenderStates states) const target.setView(view.getView()); sf::Sprite sprite; - const sf::Texture* texture; - sf::IntRect textureRect; + TextureInfo ti; + sf::FloatRect tileRect; const sf::Texture* palette = nullptr; - auto viewCenter = target.getView().getCenter(); - auto viewSize = target.getView().getSize(); - - sf::FloatRect drawRect(viewCenter.x - (viewSize.x / 2) - tileWidth, - viewCenter.y - (viewSize.y / 2) - pillarHeight, - viewSize.x + tileWidth, viewSize.y + pillarHeight); - auto tiles = tilesBottom.get(); if (tiles != nullptr) { @@ -272,26 +250,29 @@ void Level::draw(sf::RenderTarget& target, sf::RenderStates states) const states.shader = &Shaders::Palette; Shaders::Palette.setUniform("palette", *palette); } - auto newPillarHeight = pillarHeight - tileHeight; - for (Coord x = 0; x < map.Width(); x++) + for (Coord x = visibleStart.x; x < visibleEnd.x; x++) { - for (Coord y = 0; y < map.Height(); y++) + for (Coord y = visibleStart.y; y < visibleEnd.y; y++) { - auto index = map[x][y].MinIndex(); + auto index = map[x][y].TileIndexBack(); if (index < 0) { continue; } - auto coords = map.getCoord(MapCoord(x, y)); - coords.y += newPillarHeight; - - if (drawRect.contains(coords) == true) + if (tiles->get((size_t)index, ti) == true) { - if (tiles->get((size_t)index, &texture, textureRect) == true) + auto coords = map.getCoord(MapCoord(x, y)); + coords.y -= (float)(ti.textureRect.height - tileHeight); + coords += ti.offset; + tileRect.left = coords.x; + tileRect.top = coords.y; + tileRect.width = (float)ti.textureRect.width; + tileRect.height = (float)ti.textureRect.height; + if (visibleRect.intersects(tileRect) == true) { - sprite.setTexture(*texture); - sprite.setTextureRect(textureRect); + sprite.setTexture(*ti.texture); + sprite.setTextureRect(ti.textureRect); sprite.setPosition(coords); target.draw(sprite, states); } @@ -320,39 +301,45 @@ void Level::draw(sf::RenderTarget& target, sf::RenderStates states) const states.shader = NULL; } - for (Coord x = 0; x < map.Width(); x++) + for (Coord x = visibleStart.x; x < visibleEnd.x; x++) { - for (Coord y = 0; y < map.Height(); y++) + for (Coord y = visibleStart.y; y < visibleEnd.y; y++) { auto coords = map.getCoord(MapCoord(x, y)); + bool drewObj = false; - if (drawRect.contains(coords) == true) + for (const auto& drawObj : map[x][y]) { - bool drewObj = false; - for (const auto& drawObj : map[x][y]) + if (drawObj != nullptr) { - if (drawObj != nullptr) - { - target.draw(*drawObj, states); - drewObj = true; - } + target.draw(*drawObj, states); + drewObj = true; } - if (drewObj == true && - palette != nullptr) + } + if (drewObj == true && + palette != nullptr) + { + Shaders::Palette.setUniform("palette", *palette); + } + if (tiles != nullptr) + { + size_t index = map[x][y].TileIndexFront(); + if (index < 0) { - Shaders::Palette.setUniform("palette", *palette); + continue; } - if (tiles != nullptr) + if (tiles->get((size_t)index, ti) == true) { - size_t index = map[x][y].MinIndex(); - if (index < 0) + coords.y -= (float)(ti.textureRect.height - tileHeight); + coords += ti.offset; + tileRect.left = coords.x; + tileRect.top = coords.y; + tileRect.width = (float)ti.textureRect.width; + tileRect.height = (float)ti.textureRect.height; + if (visibleRect.intersects(tileRect) == true) { - continue; - } - if (tiles->get((size_t)index, &texture, textureRect) == true) - { - sprite.setTexture(*texture); - sprite.setTextureRect(textureRect); + sprite.setTexture(*ti.texture); + sprite.setTextureRect(ti.textureRect); sprite.setPosition(coords); target.draw(sprite, states); } @@ -366,12 +353,55 @@ void Level::draw(sf::RenderTarget& target, sf::RenderStates states) const void Level::updateSize(const Game& game) { view.updateSize(game); + updateVisibleArea(); +} + +void Level::updateVisibleArea() +{ + const auto& viewCenter = view.getCenter(); + const auto& viewSize = view.getVisibleSize(); + + visibleRect = sf::FloatRect(viewCenter.x - std::round(viewSize.x / 2), + viewCenter.y - std::round(viewSize.y / 2), + std::round(viewSize.x), + std::round(viewSize.y)); + + sf::Vector2f TL{ visibleRect.left, visibleRect.top }; + sf::Vector2f TR{ TL.x + visibleRect.width + tileWidth, TL.y }; + sf::Vector2f BL{ TL.x, TL.y + visibleRect.height + tileHeight }; + sf::Vector2f BR{ TR.x, BL.y }; + + auto mapTL = map.getTile(TL); + auto mapTR = map.getTile(TR); + auto mapBL = map.getTile(BL); + auto mapBR = map.getTile(BR); + + if (mapTL.x > 0) + { + visibleStart.x = std::max((Coord)0, mapTL.x - 2); + } + else + { + visibleStart.x = 0; + } + visibleEnd.x = std::clamp(mapBR.x + 12, 0, map.Width()); + if (mapTR.y > 0) + { + visibleStart.y = std::max((Coord)0, mapTR.y - 2); + } + else + { + visibleStart.y = 0; + } + visibleEnd.y = std::clamp(mapBL.y + 12, 0, map.Height()); } void Level::updateMouse(const Game& game) { mousePositionf = view.getPosition(game.MousePositionf()); - mapCoordOverMouse = map.getTile(mousePositionf); + auto mousePositionf2 = mousePositionf; + mousePositionf2.y += 224; + mapCoordOverMouse = map.getTile(mousePositionf2); } void Level::onMouseButtonPressed(Game& game) @@ -455,11 +485,11 @@ void Level::update(Game& game) { return; } - if (updateView == true) + if (updateViewPort == true) { - updateView = false; - view.updateSize(game); + updateViewPort = false; view.updateViewport(game); + updateVisibleArea(); } if (pause == true) { @@ -495,21 +525,23 @@ void Level::update(Game& game) { hasMouseInside = false; } - for (auto& obj : levelObjects) { obj->update(game, *this); } - for (auto& player : players) { player->update(game, *this); } - if (followCurrentPlayer == true && currentPlayer != nullptr) { currentMapPosition = currentPlayer->MapPosition(); - view.setCenter(currentPlayer->getBasePosition(*this)); + currentMapViewCenter = currentPlayer->getBasePosition(); + } + if (view.getCenter() != currentMapViewCenter) + { + view.setCenter(currentMapViewCenter); + updateVisibleArea(); } } @@ -530,6 +562,7 @@ bool Level::getProperty(const std::string& prop, Variable& var) const return clickedObject->getProperty(props.second, var); } } + break; case str2int16("currentPlayer"): { if (currentPlayer != nullptr) @@ -538,6 +571,10 @@ bool Level::getProperty(const std::string& prop, Variable& var) const } } break; + case str2int16("hasCurrentPlayer"): + var = Variable((bool)(currentPlayer != nullptr)); + return true; + break; case str2int16("hoverObject"): { if (hoverObject != nullptr) diff --git a/src/Game/Level.h b/src/Game/Level.h index 58f1b146..05ba0bdc 100755 --- a/src/Game/Level.h +++ b/src/Game/Level.h @@ -22,7 +22,10 @@ class Level : public UIObject { private: View2 view; - bool updateView{ false }; + sf::FloatRect visibleRect; + MapCoord visibleStart; + MapCoord visibleEnd; + bool updateViewPort{ false }; float currentZoomFactor{ 1.f }; float startZoomFactor{ 1.f }; float stopZoomFactor{ 1.f }; @@ -39,6 +42,7 @@ class Level : public UIObject MapCoord mapCoordOverMouse; MapCoord currentMapPosition; + sf::Vector2f currentMapViewCenter; std::string name; @@ -47,7 +51,6 @@ class Level : public UIObject int tileWidth{ 0 }; int tileHeight{ 0 }; - int pillarHeight{ 0 }; std::shared_ptr leftAction; std::shared_ptr rightAction; @@ -84,12 +87,19 @@ class Level : public UIObject return level.map[x][y]; } + void setCurrentMapPosition(const MapCoord& mapPos) + { + currentMapPosition = mapPos; + currentMapViewCenter = map.getCoord(currentMapPosition); + } + void addLevelObject(std::unique_ptr obj, const MapCoord& mapCoord, bool addToFront); void addLevelObject(std::unique_ptr obj, LevelCell& mapCell, bool addToFront); void addPlayer(std::unique_ptr player, const MapCoord& mapCoord); void updateLevelObjectPositions(); void updateMouse(const Game& game); + void updateVisibleArea(); void updateZoom(const Game& game); void onMouseButtonPressed(Game& game); @@ -99,7 +109,8 @@ class Level : public UIObject public: void Init(LevelMap map_, std::shared_ptr tilesBottom_, - std::shared_ptr tilesTop_); + std::shared_ptr tilesTop_, + int tileWidth_, int tileHeight_); Misc::Helper2D operator[] (Coord x) const noexcept { @@ -207,13 +218,13 @@ class Level : public UIObject virtual void Position(const sf::Vector2f& position) noexcept { view.setPosition(position); - updateView = true; + updateViewPort = true; } virtual sf::Vector2f Size() const noexcept { return view.getSize(); } virtual void Size(const sf::Vector2f& size) { view.setSize(size); - updateView = true; + updateViewPort = true; } float Zoom() const noexcept { return stopZoomFactor; } @@ -253,14 +264,11 @@ class Level : public UIObject void move(const MapCoord& mapPos) { - currentMapPosition = mapPos; - auto center = map.getCoord(mapPos); - view.setCenter(center.x, center.y); + setCurrentMapPosition(mapPos); } - - void move(Game& game) + void move() noexcept { - view.setCenter(mousePositionf); + currentMapViewCenter = mousePositionf; } void addPlayer(std::unique_ptr player); @@ -271,7 +279,7 @@ class Level : public UIObject currentPlayer = player_; if (currentPlayer != nullptr) { - currentMapPosition = currentPlayer->MapPosition(); + setCurrentMapPosition(currentPlayer->MapPosition()); } } @@ -279,7 +287,6 @@ class Level : public UIObject int TileWidth() const noexcept { return tileWidth; } int TileHeight() const noexcept { return tileHeight; } - int PillarHeight() const noexcept { return pillarHeight; } virtual bool Pause() const noexcept { return pause; } virtual void Pause(bool pause_) noexcept { pause = pause_; } diff --git a/src/Game/LevelCell.h b/src/Game/LevelCell.h index adcacd91..10497ebb 100755 --- a/src/Game/LevelCell.h +++ b/src/Game/LevelCell.h @@ -8,11 +8,13 @@ class LevelCell { private: - int16_t minIndex{ -1 }; - int8_t sol{ 0 }; + // 0 - back, 1 - front, 2 - sol + std::array tileIndexes; std::vector objects; public: + LevelCell() : tileIndexes{ -1, -1, 0 } {} + using iterator = std::vector::iterator; using const_iterator = std::vector::const_iterator; using reverse_iterator = std::vector::reverse_iterator; @@ -31,11 +33,15 @@ class LevelCell const_reverse_iterator crbegin() const noexcept { return objects.crbegin(); } const_reverse_iterator crend() const noexcept { return objects.crend(); } - int16_t MinIndex() const noexcept { return minIndex; } - void MinIndex(int16_t minIndex_) noexcept { minIndex = minIndex_; } - void Sol(int8_t sol_) noexcept { sol = sol_; } + int16_t TileIndexBack() const noexcept { return tileIndexes[0]; } + int16_t TileIndexFront() const noexcept { return tileIndexes[1]; } + + void TileIndex(size_t index, int16_t tileIndex_) noexcept { tileIndexes[index] = tileIndex_; } + void TileIndexBack(int16_t tileIndex_) noexcept { tileIndexes[0] = tileIndex_; } + void TileIndexFront(int16_t tileIndex_) noexcept { tileIndexes[1] = tileIndex_; } + void Sol(int16_t sol_) noexcept { tileIndexes[2] = sol_; } - bool PassableIgnoreObject() const noexcept { return !(sol & 0x01); } + bool PassableIgnoreObject() const noexcept { return !(tileIndexes[2] & 0x01); } bool PassableIgnoreObject(const LevelObject* ignoreObj) const; bool Passable() const; diff --git a/src/Game/LevelHelper.cpp b/src/Game/LevelHelper.cpp index 63940408..d36f8a8f 100755 --- a/src/Game/LevelHelper.cpp +++ b/src/Game/LevelHelper.cpp @@ -1,5 +1,6 @@ #include "LevelHelper.h" -#include "TexturePacks/SimpleIndexedTexturePack.h" +#include "TexturePacks/IndexedTexturePack.h" +#include "TexturePacks/SimpleTexturePack.h" #include "TexturePacks/VectorTexturePack.h" namespace LevelHelper @@ -104,28 +105,33 @@ namespace LevelHelper return texturePack; } - std::shared_ptr loadTilesetSpriteBatchSprites( + std::shared_ptr loadTilesetAndBatchSprites( CachedImagePack& imgPack, const Min& min, bool top, bool skipBlankTiles) { - std::shared_ptr texturePack; - SimpleIndexedMultiTexturePack* indexedTexturePack = nullptr; + std::shared_ptr texturePack; + SimpleMultiTexturePack* multiTexturePack = nullptr; + IndexedTexturePack* indexedTexturePack = nullptr; if (skipBlankTiles == false) { texturePack = std::make_shared( imgPack.getPalette(), imgPack.IsIndexed()); + multiTexturePack = (SimpleMultiTexturePack*)texturePack.get(); } else { - texturePack = std::make_shared( + auto texturePack2 = std::make_unique( imgPack.getPalette(), imgPack.IsIndexed()); - indexedTexturePack = (SimpleIndexedMultiTexturePack*)texturePack.get(); + multiTexturePack = texturePack2.get(); + texturePack = std::make_shared(std::move(texturePack2), true); + indexedTexturePack = (IndexedTexturePack*)texturePack.get(); } sf::Image2 newPillar; size_t i = 0; size_t xMax = 16; size_t yMax = (top == true ? 4 : 32); + sf::Vector2f offset; bool mainLoop = true; while (mainLoop == true) @@ -147,7 +153,7 @@ namespace LevelHelper { if (indexedTexturePack != nullptr) { - indexedTexturePack->addTextureIndex(i); + indexedTexturePack->mapTextureIndex(i); } x++; @@ -169,7 +175,8 @@ namespace LevelHelper mainLoop = false; } } - texturePack->addTexturePack(std::make_shared(newPillar), xMax, yMax, true); + multiTexturePack->addTexturePack(std::make_shared(newPillar), + std::make_pair(xMax, yMax), offset, 0, true); } return texturePack; } @@ -183,7 +190,7 @@ namespace LevelHelper } else { - return loadTilesetSpriteBatchSprites(imgPack, min, top, skipBlankTiles); + return loadTilesetAndBatchSprites(imgPack, min, top, skipBlankTiles); } } diff --git a/src/Game/LevelMap.cpp b/src/Game/LevelMap.cpp index c667ad33..a6c347af 100755 --- a/src/Game/LevelMap.cpp +++ b/src/Game/LevelMap.cpp @@ -2,6 +2,11 @@ #include "PathFinder.h" LevelMap::LevelMap(Coord width_, Coord height_) : mapSize(width_, height_) +{ + resize(); +} + +void LevelMap::resize() { if (mapSize.x == std::numeric_limits::max()) { @@ -14,6 +19,13 @@ LevelMap::LevelMap(Coord width_, Coord height_) : mapSize(width_, height_) cells.resize(mapSize.x * mapSize.y); } +void LevelMap::resize(Coord width_, Coord height_) +{ + mapSize.x = width_; + mapSize.y = height_; + resize(); +} + void LevelMap::setTileSize(int32_t tileWidth_, int32_t tileHeight_) noexcept { blockWidth = tileWidth_ / 2; @@ -65,10 +77,11 @@ void LevelMap::setArea(Coord x, Coord y, const Dun& dun, const TileSet& til, con int32_t dunIndex = dun[xDunIndex][yDunIndex] - 1; - auto cellX = x + i; - auto cellY = y + j; + auto cellX = x + (Coord)i; + auto cellY = y + (Coord)j; - if (cellX >= mapSize.x || cellY >= mapSize.y) + if (cellX < 0 || cellX >= mapSize.x || + cellY < 0 || cellY >= mapSize.y) { continue; } @@ -77,13 +90,16 @@ void LevelMap::setArea(Coord x, Coord y, const Dun& dun, const TileSet& til, con if (dunIndex == -1) { - cell.MinIndex(-1); + cell.TileIndexBack(-1); + cell.TileIndexFront(-1); cell.Sol(0); } else { - cell.MinIndex(til[dunIndex][tilIndex]); - cell.Sol(sol.get(cell.MinIndex())); + auto tileIndex = til[dunIndex][tilIndex]; + cell.TileIndexBack(tileIndex); + cell.TileIndexFront(tileIndex); + cell.Sol(sol.get(tileIndex)); } } } @@ -95,19 +111,52 @@ void LevelMap::setArea(Coord x, Coord y, const Dun& dun, const Sol& sol) { for (size_t j = 0; j < dun.Height(); j++) { - auto cellX = x + i; - auto cellY = y + j; + auto cellX = x + (Coord)i; + auto cellY = y + (Coord)j; - if (cellX >= mapSize.x || cellY >= mapSize.y) + if (cellX < 0 || cellX >= mapSize.x || + cellY < 0 || cellY >= mapSize.y) { continue; } - auto& cell = cells[cellX + (cellY * mapSize.x)]; + auto& cell = cells[(size_t)(cellX + (cellY * mapSize.x))]; + + auto tileIndex = dun[i][j]; + cell.TileIndexBack(tileIndex); + cell.TileIndexFront(tileIndex); + cell.Sol((tileIndex >= 0 ? sol.get(tileIndex) : 0)); + } + } +} + +void LevelMap::setArea(Coord x, Coord y, size_t index, const Dun& dun) +{ + if (index > 2) + { + return; + } + for (size_t i = 0; i < dun.Width(); i++) + { + for (size_t j = 0; j < dun.Height(); j++) + { + auto cellX = x + (Coord)i; + auto cellY = y + (Coord)j; - auto minIndex = dun[i][j]; - cell.MinIndex(minIndex); - cell.Sol((minIndex >= 0 ? sol.get(minIndex) : 0)); + if (cellX < 0 || cellX >= mapSize.x || + cellY < 0 || cellY >= mapSize.y) + { + continue; + } + + auto& cell = cells[(size_t)(cellX + (cellY * mapSize.x))]; + + auto tileIndex = dun[i][j]; + if (index == 2) // sol + { + tileIndex = (tileIndex != 0 ? 1 : 0); + } + cell.TileIndex(index, tileIndex); } } } @@ -272,7 +321,7 @@ std::string LevelMap::toCSV(bool zeroBasedIndex) const { for (int i = 0; i < mapSize.x; i++) { - str += std::to_string((*this)[i][j].MinIndex() + inc) + ","; + str += std::to_string((*this)[i][j].TileIndexBack() + inc) + ","; } str += "\n"; } diff --git a/src/Game/LevelMap.h b/src/Game/LevelMap.h index e1dd8df8..8959881f 100755 --- a/src/Game/LevelMap.h +++ b/src/Game/LevelMap.h @@ -30,15 +30,19 @@ class LevelMap return map.cells[x + y * map.Width()]; } + void resize(); + public: LevelMap() noexcept {} LevelMap(Coord width_, Coord height_); + void resize(Coord width_, Coord height_); + void setTileSize(int32_t tileWidth_, int32_t tileHeight_) noexcept; void setArea(Coord x, Coord y, const Dun& dun, const TileSet& til, const Sol& sol); - void setArea(Coord x, Coord y, const Dun& dun, const Sol& sol); + void setArea(Coord x, Coord y, size_t index, const Dun& dun); Misc::Helper2D operator[] (Coord x) noexcept { diff --git a/src/Game/MapCoord.h b/src/Game/MapCoord.h index 0f26929c..90504b93 100755 --- a/src/Game/MapCoord.h +++ b/src/Game/MapCoord.h @@ -2,5 +2,5 @@ #include "PairXY.h" -typedef uint16_t Coord; -typedef PairXY MapCoord; +typedef int32_t Coord; +typedef PairXY MapCoord; diff --git a/src/Game/Player.cpp b/src/Game/Player.cpp index bb73b864..87707857 100755 --- a/src/Game/Player.cpp +++ b/src/Game/Player.cpp @@ -9,6 +9,7 @@ Player::Player(const PlayerClass* class__, const Level& level) : class_(class__) { + base.animation.animType = AnimationType::Looped; base.hoverCellSize = 2; base.sprite.setOutline(class__->DefaultOutline(), class__->DefaultOutlineIgnore()); calculateRange(); @@ -33,36 +34,25 @@ void Player::calculateRange() base.sprite.setPalette(nullptr); } } - base.texturePackIdx = class_->getAnimationIndex(animation); - auto numFrames = base.texturePack->size(base.texturePackIdx); - if (direction == PlayerDirection::All) + class_->getTextureAnimationRange(textureIdx, animation, base.animation); + if (direction != PlayerDirection::All) { - base.textureStartIdx = 0; - base.textureEndIdx = numFrames; - } - else - { - auto period = (numFrames / 8); - base.textureStartIdx = (size_t)direction * period; - base.textureEndIdx = base.textureStartIdx + period; + auto period = (((base.animation.textureIndexRange.second + 1) - base.animation.textureIndexRange.first) / 8); + base.animation.textureIndexRange.first += ((size_t)direction * period); + base.animation.textureIndexRange.second = base.animation.textureIndexRange.first + period - 1; } } else { base.sprite.setPalette(nullptr); - base.texturePackIdx = 0; - base.textureStartIdx = 0; - base.textureEndIdx = 0; + base.animation.clear(); } + base.animation.reset(); } void Player::updateTexture() { - base.checkAndUpdateTextureIndex(); - if (base.updateTexture() == true) - { - base.currentTextureIdx++; - } + base.updateTexture(); } void Player::updateSpeed() @@ -72,6 +62,7 @@ void Player::updateSpeed() if (defaultSpeed.animation != sf::Time::Zero) { speed.animation = defaultSpeed.animation; + base.animation.frameTime = speed.animation; } if (defaultSpeed.walk != sf::Time::Zero) { @@ -173,11 +164,6 @@ void Player::setWalkPath(const std::vector& walkPath_) } } -sf::Vector2f Player::getBasePosition(const Level& level) const -{ - return base.getBasePosition(level); -} - void Player::executeAction(Game& game) const { if (action != nullptr) @@ -239,10 +225,10 @@ void Player::updateDead(Game& game, Level& level) { if (animation != PlayerAnimation::Die1) { - base.currentTextureIdx = 0; + base.animation.currentTextureIdx = 0; setAnimation(PlayerAnimation::Die1); } - if (base.currentTextureIdx >= base.textureEndIdx) + if (base.animation.currentTextureIdx >= base.animation.textureIndexRange.second) { return; } @@ -251,13 +237,9 @@ void Player::updateDead(Game& game, Level& level) void Player::updateAnimation(const Game& game) { - currentAnimationTime += game.getElapsedTime(); - if (currentAnimationTime >= speed.animation) + if (base.animation.update(game.getElapsedTime())) { - currentAnimationTime = sf::microseconds( - currentAnimationTime.asMicroseconds() % speed.animation.asMicroseconds()); - - updateTexture(); + base.updateTexture(); } } diff --git a/src/Game/Player.h b/src/Game/Player.h index 8bf36a22..951aa86c 100755 --- a/src/Game/Player.h +++ b/src/Game/Player.h @@ -5,7 +5,6 @@ #include "ItemCollection.h" #include "PlayerClass.h" #include -#include class Player : public LevelObject { @@ -32,7 +31,6 @@ class Player : public LevelObject AnimationSpeed speed; AnimationSpeed defaultSpeed{ sf::Time::Zero, sf::Time::Zero }; - sf::Time currentAnimationTime; sf::Time currentWalkTime; std::shared_ptr action; @@ -135,7 +133,7 @@ class Player : public LevelObject public: Player(const PlayerClass* class__, const Level& level); - sf::Vector2f getBasePosition(const Level& level) const; + const sf::Vector2f& getBasePosition() const noexcept { return base.basePosition; } virtual const sf::Vector2f& Position() const { return base.sprite.getPosition(); } virtual sf::Vector2f Size() const { return base.getSize(); } @@ -230,6 +228,7 @@ class Player : public LevelObject { defaultSpeed = speed_; speed = class_->getSpeed(animation); + base.animation.frameTime = speed.animation; updateSpeed(); } @@ -247,6 +246,7 @@ class Player : public LevelObject { animation = animation_; speed = class_->getSpeed(animation); + base.animation.frameTime = speed.animation; updateSpeed(); calculateRange(); } @@ -278,7 +278,7 @@ class Player : public LevelObject return animation >= PlayerAnimation::Walk1 && animation <= PlayerAnimation::Walk2; } - void resetAnimationTime() noexcept { currentAnimationTime = speed.animation; } + void resetAnimationTime() noexcept { base.animation.currentTime = speed.animation; } Item* SelectedItem() const noexcept { return selectedItem.get(); } std::unique_ptr SelectedItem(std::unique_ptr item) noexcept diff --git a/src/Game/PlayerClass.cpp b/src/Game/PlayerClass.cpp index a047bcdf..bde44dbc 100755 --- a/src/Game/PlayerClass.cpp +++ b/src/Game/PlayerClass.cpp @@ -2,6 +2,51 @@ #include "Player.h" #include "Utils/Utils.h" +TexturePack* PlayerClass::getTexturePack(size_t idx) const +{ + if (idx < textures.size()) + { + return textures[idx].first.get(); + } + else if (textures.empty() == false) + { + return textures.front().first.get(); + } + return nullptr; +} + +void PlayerClass::getTextureAnimationRange(size_t idx, + PlayerAnimation animation, BaseAnimation& baseAnim) const +{ + const std::pair, Ranges>* tex = nullptr; + if (idx < textures.size()) + { + tex = &textures[idx]; + } + else if (textures.empty() == false) + { + tex = &textures.front(); + } + if (tex != nullptr) + { + size_t animIdx = 0; + if (animation < PlayerAnimation::Size) + { + animIdx = animationIndexes[(size_t)animation]; + } + if (animIdx < tex->second.size()) + { + baseAnim.textureIndexRange = tex->second[animIdx].range; + baseAnim.animType = tex->second[animIdx].animType; + baseAnim.backDirection = false; + return; + } + } + baseAnim.textureIndexRange = std::make_pair(0, 0); + baseAnim.animType = AnimationType::PlayOnce; + baseAnim.backDirection = false; +} + void PlayerClass::setDefault(const char* prop, const Number32& val) { auto propertyHash = str2int16(prop); diff --git a/src/Game/PlayerClass.h b/src/Game/PlayerClass.h index ce4e3c65..caf1254b 100755 --- a/src/Game/PlayerClass.h +++ b/src/Game/PlayerClass.h @@ -1,5 +1,7 @@ #pragma once +#include "AnimationType.h" +#include "BaseAnimation.h" #include "BaseClass.h" #include "Formula.h" #include "GameProperties.h" @@ -15,8 +17,16 @@ struct PlayerAI class PlayerClass : public BaseClass { +public: + struct Range + { + std::pair range; + AnimationType animType{ AnimationType::PlayOnce }; + }; + typedef std::vector Ranges; + private: - std::vector> textures; + std::vector, Ranges>> textures; std::array animationIndexes; PlayerAI ai; @@ -62,22 +72,14 @@ class PlayerClass : public BaseClass bool hasTextures() const noexcept { return textures.empty() == false; } void clearTextures() noexcept { textures.clear(); } - TexturePack* getTexturePack(size_t idx) const - { - if (idx < textures.size()) - { - return textures[idx].get(); - } - else if (textures.empty() == false) - { - return textures.front().get(); - } - return nullptr; - } + TexturePack* getTexturePack(size_t idx) const; + + void getTextureAnimationRange(size_t idx, + PlayerAnimation animation, BaseAnimation& baseAnim) const; - void addTexturePack(const std::shared_ptr& texture) + void addTexturePack(const std::shared_ptr& texture, Ranges ranges = {}) { - textures.push_back(texture); + textures.push_back(std::make_pair(std::move(texture), std::move(ranges))); } void clearAnimationIndexes() { animationIndexes.fill(0); } diff --git a/src/Game/SimpleLevelObject.cpp b/src/Game/SimpleLevelObject.cpp index f3244081..c5f80412 100755 --- a/src/Game/SimpleLevelObject.cpp +++ b/src/Game/SimpleLevelObject.cpp @@ -19,26 +19,9 @@ void SimpleLevelObject::update(Game& game, Level& level) { base.updateDrawPosition(level); } - - if (base.hasValidState() == false) - { - return; - } - - // add delta time - currentTime += game.getElapsedTime(); - - // if current time is bigger then the frame time advance one frame - if (currentTime >= frameTime) + if (base.hasValidState() == true) { - // reset time, but keep the remainder - currentTime = sf::microseconds(currentTime.asMicroseconds() % frameTime.asMicroseconds()); - - base.checkAndUpdateTextureIndex(); - if (base.updateTexture() == true) - { - base.currentTextureIdx++; - } + base.animation.update(game.getElapsedTime()); } } diff --git a/src/Game/SimpleLevelObject.h b/src/Game/SimpleLevelObject.h index 16feaf2b..8c882a27 100755 --- a/src/Game/SimpleLevelObject.h +++ b/src/Game/SimpleLevelObject.h @@ -3,16 +3,12 @@ #include "Actions/Action.h" #include "BaseLevelObject.h" #include -#include class SimpleLevelObject : public LevelObject { private: BaseLevelObject base; - sf::Time frameTime{ sf::milliseconds(50) }; - sf::Time currentTime; - std::shared_ptr action; std::string id; @@ -21,9 +17,10 @@ class SimpleLevelObject : public LevelObject public: SimpleLevelObject() noexcept {} SimpleLevelObject(const sf::Texture& texture) : base(texture) {} - SimpleLevelObject(const TexturePack& texturePack_, - const std::pair& frameRange_) - : base(texturePack_, frameRange_) + SimpleLevelObject(const TexturePack& texturePack, + const std::pair& textureIndexRange, + const sf::Time& frameTime, AnimationType animType) + : base(texturePack, textureIndexRange, frameTime, animType) { base.updateTexture(); } @@ -62,8 +59,8 @@ class SimpleLevelObject : public LevelObject virtual bool getProperty(const std::string& prop, Variable& var) const; virtual void setProperty(const std::string& prop, const Variable& val) noexcept {} - sf::Time getFrameTime() const noexcept { return frameTime; } - void setFrameTime(sf::Time time) noexcept { frameTime = time; } + sf::Time getFrameTime() const noexcept { return base.animation.frameTime; } + void setFrameTime(sf::Time time) noexcept { base.animation.frameTime = time; } void setTextureRect(const sf::IntRect& rectangle) { base.sprite.setTextureRect(rectangle); } diff --git a/src/GameUtils.cpp b/src/GameUtils.cpp index 2589df7c..26b9e95c 100755 --- a/src/GameUtils.cpp +++ b/src/GameUtils.cpp @@ -7,6 +7,21 @@ namespace GameUtils { using namespace Utils; + AnimationType getAnimationType(const std::string& str, AnimationType val) + { + switch (str2int16(toLower(str).c_str())) + { + case str2int16("playonce"): + return AnimationType::PlayOnce; + case str2int16("looped"): + return AnimationType::Looped; + case str2int16("backandforth"): + return AnimationType::BackAndForth; + default: + return val; + } + } + sf::Vector2f getAlignmentPosition(const sf::Vector2f& position, const sf::Vector2f& size, HorizontalAlign horizAlign, @@ -182,31 +197,33 @@ namespace GameUtils } } - HorizontalAlign getHorizontalAlignment(const std::string& str) + HorizontalAlign getHorizontalAlignment(const std::string& str, HorizontalAlign val) { switch (str2int16(toLower(str).c_str())) { case str2int16("left"): - default: return HorizontalAlign::Left; case str2int16("center"): return HorizontalAlign::Center; case str2int16("right"): return HorizontalAlign::Right; + default: + return val; } } - VerticalAlign getVerticalAlignment(const std::string& str) + VerticalAlign getVerticalAlignment(const std::string& str, VerticalAlign val) { switch (str2int16(toLower(str).c_str())) { - case str2int16("bottom"): - default: - return VerticalAlign::Bottom; - case str2int16("center"): - return VerticalAlign::Center; case str2int16("top"): return VerticalAlign::Top; + case str2int16("center"): + return VerticalAlign::Center; + case str2int16("bottom"): + return VerticalAlign::Bottom; + default: + return val; } } diff --git a/src/GameUtils.h b/src/GameUtils.h index ca7dd816..fa0fd9da 100755 --- a/src/GameUtils.h +++ b/src/GameUtils.h @@ -2,6 +2,7 @@ #include "Alignment.h" #include "Anchor.h" +#include "AnimationType.h" #include "Game/GameProperties.h" #include "IgnoreResource.h" #include @@ -15,6 +16,9 @@ namespace GameUtils { const int DoubleClickDelay = 500; + AnimationType getAnimationType(const std::string& str, + AnimationType val = AnimationType::Looped); + sf::Vector2f getAlignmentPosition(const sf::Vector2f& position, const sf::Vector2f& size, HorizontalAlign horizAlign, VerticalAlign vertAlign) noexcept; @@ -26,9 +30,11 @@ namespace GameUtils Anchor getAnchor(const std::string& str, Anchor val); - HorizontalAlign getHorizontalAlignment(const std::string& str); + HorizontalAlign getHorizontalAlignment(const std::string& str, + HorizontalAlign val = HorizontalAlign::Left); - VerticalAlign getVerticalAlignment(const std::string& str); + VerticalAlign getVerticalAlignment(const std::string& str, + VerticalAlign val = VerticalAlign::Top); sf::Keyboard::Key getKeyCode(int num, sf::Keyboard::Key val) noexcept; diff --git a/src/LoadingScreen.h b/src/LoadingScreen.h index fd23b40f..e15997fe 100755 --- a/src/LoadingScreen.h +++ b/src/LoadingScreen.h @@ -17,6 +17,7 @@ class LoadingScreen : public sf::Drawable int percent{ 0 }; public: + LoadingScreen() {} LoadingScreen(const sf::Texture& tex) : sprite(tex) {} void setPosition(const sf::Vector2f& position) @@ -24,6 +25,10 @@ class LoadingScreen : public sf::Drawable sprite.setPosition(position); progressBar.setPosition(position + barPosOffset); } + sf::Vector2f getSize() const + { + return sf::Vector2f((float)sprite.getTextureRect().width, (float)sprite.getTextureRect().height); + } void setProgressBarColor(const sf::Color& color) { progressBar.setFillColor(color); } void setProgressBarPositionOffset(const sf::Vector2f& offset) { diff --git a/src/Menu.h b/src/Menu.h index 89dee32f..ac646b04 100755 --- a/src/Menu.h +++ b/src/Menu.h @@ -101,6 +101,7 @@ class Menu : public UIObject if (verticalPad != verticalPad_) { verticalPad = verticalPad_; + recalculatePos = true; } } void setVisibleItems(size_t visibleItems_) noexcept diff --git a/src/Parser/Game/ParseItemClass.cpp b/src/Parser/Game/ParseItemClass.cpp index d4694b8d..f948dfad 100755 --- a/src/Parser/Game/ParseItemClass.cpp +++ b/src/Parser/Game/ParseItemClass.cpp @@ -50,46 +50,35 @@ namespace Parser } } - if (isValidString(elem, "dropTexturePack") == false || - isValidString(elem, "inventoryTexturePack") == false) - { - return itemClass; - } - auto dropTexture = game.Resources().getTexturePack( - elem["dropTexturePack"].GetString()); - if (dropTexture == nullptr) - { - return itemClass; - } - auto dropTextureIdx = (size_t)getUIntKey(elem, "dropTextureIndex"); - if (dropTextureIdx >= dropTexture->packSize()) - { - return itemClass; - } + getStringKey(elem, "dropTexturePack")); auto InvTexture = game.Resources().getTexturePack( - elem["inventoryTexturePack"].GetString()); - if (InvTexture == nullptr) - { - return itemClass; - } + getStringKey(elem, "inventoryTexturePack")); + auto InvTextureIdx = (size_t)getUIntKey(elem, "inventoryTextureIndex"); - if (InvTextureIdx >= InvTexture->totalSize()) - { - return itemClass; - } if (itemClass == nullptr) { - itemClass = std::make_unique(dropTexture, dropTextureIdx, - InvTexture, InvTextureIdx); + if (dropTexture != nullptr && + InvTexture != nullptr) + { + itemClass = std::make_unique(dropTexture, InvTexture, InvTextureIdx); + } } else { - itemClass->setDropTexturePack(dropTexture); - itemClass->setDropTextureIndex(dropTextureIdx); - itemClass->setInventoryTexturePack(InvTexture); - itemClass->setInventoryTextureIndex(InvTextureIdx); + if (dropTexture != nullptr) + { + itemClass->setDropTexturePack(dropTexture); + } + if (InvTexture != nullptr) + { + itemClass->setInventoryTexturePack(InvTexture); + } + if (elem.HasMember("inventoryTextureIndex") == true) + { + itemClass->setInventoryTextureIndex(InvTextureIdx); + } } return itemClass; } @@ -108,6 +97,13 @@ namespace Parser return; } + if (elem.HasMember("dropTextureIndexRange") == true) + { + itemClass->setDropTextureIndexRange( + getVector2uVal>(elem["dropTextureIndexRange"]) + ); + } + if (elem.HasMember("name") == true) { itemClass->Name(getStringVal(elem["name"])); @@ -128,6 +124,10 @@ namespace Parser { itemClass->InventorySize(getItemXYVal(elem["inventorySize"], ItemXY(1, 1))); } + if (elem.HasMember("defaultAnimationSpeed") == true) + { + itemClass->DefaultAnimationSpeed(getTimeVal(elem["defaultAnimationSpeed"], sf::milliseconds(40))); + } if (elem.HasMember("defaultOutline") == true) { itemClass->DefaultOutline(getColorVal(elem["defaultOutline"], sf::Color::Transparent)); diff --git a/src/Parser/Game/ParseLevel.cpp b/src/Parser/Game/ParseLevel.cpp index 5deff462..479b1435 100755 --- a/src/Parser/Game/ParseLevel.cpp +++ b/src/Parser/Game/ParseLevel.cpp @@ -12,95 +12,145 @@ namespace Parser { using namespace rapidjson; - void parseMap(const Value& elem, LevelMap& map, const TileSet& til, const Sol& sol) + Dun getDunFromLayer(const Value& elem, int16_t indexOffset) { - auto pos = getVector2uKey(elem, "position"); - auto file = getStringKey(elem, "file"); + Dun dun(getUIntKey(elem, "width"), getUIntKey(elem, "height")); - if (Utils::endsWith(Utils::toLower(file), ".json") == false) + if (dun.Width() == 0 || + dun.Height() == 0 || + isValidArray(elem, "data") == false) { - if (til.size() == 0) - { - return; - } - Dun dun(file); - if (dun.Width() > 0 && dun.Height() > 0) - { - map.setArea(pos.x, pos.y, dun, til, sol); - } - return; + return dun; + } + const auto& elemData = elem["data"]; + for (size_t i = 0; i < elemData.Size(); i++) + { + dun.set(i, ((int16_t)getUIntIdx(elemData, i) + indexOffset)); } + return dun; + } + void parseTiledMap(const Value& elem, LevelMap& map, + const std::string& file, const Sol& sol, bool resizeToFit) + { Document doc; if (JsonUtils::loadFile(file, doc) == false || isValidArray(doc, "layers") == false || - doc["layers"].Empty() == true || - isValidArray(doc["layers"][0], "data") == false) + doc["layers"].Empty() == true) { return; } - const auto& elemDun = doc["layers"][0]; + auto backName = getStringKey(elem, "back"); + auto frontName = getStringKey(elem, "front"); + auto solName = getStringKey(elem, "sol"); + auto pos = getVector2iKey(elem, "position"); + bool wasResized = false; - Dun dun(getUIntKey(elemDun, "width"), getUIntKey(elemDun, "width")); + for (const auto& elemLayer : doc["layers"]) + { + Dun dun = getDunFromLayer(elemLayer, (int16_t)getIntKey(elem, "indexOffset")); - const auto& elemData = elemDun["data"]; + if (dun.Width() > 0 && dun.Height() > 0) + { + auto pos2 = pos; + pos2.x += getIntKey(elemLayer, "x"); + pos2.y += getIntKey(elemLayer, "y"); - for (size_t i = 0; i < elemData.Size(); i++) - { - dun.set(i, ((int16_t)getUIntIdx(elemData, i)) - 1); + if (resizeToFit == true && wasResized == false) + { + map.resize((Coord)(pos2.x + dun.Width()), (Coord)(pos2.y + dun.Height())); + wasResized = true; + } + if (doc["layers"].Size() == 1) + { + map.setArea(pos2.x, pos2.y, dun, sol); + continue; + } + auto name = getStringKey(elemLayer, "name"); + if (backName == name) + { + map.setArea(pos2.x, pos2.y, 0, dun); + } + if (frontName == name) + { + map.setArea(pos2.x, pos2.y, 1, dun); + } + if (solName == name) + { + map.setArea(pos2.x, pos2.y, 2, dun); + } + } } + } + void parseMap(const Value& elem, LevelMap& map, + const TileSet& til, const Sol& sol, bool resizeToFit) + { + auto file = getStringKey(elem, "file"); + + if (Utils::endsWith(Utils::toLower(file), ".json") == true) + { + parseTiledMap(elem, map, file, sol, resizeToFit); + return; + } + if (til.size() == 0) + { + return; + } + Dun dun(file); if (dun.Width() > 0 && dun.Height() > 0) { - map.setArea(pos.x, pos.y, dun, sol); + auto pos = getVector2uKey(elem, "position"); + if (resizeToFit == true) + { + map.resize((Coord)(pos.x + (dun.Width() * 2)), (Coord)(pos.y + (dun.Height() * 2))); + } + map.setArea(pos.x, pos.y, dun, til, sol); } } void parseLevelMap(Game& game, const Value& elem, Level& level) { - auto tilPath = getStringKey(elem, "til"); - auto solPath = elem["sol"].GetString(); + TileSet til(getStringKey(elem, "til")); + Sol sol(getStringKey(elem, "sol")); - TileSet til(tilPath); - - Sol sol(solPath); - if (sol.size() == 0) - { - return; - } - - auto mapSize = getVector2uKey(elem, "mapSize"); + bool resizeToFit = elem.HasMember("mapSize") == false; + auto mapSize = getVector2uKey(elem, "mapSize", MapCoord(96, 96)); LevelMap map(mapSize.x, mapSize.y); - const auto& mapElem = elem["map"]; - if (mapElem.IsArray() == true) + if (elem.HasMember("map") == true) { - for (const auto& val : mapElem) + const auto& mapElem = elem["map"]; + if (mapElem.IsArray() == true) { - parseMap(val, map, til, sol); + for (const auto& val : mapElem) + { + parseMap(val, map, til, sol, false); + } + } + else if (mapElem.IsObject() == true) + { + parseMap(mapElem, map, til, sol, resizeToFit); } - } - else if (mapElem.IsObject() == true) - { - parseMap(mapElem, map, til, sol); } std::shared_ptr tilesBottom; std::shared_ptr tilesTop; + std::pair tileSize; getOrParseLevelTexturePack(game, elem, - "texturePackBottom", "texturePackTop", tilesBottom, tilesTop); + "texturePackBottom", "texturePackTop", tilesBottom, tilesTop, tileSize); - level.Init(std::move(map), tilesBottom, tilesTop); + level.Init(std::move(map), tilesBottom, tilesTop, tileSize.first, tileSize.second); } void parsePosSize(const Game& game, const Value& elem, Level& level) { auto anchor = getAnchorKey(elem, "anchor"); level.setAnchor(anchor); - auto pos = getVector2fKey(elem, "position"); auto size = getVector2fKey(elem, "size", game.WindowTexSizef()); + auto pos = getPositionKey(elem, "position", size, game.RefSize()); if (getBoolKey(elem, "relativeCoords", true) == true) { GameUtils::setAnchorPosSize(anchor, pos, size, game.RefSize(), game.MinSize()); @@ -140,11 +190,7 @@ namespace Parser game.Resources().setCurrentLevel(level); } - if (isValidString(elem, "sol") == true - && elem.HasMember("map") == true) - { - parseLevelMap(game, elem, *level); - } + parseLevelMap(game, elem, *level); level->Name(getStringKey(elem, "name")); diff --git a/src/Parser/Game/ParseLevelObject.cpp b/src/Parser/Game/ParseLevelObject.cpp index 0d05af66..dd04ea21 100755 --- a/src/Parser/Game/ParseLevelObject.cpp +++ b/src/Parser/Game/ParseLevelObject.cpp @@ -62,11 +62,11 @@ namespace Parser { return; } - auto frames = std::make_pair(0u, texPack->totalSize() - 1); + auto frames = std::make_pair(0u, texPack->size() - 1); frames = getFramesKey(elem, "frames", frames); - levelObj = std::make_unique(*texPack, frames); - - levelObj->setFrameTime(getTimeKey(elem, "refresh", sf::milliseconds(50))); + auto refresh = getTimeKey(elem, "refresh", sf::milliseconds(50)); + levelObj = std::make_unique( + *texPack, frames, refresh, AnimationType::Looped); } else { diff --git a/src/Parser/Game/ParsePlayerClass.cpp b/src/Parser/Game/ParsePlayerClass.cpp index 107082b3..7ae4557c 100755 --- a/src/Parser/Game/ParsePlayerClass.cpp +++ b/src/Parser/Game/ParsePlayerClass.cpp @@ -2,6 +2,7 @@ #include "Game/PlayerClass.h" #include "Parser/ParseAction.h" #include "Parser/Utils/ParseUtils.h" +#include "TexturePacks/CachedTexturePack.h" namespace Parser { @@ -21,7 +22,55 @@ namespace Parser { return; } - playerClass.addTexturePack(texturePack); + PlayerClass::Ranges ranges; + auto cMultiTexPack = dynamic_cast(texturePack.get()); + if (cMultiTexPack != nullptr) + { + auto ranges2 = cMultiTexPack->getRanges(); + for (const auto& range : ranges2) + { + PlayerClass::Range range2; + range2.range = range; + range2.animType = AnimationType::Looped; + ranges.push_back(range2); + } + } + playerClass.addTexturePack(texturePack, ranges); + } + + void parsePlayerClassTexturePackWithAnims(Game& game, + PlayerClass& playerClass, const Value& elem) + { + auto texturePack = game.Resources().getTexturePack(getStringKey(elem, "texturePack")); + if (texturePack == nullptr) + { + return; + } + PlayerClass::Ranges ranges; + + if (elem.HasMember("animations") == true && + elem["animations"].IsArray() == true) + { + for (const auto& val : elem["animations"]) + { + if (val.IsArray() == true) + { + PlayerClass::Range range; + range.range = getVector2uVal>(val); + range.animType = AnimationType::Looped; + ranges.push_back(range); + } + else if (val.IsObject() == true) + { + PlayerClass::Range range; + range.range = getVector2uKey>(val, "range"); + range.animType = getAnimationTypeKey(val, "type"); + ranges.push_back(range); + } + } + } + + playerClass.addTexturePack(texturePack, std::move(ranges)); } void parsePlayerAnimationSpeed(PlayerClass& playerClass, const Value& elem) @@ -88,11 +137,22 @@ namespace Parser { parsePlayerClassTexturePack(game, *playerClass, texturePacks); } + if (texturePacks.IsObject() == true) + { + parsePlayerClassTexturePackWithAnims(game, *playerClass, texturePacks); + } else if (texturePacks.IsArray() == true) { for (const auto& val : texturePacks) { - parsePlayerClassTexturePack(game, *playerClass, val); + if (val.IsObject() == true) + { + parsePlayerClassTexturePackWithAnims(game, *playerClass, val); + } + else + { + parsePlayerClassTexturePack(game, *playerClass, val); + } } } } diff --git a/src/Parser/ParseAction.cpp b/src/Parser/ParseAction.cpp index 3417449b..740568ba 100755 --- a/src/Parser/ParseAction.cpp +++ b/src/Parser/ParseAction.cpp @@ -703,7 +703,7 @@ namespace Parser return std::make_shared( getStringKey(elem, "id"), getStringKey(elem, "texturePack"), - getIndexKey(elem, "index"), + getUIntKey(elem, "index"), getBoolKey(elem, "resetRect", true)); } else diff --git a/src/Parser/ParseAnimation.cpp b/src/Parser/ParseAnimation.cpp index 699e7c48..7e552efa 100755 --- a/src/Parser/ParseAnimation.cpp +++ b/src/Parser/ParseAnimation.cpp @@ -29,13 +29,13 @@ namespace Parser } else { + sf::Vector2f offset; auto texPack = std::make_shared( - texture, frames.first, frames.second); + texture, frames, offset, 0, false, nullptr, false); - if (texPack->totalSize() > 0) + if (texPack->size() > 0) { - animation = std::make_shared( - texPack, frames.first, frames.second); + animation = std::make_shared(texPack, frames); } else { @@ -50,10 +50,9 @@ namespace Parser { return nullptr; } - auto frames = std::make_pair(0u, texPack->totalSize() - 1); + auto frames = std::make_pair(0u, texPack->size() - 1); frames = getFramesKey(elem, "frames", frames); - animation = std::make_shared( - texPack, frames.first, frames.second); + animation = std::make_shared(texPack, frames); } else { @@ -64,10 +63,10 @@ namespace Parser animation->scale(sf::Vector2f(scale, scale)); auto anchor = getAnchorKey(elem, "anchor"); animation->setAnchor(anchor); - auto pos = getVector2fKey(elem, "position"); + auto size = animation->Size(); + auto pos = getPositionKey(elem, "position", size, game.RefSize()); if (getBoolKey(elem, "relativeCoords", true) == true) { - auto size = animation->Size(); GameUtils::setAnchorPosSize(anchor, pos, size, game.RefSize(), game.MinSize()); if (game.StretchToFit() == false) { diff --git a/src/Parser/ParseBitmapFont.cpp b/src/Parser/ParseBitmapFont.cpp deleted file mode 100755 index 1173b4ab..00000000 --- a/src/Parser/ParseBitmapFont.cpp +++ /dev/null @@ -1,73 +0,0 @@ -#include "ParseBitmapFont.h" -#include "BitmapFont.h" -#include "FileUtils.h" -#include "ParseTexture.h" -#include "Utils/ParseUtils.h" - -namespace Parser -{ - using namespace rapidjson; - - void parseBitmapFont(Game& game, const Value& elem) - { - if (isValidString(elem, "id") == false) - { - return; - } - std::string id(elem["id"].GetString()); - if (isValidId(id) == false) - { - return; - } - if (isValidString(elem, "texture") == false) - { - return; - } - - sf::Image img; - std::string textureId = elem["texture"].GetString(); - auto texture = game.Resources().getTexture(textureId); - if (texture == nullptr) - { - if (isValidId(textureId) == false) - { - return; - } - img = parseTextureImg(game, elem); - auto imgSize = img.getSize(); - if (imgSize.x == 0 || imgSize.y == 0) - { - return; - } - texture = parseTextureObj(game, elem, img); - if (texture == nullptr) - { - return; - } - game.Resources().addTexture(textureId, texture); - } - - auto rows = getIntKey(elem, "rows", 16); - auto cols = getIntKey(elem, "cols", 16); - auto padding = getIntKey(elem, "padding"); - bool isVertical = getStringKey(elem, "direction") == "vertical"; - - std::shared_ptr font; - - if (elem.HasMember("charSizeFile")) - { - auto charSizes = FileUtils::readChar(elem["charSizeFile"].GetString(), 258); - font = std::make_shared(texture, rows, cols, padding, isVertical, charSizes); - } - else - { - if (img.getSize().x == 0) - { - img = texture->copyToImage(); - } - font = std::make_shared(texture, rows, cols, padding, isVertical, img); - } - - game.Resources().addBitmapFont(id, font); - } -} diff --git a/src/Parser/ParseBitmapFont.h b/src/Parser/ParseBitmapFont.h deleted file mode 100755 index 4f5bf0d4..00000000 --- a/src/Parser/ParseBitmapFont.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once - -#include "Game.h" -#include "Json/JsonParser.h" - -namespace Parser -{ - void parseBitmapFont(Game& game, const rapidjson::Value& elem); -} diff --git a/src/Parser/ParseButton.cpp b/src/Parser/ParseButton.cpp index bfd94dd6..4abacd52 100755 --- a/src/Parser/ParseButton.cpp +++ b/src/Parser/ParseButton.cpp @@ -70,36 +70,35 @@ namespace Parser std::shared_ptr