Files
deltasprite/scripts/sort.ts
2025-08-15 11:56:49 +03:00

101 lines
3.1 KiB
TypeScript

import AdmZip from "adm-zip";
import fs from "node:fs";
const DATA = JSON.parse(fs.readFileSync("./data.json", "utf-8"));
const chapters = fs.readdirSync("../_sprites/original");
const SPECIALS = ["sp", "spm"];
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);
}
}
}
// :D