@abextm/cache2
Version:
Utilities for reading OSRS "caches"
95 lines (94 loc) • 2.72 kB
JavaScript
import { PerFileLoadable } from "../Loadable.js";
import { Typed } from "../reflect.js";
export class Hitsplat extends PerFileLoadable {
id;
constructor(id) {
super();
this.id = id;
}
static index = 2;
static archive = 32;
font = -1;
fontColor = 16777215;
leftSprite = -1;
leftSprite2 = -1;
backgroundSprite = -1;
rightSprite = -1;
animX = 0;
animY = 0;
animStart = -1;
animDuration = 0;
animMode = 0;
formatString = null;
textY = 0;
varbit = -1;
varp = -1;
multiChildren = [];
oobChild = -1;
static decode(r, id) {
const v = new Hitsplat(id);
for (let opcode; (opcode = r.u8()) != 0;) {
switch (opcode) {
case 1:
v.font = r.s2o4n();
break;
case 2:
v.fontColor = r.u24();
break;
case 3:
v.leftSprite = r.s2o4n();
break;
case 4:
v.leftSprite2 = r.s2o4n();
break;
case 5:
v.backgroundSprite = r.s2o4n();
break;
case 6:
v.rightSprite = r.s2o4n();
break;
case 7:
v.animX = r.i16();
break;
case 8:
v.formatString = r.vString();
break;
case 9:
v.animDuration = r.u16();
break;
case 10:
v.animY = r.i16();
break;
case 11:
v.animStart = 0;
break;
case 12:
v.animMode = r.u8();
break;
case 13:
v.textY = r.i16();
break;
case 14:
v.animStart = r.u16();
break;
case 17:
case 18: {
v.varbit = r.u16n();
v.varp = r.u16n();
if (opcode == 18) {
v.oobChild = r.u16n();
}
let len = r.u8p1();
v.multiChildren = new Array(len);
for (let i = 0; i < len; i++) {
v.multiChildren[i] = r.u16n();
}
break;
}
default:
throw new Error(`unknown opcode ${opcode}`);
}
}
return v;
}
}