{
  "format": "C -> wasm32 static archive -> bindgen-cli Rust FFI -> Rust -> wasm-bindgen",
  "playable": false,
  "nativeBootRequiresWebGL": true,
  "nativeMenuRendering": true,
  "firstNativeBootBlocker": null,
  "nativeAudioResampler": "windowed-sinc-q15-v1 (replacement coefficients; not console-bit-exact)",
  "firstNativeInteractionBlocker": null,
  "nativeCardNoticeRendering": true,
  "firstNativeSceneTransitionBlocker": "THPVideoDecode: original opening-movie JPEG decode and YUV plane output after checked MTHP initialization/header parsing",
  "compiledCSources": 1037,
  "gameAndEngineSources": 984,
  "wasmBytes": 10176375,
  "exportCount": 19563,
  "platformImportCount": 71,
  "platformImports": [
    "AXFXChorusCallback",
    "AXFXChorusInit",
    "AXFXChorusShutdown",
    "AXFXReverbHiCallback",
    "AXFXReverbHiInit",
    "AXFXReverbHiShutdown",
    "CARDCheckAsync",
    "CARDClose",
    "CARDCreateAsync",
    "CARDDeleteAsync",
    "CARDFormatAsync",
    "CARDFreeBlocks",
    "CARDGetStatus",
    "CARDGetXferredBytes",
    "CARDOpen",
    "CARDRead",
    "CARDReadAsync",
    "CARDRenameAsync",
    "CARDSetStatusAsync",
    "CARDWrite",
    "CARDWriteAsync",
    "FIOExit",
    "FIOFclose",
    "FIOFopen",
    "FIOFwrite",
    "FIOInit",
    "FIOQuery",
    "GXEnableTexOffsets",
    "GXGetProjectionv",
    "GXGetTexBufferSize",
    "GXGetViewportv",
    "GXInitFogAdjTable",
    "GXSetIndTexCoordScale",
    "GXSetIndTexMtx",
    "GXSetIndTexOrder",
    "GXSetLineWidth",
    "GXSetPointSize",
    "GXSetTevClampMode",
    "GXSetTevIndirect",
    "GXSetViewportJitter",
    "GXSetZTexture",
    "InitializeUART",
    "MCCClose",
    "MCCEnumDevices",
    "MCCExit",
    "MCCGetConnectionStatus",
    "MCCGetFreeBlocks",
    "MCCGetLastError",
    "MCCInit",
    "MCCNotify",
    "MCCOpen",
    "MCCRead",
    "MCCStreamOpen",
    "MCCWrite",
    "OSCheckActiveThreads",
    "OSClearContext",
    "OSCreateThread",
    "OSGetCurrentContext",
    "OSResetSystem",
    "OSResumeThread",
    "OSSetCurrentContext",
    "ReadUARTN",
    "THPDec_8032F8D4",
    "THPDec_80331340",
    "THPDec_803313D0",
    "THPVideoDecode",
    "VIWaitForRetrace",
    "WriteUARTN",
    "__longjmp",
    "__setjmp",
    "melee_browser_yield"
  ],
  "disc": {
    "game_id": "GALE01",
    "revision": 2,
    "dol_sha1": "08e0bf20134dfcb260699671004527b2d6bb1a45",
    "nkit": true,
    "fonts": {
      "HSD_DebugFontAtlas": {
        "size": 7168,
        "sha256": "5ea0892a5de301fe2a55014e081565f7ea56f0adc5ffda23ca2a338ff573b82a"
      },
      "HSD_SisLib_FontAtlas": {
        "size": 146944,
        "sha256": "e8d43d10b000e59a64653e8a1b7726bdf95f9102d3ee3307ed56d7c53cde05c1"
      }
    },
    "image_bytes": 1430679552,
    "dol_offset": 124928,
    "dol_size": 4425184,
    "fst_offset": 4550144,
    "fst_size": 29993
  },
  "nativeSubsystems": [
    "SDK C matrix/vector/projection math replaces PowerPC paired-single assembly.",
    "Rust-owned 24 MiB arena, monotonic clock, calendar, settings and single-thread interrupt state.",
    "Browser keyboard/standard gamepads through Rust PADStatus, SDK clamping, validated polling-rate requests and optional rumble; fresh-instance cold boot and no physical reset switch.",
    "C variadic OSReport/OSPanic forwarding to browser diagnostics.",
    "VI configuration, flush/retrace state and callbacks; JSPI browser suspension and live YUYV XFB memory presentation (not playable gameplay).",
    "Compiler bridge for native C FIFO stores; bounded Rust direct/indexed position/normal/color decoding, per-vertex matrices and vertex-only display lists; isolated WebGL2 diagnostic pixels (not gameplay).",
    "Explicit live vertex-array length/endian registration, checked fetches, C/bindgen descriptor-list ABI and decoded draw snapshots.",
    "Native GXInit context with a checked, owned 128-byte FIFO object, coherent ring transport, supported SDK defaults, and draw-time rejection of unported texture/lighting pipelines.",
    "Per-draw depth/blend/cull/scissor/write-mask/dither snapshots rendered through WebGL2; real GPU draw completion with interrupt-masked callbacks, bounded reentry and fail-closed callback cleanup.",
    "Original progressive-scan menu renders through its actual C camera/model/material/SIS glyph pipeline. Direct ADD/SUB TEV supports up to sixteen stages sharing TEX0/COLOR0A0, konst/signed registers, swaps and late alpha testing; specialized shaders are pixel-compared with the reference interpreter. Not playable-match or 60fps acceptance.",
    "Native GXSetCopyFilter owns validated sample-pattern and vertical-filter state, with SDK disabled defaults and register-output oracle tests.",
    "Persistent RGB8 EFB and bounded RGB565/Z16 3-sample AA triangle path; quantized vertical display scaling/filter/gamma/clamp, real YUYV XFB memory, masked clear-after-copy and GPU synchronization.",
    "Native GXCopyTex writes 16 tiled color/channel formats into Wasm memory, including 2x2 half-size filtering, tile-row strides, full padding tiles and shared copy filters. General texture/TEV support remains unfinished.",
    "Native GXSetMisc owns XF flush/context configuration; CPU-transformed draw snapshots have no PPC XF hazard and do not emit artificial flush vertices.",
    "Native 64-byte light constructors and eight owned immediate-load snapshots; XYZ S8/S16/F32 normals, normal matrices, ambient/material colors and unattenuated diffuse COLOR0A0 lighting before WebGL rasterization.",
    "Verified read-only FST lookup and bounded asynchronous DVD reads with SDK priority ordering and safe idle DVDFileInfo reuse.",
    "Cooperative SDK alarms: relative/absolute/periodic deadlines, FIFO, interrupt masking and native C callbacks.",
    "Native 16 MiB ARAM, SDK allocation stack and byte DMA; priority/FIFO ARQ with chunk preemption, cancellation and typed native callbacks. Cooperative interrupt-enable completion, not DSP/audio output or hardware DMA timing.",
    "Native AI initialization, 32/48 kHz signed-16 stereo PCM FIFO, start-latched DMA callbacks and bounded Web Audio scheduling with suspend/resume and failure cleanup. Diagnostic PCM output is not original game audio.",
    "Original AX CPU voice pools/control plane plus a native Rust mixer for this build's AX task: PCM16/PCM8/ADPCM, looping, linear/no-SRC and three-bank four-tap SRC with explicitly identified replacement windowed-sinc coefficients (not console-bit-exact). Bounded ITD stereo delay, envelope/channel ramps, 5 ms blocks, per-ms target updates, aux buses and PB/history feedback. Original menu sound produces nonzero browser PCM; no DSP instruction emulation or silent unsupported-feature fallbacks.",
    "Native AXFX allocation hooks, scalar standard reverb and original C delay processing. HSD synth startup reserves ARAM banks and uploads its silence buffer through aligned DevCom storage.",
    "Original SSM/SEM loaders: atomic mixed-width metadata conversion, split ADPCM address rebasing and typed synth callback dispatch. Browser startup loads 348 sounds/375 voices with exact ISO-to-ARAM bytes; all 110 SSM banks and both SEM files have field-oracle tests.",
    "Explicit native MRAM/ARAM heap and DVD destination provenance, including original compaction callbacks in both address spaces. Original LbRb.dat conversion and C rumble execution; no PPC address-high-bit heuristic.",
    "Schema-gated NtProge/common notice scenes: original camera/lights/model constructors, typed joint/material/camera/light/world animation descriptors and validated untouched packed bytecode, 21-frame joint and 41-frame material-color oracles, archive-owned GPU range cleanup. Original no-memory-card notices render and accept confirmation; general game archives remain unported.",
    "Original English/Japanese SIS_ProgeData and SIS_MessageData loading: validated pointer tables, preserved packed BE commands/kerning/I4 glyphs, explicit unaligned endian reads and signed fixed-point formatting-stack restoration. Four archives, 56 strings/1980 glyphs and 172 original C line-layout oracles; embedded/custom font provenance and archive lifetime checks. Progressive menu and card-notice pixels verified in the original loop; matches remain unfinished.",
    "Original LbMcGame banner/icon manifest with byte-exact image/palette preservation and typed pointer conversion; no save device. Both TyDatai trophy archives use mixed-width scalar conversion with 28,224 original C metadata/display/availability/language lookup oracles, strict extent/sentinel checks and atomic malformed rejection.",
    "Both GmTtAll title archives have typed conversion of all 1909/1992 relocations: original models, texture/image/palette animations, empty shape-animation trees, camera/lights/fog and splash image. Original C constructors and 1601 animation frames pass independent image-selection oracles and malformed-input atomicity tests. Title pixels are not yet verified.",
    "Original OS allocation frees and heap destruction release only their owned game-archive GPU ranges. Two-heap regression preserves persistent peers, rejects partial archive frees and permits exact-address scene reuse. GX texture constructors preserve opaque/unbacked image addresses; width/height/format queries work, while sampling still requires valid live registered data.",
    "Owned immutable DAT validation and typed joint preparation for original HSD archive/class constructors, TEV compilation, reference resolution and PObj skinning/display lists. Browser Fox bind-pose preview: 73 joints, 91 polygons, checked BE GPU registrations and unload lifetimes. This is not a running match or generic game archive integration.",
    "Bounded native GXTexObj/image snapshots, TEX0 attributes and 2x4 generation, base nonpaletted textures, nearest/linear clamp/repeat/mirror and one REPLACE/MODULATE stage. Model preview uses a diagnostic camera/material override: 75 UV-textured materials and two untextured reflection materials.",
    "Explicit empty memory-card slots, including CARDFastOpen handle invalidation/NOCARD behavior; debugger absence and native error-handler registration (no saves or PPC exception emulation)."
  ],
  "remaining": [
    "GX FIFO switching/interrupt timing, CP/XF/BP commands, NBT normals, TEX1+, reflection texgen, mipmap/palette sampling, spot/specular lighting, general TEV and remaining raster modes remain unported.",
    "AA blending/dither/lines/points, mid-stream AA pattern/EFB format changes, RGBA6/depth/YUVA8/compressed copies, field-selective copies, accurate interlaced scanout and draw-done interrupt timing remain unported. Copy/AA hardware precision and native 60 fps gameplay are unverified.",
    "Browser startup renders the original progressive-scan menu and both no-memory-card notices. Keyboard selection/confirmation and original menu sound work. Wasm now validates and normalizes MTHP v0-v2 headers and sizes bounded 4:2:0 workspaces; Rust THPInit needs no GameCube locked-cache state. Opening playback still needs THPVideoDecode/JPEG entropy decoding and YUV plane output. Node requires WebGL at GXCopyDisp. FIR/DPL2, mid-block ITD setup changes, high reverb/chorus, arbitrary DSP programs, DVD ADPCM streaming, OS threads/context switching and persistent saves remain unported.",
    "Extend schema-gated game archive loading beyond rumble, progressive/common notices, SIS_ProgeData/SIS_MessageData, card artwork, trophy metadata and GmTtAll: other SIS roots/jump targets, general scene/stage/morph schemas, external resolution, scene lifetimes, visibility selection and full material rendering. Serialized TEX1+ arrays are converted, but multi-texture GX rendering remains unported. Bitfields and function-pointer signatures still need runtime porting.",
    "Validate the JSPI-yielding game loop, asynchronous DVD callbacks and display timing in a running match."
  ]
}
