
enforcescript-patterns
by ArmaOverthrow
A dynamic and persistent revolution platform for Arma Reforger (and eventually Arma 4)
SKILL.md
name: enforcescript-patterns description: EnforceScript component patterns, networking, persistence, and memory management for Enfusion engine version: 1.0.0
EnforceScript Patterns
Quick reference for EnforceScript development in Arma Reforger. For detailed patterns, see resource files below.
When to Use This Skill
Use this skill when:
- Creating entity components (Managers, Controllers, Components)
- Implementing network replication (RplProp, RPC, JIP)
- Setting up persistence with EPF (save/load patterns)
- Managing memory (strong refs, garbage collection)
- Building UI contexts and layouts
- Troubleshooting common EnforceScript pitfalls
Quick Reference
Component Patterns
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
Network Replication
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
Persistence
EPF requires SaveData classes that extend EPF_ComponentSaveDataClass. ReadFrom extracts data, ApplyTo restores it. Console platforms require PLATFORM_CONSOLE guards.
See: persistence.md for EPF save/load patterns
Memory Management
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 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
Common Pitfalls
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
Critical Constraints
- ❌ No ternary operators - Use full if/else statements always
- ✅ Strong refs for Managed - Always use
refkeyword for arrays/maps of Managed classes - ⚠️ EntityID vs RplId - Use RplId for network entity references, EntityID locally only
- ✅ Check entity existence - Always verify entity still exists before using it
- ❌ Don't replicate entities - Never use RplProp on IEntity or EntityID
- ✅ Server authority - Server drives game state, clients receive updates
- ⚠️ RPC direction - RpcAsk = client→server, RpcDo = server→client(s)
Resource Files
Detailed documentation organized by concern:
- component-patterns.md - Manager, Controller, and Component class patterns
- networking.md - RplProp, RPC, JIP replication, and optimization
- persistence.md - EPF save/load patterns and console platform handling
- memory-management.md - Strong refs, garbage collection, entity lifecycle
- ui-patterns.md - OVT_UIContext, layout activation, UI manager integration
- common-pitfalls.md - Ternary operators, weak refs, replication gotchas
Language-Specific Notes
EnforceScript is a C++ variant with unique characteristics:
- Strongly typed with type inference limited
- No ternary operator support (use if/else)
- Garbage collection for Managed classes
- Native entity-component architecture
- Built-in replication system via Rpl attributes
- No null coalescing operator
Pattern: Start here for quick reference, dive into resource files for implementation details.
Score
Total Score
Based on repository quality metrics
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
Reviews
Reviews coming soon
