228 Roadmap
seedhartha edited this page 2021-04-12 21:14:19 +07:00

Recreating a game engine as complex as KotORs is a challenging task, especially for a small number of individual contributors. Until a dedicated team of developers is formed around the project, it is important to set realistic goals, limiting the scope of the project as necessary.

The end goal is to enable the engine to run KotOR and TSL from beginning to end, with identical or better experience compared to the vanilla engine.

The intermediate goal, aka version 1.0, is to implement the most fundamental engine subsystems and game mechanics, to the point where the first game is completable, excluding the minigames.

Milestones

Release 0.18

  • Python scripts to extract and process resources
  • Encounters
  • Game saves: screenshots, metadata, objects state, global variables, etc.
  • Combat: dual wielding: second attack, penalties
  • Combat: critical threat
  • GUI: party inventory

Release 1.0

ETA: Q4 2021

  • Game difficulty
  • Item properties
  • Feats
  • Force Powers
  • Grenades
  • Stores
  • Mines
  • Workbenches
  • Stealth
  • Body bags
  • Footsteps: particles, sounds
  • Listening patterns
  • GUI: confirm dialog
  • GUI: journal
  • GUI: messages
  • GUI: options
  • GUI: pulsating controls
  • GUI: loading screen hints
  • GUI: map "fog of war"
  • Graphics: fog
  • Graphics: lighting emitters
  • Graphics: lens flares
  • Graphics: danglymeshes
  • Performance: replace Dijkstra pathfinding with A*
  • Performance: static geometry batching
  • Performance: use pregenerated AABB trees for collision detection

Post-1.0

Planned

  • Lab stations (TSL)
  • Forms (TSL)
  • Minigames: swoop racing
  • Minigames: turrets
  • Minigames: Pazaak

Considered

  • Vanilla saved games support
  • Co-op multiplayer (1)
  • Real-time combat

Technical Debt

  • Consider replacing singletons with dependency injection
  • Revise 3D control creation: reduce duplication, improve performance
  • Integrate libtga and libs3tc into librender
  • Replace deprecated FFmpeg calls with alternatives
  • Use Boost.Process to create a child process in the launcher