Derived from the "Jarvis Framework" (v1.4.0, "Blender 5.0 Modeling, Texturing &
Rendering Overhaul") by ItsMeDingo, with MCP setup notes and field-tested
corrections added locally. Converted 2026-09-18.
Arma Reforger Modding
Core rules live here. Everything else is in the reference files below — read
only the one that matches the task.
Non-negotiable rules
These hold regardless of what is being built:
- Never modify base-game resources directly. Inherit and override. A
base-game script copied into a mod shadows the engine class and crashes the
game (learned via a stray
TimeAndWeatherManagerEntity.c).
- Scan dependencies before destructive edits. Prefer small, reversible
changes.
- Freeze transforms before FBX export. Ctrl+A → Apply All, every time.
- Never scale environmental prefabs above 1.3. Breaks collision meshes and
performance.
- Quad topology only. No ngons, no poles.
- Base Color is sRGB. Every other map is Non-Color Data. Roughness, Normal,
Metallic, Displacement — all of them.
- Validate before publishing. See
qa-validation.md.
Evidence rules
Reforger fails quietly and in ways that mimic success. Before calling anything
done, name the test that could falsify it.
- AI holding fire is not evidence of faction registration. Units with no
faction also hold fire, because nobody is anybody's enemy — peace is a test
with no negative control. Test hostility instead: put a vanilla US or USSR
unit in line of sight. Registered faction with no friendly-faction entry →
they engage. Nothing happens → the faction key resolved to null.
- Absence from the Game Master browser proves nothing. Its filter lists only
factions that have entity catalogs, so a correctly registered faction with an
empty catalog array will not appear there.
- Log tells.
'SCR_Faction' trying to get entity list of type 'ITEM' but there is no catalog with that type for faction '<KEY>' is good news — the
faction is registered and merely lacks catalogs. Could not find SCR_FactionManager means a second FactionManager is blocking the one in
GameMode_Editor_Full.et.
- The
"faction affiliation" field is free text, not a dropdown. A case
mismatch against m_sFactionKey fails silently and looks exactly like a
registration failure.
- A
FactionManager in a test world does nothing for your scenario world.
Faction keys resolve per-world.
SCR_FactionManager named FactionManager_Editor1 is vanilla, from
GameMode_Editor_Full.et (US/USSR/FIA) — not yours.
- Treat the Workbench editor as ground truth over the script API dump when
the two disagree.
When something fails twice
- If the same approach has failed twice, the approach is wrong — not the
parameters. Stop. Do not re-tune a number and try again. Name a different
method. Three variations on one broken idea is a loop, not progress.
- Never iterate blind. If you cannot observe the result yourself, do not
guess again — ask for one specific readout that would settle it. Guessing
from a description, then guessing from a screenshot of the damage, then
guessing again compounds the error every round.
- A reset is not progress. Undoing and restarting from a slightly different
guess feels like recovery and is not. If the last two attempts both ended in
"clean reset," change what is being attempted.
- Verify the measurement before trusting the answer. A number that does not
change when you change the input is broken, not stable. Confirm it responds
before optimising against it — otherwise you will tune confidently against
noise.
- Destroy nothing on the way. Hide, rename, or duplicate — never delete,
and never let a loop delete. Work the user did by hand is the most expensive
thing in the project.
Reference files
| File |
Read when |
blender-export.md |
Modelling, modifiers, UVs, PBR materials, rendering, FBX export |
terrain-surfaces.md |
Terrain creation, heightmaps, surface materials, atmosphere, Game Master scenes |
ai-behaviour.md |
Behaviour trees, scripted nodes, agents, waypoints, utility reactions |
character-clothing.md |
Fitting garments to a character — T-pose/A-pose mismatch, Surface Deform, weight transfer order, protecting your work |
rigging-animation.md |
Armatures, weapon attachment, NLA retargeting, additive actions, AnimEvents |
qa-validation.md |
Pre-release validation, packing, publishing |
mcp-tooling.md |
Setting up or fixing the MCP servers and Workbench Net API |
Workflow
- Understand the feature or asset change requested.
- Check whether it already exists, or whether a donor asset can be used.
- Search the project, then the Enfusion API and base-game resources.
- Inspect inheritance, skeletons, and dependencies before writing anything.
- Make a minimal plan — geometry targets, texture specs, rigging needs.
- Build it.
- Validate geometry, materials, scripts, prefabs.
- Test, diagnose, revalidate, update the project log.
Modes
Pick the mode from the person, not the task. The default failure here is
answering a beginner in developer mode — handing someone Python to paste when
they have never opened the Scripting tab, and carrying on when they ask where
the tab is.
Signals to read: if they ask where a menu item lives, what a term means, or say
outright that they are not a programmer, that is teacher mode, no matter how
technical the underlying job is. A modder is not a developer. When unsure,
start in teacher mode — being over-explained to is a mild annoyance, while
being handed unexplained code that breaks a project costs hours.
Match the response to what the request actually wants:
- Teacher — step-by-step, assume no prior knowledge.
- Developer — generate and modify scripts, prefabs, configs directly.
- Diagnostic — trace inheritance, compare broken resources against working
base-game equivalents.
- Architect — system layout, milestones, dependency trees.
- Automation — use MCP and Workbench plugins for repetitive work.
1---2name: arma-reforger-modding3description: Arma Reforger / Enfusion mod development — Blender-to-Enfusion export discipline, fitting character clothing and garments, terrain and surface materials, AI behaviour trees, rigging and animation, prefab inheritance, MCP tooling setup, and the seven-level QA pass before Workshop release. Use for any work in Enfusion Workbench, Enforce Script, or Blender assets destined for Reforger.4---56*Derived from the "Jarvis Framework" (v1.4.0, "Blender 5.0 Modeling, Texturing &7Rendering Overhaul") by **ItsMeDingo**, with MCP setup notes and field-tested8corrections added locally. Converted 2026-09-18.*910# Arma Reforger Modding1112Core rules live here. Everything else is in the reference files below — read13only the one that matches the task.1415## Non-negotiable rules1617These hold regardless of what is being built:1819- **Never modify base-game resources directly.** Inherit and override. A20 base-game script copied into a mod shadows the engine class and crashes the21 game (learned via a stray `TimeAndWeatherManagerEntity.c`).22- **Scan dependencies before destructive edits.** Prefer small, reversible23 changes.24- **Freeze transforms before FBX export.** Ctrl+A → Apply All, every time.25- **Never scale environmental prefabs above 1.3.** Breaks collision meshes and26 performance.27- **Quad topology only.** No ngons, no poles.28- **Base Color is sRGB. Every other map is Non-Color Data.** Roughness, Normal,29 Metallic, Displacement — all of them.30- **Validate before publishing.** See `qa-validation.md`.3132## Evidence rules3334Reforger fails quietly and in ways that mimic success. Before calling anything35done, name the test that could falsify it.3637- **AI holding fire is not evidence of faction registration.** Units with *no*38 faction also hold fire, because nobody is anybody's enemy — peace is a test39 with no negative control. **Test hostility instead:** put a vanilla US or USSR40 unit in line of sight. Registered faction with no friendly-faction entry →41 they engage. Nothing happens → the faction key resolved to null.42- **Absence from the Game Master browser proves nothing.** Its filter lists only43 factions that have entity catalogs, so a correctly registered faction with an44 empty catalog array will not appear there.45- **Log tells.** `'SCR_Faction' trying to get entity list of type 'ITEM' but46 there is no catalog with that type for faction '<KEY>'` is *good* news — the47 faction is registered and merely lacks catalogs. `Could not find48 SCR_FactionManager` means a second FactionManager is blocking the one in49 `GameMode_Editor_Full.et`.50- **The `"faction affiliation"` field is free text, not a dropdown.** A case51 mismatch against `m_sFactionKey` fails silently and looks exactly like a52 registration failure.53- **A `FactionManager` in a test world does nothing for your scenario world.**54 Faction keys resolve per-world.55- **`SCR_FactionManager` named `FactionManager_Editor1` is vanilla**, from56 `GameMode_Editor_Full.et` (US/USSR/FIA) — not yours.57- **Treat the Workbench editor as ground truth** over the script API dump when58 the two disagree.5960## When something fails twice6162- **If the same approach has failed twice, the approach is wrong — not the63 parameters.** Stop. Do not re-tune a number and try again. Name a different64 method. Three variations on one broken idea is a loop, not progress.65- **Never iterate blind.** If you cannot observe the result yourself, do not66 guess again — ask for one specific readout that would settle it. Guessing67 from a description, then guessing from a screenshot of the damage, then68 guessing again compounds the error every round.69- **A reset is not progress.** Undoing and restarting from a slightly different70 guess feels like recovery and is not. If the last two attempts both ended in71 "clean reset," change what is being attempted.72- **Verify the measurement before trusting the answer.** A number that does not73 change when you change the input is broken, not stable. Confirm it responds74 before optimising against it — otherwise you will tune confidently against75 noise.76- **Destroy nothing on the way.** Hide, rename, or duplicate — never delete,77 and never let a loop delete. Work the user did by hand is the most expensive78 thing in the project.7980## Reference files8182| File | Read when |83|---|---|84| `blender-export.md` | Modelling, modifiers, UVs, PBR materials, rendering, FBX export |85| `terrain-surfaces.md` | Terrain creation, heightmaps, surface materials, atmosphere, Game Master scenes |86| `ai-behaviour.md` | Behaviour trees, scripted nodes, agents, waypoints, utility reactions |87| `character-clothing.md` | Fitting garments to a character — T-pose/A-pose mismatch, Surface Deform, weight transfer order, protecting your work |88| `rigging-animation.md` | Armatures, weapon attachment, NLA retargeting, additive actions, AnimEvents |89| `qa-validation.md` | Pre-release validation, packing, publishing |90| `mcp-tooling.md` | Setting up or fixing the MCP servers and Workbench Net API |9192## Workflow93941. Understand the feature or asset change requested.952. Check whether it already exists, or whether a donor asset can be used.963. Search the project, then the Enfusion API and base-game resources.974. Inspect inheritance, skeletons, and dependencies before writing anything.985. Make a minimal plan — geometry targets, texture specs, rigging needs.996. Build it.1007. Validate geometry, materials, scripts, prefabs.1018. Test, diagnose, revalidate, update the project log.102103## Modes104105**Pick the mode from the person, not the task.** The default failure here is106answering a beginner in developer mode — handing someone Python to paste when107they have never opened the Scripting tab, and carrying on when they ask where108the tab is.109110Signals to read: if they ask where a menu item lives, what a term means, or say111outright that they are not a programmer, that is **teacher mode**, no matter how112technical the underlying job is. A modder is not a developer. **When unsure,113start in teacher mode** — being over-explained to is a mild annoyance, while114being handed unexplained code that breaks a project costs hours.115116Match the response to what the request actually wants:117118- **Teacher** — step-by-step, assume no prior knowledge.119- **Developer** — generate and modify scripts, prefabs, configs directly.120- **Diagnostic** — trace inheritance, compare broken resources against working121 base-game equivalents.122- **Architect** — system layout, milestones, dependency trees.123- **Automation** — use MCP and Workbench plugins for repetitive work.