UNPKG

@abextm/cache2

Version:

Utilities for reading OSRS "caches"

95 lines (94 loc) 2.72 kB
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; } }