import { PreFrameUpdateType, SlippiGame } from "@slippi/slippi-js"; import { Buffer } from "node:buffer"; const fileData = Deno.readFileSync( "c:/2026/26 CODE/26 JUN/JUL26/game.slp", ); const game = new SlippiGame(Buffer.from(fileData)); const frames = game.getFrames(); const data = []; for (const frameId of Object.keys(frames)) { const frameNumber = parseInt(frameId); if (frameNumber < -123) continue; // Skip extremely early frames if any, usually countdown starts at -123 const frame = frames[frameNumber]; if (!frame || !frame.players) continue; const frameData = { frame: frameNumber, players: {} as Record>, }; for (const pIndex of Object.keys(frame.players)) { const pre = frame.players[parseInt(pIndex)]?.pre; if (!pre) continue; frameData.players[pIndex] = { joystickX: pre.joystickX, joystickY: pre.joystickY, cStickX: pre.cStickX, cStickY: pre.cStickY, trigger: pre.trigger, physicalLTrigger: pre.physicalLTrigger, physicalRTrigger: pre.physicalRTrigger, physicalButtons: pre.physicalButtons, buttons: pre.buttons, }; } data.push(frameData); } Deno.writeTextFileSync( "c:/2026/26 CODE/26 JUN/JUL26/slp_data.json", JSON.stringify(data), ); console.log(`Parsed ${data.length} frames.`);