Status legend

Implemented — works as expected for the target game patterns
Partial — works for the common case; known gaps documented
Stub — compiles and returns success; performs no real work
Not supported — absent from the implementation; will not compile or link
Unknown — behavior untested or unclear from the source code

DirectDraw features

Feature Status Notes Used by Speedy Blupi / Planet Blupi
DirectDrawCreate Partial GUID ignored; always uses SDL default Yes
SetCooperativeLevel (DDSCL_NORMAL) Implemented Creates SDL renderer in windowed mode Yes
SetCooperativeLevel (DDSCL_FULLSCREEN) Partial Requests fullscreen via free-api; renderer still created Yes
SetCooperativeLevel (DDSCL_EXCLUSIVE) Partial Accepted; no additional exclusive behavior beyond fullscreen Yes
Primary surface creation (DDSCAPS_PRIMARYSURFACE) Implemented CPU pixel buffer; size from SetDisplayMode or 640×480 default Yes
Offscreen surface creation (DDSCAPS_OFFSCREENPLAIN) Implemented Width/height/BPP from descriptor Yes
System-memory surface (DDSCAPS_SYSTEMMEMORY) Implemented Treated as offscreen plain Yes
8-bit paletted surfaces (DDPF_PALETTEINDEXED8) Implemented Stored as palette indices; expanded to RGBA32 on present Yes
32-bit RGBA surfaces (DDPF_RGB, 32-bit) Implemented R, G, B, A byte order internally Yes
Blt — color fill (DDBLT_COLORFILL) Implemented 0x00RRGGBB for 32-bit; low byte = palette index for 8-bit Yes
Blt — surface-to-surface copy Implemented Nearest-neighbor scaling; 8→8 and 32→32 only Yes
Blt — source color key (DDBLT_KEYSRC) Implemented Range comparison; RGB fallback for 32-bit Yes
Blt — wait flag (DDBLT_WAIT) Implemented Accepted; no-op (no hardware synchronisation needed) Yes
Blt — rotation (DDBLT_ROTATIONANGLE) Not supported Flag and dwRotationAngle accepted; rotation not performed No (demo only)
BltFast — no color key (DDBLTFAST_NOCOLORKEY) Implemented All pixels copied Yes
BltFast — source color key (DDBLTFAST_SRCCOLORKEY) Implemented Transparent pixels skipped Yes
Flip (primary surface present) Partial Simplified present, not a real flip chain; both parameters ignored Yes
Auto-present on Blt-to-primary Implemented Enabled when Flip has never been called; disabled once Flip is first called Yes (Speedy Blupi pattern)
Lock / Unlock Implemented Returns pointer into CPU pixel buffer; Unlock is a no-op Yes
GetSurfaceDesc Implemented Returns width, height, pitch, pixel format, and surface pointer Yes
SetColorKey (DDCKEY_SRCBLT) Implemented Range-based key stored per surface Yes
SetColorKey (other flags) Not supported Returns DDERR_UNSUPPORTED No
SetPalette Implemented Reference-counted; used during present and GetDC Yes
SetClipper / CreateClipper Implemented Presence triggers windowed coordinate adjustment in Blt Yes
IDirectDrawClipper::SetHWnd Partial HWND stored; not used for clip region management Yes
CreatePalette / palette GetEntries / SetEntries Implemented 256-entry PALETTEENTRY array; DDPCAPS_8BIT accepted Yes
SetDisplayMode Partial Stores logical resolution; triggers fullscreen; does not change physical display Yes
IsLost Stub Always returns DD_OK; surfaces never lose content Yes
Restore Stub Always returns DD_OK Yes
GetDC Partial Functional for DDColorMatch pattern; 8-bit uses RGBA temp buffer Yes
ReleaseDC Implemented Converts RGBA back to palette indices for 8-bit surfaces Yes
QueryInterface (all surfaces) Stub Returns DDERR_UNSUPPORTED; COM aggregation not implemented Typically not needed
VSync (frame pacing) Implemented SDL_SetRenderVSync enabled by default; disable with FREE_DIRECT_ENABLE_VSYNC=0 Implicit
Frame throttle Implemented Skips present if called within frame interval (default 60 FPS) Implicit
Letterbox scaling Implemented SDL_SetRenderLogicalPresentation with LETTERBOX mode Implicit
Back-buffer flip chains Not supported No real flip chain; Flip() is a simplified present N/A
Overlays Not supported Not implemented No
Texture surfaces / video memory Not supported All surfaces are CPU-side; no GPU texture creation via DirectDraw No
GDI emulation via DirectDraw Not supported GetDC supports DDColorMatch pattern only; full GDI drawing not tested Partial (GetDC/SetPixel pattern)

DirectSound features

Feature Status Notes Used by Speedy Blupi / Planet Blupi
DirectSoundCreate Implemented Opens SDL default audio device; graceful DSERR_NODRIVER if unavailable Yes
SetCooperativeLevel Implemented Any level accepted; always returns DS_OK Yes
CreateSoundBuffer Implemented Allocates PCM buffer and stores PCMWAVEFORMAT Yes
Lock / Unlock Implemented Writable pointer into internal PCM vector; wrap-around two-region supported Yes
Play (one-shot) Implemented Feeds PCM into SDL stream; restarts if already playing Yes
Play (looping, DSBPLAY_LOOPING) Not supported Flag accepted but ignored; buffer plays once Unknown
Stop Implemented SDL_ClearAudioStream; immediate silence Yes
GetStatus Implemented DSBSTATUS_PLAYING if stream has queued bytes Yes
SetVolume Implemented Centibel to linear gain; applied via SDL_SetAudioStreamGain Yes
SetPan Partial Stored and calculated; not yet applied to SDL output channels Unknown
SetCurrentPosition Partial Updates play cursor; SDL stream not seekable Unknown
8-bit unsigned PCM Implemented SDL_AUDIO_U8; auto-converted to device format Yes
16-bit signed PCM Implemented SDL_AUDIO_S16LE; auto-converted to device format Yes
Mono sources Implemented SDL3 handles mono→stereo mixing Yes
Stereo sources Implemented Played as-is Yes
Sample rate conversion Implemented Handled automatically by SDL3 audio stream Implicit
3D audio / positional sound Not supported Not implemented No
Capture / recording Not supported Not implemented No
Hardware buffer acceleration Not supported All buffers are software; DSBCAPS flags accepted but not negotiated No

DirectPlay features

Feature Status Notes Used by target games
DirectPlayCreate Stub Creates dummy object; no networking Yes (optional)
DirectPlayEnumerateA/W Stub Callback never called; returns DP_OK Yes (optional)
EnumSessions Stub No sessions found Yes (optional)
Open / Close Stub No-op success Yes (optional)
CreatePlayer Stub Sets player ID to 1; no real player registration Yes (optional)
Send / Receive Stub No I/O performed Yes (optional)
Real UDP/IPX networking Not supported No transport layer exists N/A

Not implemented at all

FeatureNotes
DirectInputNo header; input handled by the free-api WinAPI layer (Win32 message queue)
Direct3D3D pipeline not needed by target games; no plans to add
DirectDraw overlaysNot in header or source
DirectDraw video captureNot in header or source
DirectDraw Execute buffersNot applicable (DX3 3D feature)
COM aggregation (QueryInterface)All QueryInterface calls return DDERR_UNSUPPORTED or E_NOINTERFACE
DDSCAPS_VIDEOMEMORYAccepted in flags but all surfaces are CPU-resident