EnforceScript component patterns, networking, persistence, and memory management for Enfusion engine
Quick reference for EnforceScript development in Arma Reforger. For detailed patterns, see resource files below.
Use this skill when:
Three main component types in Overthrow: Managers (singletons on game mode), Controllers (instance managers), and Components (sub-systems). Each has specific lifecycle and registration patterns.
See: component-patterns.md for detailed patterns and examples
Use RplProp for simple value synchronization, RPC for server/client communication, and JIP for late-join state sync. Never replicate EntityID - use RplId instead.
See: networking.md for comprehensive replication patterns
⚠️ EPF was retired 2026-08-02 — no EPF_* type exists in this project. Component state persists through a ScriptedComponentSerializer subclass overriding Serialize() / Deserialize(), bound by a rule in Configs/Systems/Persistence/Overthrow.conf (a serializer missing from that config is never called). Write version first; binary contexts are positional. No console guards — the vanilla system handles consoles internally.
See: persistence.md for vanilla save/load patterns
All Managed class references must use ref keyword to prevent garbage collection. Store EntityID instead of IEntity for long-term references. Check entity existence before use.
See: memory-management.md for garbage collection patterns
UI contexts extend OVT_UIContext with m_Layout property. Activate contexts via OVT_Global.GetUI().ShowContext(). Each context manages its own .layout file lifecycle.
See: ui-patterns.md for UI context patterns
EnforceScript has unique constraints: no ternary operators, specific replication patterns, strict typing. Knowing these pitfalls saves debugging time.
See: common-pitfalls.md for anti-patterns and solutions
ref keyword for arrays/maps of Managed classesDetailed documentation organized by concern:
ScriptedComponentSerializer, config binding, entity tracking)EnforceScript is a C++ variant with unique characteristics:
Pattern: Start here for quick reference, dive into resource files for implementation details.