GDBrowser/misc/parseAchievementPlist.js

47 lines
1.9 KiB
JavaScript
Raw Normal View History

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!")