diff --git a/assets/previewicons/cube-143.png b/assets/previewicons/cube-143.png new file mode 100644 index 0000000..715be0e Binary files /dev/null and b/assets/previewicons/cube-143.png differ diff --git a/assets/previewicons/cube-144.png b/assets/previewicons/cube-144.png new file mode 100644 index 0000000..b3d2ebf Binary files /dev/null and b/assets/previewicons/cube-144.png differ diff --git a/assets/previewicons/cube-145.png b/assets/previewicons/cube-145.png new file mode 100644 index 0000000..e7e0438 Binary files /dev/null and b/assets/previewicons/cube-145.png differ diff --git a/assets/previewicons/cube-146.png b/assets/previewicons/cube-146.png new file mode 100644 index 0000000..193bd5e Binary files /dev/null and b/assets/previewicons/cube-146.png differ diff --git a/assets/previewicons/cube-147.png b/assets/previewicons/cube-147.png new file mode 100644 index 0000000..1ce803f Binary files /dev/null and b/assets/previewicons/cube-147.png differ diff --git a/assets/previewicons/cube-148.png b/assets/previewicons/cube-148.png new file mode 100644 index 0000000..31a0179 Binary files /dev/null and b/assets/previewicons/cube-148.png differ diff --git a/html/achievements.html b/html/achievements.html index d15a9ba..796d078 100644 --- a/html/achievements.html +++ b/html/achievements.html @@ -41,6 +41,7 @@ + @@ -83,7 +84,7 @@ let disabledFilters = {reward: [], type: [], game: []} let forms = ["cube", "ship", "ball", "ufo", "wave", "robot", "spider"] -let gameColors = {meltdown: "rgb(255, 100, 0)", world: "rgb(0, 225, 255)"} +let gameColors = {gd: "255,200,0", meltdown: "255, 100, 0", world: "100,220,0", subzero: "0,255,255"} let achievements = [] let colors = {} let completed = false @@ -111,7 +112,7 @@ function append(reset=true) { $('#searchBox').append(`
${x.name} +

${x.name}

${completed ? x.achievedDescription : x.description}

`) diff --git a/html/iconkit.html b/html/iconkit.html index fd74546..5f1a9ae 100644 --- a/html/iconkit.html +++ b/html/iconkit.html @@ -164,6 +164,8 @@ fetch('./api/icons').then(res => { return (res.json())}) .then(iconStuff => { + let miniIcon = iconStuff.icons.filter(x => x.startsWith("cube")).length + function filterIcon(name) { return iconStuff.icons.filter(x => x.startsWith(name)).sort(function (a,b) {return a.replace(/[^0-9]/g, "") - b.replace(/[^0-9]/g, "");})} function appendIcon(form, formName) { @@ -292,7 +294,7 @@ fetch('./api/icons').then(res => { $(this).addClass('iconSelected'); selectedIcon = $(this).attr('num'); selectedForm = $(this).attr('form'); - if (selectedIcon == 143) selectedIcon = 0; + if (selectedIcon == miniIcon) selectedIcon = 0; if (iconStuff.whiteIcons.find(x => x[1] == selectedIcon && x[0] == selectedForm)) { $('#colW').show(); $('#ccW').show() } else { $('#colW').hide(); $('#ccW').hide(); $(`#colW-12`).trigger('click') } diff --git a/icons/gameSheet.json b/icons/gameSheet.json index bc618c0..c431900 100644 --- a/icons/gameSheet.json +++ b/icons/gameSheet.json @@ -1587,6 +1587,66 @@ "spriteOffset": [0, 0], "spriteSize": [88, 90] }, + "player_143_001.png": { + "spriteOffset":[0,0], + "spriteSize":[120,120] + }, + "player_143_2_001.png": { + "spriteOffset":[0,0], + "spriteSize":[92,88] + }, + "player_144_001.png": { + "spriteOffset":[0,0], + "spriteSize":[120,120] + }, + "player_144_2_001.png": { + "spriteOffset":[0,0], + "spriteSize":[88,88] + }, + "player_145_001.png": { + "spriteOffset":[0,0], + "spriteSize":[120,120] + }, + "player_145_2_001.png": { + "spriteOffset":[0,0], + "spriteSize":[108,108] + }, + "player_145_extra_001.png": { + "spriteOffset":[0,-2], + "spriteSize":[88,68] + }, + "player_146_001.png": { + "spriteOffset":[0,0], + "spriteSize":[120,120] + }, + "player_146_2_001.png": { + "spriteOffset":[0,-18], + "spriteSize":[92,52] + }, + "player_146_extra_001.png": { + "spriteOffset":[0,24], + "spriteSize":[92,36] + }, + "player_147_001.png": { + "spriteOffset":[0,0], + "spriteSize":[120,120] + }, + "player_147_2_001.png": { + "spriteOffset":[0,0], + "spriteSize":[104,112] + }, + "player_148_001.png": { + "spriteOffset":[0,0], + "spriteSize":[128,120] + }, + "player_148_2_001.png": { + "spriteOffset":[0,4], + "spriteSize":[108,100] + }, + "player_148_extra_001.png": { + "spriteOffset":[0,-8], + "spriteSize":[84,16] + }, "player_14_001.png": { "spriteOffset": [0, 0], "spriteSize": [121, 120] diff --git a/icons/parseIconPlist.js b/icons/parseIconPlist.js new file mode 100644 index 0000000..1237b9b --- /dev/null +++ b/icons/parseIconPlist.js @@ -0,0 +1,15 @@ +const plist = require('plist'); +const fs = require('fs'); +const data = plist.parse(fs.readFileSync('C:/Users/Craig/Downloads/sz/assets/GJ_GameSheet02-hd.plist', 'utf8')); +for (let key in data.frames) { + if (key.startsWith(".")) delete data.frames[key] + else { let fileData = data.frames[key]; + for (let innerKey in fileData) { + if (typeof fileData[innerKey]) { + if (!["spriteSize", "spriteOffset"].includes(innerKey)) delete fileData[innerKey] // remove useless stuff + else fileData[innerKey] = JSON.parse(fileData[innerKey].replace(/{/g, '[').replace(/}/g, ']')); + } + } +}} +fs.writeFileSync('./gameSheet.json', JSON.stringify(data.frames, null, 2).replace(/\[\n.+?(-?\d+),\n.+?(-?\d+)\n.+]/g, "[$1, $2]")); // regex to make it easier to read +console.log("Successfully converted!") \ No newline at end of file diff --git a/icons/player_143_001.png b/icons/player_143_001.png new file mode 100644 index 0000000..cf107ae Binary files /dev/null and b/icons/player_143_001.png differ diff --git a/icons/player_143_2_001.png b/icons/player_143_2_001.png new file mode 100644 index 0000000..7ecf118 Binary files /dev/null and b/icons/player_143_2_001.png differ diff --git a/icons/player_144_001.png b/icons/player_144_001.png new file mode 100644 index 0000000..da6009e Binary files /dev/null and b/icons/player_144_001.png differ diff --git a/icons/player_144_2_001.png b/icons/player_144_2_001.png new file mode 100644 index 0000000..a75c829 Binary files /dev/null and b/icons/player_144_2_001.png differ diff --git a/icons/player_145_001.png b/icons/player_145_001.png new file mode 100644 index 0000000..d4d7d3b Binary files /dev/null and b/icons/player_145_001.png differ diff --git a/icons/player_145_2_001.png b/icons/player_145_2_001.png new file mode 100644 index 0000000..11a6401 Binary files /dev/null and b/icons/player_145_2_001.png differ diff --git a/icons/player_145_extra_001.png b/icons/player_145_extra_001.png new file mode 100644 index 0000000..a1b9984 Binary files /dev/null and b/icons/player_145_extra_001.png differ diff --git a/icons/player_146_001.png b/icons/player_146_001.png new file mode 100644 index 0000000..ce34ad8 Binary files /dev/null and b/icons/player_146_001.png differ diff --git a/icons/player_146_2_001.png b/icons/player_146_2_001.png new file mode 100644 index 0000000..18990a8 Binary files /dev/null and b/icons/player_146_2_001.png differ diff --git a/icons/player_146_extra_001.png b/icons/player_146_extra_001.png new file mode 100644 index 0000000..2588400 Binary files /dev/null and b/icons/player_146_extra_001.png differ diff --git a/icons/player_147_001.png b/icons/player_147_001.png new file mode 100644 index 0000000..ccf327a Binary files /dev/null and b/icons/player_147_001.png differ diff --git a/icons/player_147_2_001.png b/icons/player_147_2_001.png new file mode 100644 index 0000000..7ccb117 Binary files /dev/null and b/icons/player_147_2_001.png differ diff --git a/icons/player_148_001.png b/icons/player_148_001.png new file mode 100644 index 0000000..06676ce Binary files /dev/null and b/icons/player_148_001.png differ diff --git a/icons/player_148_2_001.png b/icons/player_148_2_001.png new file mode 100644 index 0000000..0c3c4e6 Binary files /dev/null and b/icons/player_148_2_001.png differ diff --git a/icons/player_148_extra_001.png b/icons/player_148_extra_001.png new file mode 100644 index 0000000..258955a Binary files /dev/null and b/icons/player_148_extra_001.png differ diff --git a/misc/achievementTypes.json b/misc/achievementTypes.json index 81fc844..528f924 100644 --- a/misc/achievementTypes.json +++ b/misc/achievementTypes.json @@ -10,10 +10,10 @@ "shardPoison": ["Poison Shards", ["shardPoison"]], "shardShadow": ["Shadow Shards", ["shardShadow"]], "shardBonus": ["Bonus Shards", ["shardBonus"]], - "level": ["Official Levels", ["level", "mdlevel", "world.level", "steam"]], + "level": ["Official Levels", ["level", "mdlevel", "world.level", "subzero.level", "steam"]], "customLevels": ["Online Levels", ["custom"]], "creator": ["Creator", ["creator", "submit"]], - "ultimate": ["3 Coins", ["ultimatedemon", "mdcoin"]], + "ultimate": ["3 Coins", ["ultimatedemon", "mdcoin", "szcoin"]], "mappacks": ["Map Packs", ["mappacks"]], "attempts": ["Attempts", ["attempt", "special"]], "jumps": ["Jumping", ["jump"]], diff --git a/misc/achievements.json b/misc/achievements.json index d787123..ecbaa1e 100644 --- a/misc/achievements.json +++ b/misc/achievements.json @@ -1694,7 +1694,7 @@ "game": "gd", "name": "Bounce", "rewardType": "color2", - "rewardID": 6, + "rewardID": 5, "description": "Jump 1000 times", "achievedDescription": "Jumped 1000 times", "trueID": "geometry.ach.jump01" @@ -1704,7 +1704,7 @@ "game": "gd", "name": "I like jumping", "rewardType": "color2", - "rewardID": 12, + "rewardID": 11, "description": "Jump 10000 times", "achievedDescription": "Jumped 10000 times", "trueID": "geometry.ach.jump02" @@ -1714,7 +1714,7 @@ "game": "gd", "name": "You jump like a pro!", "rewardType": "color2", - "rewardID": 13, + "rewardID": 12, "description": "Jump 20000 times", "achievedDescription": "Jumped 20000 times", "trueID": "geometry.ach.jump03" @@ -1744,7 +1744,7 @@ "game": "gd", "name": "Trial and error", "rewardType": "color2", - "rewardID": 7, + "rewardID": 6, "description": "Do 100 attempts", "achievedDescription": "Did 100 attempts", "trueID": "geometry.ach.attempt01" @@ -1754,7 +1754,7 @@ "game": "gd", "name": "Crash Tester", "rewardType": "color2", - "rewardID": 8, + "rewardID": 7, "description": "Do 500 attempts", "achievedDescription": "Did 500 attempts", "trueID": "geometry.ach.attempt02" @@ -1764,7 +1764,7 @@ "game": "gd", "name": "You Shall Not Pass!", "rewardType": "color2", - "rewardID": 15, + "rewardID": 14, "description": "Do 2000 attempts", "achievedDescription": "Did 2000 attempts", "trueID": "geometry.ach.attempt03" @@ -1984,7 +1984,7 @@ "game": "gd", "name": "Number one fan!", "rewardType": "color2", - "rewardID": 14, + "rewardID": 13, "description": "Like Geometry Dash on Facebook", "achievedDescription": "Liked Geometry Dash on Facebook", "trueID": "geometry.ach.facebook" @@ -1994,7 +1994,7 @@ "game": "gd", "name": "GeometryTube", "rewardType": "color2", - "rewardID": 21, + "rewardID": 20, "description": "Subscribe to RobTop Games on YouTube", "achievedDescription": "Subscribed to RobTop Games on YouTube", "trueID": "geometry.ach.youtube" @@ -2024,7 +2024,7 @@ "game": "gd", "name": "Rampage!", "rewardType": "color2", - "rewardID": 20, + "rewardID": 19, "description": "A secret is required", "achievedDescription": "Destroyed a player", "trueID": "geometry.ach.secret01" @@ -2044,7 +2044,7 @@ "game": "gd", "name": "Ultrakill!", "rewardType": "color2", - "rewardID": 28, + "rewardID": 27, "description": "A secret is required", "achievedDescription": "Destroyed 100 players", "trueID": "geometry.ach.secret02b" @@ -2659,6 +2659,106 @@ "achievedDescription": "Collected 100 of each shard", "trueID": "geometry.ach.shardBonus05" }, + { + "id": "mdlevel01a", + "game": "meltdown", + "name": "Yarrr!", + "rewardType": "color1", + "rewardID": 5, + "description": "Complete \"The Seven Seas\" in Practice mode", + "achievedDescription": "Completed \"The Seven Seas\" in Practice mode", + "trueID": "geometry.ach.mdlevel01a" + }, + { + "id": "mdlevel01b", + "game": "meltdown", + "name": "The Seven Seas!", + "rewardType": "cube", + "rewardID": 65, + "description": "Complete \"The Seven Seas\" in Normal mode", + "achievedDescription": "Completed \"The Seven Seas\" in Normal mode", + "trueID": "geometry.ach.mdlevel01b" + }, + { + "id": "mdlevel02a", + "game": "meltdown", + "name": "Lost Viking", + "rewardType": "color1", + "rewardID": 8, + "description": "Complete \"Viking Arena\" in Practice mode", + "achievedDescription": "Completed \"Viking Arena\" in Practice mode", + "trueID": "geometry.ach.mdlevel02a" + }, + { + "id": "mdlevel02b", + "game": "meltdown", + "name": "Viking Arena!", + "rewardType": "cube", + "rewardID": 67, + "description": "Complete \"Viking Arena\" in Normal mode", + "achievedDescription": "Completed \"Viking Arena\" in Normal mode", + "trueID": "geometry.ach.mdlevel02b" + }, + { + "id": "mdlevel03a", + "game": "meltdown", + "name": "Grounded Robots", + "rewardType": "color1", + "rewardID": 7, + "description": "Complete \"Airborne Robots\" in Practice mode", + "achievedDescription": "Completed \"Airborne Robots\" in Practice mode", + "trueID": "geometry.ach.mdlevel03a" + }, + { + "id": "mdlevel03b", + "game": "meltdown", + "name": "Airborne Robots!", + "rewardType": "cube", + "rewardID": 69, + "description": "Complete \"Airborne Robots\" in Normal mode", + "achievedDescription": "Completed \"Airborne Robots\" in Normal mode", + "trueID": "geometry.ach.mdlevel03b" + }, + { + "id": "mdcoin01", + "game": "meltdown", + "name": "Ultimate Seven Seas", + "rewardType": "cube", + "rewardID": 66, + "description": "Collect all 3 coins on The Seven Seas", + "achievedDescription": "Collected all 3 coins on The Seven Seas", + "trueID": "geometry.ach.mdcoin01" + }, + { + "id": "mdcoin02", + "game": "meltdown", + "name": "Ultimate Viking Arena", + "rewardType": "cube", + "rewardID": 68, + "description": "Collect all 3 coins on Viking Arena", + "achievedDescription": "Collected all 3 coins on Viking Arena", + "trueID": "geometry.ach.mdcoin02" + }, + { + "id": "mdcoin03", + "game": "meltdown", + "name": "Ultimate Airborne Robots", + "rewardType": "cube", + "rewardID": 70, + "description": "Collect all 3 coins on Airborne Robots", + "achievedDescription": "Collected all 3 coins on Airborne Robots", + "trueID": "geometry.ach.mdcoin03" + }, + { + "id": "mdrate", + "game": "meltdown", + "name": "Meltdown Supporter!", + "rewardType": "cube", + "rewardID": 71, + "description": "Rate \"Geometry Dash Meltdown\" and let us know what you think", + "achievedDescription": "Rated \"Geometry Dash Meltdown\", thanks!", + "trueID": "geometry.ach.mdrate" + }, { "id": "world.level001b", "game": "world", @@ -2760,103 +2860,63 @@ "trueID": "geometry.ach.world.level010b" }, { - "id": "mdlevel01a", - "game": "meltdown", - "name": "Yarrr!", - "rewardType": "color1", - "rewardID": 5, - "description": "Complete \"The Seven Seas\" in Practice mode", - "achievedDescription": "Completed \"The Seven Seas\" in Practice mode", - "trueID": "geometry.ach.mdlevel01a" - }, - { - "id": "mdlevel01b", - "game": "meltdown", - "name": "The Seven Seas!", + "id": "subzero.level001", + "game": "subzero", + "name": "Press Start!", "rewardType": "cube", - "rewardID": 65, - "description": "Complete \"The Seven Seas\" in Normal mode", - "achievedDescription": "Completed \"The Seven Seas\" in Normal mode", - "trueID": "geometry.ach.mdlevel01b" + "rewardID": 143, + "description": "Complete \"Press Start\" in Normal mode", + "achievedDescription": "Completed \"Press Start\" in Normal mode", + "trueID": "geometry.ach.subzero.level001" }, { - "id": "mdlevel02a", - "game": "meltdown", - "name": "Lost Viking", - "rewardType": "color1", - "rewardID": 8, - "description": "Complete \"Viking Arena\" in Practice mode", - "achievedDescription": "Completed \"Viking Arena\" in Practice mode", - "trueID": "geometry.ach.mdlevel02a" - }, - { - "id": "mdlevel02b", - "game": "meltdown", - "name": "Viking Arena!", + "id": "subzero.level002", + "game": "subzero", + "name": "Nock Em!", "rewardType": "cube", - "rewardID": 67, - "description": "Complete \"Viking Arena\" in Normal mode", - "achievedDescription": "Completed \"Viking Arena\" in Normal mode", - "trueID": "geometry.ach.mdlevel02b" + "rewardID": 144, + "description": "Complete \"Nock Em\" in Normal mode", + "achievedDescription": "Completed \"Nock Em\" in Normal mode", + "trueID": "geometry.ach.subzero.level002" }, { - "id": "mdlevel03a", - "game": "meltdown", - "name": "Grounded Robots", - "rewardType": "color1", - "rewardID": 7, - "description": "Complete \"Airborne Robots\" in Practice mode", - "achievedDescription": "Completed \"Airborne Robots\" in Practice mode", - "trueID": "geometry.ach.mdlevel03a" - }, - { - "id": "mdlevel03b", - "game": "meltdown", - "name": "Airborne Robots!", + "id": "subzero.level003", + "game": "subzero", + "name": "Power Trip!", "rewardType": "cube", - "rewardID": 69, - "description": "Complete \"Airborne Robots\" in Normal mode", - "achievedDescription": "Completed \"Airborne Robots\" in Normal mode", - "trueID": "geometry.ach.mdlevel03b" + "rewardID": 145, + "description": "Complete \"Power Trip\" in Normal mode", + "achievedDescription": "Completed \"Power Trip\" in Normal mode", + "trueID": "geometry.ach.subzero.level003" }, { - "id": "mdcoin01", - "game": "meltdown", - "name": "Ultimate Seven Seas", + "id": "szcoin001", + "game": "subzero", + "name": "Ultimate Press Start", "rewardType": "cube", - "rewardID": 66, - "description": "Collect all 3 coins on The Seven Seas", - "achievedDescription": "Collected all 3 coins on The Seven Seas", - "trueID": "geometry.ach.mdcoin01" + "rewardID": 146, + "description": "Collect all 3 coins on Press Start", + "achievedDescription": "Collected all 3 coins on Press Start", + "trueID": "geometry.ach.subzero.coins001" }, { - "id": "mdcoin02", - "game": "meltdown", - "name": "Ultimate Viking Arena", + "id": "szcoin002", + "game": "subzero", + "name": "Ultimate Nock Em", "rewardType": "cube", - "rewardID": 68, - "description": "Collect all 3 coins on Viking Arena", - "achievedDescription": "Collected all 3 coins on Viking Arena", - "trueID": "geometry.ach.mdcoin02" + "rewardID": 147, + "description": "Collect all 3 coins on Nock Em", + "achievedDescription": "Collected all 3 coins on Nock Em", + "trueID": "geometry.ach.subzero.coins002" }, { - "id": "mdcoin03", - "game": "meltdown", - "name": "Ultimate Airborne Robots", + "id": "szcoin003", + "game": "subzero", + "name": "Ultimate Power Trip", "rewardType": "cube", - "rewardID": 70, - "description": "Collect all 3 coins on Airborne Robots", - "achievedDescription": "Collected all 3 coins on Airborne Robots", - "trueID": "geometry.ach.mdcoin03" - }, - { - "id": "mdrate", - "game": "meltdown", - "name": "Meltdown Supporter!", - "rewardType": "cube", - "rewardID": 71, - "description": "Rate \"Geometry Dash Meltdown\" and let us know what you think", - "achievedDescription": "Rated \"Geometry Dash Meltdown\", thanks!", - "trueID": "geometry.ach.mdrate" + "rewardID": 148, + "description": "Collect all 3 coins on Power Trip", + "achievedDescription": "Collected all 3 coins on Power Trip", + "trueID": "geometry.ach.subzero.coins003" } ] \ No newline at end of file diff --git a/misc/parseAchievementPlist.js b/misc/parseAchievementPlist.js new file mode 100644 index 0000000..d671d0a --- /dev/null +++ b/misc/parseAchievementPlist.js @@ -0,0 +1,47 @@ +let path = "../extra/" + +let files = ["AchievementsDesc", "AchievementsDescMD", null, "AchievementsDescSZ"] +let gameNames = ["gd", "meltdown", "world", "subzero"] +let achString = "geometry.ach." +let rewardTypes = { color: "color1", icon: "cube", bird: "ufo", dart: "wave", special: "trail", death: "deathEffect" } +let games = { "md": "meltdown", "world.": "world", "subzero.": "subzero" } + +const plist = require('plist'); +const fs = require('fs'); + +let achArray = [] + +files.forEach((file, fileNum) => { + if (!file) return + let data = plist.parse(fs.readFileSync(path + file + '.plist', 'utf8')); + + console.log(`Converting ${file}.plist...`) + + for (let key in data) { + if (!achArray.find(x => x.trueID == key)) { + let fileData = data[key]; + let reward = fileData.icon ? fileData.icon.split("_") : [] + let achObj = { + id: key.slice(achString.length), + game: gameNames[fileNum], + name: fileData.title, + rewardType: rewardTypes[reward[0]] || reward[0] || "misc", + rewardID: +reward[1] || -1, + description: fileData.unachievedDescription, + achievedDescription: fileData.achievedDescription, + trueID: key + } + Object.keys(games).forEach(x => { if (key.startsWith(achString + x)) achObj.game = games[x] }) + if (key == achString + "rate") achObj.id = "rating" + if (achObj.id.startsWith("subzero.coins")) achObj.id = achObj.id.replace("subzero.coins", "szcoin") + if (achObj.id.includes("demoncoin")) achObj.id = achObj.id.replace("demoncoin", "ultimatedemon") + achArray.push(achObj) + }} +}) + +achArray = achArray.filter(x => !x.id.startsWith("lite")) +let final = achArray.filter(x => x.game == "gd") +gameNames.slice(1).forEach(g => final = final.concat(achArray.filter(x => x.game == g))) + +fs.writeFileSync('achievements.json', JSON.stringify(final, null, 2).replace(/\[\n.+?(-?\d+),\n.+?(-?\d+)\n.+]/g, "[$1, $2]")); // regex to make it easier to read +console.log("Successfully converted!") \ No newline at end of file diff --git a/misc/plistToJSON.js b/misc/plistToJSON.js deleted file mode 100644 index 2fb05b9..0000000 --- a/misc/plistToJSON.js +++ /dev/null @@ -1,71 +0,0 @@ -let path = "C:/Program Files (x86)/Steam/steamapps/common/Geometry Dash/Resources/" - -let files = ["AchievementsDesc", "AchievementsDescMD"] -let values = ["achievedDescription", "title", "icon", "unachievedDescription"] -let innerKey = null -let jsonValues = false -let exportName = "achievements" - -// let files = ["GJ_GameSheet02-uhd"] -// let values = ["spriteSize", "spriteOffset"] -// let innerKey = "frames" -// let jsonValues = true - -const plist = require('plist'); -const fs = require('fs'); - -let final = {} - -files.forEach(file => { - let data = plist.parse(fs.readFileSync(path + file + '.plist', 'utf8')); - if (innerKey) data = data[innerKey] - - console.log(`Converting ${file}.plist...`) - - for (let key in data) { - let fileData = data[key]; - for (let innerKey in fileData) { - if (fileData[innerKey] && values.includes(innerKey)) { - if (!final[key]) final[key] = {} - if (jsonValues) final[key][innerKey] = JSON.parse(fileData[innerKey].replace(/{/g, '[').replace(/}/g, ']')); // for icon sheet - else final[key][innerKey] = fileData[innerKey] - } - } - } -}) - -console.log("Finishing up...") - -if (exportName == "achievements") { // hardcoded shit starts here! - - let achString = "geometry.ach." - let rewardTypes = {color: "color1", icon: "cube", bird: "ufo", dart: "wave", special: "trail", death: "deathEffect"} - let games = {"md": "meltdown", "world.": "world"} - - let achArray = [] - for (let k in final) { - let reward = final[k].icon ? final[k].icon.split("_") : [] - let achObj = { - id: k.slice(achString.length), - game: "gd", - name: final[k].title, - rewardType: rewardTypes[reward[0]] || reward[0] || "misc", - rewardID: +reward[1] || -1, - description: final[k].unachievedDescription, - achievedDescription: final[k].achievedDescription, - trueID: k - } - Object.keys(games).forEach(x => { - if (k.startsWith(achString + x)) achObj.game = games[x] - if (k == achString + "rate") achObj.id = "rating" - if (achObj.id.includes("demoncoin")) achObj.id = achObj.id.replace("demoncoin", "ultimatedemon") - }) - achArray.push(achObj) - } - data = achArray.filter(x => !x.id.startsWith("lite")) - data = data.filter(x => x.game == "gd").concat(data.filter(x => x.game != "gd")) -} - -fs.writeFileSync(exportName + '.json', JSON.stringify(data, null, 2).replace(/\[\n.+?(-?\d+),\n.+?(-?\d+)\n.+]/g, "[$1, $2]")); // regex to make it easier to read - -console.log("Successfully converted!") \ No newline at end of file