summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/packets/general.ts89
-rw-r--r--src/packets/index.ts48
2 files changed, 114 insertions, 23 deletions
diff --git a/src/packets/general.ts b/src/packets/general.ts
index 0c7d63a..7e0cb1f 100644
--- a/src/packets/general.ts
+++ b/src/packets/general.ts
@@ -354,6 +354,69 @@ export class VerifiedPacket implements TASDPacket {
}
}
+export class MemoryInitPacket implements TASDPacket {
+ constructor(
+ public datatype: number,
+ public device: number,
+ public required: boolean,
+ public name: string,
+ public data: Uint8Array
+ ) {}
+ get key() {
+ return PACKET_TYPES.MEMORY_INIT;
+ }
+ get size() {
+ return 5 + this.name.length + this.data.length;
+ }
+ static fromBuffer(buffer: Uint8Array) {
+ const datatype = readUint8(buffer, 0);
+ const device = readUint16(buffer, 1);
+ const required = readBoolean(buffer, 3);
+ const nlen = readUint8(buffer, 4);
+ let index = 5;
+ const name = readString(buffer, index, nlen);
+ index += nlen;
+ const data = buffer.subarray(index);
+ return new this(datatype, device, required, name, data);
+ }
+ toBuffer(g_keylen: number): Uint8Array {
+ const payload = new Uint8Array(this.size);
+ writeUint8(this.datatype, payload, 0);
+ writeUint16(this.device, payload, 1);
+ writeBoolean(this.required, payload, 3);
+ writeUint8(this.name.length, payload, 4);
+ writeString(this.name, payload, 5);
+ payload.set(this.data, 5+this.name.length);
+ return buildBuffer(g_keylen, this.key, payload);
+ }
+ toString() {
+ return `MemoryInit ${this.datatype}, ${this.device}, ${this.required}, ${this.name}, ${this.data.length}`;
+ }
+}
+
+export class GameIdentiferPacket implements TASDPacket {
+ constructor(public type: number, public base: number, public identifier: Uint8Array) {}
+ get key() {
+ return PACKET_TYPES.GAME_IDENTIFIER;
+ }
+ get size() {
+ return 2 + this.identifier.length;
+ }
+ static fromBuffer(buffer: Uint8Array) {
+ return new this(readUint8(buffer, 0), readUint8(buffer, 1), buffer.subarray(2));
+ }
+ toBuffer(g_keylen: number): Uint8Array {
+ const payload = new Uint8Array(this.size);
+ writeUint8(this.type, payload, 0);
+ writeUint8(this.base, payload, 1);
+ payload.set(this.identifier, 2);
+ return buildBuffer(g_keylen, this.key, payload);
+ }
+ toString(): string {
+ return `GameIdentifier ${this.type}, ${this.base}, ${this.identifier}`;
+ }
+}
+
export class MovieLicensePacket implements TASDPacket {
constructor(public link: string) {}
get key() {
@@ -374,6 +437,32 @@ export class MovieLicensePacket implements TASDPacket {
}
}
+export class MovieFilePacket implements TASDPacket {
+ constructor(public name: string, public data: Uint8Array) {}
+ get key() {
+ return PACKET_TYPES.MOVIE_FILE;
+ }
+ get size() {
+ return 1 + this.name.length + this.data.length;
+ }
+ static fromBuffer(buffer: Uint8Array) {
+ const nlen = readUint8(buffer, 0);
+ const name = readString(buffer, 1, nlen);
+ const data = buffer.subarray(nlen+1);
+ return new this(name, data);
+ }
+ toBuffer(g_keylen: number): Uint8Array {
+ const payload = new Uint8Array(this.size);
+ writeUint8(this.name.length, payload, 0);
+ writeString(this.name, payload, 1);
+ payload.set(this.data, 1 + this.name.length);
+ return buildBuffer(g_keylen, this.key, payload);
+ }
+ toString(): string {
+ return `MovieFile ${this.name}, ${this.data.length}`;
+ }
+}
+
export class PortControllerPacket implements TASDPacket {
constructor(public port: number, public type: number) {}
get key() {
diff --git a/src/packets/index.ts b/src/packets/index.ts
index 0bf2195..08ceb79 100644
--- a/src/packets/index.ts
+++ b/src/packets/index.ts
@@ -2,34 +2,36 @@ import { PACKET_TYPES } from "../constants";
import { AttributionPacket, BlankFramesPacket, CategoryPacket, ConsoleRegionPacket, ConsoleTypePacket, DumpCreatedPacket, DumpLastModifiedPacket, EmulatorCorePacket, EmulatorNamePacket, EmulatorVersionPacket, GameTitlePacket, MovieLicensePacket, PortControllerPacket, ROMNamePacket, RerecordsPacket, SourceLinkPacket, TASLastModifedPacket, TotalFramesPacket, VerifiedPacket } from "./general";
import { InputChunkPacket } from "./input";
import { TASDPacket, UnknownPacket } from "./utils";
+import * as general from "./general";
+import * as input from "./input";
export * as General from './general';
export * as Input from './input';
export function parse(type: number, buffer: Uint8Array): TASDPacket {
switch (type) {
// General
- case PACKET_TYPES.CONSOLE_TYPE: return ConsoleTypePacket.fromBuffer(buffer);
- case PACKET_TYPES.CONSOLE_REGION: return ConsoleRegionPacket.fromBuffer(buffer);
- case PACKET_TYPES.GAME_TITLE: return GameTitlePacket.fromBuffer(buffer);
- case PACKET_TYPES.ROM_NAME: return ROMNamePacket.fromBuffer(buffer);
- case PACKET_TYPES.ATTRIBUTION: return AttributionPacket.fromBuffer(buffer);
- case PACKET_TYPES.CATEGORY: return CategoryPacket.fromBuffer(buffer);
- case PACKET_TYPES.EMULATOR_NAME: return EmulatorNamePacket.fromBuffer(buffer);
- case PACKET_TYPES.EMULATOR_VERSION: return EmulatorVersionPacket.fromBuffer(buffer);
- case PACKET_TYPES.EMULATOR_CORE: return EmulatorCorePacket.fromBuffer(buffer);
- case PACKET_TYPES.TAS_LAST_MODIFIED: return TASLastModifedPacket.fromBuffer(buffer);
- case PACKET_TYPES.DUMP_CREATED: return DumpCreatedPacket.fromBuffer(buffer);
- case PACKET_TYPES.DUMP_LAST_MODIFIED: return DumpLastModifiedPacket.fromBuffer(buffer);
- case PACKET_TYPES.TOTAL_FRAMES: return TotalFramesPacket.fromBuffer(buffer);
- case PACKET_TYPES.RERECORDS: return RerecordsPacket.fromBuffer(buffer);
- case PACKET_TYPES.SOURCE_LINK: return SourceLinkPacket.fromBuffer(buffer);
- case PACKET_TYPES.BLANK_FRAMES: return BlankFramesPacket.fromBuffer(buffer);
- case PACKET_TYPES.VERIFIED: return VerifiedPacket.fromBuffer(buffer);
- // case PACKET_TYPES.MEMORY_INIT: return XXXXX.fromBuffer(buffer);
- // case PACKET_TYPES.GAME_IDENTIFIER: return XXXXX.fromBuffer(buffer);
- case PACKET_TYPES.MOVIE_LICENSE: return MovieLicensePacket.fromBuffer(buffer);
- // case PACKET_TYPES.MOVIE_FILE: return XXXXX.fromBuffer(buffer);
- case PACKET_TYPES.PORT_CONTROLLER: return PortControllerPacket.fromBuffer(buffer);
+ case PACKET_TYPES.CONSOLE_TYPE: return general.ConsoleTypePacket.fromBuffer(buffer);
+ case PACKET_TYPES.CONSOLE_REGION: return general.ConsoleRegionPacket.fromBuffer(buffer);
+ case PACKET_TYPES.GAME_TITLE: return general.GameTitlePacket.fromBuffer(buffer);
+ case PACKET_TYPES.ROM_NAME: return general.ROMNamePacket.fromBuffer(buffer);
+ case PACKET_TYPES.ATTRIBUTION: return general.AttributionPacket.fromBuffer(buffer);
+ case PACKET_TYPES.CATEGORY: return general.CategoryPacket.fromBuffer(buffer);
+ case PACKET_TYPES.EMULATOR_NAME: return general.EmulatorNamePacket.fromBuffer(buffer);
+ case PACKET_TYPES.EMULATOR_VERSION: return general.EmulatorVersionPacket.fromBuffer(buffer);
+ case PACKET_TYPES.EMULATOR_CORE: return general.EmulatorCorePacket.fromBuffer(buffer);
+ case PACKET_TYPES.TAS_LAST_MODIFIED: return general.TASLastModifedPacket.fromBuffer(buffer);
+ case PACKET_TYPES.DUMP_CREATED: return general.DumpCreatedPacket.fromBuffer(buffer);
+ case PACKET_TYPES.DUMP_LAST_MODIFIED: return general.DumpLastModifiedPacket.fromBuffer(buffer);
+ case PACKET_TYPES.TOTAL_FRAMES: return general.TotalFramesPacket.fromBuffer(buffer);
+ case PACKET_TYPES.RERECORDS: return general.RerecordsPacket.fromBuffer(buffer);
+ case PACKET_TYPES.SOURCE_LINK: return general.SourceLinkPacket.fromBuffer(buffer);
+ case PACKET_TYPES.BLANK_FRAMES: return general.BlankFramesPacket.fromBuffer(buffer);
+ case PACKET_TYPES.VERIFIED: return general.VerifiedPacket.fromBuffer(buffer);
+ case PACKET_TYPES.MEMORY_INIT: return general.MemoryInitPacket.fromBuffer(buffer);
+ case PACKET_TYPES.GAME_IDENTIFIER: return general.GameIdentiferPacket.fromBuffer(buffer);
+ case PACKET_TYPES.MOVIE_LICENSE: return general.MovieLicensePacket.fromBuffer(buffer);
+ case PACKET_TYPES.MOVIE_FILE: return general.MovieFilePacket.fromBuffer(buffer);
+ case PACKET_TYPES.PORT_CONTROLLER: return general.PortControllerPacket.fromBuffer(buffer);
// NES
// case PACKET_TYPES.NES_LATCH_FILTER: return XXXXX.fromBuffer(buffer);
// case PACKET_TYPES.NES_CLOCK_FILTER: return XXXXX.fromBuffer(buffer);
@@ -43,7 +45,7 @@ export function parse(type: number, buffer: Uint8Array): TASDPacket {
// Genesis
// case PACKET_TYPES.GENESIS_GAME_GENIE_CODE: return XXXXX.fromBuffer(buffer);
// Input
- case PACKET_TYPES.INPUT_CHUNK: return InputChunkPacket.fromBuffer(buffer);
+ case PACKET_TYPES.INPUT_CHUNK: return input.InputChunkPacket.fromBuffer(buffer);
// case PACKET_TYPES.INPUT_MOMENT: return XXXXX.fromBuffer(buffer);
// case PACKET_TYPES.TRANSITION: return XXXXX.fromBuffer(buffer);
// case PACKET_TYPES.LAG_FRAME_CHUNK: return XXXXX.fromBuffer(buffer);