import AdmZip from "adm-zip"; import fs from "node:fs"; const SPECIALS = ["sp", "spm"]; const DATA = JSON.parse(fs.readFileSync("./data.json", "utf-8")); const chapters = fs.readdirSync("../_sprites/original"); const UNIQUES = fs .readFileSync("../_sprites/unique.txt", "utf-8") .split("УНИКАЛЬНЫЕ ДЛЯ РУСИФИКАТОРА:") .at(-1) ?.split("\n"); UNIQUES?.shift(); if (UNIQUES?.at(-1) == "") UNIQUES?.pop(); function add_singles(chapter, sprite_name) { const img_name = `${sprite_name}.png`; if (!fs.existsSync(`../_sprites/translation/${img_name}`)) return; fs.copyFileSync( `../_sprites/translation/${img_name}`, `../_sprites/sorted/${chapter}/${img_name}` ); for (const special of SPECIALS) { if (fs.existsSync(`../_sprites/translation/${special}_${img_name}`)) { fs.copyFileSync( `../_sprites/translation/${special}_${img_name}`, `../_sprites/sorted/${chapter}/${special}_${img_name}` ); } } } function add_animations(chapter, sprite_name) { if ( fs.existsSync(`../_sprites/translation/${sprite_name}`) && !fs.existsSync(`../_sprites/sorted/${chapter}/${sprite_name}`) ) { fs.cpSync( `../_sprites/original/${chapter}/${sprite_name}`, `../_sprites/sorted/${chapter}/${sprite_name}`, { recursive: true, force: true } ); } else return; for (const special of SPECIALS) { if (fs.existsSync(`../_sprites/translation/${special}_${sprite_name}`)) { fs.cpSync( `../_sprites/original/${chapter}/${sprite_name}`, `../_sprites/sorted/${chapter}/${special}_${sprite_name}`, { recursive: true, force: true } ); for (const file of fs.readdirSync( `../_sprites/sorted/${chapter}/${special}_${sprite_name}` )) { const oldPath = `../_sprites/sorted/${chapter}/${special}_${sprite_name}/${file}`; const newPath = `../_sprites/sorted/${chapter}/${special}_${sprite_name}/${special}_${file}`; fs.renameSync(oldPath, newPath); } } } const sprite_frames = DATA[chapter][sprite_name]; for (let frame of sprite_frames) { const img_name = `${sprite_name}_${frame}.png`; if (!fs.existsSync(`../_sprites/translation/${sprite_name}/${img_name}`)) continue; for (const special of SPECIALS) { if ( fs.existsSync( `../_sprites/translation/${special}_${sprite_name}/${special}_${img_name}` ) ) { fs.copyFileSync( `../_sprites/translation/${special}_${sprite_name}/${special}_${img_name}`, `../_sprites/sorted/${chapter}/${special}_${sprite_name}/${special}_${img_name}` ); } } fs.copyFileSync( `../_sprites/translation/${sprite_name}/${img_name}`, `../_sprites/sorted/${chapter}/${sprite_name}/${img_name}` ); } } for (const chapter of chapters) { if (!chapter.endsWith(".DS_Store")) { if (!fs.existsSync(`../_sprites/sorted`)) fs.mkdirSync(`../_sprites/sorted`); if (!fs.existsSync(`../_sprites/sorted/${chapter}`)) fs.mkdirSync(`../_sprites/sorted/${chapter}`); for (const sprite of Object.keys(DATA[chapter])) { const frames: any[] = DATA[chapter][sprite]; if (frames.length == 1) add_singles(chapter, sprite); else add_animations(chapter, sprite); } } } if (UNIQUES != undefined) { for (const unique of UNIQUES) { const uniqueChapter = unique.split("/")[0]; const uniqueName = unique.split("/")[1]; console.log(uniqueChapter, uniqueName); if (fs.existsSync(`../_sprites/translation/${uniqueName}.png`)) fs.copyFileSync( `../_sprites/translation/${uniqueName}.png`, `../_sprites/sorted/${uniqueChapter}/${uniqueName}.png` ); if (fs.existsSync(`../_sprites/translation/${uniqueName}`)) fs.cpSync( `../_sprites/translation/${uniqueName}`, `../_sprites/sorted/${uniqueChapter}/${uniqueName}`, { recursive: true, force: true } ); } } // :D