mirror of
https://github.com/Terncode/pixel.horse.git
synced 2026-09-24 13:55:04 +02:00
196 lines
5.6 KiB
TypeScript
196 lines
5.6 KiB
TypeScript
// generated file
|
|
/* tslint:disable */
|
|
|
|
import {
|
|
Sprite, SpriteBorder, PonyNose, PonyEye, ColorExtra, ColorExtraSets, Shadow, ColorShadow, TileSprites, SpriteSheet
|
|
} from '../common/interfaces';
|
|
import { parseSpriteColor } from '../common/utils';
|
|
import { bitReaderCustom } from '../common/bitUtils';
|
|
|
|
// [frame][type][pattern]
|
|
export type StaticSprites = (ColorExtra[] | undefined)[];
|
|
export type AnimatedSprites = (StaticSprites | undefined)[];
|
|
export type StaticSpritesExtra = (ColorExtra[] | undefined)[];
|
|
export type AnimatedSpritesExtra = (StaticSprites | undefined)[];
|
|
export type PonyEyes = ((PonyEye | undefined)[] | undefined)[];
|
|
|
|
const sprites = createSprites('/*SPRITES*/');
|
|
|
|
const sprites2 = createSprites('/*SPRITES_PALETTE*/');
|
|
|
|
/*FONTS*/
|
|
|
|
const palettes: Uint32Array[] = createPalettes('/*COLORS*/', [
|
|
/*PALETTES*/
|
|
]);
|
|
|
|
/*NAMED_SPRITES*/
|
|
|
|
/*NAMED_PALETTES*/
|
|
|
|
export const spriteSheets: SpriteSheet[] = [
|
|
{
|
|
src: '/*SPRITE_SHEET*/',
|
|
data: undefined, texture: undefined, sprites: sprites, isSingleChannel: false, palette: false
|
|
},
|
|
{
|
|
src: '/*SPRITE_SHEET_PALETTE*/', srcA: '/*SPRITE_SHEET_PALETTE_ALPHA*/',
|
|
data: undefined, texture: undefined, sprites: sprites2, isSingleChannel: false, palette: true
|
|
},
|
|
];
|
|
|
|
export const normalSpriteSheet = spriteSheets[0];
|
|
export const paletteSpriteSheet = spriteSheets[1];
|
|
|
|
export function createSprites(data: string): Sprite[] {
|
|
const sprites: Sprite[] = [
|
|
{ x: 0, y: 0, w: 0, h: 0, ox: 0, oy: 0, type: 0 },
|
|
];
|
|
|
|
let offset = 0;
|
|
const read = bitReaderCustom(() => {
|
|
const value = parseInt(data.substr(offset, 2), 16);
|
|
offset += 2;
|
|
return value;
|
|
});
|
|
|
|
while (offset < data.length) {
|
|
sprites.push({
|
|
x: read(12),
|
|
y: read(12),
|
|
w: read(9),
|
|
h: read(9),
|
|
ox: read(8),
|
|
oy: read(8),
|
|
type: read(6),
|
|
});
|
|
}
|
|
|
|
return sprites;
|
|
}
|
|
|
|
export function createFont(sprites: Sprite[], groups: [number, number[]][]) {
|
|
const chars: { code: number; sprite: Sprite; }[] = [];
|
|
|
|
for (const [start, codes] of groups) {
|
|
for (let i = 0; i < codes.length; i++) {
|
|
if (codes[i]) {
|
|
chars.push({ code: start + i, sprite: sprites[codes[i]] });
|
|
}
|
|
}
|
|
}
|
|
|
|
return chars;
|
|
}
|
|
|
|
export function createButton(
|
|
border: number, topLeft: number, top: number, topRight: number, left: number, bg: number, right: number,
|
|
bottomLeft: number, bottom: number, bottomRight: number
|
|
): SpriteBorder {
|
|
return {
|
|
border,
|
|
topLeft: sprites[topLeft],
|
|
top: sprites[top],
|
|
topRight: sprites[topRight],
|
|
left: sprites[left],
|
|
bg: sprites[bg],
|
|
right: sprites[right],
|
|
bottomLeft: sprites[bottomLeft],
|
|
bottom: sprites[bottom],
|
|
bottomRight: sprites[bottomRight]
|
|
};
|
|
}
|
|
|
|
export function mapSprites(frames: number[]) {
|
|
return frames.map(i => sprites[i]);
|
|
}
|
|
|
|
export function mapSprites2(frames: number[]) {
|
|
return frames.map(i => sprites2[i]);
|
|
}
|
|
|
|
export function createPalettes(colorsString: string, palettes: number[][]): Uint32Array[] {
|
|
const colors = colorsString.split(/ /g).map(parseSpriteColor);
|
|
|
|
return palettes.map(palette => {
|
|
const result = new Uint32Array(palette.length);
|
|
|
|
for (let i = 0; i < palette.length; i++) {
|
|
result[i] = colors[palette[i]] >>> 0;
|
|
}
|
|
|
|
return result;
|
|
});
|
|
}
|
|
|
|
export function createColorPal(color: number, colors: number): ColorExtra {
|
|
return { color: sprites2[color], colors };
|
|
}
|
|
|
|
export function colorPal(colors: number) {
|
|
return (color: number) => createColorPal(color, colors);
|
|
}
|
|
|
|
const colorPal3 = colorPal(3);
|
|
const colorPal5 = colorPal(5);
|
|
const colorPal7 = colorPal(7);
|
|
const colorPal9 = colorPal(9);
|
|
const colorPal11 = colorPal(11);
|
|
const colorPal13 = colorPal(13);
|
|
const colorPal17 = colorPal(17);
|
|
|
|
export function getPalette(index: number) {
|
|
return palettes[index];
|
|
}
|
|
|
|
const emptyPalette = new Uint32Array(0);
|
|
|
|
export function emptyColorPalette(): ColorExtra {
|
|
return { color: sprites2[0], palettes: [emptyPalette] };
|
|
}
|
|
|
|
export function createSpritesPalette(sprites: number[], paletteIndexes: number[]): TileSprites {
|
|
return { sprites: sprites.map(i => sprites2[i]), palettes: paletteIndexes.map(getPalette) };
|
|
}
|
|
|
|
export function createColorPalette(color: number, paletteIndexes: number[]): ColorExtra {
|
|
return { color: sprites2[color], palettes: paletteIndexes.map(getPalette) };
|
|
}
|
|
|
|
export function createColorExtraPal(color: number, colors: number, extra: number, paletteIndexes: number[]): ColorExtra {
|
|
return { color: sprites2[color], colors, extra: sprites2[extra], palettes: paletteIndexes.map(getPalette) };
|
|
}
|
|
|
|
export function createShadow(shadow: number): Shadow {
|
|
return { shadow: sprites2[shadow] };
|
|
}
|
|
|
|
export function createColorShadowPalette(color: number, shadow: number, paletteIndexes: number[]): ColorShadow {
|
|
return { color: sprites2[color], shadow: sprites2[shadow], palettes: paletteIndexes.map(getPalette) };
|
|
}
|
|
|
|
export function createNose(color: number, colors: number, mouth: number, fangs: number) {
|
|
return { color: sprites2[color], colors, mouth: sprites2[mouth], fangs: sprites2[fangs] };
|
|
}
|
|
|
|
export function createEye(base: number, irises: number[], shadow?: number, shine?: number): PonyEye {
|
|
return { base: sprites2[base], irises: mapSprites2(irises), shadow: sprites2[shadow || 0], shine: sprites2[shine || 0] };
|
|
}
|
|
|
|
export function createAnimation(frames: number[]) {
|
|
return { frames: mapSprites(frames) };
|
|
}
|
|
|
|
export function createAnimationPalette(frames: number[], palette: number) {
|
|
return { frames: mapSprites2(frames), palette: getPalette(palette) };
|
|
}
|
|
|
|
export function createAnimationShadow(frames: number[], shadow: number, palette: number) {
|
|
return { frames: mapSprites2(frames), shadow: sprites2[shadow], palette: getPalette(palette) };
|
|
}
|
|
|
|
export {
|
|
Sprite, SpriteBorder, PonyNose, PonyEye, ColorExtra, ColorExtraSets,
|
|
colorPal3, colorPal5, colorPal7, colorPal9, colorPal11, colorPal13, colorPal17
|
|
};
|