153 lines
4.5 KiB
JavaScript
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;
|
|
})(); |