sc4
Version:
A command line utility for automating SimCity 4 modding tasks & modifying savegames
116 lines (115 loc) • 3.03 kB
JavaScript
import FileType from './file-types.js';
import { kFileType } from './symbols.js';
import Unknown from './unknown.js';
import WriteBuffer from './write-buffer.js';
import SimulatorDate from './simulator-date.js';
export default class cSC4Simulator {
static [kFileType] = FileType.cSC4Simulator;
crc = 0x00000000;
mem = 0x00000000;
version = '4';
hoursPerDay = 24;
dayOfYear = 1;
weekOfYear = 1;
monthOfYear = 0;
year = 2000;
date = SimulatorDate.epoch();
unknown = new Unknown()
.byte(0x00)
.byte(0x01)
.dword(0x00000001)
.dword(0x00000000)
.dword(0x00000000)
.dword(17)
.dword(0x00000000)
.byte(0x00)
.dword(0x00000000)
.byte(0x00)
.dword(0x00000000)
.byte(0x00)
.byte(0x00)
.byte(0x00)
.byte(0x00)
.byte(0x00)
.byte(0x00)
.dword(0x00000000)
.byte(0x00)
.dword(0x00000000)
.byte(0x00)
.dword(0x00000000)
.byte(0x00);
parse(rs) {
rs.size();
this.unknown = new Unknown();
let unknown = this.unknown.reader(rs);
this.crc = rs.dword();
this.mem = rs.dword();
this.version = rs.version(1);
unknown.byte();
unknown.byte();
unknown.dword();
unknown.dword();
unknown.dword();
unknown.dword();
unknown.dword();
unknown.byte();
unknown.dword();
unknown.byte();
unknown.dword();
unknown.byte();
this.hoursPerDay = rs.dword();
unknown.byte();
this.dayOfYear = rs.dword();
unknown.byte();
this.weekOfYear = rs.dword();
unknown.byte();
this.monthOfYear = rs.dword();
unknown.byte();
this.year = rs.dword();
unknown.byte();
unknown.dword();
unknown.byte();
unknown.dword();
unknown.byte();
unknown.dword();
unknown.byte();
this.date = rs.date();
rs.assert();
}
toBuffer() {
let ws = new WriteBuffer();
let unknown = this.unknown.writer(ws);
ws.dword(this.mem);
ws.version(this.version);
unknown.byte();
unknown.byte();
unknown.dword();
unknown.dword();
unknown.dword();
unknown.dword();
unknown.dword();
unknown.byte();
unknown.dword();
unknown.byte();
unknown.dword();
unknown.byte();
ws.dword(this.hoursPerDay);
unknown.byte();
ws.dword(this.dayOfYear);
unknown.byte();
ws.dword(this.weekOfYear);
unknown.byte();
ws.dword(this.monthOfYear);
unknown.byte();
ws.dword(this.year);
unknown.byte();
unknown.dword();
unknown.byte();
unknown.dword();
unknown.byte();
unknown.dword();
unknown.byte();
ws.date(this.date);
return ws.seal();
}
}