Source

loaders/SpotAnimLoader.js

/**
* Spot Anims are GFX effects such as teleporting spells
* @class SpotAnimDefinition
* @category Definitions
* @hideconstructor
*/
export class SpotAnimDefinition {
	/** 
	* The ID of this Spot Anim
	* @type {number} 
	*/
	id;

	/** @type {number} */
	rotation = 0;

	/**
	 * Textures to find to be replaced for this Spot Anim 
	 * @type {Array} 
	*/
	textureToFind = [];

	/**
	 * What the texture will be replaced with 
	 * @type {Array} 
	 */
	textureToReplace = [];
	
	/**
	 * Default animation
	 * @type {number} 
	 */
	animationId = -1;

	/**
	 * Color values to find to be replaced for this Spot Anim 
	 * @type {Array} 
	 */
	recolorToFind = [];

	/**
	 * What the color values will be replaced with 
	 * @type {Array} 
	 */
	recolorToReplace = [];
	
	/** @type {number} */
	resizeX = 128;
	
	/** @type {number} */
	resizeY = 128;

	/**
	 * Model to use for this Spot Anim
	 * @type {number} 
	 */
	modelId;	

	/**
	 * Number from 0 to 255. Modifies the Spot Anim model's ambient lighting 
	 * @type {Byte} 
	 */
	ambient = 0;

	/**
	 * Number from 0 to 255. Modifies the Spot Anim model's contrast
	 * @type {Byte} 
	 */
	contrast = 0;
}
export default class SpotAnimLoader {

    load(bytes, id) {
        let def = new SpotAnimDefinition();
        def.id = id;
        let dataview = new DataView(bytes.buffer);
        do {
            var opcode = dataview.readUint8();
            this.handleOpcode(def, opcode, dataview);
        } while (opcode != 0);

        return def;
    }

    handleOpcode(def, opcode, dataview) {
        if (opcode == 1)
		{
			def.modelId = dataview.readUint16();
		}
		else if (opcode == 2)
		{
			def.animationId = dataview.readUint16();
		}
		else if (opcode == 4)
		{
			def.resizeX = dataview.readUint16();
		}
		else if (opcode == 5)
		{
			def.resizeY = dataview.readUint16();
		}
		else if (opcode == 6)
		{
			def.rotation = dataview.readUint16();
		}
		else if (opcode == 7)
		{
			def.ambient = dataview.readUint8();
		}
		else if (opcode == 8)
		{
			def.contrast = dataview.readUint8();
		}
		else if (opcode == 40)
		{
			let var3 = dataview.readUint8();
			def.recolorToFind = new Array(var3);
			def.recolorToReplace = new Array(var3);

			for (let var4 = 0; var4 < var3; ++var4)
			{
				def.recolorToFind[var4] = dataview.readUint16();
				def.recolorToReplace[var4] = dataview.readUint16();
			}
		}
		else if (opcode == 41)
		{
			let var3 = dataview.readUnsignedByte();
			def.textureToFind = new Array(var3);
			def.textureToReplace = new Array(var3);

			for (let var4 = 0; var4 < var3; ++var4)
			{
				def.textureToFind[var4] = dataview.readUint16();
				def.textureToReplace[var4] = dataview.readUint16();
			}
		}
    }
}