SmashMUGENWeb/Public/ecma/Models/SFFv2Model.ecma.js
2026-07-20 07:23:37 +02:00

153 lines
4.5 KiB
JavaScript

"use strict";
import {Common} from "http://localhost:18000/Public/ecma/Utils/Common.ecma.js";
import {Tools} from "../Utils/Tools.ecma.js";
export const SFFv2PaletteModel = (function(){
const SFFv2PaletteModel = function(data, sff){
const self = this;
this.group = null;
this.item = null;
this.columns = null;
this.link = null;
this.data_offset = null;
this.data_length = null;
this.palette = null;
const constructor = () => {
Object.entries(Tools.load_binary(data, [
["group", "integer", 2],
["item", "integer", 2],
["columns", "integer", 2],
["link", "integer", 2],
["data_offset", "integer", 4],
["data_length", "integer", 4]
])).forEach(([key, value]) => {
self[key] = value;
});
if(self.data_length > 0)
self.palette = sff.slice(self.data_offset, self.data_offset + self.data_length);
};
constructor();
};
return SFFv2PaletteModel;
})();
export const SFFv2SpriteModel = (function(){
const SFFv2SpriteModel = function(data, sff){
const self = this;
this.group = null;
this.item = null;
this.width = null;
this.height = null;
this.x = null;
this.y = null;
this.link = null;
this.format = null;
this.depth = null;
this.data_offset = null;
this.data_length = null;
this.palette_index = null;
this.flags = null;
this.data = null;
const constructor = () => {
Object.entries(Tools.load_binary(data, [
["group", "integer", 2],
["item", "integer", 2],
["width", "integer", 2],
["height", "integer", 2],
["x", "integer", 2],
["y", "integer", 2],
["link", "integer", 2],
["format", "integer", 1],
["depth", "integer", 1],
["data_offset", "integer", 4],
["data_length", "integer", 4],
["palette_index", "integer", 2],
["flags", "integer", 2]
])).forEach(([key, value]) => {
self[key] = value;
});
if(self.data_length > 0)
self.data = sff.slice(self.data_offset, self.data_offset + self.data_length);
};
constructor();
};
return SFFv2SpriteModel;
})();
export const SFFv2Model = (function(){
const SFFv2Model = function(sff, callback = null){
const self = this;
this.signature = "";
this.version = [];
this.sprites = [];
this.palettes = [];
this.sprite_offset = null;
this.sprite_count = null;
this.palette_offset = null;
this.palette_count = null;
const constructor = () => {
Object.entries(Tools.load_binary(sff.slice(0, 512), [
["signature", "string", 12],
["version", "bytes", 4],
["reserved1", "bytes", 4],
["reserved2", "bytes", 4],
["compat_ver", "bytes", 4],
["reserved3", "bytes", 4],
["sprite_offset", "integer", 4],
["sprite_count", "integer", 4],
["palette_offset", "integer", 4],
["palette_count", "integer", 4],
["literal_data_offset", "integer", 4],
["literal_data_length", "integer", 4],
["translated_data_offset", "integer", 4],
["translated_data_length", "integer", 4],
["filler", "bytes", 448]
])).forEach(([key, value]) => {
if(self[key] !== undefined)
self[key] = value;
});
while(self.sprite_offset < self.sprite_count){
self.sprites.push(new SFFv2SpriteModel(sff.slice(self.sprite_offset, self.sprite_offset + 16), sff));
self.sprite_offset += 16;
};
while(self.palette_offset < self.palette_count){
self.palettes.push(new SFFv2PaletteModel(sff.slice(self.palette_offset, self.palette_offset + 28), sff));
self.palette_offset += 28;
};
Common.call(callback, self);
};
constructor();
};
return SFFv2Model;
})();