commit e62e34e8625c5bc78d216cf347c8f009f4a7287d Author: ezwrk Date: Sun Sep 29 14:42:34 2024 +0300 Initial alpha release diff --git a/License.md b/License.md new file mode 100644 index 0000000..427cf48 --- /dev/null +++ b/License.md @@ -0,0 +1,15 @@ +*This project is licensed under MIT.* + +Copyright (c) 2024 4aiman + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +*Shining Force font* is licensed under CC-BY-3.0 + +The FontStruction “Shining Force (Large)” (https://fontstruct.com/fontstructions/show/1624093) by Patrick H. Lauke is licensed under a Creative Commons Attribution license (http://creativecommons.org/licenses/by/3.0/). + diff --git a/data/images/blank.png b/data/images/blank.png new file mode 100644 index 0000000..4b8e033 Binary files /dev/null and b/data/images/blank.png differ diff --git a/data/images/cursor.png b/data/images/cursor.png new file mode 100644 index 0000000..007de19 Binary files /dev/null and b/data/images/cursor.png differ diff --git a/data/images/fai.png b/data/images/fai.png new file mode 100644 index 0000000..15a9ebe Binary files /dev/null and b/data/images/fai.png differ diff --git a/data/images/inc.png b/data/images/inc.png new file mode 100644 index 0000000..26a588d Binary files /dev/null and b/data/images/inc.png differ diff --git a/data/images/lep.png b/data/images/lep.png new file mode 100644 index 0000000..ecec765 Binary files /dev/null and b/data/images/lep.png differ diff --git a/data/images/map.gif b/data/images/map.gif new file mode 100644 index 0000000..3105437 Binary files /dev/null and b/data/images/map.gif differ diff --git a/data/images/pix.png b/data/images/pix.png new file mode 100644 index 0000000..9c72c52 Binary files /dev/null and b/data/images/pix.png differ diff --git a/data/images/poison.png b/data/images/poison.png new file mode 100644 index 0000000..b1b8df0 Binary files /dev/null and b/data/images/poison.png differ diff --git a/data/images/suc.png b/data/images/suc.png new file mode 100644 index 0000000..bc95eb4 Binary files /dev/null and b/data/images/suc.png differ diff --git a/data/saves/HOLY_ARK_01.bin b/data/saves/HOLY_ARK_01.bin new file mode 100644 index 0000000..c452b37 Binary files /dev/null and b/data/saves/HOLY_ARK_01.bin differ diff --git a/data/saves/HOLY_ARK_02.bin b/data/saves/HOLY_ARK_02.bin new file mode 100644 index 0000000..b654e5c Binary files /dev/null and b/data/saves/HOLY_ARK_02.bin differ diff --git a/data/saves/HOLY_ARK_03.bin b/data/saves/HOLY_ARK_03.bin new file mode 100644 index 0000000..fbdbcc8 Binary files /dev/null and b/data/saves/HOLY_ARK_03.bin differ diff --git a/data/stha.CT b/data/stha.CT new file mode 100644 index 0000000..192ad98 --- /dev/null +++ b/data/stha.CT @@ -0,0 +1,115 @@ + + + + + 0 + "map id" + 1 + 2 Bytes +
mednafen_saturn_libretro.dll+792346
+
+ + 1 + "No description" + 2 Bytes +
mednafen_saturn_libretro.dll+A822BE
+
+ + 2 + "Atrhur's HP" + 2 Bytes +
mednafen_saturn_libretro.dll+89AAF0
+
+ + 3 + "X" + 2 Bytes +
mednafen_saturn_libretro.dll+B959E4
+
+ + 4 + "Step Count in the Area" + 0 + 2 Bytes +
mednafen_saturn_libretro.dll+89B852
+
+ + 5 + "Y?" + 0 + 2 Bytes +
mednafen_saturn_libretro.dll+89BBEF
+
+ + 6 + "No description" + 0 + 4 Bytes +
8966025e
+
+ + 7 + "No description" + 0 + 4 Bytes +
89BBEC
+
+ + 8 + "No description" + 0 + 4 Bytes +
36021876
+
+ + 9 + "No description" + 1 + 0 + 2 Bytes +
mednafen_saturn_libretro.dll+89AB2B
+
+ + 10 + "No description" + 1 + 0 + 2 Bytes +
mednafen_saturn_libretro.dll+8B708A
+
+ + 11 + "No description" + 0 + Byte +
mednafen_saturn_libretro.dll+89BD1C
+
+
+ + + move + mednafen_saturn_libretro.dll+50501 + + 00 + 48 + 83 + F0 + 01 + + + 44 + 88 + 04 + 01 + + + 8B + 05 + 8D + B5 + 92 + + + + +
diff --git a/general.css b/general.css new file mode 100644 index 0000000..661d31e --- /dev/null +++ b/general.css @@ -0,0 +1,128 @@ +@font-face { + font-family: "ShiningForceFont"; + src: url("./shining-force-large.ttf"); +} + +body { + background-color: transparent; + max-width: 400px; +} + +.characters_data { + display: flex; + justify-content: center; + margin-bottom: 5pt; +} + +.character_data { + display: none; + border: 3px orange outset; + border-radius: 5pt; + padding: 5pt; + margin-right: 2.5pt; + margin-left: 2.5pt; + background: #14a; + color: white; + font-family: serif; + font-style: italic; + text-shadow: 1px 1px 0px black; + font-variant-numeric: tabular-nums lining-nums; + width: 33%; +} + +.character_stat { + display: flex; + justify-content: space-between; +} + +.character_data>div:first-of-type { + margin-bottom: 5pt; +} + +.character_name_wrapper { + display: flex; + justify-content: space-between; + image-rendering: pixelated; +} + +.framed_text { + border: 3px orange outset; + border-radius: 5pt; + padding: 5pt; + + background: #14a; + color: white; + font-family: serif; + font-style: italic; + text-shadow: 1px 1px 0px black; + font-variant-numeric: tabular-nums lining-nums; +} + +.map_pointer { + color: white; + float: right; +} + +.visible { + display: block; +} + + + +.map_wrapper{ + width: calc(100% - 10pt); + border: 3px orange outset; + border-radius: 5pt; + margin: 5pt; + background: #14a; + color: white; + font-family: serif; + font-style: italic; + text-shadow: 1px 1px 0px black; + font-variant-numeric: tabular-nums lining-nums; + padding-left : 5pt; + margin-left : 0pt; +} + +.map_canvas { + margin-left: -7pt; +} + +.pixies_table { + table-layout: fixed; + width: calc(100% - 0pt); + border: 3px orange outset; + border-radius: 5pt; + margin: 5pt; + background: #14a; + color: white; + font-family: serif; + font-style: italic; + text-shadow: 1px 1px 0px black; + font-variant-numeric: tabular-nums lining-nums; + margin-left : 0pt; +} + +.pixies_table tr { + display: flex; + justify-content: space-around; +} + +.pixies_table td { + padding: 2pt; + display: flex; + align-items: center; +} + +.pixies_table SPAN { + padding-left: 2pt; + +} + +.pixies_table td img { + height: 32px; +} + +.item_name { + text-shadow: 0px 0px 2px black, 1px 1px 0px black; +} \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..18d4476 --- /dev/null +++ b/index.js @@ -0,0 +1,536 @@ + +////// +let fs = require("fs") +let memoryjs = require('memoryjs') +let process_name = "RALibretro.exe" +let module_name = 'mednafen_saturn_libretro.dll' +let process = memoryjs.openProcess(process_name) +// get specific dll inside of an EXE +//let modules = memoryjs.getModules(process.th32ProcessID); +// dwSize: 304, +// th32ProcessID: 3996, +// cntThreads: 26, +// th32ParentProcessID: 9416, +// pcPriClassBase: 8, +// szExeFile: 'RALibretro.exe', +// handle: 644, +// modBaseAddr: 140699475116032 +let core = memoryjs.findModule(module_name, process.th32ProcessID); +// modBaseAddr: 140714432069632, +// modBaseSize: 24608768, +// szExePath: 'F:\\Games\\Console\\RALibretro\\Cores\\mednafen_saturn_libretro.dll', +// szModule: 'mednafen_saturn_libretro.dll', +// th32ProcessID: 3996, +// GlblcntUsage: 1 + +let hex2int = function(hex) { + let result = parseInt(Number(hex), 10) + return result +} + +let char_tbl = { + [hex2int("0x00")] : ' ', + [hex2int("0x41")] : 'A', + [hex2int("0x42")] : 'B', + [hex2int("0x43")] : 'C', + [hex2int("0x44")] : 'D', + [hex2int("0x45")] : 'E', + [hex2int("0x46")] : 'F', + [hex2int("0x47")] : 'G', + [hex2int("0x48")] : 'H', + [hex2int("0x49")] : 'I', + [hex2int("0x4a")] : 'J', + [hex2int("0x4b")] : 'K', + [hex2int("0x4c")] : 'L', + [hex2int("0x4d")] : 'M', + [hex2int("0x4e")] : 'N', + [hex2int("0x4f")] : 'O', + [hex2int("0x50")] : 'P', + [hex2int("0x51")] : 'Q', + [hex2int("0x52")] : 'R', + [hex2int("0x53")] : 'S', + [hex2int("0x54")] : 'T', + [hex2int("0x55")] : 'U', + [hex2int("0x56")] : 'V', + [hex2int("0x57")] : 'W', + [hex2int("0x58")] : 'X', + [hex2int("0x59")] : 'Y', + [hex2int("0x5a")] : 'Z', + + [hex2int("0x61")] : 'a', + [hex2int("0x62")] : 'b', + [hex2int("0x63")] : 'c', + [hex2int("0x64")] : 'd', + [hex2int("0x65")] : 'e', + [hex2int("0x66")] : 'f', + [hex2int("0x67")] : 'g', + [hex2int("0x68")] : 'h', + [hex2int("0x69")] : 'i', + [hex2int("0x6a")] : 'j', + [hex2int("0x6b")] : 'k', + [hex2int("0x6c")] : 'l', + [hex2int("0x6d")] : 'm', + [hex2int("0x6e")] : 'n', + [hex2int("0x6f")] : 'o', + [hex2int("0x70")] : 'p', + [hex2int("0x71")] : 'q', + [hex2int("0x72")] : 'r', + [hex2int("0x73")] : 's', + [hex2int("0x74")] : 't', + [hex2int("0x75")] : 'u', + [hex2int("0x76")] : 'v', + [hex2int("0x77")] : 'w', + [hex2int("0x78")] : 'x', + [hex2int("0x79")] : 'y', + [hex2int("0x7a")] : 'z', + + [hex2int("0x21")] : '!', + [hex2int("0x2e")] : '.', + [hex2int("0x2f")] : '/', + [hex2int("0x26")] : '&', + [hex2int("0x2b")] : '+', + [hex2int("0x2c")] : ',', + [hex2int("0x30")] : '0', + [hex2int("0x31")] : '1', + [hex2int("0x32")] : '2', + [hex2int("0x33")] : '3', + [hex2int("0x34")] : '4', + [hex2int("0x35")] : '5', + [hex2int("0x36")] : '6', + [hex2int("0x37")] : '7', + [hex2int("0x38")] : '8', + [hex2int("0x39")] : '9', + [hex2int("0x3a")] : ':', + [hex2int("0x3b")] : ';', + [hex2int("0x3f")] : '?', + [hex2int("0xb0")] : '-', +} + +let tint2char = function(int) { + return char_tbl[int] +} + +// CE gives module name + offset (hex) +let offsets = { + discrepancy : hex2int("0x77A340"), // 7840576 + map_id : hex2int("0x18006"), + event_id : hex2int("0x1cf8ac"), + eid : hex2int("0x1cf8b6"), + ingame_indicator : hex2int("0x121510"), + savefile_name : [ + hex2int("0x120731"), + hex2int("0x120730"), + hex2int("0x120733"), + hex2int("0x120732"), + hex2int("0x120735"), + hex2int("0x120734"), + ], + hp : { + arthur : hex2int("0x1207b0"), + melody : hex2int("0x12087c"), + rodi : hex2int("0x120948"), + basso : hex2int("0x120a14"), + akane : hex2int("0x120ae0"), + forte : hex2int("0x120bac"), + doyle : hex2int("0x120c78"), + lisa : hex2int("0x120d44"), + enemy1 : hex2int("0x120e10"), + enemy2 : hex2int("0x120edc"), + enemy3 : hex2int("0x120fa8"), + enemy4 : hex2int("0x121074"), + enemy5 : hex2int("0x121140"), + }, + max_hp : { + arthur : hex2int("0x12073c"), + melody : hex2int("0x120808"), + rodi : hex2int("0x1208d4"), + basso : hex2int("0x1209a0"), + akane : hex2int("0x120a6c"), + forte : hex2int("0x120b38"), + doyle : hex2int("0x120c04"), + lisa : hex2int("0x120cd0"), + enemy1 : hex2int("0x120d9c"), + enemy2 : hex2int("0x120f34"), + }, + mp : { + arthur : hex2int("0x1207b2"), + melody : hex2int("0x12087e"), + rodi : hex2int("0x12094a"), + basso : hex2int("0x120a16"), + akane : hex2int("0x120ae2"), + forte : hex2int("0x120bae"), + lisa : hex2int("0x120d46"), + enemy1 : hex2int("0x120e12"), + enemy2 : hex2int("0x120ede"), + }, + max_mp : { + arthur : hex2int("0x12073e"), + melody : hex2int("0x12080a"), + rodi : hex2int("0x1208d6"), + basso : hex2int("0x1209a2"), + akane : hex2int("0x120a6e"), + forte : hex2int("0x120b3a"), + lisa : hex2int("0x120cd2"), + enemy1 : hex2int("0x120d9e"), + enemy2 : hex2int("0x120e2a"), + }, + status : { + arthur : hex2int("0x1207eb"), + melody : hex2int("0x1208b7"), + rodi : hex2int("0x120983"), + basso : hex2int("0x120a4f"), + akane : hex2int("0x120b1b"), + forte : hex2int("0x120be7"), + doyle : hex2int("0x120cb3"), + lisa : hex2int("0x120d7f"), + }, + position : { + x: hex2int("0x1219dc"), + y: hex2int("0x1219e4"), + z: hex2int("0x1219e1"), + z2: hex2int("0x1219e0"), + north: hex2int("0x1ffc54"), + west: hex2int("0x1ffc58"), + direction: hex2int("0x121a0c") + }, + steps : { + area: hex2int("0x121512") + }, + characters: { + party:hex2int("0x121501"), + acquired:hex2int("0x121503"), + }, + pixies : { + 0 : hex2int("0x1215d8"), + 1 : hex2int("0x1215da"), + 2 : hex2int("0x1215db"), + 3 : hex2int("0x1215dc"), + 4 : hex2int("0x1215dd"), + 5 : hex2int("0x1215de"), + 6 : hex2int("0x1215df"), + }, + +} + + +function readm(offset, type) { + return memoryjs.readMemory(process.handle, core.modBaseAddr+offsets.discrepancy+offset, type || memoryjs.UINT16) +} + +// use this to send data only *1 in a throttle* readings +let throttle = 1 +let throttle_counter = 0 +let last_map_id +let mapped_data = {} +let maps = {} +let last_pos = {} +let reset_cell_size = true +let reset_cell_size_sent = false +let last_ingame +let last_worldmap +let WSS + +if (fs.existsSync('./maps.json')) { + maps = require ('./maps.json') +} + +function new_ws_server(port) { + let WS = require('ws') + let lcrypto = require('crypto') + WSS = new WS.Server({port:port}) + console.log('listening on ws://'+ 'localhost' +":"+ port) + WSS.send = function (client_id, message) { + + let json_data = JSON.stringify(message) + for (let WSC of WSS.clients) { + if (WSC.id == client_id || client_id == "broadcast" || client_id == WSC.client_channel ) { + WSC.send(json_data) + } + } + } + + function WSSconnect(ws_client) { + console.log('[WSS] A new client has appeared!') + ws_client.join_time = new Date() + ws_client.on('pong', function() { + // this will re-animate a "dead" client so WSS_dead_clients_check won't kill it + this.alive = true + }) + + } + + WSS.on('connection', WSSconnect) + + + setInterval( + function() { + let data = { + hp : {}, + max_hp : {}, + mp : {}, + max_mp : {}, + status : {}, + } + + // pixies --------------------------------------------------------------- + let pixies = [] + for (let idx in offsets.pixies) { + let batch = (readm(offsets.pixies[idx], memoryjs.UBYTE)).toString(2) + pixies[idx] = ('0'.repeat(8-batch.length) + batch).split("").reverse().join("") + } + + data.pixies = pixies.join("").split("") + + data.pixies_flags = { + leprechaunt : { + Dana : data.pixies[54], + Tak : data.pixies[55], + Morgan : data.pixies[40], + Kokus : data.pixies[41], + Zircon : data.pixies[42], + Mangus : data.pixies[43], + Darbie : data.pixies[44], + Solo : data.pixies[45], + Stilt : data.pixies[46], + Eric : data.pixies[47], + }, + succubus : { + Muran : data.pixies[34], + Dahlia : data.pixies[35], + Roberia : data.pixies[36], + Lacey : data.pixies[37], + Orlea : data.pixies[38], + Ripanos : data.pixies[39], + Kathorea : data.pixies[24], + Viola : data.pixies[25], + Lunaria : data.pixies[26], + Natasha : data.pixies[27], + }, + incubus : { + Lantano : data.pixies[28], + Enjewel : data.pixies[29], + Masakari : data.pixies[30], + Krupis : data.pixies[31], + Liknis : data.pixies[48], + Cypress : data.pixies[49], + Aster : data.pixies[50], + Adonis : data.pixies[51], + Croton : data.pixies[52], + Boris : data.pixies[53], + }, + pixie : { + Maple : data.pixies[6], + Cherry : data.pixies[7], + Willow : data.pixies[16], + Cedar : data.pixies[17], + Palm : data.pixies[18], + Apple : data.pixies[19], + Lime : data.pixies[20], + Pear : data.pixies[21], + Plum : data.pixies[22], + Baldric : data.pixies[23], + }, + fairy : { + Daisy : data.pixies[8], + Iris : data.pixies[9], + Camellia : data.pixies[10], + Peony : data.pixies[11], + Lily : data.pixies[12], + Azalea : data.pixies[13], + Sisal : data.pixies[14], + Mimosa : data.pixies[15], + Primrose : data.pixies[32], + Clyde : data.pixies[33], + }, + } + // ------ --------------------------------------------------------------- + + data.characters = readm(offsets.characters.acquired).toString(2) + data.party = readm(offsets.characters.party).toString(2) + + let acquired_characters = {} + if (data.characters[0]==1) { acquired_characters.arthur = true } + if (data.characters[1]==1) { acquired_characters.melody = true } + if (data.characters[2]==1) { acquired_characters.rodi = true } + if (data.characters[3]==1) { acquired_characters.basso = true } + if (data.characters[4]==1) { acquired_characters.akane = true } + if (data.characters[5]==1) { acquired_characters.forte = true } + if (data.characters[6]==1) { acquired_characters.doyle = true } + if (data.characters[7]==1) { acquired_characters.lisa = true } + + let party_characters = {} + if (data.party[0]==1) { party_characters.arthur = true } + if (data.party[1]==1) { party_characters.melody = true } + if (data.party[2]==1) { party_characters.rodi = true } + if (data.party[3]==1) { party_characters.basso = true } + if (data.party[4]==1) { party_characters.akane = true } + if (data.party[5]==1) { party_characters.forte = true } + if (data.party[6]==1) { party_characters.doyle = true } + if (data.party[7]==1) { party_characters.lisa = true } + + data.party_characters_list = [] + for (let char in party_characters) { + data.party_characters_list.push(char) + } + + data.acquired_characters_list = [] + for (let char in acquired_characters) { + data.acquired_characters_list.push(char) + } + + + for (let char of data.party_characters_list) { + data.hp[char] = readm(offsets.hp[char]) + data.max_hp[char] = readm(offsets.max_hp[char]) + data.mp[char] = readm(offsets.mp[char]) + data.max_mp[char] = readm(offsets.max_mp[char]) + + + let char_status = readm(offsets.status[char], memoryjs.BYTE) + + let cstat = 'Healthy' + if (char_status != 0) { + if (char_status<=4) { + cstat = 'Poisoned' + } else if (char_status>4) { + cstat = 'Fatally Ill' + } + } + data.status[char] = cstat + } + + + let direction = readm(offsets.position.direction, memoryjs.UINT16) + let steps_in_area = readm(offsets.steps.area) + let current_location = memoryjs.readMemory(process.handle, core.modBaseAddr+offsets.discrepancy+offsets.eid, memoryjs.UINT16_BE); + let current_location1 = memoryjs.readMemory(process.handle, core.modBaseAddr+offsets.discrepancy+offsets.event_id, memoryjs.UINT16_BE); + let worldmap = readm(offsets.map_id, memoryjs.UINT8) + data.location_id = current_location + data.location_id1 = current_location1 + data.steps_in_area = steps_in_area + data.worldmap = worldmap + + data.position = { + x: Math.round(readm(offsets.position.x, memoryjs.INT16)/16)/10, + y: Math.round(readm(offsets.position.y, memoryjs.INT16)/16)/10, + z: Math.round(readm(offsets.position.z, memoryjs.INT8)), + z2: Math.round(readm(offsets.position.z2, memoryjs.INT8)), + north: readm(offsets.position.north, memoryjs.UINT8), + west: readm(offsets.position.west, memoryjs.UINT8), + direction : direction/(65536/360), + } + + + if (current_location && (last_map_id != current_location) || worldmap != last_worldmap) { + data.map_changed = true + maps[last_worldmap] = maps[last_worldmap] || {} + maps[last_worldmap][last_map_id] = mapped_data + mapped_data = maps[worldmap]?.[current_location] || {} + last_map_id = current_location + last_worldmap = worldmap + mapped_data.entrance = {x : data.position.x, y : data.position.y } + mapped_data.map_name = current_location + mapped_data.event_id = current_location1 + mapped_data.location = data.worldmap + last_pos.x = data.position.x + last_pos.y = data.position.y + reset_cell_size = true + } + + + let ingame = (readm(offsets.ingame_indicator, memoryjs.UINT8) == 1) + + if ( data.worldmap == 244) { + //data.reset_cell_size = true + } else { + if ( ingame && + ( (last_pos.y != data.position.y) || + (last_pos.x != data.position.x) || + ( (ingame != last_ingame) && + last_ingame == 0 + ) + ) + ) { + if (reset_cell_size_sent) { + reset_cell_size = false + reset_cell_size_sent = false + } + + mapped_data[data.position.x] = mapped_data[data.position.x] || {} + mapped_data[data.position.x][data.position.y] = mapped_data[data.position.x][data.position.y] || {} + //if ( Math.abs(last_pos.y - data.position.y) + Math.abs(last_pos.x - data.position.x) > 1) { + mapped_data[data.position.x][data.position.y] = mapped_data[data.position.x][data.position.y] || {} + mapped_data[data.position.x][data.position.y].additional = mapped_data[data.position.x][data.position.y].additional || {} + // this breaks older paths, need multiple Y coords! + //mapped_data[data.position.x][data.position.y].additional[last_pos.x] = last_pos.y + mapped_data[data.position.x][data.position.y].additional[last_pos.x] = mapped_data[data.position.x][data.position.y].additional[last_pos.x] || {} + mapped_data[data.position.x][data.position.y].additional[last_pos.x][last_pos.y] = true + mapped_data[data.position.x][data.position.y].z = mapped_data[data.position.x][data.position.y].z || {} + if (data.position.z> 0) {mapped_data[data.position.x][data.position.y].z.up = true} + if (data.position.z< 0) {mapped_data[data.position.x][data.position.y].z.down = true} + if (data.position.z==0) {mapped_data[data.position.x][data.position.y].z.middle = true} + mapped_data[data.position.x][data.position.y].z.z1 = data.position.z + mapped_data[data.position.x][data.position.y].z.z2 = data.position.z2 + //} else { + //mapped_data[data.position.x][data.position.y] = true + //} + } else { + + } + } + + last_ingame = ingame + last_pos.x = data.position.x + last_pos.y = data.position.y + data.mapped_data = mapped_data + data.reset_cell_size = reset_cell_size + //////////// + + let hero_name = [] + let hero_name1 = [] + + let c = 0 + for (let i of offsets.savefile_name) { + hero_name1[c] = readm(i, memoryjs.CHAR) + hero_name[c] = tint2char(hero_name1[c]) + c = c+1 + } + data.hero_name = hero_name + data.hero_name1 = hero_name1 + + throttle_counter = throttle_counter + 1 + if ((throttle_counter > throttle) || data.map_changed) { + throttle_counter = 0 + reset_cell_size_sent = true + reset_cell_size = false + WSS.send ( + null, + data + ) + } + }, + 100 + ) +} + +new_ws_server(13531) + +let save_maps = function () { + fs.writeFile('./maps.json', JSON.stringify(maps || {}) , function() { + setTimeout( + save_maps, + 5000 + ) + }) +} + +save_maps() + + +let { spawn, exec } = require('child_process'); +let ui = spawn('ui.html', { shell: true, detached : true, stdio: 'ignore' }); +ui.unref(); + + + +//memoryjs.closeProcess(process.handle); \ No newline at end of file diff --git a/maps.json b/maps.json new file mode 100644 index 0000000..093d708 --- /dev/null +++ b/maps.json @@ -0,0 +1 @@ +{"8":{"12592":{"7":{"-5":{"additional":{"7":{"-5":true},"8":{"-5":true}},"z":{"middle":true,"z1":0,"z2":0}}},"8":{"-8":{"additional":{"8":{"-9":true,"-7":true}},"z":{"middle":true,"z1":0,"z2":0}},"-7":{"additional":{"8":{"-8":true,"-6":true}},"z":{"middle":true,"z1":0,"z2":0}},"-6":{"additional":{"8":{"-7":true,"-5":true}},"z":{"middle":true,"z1":0,"z2":0}},"-5":{"additional":{"7":{"-5":true},"8":{"-6":true,"-5":true}},"z":{"middle":true,"z1":0,"z2":0}},"-9":{"additional":{"8":{"-8":true}},"z":{"middle":true,"z1":0,"z2":0}},"-10":{"additional":{"8":{"-9":true}},"z":{"middle":true,"z1":0,"z2":0}}},"9":{"-10":{"additional":{"8":{"-10":true}},"z":{"middle":true,"z1":0,"z2":0}}},"10":{"-10":{"additional":{"9":{"-10":true}},"z":{"middle":true,"z1":0,"z2":0}},"-11":{"additional":{"10":{"-10":true}},"z":{"middle":true,"z1":0,"z2":0}},"-12":{"additional":{"10":{"-11":true}},"z":{"middle":true,"z1":0,"z2":0}},"-13":{"additional":{"10":{"-12":true}},"z":{"middle":true,"z1":0,"z2":0}},"-14":{"additional":{"10":{"-13":true}},"z":{"middle":true,"z1":0,"z2":0}}},"11":{"0":{"additional":{"5":{"2":true}},"z":{"middle":true,"z1":0,"z2":0}}},"entrance":{"x":-2,"y":5},"map_name":12592,"event_id":12336,"location":8}},"20":{"12598":{"entrance":{"x":-8.2,"y":-3.2},"map_name":12598,"event_id":13877,"location":20,"-7.7":{"2.3":{"additional":{"-7.7":{"2.3":true}},"z":{"middle":true,"z1":0,"z2":0}}}},"12854":{"entrance":{"x":1.8,"y":1.1},"map_name":12854,"event_id":13877,"location":20,"-11.2":{"-5.2":{"additional":{"-11.2":{"-5.2":true}},"z":{"middle":true,"z1":0,"z2":0}},"-4.2":{"additional":{"-11.2":{"-5.2":true}},"z":{"middle":true,"z1":0,"z2":0}},"-3.2":{"additional":{"-11.2":{"-4.2":true,"-2.2":true}},"z":{"middle":true,"z1":0,"z2":0}},"-2.2":{"additional":{"-11.2":{"-3.2":true},"-12.2":{"-2.2":true}},"z":{"middle":true,"z1":0,"z2":0}},"12.8":{"additional":{"-12.2":{"12.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"13.8":{"additional":{"-11.2":{"12.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"14.8":{"additional":{"-11.2":{"13.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"10.8":{"additional":{"-10.2":{"10.8":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-12.2":{"-2.2":{"additional":{"-11.2":{"-2.2":true},"-13.2":{"-2.2":true}},"z":{"middle":true,"z1":0,"z2":0}},"12.8":{"additional":{"-13.2":{"12.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"10.8":{"additional":{"-11.2":{"10.8":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-13.2":{"-2.2":{"additional":{"-12.2":{"-2.2":true},"-14.2":{"-2.2":true}},"z":{"middle":true,"z1":0,"z2":0}},"10.8":{"additional":{"-13.3":{"9.8":true},"-12.2":{"10.8":true},"-14.2":{"10.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"11.8":{"additional":{"-13.2":{"11.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"12.8":{"additional":{"-13.2":{"11.8":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-14.2":{"-2.2":{"additional":{"-13.2":{"-2.2":true},"-14.2":{"-1.2":true}},"z":{"middle":true,"z1":0,"z2":0}},"-3.2":{"additional":{"-14.2":{"-2.2":true}},"z":{"middle":true,"z1":0,"z2":0}},"10.8":{"additional":{"-13.2":{"10.8":true},"-15.2":{"10.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"-1.2":{"additional":{"-15.2":{"-1.2":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-15.2":{"-3.2":{"additional":{"-14.2":{"-3.2":true}},"z":{"middle":true,"z1":0,"z2":0}},"-1.2":{"additional":{"-16.2":{"-1.2":true},"-15.2":{"-0.2":true}},"z":{"middle":true,"z1":0,"z2":0}},"-0.2":{"additional":{"-15.2":{"-1.2":true,"0.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"0.8":{"additional":{"-15.2":{"-0.2":true,"1.8":true},"-16.2":{"0.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"1.8":{"additional":{"-15.2":{"0.8":true,"2.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"2.8":{"additional":{"-15.2":{"1.8":true},"-16.2":{"2.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"10.8":{"additional":{"-14.2":{"10.8":true},"-16.2":{"10.8":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-16.2":{"-3.2":{"additional":{"-15.2":{"-3.2":true}},"z":{"middle":true,"z1":0,"z2":0}},"-2.2":{"additional":{"-16.2":{"-3.2":true}},"z":{"middle":true,"z1":0,"z2":0}},"-1.2":{"additional":{"-16.2":{"-2.2":true}},"z":{"middle":true,"z1":0,"z2":0}},"0.8":{"additional":{"-15.2":{"0.8":true},"-16.2":{"0.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"2.8":{"additional":{"-15.2":{"2.8":true},"-16.2":{"3.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"3.8":{"additional":{"-16.2":{"2.8":true,"4.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"4.8":{"additional":{"-16.2":{"3.8":true,"5.8":true}},"z":{"down":true,"z1":-1,"z2":-15}},"5.8":{"additional":{"-16.2":{"4.8":true,"5.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"6.8":{"additional":{"-16.2":{"5.8":true,"7.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"7.8":{"additional":{"-16.2":{"6.8":true,"7.8":true},"-15.3":{"7.9":true}},"z":{"middle":true,"z1":0,"z2":0}},"10.8":{"additional":{"-15.2":{"10.8":true},"-16.2":{"10.8":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-15.3":{"7.9":{"additional":{"-16.2":{"7.8":true},"-14.4":{"8.1":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-14.4":{"8.1":{"additional":{"-15.3":{"7.9":true},"-13.6":{"8.9":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-13.6":{"8.9":{"additional":{"-14.4":{"8.1":true},"-13.3":{"9.8":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-13.3":{"9.8":{"additional":{"-13.6":{"8.9":true},"-13.2":{"10.8":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-10.2":{"14.8":{"additional":{"-11.2":{"14.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"15.8":{"additional":{"-10.2":{"14.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"10.8":{"additional":{"-9.2":{"10.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"-3.2":{"additional":{"-11.2":{"-3.2":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-9.2":{"15.8":{"additional":{"-10.2":{"15.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"16.8":{"additional":{"-9.2":{"15.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"12.7":{"additional":{"-8.8":{"13.6":true}},"z":{"middle":true,"z1":0,"z2":0}},"11.8":{"additional":{"-9.2":{"12.7":true}},"z":{"middle":true,"z1":0,"z2":0}},"10.8":{"additional":{"-9.2":{"11.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"-3.2":{"additional":{"-10.2":{"-3.2":true},"-9.2":{"-3.2":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-8.2":{"16.8":{"additional":{"-9.2":{"16.8":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-7.2":{"16.8":{"additional":{"-8.2":{"16.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"11.7":{"additional":{"-6.2":{"11.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"14.7":{"additional":{"-6.2":{"14.8":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-6.2":{"16.8":{"additional":{"-7.2":{"16.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"15.8":{"additional":{"-6.2":{"16.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"14.8":{"additional":{"-6.2":{"15.8":true,"13.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"13.8":{"additional":{"-6.2":{"14.8":true,"12.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"12.8":{"additional":{"-6.2":{"13.8":true,"11.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"11.8":{"additional":{"-6.2":{"12.8":true},"-5.2":{"11.8":true},"-7.2":{"11.7":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-5.2":{"11.8":{"additional":{"-6.2":{"11.8":true},"-4.7":{"11.8":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-4.7":{"11.8":{"additional":{"-5.2":{"11.8":true}},"z":{"middle":true,"z1":0,"z2":40}}},"-8.1":{"14.3":{"additional":{"-7.2":{"14.7":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-8.8":{"13.6":{"additional":{"-8.1":{"14.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-8.7":{"-3.2":{"additional":{"-9.2":{"-3.2":true}},"z":{"middle":true,"z1":0,"z2":40}}}}},"40":{"12592":{"entrance":{"x":-5.7,"y":6.3},"map_name":12592,"event_id":12339,"location":40},"12593":{"entrance":{"x":-29.2,"y":16.3},"map_name":12593,"event_id":12597,"location":40,"-29.2":{"17.3":{"additional":{"-29.2":{"16.3":true,"17.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"16.3":{"additional":{"-29.2":{"17.3":true,"16.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-28.7":{"16.3":{"additional":{"-29.2":{"16.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-28.2":{"16.3":{"additional":{"-28.7":{"16.3":true}},"z":{"middle":true,"z1":0,"z2":40}}},"-19.2":{"31.3":{"additional":{"-19.2":{"31.3":true}},"z":{"middle":true,"z1":0,"z2":0}}}},"12849":{"entrance":{"x":-20.2,"y":27.3},"map_name":12849,"event_id":12336,"location":40,"-27.2":{"16.3":{"additional":{"-27.2":{"16.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"18.3":{"additional":{"-26.2":{"18.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"28.3":{"additional":{"-28.2":{"28.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-26.2":{"16.3":{"additional":{"-27.2":{"16.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"20.3":{"additional":{"-25.2":{"20.3":true},"-26.2":{"21.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"21.3":{"additional":{"-26.2":{"20.3":true,"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"22.3":{"additional":{"-26.2":{"21.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"19.3":{"additional":{"-26.2":{"20.3":true,"18.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"18.3":{"additional":{"-26.2":{"19.3":true,"18.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"28.3":{"additional":{"-27.2":{"28.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-25.2":{"16.3":{"additional":{"-26.2":{"16.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"18.3":{"additional":{"-24.2":{"18.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"19.3":{"additional":{"-25.2":{"18.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"20.3":{"additional":{"-25.2":{"19.3":true,"20.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"22.3":{"additional":{"-26.2":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-24.2":{"16.3":{"additional":{"-25.2":{"16.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"17.3":{"additional":{"-24.2":{"16.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"18.3":{"additional":{"-24.2":{"17.3":true},"-23.2":{"18.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"22.3":{"additional":{"-25.2":{"22.3":true},"-23.2":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"21.3":{"additional":{"-24.2":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"20.3":{"additional":{"-24.2":{"21.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"27.3":{"additional":{"-24.2":{"27.3":true,"26.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"26.3":{"additional":{"-12.2":{"11.3":true},"-24.2":{"27.3":true,"26.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-23.2":{"22.3":{"additional":{"-24.2":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"20.3":{"additional":{"-24.2":{"20.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"19.3":{"additional":{"-23.2":{"20.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"18.3":{"additional":{"-23.2":{"19.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"27.3":{"additional":{"-24.2":{"27.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-28.2":{"18.3":{"additional":{"-27.2":{"18.3":true},"-29.2":{"18.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"19.3":{"additional":{"-28.2":{"18.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"20.3":{"additional":{"-28.2":{"19.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"22.3":{"additional":{"-29.2":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"28.3":{"additional":{"-29.2":{"28.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-29.2":{"18.3":{"additional":{"-28.2":{"18.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"20.3":{"additional":{"-28.2":{"20.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"22.3":{"additional":{"-30.2":{"22.3":true},"-28.2":{"22.3":true},"-29.2":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"28.3":{"additional":{"-30.2":{"28.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-30.2":{"20.3":{"additional":{"-29.2":{"20.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"21.3":{"additional":{"-30.2":{"20.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"22.3":{"additional":{"-30.2":{"21.3":true,"23.3":true},"-29.2":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"23.3":{"additional":{"-30.2":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"24.3":{"additional":{"-30.2":{"23.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"25.3":{"additional":{"-30.2":{"24.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"26.3":{"additional":{"-30.2":{"25.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"27.3":{"additional":{"-30.2":{"26.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"28.3":{"additional":{"-30.2":{"27.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-22.2":{"27.3":{"additional":{"-23.2":{"27.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-21.2":{"27.3":{"additional":{"-22.2":{"27.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-20.2":{"27.3":{"additional":{"-21.2":{"27.3":true},"-20.2":{"27.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"28.3":{"additional":{"-20.2":{"27.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-19.2":{"28.3":{"additional":{"-20.2":{"28.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-18.2":{"28.3":{"additional":{"-19.2":{"28.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-17.2":{"28.3":{"additional":{"-18.2":{"28.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-16.2":{"28.3":{"additional":{"-17.2":{"28.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"13.8":{"additional":{"-15.2":{"13.4":true}},"z":{"middle":true,"z1":0,"z2":0}},"16.8":{"additional":{"-16.7":{"16.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-15.2":{"28.3":{"additional":{"-16.2":{"28.3":true},"-15.2":{"28.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"27.3":{"additional":{"-15.2":{"28.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"26.3":{"additional":{"-15.2":{"27.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"25.3":{"additional":{"-15.2":{"26.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"24.3":{"additional":{"-15.2":{"25.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"19.3":{"additional":{"-14.2":{"19.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"18.3":{"additional":{"-15.2":{"19.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"17.1":{"additional":{"-15.2":{"18.3":true},"-16.2":{"16.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"13.4":{"additional":{"-14.2":{"13.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"12.3":{"additional":{"-15.2":{"13.4":true}},"z":{"middle":true,"z1":0,"z2":0}},"11.3":{"additional":{"-15.2":{"12.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"10.3":{"additional":{"-15.2":{"11.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"9.3":{"additional":{"-15.2":{"10.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-14.2":{"24.3":{"additional":{"-15.2":{"24.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"19.3":{"additional":{"-13.2":{"19.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"16.8":{"additional":{"-15.2":{"17.1":true}},"z":{"middle":true,"z1":0,"z2":0}},"13.8":{"additional":{"-13.7":{"14.3":true},"-14.2":{"14.3":true,"13.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"16.3":{"additional":{"-14.2":{"16.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"15.3":{"additional":{"-14.2":{"16.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"14.3":{"additional":{"-14.2":{"15.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"9.3":{"additional":{"-15.2":{"9.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-13.2":{"24.3":{"additional":{"-14.2":{"24.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"19.3":{"additional":{"-12.2":{"19.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"9.3":{"additional":{"-14.2":{"9.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-12.2":{"24.3":{"additional":{"-13.2":{"24.3":true},"-12.2":{"25.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"25.3":{"additional":{"-12.2":{"24.3":true,"26.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"26.3":{"additional":{"-12.2":{"25.3":true,"27.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"27.3":{"additional":{"-12.2":{"26.3":true,"27.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"23.3":{"additional":{"-12.2":{"24.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"22.3":{"additional":{"-12.2":{"23.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"21.3":{"additional":{"-12.2":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"20.3":{"additional":{"-12.2":{"21.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"19.3":{"additional":{"-12.2":{"20.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"9.3":{"additional":{"-13.2":{"9.3":true},"-12.2":{"9.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"10.3":{"additional":{"-12.2":{"9.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"11.3":{"additional":{"-12.2":{"10.3":true,"11.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-13.7":{"16.3":{"additional":{"-14.2":{"16.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"14.3":{"additional":{"-13.5":{"15.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-13.5":{"15.3":{"additional":{"-13.7":{"16.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-16.7":{"14.3":{"additional":{"-16.2":{"13.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"16.3":{"additional":{"-17":{"15.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-17":{"15.3":{"additional":{"-16.7":{"14.3":true}},"z":{"middle":true,"z1":0,"z2":0}}}},"13105":{"entrance":{"x":-19.2,"y":31.3},"map_name":13105,"event_id":12597,"location":40,"-3.7":{"-1.7":{"additional":{"-4.7":{"-1.7":true},"-3.7":{"-2.7":true}},"z":{"middle":true,"z1":0,"z2":0}},"-2.7":{"additional":{"-2.7":{"-2.7":true}},"z":{"middle":true}},"-3.7":{"additional":{"-3.7":{"-2.7":true}},"z":{"middle":true}},"-0.7":{"additional":{"-3.7":{"-1.7":true},"-2.7":{"-0.7":true}},"z":{"middle":true,"z1":0,"z2":0}},"0.3":{"additional":{"-3.7":{"-0.7":true}},"z":{"middle":true,"z1":0,"z2":0}},"1.3":{"additional":{"-3.7":{"0.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"2.3":{"additional":{"-3.7":{"1.3":true}},"z":{"middle":true,"z1":0,"z2":10}},"3.3":{"additional":{"-3.7":{"2.3":true}},"z":{"middle":true,"z1":0,"z2":80}},"4.3":{"additional":{"-3.7":{"3.3":true,"5.3":true}},"z":{"middle":true}},"5.3":{"additional":{"-3.7":{"4.3":true,"6.3":true}},"z":{"middle":true}},"6.3":{"additional":{"-3.7":{"5.3":true},"-2.7":{"6.3":true}},"z":{"middle":true}},"7.3":{"additional":{"-3.7":{"6.3":true}},"z":{"middle":true}},"8.3":{"additional":{"-3.7":{"7.3":true,"8.3":true}},"z":{"middle":true}}},"-2.7":{"-1.7":{"additional":{"-3.7":{"-1.7":true},"-2.7":{"-0.7":true,"-1.7":true,"-2.7":true}},"z":{"middle":true,"z1":0,"z2":0}},"-2.7":{"additional":{"-2.7":{"-1.7":true,"-2.7":true}},"z":{"middle":true,"z1":0,"z2":0}},"1.3":{"additional":{"-3.7":{"1.3":true}},"z":{"middle":true}},"0.3":{"additional":{"-2.7":{"1.3":true}},"z":{"middle":true}},"-0.7":{"additional":{"-2.7":{"0.3":true,"-1.7":true}},"z":{"middle":true,"z1":0,"z2":0}},"8.3":{"additional":{"-3.7":{"8.3":true}},"z":{"middle":true}},"7.3":{"additional":{"-2.7":{"8.3":true}},"z":{"middle":true}},"6.3":{"additional":{"-2.7":{"7.3":true,"6.3":true}},"z":{"middle":true}}},"-4.7":{"-3.7":{"additional":{"-3.7":{"-3.7":true},"-4.7":{"-3.7":true}},"z":{"middle":true}},"-2.7":{"additional":{"-4.7":{"-3.7":true}},"z":{"middle":true}},"-1.7":{"additional":{"-4.7":{"-2.7":true,"-0.7":true}},"z":{"middle":true}},"0.3":{"additional":{"-5.7":{"0.3":true}},"z":{"middle":true}},"-0.7":{"additional":{"-4.7":{"0.3":true}},"z":{"middle":true}},"4.3":{"additional":{"-3.7":{"4.3":true}},"z":{"middle":true}},"3.3":{"additional":{"-4.7":{"4.3":true},"-3.7":{"3.3":true}},"z":{"middle":true,"z1":0,"z2":80}},"-5.7":{"additional":{"-5.7":{"-5.7":true}},"z":{"middle":true}}},"-5.7":{"-1.7":{"additional":{"-4.7":{"-1.7":true}},"z":{"middle":true}},"-0.7":{"additional":{"-5.7":{"-1.7":true}},"z":{"middle":true}},"0.3":{"additional":{"-5.7":{"-0.7":true,"0.3":true}},"z":{"middle":true}},"3.3":{"additional":{"-4.7":{"3.3":true},"-5.7":{"4.3":true},"-6.7":{"3.3":true}},"z":{"middle":true,"z1":0,"z2":80}},"4.3":{"additional":{"-5.7":{"3.3":true}},"z":{"middle":true,"z1":0,"z2":80}},"-5.7":{"additional":{"-6.7":{"-5.7":true},"-4.7":{"-5.7":true}},"z":{"middle":true}},"5.3":{"additional":{"-5.7":{"4.3":true}},"z":{"middle":true,"z1":0,"z2":90}}},"-6.7":{"3.3":{"additional":{"-5.7":{"3.3":true},"-6.7":{"2.3":true}},"z":{"middle":true}},"2.3":{"additional":{"-6.7":{"3.3":true,"2.3":true},"-7.7":{"2.3":true}},"z":{"middle":true}},"-3.7":{"additional":{"-7.7":{"-3.7":true},"-6.7":{"-4.7":true}},"z":{"middle":true}},"-4.7":{"additional":{"-6.7":{"-3.7":true,"-5.7":true}},"z":{"middle":true}},"-5.7":{"additional":{"-6.7":{"-4.7":true},"-5.7":{"-5.7":true}},"z":{"middle":true}}},"-7.7":{"2.3":{"additional":{"-6.7":{"2.3":true},"-7.7":{"1.3":true}},"z":{"middle":true}},"1.3":{"additional":{"-7.7":{"2.3":true,"0.3":true}},"z":{"middle":true}},"0.3":{"additional":{"-7.7":{"1.3":true,"-0.7":true}},"z":{"middle":true}},"-0.7":{"additional":{"-7.7":{"0.3":true,"-1.7":true}},"z":{"middle":true}},"-1.7":{"additional":{"-7.7":{"-0.7":true,"-2.7":true}},"z":{"middle":true}},"-2.7":{"additional":{"-7.7":{"-1.7":true,"-3.7":true}},"z":{"middle":true}},"-3.7":{"additional":{"-7.7":{"-2.7":true},"-6.7":{"-3.7":true}},"z":{"middle":true}}}}},"68":{"12595":{"entrance":{"x":-6.7,"y":23.3},"map_name":12595,"event_id":12592,"location":68,"-9.7":{"16.3":{"additional":{"-9.7":{"15.3":true,"17.3":true,"16.3":true},"-8.7":{"16.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"17.3":{"additional":{"-9.7":{"16.3":true,"18.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"18.3":{"additional":{"-9.7":{"17.3":true,"19.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"19.3":{"additional":{"-9.7":{"18.3":true,"19.3":true},"-8.7":{"19.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"23.3":{"additional":{"-8.7":{"23.3":true},"-9.7":{"24.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"24.3":{"additional":{"-9.7":{"23.3":true,"24.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"15.3":{"additional":{"-9.7":{"16.3":true,"15.3":true},"-7.7":{"14.3":true},"-8.7":{"23.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"14.3":{"additional":{"-9.7":{"15.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"13.3":{"additional":{"-9.7":{"14.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"12.3":{"additional":{"-9.7":{"13.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"11.3":{"additional":{"-9.7":{"12.3":true,"11.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"6.3":{"additional":{"-8.7":{"6.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"10.3":{"additional":{"-10.7":{"10.3":true},"-9.7":{"10.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"9.3":{"additional":{"-9.7":{"10.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"8.3":{"additional":{"-9.7":{"9.3":true,"7.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"7.3":{"additional":{"-9.7":{"8.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"5.3":{"additional":{"-10.7":{"5.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"25.3":{"additional":{"-8.7":{"25.3":true},"-10.7":{"25.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"22.3":{"additional":{"-10.7":{"22.3":true},"-8.7":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"27.3":{"additional":{"-8.7":{"27.3":true},"-9.7":{"28.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"28.3":{"additional":{"-9.7":{"27.3":true,"29.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"29.3":{"additional":{"-9.7":{"28.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-8.7":{"19.3":{"additional":{"-9.7":{"19.3":true},"-8.7":{"20.3":true,"19.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"20.3":{"additional":{"-8.7":{"19.3":true},"-7.7":{"20.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"23.3":{"additional":{"-7.7":{"23.3":true},"-8.7":{"23.3":true},"-9.7":{"23.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"16.3":{"additional":{"-9.7":{"16.3":true},"-7.7":{"16.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"11.3":{"additional":{"-9.7":{"11.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"10.3":{"additional":{"-8.7":{"11.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"9.3":{"additional":{"-8.7":{"10.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"8.3":{"additional":{"-8.7":{"9.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"7.3":{"additional":{"-8.7":{"8.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"6.3":{"additional":{"-8.7":{"7.3":true,"6.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"5.3":{"additional":{"-9.7":{"5.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"12.3":{"additional":{"-7.7":{"12.3":true},"-8.7":{"13.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"13.3":{"additional":{"-8.7":{"12.3":true,"14.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"14.3":{"additional":{"-8.7":{"13.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"25.3":{"additional":{"-7.7":{"25.3":true},"-8.7":{"24.3":true},"-9.7":{"25.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"24.3":{"additional":{"-8.7":{"25.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"22.3":{"additional":{"-9.7":{"22.3":true},"-7.7":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"27.3":{"additional":{"-7.7":{"27.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-7.7":{"20.3":{"additional":{"-8.7":{"20.3":true},"-6.7":{"20.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"23.3":{"additional":{"-6.7":{"23.3":true},"-8.7":{"23.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"16.3":{"additional":{"-8.7":{"16.3":true},"-7.7":{"17.3":true,"15.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"17.3":{"additional":{"-7.7":{"16.3":true},"-6.7":{"17.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"15.3":{"additional":{"-7.7":{"16.3":true,"14.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"14.3":{"additional":{"-7.7":{"15.3":true,"14.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"5.3":{"additional":{"-8.7":{"5.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"6.3":{"additional":{"-7.7":{"5.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"7.3":{"additional":{"-7.7":{"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"8.3":{"additional":{"-7.7":{"7.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"9.3":{"additional":{"-7.7":{"8.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"10.3":{"additional":{"-7.7":{"9.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"11.3":{"additional":{"-7.7":{"10.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"12.3":{"additional":{"-7.7":{"11.3":true},"-8.7":{"12.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"25.3":{"additional":{"-6.7":{"25.3":true},"-8.7":{"25.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"22.3":{"additional":{"-8.7":{"22.3":true},"-7.7":{"21.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"21.3":{"additional":{"-7.7":{"22.3":true,"21.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"27.3":{"additional":{"-6.7":{"27.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-6.7":{"20.3":{"additional":{"-7.7":{"20.3":true},"-6.7":{"21.3":true,"19.3":true,"20.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"21.3":{"additional":{"-6.7":{"20.3":true,"22.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"22.3":{"additional":{"-6.7":{"21.3":true,"23.3":true},"-5.7":{"22.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"23.3":{"additional":{"-6.7":{"22.3":true,"23.3":true},"-7.7":{"23.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"19.3":{"additional":{"-6.7":{"20.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"17.3":{"additional":{"-7.7":{"17.3":true},"-6.7":{"17.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"12.3":{"additional":{"-7.7":{"12.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"13.3":{"additional":{"-6.7":{"12.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"14.3":{"additional":{"-6.7":{"13.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"15.3":{"additional":{"-6.7":{"14.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"16.3":{"additional":{"-6.7":{"15.3":true,"16.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"27.3":{"additional":{"-5.7":{"27.3":true},"-6.7":{"26.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"26.3":{"additional":{"-6.7":{"27.3":true,"25.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"25.3":{"additional":{"-6.7":{"26.3":true,"24.3":true},"-7.7":{"25.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"24.3":{"additional":{"-6.7":{"25.3":true},"-5.7":{"24.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-5.7":{"22.3":{"additional":{"-6.7":{"22.3":true},"-4.7":{"22.3":true},"-5.7":{"21.3":true,"23.3":true}},"z":{"down":true,"z1":0,"z2":15,"middle":true}},"16.3":{"additional":{"-6.7":{"16.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"18.3":{"additional":{"-4.7":{"18.3":true},"-5.7":{"19.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"19.3":{"additional":{"-5.7":{"18.3":true,"20.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"20.3":{"additional":{"-5.7":{"19.3":true,"21.3":true},"-4.7":{"20.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"21.3":{"additional":{"-5.7":{"20.3":true,"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"23.3":{"additional":{"-5.7":{"22.3":true,"24.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"27.3":{"additional":{"-4.7":{"27.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"24.3":{"additional":{"-6.7":{"24.3":true},"-5.7":{"23.3":true,"24.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-4.7":{"22.3":{"additional":{"-5.7":{"22.3":true},"-3.7":{"22.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"16.3":{"additional":{"-5.7":{"16.3":true},"-4.7":{"15.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"15.3":{"additional":{"-4.7":{"16.3":true,"14.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"14.3":{"additional":{"-4.7":{"15.3":true,"13.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"13.3":{"additional":{"-4.7":{"14.3":true},"-3.7":{"13.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"17.3":{"additional":{"-4.7":{"16.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"18.3":{"additional":{"-4.7":{"17.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"20.3":{"additional":{"-5.7":{"20.3":true},"-4.7":{"20.3":true},"-3.7":{"20.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"23.3":{"additional":{"-5.7":{"23.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"26.3":{"additional":{"-3.7":{"26.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"27.3":{"additional":{"-4.7":{"26.3":true,"27.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-3.7":{"22.3":{"additional":{"-4.7":{"22.3":true},"-3.7":{"21.3":true,"22.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"21.3":{"additional":{"-3.7":{"22.3":true,"21.3":true,"20.3":true}},"z":{"down":true,"z1":0,"z2":15,"middle":true}},"13.3":{"additional":{"-4.7":{"13.3":true},"-3.7":{"12.3":true,"13.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"12.3":{"additional":{"-3.7":{"13.3":true,"12.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"20.3":{"additional":{"-4.7":{"20.3":true},"-3.7":{"21.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"23.3":{"additional":{"-4.7":{"23.3":true},"-2.7":{"23.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"24.3":{"additional":{"-3.7":{"23.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"25.3":{"additional":{"-3.7":{"24.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"26.3":{"additional":{"-3.7":{"25.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-10.7":{"6.3":{"additional":{"-9.7":{"6.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"10.3":{"additional":{"-11.7":{"10.3":true},"-9.7":{"10.3":true},"-10.7":{"11.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"11.3":{"additional":{"-10.7":{"10.3":true,"12.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"12.3":{"additional":{"-10.7":{"11.3":true,"13.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"13.3":{"additional":{"-10.7":{"12.3":true,"14.3":true},"-11.7":{"13.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"14.3":{"additional":{"-10.7":{"14.3":true,"15.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"15.3":{"additional":{"-10.7":{"14.3":true,"16.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"16.3":{"additional":{"-10.7":{"15.3":true,"17.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"17.3":{"additional":{"-10.7":{"16.3":true,"18.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"18.3":{"additional":{"-10.7":{"17.3":true,"19.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"19.3":{"additional":{"-10.7":{"18.3":true,"19.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"8.3":{"additional":{"-9.7":{"8.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"5.3":{"additional":{"-11.7":{"5.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"25.3":{"additional":{"-9.7":{"25.3":true},"-10.7":{"24.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"24.3":{"additional":{"-10.7":{"25.3":true,"23.3":true,"24.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"23.3":{"additional":{"-10.7":{"23.3":true,"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"22.3":{"additional":{"-10.7":{"23.3":true},"-9.7":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"27.3":{"additional":{"-10.7":{"27.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-11.7":{"6.3":{"additional":{"-10.7":{"6.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"2.3":{"additional":{"-12.7":{"2.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"3.3":{"additional":{"-11.7":{"2.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"4.3":{"additional":{"-11.7":{"3.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"5.3":{"additional":{"-11.7":{"5.3":true},"-12.7":{"5.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"10.3":{"additional":{"-12.7":{"10.3":true},"-11.7":{"9.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"13.3":{"additional":{"-10.7":{"13.3":true},"-12.7":{"13.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"8.3":{"additional":{"-10.7":{"8.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"9.3":{"additional":{"-11.7":{"8.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"27.3":{"additional":{"-10.7":{"27.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"28.3":{"additional":{"-11.7":{"27.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-12.7":{"6.3":{"additional":{"-11.7":{"6.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"7.3":{"additional":{"-12.7":{"6.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"8.3":{"additional":{"-12.7":{"7.3":true,"9.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"9.3":{"additional":{"-12.7":{"8.3":true,"9.3":true},"-13.7":{"9.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"2.3":{"additional":{"-13.7":{"2.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"5.3":{"additional":{"-11.7":{"5.3":true},"-13.7":{"5.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"10.3":{"additional":{"-13.7":{"10.3":true},"-11.7":{"10.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"13.3":{"additional":{"-11.7":{"13.3":true},"-13.7":{"13.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"28.3":{"additional":{"-11.7":{"28.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-13.7":{"9.3":{"additional":{"-12.7":{"9.3":true},"-13.7":{"8.3":true,"10.3":true},"-14.7":{"9.3":true}},"z":{"down":true,"z1":-1,"z2":-120,"middle":true}},"1.3":{"additional":{"-14.7":{"1.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"2.3":{"additional":{"-13.7":{"1.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"5.3":{"additional":{"-12.7":{"5.3":true},"-13.7":{"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"6.3":{"additional":{"-13.7":{"5.3":true,"7.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"7.3":{"additional":{"-13.7":{"6.3":true,"8.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"8.3":{"additional":{"-13.7":{"7.3":true,"9.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"10.3":{"additional":{"-13.7":{"9.3":true,"10.3":true},"-12.7":{"10.3":true},"-14.7":{"10.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"13.3":{"additional":{"-12.7":{"13.3":true},"-14.7":{"13.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"28.3":{"additional":{"-12.7":{"28.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"24.3":{"additional":{"-14.7":{"24.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-14.7":{"9.3":{"additional":{"-13.7":{"9.3":true},"-15.7":{"9.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"7.3":{"additional":{"-15.7":{"7.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"6.3":{"additional":{"-14.7":{"7.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"5.3":{"additional":{"-14.7":{"6.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"4.3":{"additional":{"-14.7":{"5.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"3.3":{"additional":{"-14.7":{"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"2.8":{"additional":{"-14.7":{"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"2.3":{"additional":{"-14.7":{"2.8":true}},"z":{"down":true,"z1":-1,"z2":-60}},"1.8":{"additional":{"-14.7":{"2.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"1.3":{"additional":{"-14.7":{"1.8":true}},"z":{"down":true,"z1":-1,"z2":-120}},"10.3":{"additional":{"-13.7":{"10.3":true},"-15.2":{"10.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"13.3":{"additional":{"-13.7":{"13.3":true},"-15.7":{"13.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"28.3":{"additional":{"-13.7":{"28.3":true},"-14.7":{"28.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"27.3":{"additional":{"-14.7":{"28.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"26.3":{"additional":{"-14.7":{"27.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"25.3":{"additional":{"-14.7":{"26.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"24.3":{"additional":{"-14.7":{"25.3":true},"-13.7":{"24.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"23.3":{"additional":{"-14.7":{"24.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"22.3":{"additional":{"-14.7":{"23.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"21.3":{"additional":{"-14.7":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"19.3":{"additional":{"-15.7":{"19.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-15.7":{"9.3":{"additional":{"-14.7":{"9.3":true},"-16.7":{"9.3":true},"-15.7":{"8.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"8.3":{"additional":{"-15.7":{"9.3":true,"7.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"7.3":{"additional":{"-15.7":{"8.3":true,"7.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"10.3":{"additional":{"-15.2":{"10.3":true},"-16.2":{"10.3":true}},"z":{"down":true,"z1":-1,"z2":-60}},"13.3":{"additional":{"-14.7":{"13.3":true},"-16.7":{"13.3":true},"-15.7":{"13.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"21.3":{"additional":{"-14.7":{"21.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"20.3":{"additional":{"-15.7":{"21.3":true,"20.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"19.3":{"additional":{"-15.7":{"20.3":true},"-14.7":{"19.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"18.3":{"additional":{"-15.7":{"19.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"3.3":{"additional":{"-14.7":{"3.3":true},"-15.7":{"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-15.2":{"10.3":{"additional":{"-14.7":{"10.3":true},"-15.7":{"10.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-16.2":{"10.3":{"additional":{"-15.7":{"10.3":true},"-16.7":{"10.3":true}},"z":{"down":true,"z1":-1,"z2":-120}}},"-16.7":{"10.3":{"additional":{"-16.2":{"10.3":true},"-16.7":{"9.3":true,"10.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"9.3":{"additional":{"-16.7":{"10.3":true,"9.3":true},"-15.7":{"9.3":true}},"z":{"down":true,"z1":-1,"z2":-120}},"13.3":{"additional":{"-15.7":{"13.3":true},"-16.7":{"13.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"18.3":{"additional":{"-15.7":{"18.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"23.3":{"additional":{"-17.7":{"23.3":true},"-16.7":{"24.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"24.3":{"additional":{"-16.7":{"23.3":true,"25.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"25.3":{"additional":{"-16.7":{"24.3":true,"26.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"26.3":{"additional":{"-16.7":{"25.3":true,"26.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"3.3":{"additional":{"-15.7":{"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-2.7":{"23.3":{"additional":{"-3.7":{"23.3":true},"-1.7":{"23.3":true},"-2.7":{"23.3":true}},"z":{"middle":true,"z1":0,"z2":15}}},"-1.7":{"23.3":{"additional":{"-2.7":{"23.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-17.7":{"18.3":{"additional":{"-16.7":{"18.3":true},"-17.7":{"19.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"19.3":{"additional":{"-17.7":{"19.3":true,"20.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"20.3":{"additional":{"-17.7":{"19.3":true,"21.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"21.3":{"additional":{"-17.7":{"20.3":true,"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"22.3":{"additional":{"-17.7":{"21.3":true,"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"23.3":{"additional":{"-17.7":{"22.3":true},"-16.7":{"23.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"3.3":{"additional":{"-16.7":{"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"4.3":{"additional":{"-17.7":{"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"5.3":{"additional":{"-17.7":{"4.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"6.3":{"additional":{"-17.7":{"5.3":true,"7.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"7.3":{"additional":{"-17.7":{"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-18.7":{"18.3":{"additional":{"-17.7":{"18.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"17.3":{"additional":{"-18.7":{"18.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"6.3":{"additional":{"-18.7":{"6.3":true},"-17.7":{"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-19.7":{"17.3":{"additional":{"-18.7":{"17.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"16.3":{"additional":{"-19.7":{"17.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"6.3":{"additional":{"-19.7":{"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-20.7":{"16.3":{"additional":{"-19.7":{"16.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"15.3":{"additional":{"-20.7":{"16.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"14.3":{"additional":{"-20.7":{"15.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"6.3":{"additional":{"-19.7":{"6.3":true},"-20.7":{"5.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"5.3":{"additional":{"-20.7":{"6.3":true,"4.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"4.3":{"additional":{"-20.7":{"5.3":true,"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"3.3":{"additional":{"-20.7":{"4.3":true,"2.3":true},"-21.7":{"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"2.3":{"additional":{"-20.7":{"3.3":true,"2.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-21.7":{"14.3":{"additional":{"-20.7":{"14.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"13.3":{"additional":{"-21.7":{"14.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"12.3":{"additional":{"-21.7":{"13.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"11.3":{"additional":{"-21.7":{"12.3":true,"11.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"6.3":{"additional":{"-20.7":{"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"3.3":{"additional":{"-20.7":{"3.3":true},"-22.7":{"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-22.7":{"6.3":{"additional":{"-21.7":{"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"3.3":{"additional":{"-21.7":{"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-23.7":{"6.3":{"additional":{"-22.7":{"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"7.3":{"additional":{"-23.7":{"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}}}},"12851":{"entrance":{"x":-25.7,"y":26.3},"map_name":12851,"event_id":13109,"location":68,"-1.2":{"26.3":{"additional":{"-1.2":{"26.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-2.2":{"26.3":{"additional":{"-1.2":{"26.3":true},"-2.2":{"26.3":true,"27.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"27.3":{"additional":{"-2.2":{"26.3":true},"-3.2":{"27.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"25.3":{"additional":{"-2.2":{"26.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"24.3":{"additional":{"-2.2":{"25.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"23.3":{"additional":{"-2.2":{"23.3":true,"24.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"22.3":{"additional":{"-2.2":{"23.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-3.2":{"27.3":{"additional":{"-2.2":{"27.3":true},"-4.2":{"27.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"22.3":{"additional":{"-2.2":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-4.2":{"27.3":{"additional":{"-3.2":{"27.3":true},"-5.2":{"27.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"22.3":{"additional":{"-3.2":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"14.3":{"additional":{"-5.2":{"14.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"15.3":{"additional":{"-4.2":{"14.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"16.3":{"additional":{"-4.2":{"15.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"17.3":{"additional":{"-4.2":{"16.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"17.7":{"additional":{"-4.2":{"17.3":true,"17.7":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-5.2":{"27.3":{"additional":{"-4.2":{"27.3":true},"-5.2":{"26.3":true,"28.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"26.3":{"additional":{"-5.2":{"27.3":true,"26.3":true},"-6.2":{"26.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"22.3":{"additional":{"-4.2":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"14.3":{"additional":{"-6.2":{"14.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"28.3":{"additional":{"-5.2":{"27.3":true},"-6.2":{"28.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-6.2":{"26.3":{"additional":{"-5.2":{"26.3":true},"-7.2":{"26.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"22.3":{"additional":{"-5.2":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"14.3":{"additional":{"-7.2":{"14.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"28.3":{"additional":{"-5.2":{"28.3":true},"-7.2":{"28.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"17.3":{"additional":{"-7.2":{"17.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-7.2":{"26.3":{"additional":{"-6.2":{"26.3":true},"-8.2":{"26.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"22.3":{"additional":{"-6.2":{"22.3":true},"-7.2":{"21.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"17.3":{"additional":{"-8.2":{"17.3":true},"-6.2":{"17.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"16.3":{"additional":{"-7.2":{"17.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"15.3":{"additional":{"-7.2":{"16.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"14.3":{"additional":{"-7.2":{"15.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"28.3":{"additional":{"-6.2":{"28.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"21.3":{"additional":{"-7.2":{"22.3":true,"21.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-8.2":{"26.3":{"additional":{"-7.2":{"26.3":true},"-8.2":{"26.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"22.3":{"additional":{"-7.2":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"17.3":{"additional":{"-9.2":{"17.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-9.2":{"22.3":{"additional":{"-8.2":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"21.3":{"additional":{"-9.2":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"20.3":{"additional":{"-9.2":{"21.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"19.3":{"additional":{"-9.2":{"20.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"18.3":{"additional":{"-9.2":{"19.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"17.3":{"additional":{"-9.2":{"18.3":true}},"z":{"middle":true,"z1":0,"z2":0}}}},"13107":{"entrance":{"x":-4.2,"y":18.2},"map_name":13107,"event_id":13109,"location":68,"-4.2":{"18.3":{"additional":{"-4.2":{"18.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"19.3":{"additional":{"-4.2":{"18.3":true,"19.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"12.3":{"additional":{"-5.2":{"12.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"11.3":{"additional":{"-4.2":{"12.3":true},"-3.2":{"11.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"10.3":{"additional":{"-4.2":{"11.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"9.3":{"additional":{"-4.2":{"10.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"8.3":{"additional":{"-4.2":{"9.3":true,"8.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"7.3":{"additional":{"-4.2":{"8.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"6.3":{"additional":{"-4.2":{"7.3":true,"5.3":true},"-3.2":{"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"5.3":{"additional":{"-4.2":{"6.3":true,"4.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"4.3":{"additional":{"-4.2":{"5.3":true,"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"3.3":{"additional":{"-4.2":{"4.3":true},"-3.2":{"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-5.2":{"19.3":{"additional":{"-4.2":{"19.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"12.3":{"additional":{"-6.2":{"12.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"6.3":{"additional":{"-4.2":{"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-6.2":{"19.3":{"additional":{"-5.2":{"19.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"12.3":{"additional":{"-7.2":{"12.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"6.3":{"additional":{"-5.2":{"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-7.2":{"19.3":{"additional":{"-6.2":{"19.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"12.3":{"additional":{"-8.2":{"12.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"6.3":{"additional":{"-6.2":{"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-8.2":{"19.3":{"additional":{"-7.2":{"19.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"18.3":{"additional":{"-8.2":{"19.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"15.3":{"additional":{"-9.2":{"15.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"14.3":{"additional":{"-8.2":{"15.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"13.3":{"additional":{"-8.2":{"14.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"12.3":{"additional":{"-8.2":{"13.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"6.3":{"additional":{"-7.2":{"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"5.3":{"additional":{"-8.2":{"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"4.8":{"additional":{"-8.2":{"5.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-9.2":{"18.3":{"additional":{"-8.2":{"18.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"17.3":{"additional":{"-9.2":{"18.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"16.3":{"additional":{"-9.2":{"17.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"15.3":{"additional":{"-9.2":{"16.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-3.2":{"6.3":{"additional":{"-4.2":{"6.3":true},"-2.2":{"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"3.3":{"additional":{"-4.2":{"3.3":true},"-2.2":{"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"11.3":{"additional":{"-4.2":{"11.3":true},"-2.2":{"11.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-2.2":{"6.3":{"additional":{"-3.2":{"6.3":true},"-2.2":{"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"3.3":{"additional":{"-3.2":{"3.3":true},"-2.2":{"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"11.3":{"additional":{"-3.2":{"11.3":true},"-2.2":{"12.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"12.3":{"additional":{"-2.2":{"11.3":true,"13.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"13.3":{"additional":{"-2.2":{"12.3":true,"14.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"14.3":{"additional":{"-2.2":{"13.3":true,"15.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"15.3":{"additional":{"-2.2":{"14.3":true}},"z":{"middle":true,"z1":0,"z2":0}}}},"13874":{"entrance":{"x":-7.7,"y":9.3},"map_name":13874,"event_id":12849,"location":68},"13875":{"entrance":{"x":-8.2,"y":4.3},"map_name":13875,"event_id":13109,"location":68,"-8.2":{"3.3":{"additional":{"-8.2":{"3.3":true,"3.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"6.3":{"additional":{"-7.2":{"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"7.3":{"additional":{"-8.2":{"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"8.3":{"additional":{"-8.2":{"7.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"9.3":{"additional":{"-8.2":{"8.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"10.3":{"additional":{"-8.2":{"9.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"3.8":{"additional":{"-8.2":{"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-7.2":{"3.3":{"additional":{"-8.2":{"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"6.3":{"additional":{"-6.2":{"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"10.3":{"additional":{"-8.2":{"10.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-6.2":{"3.3":{"additional":{"-7.2":{"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"6.3":{"additional":{"-5.2":{"6.3":true},"-6.2":{"5.3":true,"7.3":true,"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"5.3":{"additional":{"-6.2":{"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"7.3":{"additional":{"-6.2":{"6.3":true,"7.3":true},"-5.2":{"7.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"10.3":{"additional":{"-7.2":{"10.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-5.2":{"3.3":{"additional":{"-6.2":{"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"7.3":{"additional":{"-4.2":{"7.3":true},"-6.2":{"7.3":true},"-5.2":{"7.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"6.3":{"additional":{"-5.2":{"7.3":true,"6.3":true},"-4.2":{"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"10.3":{"additional":{"-6.2":{"10.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"9.8":{"additional":{"-5.2":{"10.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-4.2":{"3.3":{"additional":{"-5.2":{"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"6.3":{"additional":{"-3.2":{"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"7.3":{"additional":{"-4.2":{"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-3.2":{"3.3":{"additional":{"-4.2":{"3.3":true},"-3.2":{"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"4.3":{"additional":{"-3.2":{"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"5.3":{"additional":{"-3.2":{"4.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"6.3":{"additional":{"-3.2":{"5.3":true}},"z":{"middle":true,"z1":0,"z2":0}}}},"14131":{"entrance":{"x":-5.2,"y":9.3},"map_name":14131,"event_id":13109,"location":68,"-5.2":{"8.3":{"additional":{"-5.2":{"8.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-6.2":{"8.3":{"additional":{"-5.2":{"8.3":true},"-6.2":{"7.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"7.3":{"additional":{"-6.2":{"8.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-7.2":{"8.3":{"additional":{"-6.2":{"8.3":true}},"z":{"middle":true,"z1":0,"z2":0}}}}},"92":{"12592":{"entrance":{"x":-0.5,"y":7},"map_name":12592,"event_id":12339,"location":92},"12595":{"2":{"4.6":{"additional":{"3":{"4.6":true},"0.5":{"4.8":true}},"z":{"middle":true,"z1":0,"z2":0}}},"3":{"2.1":{"additional":{"1.5":{"2.1":true},"4.2":{"2.1":true}},"z":{"middle":true,"z1":0,"z2":0}},"4.6":{"additional":{"2":{"4.6":true},"4.1":{"4.6":true}},"z":{"middle":true,"z1":0,"z2":0}}},"entrance":{"x":-0.5,"y":6},"map_name":12595,"event_id":13105,"location":92,"-2.5":{"0":{"additional":{"-1.5":{"0":true},"-2.4":{"-1.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"1.1":{"additional":{"-1.5":{"0":true},"-2.5":{"0":true}},"z":{"middle":true}},"2.3":{"additional":{"-3.3":{"2.3":true},"-2.5":{"1.1":true}},"z":{"middle":true,"z1":0,"z2":0}},"3.8":{"additional":{"-2.5":{"2.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"4.9":{"additional":{"-2.5":{"3.8":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-1.5":{"0":{"additional":{"-0.5":{"0":true}},"z":{"middle":true,"z1":0,"z2":0}},"2.3":{"additional":{"-2.5":{"1.1":true},"-1.5":{"3.8":true}},"z":{"middle":true}},"-1.5":{"additional":{"-1.5":{"0":true},"-0.5":{"-1.5":true},"-2.4":{"-1.5":true},"-2.2":{"-2.2":true}},"z":{"middle":true,"z1":0,"z2":0}},"4.9":{"additional":{"-2.5":{"4.9":true}},"z":{"middle":true,"z1":0,"z2":0}},"3.8":{"additional":{"-0.5":{"3.8":true}},"z":{"middle":true}}},"-0.5":{"0":{"additional":{"0.5":{"0":true,"1":true}},"z":{"middle":true,"z1":0,"z2":0}},"6":{"additional":{"-0.5":{"6":true,"4.9":true}},"z":{"middle":true,"z1":0,"z2":0}},"2.3":{"additional":{"-1.5":{"2.3":true},"-0.5":{"3.8":true}},"z":{"middle":true}},"-1.5":{"additional":{"-1.5":{"-1.5":true},"0.5":{"-1.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"4.9":{"additional":{"-1.5":{"4.9":true},"-0.5":{"6":true}},"z":{"middle":true,"z1":0,"z2":0}},"3.8":{"additional":{"0.5":{"3.8":true},"-0.5":{"2.3":true}},"z":{"middle":true}}},"0.5":{"0":{"additional":{"0.5":{"1":true},"1.5":{"0":true}},"z":{"middle":true,"z1":0,"z2":0}},"1":{"additional":{"-0.5":{"2.3":true},"0.5":{"2.3":true}},"z":{"middle":true}},"-1.5":{"additional":{"-0.5":{"-1.5":true},"0.5":{"0":true},"1.5":{"-1.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"4.8":{"additional":{"2":{"4.6":true},"-0.5":{"4.9":true}},"z":{"middle":true,"z1":0,"z2":0}},"3.8":{"additional":{"0.5":{"4.8":true}},"z":{"middle":true}},"2.3":{"additional":{"0.5":{"3.8":true}},"z":{"middle":true}}},"1.5":{"0":{"additional":{"1.5":{"1":true,"-1.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"1":{"additional":{"1.5":{"0":true,"2.1":true}},"z":{"middle":true,"z1":0,"z2":0}},"-1.5":{"additional":{"0.5":{"-1.5":true},"1.5":{"0":true}},"z":{"middle":true,"z1":0,"z2":0}},"2.1":{"additional":{"3":{"2.1":true},"1.5":{"1":true}},"z":{"middle":true,"z1":0,"z2":0}}},"4.2":{"2.1":{"additional":{"3":{"2.1":true},"4.1":{"3.4":true}},"z":{"middle":true,"z1":0,"z2":0}}},"4.1":{"3.4":{"additional":{"4.2":{"2.1":true},"4.1":{"4.6":true}},"z":{"middle":true,"z1":0,"z2":0}},"4.6":{"additional":{"3":{"4.6":true},"4.1":{"3.4":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-2.4":{"-1.5":{"additional":{"-1.5":{"-1.5":true},"-3.5":{"-1.5":true},"-2.2":{"-2.2":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-3.5":{"-1.5":{"additional":{"-2.4":{"-1.5":true},"-4.4":{"-2.4":true},"-3.3":{"0":true}},"z":{"middle":true}}},"-4.4":{"-1.5":{"additional":{"-3.5":{"-1.5":true}},"z":{"middle":true}},"-2.4":{"additional":{"-5.2":{"-2.4":true}},"z":{"middle":true}}},"-5.2":{"-1.5":{"additional":{"-4.4":{"-1.5":true}},"z":{"middle":true}},"-2.4":{"additional":{"-6":{"-2.4":true}},"z":{"middle":true}}},"-6":{"-1.5":{"additional":{"-5.2":{"-1.5":true}},"z":{"middle":true}},"-2.4":{"additional":{"-6":{"-1.5":true}},"z":{"middle":true}}},"-3.3":{"0":{"additional":{"-3.5":{"-1.5":true},"-2.5":{"0":true}},"z":{"middle":true,"z1":0,"z2":0}},"1.1":{"additional":{"-3.3":{"0":true}},"z":{"middle":true,"z1":0,"z2":0}},"2.3":{"additional":{"-3.3":{"1.1":true},"-4.5":{"2.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-4.5":{"1":{"additional":{"-5.6":{"0.9":true}},"z":{"middle":true}},"2.3":{"additional":{"-3.3":{"2.3":true},"-4.5":{"1":true},"-5.5":{"2.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-5.6":{"0.9":{"additional":{"-4.5":{"2.3":true}},"z":{"middle":true}}},"-5.5":{"2.3":{"additional":{"-4.5":{"2.3":true},"-5.5":{"2.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-2.2":{"-2.2":{"additional":{"-2.4":{"-1.5":true},"-1.5":{"-1.5":true}},"z":{"middle":true,"z1":0,"z2":0}}}},"14387":{"0":{"0.5":{"additional":{"0":{"0.5":true}},"z":{"middle":true,"z1":0,"z2":0}}},"entrance":{"x":-1.2,"y":-2.7},"map_name":14387,"event_id":13105,"location":92},"14643":{"entrance":{"x":0,"y":1.5},"map_name":14643,"event_id":13105,"location":92,"-1.2":{"-0.7":{"additional":{"-1.2":{"0.3":true,"-1.4":true}},"z":{"middle":true,"z1":0,"z2":0}},"-1.4":{"additional":{"-1.2":{"-0.7":true,"-1.4":true}},"z":{"down":true,"z1":-1,"z2":-20}},"0.3":{"additional":{"-1.2":{"-0.7":true}},"z":{"middle":true,"z1":0,"z2":0}}}}},"120":{"12593":{"3":{"-4.5":{"additional":{"4.3":{"-4.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"entrance":{"x":1.6,"y":1.4},"map_name":12593,"event_id":12593,"location":120,"0.3":{"0":{"additional":{"0.3":{"1.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"6.5":{"additional":{"0.3":{"6.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"5.5":{"additional":{"0.3":{"6.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"4.5":{"additional":{"0.3":{"5.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"3.5":{"additional":{"0.3":{"4.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"2.4":{"additional":{"0.3":{"3.5":true},"-0.5":{"2.4":true}},"z":{"middle":true,"z1":0,"z2":0}},"1.5":{"additional":{"0.3":{"2.4":true}},"z":{"middle":true,"z1":0,"z2":0}},"-1":{"additional":{"0.3":{"0":true}},"z":{"middle":true,"z1":0,"z2":0}}},"0.8":{"0":{"additional":{"0.8":{"-1":true}},"z":{"middle":true,"z1":0,"z2":0}},"-1":{"additional":{"0.3":{"-1":true}},"z":{"middle":true,"z1":0,"z2":0}},"1.5":{"additional":{"0.8":{"0":true}},"z":{"middle":true,"z1":0,"z2":0}},"2.4":{"additional":{"0.8":{"1.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"3.5":{"additional":{"0.8":{"2.4":true}},"z":{"middle":true,"z1":0,"z2":0}},"-4.5":{"additional":{"1.8":{"-4.5":true},"0.8":{"-3.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"-2.2":{"additional":{"0.8":{"-1":true}},"z":{"middle":true,"z1":0,"z2":0}},"-3.5":{"additional":{"0.8":{"-2.2":true}},"z":{"middle":true,"z1":0,"z2":0}}},"0.9":{"4.5":{"additional":{"0.8":{"3.5":true}},"z":{"middle":true,"z1":0,"z2":0}}},"2.3":{"4.5":{"additional":{"0.9":{"4.5":true}},"z":{"middle":true,"z1":0,"z2":0}}},"3.1":{"4.5":{"additional":{"2.3":{"4.5":true}},"z":{"middle":true,"z1":0,"z2":0}}},"3.7":{"4.3":{"additional":{"3.1":{"4.5":true}},"z":{"middle":true,"z1":0,"z2":0}}},"4.3":{"3.5":{"additional":{"3.7":{"4.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"-4.3":{"additional":{"4.5":{"-3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"4.5":{"2.4":{"additional":{"4.3":{"3.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"1.5":{"additional":{"4.5":{"2.4":true}},"z":{"middle":true,"z1":0,"z2":0}},"0.3":{"additional":{"4.5":{"1.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"-0.7":{"additional":{"4.5":{"0.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"-1.8":{"additional":{"4.5":{"-0.7":true}},"z":{"middle":true,"z1":0,"z2":0}},"-3":{"additional":{"4.5":{"-1.8":true}},"z":{"middle":true,"z1":0,"z2":0}}},"1.8":{"-4.5":{"additional":{"3":{"-4.5":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-0.5":{"-4.5":{"additional":{"0.8":{"-4.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"4.5":{"additional":{"-1.8":{"4.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"3.5":{"additional":{"-0.5":{"4.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"2.4":{"additional":{"-0.5":{"3.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"-5.5":{"additional":{"-0.5":{"-4.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"-6.5":{"additional":{"-0.5":{"-5.5":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-1.5":{"-4.5":{"additional":{"-0.5":{"-4.5":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-2.5":{"-4.5":{"additional":{"-1.5":{"-4.5":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-3.6":{"-4.1":{"additional":{"-2.5":{"-4.5":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-4.2":{"-3.5":{"additional":{"-3.6":{"-4.1":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-4.5":{"-2.5":{"additional":{"-4.2":{"-3.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"-1.5":{"additional":{"-4.5":{"-2.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"-0.5":{"additional":{"-4.5":{"-1.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"0.6":{"additional":{"-4.5":{"-0.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"1.6":{"additional":{"-4.5":{"0.6":true}},"z":{"middle":true,"z1":0,"z2":0}},"2.9":{"additional":{"-4.5":{"1.6":true}},"z":{"middle":true,"z1":0,"z2":0}},"4.1":{"additional":{"-4.5":{"2.9":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-3.1":{"4.4":{"additional":{"-4.5":{"4.1":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-1.8":{"4.5":{"additional":{"-3.1":{"4.4":true}},"z":{"middle":true,"z1":0,"z2":0}}}},"12850":{"entrance":{"x":-0.5,"y":-7},"map_name":12850,"event_id":12849,"location":120}},"160":{"12592":{"entrance":{"x":11.8,"y":22.3},"map_name":12592,"event_id":12339,"location":160},"12850":{"0":{"7.8":{"additional":{"-0.9":{"8.2":true},"0.8":{"7.1":true}},"z":{"middle":true}}},"8":{"-6.2":{"additional":{"7.3":{"-7.2":true}},"z":{"middle":true}},"-4.2":{"additional":{"8.3":{"-5.2":true}},"z":{"middle":true}}},"entrance":{"x":2.8,"y":0.3},"map_name":12850,"event_id":12853,"location":160,"-7.7":{"2.3":{"additional":{"-7.7":{"2.3":true,"3.3":true}},"z":{"middle":true}},"3.3":{"additional":{"-7.7":{"2.3":true,"4.3":true}},"z":{"middle":true}},"4.3":{"additional":{"-7.7":{"3.3":true,"5.3":true}},"z":{"middle":true}},"5.3":{"additional":{"-7.7":{"4.3":true,"6.3":true},"-6.7":{"5.3":true}},"z":{"middle":true}},"6.3":{"additional":{"-7.7":{"5.3":true,"7.3":true}},"z":{"middle":true}},"7.3":{"additional":{"-7.7":{"6.3":true},"-6.7":{"7.3":true}},"z":{"middle":true}}},"-6.7":{"5.3":{"additional":{"-7.7":{"5.3":true}},"z":{"middle":true}},"7.3":{"additional":{"-7.7":{"7.3":true},"-5.7":{"7.3":true}},"z":{"down":true}}},"-5.7":{"7.3":{"additional":{"-6.7":{"7.3":true},"-5.7":{"6.3":true}},"z":{"middle":true}},"6.3":{"additional":{"-5.7":{"7.3":true,"6.3":true},"-4.7":{"6.3":true}},"z":{"middle":true}},"4.3":{"additional":{"-4.7":{"4.3":true},"-5.7":{"4.3":true}},"z":{"middle":true}},"3.3":{"additional":{"-5.7":{"4.3":true}},"z":{"middle":true}}},"-4.7":{"6.3":{"additional":{"-5.7":{"6.3":true},"-3.7":{"6.3":true},"-4.7":{"7.3":true,"5.3":true}},"z":{"down":true}},"7.3":{"additional":{"-4.7":{"6.3":true}},"z":{"middle":true}},"5.3":{"additional":{"-4.7":{"6.3":true,"4.3":true}},"z":{"middle":true}},"4.3":{"additional":{"-4.7":{"5.3":true},"-3.7":{"4.3":true},"-5.7":{"4.3":true}},"z":{"middle":true}},"3.3":{"additional":{"-5.7":{"3.3":true}},"z":{"middle":true}}},"-3.7":{"6.3":{"additional":{"-4.7":{"6.3":true}},"z":{"middle":true}},"3.3":{"additional":{"-4.7":{"3.3":true}},"z":{"middle":true}},"4.3":{"additional":{"-3.7":{"3.3":true},"-2.7":{"4.3":true}},"z":{"down":true}},"-1.7":{"additional":{"-2.7":{"-1.7":true}},"z":{"middle":true}}},"-2.7":{"4.3":{"additional":{"-3.7":{"4.3":true},"-2.7":{"5.3":true}},"z":{"middle":true}},"5.3":{"additional":{"-2.7":{"4.3":true,"5.3":true},"-1.7":{"5.3":true}},"z":{"middle":true}},"7.3":{"additional":{"-1.7":{"7.3":true}},"z":{"middle":true}},"8.3":{"additional":{"-2.7":{"7.3":true},"-1.7":{"8.3":true}},"z":{"middle":true}},"-0.7":{"additional":{"-1.7":{"-0.7":true},"-2.7":{"-1.7":true,"-0.7":true}},"z":{"middle":true}},"-1.7":{"additional":{"-2.7":{"-0.7":true},"-3.7":{"-1.7":true}},"z":{"middle":true}},"-9.9":{"additional":{"-2.3":{"-8.9":true},"-2.7":{"-10.7":true}},"z":{"middle":true}},"-10.7":{"additional":{"-2.7":{"-9.9":true,"-11.7":true}},"z":{"middle":true}},"-11.7":{"additional":{"-2.7":{"-10.7":true,"-11.7":true}},"z":{"middle":true}},"-4.7":{"additional":{"-1.8":{"-4.9":true},"-2.7":{"-4.7":true}},"z":{"middle":true}}},"-1.7":{"5.3":{"additional":{"-2.7":{"5.3":true},"-1.7":{"6.3":true}},"z":{"middle":true}},"6.3":{"additional":{"-1.7":{"5.3":true,"7.3":true}},"z":{"middle":true}},"7.3":{"additional":{"-1.7":{"6.3":true,"8.3":true}},"z":{"middle":true}},"8.3":{"additional":{"-2.7":{"8.3":true},"-0.9":{"8.2":true}},"z":{"middle":true}},"1.4":{"additional":{"-1.3":{"2.3":true},"-1.7":{"0.3":true}},"z":{"middle":true}},"0.3":{"additional":{"-1.7":{"1.4":true,"-0.7":true}},"z":{"middle":true}},"-0.7":{"additional":{"-1.7":{"0.3":true,"-0.7":true},"-2.7":{"-0.7":true}},"z":{"middle":true}},"-8.2":{"additional":{"-0.7":{"-7.8":true},"-2.3":{"-8.9":true}},"z":{"middle":true}},"-16.7":{"additional":{"-1.6":{"-15.7":true},"-1.7":{"-17.7":true}},"z":{"middle":true}},"-17.7":{"additional":{"-1.7":{"-16.7":true,"-18.7":true}},"z":{"middle":true}},"-18.7":{"additional":{"-1.7":{"-17.7":true,"-19.7":true}},"z":{"middle":true}},"-19.7":{"additional":{"-1.7":{"-18.7":true}},"z":{"middle":true}}},"-0.9":{"8.2":{"additional":{"0":{"7.8":true},"-1.7":{"8.3":true}},"z":{"middle":true}}},"0.8":{"7.1":{"additional":{"0":{"7.8":true},"1.2":{"6.2":true}},"z":{"middle":true}},"-13.7":{"additional":{"1.8":{"-13.5":true},"-0.2":{"-14":true}},"z":{"middle":true}}},"1.2":{"6.2":{"additional":{"0.8":{"7.1":true},"1.3":{"5.3":true}},"z":{"middle":true}}},"1.3":{"5.3":{"additional":{"1.2":{"6.2":true},"1.3":{"4.3":true}},"z":{"middle":true}},"4.3":{"additional":{"1.3":{"5.3":true,"3.3":true}},"z":{"middle":true}},"3.3":{"additional":{"2.3":{"3.3":true},"0.3":{"3.1":true}},"z":{"middle":true}},"-7.7":{"additional":{"2.3":{"-7.7":true},"0.3":{"-7.7":true}},"z":{"down":true}},"-0.7":{"additional":{"2.3":{"-0.7":true},"0.3":{"-0.7":true}},"z":{"down":true}}},"2.3":{"4.3":{"additional":{"1.3":{"4.3":true}},"z":{"middle":true}},"3.3":{"additional":{"2.3":{"4.3":true,"2.3":true},"1.3":{"3.3":true}},"z":{"down":true}},"2.3":{"additional":{"2.3":{"3.3":true},"3.3":{"2.3":true}},"z":{"middle":true}},"-4.8":{"additional":{"2.7":{"-3.8":true},"2.3":{"-5.7":true}},"z":{"middle":true}},"-5.7":{"additional":{"2.3":{"-4.8":true,"-6.7":true}},"z":{"middle":true}},"-6.7":{"additional":{"2.3":{"-5.7":true,"-7.7":true}},"z":{"middle":true}},"-7.7":{"additional":{"2.3":{"-6.7":true},"1.3":{"-7.7":true},"3.3":{"-7.7":true}},"z":{"middle":true}},"-0.7":{"additional":{"3.3":{"-0.7":true},"1.3":{"-0.7":true}},"z":{"middle":true}}},"0.3":{"3.1":{"additional":{"1.3":{"3.3":true},"-0.6":{"2.9":true}},"z":{"middle":true}},"-7.7":{"additional":{"1.3":{"-7.7":true},"-0.7":{"-7.8":true},"0.2":{"-6.9":true},"0.3":{"-7.7":true}},"z":{"middle":true}},"-0.7":{"additional":{"1.3":{"-0.7":true},"0.3":{"-0.7":true}},"z":{"middle":true}}},"-0.6":{"2.9":{"additional":{"0.3":{"3.1":true},"-1.3":{"2.3":true}},"z":{"middle":true}}},"-1.3":{"2.3":{"additional":{"-0.6":{"2.9":true},"-1.7":{"1.4":true}},"z":{"middle":true}}},"3.3":{"2.3":{"additional":{"2.3":{"2.3":true},"3.3":{"3.3":true,"1.3":true}},"z":{"middle":true}},"3.3":{"additional":{"3.3":{"2.3":true},"4.3":{"3.3":true}},"z":{"middle":true}},"1.3":{"additional":{"3.3":{"2.3":true,"1.3":true},"4.3":{"1.3":true}},"z":{"middle":true}},"-7.7":{"additional":{"2.3":{"-7.7":true},"3.3":{"-8.7":true,"-7.7":true}},"z":{"middle":true}},"-8.7":{"additional":{"3.3":{"-7.7":true,"-9.7":true}},"z":{"middle":true}},"-9.7":{"additional":{"3.3":{"-8.7":true,"-10.7":true}},"z":{"middle":true}},"-10.7":{"additional":{"3.3":{"-9.7":true,"-11.7":true}},"z":{"middle":true}},"-11.7":{"additional":{"3.3":{"-10.7":true},"2.8":{"-12.7":true}},"z":{"middle":true}},"-0.7":{"additional":{"4.3":{"-0.7":true},"2.3":{"-0.7":true}},"z":{"down":true}}},"4.3":{"3.3":{"additional":{"3.3":{"3.3":true}},"z":{"middle":true}},"1.3":{"additional":{"3.3":{"1.3":true},"5.3":{"1.3":true}},"z":{"down":true}},"-2.8":{"additional":{"5.3":{"-2.7":true},"3.5":{"-3.1":true}},"z":{"middle":true}},"-0.7":{"additional":{"5.3":{"-0.7":true},"3.3":{"-0.7":true}},"z":{"middle":true}}},"5.3":{"1.3":{"additional":{"4.3":{"1.3":true},"5.3":{"2.3":true,"0.3":true}},"z":{"middle":true}},"2.3":{"additional":{"5.3":{"1.3":true}},"z":{"middle":true}},"0.3":{"additional":{"5.3":{"1.3":true,"-0.7":true}},"z":{"middle":true}},"-0.7":{"additional":{"5.3":{"0.3":true,"-1.7":true,"-0.7":true},"6.3":{"-0.7":true},"4.3":{"-0.7":true}},"z":{"middle":true}},"-1.7":{"additional":{"5.3":{"-0.7":true,"-2.7":true}},"z":{"middle":true}},"-2.7":{"additional":{"5.3":{"-1.7":true},"6.3":{"-2.8":true},"4.3":{"-2.8":true}},"z":{"middle":true}},"-3.7":{"additional":{"5.3":{"-2.7":true}},"z":{"middle":true}},"-4.7":{"additional":{"5.3":{"-3.7":true}},"z":{"down":true}},"-5.7":{"additional":{"5.3":{"-4.7":true}},"z":{"middle":true}},"-6.7":{"additional":{"5.3":{"-5.7":true}},"z":{"down":true}},"-7.7":{"additional":{"5.3":{"-6.7":true}},"z":{"middle":true}}},"6.2":{"-7.7":{"additional":{"5.3":{"-7.7":true}},"z":{"middle":true}}},"7.3":{"-7.2":{"additional":{"6.2":{"-7.7":true}},"z":{"middle":true}},"-3.2":{"additional":{"8":{"-4.2":true}},"z":{"middle":true}},"-0.2":{"additional":{"6.3":{"-0.7":true},"8.1":{"0.8":true}},"z":{"middle":true}}},"8.3":{"-5.2":{"additional":{"8":{"-6.2":true}},"z":{"middle":true}}},"6.3":{"-2.8":{"additional":{"7.3":{"-3.2":true}},"z":{"middle":true}},"-0.7":{"additional":{"5.3":{"-0.7":true},"7.3":{"-0.2":true}},"z":{"middle":true}}},"3.5":{"-3.1":{"additional":{"4.3":{"-2.8":true},"2.7":{"-3.8":true}},"z":{"middle":true}}},"2.7":{"-3.8":{"additional":{"3.5":{"-3.1":true},"2.3":{"-4.8":true}},"z":{"middle":true}}},"-0.7":{"-7.8":{"additional":{"0.3":{"-7.7":true},"-1.7":{"-8.2":true}},"z":{"middle":true}}},"-2.3":{"-8.9":{"additional":{"-1.7":{"-8.2":true},"-2.7":{"-9.9":true}},"z":{"middle":true}}},"2.8":{"-12.7":{"additional":{"3.3":{"-11.7":true},"1.8":{"-13.5":true}},"z":{"middle":true}}},"1.8":{"-13.5":{"additional":{"2.8":{"-12.7":true},"0.8":{"-13.7":true}},"z":{"middle":true}}},"-0.2":{"-14":{"additional":{"0.8":{"-13.7":true},"-1.2":{"-14.7":true}},"z":{"middle":true}},"-6":{"additional":{"0.2":{"-6.9":true},"-0.8":{"-5.3":true}},"z":{"middle":true}}},"-1.2":{"-14.7":{"additional":{"-0.2":{"-14":true},"-1.6":{"-15.7":true}},"z":{"middle":true}}},"-1.6":{"-15.7":{"additional":{"-1.2":{"-14.7":true},"-1.7":{"-16.7":true}},"z":{"middle":true}}},"0.2":{"-6.9":{"additional":{"0.3":{"-7.7":true},"-0.2":{"-6":true}},"z":{"middle":true}}},"-0.8":{"-5.3":{"additional":{"-0.2":{"-6":true},"-1.8":{"-4.9":true}},"z":{"middle":true}}},"-1.8":{"-4.9":{"additional":{"-0.8":{"-5.3":true},"-2.7":{"-4.7":true}},"z":{"middle":true}}},"8.1":{"0.8":{"additional":{"7.3":{"-0.2":true},"8.2":{"1.8":true}},"z":{"middle":true}}},"8.2":{"1.8":{"additional":{"8.1":{"0.8":true},"8.2":{"1.8":true}},"z":{"middle":true}}},"-8.7":{"2.3":{"additional":{"-7.7":{"2.3":true}},"z":{"middle":true}}},"-9.2":{"2.3":{"additional":{"-8.7":{"2.3":true}},"z":{"middle":true}}}},"13106":{"entrance":{"x":-9.7,"y":2.3},"map_name":13106,"event_id":12853,"location":160,"6.8":{"24.3":{"additional":{"6.8":{"24.3":true,"23.3":true}},"z":{"middle":true}},"23.3":{"additional":{"6.8":{"24.3":true,"22.3":true}},"z":{"middle":true}},"22.3":{"additional":{"6.8":{"23.3":true,"21.3":true}},"z":{"middle":true}},"21.3":{"additional":{"6.8":{"22.3":true,"20.3":true}},"z":{"middle":true}},"20.3":{"additional":{"6.8":{"21.3":true,"19.3":true}},"z":{"middle":true}},"19.3":{"additional":{"6.8":{"20.3":true},"5.8":{"19.3":true},"7.8":{"19.3":true}},"z":{"middle":true}},"15.3":{"additional":{"5.8":{"15.3":true}},"z":{"middle":true}},"16.3":{"additional":{"6.8":{"15.3":true}},"z":{"middle":true}},"3.3":{"additional":{"5.8":{"3.3":true}},"z":{"middle":true}},"4.3":{"additional":{"6.8":{"3.3":true}},"z":{"middle":true}},"5.3":{"additional":{"5.8":{"5.3":true}},"z":{"middle":true}},"25.3":{"additional":{"6.8":{"24.3":true}},"z":{"middle":true}}},"5.8":{"19.3":{"additional":{"6.8":{"19.3":true},"4.8":{"19.3":true},"5.8":{"18.3":true,"19.3":true}},"z":{"middle":true}},"18.3":{"additional":{"5.8":{"19.3":true,"17.3":true}},"z":{"middle":true}},"17.3":{"additional":{"5.8":{"18.3":true,"16.3":true}},"z":{"down":true}},"16.3":{"additional":{"5.8":{"17.3":true,"15.3":true},"6.8":{"16.3":true}},"z":{"middle":true}},"15.3":{"additional":{"4.8":{"15.3":true},"5.8":{"16.3":true,"14.3":true}},"z":{"middle":true}},"14.3":{"additional":{"5.8":{"15.3":true,"14.3":true}},"z":{"middle":true}},"3.3":{"additional":{"4.8":{"3.3":true}},"z":{"middle":true}},"4.3":{"additional":{"6.8":{"4.3":true},"4.8":{"4.3":true}},"z":{"middle":true}},"5.3":{"additional":{"5.8":{"4.3":true},"6.8":{"5.3":true}},"z":{"middle":true}}},"4.8":{"19.3":{"additional":{"5.8":{"19.3":true},"3.8":{"19.3":true}},"z":{"middle":true}},"16.3":{"additional":{"5.8":{"16.3":true}},"z":{"middle":true}},"15.3":{"additional":{"4.8":{"16.3":true}},"z":{"middle":true}},"11.3":{"additional":{"5.7":{"11.2":true},"3.8":{"11.3":true}},"z":{"middle":true}},"4.3":{"additional":{"3.8":{"4.3":true},"5.8":{"4.3":true}},"z":{"middle":true}},"3.3":{"additional":{"4.8":{"4.3":true}},"z":{"middle":true}}},"3.8":{"19.3":{"additional":{"4.8":{"19.3":true},"3.8":{"18.3":true}},"z":{"down":true}},"18.3":{"additional":{"3.8":{"19.3":true,"18.3":true}},"z":{"middle":true}},"11.3":{"additional":{"4.8":{"11.3":true},"2.8":{"11.3":true}},"z":{"middle":true}},"4.3":{"additional":{"2.8":{"4.3":true}},"z":{"middle":true}},"8.2":{"additional":{"4.6":{"7.8":true}},"z":{"middle":true}}},"7.8":{"19.3":{"additional":{"6.8":{"19.3":true},"8.8":{"19.3":true}},"z":{"middle":true}}},"8.8":{"19.3":{"additional":{"7.8":{"19.3":true},"9.8":{"19.3":true}},"z":{"down":true}}},"9.8":{"19.3":{"additional":{"8.8":{"19.3":true},"9.8":{"19.3":true,"18.3":true}},"z":{"middle":true}},"18.3":{"additional":{"9.8":{"19.3":true,"18.3":true},"10.8":{"18.3":true}},"z":{"middle":true}},"16.3":{"additional":{"10.8":{"16.3":true}},"z":{"middle":true}},"6.3":{"additional":{"10.8":{"6.3":true},"8.9":{"6.7":true}},"z":{"middle":true}}},"10.8":{"18.3":{"additional":{"9.8":{"18.3":true},"10.8":{"18.3":true,"17.3":true}},"z":{"middle":true}},"17.3":{"additional":{"10.8":{"18.3":true,"16.3":true}},"z":{"middle":true}},"16.3":{"additional":{"10.8":{"17.3":true},"9.8":{"16.3":true},"11.8":{"16.3":true}},"z":{"middle":true}},"15.3":{"additional":{"10.8":{"16.3":true}},"z":{"middle":true}},"6.3":{"additional":{"11.8":{"6.3":true},"10.8":{"7.3":true},"9.8":{"6.3":true}},"z":{"middle":true}},"7.3":{"additional":{"10.8":{"6.3":true,"8.3":true}},"z":{"middle":true}},"8.3":{"additional":{"10.8":{"7.3":true,"9.3":true}},"z":{"down":true}},"9.3":{"additional":{"10.8":{"8.3":true,"10.3":true}},"z":{"middle":true}},"10.3":{"additional":{"10.8":{"9.3":true,"11.3":true}},"z":{"down":true}},"11.3":{"additional":{"10.8":{"10.3":true},"11.8":{"11.3":true}},"z":{"middle":true}}},"11.8":{"15.3":{"additional":{"10.8":{"15.3":true}},"z":{"middle":true}},"16.3":{"additional":{"11.8":{"15.3":true},"10.8":{"16.3":true},"12.8":{"16.3":true}},"z":{"middle":true}},"19.3":{"additional":{"12.8":{"19.3":true}},"z":{"middle":true}},"6.3":{"additional":{"12.8":{"6.3":true},"10.8":{"6.3":true}},"z":{"down":true}},"11.3":{"additional":{"10.8":{"11.3":true},"11.8":{"12.3":true},"12.8":{"11.3":true}},"z":{"middle":true}},"12.3":{"additional":{"11.8":{"11.3":true}},"z":{"middle":true}}},"12.8":{"16.3":{"additional":{"11.8":{"16.3":true},"12.8":{"17.3":true}},"z":{"middle":true}},"17.3":{"additional":{"12.8":{"16.3":true},"13.8":{"17.3":true}},"z":{"middle":true}},"18.3":{"additional":{"12.8":{"17.3":true}},"z":{"middle":true}},"19.3":{"additional":{"12.8":{"18.3":true},"11.8":{"19.3":true}},"z":{"middle":true}},"20.3":{"additional":{"12.8":{"19.3":true}},"z":{"middle":true}},"6.3":{"additional":{"12.8":{"6.3":true},"11.8":{"6.3":true}},"z":{"middle":true}},"11.3":{"additional":{"11.8":{"11.3":true},"13.8":{"11.3":true}},"z":{"middle":true}}},"13.8":{"20.3":{"additional":{"12.8":{"20.3":true},"13.8":{"21.3":true}},"z":{"middle":true}},"21.3":{"additional":{"13.8":{"20.3":true},"14.8":{"21.3":true}},"z":{"middle":true}},"19.3":{"additional":{"13.8":{"20.3":true}},"z":{"middle":true}},"17.3":{"additional":{"14.8":{"17.3":true},"13.8":{"16.3":true}},"z":{"middle":true}},"16.3":{"additional":{"13.8":{"17.3":true}},"z":{"middle":true}},"11.3":{"additional":{"14.8":{"11.3":true},"13.8":{"12.3":true},"12.8":{"11.3":true}},"z":{"down":true}},"12.3":{"additional":{"13.8":{"11.3":true}},"z":{"middle":true}},"10.3":{"additional":{"13.8":{"11.3":true}},"z":{"middle":true}},"9.3":{"additional":{"13.8":{"10.3":true}},"z":{"middle":true}},"6.3":{"additional":{"14.8":{"6.3":true},"12.8":{"6.3":true}},"z":{"down":true}}},"14.8":{"21.3":{"additional":{"13.8":{"21.3":true},"15.8":{"21.3":true}},"z":{"middle":true}},"19.3":{"additional":{"13.8":{"19.3":true}},"z":{"middle":true}},"18.3":{"additional":{"14.8":{"19.3":true}},"z":{"middle":true}},"17.3":{"additional":{"14.8":{"18.3":true},"13.8":{"17.3":true},"15.8":{"17.3":true}},"z":{"down":true}},"12.3":{"additional":{"15.8":{"12.3":true},"14.8":{"11.3":true,"12.3":true}},"z":{"middle":true}},"11.3":{"additional":{"14.8":{"12.3":true,"10.3":true}},"z":{"middle":true}},"9.3":{"additional":{"13.8":{"9.3":true}},"z":{"middle":true}},"7.3":{"additional":{"15.8":{"7.3":true},"14.8":{"6.3":true}},"z":{"middle":true}},"6.3":{"additional":{"14.8":{"7.3":true,"6.3":true},"13.8":{"6.3":true}},"z":{"middle":true}},"10.3":{"additional":{"15.8":{"10.3":true}},"z":{"middle":true}}},"15.8":{"21.3":{"additional":{"14.8":{"21.3":true},"15.8":{"20.3":true}},"z":{"middle":true}},"20.3":{"additional":{"15.8":{"21.3":true,"20.3":true}},"z":{"middle":true}},"17.3":{"additional":{"14.8":{"17.3":true},"16.8":{"17.3":true}},"z":{"middle":true}},"13.3":{"additional":{"16.8":{"13.2":true},"15.8":{"12.3":true}},"z":{"middle":true}},"12.3":{"additional":{"15.8":{"13.3":true,"12.3":true},"14.8":{"12.3":true}},"z":{"middle":true}},"9.3":{"additional":{"14.8":{"9.3":true},"16.8":{"9.3":true},"15.8":{"8.3":true}},"z":{"middle":true}},"8.3":{"additional":{"15.8":{"9.3":true,"7.3":true}},"z":{"middle":true}},"7.3":{"additional":{"16.8":{"7.3":true},"14.8":{"7.3":true}},"z":{"down":true}},"10.3":{"additional":{"15.8":{"9.3":true}},"z":{"middle":true}}},"16.8":{"17.3":{"additional":{"15.8":{"17.3":true},"17.8":{"17.3":true}},"z":{"middle":true}},"18.3":{"additional":{"16.8":{"17.3":true}},"z":{"middle":true}},"13.2":{"additional":{"17.8":{"13.3":true},"15.8":{"13.3":true}},"z":{"middle":true}},"9.3":{"additional":{"16.8":{"9.3":true,"8.3":true},"17.8":{"9.3":true}},"z":{"middle":true}},"10.3":{"additional":{"16.8":{"9.3":true,"10.3":true}},"z":{"middle":true}},"8.3":{"additional":{"17.8":{"8.3":true},"15.8":{"8.3":true}},"z":{"middle":true}},"7.3":{"additional":{"16.8":{"8.3":true}},"z":{"middle":true}}},"17.8":{"18.3":{"additional":{"16.8":{"18.3":true},"17.8":{"19.3":true,"17.3":true}},"z":{"middle":true}},"19.3":{"additional":{"17.8":{"18.3":true}},"z":{"middle":true}},"17.3":{"additional":{"17.8":{"18.3":true,"16.3":true}},"z":{"middle":true}},"16.3":{"additional":{"17.8":{"17.3":true,"15.3":true}},"z":{"middle":true}},"15.3":{"additional":{"17.8":{"16.3":true,"14.3":true}},"z":{"middle":true}},"14.3":{"additional":{"17.8":{"15.3":true,"14.3":true,"13.3":true}},"z":{"middle":true}},"13.3":{"additional":{"17.8":{"14.3":true,"12.3":true},"16.8":{"13.2":true}},"z":{"middle":true}},"12.3":{"additional":{"18.8":{"12.3":true},"17.8":{"12.3":true,"11.3":true,"13.3":true}},"z":{"middle":true}},"10.3":{"additional":{"16.8":{"10.3":true}},"z":{"middle":true}},"11.3":{"additional":{"17.8":{"10.3":true}},"z":{"middle":true}},"8.3":{"additional":{"18.8":{"8.3":true}},"z":{"middle":true}},"9.3":{"additional":{"16.8":{"9.3":true}},"z":{"middle":true}}},"18.8":{"13.3":{"additional":{"17.8":{"13.3":true},"18.8":{"12.3":true}},"z":{"middle":true}},"12.3":{"additional":{"18.8":{"13.3":true},"17.8":{"12.3":true}},"z":{"middle":true}},"11.3":{"additional":{"18.8":{"11.3":true}},"z":{"middle":true}},"10.3":{"additional":{"18.8":{"11.3":true}},"z":{"middle":true}},"9.3":{"additional":{"18.8":{"10.3":true}},"z":{"middle":true}},"8.3":{"additional":{"18.8":{"9.3":true}},"z":{"middle":true}}},"8.9":{"6.7":{"additional":{"9.8":{"6.3":true},"8.2":{"7.3":true}},"z":{"middle":true}}},"8.2":{"7.3":{"additional":{"8.9":{"6.7":true},"7.9":{"8.3":true}},"z":{"middle":true}}},"7.9":{"8.3":{"additional":{"8.2":{"7.3":true},"7.7":{"9.3":true}},"z":{"middle":true}}},"7.7":{"9.3":{"additional":{"7.9":{"8.3":true},"7.3":{"10.2":true}},"z":{"middle":true}}},"7.3":{"10.2":{"additional":{"7.7":{"9.3":true},"6.7":{"10.8":true}},"z":{"middle":true}}},"6.7":{"10.8":{"additional":{"7.3":{"10.2":true},"5.7":{"11.2":true}},"z":{"middle":true}},"25.7":{"additional":{"6.8":{"25.3":true}},"z":{"down":true}}},"5.7":{"11.2":{"additional":{"6.7":{"10.8":true},"4.8":{"11.3":true}},"z":{"middle":true}},"6.2":{"additional":{"5.8":{"5.3":true}},"z":{"middle":true}}},"2.8":{"11.3":{"additional":{"3.8":{"11.3":true},"1.8":{"11.3":true},"2.8":{"11.3":true}},"z":{"middle":true}},"14.3":{"additional":{"1.8":{"14.3":true}},"z":{"middle":true}},"8.3":{"additional":{"1.8":{"8.3":true},"3.8":{"8.2":true},"2.8":{"8.3":true}},"z":{"middle":true}},"4.3":{"additional":{"1.8":{"4.3":true}},"z":{"middle":true}}},"1.8":{"11.3":{"additional":{"2.8":{"11.3":true},"1.8":{"12.3":true}},"z":{"middle":true}},"12.3":{"additional":{"1.8":{"11.3":true,"13.3":true}},"z":{"middle":true}},"13.3":{"additional":{"1.8":{"12.3":true,"14.3":true}},"z":{"middle":true}},"14.3":{"additional":{"1.8":{"13.3":true,"15.3":true},"2.8":{"14.3":true}},"z":{"middle":true}},"15.3":{"additional":{"1.8":{"14.3":true,"15.3":true},"0.8":{"15.3":true}},"z":{"middle":true}},"8.3":{"additional":{"0.8":{"8.3":true},"2.8":{"8.3":true},"1.8":{"8.3":true}},"z":{"middle":true}},"5.3":{"additional":{"0.8":{"5.3":true}},"z":{"middle":true}},"4.3":{"additional":{"1.8":{"5.3":true},"0.8":{"4.3":true}},"z":{"middle":true}},"0.3":{"additional":{"0.8":{"0.3":true}},"z":{"middle":true}}},"0.8":{"15.3":{"additional":{"1.8":{"15.3":true},"0.8":{"16.3":true},"-0.2":{"15.3":true}},"z":{"middle":true}},"16.3":{"additional":{"0.8":{"15.3":true,"16.3":true}},"z":{"middle":true}},"8.3":{"additional":{"-0.2":{"8.3":true},"1.8":{"8.3":true},"0.8":{"8.3":true}},"z":{"middle":true}},"7.3":{"additional":{"0.8":{"8.3":true}},"z":{"middle":true}},"6.3":{"additional":{"0.8":{"7.3":true}},"z":{"down":true}},"5.3":{"additional":{"0.8":{"6.3":true},"-0.2":{"5.3":true}},"z":{"middle":true}},"4.3":{"additional":{"1.8":{"4.3":true},"0.8":{"3.3":true,"5.3":true}},"z":{"middle":true}},"3.3":{"additional":{"0.8":{"4.3":true,"2.3":true,"3.3":true},"-0.2":{"3.3":true}},"z":{"middle":true}},"2.3":{"additional":{"0.8":{"3.3":true,"1.3":true}},"z":{"middle":true}},"1.3":{"additional":{"0.8":{"2.3":true,"0.3":true}},"z":{"middle":true}},"0.3":{"additional":{"0.8":{"1.3":true,"0.3":true},"1.8":{"0.3":true}},"z":{"middle":true}}},"-0.2":{"15.3":{"additional":{"0.8":{"15.3":true},"-1.2":{"15.3":true}},"z":{"middle":true}},"14.3":{"additional":{"-0.2":{"15.3":true}},"z":{"middle":true}},"12.3":{"additional":{"-1.2":{"12.3":true}},"z":{"middle":true}},"8.3":{"additional":{"-1.2":{"8.3":true},"0.8":{"8.3":true}},"z":{"down":true}},"3.3":{"additional":{"0.8":{"3.3":true}},"z":{"middle":true}},"5.3":{"additional":{"0.8":{"5.3":true}},"z":{"middle":true}}},"-1.2":{"14.3":{"additional":{"-0.2":{"14.3":true},"-1.2":{"15.3":true,"13.3":true}},"z":{"middle":true}},"15.3":{"additional":{"-1.2":{"14.3":true},"-2.2":{"15.3":true}},"z":{"middle":true}},"13.3":{"additional":{"-1.2":{"14.3":true,"12.3":true}},"z":{"middle":true}},"12.3":{"additional":{"-1.2":{"13.3":true,"11.3":true},"-0.2":{"12.3":true}},"z":{"middle":true}},"11.3":{"additional":{"-1.2":{"12.3":true},"-2.2":{"11.3":true}},"z":{"middle":true}},"8.3":{"additional":{"-2.2":{"8.3":true},"-0.2":{"8.3":true}},"z":{"middle":true}}},"-2.2":{"15.3":{"additional":{"-1.2":{"15.3":true}},"z":{"middle":true}},"11.3":{"additional":{"-1.2":{"11.3":true},"-3.2":{"11.3":true}},"z":{"middle":true}},"8.3":{"additional":{"-3.2":{"8.3":true},"-1.2":{"8.3":true}},"z":{"down":true}}},"-3.2":{"11.3":{"additional":{"-2.2":{"11.3":true},"-3.2":{"10.3":true}},"z":{"middle":true}},"10.3":{"additional":{"-3.2":{"11.3":true,"9.3":true}},"z":{"down":true}},"9.3":{"additional":{"-3.2":{"10.3":true,"9.3":true,"8.3":true}},"z":{"middle":true}},"8.3":{"additional":{"-3.2":{"9.3":true,"8.3":true},"-2.2":{"8.3":true}},"z":{"middle":true}},"7.3":{"additional":{"-3.2":{"8.3":true,"6.3":true}},"z":{"down":true}},"6.3":{"additional":{"-3.2":{"7.3":true,"5.3":true}},"z":{"middle":true}},"5.3":{"additional":{"-3.2":{"6.3":true,"5.3":true}},"z":{"middle":true}}},"5.3":{"7.2":{"additional":{"5.7":{"6.2":true}},"z":{"middle":true}}},"4.6":{"7.8":{"additional":{"5.3":{"7.2":true}},"z":{"middle":true}}},"2.3":{"0.3":{"additional":{"1.8":{"0.3":true}},"z":{"down":true}}}},"13362":{"entrance":{"x":-6.7,"y":6.3},"map_name":13362,"event_id":12853,"location":160,"9.3":{"22.3":{"additional":{"9.3":{"22.3":true},"8.3":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":-16}}},"8.3":{"22.3":{"additional":{"9.3":{"22.3":true},"7.3":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":-16}},"8.3":{"additional":{"7.3":{"8.3":true},"8.3":{"8.3":true,"7.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"7.3":{"additional":{"8.3":{"8.3":true,"6.3":true}},"z":{"middle":true}},"6.3":{"additional":{"8.3":{"7.3":true,"6.3":true}},"z":{"middle":true}}},"7.3":{"22.3":{"additional":{"8.3":{"22.3":true},"6.3":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":-16}},"8.3":{"additional":{"6.3":{"8.3":true},"8.3":{"8.3":true}},"z":{"middle":true,"z1":0,"z2":30}}},"6.3":{"22.3":{"additional":{"7.3":{"22.3":true},"5.3":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":-16}},"8.3":{"additional":{"5.3":{"8.3":true},"7.3":{"8.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"9.3":{"additional":{"6.3":{"8.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"10.3":{"additional":{"6.3":{"9.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"11.3":{"additional":{"6.3":{"10.3":true,"11.3":true},"5.3":{"11.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"5.3":{"22.3":{"additional":{"6.3":{"22.3":true},"4.3":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":-16}},"8.3":{"additional":{"4.3":{"8.3":true},"6.3":{"8.3":true}},"z":{"middle":true,"z1":0,"z2":30}},"11.3":{"additional":{"6.3":{"11.3":true},"4.3":{"11.3":true},"5.3":{"12.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"12.3":{"additional":{"5.3":{"11.3":true,"13.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"13.3":{"additional":{"5.3":{"12.3":true,"13.3":true},"4.3":{"13.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"4.3":{"22.3":{"additional":{"5.3":{"22.3":true},"3.3":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":-16}},"8.3":{"additional":{"3.3":{"8.3":true},"5.3":{"8.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"11.3":{"additional":{"5.3":{"11.3":true},"3.3":{"11.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"13.3":{"additional":{"5.3":{"13.3":true},"4.3":{"13.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"3.3":{"22.3":{"additional":{"4.3":{"22.3":true},"2.3":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":-16}},"8.3":{"additional":{"2.3":{"8.3":true},"4.3":{"8.3":true}},"z":{"middle":true,"z1":0,"z2":30}},"11.3":{"additional":{"4.3":{"11.3":true},"2.3":{"11.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"2.3":{"22.3":{"additional":{"3.3":{"22.3":true},"-0.7":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":-16}},"11.3":{"additional":{"1.3":{"11.3":true},"2.3":{"10.3":true},"3.3":{"11.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"10.3":{"additional":{"2.3":{"11.3":true,"9.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"9.3":{"additional":{"2.3":{"10.3":true,"8.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"8.3":{"additional":{"2.3":{"9.3":true,"8.3":true},"3.3":{"8.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-0.7":{"22.3":{"additional":{"2.3":{"22.3":true},"-1.7":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"15.3":{"additional":{"-1.7":{"15.3":true},"0.3":{"15.3":true},"-0.7":{"16.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"16.3":{"additional":{"-0.7":{"15.3":true,"17.3":true}},"z":{"middle":true}},"17.3":{"additional":{"-0.7":{"16.3":true,"18.3":true}},"z":{"middle":true}},"18.3":{"additional":{"-0.7":{"17.3":true,"19.3":true}},"z":{"middle":true}},"19.3":{"additional":{"-0.7":{"18.3":true},"0.3":{"19.3":true}},"z":{"middle":true}},"11.3":{"additional":{"0.3":{"11.3":true},"-1.7":{"11.3":true},"-0.7":{"12.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"12.3":{"additional":{"-0.7":{"11.3":true,"13.3":true}},"z":{"middle":true}},"13.3":{"additional":{"-0.7":{"12.3":true},"-1.7":{"13.3":true}},"z":{"middle":true}},"8.3":{"additional":{"-1.7":{"8.3":true},"0.3":{"8.3":true}},"z":{"middle":true}}},"-1.7":{"22.3":{"additional":{"-0.7":{"22.3":true},"-2.7":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"15.3":{"additional":{"-2.7":{"15.3":true},"-0.7":{"15.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"11.3":{"additional":{"-0.7":{"11.3":true},"-2.7":{"11.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"13.3":{"additional":{"-1.7":{"13.3":true},"-2.7":{"13.3":true},"-0.7":{"13.3":true}},"z":{"middle":true}},"3.3":{"additional":{"-2.7":{"3.3":true},"-1.7":{"4.3":true,"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"4.3":{"additional":{"-1.7":{"3.3":true,"5.3":true}},"z":{"down":true,"z1":-1,"z2":-15}},"5.3":{"additional":{"-1.7":{"4.3":true,"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"6.3":{"additional":{"-1.7":{"5.3":true,"7.3":true}},"z":{"down":true,"z1":-1,"z2":-15}},"7.3":{"additional":{"-1.7":{"6.3":true,"8.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"8.3":{"additional":{"-1.7":{"7.3":true,"8.3":true},"-0.7":{"8.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-2.7":{"22.3":{"additional":{"-1.7":{"22.3":true},"-3.7":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"18.3":{"additional":{"-3.7":{"18.3":true},"-2.7":{"17.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"17.3":{"additional":{"-2.7":{"18.3":true,"16.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"16.3":{"additional":{"-2.7":{"17.3":true,"15.3":true},"-3.7":{"16.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"15.3":{"additional":{"-2.7":{"16.3":true},"-1.7":{"15.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"13.3":{"additional":{"-1.7":{"13.3":true},"-3.7":{"13.3":true}},"z":{"middle":true}},"11.3":{"additional":{"-1.7":{"11.3":true},"-3.7":{"11.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"10.3":{"additional":{"-2.7":{"11.3":true}},"z":{"down":true}},"3.3":{"additional":{"-3.7":{"3.3":true},"-1.7":{"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-3.7":{"22.3":{"additional":{"-2.7":{"22.3":true},"-4.7":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"18.3":{"additional":{"-4.7":{"18.3":true},"-3.7":{"19.3":true},"-2.7":{"18.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"19.3":{"additional":{"-3.7":{"18.3":true,"20.3":true}},"z":{"middle":true,"z1":0,"z2":30}},"20.3":{"additional":{"-3.7":{"19.3":true,"20.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"13.3":{"additional":{"-2.7":{"13.3":true},"-4.7":{"13.3":true}},"z":{"middle":true}},"11.3":{"additional":{"-2.7":{"11.3":true},"-4.7":{"11.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"16.3":{"additional":{"-2.7":{"16.3":true},"-4.7":{"16.3":true}},"z":{"middle":true,"z1":0,"z2":30}},"10.3":{"additional":{"-2.7":{"10.3":true}},"z":{"middle":true}},"3.3":{"additional":{"-4.7":{"3.3":true},"-3.7":{"4.3":true},"-2.7":{"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"4.3":{"additional":{"-3.7":{"3.3":true,"5.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"5.3":{"additional":{"-3.7":{"4.3":true,"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"6.3":{"additional":{"-3.7":{"5.3":true,"7.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"7.3":{"additional":{"-3.7":{"6.3":true,"7.3":true,"8.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"8.3":{"additional":{"-3.7":{"7.3":true},"-4.7":{"8.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-4.7":{"22.3":{"additional":{"-3.7":{"22.3":true},"-5.7":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"18.3":{"additional":{"-5.7":{"18.3":true},"-3.7":{"18.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"13.3":{"additional":{"-3.7":{"13.3":true}},"z":{"middle":true}},"11.3":{"additional":{"-3.7":{"11.3":true},"-5.7":{"11.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"16.3":{"additional":{"-4.7":{"16.3":true},"-5.7":{"16.3":true},"-3.7":{"16.3":true}},"z":{"middle":true}},"10.3":{"additional":{"-3.7":{"10.3":true}},"z":{"middle":true}},"3.3":{"additional":{"-5.7":{"3.3":true},"-3.7":{"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"8.3":{"additional":{"-3.7":{"8.3":true},"-5.7":{"8.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-5.7":{"22.3":{"additional":{"-4.7":{"22.3":true},"-5.7":{"22.3":true,"21.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"21.3":{"additional":{"-5.7":{"22.3":true,"20.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"20.3":{"additional":{"-5.7":{"21.3":true,"19.3":true,"20.3":true},"-6.7":{"20.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"19.3":{"additional":{"-5.7":{"20.3":true,"18.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"18.3":{"additional":{"-5.7":{"19.3":true},"-4.7":{"18.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"11.3":{"additional":{"-4.7":{"11.3":true},"-5.7":{"10.3":true},"-6.7":{"11.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"16.3":{"additional":{"-4.7":{"16.3":true},"-6.7":{"16.3":true}},"z":{"middle":true}},"10.3":{"additional":{"-4.7":{"10.3":true}},"z":{"down":true}},"8.3":{"additional":{"-6.7":{"8.3":true},"-4.7":{"8.3":true},"-5.7":{"7.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"7.3":{"additional":{"-5.7":{"8.3":true,"6.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"6.3":{"additional":{"-5.7":{"7.3":true,"5.3":true,"6.3":true},"-6.7":{"6.3":true}},"z":{"middle":true,"value":0,"z1":0,"z2":0}},"5.3":{"additional":{"-5.7":{"6.3":true,"4.3":true}},"z":{"down":true,"z1":-1,"z2":-15}},"4.3":{"additional":{"-5.7":{"5.3":true,"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"3.3":{"additional":{"-5.7":{"4.3":true},"-6.7":{"3.3":true},"-4.7":{"3.3":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-6.7":{"20.3":{"additional":{"-5.7":{"20.3":true},"-7.7":{"20.3":true}},"z":{"middle":true,"z1":0,"z2":30}},"16.3":{"additional":{"-5.7":{"16.3":true},"-6.7":{"16.3":true,"15.3":true}},"z":{"middle":true}},"15.3":{"additional":{"-6.7":{"16.3":true,"14.3":true}},"z":{"middle":true}},"14.3":{"additional":{"-6.7":{"15.3":true,"13.3":true}},"z":{"middle":true}},"13.3":{"additional":{"-6.7":{"14.3":true,"13.3":true}},"z":{"middle":true}},"11.3":{"additional":{"-5.7":{"11.3":true},"-7.7":{"11.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"8.3":{"additional":{"-7.7":{"8.3":true},"-5.7":{"8.3":true},"-6.7":{"8.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"6.3":{"additional":{"-5.7":{"6.3":true},"-7.7":{"6.3":true}},"z":{"middle":true,"value":0,"z1":0,"z2":30}},"3.3":{"additional":{"-5.7":{"3.3":true},"-6.7":{"3.3":true}},"z":{"middle":true}}},"-7.7":{"20.3":{"additional":{"-6.7":{"20.3":true},"-7.7":{"20.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"11.3":{"additional":{"-6.7":{"11.3":true},"-7.7":{"10.3":true,"11.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"10.3":{"additional":{"-7.7":{"11.3":true,"9.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"9.3":{"additional":{"-7.7":{"10.3":true,"8.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"8.3":{"additional":{"-7.7":{"9.3":true},"-6.7":{"8.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"6.3":{"additional":{"-6.7":{"6.3":true},"-7.7":{"6.3":true}},"z":{"middle":true,"value":0}}},"0.3":{"15.3":{"additional":{"-0.7":{"15.3":true},"1.3":{"15.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"19.3":{"additional":{"-0.7":{"19.3":true},"1.3":{"19.3":true}},"z":{"middle":true}},"11.3":{"additional":{"1.3":{"11.3":true},"-0.7":{"11.3":true},"0.3":{"11.3":true}},"z":{"middle":true,"z1":0,"z2":30}},"8.3":{"additional":{"-0.7":{"8.3":true},"0.3":{"7.3":true}},"z":{"middle":true}},"7.3":{"additional":{"0.3":{"8.3":true,"6.3":true}},"z":{"middle":true}},"6.3":{"additional":{"0.3":{"7.3":true},"1.3":{"6.3":true}},"z":{"middle":true}},"5.3":{"additional":{"0.3":{"6.3":true,"5.3":true}},"z":{"middle":true}}},"1.3":{"15.3":{"additional":{"0.3":{"15.3":true},"1.3":{"16.3":true,"14.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"16.3":{"additional":{"1.3":{"15.3":true,"16.3":true}},"z":{"middle":true}},"19.3":{"additional":{"0.3":{"19.3":true},"1.3":{"19.3":true}},"z":{"middle":true}},"14.3":{"additional":{"1.3":{"15.3":true,"13.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"13.3":{"additional":{"1.3":{"14.3":true,"12.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"12.3":{"additional":{"1.3":{"13.3":true,"11.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"11.3":{"additional":{"1.3":{"12.3":true},"0.3":{"11.3":true},"2.3":{"11.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"5.3":{"additional":{"0.3":{"5.3":true},"1.3":{"6.3":true,"5.3":true,"4.3":true}},"z":{"middle":true}},"6.3":{"additional":{"1.3":{"5.3":true}},"z":{"middle":true}},"4.3":{"additional":{"1.3":{"5.3":true,"3.3":true}},"z":{"middle":true}},"3.3":{"additional":{"1.3":{"4.3":true,"2.3":true}},"z":{"middle":true}},"2.3":{"additional":{"1.3":{"3.3":true,"1.3":true}},"z":{"middle":true}},"1.3":{"additional":{"1.3":{"2.3":true,"0.3":true}},"z":{"middle":true}},"0.3":{"additional":{"1.3":{"1.3":true,"0.3":true}},"z":{"middle":true}},"-0.7":{"additional":{"1.3":{"0.3":true}},"z":{"middle":true}},"-1.2":{"additional":{"1.3":{"-0.7":true}},"z":{"middle":true}}},"10.3":{"22.3":{"additional":{"9.3":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":-16}}},"10.8":{"22.3":{"additional":{"10.3":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":-56}}},"11.3":{"22.3":{"additional":{"10.8":{"22.3":true}},"z":{"middle":true,"z1":0,"z2":-96}}}}},"232":{"12850":{"0":{"0":{"additional":{"0":{"0.8":true}},"z":{"middle":true,"z1":0,"z2":0}},"3":{"additional":{"0.3":{"3.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"2.3":{"additional":{"0":{"3":true}},"z":{"middle":true,"z1":0,"z2":0}},"1.5":{"additional":{"0":{"2.3":true}},"z":{"middle":true,"z1":0,"z2":0}},"0.8":{"additional":{"0":{"1.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"-0.7":{"additional":{"0":{"0":true}},"z":{"middle":true,"z1":0,"z2":0}},"-1.5":{"additional":{"0":{"-0.7":true}},"z":{"middle":true,"z1":0,"z2":0}},"-2.5":{"additional":{"0":{"-1.5":true},"1":{"-2.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"-3.5":{"additional":{"0":{"-2.5":true,"-4.5":true},"-1":{"-3.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"-4.5":{"additional":{"0":{"-3.5":true,"-4.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"-4.9":{"additional":{"0":{"-4.5":true}},"z":{"down":true,"z1":-1,"z2":-30}},"-5.2":{"additional":{"0":{"-4.9":true}},"z":{"down":true,"z1":-1,"z2":-60}}},"1":{"-3.5":{"additional":{"0":{"-3.5":true},"1":{"-4.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"-4.5":{"additional":{"1":{"-3.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"-2.5":{"additional":{"1":{"-3.5":true}},"z":{"middle":true,"z1":0,"z2":0}}},"entrance":{"x":-0.5,"y":-7},"map_name":12850,"event_id":12849,"location":232,"0.9":{"3.8":{"additional":{"0.9":{"3.8":true}},"z":{"middle":true,"z1":0,"z2":0}}},"0.3":{"3.5":{"additional":{"0.9":{"3.8":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-1":{"-2.5":{"additional":{"0":{"-2.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"-3.5":{"additional":{"-1":{"-2.5":true,"-4.5":true}},"z":{"middle":true,"z1":0,"z2":0}},"-4.5":{"additional":{"-1":{"-3.5":true}},"z":{"middle":true,"z1":0,"z2":0}}}},"13618":{"0":{"0":{"additional":{"0":{"0":true,"0.5":true},"0.6":{"0":true}},"z":{"middle":true,"z1":0,"z2":0}},"-1":{"additional":{"0":{"0":true}},"z":{"middle":true,"z1":0,"z2":0}},"-2":{"additional":{"0":{"-1":true}},"z":{"middle":true,"z1":0,"z2":0}},"-3":{"additional":{"0":{"-2":true,"-4":true}},"z":{"down":true,"z1":-1,"z2":-80}},"-4":{"additional":{"0":{"-3":true,"-5":true}},"z":{"down":true,"z1":-1,"z2":-80}},"-5":{"additional":{"0":{"-4":true,"-6":true},"-0.6":{"-5":true},"0.6":{"-5":true}},"z":{"down":true,"z1":-1,"z2":96}},"-6":{"additional":{"0":{"-5":true,"-6.5":true}},"z":{"down":true,"z1":-1,"z2":96}},"-6.5":{"additional":{"0":{"-6":true,"-7.6":true,"-6.5":true}},"z":{"down":true,"z1":-1,"z2":96}},"-7.6":{"additional":{"0":{"-7.6":true,"-8.4":true},"1":{"-7.6":true},"-1":{"-7.6":true}},"z":{"down":true,"z1":-1,"z2":96}},"-8.4":{"additional":{"0":{"-7.6":true,"-8.4":true},"-1":{"-8.4":true}},"z":{"down":true,"z1":-1,"z2":96}},"-9.7":{"additional":{"0":{"-9.7":true,"-8.4":true}},"z":{"down":true,"z1":-1,"z2":96}},"0.5":{"additional":{"0.6":{"0.5":true},"-0.6":{"0.5":true}},"z":{"middle":true,"z1":0,"z2":0}}},"1":{"-8.4":{"additional":{"0":{"-8.4":true}},"z":{"down":true,"z1":-1,"z2":96}},"-7.6":{"additional":{"2":{"-7.6":true}},"z":{"down":true,"z1":-1,"z2":96}}},"2":{"-8.4":{"additional":{"1":{"-8.4":true}},"z":{"down":true,"z1":-1,"z2":96}},"-7.6":{"additional":{"2":{"-8.4":true}},"z":{"down":true,"z1":-1,"z2":96}}},"3":{"-4":{"additional":{"3":{"-4":true}},"z":{"down":true,"z1":-1,"z2":96}}},"entrance":{"x":0,"y":-9.7},"map_name":13618,"event_id":12849,"location":232,"-0.6":{"0":{"additional":{"0":{"0":true}},"z":{"middle":true,"z1":0,"z2":0}},"-6":{"additional":{"0":{"-6":true},"-0.6":{"-5":true}},"z":{"down":true,"z1":-1,"z2":96}},"-5":{"additional":{"-0.6":{"-6":true,"-4":true},"-1.7":{"-5":true}},"z":{"down":true,"z1":-1,"z2":96}},"-1":{"additional":{"-0.6":{"0":true}},"z":{"middle":true,"z1":0,"z2":0}},"-2":{"additional":{"-0.6":{"-1":true}},"z":{"middle":true,"z1":0,"z2":0}},"-3":{"additional":{"-0.6":{"-2":true,"-4":true}},"z":{"down":true,"z1":-1,"z2":-80}},"-4":{"additional":{"-0.6":{"-3":true}},"z":{"down":true,"z1":-1,"z2":-80}},"0.5":{"additional":{"0":{"0.5":true}},"z":{"middle":true,"z1":0,"z2":0}}},"-1.7":{"-5":{"additional":{"-0.6":{"-5":true},"-1.7":{"-4":true}},"z":{"down":true,"z1":-1,"z2":96}},"-4":{"additional":{"-1.7":{"-5":true,"-3":true},"-2.2":{"-4":true}},"z":{"down":true,"z1":-1,"z2":96}},"-3":{"additional":{"-1.7":{"-4":true,"-2":true}},"z":{"down":true,"z1":-1,"z2":96}},"-2":{"additional":{"-1.7":{"-3":true,"-1":true}},"z":{"down":true,"z1":-1,"z2":96}},"-1":{"additional":{"-1.7":{"-2":true,"-0.1":true},"-2.2":{"-1":true}},"z":{"down":true,"z1":-1,"z2":96}},"-0.1":{"additional":{"-1.7":{"-1":true}},"z":{"down":true,"z1":-1,"z2":96}}},"0.6":{"0":{"additional":{"0.6":{"-1":true}},"z":{"middle":true,"z1":0,"z2":0}},"-5":{"additional":{"0":{"-5":true},"1.8":{"-5":true},"0.6":{"-4":true}},"z":{"down":true,"z1":-1,"z2":96}},"-3":{"additional":{"0":{"-3":true},"0.6":{"-4":true}},"z":{"down":true,"z1":-1,"z2":-80}},"-4":{"additional":{"0":{"-4":true},"0.6":{"-3":true,"-5":true}},"z":{"down":true,"z1":-1,"z2":-80}},"-2":{"additional":{"0.6":{"-3":true}},"z":{"middle":true,"z1":0,"z2":0}},"-1":{"additional":{"0.6":{"-2":true}},"z":{"middle":true,"z1":0,"z2":0}},"0.5":{"additional":{"0":{"0.5":true},"0.6":{"0":true}},"z":{"middle":true,"z1":0,"z2":0}}},"1.8":{"-5":{"additional":{"0.6":{"-5":true},"1.8":{"-4":true}},"z":{"down":true,"z1":-1,"z2":96}},"-4":{"additional":{"1.8":{"-5":true,"-3":true},"2.3":{"-4":true}},"z":{"down":true,"z1":-1,"z2":96}},"-3":{"additional":{"1.8":{"-4":true,"-2":true}},"z":{"down":true,"z1":-1,"z2":96}},"-2":{"additional":{"1.8":{"-3":true,"-1":true}},"z":{"down":true,"z1":-1,"z2":96}},"-1":{"additional":{"1.8":{"-2":true,"-0.1":true}},"z":{"down":true,"z1":-1,"z2":96}},"-0.1":{"additional":{"1.8":{"-1":true}},"z":{"down":true,"z1":-1,"z2":96}}},"2.3":{"-4":{"additional":{"1.8":{"-4":true},"2.3":{"-4":true}},"z":{"down":true,"z1":-1,"z2":96}}},"-2.2":{"-4":{"additional":{"-1.7":{"-4":true},"-2.2":{"-4":true}},"z":{"down":true,"z1":-1,"z2":96}},"-1":{"additional":{"-1.7":{"-1":true},"-3":{"-1":true},"-2.2":{"-1":true}},"z":{"down":true,"z1":-1,"z2":96}}},"-3":{"-4":{"additional":{"-3":{"-4":true}},"z":{"down":true,"z1":-1,"z2":96}},"-1":{"additional":{"-3":{"-1":true}},"z":{"down":true,"z1":-1,"z2":96}},"-7.6":{"additional":{"-2":{"-7.6":true},"-4":{"-7.6":true}},"z":{"down":true,"z1":-1,"z2":96}},"-8.4":{"additional":{"-4":{"-8.4":true},"-2":{"-8.4":true}},"z":{"down":true,"z1":-1,"z2":96}}},"-1":{"-7.6":{"additional":{"0":{"-7.6":true},"-2":{"-7.6":true}},"z":{"down":true,"z1":-1,"z2":96}},"-8.4":{"additional":{"0":{"-8.4":true},"-2":{"-8.4":true}},"z":{"down":true,"z1":-1,"z2":96}}},"-2":{"-7.6":{"additional":{"-1":{"-7.6":true},"-3":{"-7.6":true}},"z":{"down":true,"z1":-1,"z2":96}},"-8.4":{"additional":{"-3":{"-8.4":true},"-1":{"-8.4":true}},"z":{"down":true,"z1":-1,"z2":96}}},"-4":{"-7.6":{"additional":{"-3":{"-7.6":true},"-4":{"-8":true}},"z":{"down":true,"z1":-1,"z2":96}},"-8.4":{"additional":{"-4.7":{"-8.4":true},"-4":{"-8":true,"-8.4":true},"-3":{"-8.4":true}},"z":{"down":true,"z1":-1,"z2":96}},"-8":{"additional":{"-4.7":{"-8":true},"-4":{"-8.4":true}},"z":{"down":true,"z1":-1,"z2":96}},"-9.7":{"additional":{"-4":{"-9.7":true,"-10.5":true}},"z":{"down":true,"z1":-1,"z2":96}},"-10.5":{"additional":{"-4":{"-9.7":true,"-11":true}},"z":{"down":true,"z1":-1,"z2":96}},"-11":{"additional":{"-4":{"-10.5":true,"-11.6":true}},"z":{"down":true,"z1":-1,"z2":-120}},"-11.6":{"additional":{"-4":{"-11":true},"-4.6":{"-11.6":true}},"z":{"down":true,"z1":-1,"z2":-80}},"-13.2":{"additional":{"-3.4":{"-13.2":true}},"z":{"down":true,"z1":-1,"z2":-80}}},"-4.7":{"-7.6":{"additional":{"-4":{"-7.6":true}},"z":{"down":true,"z1":-1,"z2":96}},"-8":{"additional":{"-4.7":{"-7.6":true,"-8":true}},"z":{"down":true,"z1":-1,"z2":96}},"-8.4":{"additional":{"-4.7":{"-8":true}},"z":{"down":true,"z1":-1,"z2":96}}},"-3.4":{"-11.6":{"additional":{"-4":{"-11.6":true},"-3.4":{"-12.5":true}},"z":{"down":true,"z1":-1,"z2":-80}},"-12.5":{"additional":{"-3.4":{"-11.6":true,"-13.2":true}},"z":{"down":true,"z1":-1,"z2":-80}},"-13.2":{"additional":{"-3.4":{"-12.5":true}},"z":{"down":true,"z1":-1,"z2":-80}}},"-4.6":{"-13.2":{"additional":{"-4":{"-13.2":true}},"z":{"down":true,"z1":-1,"z2":-80}},"-12.5":{"additional":{"-4.6":{"-13.2":true}},"z":{"down":true,"z1":-1,"z2":-80}},"-11.6":{"additional":{"-4.6":{"-12.5":true}},"z":{"down":true,"z1":-1,"z2":-80}}}},"13874":{"0":{"-11.7":{"additional":{"0":{"-11.7":true,"-12.5":true}},"z":{"down":true,"z1":-1,"z2":96}},"-12.5":{"additional":{"0":{"-11.7":true,"-13.3":true}},"z":{"down":true,"z1":-1,"z2":96}},"-13.3":{"additional":{"0":{"-13.3":true}},"z":{"down":true,"z1":-1,"z2":96}},"-11":{"additional":{"0":{"-11.7":true}},"z":{"down":true,"z1":-1,"z2":96}},"-9.7":{"additional":{"0":{"-11":true}},"z":{"down":true,"z1":-1,"z2":96}}},"entrance":{"x":-7.7,"y":9.3},"map_name":13874,"event_id":12849,"location":232}},"244":{"12592":{"entrance":{"x":-5.7,"y":6.3},"map_name":12592,"event_id":12339,"location":244},"12593":{"entrance":{"x":1.6,"y":1.4},"map_name":12593,"event_id":12593,"location":244},"12595":{"entrance":{"x":1.5,"y":2.1},"map_name":12595,"event_id":13105,"location":244},"12854":{"entrance":{"x":1.8,"y":1.1},"map_name":12854,"event_id":13877,"location":244},"13362":{"entrance":{"x":2.3,"y":1.5},"map_name":13362,"event_id":12853,"location":244}},"undefined":{"undefined":{}}} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..9a498ad --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "name": "shiningtheholyarkmapper", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "inkpaint": "^2.8.1", + "memoryjs": "^3.5.1", + "pkg": "^5.8.1", + "ws": "^8.18.0" + } +} diff --git a/preview.png b/preview.png new file mode 100644 index 0000000..a1cf401 Binary files /dev/null and b/preview.png differ diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..f00818f --- /dev/null +++ b/readme.md @@ -0,0 +1,75 @@ +# Shining The Holy Ark Auto Mapper + +This is a __*very alpha-state*__ auto mapper for Camelot's "Shining the Holy Ark" game for Sega Saturn.
+It should work "out of the box" for RALibRetro emulator with Beetle Saturn (mednafen) core released within past couple years (as of 29th of September, 2024) + +The app "attaches" itself to the emulator's process, reads memory while the game still runs, and displays data in a browser window. + +![preview](preview.png) + +## Why? + +The game can map those pesky maps on its own, so... why? +Reasons: + - in-game maps don't show treasures + - in-game maps most of the time don't show obstacles + - to see the the map and stats in-game one has to press a couple of buttons + - it was fun! + + +## What can it do? +So far it's capable of: +- Displaying the World Map (including your current location) +- Displaying current party members' current and max HP/MP +- Properly reading your character's name +- Mapping dungeons with distinct colors for various floor and ceiling elevation levels +- Mapping cities (something the game doesn't do for you) +- Showing the name of the map you're on (including internal IDs) +- Showing player's current X, Y, and Z coordinates (rounded) +- Showing the direction player's looking in +- Showing treasures' locations and a legend (incomplete) +- Showing exits/stairs (incomplete) +- Counting collected fairies + + +## How to run + +### The `user` way +- Go to [releases](releases) and download the latest `release.zip` file +- Unpack to wherever you'd like +- Delete `maps.json` if you don't need the included map data +- Run the `sthaam.exe` + +### The `tech savvy` way +- Download UI from [here](archive/refs/heads/master.zip) +- Unpack UI to wherever you'd like +- Delete `maps.json` if you don't need the included map data +- Go to [releases](releases) and download the latest executable +- Place it in the same folder as ui.html +- Run the `sthaam.exe` + +### The `dev` way +(The only way to adjust everything and anything. Might be needed to use with other cores/front ends) +- Get NodeJS from it's [official site](https://nodejs.org/en) +- Clone this repo +- `cd` into the repo +- Install dependencies `npm install` +- Delete `maps.json` if you don't need the included map data +- Run it `node index.js` + + + + +## Thanks + +- [fbparis](https://mokole.com/palette.html) for distinct colors generator +- [Wolfgang Archive](http://wolfgangarchive.com/stha-web) for inaccurate but very helpful maps +- [Alfex](https://retroachievements.org/user/Alfex) initial StHA cheevo dev +- [Ghal416](https://retroachievements.org/user/Ghal416) StHA set revision dev +- [Cheat Engine](https://cheatengine.org) for memory inspection tools +- [Sega Retro](https://segaretro.org/Shining_the_Holy_Ark) for item images (yet unused) +- [Hitomi](https://github.com/hitomi2500/ss-save-parser) for the Saturn Backup RAM Parser +- [RikaPSO](https://forums.shiningforcecentral.com/memberlist.php?mode=viewprofile&u=31411&sid=ab3f5f3c1e09ef9fd4c9276c5a100a0b) for the save files (included in this repo) + + + diff --git a/ui.html b/ui.html new file mode 100644 index 0000000..d1a808d --- /dev/null +++ b/ui.html @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/wsc.js b/wsc.js new file mode 100644 index 0000000..caa9c57 --- /dev/null +++ b/wsc.js @@ -0,0 +1,1864 @@ +let WS_SERVER_URL + +async function get_public_access() { + return 'localhost:13531' // LAN +} + +let LOGIN = localStorage.getItem("TWC_LOGIN") +let PASSWORD = localStorage.getItem("TWC_PASS") +let ws_connecting = false +let ws_connected = false +let ws_connection_attempt_counter = 0 +let WSC +let client_id +let total = 0 + +async function new_client(ws_server_url, id) { + WS_SERVER_URL = await get_public_access() || ws_server_url + + if (ws_connecting || !WS_SERVER_URL) { + return + } + + ws_connecting = true + console.log('[WSС]','Сonnecting to '+ WS_SERVER_URL) + + let ws_connect_counter_unique = 0 + + ws_connect_counter_unique = ws_connect_counter_unique + 1 + let WSC = new WebSocket('ws://'+WS_SERVER_URL) + + WSC.onopen = function () { + console.log('opened') + } + + WSC.onerror = function(event){ + ws_connecting = false + ws_connected = false + console.log(event) + } + + ws_connection_attempt_counter = ws_connection_attempt_counter - 1 + + WSC.onmessage = function (message) { + show_message(message) + } + + WSC.onerror = function(message) { + ws_connecting = false + ws_connected = false + console.log("[WSC]", "[ERROR]", message) + } +} + +async function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} + + +let playing = false + + +let character_data +let adata, astatus, bdata, bstatus, cdata, cstatus, ddata, dstatus +let aname, bname, cname, dname, anamew, bnamew, cnamew, dnamew +let ahpw, bhpw, chpw, dhpw +let ampw, bmpw, cmpw, dmpw +let ahpt, bhpt, chpt, dhpt +let ampt, bmpt, cmpt, dmpt +let ahp, bhp, chp, dhp +let amax_hp, bmax_hp, cmax_hp, dmax_hp +let amp, bmp, cmp, dmp +let amax_mp, bmax_mp, cmax_mp, dmax_mp +let pppointer +let plocation, plocation_id, plocation_text +let x_coord, y_coord, coord_text, pppointer_direction +let canvas, ctx, cgrid_size, tooltip +let overworld_map_image +let map_changed = true +let ui_initialized = false +let pixies_wrapper, pix_counter, fai_counter, suc_counter, inc_counter, lep_counter +let map_data +let pixies_row, pixies_fai, pixies_pix, pixies_suc, pixies_inc, pixies_lep +let pixies_fai_text, pixies_pix_text, pixies_suc_text, pixies_inc_text, pixies_lep_text +let pic_fai, pic_pix, pic_suc, pic_inc, pic_lep +let pix_count +let map_wrapper + +let item_colors = [ + "rgb(105,105,105)", + "rgb(46,139,87)", + "rgb(25,25,112)", + "rgb(128,128,0)", + "rgb(178,34,34)", + "rgb(255,0,0)", + "rgb(255,165,0)", + "rgb(255,255,0)", + "rgb(0,0,205)", + "rgb(124,252,0)", + "rgb(186,85,211)", + "rgb(0,255,255)", + "rgb(255,0,255)", + "rgb(30,144,255)", + "rgb(238,232,170)", + "rgb(221,160,221)", + "rgb(255,20,147)", + "rgb(255,160,122)", + "rgb(152,251,152)", + "rgb(135,206,250)" + ] +let item_colors_elements = [] +let items_block + +let hex2int = function(hex) { + let result = parseInt(Number(hex), 10) + //console.log(hex,'=', result) + return result +} + + +function prepare_ui() { + character_data = document.createElement("div") + character_data.classList.add('characters_data') + + map_data = document.createElement("div") + map_data.classList.add('map_data') + + // patry member #1 + adata = document.createElement("div") + anamew = document.createElement("div") + aname = document.createElement("span") + ahpt = document.createElement("span") + ahpw = document.createElement("div") + ahp = document.createElement("span") + amax_hp = document.createElement("span") + ampw = document.createElement("div") + ampt = document.createElement("span") + amp = document.createElement("span") + amax_mp = document.createElement("span") + astatus = document.createElement("img") + aname.style.fontWeight = '800' + adata.classList.add('character_data') + ahpw.classList.add('character_stat') + ampw.classList.add('character_stat') + anamew.classList.add('character_name_wrapper') + anamew.appendChild(aname) + anamew.appendChild(astatus) + ahpw.appendChild(ahpt) + ampw.appendChild(ampt) + ahpw.appendChild(ahp) + ahpw.appendChild(amax_hp) + ampw.appendChild(amp) + ampw.appendChild(amax_mp) + adata.appendChild(anamew) + adata.appendChild(ahpw) + adata.appendChild(ampw) + + // patry member #2 + bdata = document.createElement("div") + bnamew = document.createElement("div") + bname = document.createElement("span") + bhpw = document.createElement("div") + bhpt = document.createElement("span") + bhp = document.createElement("span") + bmax_hp = document.createElement("span") + bmpw = document.createElement("div") + bmpt = document.createElement("span") + bmp = document.createElement("span") + bmax_mp = document.createElement("span") + bstatus = document.createElement("img") + bname.style.fontWeight = '800' + bdata.classList.add('character_data') + bhpw.classList.add('character_stat') + bmpw.classList.add('character_stat') + bnamew.classList.add('character_name_wrapper') + bnamew.appendChild(bname) + bnamew.appendChild(bstatus) + bhpw.appendChild(bhpt) + bmpw.appendChild(bmpt) + bhpw.appendChild(bhp) + bhpw.appendChild(bmax_hp) + bmpw.appendChild(bmp) + bmpw.appendChild(bmax_mp) + bdata.appendChild(bnamew) + bdata.appendChild(bhpw) + bdata.appendChild(bmpw) + + // patry member #3 + cdata = document.createElement("div") + cnamew = document.createElement("div") + cname = document.createElement("span") + chpw = document.createElement("div") + chpt = document.createElement("span") + chp = document.createElement("span") + cmax_hp = document.createElement("span") + cmpw = document.createElement("div") + cmpt = document.createElement("span") + cmp = document.createElement("span") + cmax_mp = document.createElement("span") + cstatus = document.createElement("img") + cname.style.fontWeight = '800' + cdata.classList.add('character_data') + chpw.classList.add('character_stat') + cmpw.classList.add('character_stat') + cnamew.classList.add('character_name_wrapper') + cnamew.appendChild(cname) + cnamew.appendChild(cstatus) + chpw.appendChild(chpt) + cmpw.appendChild(cmpt) + chpw.appendChild(chp) + chpw.appendChild(cmax_hp) + cmpw.appendChild(cmp) + cmpw.appendChild(cmax_mp) + cdata.appendChild(cnamew) + cdata.appendChild(chpw) + cdata.appendChild(cmpw) + + // patry member #4 + ddata = document.createElement("div") + dnamew = document.createElement("div") + dname = document.createElement("span") + dhpw = document.createElement("div") + dhpt = document.createElement("span") + dhp = document.createElement("span") + dmax_hp = document.createElement("span") + dmpw = document.createElement("div") + dmpt = document.createElement("span") + dmp = document.createElement("span") + dmax_mp = document.createElement("span") + dstatus = document.createElement("img") + dname.style.fontWeight = '800' + dnamew.classList.add('character_name_wrapper') + ddata.classList.add('character_data') + dhpw.classList.add('character_stat') + dmpw.classList.add('character_stat') + dnamew.appendChild(dname) + dnamew.appendChild(dstatus) + dhpw.appendChild(dhpt) + dmpw.appendChild(dmpt) + dhpw.appendChild(dhp) + dhpw.appendChild(dmax_hp) + dmpw.appendChild(dmp) + dmpw.appendChild(dmax_mp) + ddata.appendChild(dnamew) + ddata.appendChild(dhpw) + ddata.appendChild(dmpw) + + // map pointer + pppointer = document.createElement('span') + pppointer.classList.add("map_pointer") + // location bar + plocation = document.createElement('div') + plocation_text = document.createElement('span') + plocation.classList.add('framed_text') + // xm ym z coordinates + x_coord = document.createElement('span') + y_coord = document.createElement('span') + coord_text = document.createElement('span') + coord_text.style.marginRight = '5pt' // space cursor copy + pppointer_direction = document.createElement('img') + pppointer_direction.src = './data/images/cursor.png' + pppointer_direction.style.width = '15px' + pppointer_direction.style.position = 'relative'; + pppointer_direction.style.top = '2px'; + pppointer_direction.style.left = '0px'; + pppointer_direction.style.display = 'inline-block' + + // pixies section + pixies_wrapper = document.createElement('table') + pixies_wrapper.classList.add('pixies_table') + pixies_row = document.createElement('tr') + pixies_fai = document.createElement('td') + pixies_pix = document.createElement('td') + pixies_suc = document.createElement('td') + pixies_inc = document.createElement('td') + pixies_lep = document.createElement('td') + pixies_fai_text = document.createElement('span') + pixies_pix_text = document.createElement('span') + pixies_suc_text = document.createElement('span') + pixies_inc_text = document.createElement('span') + pixies_lep_text = document.createElement('span') + pic_fai = document.createElement('img') + pic_pix = document.createElement('img') + pic_suc = document.createElement('img') + pic_inc = document.createElement('img') + pic_lep = document.createElement('img') + pic_fai.src = "./data/images/fai.png" + pic_pix.src = "./data/images/pix.png" + pic_suc.src = "./data/images/suc.png" + pic_inc.src = "./data/images/inc.png" + pic_lep.src = "./data/images/lep.png" + pixies_fai.appendChild(pic_fai) + pixies_pix.appendChild(pic_pix) + pixies_suc.appendChild(pic_suc) + pixies_inc.appendChild(pic_inc) + pixies_lep.appendChild(pic_lep) + pixies_fai.appendChild(pixies_fai_text) + pixies_pix.appendChild(pixies_pix_text) + pixies_suc.appendChild(pixies_suc_text) + pixies_inc.appendChild(pixies_inc_text) + pixies_lep.appendChild(pixies_lep_text) + + pixies_row.appendChild(pixies_fai) + pixies_row.appendChild(pixies_pix) + pixies_row.appendChild(pixies_suc) + pixies_row.appendChild(pixies_inc) + pixies_row.appendChild(pixies_lep) + pixies_wrapper.appendChild(pixies_row) + ///////////////// + // map wrapper + map_wrapper = document.createElement('div') + map_wrapper.classList.add('map_wrapper') + + canvas = document.getElementById("minimap") + canvas.classList.add('map_canvas') + canvas.style.width = '400px' + canvas.style.height = '400px' + canvas.style.marginBottom = '2px' + canvas.addEventListener("mousemove", update_tooltip, { passive: true }); + //canvas.style.outline = '1px solid lime' + ctx = canvas.getContext("2d"); + cgrid_size = 100 + + + let items_block = document.createElement('div') + items_block.style.display = 'flex' + items_block.style.flexDirection = 'row' + items_block.style.flexWrap = 'wrap' + + for (let i in item_colors) { + item_colors_elements[i] = document.createElement('div') + let color_icon = document.createElement('span') + //let item_icon = document.createElement('img') + let item_name = document.createElement('span') + + color_icon.style.display = 'inline-block' + color_icon.style.minWidth = '10px' + color_icon.style.minHeight = '10px' + color_icon.style.width = '14px' + color_icon.style.height = '14px' + color_icon.style.marginRight = '6px' + color_icon.style.backgroundColor = item_colors[i] + color_icon.style.border = '1px solid navy' + color_icon.style.boxShadow = '1px solid black' + //color_icon.style.borderRadius = '5px' + //item_icon.src = './data/images/blank.png' + //item_icon.style.height = '16px' + item_name.textContent = 'unknown' + item_name.classList.add('item_name') + item_colors_elements[i].style.width = '190px' + item_colors_elements[i].style.minWidth = '190px' + item_colors_elements[i].style.display = 'flex' + item_colors_elements[i].style.marginBottom = '2pt' + item_colors_elements[i].style.color = '#fff' + item_colors_elements[i].style.fontFamily = 'Monospace' + //item_colors_elements[i].textContent = '0'.repeat(2-i.length) + i + ' ' + item_colors_elements[i].appendChild(color_icon) + //item_colors_elements[i].appendChild(item_icon) + item_colors_elements[i].appendChild(item_name) + items_block.appendChild(item_colors_elements[i]) + } + + pppointer.appendChild(x_coord) + pppointer.appendChild(y_coord) + pppointer.appendChild(coord_text) + pppointer.appendChild(pppointer_direction) + + character_data.appendChild(adata) + character_data.appendChild(bdata) + character_data.appendChild(cdata) + character_data.appendChild(ddata) + + plocation.appendChild(plocation_text) + plocation.appendChild(pppointer) + map_data.appendChild(plocation) + + //map_data.appendChild(dungeon_map) + //map_data.appendChild(dungeon_legend) + // character stats + document.body.appendChild(character_data) + // location info + document.body.appendChild(map_data) + // pixie counter + document.body.appendChild(pixies_wrapper) + // map + map_wrapper.appendChild(canvas) + // map legend + map_wrapper.appendChild(items_block) + document.body.appendChild(map_wrapper) + + overworld_map_image = new Image(); + overworld_map_image.src = "./data/images/map.gif"; + + + tooltip = document.createElement('span') + tooltip.style.padding = '5pt' + tooltip.style.position = 'absolute' + tooltip.textContent = 'test' + tooltip.style.display = 'inline-block' + tooltip.style.backgroundColor = 'rgba(0,0,0,0.5)' + tooltip.style.outline = '1px solid white' + tooltip.style.outlineOffsetine = '-1px' + tooltip.style.color = 'white' + + //document.body.appendChild(tooltip) // uncomment to get coordinates tooltip (inaccurate) + ui_initialized = true +} + +prepare_ui() + +let towns = { // fill in towns + '40_13105' : true, // world + location_id + '92_12595' : true, + '92_14643' : true, + '120_12593' : true, + '120_13361' : true, + '232_12850' : true, + // '232_13618' : true, // true, but harmfull + // '232_13874' : true, // true, but harmfull + +} + +let map_ids = { + [8] : { + [12592] : 'Forest of Confusion', + [12852] : 'Aborigine\'s Forest', + }, + [16] : { + [14131] : 'Desire Village: Blacksimth', + + }, + [20] : { + [12854] : 'Mountain Cave 1F', + [12598] : 'Mountain Cave 1B', + }, + [40] : { + [12597] : 'Desire Mine: Intro', + [12336] : 'Desire Mine: Rodi Fight', + [13361] : 'Desire Mine B1: altered', + [12593] : 'Desire Mine 1F', + [12849] : 'Desire Mine B1', + [13105] : 'Desire Mine', + }, + [68] : { + [13619] : 'Enrich Town Well', + [12595] : 'Enrich Dungeon B2', + [13363] : 'Enrich Dungeon Well', + [14131] : 'Enrich Dungeon F2', + [13875] : 'Enrich Dungeon F1-2', + [13107] : 'Enrich Dungeon: B1-2', + [12851] : 'Enrich Dungeon: B2-2', + }, + [92] : { + [12595] : 'Desire Village', + [12598] : 'Desire Village: Lisa & Basso harass Rodi', + [12851] : 'Desire Village: Elder', + [13363] : 'Desire Village: Shop', + [13619] : 'Desire Village: Pub', + [14643] : 'Desire Village: Church Square', + [14387] : 'Desire Village: Church', + }, + [120] : { + [12593] : 'Enrich Town', + [13361] : 'Enrich Church square', + }, + [160] : { + [12600] : 'West Shrine', + [13362] : 'Forest Cave B1: South Side', + [12850] : 'Forest Cave B1: North Side', + [13106] : 'Forest Cave B2', + }, + [232] : { + [13874] : "Enrich Castle Throne Room", + [13362] : "Enrich Castle Dungeon", + [13618] : "Enrich Castle", + [12850] : "Enrich Castle Gate", + }, + [244] : "World Map", + +} + +let eid_list = { + [14643] : 'Desire Village: Church', + [hex2int("0x3133")] : 'Desire Village', + [244] : 'World Map', + [13105] : 'Desire Mine', + [12592] : 'Forest of Confusion', + + + [hex2int("0x3330")] : 'World Map', + [hex2int("0x3531")] : 'Desire Mine', + + [hex2int("0x3534")] : 'Aborigine Forest', + [hex2int("0x3535")] : 'Aborigine Mansion', + [hex2int("0x3536")] : 'Mountain CAve', + [hex2int("0x3538")] : 'West Shrine', + [hex2int("0x3539")] : 'East Shrine', + [hex2int("0x3830")] : 'Save Menu Screen', + [hex2int("0x3831")] : 'Title Screen', +} + + +let treasures = { + [244] : { + name : 'world map', + items: { + [1.5] : { + [-11] : { + name: 'Desire Village', + cursor_pos : '1.5_2.1', + } + }, + [12.5] : { + [-12] : { + name: 'Desire Mine', + cursor_pos : '2.3_2.2', + } + }, + [11] : { + [-7] : { + name: 'Forest of Confusion', + cursor_pos : '2.1_1.9', + } + }, + [17] : { + [-16] : { + name: 'God\'s Peak' + } + }, + [13.5] : { + [-1] : { + name: 'Forest Cave', + //text_position : 'bottom', + cursor_pos : '2.3_1.5', + } + }, + [5.5] : { + [0.5] : { + name: 'Enrich Town', + text_position : 'right', + cursor_pos : '1.6_1.4', + } + }, + [8] : { + [-3] : { + name: 'Enrich Castle' + } + }, + [-1] : { + [-5.5] : { + name: 'Border Gate', + // text_position : 'bottom', + cursor_pos : '1.3_1.8', + } + }, + [10] : { + [9] : { + name: 'Mountain Cave', + cursor_pos : '1.8_1.1', + } + }, + [-0.5] : { + [-0.5] : { + name: 'Aborigine\'s Mansion', + //text_position :'right' + } + }, + [3] : { + [1] : { + name: 'Aborigine\'s Forest', + text_position :'bottom', + cursor_pos : '1.4_1.5', + } + }, + [-9] : { + [2] : { + name: 'West Shrine', + text_position :'bottom', + cursor_pos : '0.4_1.5', + } + }, + [18] : { + [0] : { + name: 'East Shrine', + text_position :'right', + cursor_pos : '2.6_1.4', + } + }, + [12] : { + [12] : { + name: 'Farthest Village' + } + }, + [5] : { + [15] : { + name: 'South Shrine' + } + }, + } + }, + [92] : { + [12595] : { + name : 'Desire Vilage', + items : { + [6] :{ + [0] : { + name : 'Pub' + }, + [2] : { + name : 'Exit (Church)' + }, + }, + [3] :{ + [4] : { + name : 'Blacksmith' + }, + }, + [-3] :{ + [0] : { + name : 'Shop (tool, weapon, armor)' + }, + }, + [-2] :{ + [4] : { + name : 'Closed Door' + }, + }, + [2] :{ + [-3] : { + name : 'Elder\'s house' + }, + }, + [0] :{ + [7] : { + name : 'Exit (World Map)' + }, + }, + }, + }, + }, + [40] : { + [12849] : { + name : 'Desire Mine: B1', + display_offset : { + x: -0.8, // abs(x_coordinate)+this = integer that's bigger than the x_coordinate + y: 0.3 // abs(y_coordinate)-this = integer that's equal to the y_coordinate + }, + items : { + [13] :{ + [12] : { + name : '40 Gold' + } + }, + [16] :{ + [21] : { + name : '40 Gold' + } + }, + [19] :{ + [7] : { + name : 'Healing Herb' + } + }, + [20] :{ + [19] : { + name : 'Healing Herb' + } + }, + [30] :{ + [7] : { + name : 'Gold 60' + } + }, + [25] :{ + [5] : { + name : 'Exit (F1)' + }, + [12] : { + name : 'Iron Circlet' + } + }, + [29] : { + [16] : { + name: 'Exit (F1)' + } + }, + }, + }, + [12593] : { + name : 'Desire Mine: 1F', + display_offset : { + x: -0.8, + y: 0.3 + }, + + items : { + [17] : { + [15] : { + name: 'Leather Glove' + } + }, + [18] : { + [11] : { + name: 'Healing Herb' + } + }, + [25] : { + [5] : { + name: 'Exit (B1)' + } + }, + [27] : { + [7] : { + name: 'Muran (succubus)' + } + }, + [28] : { + [16] : { + name: 'Exit (B1)' + } + }, + [30] : { + [18] : { + name: 'Healing Herb' + } + }, + [31] : { + [13] : { + name: 'Healing Herb' + } + }, + }, + }, + [13105] : { + name : 'Desire Mine', + display_offset : { + x: 0.0, + y: -0.0 + }, + items : { + [4] : { + [-6] : { + name: 'Dana (leprechaun)' + } + }, + [2] : { + [-2] : { + name: 'Exit (1F)' + }, + [7] : { + name: 'Exit (1F)' + } + }, + [6] : { + [6] : { + name: 'Exit (World Map)' + } + }, + + }, + }, + [13361] : { + name : 'Desire Mine: 1F (altered)', + display_offset : { + x: -0.8, + y: 0.3 + }, + items : { + [14] : { + [15] : { + name: 'Royal Circlet' + } + }, + [15] : { + [5] : { + name: 'Mithril Ingot' + } + }, + [17] : { + [5] : { + name: 'Potion' + } + }, + }, + }, + }, + [8] : { + [12592] : { + name : 'Forest of Confusion', + offsets : { + }, + items : { + [-11] : { // x + [11] : { // y + name: "Lucky Cookie" + } + }, + [-8] : { // x + [-2] : { // y + name: "Angel Wing" + } + }, + [-7] : { // x + [3] : { // y + name: "Middle Shield" + }, + }, + [-10] : { // x + [4] : { // y + name: "Exit (Forest Cave)" + }, + }, + [-6] : { // x + [7] : { // y + name: "Maple (Pixie)" + }, + [10] : { // y + name: "Puppy" + } + }, + [-3] : { // x + [-8] : { // y + name: "Healing Herb" + } + }, + [3] : { // x + [5] : { // y + name: "Bronze Shell" + } + }, + [8] : { // x + [4] : { // y + name: "Healing Herb" + } + }, + [9] : { // x + [-4] : { // y + name: "Wooden Staff", + }, + [10] : { // y + name: "Cheerful Bread" + }, + }, + [12] : { // x + [-3] : { // y + name: "Daisy (fairy)", + }, + [11] : { // y + name: "Angen Wing" + }, + }, + } + }, + [12852] : { + name : 'Aborigine\'s Forest', + display_offset : { + x: 0.0, + y: 0.0 + }, + items : { + [7] : { + [-4] : { + name : "Angel Wing" + }, + }, + [9] : { + [-14] : { + name : "Morgan (leprechaun)" + }, + [-21] : { + name : "Steel Sword" + }, + }, + [2] : { + [-8] : { + name : "Peony (fairy)" + }, + [-10] : { + name : "Power Shield" + }, + }, + [3] : { + [-20] : { + name : "Peony (fairy)" + }, + }, + [14] : { + [-19] : { + name : "Krupis (incubus)" + }, + }, + }, + }, + }, + [68] : { + [14131] : { + name : 'Enrich Dungeon F2', + display_offset : { + x: 0.2, + y: 0.3 + }, + items : { + [5] : { + [9] : { + name : 'Exit (Enrich Dungeon: B1-2)', + }, + }, + [7] : { + [9] : { + name : 'Exit (Enrich Castle, one way)', + text_position : 'bottom' + }, + }, + }, + }, + [13875] : { + name : 'Enrich Dungeon F1', + display_offset : { + x: 0.2, // abs(x_coordinate)+this = integer that's bigger than the x_coordinate + y: 0.3 // abs(y_coordinate)-this = integer that's equal to the y_coordinate + }, + items : { + [5] : { + [5] : { + name : 'Potion', + }, + [9] : { + name : 'Exit (Enrich Dungeon: B1-2)', + }, + }, + [6] : { + [8] : { + name : 'Mithril Ore', + }, + }, + [8] : { + [4] : { + name : 'Exit (Enrich Dungeon: 2F)', + }, + }, + }, + }, + [13363] : { + name : 'Enrich Dungeon Well', + display_offset : { + x: 0.2, + y: 0.3 + }, + items : { + [8] : { + [11] : { + name : 'Crystal Key', + }, + [14] : { + name : 'Pixie Cedar', + }, + }, + [9] : { + [8] : { + name : 'Exit (Enrich Dungeon)' + }, + }, + [4.5] : { + [6] : { + name : 'Exit (Enrich Dungeon B2)' + }, + }, + [5] : { + [18] : { + name : 'Exit (Enrich Dungeon B2)' + }, + }, + }, + }, + [13107] : { + name : 'Enrich Dungeon: B1-2', + display_offset : { + x: 0.2, + y: 0.3 + }, + items : { + [4] : { + [2] : { + name : '???' + }, + [17] : { + name : 'Exit (Enrich Dungeon: B2-2)' + }, + }, + [3] : { + [15] : { + name : 'Brave Apple' + }, + }, + [2] : { + [4] : { + name : 'Life Candle' + }, + }, + [8] : { + [4] : { + name : 'Exit (Enrich Dungeon: B2-?)' + }, + }, + }, + }, + [12851] : { + name : 'Enrich Dungeon: B2-2', + display_offset : { + x: 0.2, + y: 0.3 + }, + items : { + [8] : { + [5] : { + name : 'Lime (pixie)' + }, + [25] : { + name : 'Aster (incubus)' + }, + }, + [0] : { + [26] : { + name : 'Exit (Enrich Dungeon: B2)' + }, + }, + [4] : { + [18] : { + name : 'Exit (Enrich Dungeon: B1)' + }, + }, + }, + }, + [12595] : { + name : 'Enrich Dungeon: B2', + display_offset : { + x: 0.6, + y: 0.2 + }, + items : { + [1] : { + [14] : { + name : 'Morgan (leprechaun)' + }, + }, + [2] : { + [21] : { + name : 'Eagle Crest' + }, + }, + [-1] : { + [5] : { + name : 'Exit (Enrich Dungeon Well)' + }, + }, + [0] : { + [23] : { + name : 'Potion' + }, + }, + [-3] : { + [26] : { + name : 'Exit (Enrich Dungeon Well)' + }, + }, + [5] : { + [17] : { + name : 'Iron Brace' + }, + }, + [4] : { + [10] : { + name : 'Camelia (fairy)' + }, + }, + [12] : { + [19] : { + name : 'Critical Juice' + }, + [3] : { + name : 'Goat Crest' + }, + }, + [17] : { + [13] : { + name : 'Gold Key' + }, + }, + [21] : { + [10] : { + name : 'Snake Crest' + }, + }, + + [23] : { + [3] : { + name : 'Slash Dagger' + }, + }, + + + }, + }, + }, + [20] : { + [12854] : { + name : 'Mountain Cave 1F', + display_offset : { + x: 0.2, + y: -0.3 + }, + items : { + [-10] : { + [0] : { + name : "Life Ring" + }, + }, + [-2] : { + [5] : { + name : "Lily (fairy)" + }, + }, + [-1] : { + [6] : { + name : "???" + }, + }, + [16] : { + [10] : { + name : "Lucky Cookie" + }, + }, + [14] : { + [-1] : { + name : "Basso" + }, + }, + [11] : { + [-6] : { + name : "Exit (Mountain Cave B1)" + }, + }, + [4] : { + [12] : { + name : "Exit (Mountain Cave B1)" + }, + }, + [8] : { + [-3] : { + name : "Exit (Mountain Cave B1)" + }, + }, + }, + }, + [12598] : { + name : 'Mountain Cave 1B', + display_offset : { + x: 0.8, + y: -0.3 + }, + items : { + [8] : { + [7] : { + name : "Potion" + }, + }, + }, + }, + }, + [160] : { + [12600] : { + name : 'West Shrine', + display_offset : { + x: -0.8, + y: -0.2 + }, + items : { + [-9] : { + [3] : { + name : "Turtle Snacks" + }, + [5] : { + name : "Battle Armor" + }, + }, + }, + }, + [13362] : { + name : 'Forest Cave B1', //9.3:22.3 + display_offset : { + x: -0.35, + y: -0.75 + }, + items : { + [-11] : { + [23] : { + name : "Exit (World Map)" + }, + }, + [-8] : { + [6] : { + name : "Mithril Ore" + }, + }, + [-1] : { + [-1.5] : { + name : "Exit (Forest Cave B2)" + }, + [18] : { + name : "Angel Wing" + }, + }, + [8] : { + [6] : { + name : "Antidote" + }, + [14] : { + name : "Scale Suit" + }, + }, + [9] : { + [21] : { + name : "Willow (pixie)" + }, + }, + }, + }, + [12850] : { + name : 'Forest Cave B1 - North Side', + display_offset : { + x: -0.3, + y: -0.8 + }, + items : { + [9] : { + [3] : { + name : "Exit (Forest Cave B2)" + }, + }, + [2] : { + [-20] : { + name : "Exit (Forest of Confusion)" + }, + }, + [0] : { + [1] : { + name : "Bronze Staff" + }, + }, + [4] : { + [0] : { + name : "Antidote" + }, + [-4] : { + name : "Iris (fairy)" + }, + }, + [-4] : { + [-7] : { + name : "Healing Herb" + }, + }, + }, + }, + [13106] : { + name : 'Forest Cave B2', + display_offset : { + x: -0.8, + y: -0.75 + }, + items : { + [-6] : { + [27] : { + name : "Exit (Forest Cave B1)" + }, + }, + [-5] : { + [14] : { + name : "Bronze Brace" + }, + }, + [-2.5] : { + [1] : { + name : "Exit (Forest Cave B1 - North Side)" + }, + }, + [-1] : { + [9] : { + name : "Tak (leprechaun)" + }, + }, + [-16] : { + [12] : { + name : "Healing Herb" + }, + }, + [-15] : { + [20] : { + name : "Magic Nectar" + }, + }, + [4] : { + [5] : { + name : "Feather Robe" + }, + [16] : { + name : "Enjewel (incubus)" + }, + }, + }, + }, + }, + +} + + +let minimap = {} +let minx = Number.MAX_SAFE_INTEGER +let miny = Number.MAX_SAFE_INTEGER +let minxx = Number.MAX_SAFE_INTEGER +let maxxx = Number.MIN_SAFE_INTEGER +let minyy = Number.MAX_SAFE_INTEGER +let maxyy = Number.MIN_SAFE_INTEGER + + +function draw_player_pointer(d) { + let data = d.position + + ctx.save() + if (towns[d.worldmap+'_'+d.location_id]) { + ctx.translate(cgrid_size*(1-Number(Math.round(data.x))), cgrid_size*(1+Number(Math.round(data.y)))) + } else { + ctx.translate(cgrid_size*(1-Number(data.x)), cgrid_size*(1+Number(data.y))) + } + ctx.strokeStyle = 'rgb(255,55,55,1)' + ctx.fillStyle = 'rgb(255,205,55,1)' + + ctx.save() + ctx.translate(-cgrid_size/2, -cgrid_size/2) + ctx.rotate((Math.PI / 180) * (360-data.direction)); + ctx.save() + ctx.translate(-cgrid_size/2, -cgrid_size/2) + ctx.beginPath(); + ctx.moveTo(+2, cgrid_size/2); + ctx.lineTo(cgrid_size-2, +2) + ctx.lineTo(cgrid_size-2, cgrid_size-2) + ctx.moveTo(+2, cgrid_size/2); + ctx.fill(); + + ctx.beginPath(); + ctx.moveTo(+2, cgrid_size/2); + ctx.lineTo(cgrid_size-2, +2) + ctx.lineTo(cgrid_size-2, cgrid_size-2) + ctx.moveTo(+2, cgrid_size/2); + ctx.stroke(); + + ctx.fillStyle = 'rgb(255,55,55,1)' + ctx.beginPath(); + ctx.moveTo(+2, cgrid_size/2); + ctx.lineTo(cgrid_size-2-cgrid_size/2, +2+cgrid_size/4) + ctx.lineTo(cgrid_size-2-cgrid_size/2, cgrid_size-2-cgrid_size/4) + ctx.moveTo(+2, cgrid_size/2); + ctx.fill(); + ctx.restore() + ctx.restore() + ctx.restore() + +} + +let sine_arg = 0 + +function draw_minimap(d) { + sine_arg = sine_arg + 0.2 + let sine = Math.sin(sine_arg) + + ctx.clearRect(0, 0, 400, 400) + if (!d) { return } + if (d.worldmap == 244) { + ctx.save() + ctx.rotate(-0.15) + ctx.drawImage(overworld_map_image, 0,50, 350, 350) + ctx.restore() + } + + let data = d + let items = treasures[d.worldmap]?.[d.location_id]?.items + let offsets = treasures[d.location_id]?.offsets || {} + let display_offset = treasures[d.worldmap]?.[d.location_id]?.display_offset || {x:0, y:0} + + if (d.worldmap == 244) { + items = treasures[244].items + minimap = [] + } else { + minimap = d.mapped_data + } + + cgrid_size = 100 + ctx.save() + ctx.translate(1, 1) + for (let x in minimap) { + for (let y in minimap[x]) { + if (Number(-x) < Number(minxx)) { + minxx = -x + minx = Math.abs(minxx) + } + if (Number(y) < Number(minyy)) { + minyy = y + miny = Math.abs(minyy) + } + if (Number(-x) > Number(maxxx)) { + maxxx = -x + } + if (Number(y) > Number(maxyy)) { + maxyy = y + } + + } + } + + for (let x in items) { + for (let y in items[x]) { + if (items[x][y]) { + if (Number(x) < Number(minxx)) { + minxx = x + minx = Math.abs(minxx) + } + if (Number(y) < Number(minyy)) { + minyy = y + miny = Math.abs(minyy) + } + if (Number(x) > Number(maxxx)) { + maxxx = x + } + if (Number(y) > Number(maxyy)) { + maxyy = y + } + } + } + } + + if (d.worldmap == 244) { + maxxx = 20 + maxyy = 20 + minxx = -20 + minyy = -20 + } + cgrid_size = Math.min(Math.floor(Math.min( + 360/(Math.abs(maxyy - minyy)+2), + 360/(Math.abs(maxxx - minxx)+2)) + ), 50) + + + ctx.save() + ctx.translate((-minxx+1)*cgrid_size+1, (-minyy+1)*cgrid_size+1) + ctx.fillStyle = 'rgb(255,245,255,1)'// bg + for (let x in minimap) { + for (let y in minimap[x]) { + if (minimap[x][y]) { + if (towns[d.worldmap+'_'+d.location_id]) { + ctx.fillRect(-Number(cgrid_size*Math.round(x))-1, Number(cgrid_size*Math.round(y))-1, cgrid_size+2, cgrid_size+2); + } else { + ctx.fillRect(-Number(cgrid_size*x)-1, Number(cgrid_size*y)-1, cgrid_size+2, cgrid_size+2); + } + } + } + } + + ctx.strokeStyle = 'rgb(255,245,255,1)'// bg + let item_color_index + for (let x in minimap) { + for (let y in minimap[x]) { + if (minimap[x][y]) { + if (towns[d.worldmap+'_'+d.location_id]) { + if (minimap[x][y].additional) { + for (let xx in minimap[x][y].additional) { + for (let yy in minimap[x][y].additional[xx]) { + console.log(-Number(cgrid_size*Math.round(x))-1+cgrid_size/2, Number(cgrid_size*Math.round(y))-1+cgrid_size/2, -Number(cgrid_size*Math.round(xx))-1+cgrid_size/2, Number(cgrid_size*Math.round(yy))-1+cgrid_size/2) + ctx.lineCap = 'butt' + if (Math.round(x)==Math.round(xx) || Math.round(y) == Math.round(yy)) { + ctx.lineWidth = cgrid_size+2 + } else { + ctx.lineWidth = Math.sqrt(2*cgrid_size*cgrid_size); + } + + ctx.beginPath(); + ctx.moveTo( + -Number(cgrid_size*Math.round(x))-1+cgrid_size/2, + Number(cgrid_size*Math.round(y))-1+cgrid_size/2 + ); + ctx.lineTo( + -Number(cgrid_size*Math.round(xx))-1+cgrid_size/2, + Number(cgrid_size*Math.round(yy))-1+cgrid_size/2 + ); + ctx.stroke(); + } + } + } + } + } + } + } + + // fg + for (let x in minimap) { + for (let y in minimap[x]) { + if (minimap[x][y]) { + let r = 0 + let g = 0 + let b = 0 + + if (minimap[x][y].z?.up ) { + r = 225 + } + if (minimap[x][y].z?.down ) { + g = 125 + } + if (minimap[x][y].z?.middle ) { + b = 205 + } + ctx.strokeStyle = 'rgb('+r+','+g+','+b+',1)' + // if ((d.position.x == x) && (d.position.y == y)) { + // console.log(ctx.fillStyle, x, y, minimap[x][y].z) + // } + if (towns[d.worldmap+'_'+d.location_id]) { + if (minimap[x][y].additional) { + for (let xx in minimap[x][y].additional) { + for (let yy in minimap[x][y].additional[xx]) { + ctx.lineCap = 'butt' + if (Math.round(x)==Math.round(xx) || Math.round(y) == Math.round(yy)) { + ctx.lineWidth = cgrid_size + } else { + ctx.lineWidth = Math.sqrt(2*cgrid_size*cgrid_size)-2; + } + + ctx.beginPath(); + ctx.moveTo( + -Number(cgrid_size*Math.round(x))-1+cgrid_size/2, + Number(cgrid_size*Math.round(y))-1+cgrid_size/2 + ); + ctx.lineTo( + -Number(cgrid_size*Math.round(xx))-1+cgrid_size/2, + Number(cgrid_size*Math.round(yy))-1+cgrid_size/2 + ); + ctx.stroke(); + ctx.lineWidth = 1; + } + } + } + } + } + } + } + + + for (let x in minimap) { + for (let y in minimap[x]) { + if (minimap[x][y]) { + let r = 0 + let g = 0 + let b = 0 + let z2 = minimap[x][y].z?.z2 || 0 // z2 shows ceilien height, z shows foot height + if (minimap[x][y].z?.up ) { + r = 225 + } + if (minimap[x][y].z?.down ) { + g = 125 + z2 = 0 + } + if (minimap[x][y].z?.middle ) { + b = 205 + } + ctx.fillStyle = 'rgb('+r+','+g+','+b+',1)' + + if (towns[d.worldmap+'_'+d.location_id]) { + ctx.fillRect(-Number(cgrid_size*Math.round(x))+cgrid_size*z2/200, Number(cgrid_size*Math.round(y))+cgrid_size*z2/200, cgrid_size-cgrid_size*z2/100, cgrid_size-cgrid_size*z2/100); + } else { + ctx.fillRect(-Number(cgrid_size*x)+cgrid_size*z2/100, Number(cgrid_size*y)+cgrid_size*z2/100, cgrid_size-cgrid_size*z2/50, cgrid_size-cgrid_size*z2/50); + } + } + } + } + + item_color_index = item_color_index = 0 + ctx.translate(Number(offsets.x || 0)*cgrid_size, Number(offsets.y || 0)*cgrid_size) + + for (let x in items) { + for (let y in items[x]) { + if (items[x][y]) { + ctx.save() + ctx.translate((Number(x)+display_offset.x)*cgrid_size+1, (Number(y)+display_offset.y)*cgrid_size+1) + ctx.fillStyle = item_colors[item_color_index] + ctx.fillRect(0+cgrid_size/16,0+cgrid_size/16, cgrid_size-cgrid_size/8, cgrid_size-cgrid_size/8); + ctx.strokeStyle = 'rgb(10,10,155,1)' + ctx.strokeRect(0+cgrid_size/16,0+cgrid_size/16, cgrid_size-cgrid_size/8, cgrid_size-cgrid_size/8); + + ctx.strokeStyle = 'rgb(0,0,0,1)' + let text = items[x][y].name || "" + let real_cursor_pos = d.position.x+'_'+d.position.y + let cursor_pos = items[x][y].cursor_pos + let color = 'rgb(255,255,255,1)' + let bgcolor = 'rgb(1,1,1,1)' + + if (d.worldmap == 244 || (text.indexOf('Exit') >= 0)) { + if (real_cursor_pos == cursor_pos) { + color = 'rgb('+ (105+150*sine) +','+ (225+25*sine) +','+ (255) +',1)' + bgcolor = 'rgb('+ (100) +','+ (100-25*sine) +','+ (100-50*sine) +',1)' + + } + let text_position = items[x][y].text_position + ctx.font = "11px monospace"; + ctx.shadowColor = "black"; + ctx.shadowBlur = 2; + if (d.worldmap != 244) { + if (y<=0) { + text_position = 'bottom' + } + if (x<=0) { + text_position = 'right' + } + } + + switch (text_position) { + case 'right' : + ctx.fillStyle = bgcolor + ctx.fillText(text, 13, 10); + ctx.fillStyle = color + ctx.fillText(text, 12, 9); + break + case 'bottom' : + ctx.fillStyle = bgcolor + ctx.fillText(text, -text.length*3+1, 19); + ctx.fillStyle = color + ctx.fillText(text, -text.length*3, 18); + break + default: + ctx.fillStyle = bgcolor + ctx.fillText(text, -text.length*3+1, 0); + ctx.fillStyle = color + ctx.fillText(text, -text.length*3, -1); + } + } + ctx.restore() + item_color_index = item_color_index +1 + } + } + } + + draw_player_pointer(data) + ctx.restore() + ctx.restore() + +} + + +let json_data +let last_map_id + +function show_message(message) { + if (!ui_initialized) { + return + } + + try { + json_data = JSON.parse(message.data) + } catch(err) { + } + + if (json_data.map_changed) { + map_changed = true + } + + if (json_data.worldmap == 244) { + json_data.location_id = 244 + } + + if (map_changed) { + false + //console.log('map changed') + let items = treasures[json_data.worldmap]?.[json_data.location_id]?.items + let item_counter = 0 + + for (let x in items) { + for (let y in items[x]) { + if (items[x][y]) { + let iname_element = item_colors_elements[item_counter].getElementsByClassName('item_name')[0] + item_colors_elements[item_counter].style.display = 'flex' + iname_element.textContent = items[x][y].name + item_counter = item_counter + 1 + } + } + } + + for (let i=item_counter; i<20; i++) { + item_colors_elements[i].style.display = 'none' + } + + } + + let party_count = json_data.party_characters_list.length + + if (party_count>=1) { + adata.classList.add("visible") + //aname.textContent = json_data.party_characters_list[0].charAt(0).toUpperCase() + json_data.party_characters_list[0].slice(1) + aname.textContent = json_data.hero_name.join("") + ahpt.textContent = 'HP' + ahp.textContent = json_data.hp[json_data.party_characters_list[0]] +'/' + amax_hp.textContent = json_data.max_hp[json_data.party_characters_list[0]] + ampt.textContent = 'MP' + amp.textContent = json_data.mp[json_data.party_characters_list[0]] +'/' + amax_mp.textContent = json_data.max_mp[json_data.party_characters_list[0]] + + let status = json_data.status[json_data.party_characters_list[0]] + //console.log(status) + if (status == 'Poisoned') { + astatus.src = './data/images/poison.png' + } else { + astatus.src = '' + } + } else { + adata.classList.remove("visible") + } + + if (party_count>=2) { + bdata.classList.add("visible") + bname.textContent = json_data.party_characters_list[1].charAt(0).toUpperCase() + json_data.party_characters_list[1].slice(1) + bhpt.textContent = 'HP' + bhp.textContent = json_data.hp[json_data.party_characters_list[1]] +'/' + bmax_hp.textContent = json_data.max_hp[json_data.party_characters_list[1]] + bmpt.textContent = 'MP' + bmp.textContent = json_data.mp[json_data.party_characters_list[1]] +'/' + bmax_mp.textContent = json_data.max_mp[json_data.party_characters_list[1]] + + let status = json_data.status[json_data.party_characters_list[1]] + if (status == 'Poisoned') { + bstatus.src = './data/images/poison.png' + } else { + bstatus.src = '' + } + } else { + bdata.classList.remove("visible") + } + + if (party_count>=3) { + cdata.classList.add("visible") + cname.textContent = json_data.party_characters_list[2].charAt(0).toUpperCase() + json_data.party_characters_list[2].slice(1) + chpt.textContent = 'HP' + chp.textContent = json_data.hp[json_data.party_characters_list[2]] +'/' + cmax_hp.textContent = json_data.max_hp[json_data.party_characters_list[2]] + cmpt.textContent = 'MP' + cmp.textContent = json_data.mp[json_data.party_characters_list[2]] +'/' + cmax_mp.textContent = json_data.max_mp[json_data.party_characters_list[2]] + + + let status = json_data.status[json_data.party_characters_list[2]] + if (status == 'Poisoned') { + cstatus.src = './data/images/poison.png' + } else { + cstatus.src = '' + } + } else { + cdata.classList.remove("visible") + } + + if (party_count>=4) { + ddata.classList.add("visible") + dname.textContent = json_data.party_characters_list[3].charAt(0).toUpperCase() + json_data.party_characters_list[3].slice(1) + dhpt.textContent = 'HP' + dhp.textContent = json_data.hp[json_data.party_characters_list[3]] +'/' + dmax_hp.textContent = json_data.max_hp[json_data.party_characters_list[3]] + dmpt.textContent = 'MP' + dmp.textContent = json_data.mp[json_data.party_characters_list[3]] +'/' + dmax_mp.textContent = json_data.max_mp[json_data.party_characters_list[3]] + + let status = json_data.status[json_data.party_characters_list[3]] + if (status == 'Poisoned') { + dstatus.src = './data/images/poison.png' + } else { + dstatus.src = '' + } + + } else { + ddata.classList.remove("visible") + } + + + + pppointer_direction.style.transform = 'rotate('+(360-json_data.position.direction)+'deg)' + x_coord.textContent = Math.floor(-json_data.position.x) + ':' + y_coord.textContent = Math.floor(json_data.position.y) + ':'+ Math.floor(json_data.position.z) + + plocation_text.textContent = + (map_ids[json_data.worldmap]?.[json_data.location_id] || map_ids[json_data.worldmap]) + + ' ' + + '(' + json_data.worldmap + ' : ' + json_data.location_id + ')' + + + if (json_data.reset_cell_size) { + cgrid_size = 30 + //console.log("resetting cell size") + minx = Number.MAX_SAFE_INTEGER + miny = Number.MAX_SAFE_INTEGER + minxx = Number.MAX_SAFE_INTEGER + maxxx = Number.MIN_SAFE_INTEGER + minyy = Number.MAX_SAFE_INTEGER + maxyy = Number.MIN_SAFE_INTEGER + + + } + + pix_count = {} + + for (let species in json_data.pixies_flags) { + //console.log(species) + for (let pix in json_data.pixies_flags[species]) { + let got = json_data.pixies_flags[species][pix] + if (got == 1) { + pix_count[species] = (pix_count[species] || 0) + 1 + } + } + } + + pixies_fai_text.textContent = pix_count.pixie || 0 + pixies_pix_text.textContent = pix_count.fairy || 0 + pixies_suc_text.textContent = pix_count.succubus || 0 + pixies_inc_text.textContent = pix_count.incubus || 0 + pixies_lep_text.textContent = pix_count.leprechaunt || 0 + + //console.log(json_data.pixies) // string representation of pixies data + //console.log(json_data.pixies_flags) // named lists of pixies +} + + +function update_tooltip(event) { + if (!event) {return} + if(tooltip && json_data) { + let rect = canvas.getBoundingClientRect(); + let cx = 8 // rect.right // no right margin past document.body, hence 0 + let cy = rect.top + let cpx = event.clientX - cx + let cpy = Math.floor(event.clientY - cy) + let cpxx = Math.floor(cpx/cgrid_size)-1 + let cpyy = Math.floor(cpy/cgrid_size)-1 + let x = event.clientX + let y = event.clientY + tooltip.style.left = (20)+x+'px' + tooltip.style.top = y+'px' + tooltip.innerHTML = Math.floor(cpxx+Number(minxx))+' : '+Math.floor(cpyy+Number(minyy)) + "
" + + json_data.position.x+' : '+json_data.position.y + "
" + + cpxx+' : '+cpyy + "
" + } +} + +setInterval( + function() { + draw_minimap(json_data) + update_tooltip() + }, + 16 +) + + + + +new_client() +