2026-04-11 16:19:48 -07:00

86 lines
1.6 KiB
TypeScript

// https://github.com/hardcpp/BeatSaberPlus/wiki/%5BEN%5D-Song-Overlay
export interface HandshakeEvent {
_type: "handshake";
protocolVersion: number;
gameVersion: string;
playerName: string;
playerPlatformId: string;
}
export interface GameStateEvent {
_type: "event";
_event: "gameState";
gameStateChanged: "Menu" | "Playing";
}
export interface ResumeEvent {
_type: "event";
_event: "resume";
resumeTime: number;
}
export interface PauseEvent {
_type: "event";
_event: "pause";
pauseTime: number;
}
export interface MapInfoChangedEvent {
_type: "event";
_event: "mapInfo";
mapInfoChanged: {
level_id: string;
name: string;
sub_name: string;
artist: string;
mapper: string;
characteristic: string;
difficulty: string;
duration: number;
BPM: number;
PP: number;
BSRKey: string;
coverRaw: string;
time: number;
timeMultiplier: number;
};
}
export interface ScoreEvent {
_type: "event";
_event: "score";
scoreEvent: {
time: number;
score: number;
accuracy: number;
combo: number;
missCount: number;
currentHealth: number;
};
}
export type BeatSaberPlusEvent =
| HandshakeEvent
| GameStateEvent
| ResumeEvent
| PauseEvent
| MapInfoChangedEvent
| ScoreEvent;
export type MapInfo = MapInfoChangedEvent["mapInfoChanged"];
export type Score = ScoreEvent["scoreEvent"];
/** Chat request / queue JSON (e.g. ChatRequest.json beside the overlay) */
export interface ChatRequestEntry {
key: string;
rqt: number;
rqn: string;
npr: string;
msg: string;
}
export interface ChatRequestPayload {
queue: ChatRequestEntry[];
history: ChatRequestEntry[];
}