diff --git a/scripts/shared.ts b/scripts/shared.ts new file mode 100644 index 0000000..78677c1 --- /dev/null +++ b/scripts/shared.ts @@ -0,0 +1,28 @@ +import fs from "node:fs"; + +const PATHS = { + ORIGINAL: "../_sprites/original", + TRANSLATION: "../_sprites/translation", + UNREADY: "../_sprites/unready", + SORTED: "../_sprites/sorted", +}; + +const DATA = JSON.parse(fs.readFileSync("./data.json", "utf-8")); +const CHAPTERS = Object.keys(DATA); + +const UNIQUES = fs + .readFileSync("../_sprites/unique.txt", "utf-8") + .split("UNIQUE FOR SORTING:") + .at(-1) + ?.split("UNIQUE FRAME COUNT:"); + +const UNIQUES_NAMES = UNIQUES != undefined ? UNIQUES[0].split("\n") : []; +UNIQUES_NAMES?.shift(); + +const UNIQUES_FRAMES = UNIQUES != undefined ? UNIQUES[1].split("\n") : []; +UNIQUES_FRAMES?.shift(); + +while (UNIQUES_NAMES?.at(-1) == "") UNIQUES_NAMES?.pop(); +while (UNIQUES_FRAMES?.at(-1) == "") UNIQUES_FRAMES?.pop(); + +export { PATHS, DATA, CHAPTERS, UNIQUES_NAMES, UNIQUES_FRAMES }; diff --git a/scripts/sort.ts b/scripts/sort.ts index 1f17f83..636acc2 100644 --- a/scripts/sort.ts +++ b/scripts/sort.ts @@ -1,76 +1,60 @@ import fs from "node:fs"; +import { PATHS, DATA, CHAPTERS, UNIQUES_NAMES, UNIQUES_FRAMES } from "./shared"; import { spawn } from "child_process"; 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("UNIQUE FOR SORTING:") - .at(-1) - ?.split("UNIQUE FRAME COUNT:"); - -const UNIQUES_NAMES = UNIQUES != undefined ? UNIQUES[0].split("\n") : []; -UNIQUES_NAMES?.shift(); - -const UNIQUES_FRAMES = UNIQUES != undefined ? UNIQUES[1].split("\n") : []; -UNIQUES_FRAMES?.shift(); - -while (UNIQUES_NAMES?.at(-1) == "") UNIQUES_NAMES?.pop(); -while (UNIQUES_FRAMES?.at(-1) == "") UNIQUES_FRAMES?.pop(); - -function add_singles(chapter, sprite_name) { +function add_singles(chapter: string, sprite_name: string) { const img_name = `${sprite_name}.png`; - if (!fs.existsSync(`../_sprites/translation/${img_name}`)) return; + if (!fs.existsSync(`${PATHS.TRANSLATION}/${img_name}`)) return; fs.copyFileSync( - `../_sprites/translation/${img_name}`, - `../_sprites/sorted/${chapter}/${img_name}` + `${PATHS.TRANSLATION}/${img_name}`, + `${PATHS.SORTED}/${chapter}/${img_name}` ); for (const special of SPECIALS) { - if (fs.existsSync(`../_sprites/translation/${special}_${img_name}`)) { + if (fs.existsSync(`${PATHS.TRANSLATION}/${special}_${img_name}`)) { fs.copyFileSync( - `../_sprites/translation/${special}_${img_name}`, - `../_sprites/sorted/${chapter}/${special}_${img_name}` + `${PATHS.TRANSLATION}/${special}_${img_name}`, + `${PATHS.SORTED}/${chapter}/${special}_${img_name}` ); } } } -function add_animations(chapter, sprite_name) { +function add_animations(chapter: string, sprite_name: string) { if ( - fs.existsSync(`../_sprites/translation/${sprite_name}`) && - !fs.existsSync(`../_sprites/sorted/${chapter}/${sprite_name}`) + fs.existsSync(`${PATHS.TRANSLATION}/${sprite_name}`) && + !fs.existsSync(`${PATHS.SORTED}/${chapter}/${sprite_name}`) ) { if (UNIQUES_FRAMES.includes(sprite_name)) fs.cpSync( - `../_sprites/translation/${sprite_name}`, - `../_sprites/sorted/${chapter}/${sprite_name}`, + `${PATHS.TRANSLATION}/${sprite_name}`, + `${PATHS.SORTED}/${chapter}/${sprite_name}`, { recursive: true, force: true } ); else fs.cpSync( `../_sprites/original/${chapter}/${sprite_name}`, - `../_sprites/sorted/${chapter}/${sprite_name}`, + `${PATHS.SORTED}/${chapter}/${sprite_name}`, { recursive: true, force: true } ); } else return; for (const special of SPECIALS) { - if (fs.existsSync(`../_sprites/translation/${special}_${sprite_name}`)) { + if (fs.existsSync(`${PATHS.TRANSLATION}/${special}_${sprite_name}`)) { fs.cpSync( `../_sprites/original/${chapter}/${sprite_name}`, - `../_sprites/sorted/${chapter}/${special}_${sprite_name}`, + `${PATHS.SORTED}/${chapter}/${special}_${sprite_name}`, { recursive: true, force: true } ); for (const file of fs.readdirSync( - `../_sprites/sorted/${chapter}/${special}_${sprite_name}` + `${PATHS.SORTED}/${chapter}/${special}_${sprite_name}` )) { - const oldPath = `../_sprites/sorted/${chapter}/${special}_${sprite_name}/${file}`; - const newPath = `../_sprites/sorted/${chapter}/${special}_${sprite_name}/${special}_${file}`; + const oldPath = `${PATHS.SORTED}/${chapter}/${special}_${sprite_name}/${file}`; + const newPath = `${PATHS.SORTED}/${chapter}/${special}_${sprite_name}/${special}_${file}`; fs.renameSync(oldPath, newPath); } @@ -82,35 +66,34 @@ function add_animations(chapter, sprite_name) { 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}`)) + if (!fs.existsSync(`${PATHS.TRANSLATION}/${sprite_name}/${img_name}`)) continue; for (const special of SPECIALS) { if ( fs.existsSync( - `../_sprites/translation/${special}_${sprite_name}/${special}_${img_name}` + `${PATHS.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}` + `${PATHS.TRANSLATION}/${special}_${sprite_name}/${special}_${img_name}`, + `${PATHS.SORTED}/${chapter}/${special}_${sprite_name}/${special}_${img_name}` ); } } fs.copyFileSync( - `../_sprites/translation/${sprite_name}/${img_name}`, - `../_sprites/sorted/${chapter}/${sprite_name}/${img_name}` + `${PATHS.TRANSLATION}/${sprite_name}/${img_name}`, + `${PATHS.SORTED}/${chapter}/${sprite_name}/${img_name}` ); } } -for (const chapter of chapters) { +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}`); + if (!fs.existsSync(`${PATHS.SORTED}`)) fs.mkdirSync(`${PATHS.SORTED}`); + if (!fs.existsSync(`${PATHS.SORTED}/${chapter}`)) + fs.mkdirSync(`${PATHS.SORTED}/${chapter}`); for (const sprite of Object.keys(DATA[chapter])) { const frames: any[] = DATA[chapter][sprite]; @@ -126,26 +109,26 @@ if (UNIQUES_NAMES != undefined) { const uniqueChapter = unique.split("/")[0]; const uniqueName = unique.split("/")[1]; - if (fs.existsSync(`../_sprites/translation/${uniqueName}.png`)) + if (fs.existsSync(`${PATHS.TRANSLATION}/${uniqueName}.png`)) fs.copyFileSync( - `../_sprites/translation/${uniqueName}.png`, - `../_sprites/sorted/${uniqueChapter}/${uniqueName}.png` + `${PATHS.TRANSLATION}/${uniqueName}.png`, + `${PATHS.SORTED}/${uniqueChapter}/${uniqueName}.png` ); - if (fs.existsSync(`../_sprites/translation/${uniqueName}`)) + if (fs.existsSync(`${PATHS.TRANSLATION}/${uniqueName}`)) fs.cpSync( - `../_sprites/translation/${uniqueName}`, - `../_sprites/sorted/${uniqueChapter}/${uniqueName}`, + `${PATHS.TRANSLATION}/${uniqueName}`, + `${PATHS.SORTED}/${uniqueChapter}/${uniqueName}`, { recursive: true, force: true } ); } } -for (const chapter of chapters) { +for (const chapter of CHAPTERS) { spawn("python3", [ "merge.py", - `../_sprites/sorted/${chapter}`, - `../_sprites/sorted-merged/${chapter}`, + `${PATHS.SORTED}/${chapter}`, + `${PATHS.SORTED}-merged/${chapter}`, ]); } diff --git a/scripts/unready.ts b/scripts/unready.ts index 97d6b36..ee6fbd6 100644 --- a/scripts/unready.ts +++ b/scripts/unready.ts @@ -1,41 +1,29 @@ import fs from "node:fs"; +import { PATHS, CHAPTERS, UNIQUES_FRAMES } from "./shared"; -const CHAPTERS = JSON.parse(fs.readFileSync("./data.json", "utf-8")); - -const UNIQUES = fs - .readFileSync("../_sprites/unique.txt", "utf-8") - .split("UNIQUE FOR SORTING:") - .at(-1) - ?.split("UNIQUE FRAME COUNT:"); -const UNIQUES_FRAMES = UNIQUES != undefined ? UNIQUES[1].split("\n") : []; -UNIQUES_FRAMES?.shift(); -while (UNIQUES_FRAMES?.at(-1) == "") UNIQUES_FRAMES?.pop(); - -if (!fs.existsSync("../_sprites/unready")) fs.mkdirSync("../_sprites/unready"); +if (!fs.existsSync(PATHS.UNREADY)) fs.mkdirSync(PATHS.UNREADY); for (const chapter of Object.keys(CHAPTERS)) { - const OriginalPath = `../_sprites/original/${chapter}`; - const UnreadyPath = `../_sprites/unready`; + const original_path = `${PATHS.ORIGINAL}/${chapter}`; + if (!fs.existsSync(PATHS.UNREADY)) fs.mkdirSync(PATHS.UNREADY); - if (!fs.existsSync(UnreadyPath)) fs.mkdirSync(UnreadyPath); - - fs.cpSync(OriginalPath, UnreadyPath, { recursive: true, force: true }); + fs.cpSync(original_path, PATHS.UNREADY, { recursive: true, force: true }); } -const TRANSLATED = fs.readdirSync("../_sprites/translation"); -const UNREADY = fs.readdirSync("../_sprites/unready"); +const TRANSLATED = fs.readdirSync(PATHS.TRANSLATION); +const UNREADY = fs.readdirSync(PATHS.UNREADY); for (const sprite of TRANSLATED) { if (sprite.endsWith(".png")) { - if (UNREADY.includes(sprite)) fs.rmSync(`../_sprites/unready/${sprite}`); + if (UNREADY.includes(sprite)) fs.rmSync(`${PATHS.UNREADY}/${sprite}`); } else { if ( - fs.existsSync(`../_sprites/unready/${sprite}`) && + fs.existsSync(`${PATHS.UNREADY}/${sprite}`) && (UNIQUES_FRAMES.includes(sprite) || - fs.readdirSync(`../_sprites/unready/${sprite}`).length == - fs.readdirSync(`../_sprites/translation/${sprite}`).length) + fs.readdirSync(`${PATHS.UNREADY}/${sprite}`).length == + fs.readdirSync(`${PATHS.TRANSLATION}/${sprite}`).length) ) - fs.rmSync(`../_sprites/unready/${sprite}`, { + fs.rmSync(`${PATHS.UNREADY}/${sprite}`, { recursive: true, force: true, }); diff --git a/scripts/write.ts b/scripts/write.ts index cd88214..2dc434c 100644 --- a/scripts/write.ts +++ b/scripts/write.ts @@ -1,41 +1,32 @@ import fs from "node:fs"; +import { PATHS } from "./shared"; -const PATHS = { - ORIGINAL: "../_sprites/original", - TRANSLATE: "../_sprites/translation", -}; +let DATA: { [key: string]: any } = {}; -let DATA = {}; +for (const chapter of fs.readdirSync(PATHS.ORIGINAL)) DATA[chapter] = {}; -// Сбор списка глав -for (const chapter of fs.readdirSync(PATHS.ORIGINAL)) { - if (chapter != ".DS_Store") DATA[chapter] = {}; -} +function add_singles(path: string) { + const chapter_sprites = fs.readdirSync(path, "utf-8"); + const temp: { [key: string]: any } = {}; -// Внос всех одно-кадровых спрайтов -function add_singles(path) { - const chapter_dir = fs.readdirSync(path, "utf-8"); - let temp = {}; - - for (const sprite of chapter_dir) + for (const sprite of chapter_sprites) if (sprite.includes(".png")) temp[sprite.slice(0, -4)] = [0]; return temp; } -// Внос всех много-кадровых спрайтов -function add_animations(path) { - const chapter_dir = fs.readdirSync(path, "utf-8"); - let temp = {}; +function add_animations(path: string) { + const chapter_sprites = fs.readdirSync(path, "utf-8"); + const temp: { [key: string]: any } = {}; - for (const sprite of chapter_dir) { - if (!(sprite.endsWith(".png") || sprite.endsWith(".DS_Store"))) { - let frames = new Array(); + for (const sprite of chapter_sprites) { + if (!sprite.endsWith(".png")) { + const frames = new Array(); - const animation_dir = fs.readdirSync(`${path}/${sprite}`, "utf-8"); - for (let frame of animation_dir) { - let frame_number = frame.split("_").at(-1) ?? "fuck"; - if (frame.endsWith(".png")) + const animated_sprite = fs.readdirSync(`${path}/${sprite}`, "utf-8"); + for (let frame of animated_sprite) { + let frame_number = frame.split("_").at(-1); + if (frame.endsWith(".png") && frame_number !== undefined) frames.push(Number(frame_number.slice(0, -4))); }