Files
blitzkit/packages/scripts/src/buildAssets/skillIcons.ts
T

50 lines
1.4 KiB
TypeScript
Raw Normal View History

2024-09-07 21:45:00 -05:00
import { TankClass } from '@blitzkit/core';
2024-03-31 18:17:48 -05:00
import sharp from 'sharp';
2024-09-07 21:45:00 -05:00
import { readDVPLFile } from '../core/blitz/readDVPLFile';
import { readXMLDVPL } from '../core/blitz/readXMLDVPL';
import { commitAssets } from '../core/github/commitAssets';
import { FileChange } from '../core/github/commitMultipleFiles';
2024-03-31 18:17:48 -05:00
import { DATA } from './constants';
interface SkillIcon {
name: string;
state: number;
}
2024-03-31 18:24:19 -05:00
export interface Avatar {
2024-03-31 18:17:48 -05:00
roles: unknown;
skillsByClasses: Record<TankClass, string>;
skills: {
[name: string]: {
2024-03-31 18:24:19 -05:00
userString: string;
effectDescription: string;
tipDescription: string;
2024-03-31 18:17:48 -05:00
icon: SkillIcon | SkillIcon[];
type: 'continuous' | 'trigger';
};
};
}
2024-08-27 14:40:43 -05:00
export async function skillIcons() {
2024-03-31 18:24:19 -05:00
console.log('Building skill icons...');
2024-03-31 18:17:48 -05:00
const avatar = await readXMLDVPL<{ root: Avatar }>(
2025-01-14 19:22:41 -06:00
`${DATA}/XML/item_defs/tankmen/avatar.xml`,
2024-03-31 18:17:48 -05:00
);
const changes = await Promise.all(
Object.values(avatar.root.skills).map(async (skill) => {
const icon = Array.isArray(skill.icon) ? skill.icon[0] : skill.icon;
const name = icon.name.split('/').at(-1)!.replace(/_\d$/, '');
2025-01-14 19:22:41 -06:00
const path = `${DATA}${icon.name.replace('~res:', '')}.packed.webp`;
2024-03-31 18:17:48 -05:00
const image = sharp(await readDVPLFile(path)).trim();
2024-10-21 18:32:52 -05:00
const content = await image.toBuffer();
2024-03-31 18:17:48 -05:00
return {
content,
path: `icons/skills/${name}.webp`,
} satisfies FileChange;
}),
);
2024-08-27 14:40:43 -05:00
commitAssets('skill icons', changes);
2024-03-31 18:17:48 -05:00
}