Roadmap

Project goals derived from README.md and TODO.md. This reflects the current development direction as of the repository state.

Immediate Goals

  1. Add detailed logging around DirectDraw initialization to diagnose the double Create() issue
  2. Verify whether CPixmap::Create() is really called twice at startup
  3. Clarify the bTrueColorBack / bTrueColorDecor parameter order
  4. Fix or document the delete this UB in CPixmap::CacheAll(FALSE)
  5. Verify clean checkout builds on Linux without system SDL packages

Core Development Goals

  • ☐ Improve accuracy of the decompiled source code
  • ☐ Restore missing or defective gameplay behavior
  • ☐ Complete decblupi.cpp — player physics and vehicle logic
  • ☐ Complete event.cpp — input processing and phase dispatch
  • ☐ Complete decmove.cpp — enemy and object AI
  • ☐ Complete decblock.cpp — crate/door/block interaction
  • ☐ Complete decio.cpp — save/load serialization
  • ☐ Complete decdesign.cpp — level editor
  • ☐ Fix or stub DirectPlay network initialization

Documentation Goals

  • ☐ Add Doxygen documentation to all headers and source files
  • ☐ Document all TYPE_*, ACTION_*, and SOUND_* constants in context
  • ☐ Document the .blp binary file format specification

Platform Goals

  • ☐ Complete CMake FreeDirect support (in progress)
  • ☐ Port to additional platforms beyond Windows
  • ☐ Finalize and test Android support
  • ☐ Finalize and test web browser (Emscripten) support
  • ☐ Verify macOS build

Build System Goals

  • ☐ Change target_include_directories to PRIVATE for game executable
  • ☐ Verify /permissive- MSVC flag appropriateness
  • ☐ Verify SDL runtime DLL copying on Windows
  • ☐ Consider CMake option for audio backend: FREE_EGGBERT_AUDIO_BACKEND=DSOUND|BASS|STUB
  • ☐ Consider strict FreeDirect mode (FREE_DIRECT_STRICT=1) for catching DirectDraw contract violations

Recommended Debugging Priority

From TODO.md, the recommended priority order is:

  1. Add detailed logging around DirectDraw initialization
  2. Verify whether CPixmap::Create() is really called twice
  3. Capture exact HRESULT values from DirectDraw calls
  4. Decide ownership of CPixmap::Create() — either DoInit() or CacheAll(), not both
  5. Clarify the bTrueColorBack / bTrueColorDecor parameter order
  6. Keep unrelated systems separate during this investigation
  7. After fullscreen path is understood, continue with web/Android portability work