Files
rem-essentials-pub/docs/architecture.md
T

1.3 KiB

Architecture

rem-essentials is intentionally feature-first. Every migrated behavior should live in its own module and be registered as a named feature in src/main.cpp.

Feature registration

Each feature has:

  • a stable config key
  • an init function
  • an optional cleanup function
  • a runtime side: Client, Server, or Always
  • a code default

The INI file can override each default. Missing INI entries keep the compiled default.

Current feature keys

The full key list lives in rem-essentials.ini. Feature switches live in [rem-essentials]; typed parameters used by the graphics, saves, and screenshots behavior live in the [flplusplus] section.

Design rules

  • Prefer one feature flag per behavior, even when multiple behaviors share one option.
  • Keep client and server hooks in separate files.
  • Resolve optional Freelancer imports at runtime when practical.
  • Keep adapted third-party code isolated under third_party/ and wrap it with thin REM adapters instead of adding a second plugin entry point.

Proton-sensitive fixes

Mouse features stay split because Wine/Proton can handle cursor APIs differently from native Windows. The current conservative defaults are:

  • cursor_visibility_fix = true
  • cursor_border_flicker_fix = false
  • mouse_warp_fix = false

These can be enabled per player in rem-essentials.ini after testing.