Modding: Work In Progress
Reskin, remodel, and fully replace Holdfast character uniforms, heads, and flags.
This page collects the current uniform modding pipeline from several years of notes in the modding channels, SDK release notes, and the SDK Upgrade Guide. Content is still being checked against the live SDK. Sections marked Verify need confirmation.
EngineUnity 2022.3.62f1 (SDK v2.31)
Rigging3DS Max (required)
ModellingBlender / 3DS Max
DistributionSteam Workshop

How Uniform Modding Works

"Uniform modding" covers everything from simple retextures (repainting the example British Line Infantry that ships with the SDK) up to fully custom character models (new meshes, new heads, backpacks and hats, multiple random variants) and custom factions (replacing a base faction's name, flag, and UI via a script mod).

What You Can Build

  • Retextures/reskins: edit the diffuse, normal, and specular textures of an existing uniform. The fastest entry point; no 3D work needed.
  • Custom models: new uniform meshes, hats, backpacks, and heads rigged to the Holdfast skeleton. Requires 3DS Max for the rigging step.
  • Multi-uniform mods: one Workshop item holding a whole regiment's collection, with up to 7 uniform bodies and 7 heads plus random variants (added in SDK 5.0).
  • Flag mods: custom regimental flags, which ship inside a flag-bearer uniform mod.
  • Custom factions: faction name, flag, and spawn-menu replacement through the BaseCustomFactionMod script mod.
Uniform mods and cross-play: uniform and flag mods don't flip the server platform, but they're only visible to Steam players. Console players see a generic uniform or flag instead. See Mods and Consoles.

Two Updates That Changed Everything

  • SDK 5.0 (May 2022): added multi-uniform mods, shared texture atlases, and random variants.
  • URP / Unity 2022 (v2.15, Jan 2024): broke old materials, old extraction tooling, and old tutorials. Anything written before 2024 needs checking against the SDK Upgrade Guide before you follow it.
The most-linked tutorial, Apex's Holdfast Uniform Mod Guide (2020), predates both updates. Its author describes it as very outdated. Use it for concepts (rigging, weighting, UV work), not for exact steps. For SDK installation, follow AGS SDK Tutorial #1 instead.

The Pipeline at a Glance

The community pipeline has been stable in outline since 2020:

  1. Get the assets: extract the uniform and head meshes plus texture atlases from the game files with AssetStudio, or download them from the community asset packs (see Getting the Game Assets).
  2. Edit textures in GIMP, Photoshop, paint.NET, or Substance Painter (see Texture Editing).
  3. Model and rig: model unrigged parts in Blender if you like, but rig in 3DS Max. It is the only program that works with the Holdfast character skeleton (see Modelling and Rigging).
  4. Import into the Unity SDK: assign materials, name LODs correctly, and run the Uniform System / Custom Uniform Definition setup (see Importing & Building).
  5. Build and upload to Steam Workshop, then load the mod on a server via mods_installed plus load_mod in each map rotation (see Loading Uniform Mods on Servers).

Getting the Game Assets

You need the game's uniform meshes and texture atlases as a starting point. There are two routes.

Route 1: Community Asset Packs (Recommended)

Skip extraction entirely. Community members maintain Google Drive packs of extracted uniforms and textures:

Route 2: Extract Them Yourself (AssetStudio)

Stock Perfare AssetStudio broke with the URP / Unity 2022 update. Use the maintained fork: aelurum's AssetStudio v0.18.0. It is confirmed working as of 2026 but is slow to load the full Holdfast asset set.
  1. Open the game's data folder in AssetStudioGUI and load all sharedassets and level files. Asset locations shuffle with every game update, so don't trust any specific file number you read in an old post.
  2. Search "uniform" and filter by Mesh. Newer uniforms tend to live in scene/level files.
  3. Extracted meshes come out grey and untextured. Identify models by shape and apply textures separately.

Naming Conventions (For Identifying Extracted Assets)

  • Body meshes are all named Uniformi_1_LOD0. Every uniform has the same name, so you have to open each one and look at it.
  • Head meshes are Ras_<number>.
  • Character texture atlases: LandUnits_CharacterAtlas_Diffuse, Common_CharacterAtlas_Diffuse, Prussians_Diffuse, Russians_Diffuse, Cavalry_Rocketeers_Diffuse.
  • Musket textures: search "musket" in the level files.
  • Each faction has its own texture atlas, except French and British which share one (they were the first factions added).
Extracting game files is tolerated but unofficial. The developers have never endorsed the extracted-asset links, so treat the packs as community-maintained, not official.

Texture Editing

Tools

GIMP (used in the canonical guide), Photoshop, paint.NET, and Substance Painter (for detailing custom models) are all in active use. Pick whatever you know.

How Holdfast Textures Work

  • The diffuse map only carries colour. Wrinkles and shine come from the normal and specular maps applied in Unity.
  • Roughness lives in the alpha channel of the specular map. The game's specular workflow is dated, but that is where it reads roughness from.
  • Holdfast uniforms are atlased: custom UVW maps must be rescaled to align with the atlas. The texture itself can be any standard size (2048, 4K, 8K).
  • You cannot put one faction's texture onto another faction's model. The UV unwraps differ per model, so you must move UV islands to fit.

Practical Techniques

  • Instant grime and wear: overlay a dirty wall texture on the clothes layer, set the blend mode to Multiply, and lower opacity. This also breaks up texture tiling.
  • UV registry guide: export the UV wire render as a PNG and use it as an alignment layer in your image editor.
  • Sharper detail: increase island margins in the unwrap for control, and stack identical parts upscaled for extra texel density.
  • Text and insignia: bake normal-map decals in Blender (high-poly to low-poly bake).

Fixing Normal & Specular Maps

Unity stores normal maps in DXT5 with the red channel moved into the alpha channel, so freshly extracted normal maps look broken and must be recomposed before use.

Manual GIMP Recipe

  1. Extract the normal map from the game files.
  2. Open it in GIMP and decompose it into channels.
  3. Compose a new map: old green becomes new red, old blue becomes new green, and set blue to 0.
  4. Export, and in Unity set the texture type to Normal.

An equivalent channel recipe from Stan's export/import video: "Red to Blue, Alpha to Red, delete Alpha (the blue is reconstructed)".

Why: Unity puts the normal red channel in DXT5 alpha for quality. The blue channel is reconstructed in-shader as a math function of red and green, which only holds for normalized maps.
  • A small community-made normal-map fixer program by AMBLCO automates this; it is pinned in the mod-discussion channel.
  • Remember: roughness = specular map alpha. If your uniform looks wet or overly shiny, the specular alpha is missing or wrong (see Troubleshooting).

Modelling: Blender & 3DS Max

3DS Max is the only software that can rig to the Holdfast skeleton. The skeleton does not survive a Blender import/export round trip; Blender breaks the rig. Cinema 4D was used successfully in the early years, but all current guidance assumes 3DS Max.

The Hybrid Workflow

Model unrigged parts (hats, backpacks, medals, flags, even whole bodies) in Blender, export as FBX/OBJ, then rig in 3DS Max. This is the standard pattern used by most active uniform modders.

Practical tips:

  • Scale reference: open the example rigged model in 3DS Max and export it as .obj (not .fbx). You get an unrigged copy usable in Blender as a perfect size and scale reference.
  • When importing a Blender FBX into 3DS Max or Unity, remove or replace embedded materials to avoid material duplication.
  • Don't bother test-texturing in Blender; you will re-unwrap in 3DS Max anyway.
  • Restart-saver: periodically export your worked model as .obj to preserve sizing and UV fixes. You can re-import it over a fresh example file and re-assign materials.

Getting 3DS Max

Free via a student licence (proof of enrolment suffices), a 30-day trial, or an indie licence. Otherwise it costs at least a few hundred pounds. A Blender export plugin that mimics 3DS Max output has been discussed but nobody has built one.

Custom Heads

  • MakeHuman: generate a head, decimate to roughly 3000 polys in Blender, strip the body and tongue, and aim for a final head of about 1200 to 1500 polys. Reuse spare atlas space for hair textures.
  • Avatar SDK can generate a head mesh from a photo.
  • If you use a base Holdfast head, just assign the base head material in Unity.

Poly Budgets

Game bodies run about 10k to 15k polys. Six-figure poly counts have been flagged as a performance problem in the past; keep custom uniforms in the same range as the stock ones.

Rigging: The Skin Wrap Method

This is the current recommended rigging recipe (Apex, 2025). It transfers the example model's skin weights onto your new uniform automatically.

  1. Import your new uniform into the 3DS Max scene alongside the example British model. The base rig only exists on the example British model; all extracted uniforms and heads are boneless.
  2. Modify your uniform, not the example model.
  3. When the model is done (hands included), add a Skin Wrap modifier to your uniform, add the example model to it, check "weight all points", then click "convert to skin".
  4. Delete the Skin Wrap modifier. Your uniform is now fully rigged. Verify the weights on ammo boxes and scabbards.
  5. Create lower-poly copies as LOD1 to LOD4 and skin-wrap LOD1 to LOD3. For LOD4, bend the arms down and leave it unrigged, and add a low-poly head coloured with the hands texture (it receives no global head at that distance).

Weight Fixes You Will Need

  • Pauldron and shoulder vertices should be weighted to the clavicle, not the arm.
  • To pin a stray piece: Skin > Envelope, "select element" on the offending piece, and set Abs. Effect to maximum.
  • "Scarecrow" symptom (only the head animates): the uniform LODs are missing their Skin modifier.
  • Uniform stretched to infinity in game: broken bone binding. Redo the rig.

Attached Objects

  • Backpacks, hats, and other attachments must be merged into the Uniform or Head mesh and weighted to bones. Unity only accepts meshes named "Head" and "Uniform"; child meshes are ignored.
  • Keep ideally two skinned mesh renderers per LOD (Uniform + Head); merge backpacks into the uniform.
  • Rigid-prop exception: for objects that shouldn't deform (e.g. a shell casing around the player), keep them detached, unpack the prefab in Unity, and nest the object inside the uniform. It follows the player but stays level.

LODs & Naming Rules

Naming drives the whole uniform setup tool. Get these exactly right.

  • Uniform bodies: Uniform_1_LOD0 through Uniform_1_LOD5. Heads: Head_1_LOD0 and so on.
  • Increment the number for each variant (Uniform_2, Head_2, ...) and the setup tool detects the permutations. Up to 7 heads and 7 uniform bodies, numbered 1 to 7.
You must fill all LOD slots. The setup script does not reuse LOD0 automatically. A mod with only LOD0 renders invisible to its own wearer in third person until LOD0 is copied and renamed into the other slots.
  • Proper reduced-poly LODs save about 40% memory. Generate them with Simplygon in 3DS Max, or duplicate the high-poly mesh into every LOD slot as a shortcut (this also avoids the old "disappearing head" bug, at a memory cost).
  • First-person model: the old method was to clone Uniform LOD0, remove the hat, and rename it FirstPerson_[Uniformid]_LOD0. Since SDK v2.19 there are 5 generic first-person models (3 Nations at War, 2 Frontlines) with colour variants, so a custom first-person model per uniform is optional. If your mod includes one, it is used instead of the generic model.
  • Current prefab layout (post-2024): the hat is now part of the uniform and there is no separate head model. Copy the setup of the current example British model in Unity rather than following older screenshots.
  • A Global Head system exists for using the game's standard rotating heads with your uniform.

Variants, Heads & Multi-Uniform Mods

SDK 5.0 added packing multiple uniforms into one mod. Benefits:

  • Smaller downloads via shared texture atlases.
  • Fewer draw calls, which means better client FPS.
  • One Workshop ID for a whole regiment's collection.
  • Random variants, e.g. random pant colours on spawn.

How Variants Behave

  • Variant selection is random, not player-chosen. Body variants land in separate spawn-menu slots while heads randomise.
  • Different hats per head is a common pattern (e.g. seasonal shako covers).
  • There is no hard limit on uniform slots per mod. Performance depends on how you build the models and textures: atlas and share as much as possible.
  • Variants sharing the same material and texture cost nothing extra. A new material per variant adds a draw call unless GPU instancing is enabled.
Pre-5.0 trick, still seen in old mods: to rotate whole looks (militia or pirate outfits), modders attached uniform+head together, named the combined mesh Head_1_LOD0, Head_2_LOD0 and so on, and hid a tiny cube named Uniform_1_LOD0 under the feet. It works but duplicates the full body per head and bloats the mod. Use real variants instead.

Importing & Building the Mod

Material IDs

Assign material IDs per element in 3DS Max (Editable Poly > Element > set ID) with separate IDs at minimum for Head/Hat and Uniform/Hands under a Multi/Sub-Object material. Without them, Unity texturing ignores your parts.

Project Layout

  • The Mod Asset Directory includes everything in it, referenced or not. Keep source files (PSDs, unused TGAs) in a separate [Mod Asset Directory]Source folder; referenced assets there are auto-resolved into the build.
  • Don't put uniform assets in project subfolders. Mods fail to display and it can even break server disconnects.
  • Clean the mod build folder before rebuilding with a new mesh. Stale UniformDefinition objects and duplicate heads/uniforms quietly double your mod size.

Import Settings

  • The FBX export warning "The FBX file format cannot represent the transformation of some nodes... adjust Bone binding matrices" is standard and harmless.
  • Missing mesh pieces after Unity import (lost button plates and similar): set Normals: Calculate on the FBX inspector.
  • Pink textures mean a render-pipeline mismatch: verify you are on the exact SDK Unity version, run the SDK's broken scene fixer, or re-import the FBX's embedded materials.

Uploading

Build the mod and upload to Steam Workshop from the SDK. Steam must be running and logged in, and the Workshop terms of service accepted. Beta Workshop uploads and downloads are supported (-betaWorkshop launch parameter, use_beta_workshop config). Upload pipeline breakages do happen after game updates; if uploading is broken for everyone at once, wait for a patch.

Optimisation & Compression

The community compression checklist (expect to roughly halve the file size):

  1. On the FBX, before scene placement: Model tab, set Mesh Compression: Medium and uncheck Read/Write Enabled.
  2. Animation tab: uncheck Import Animation, then Apply.
  3. All textures (including menu sprites, heads, hands): enable Crunch Compression at quality around 80.

Additional guidance:

  • Converting TGA to PNG shrinks textures when no alpha channel is needed.
  • Keep two skinned mesh renderers per LOD (Uniform + Head).
  • Share texture atlases between variants and uniforms wherever possible.
  • Real reduced-poly LODs save about 40% memory versus duplicated LOD0 copies.
Mesh compression nuances: Medium mesh compression is the standard advice for uniforms, but variant-heavy mods have reported artefacts with it, and flag models explicitly need mesh compression off (and Read/Write on). See Flags.

There is no official tool for auditing how heavy a Workshop uniform mod is. To gauge a mod's cost, check batch and vertex counts in-game. Skins-per-server limits are about optimisation, not a hard cap; a well-built 15-skin event server runs fine.

Flags & Flag Bearers

A custom flag is tied to a uniform mod. A standalone flag will not appear as a flag-bearer option; it must ship inside a flag-bearer uniform mod, assigned to that uniform's class.

The flow:

  1. Make the flag model with its own UV map (separate from the uniform) and a double-sided material.
  2. On the flag model's import settings, enable Read/Write and disable Mesh Compression (the Flag System Window warns about both).
  3. Make it a prefab, run the SDK flag setup, and build it as part of the uniform mod.

For flags placed on maps (not carried by players), use the Material Switch script approach instead; see Retexturing Props.

Loading Uniform Mods on Servers

Custom skins only appear when loaded by the server. Client-side texture-only mods are possible (textures, not 3D models) and are visible only to you.

Config Entries

  • Add the mod globally with mods_installed <workshopid>. Use mods_installed, not mods_installed_server_only, for uniform and faction mods.
  • Add load_mod <workshopid> to every map rotation individually. The classic failure "it downloads but isn't selectable under any class" means the mod was installed on the server but not added to that map's rotation.
  • Keep a comment ledger, e.g. mods_installed 2441182927 #modded grenadier french.
  • Restart the server after adding mods.

See Server Configuration for the full config reference.

Forcing Modded Uniforms

exclusive_modded_uniforms forces modded uniforms for the round, and since January 2024 it can target specific factions:

exclusive_modded_uniforms british french
  • It is round-based, so you can toggle it per rotation entry.
  • Classes without a custom uniform are excluded from the match while it is active.
  • Known quirk: cavalry spawn screens behave oddly under it; modded cavalry skins may not slot in cleanly. Verify

Facts Server Owners Should Know

  • A uniform mod's faction and class cannot be changed via server config. The modder bakes them in and must rebuild and reupload to move a skin to another faction or class.
  • RC commands accept uniform IDs: rc carbonPlayers spawnSpecific <Faction> <Class> <Name> <Regiment> <uniform id> spawns a bot wearing a specific modded uniform.
  • Consoles: since cross-play, console players cannot join servers running script or map mods, and uniform mods are invisible to them. See Mods and Consoles.

Custom Factions

Custom factions (replacing a base faction's name, flag, and spawn-menu imagery) are done with eLF's BaseCustomFactionMod script mod:

Notes that the walkthrough tends to omit:

  • A code IDE is required. Nearly every reported setup failure came from Visual Studio not being installed or not linked as the script editor (Unity: Edit > Preferences > External Tools).
  • The mod replaces the faction name and flag including the spawn-menu flag, and AGS provided image templates so custom factions match the official style.
  • It is fragile across game UI updates. It has broken and been fixed repeatedly (2023, 2024, 2025) and was reported working again in early 2026. Always re-download the GitHub scripts after a game update and copy the Scripts folder into your mod.
  • The mod's sound-replacement part can be reused for shout and voice replacement even when the faction override is broken.

Retexturing Props & Cannons

Runtime texture, material, and mesh swapping lets a mod reskin game props (cannons, buildings, and similar) without replacing the map.

  • AMBLCO's SDK custom scripts change textures, materials, and meshes at runtime: tutorial video with a script download in the description. Caveats: the mesh switch does not work on animated or scripted objects such as doors, and reliability reports conflict since the URP update. The texture replacement approach was still in use on live servers as of 2025. Verify
  • Stan's export and re-import video (link) covers manually extracting and re-importing game models and materials, including the normal-map channel fix.
  • Artillery and cannon models cannot be replaced, but their textures can (custom ACW cannon skins exist). Horse saddles cannot be modded, and dragoon saddles cannot be assigned to hussar uniform mods.

Troubleshooting

Recurring problems and fixes. Press F2 during loading or read the server log to see the underlying error.

Symptom Cause & Fix
Uniform doesn't appear in the spawn menu The mod isn't in that map's rotation config. Check the output logs, then the Custom Uniform Definition.
Endless download/reinstall loop when joining, or endless load with NullReferenceException ... _HandleUniformMod Misconfigured CustomUniformDefinition. Re-run the uniform setup and rebuild.
Wearer can't see their own uniform in third person Only LOD0 was filled. Copy LOD0 into all LOD slots. See LODs & Naming Rules.
Headless characters on spawn LOD setup issue. Duplicated full-mesh LODs prevent the disappearing head.
Only the head moves ("scarecrow") Missing Skin modifier on the uniform LODs.
Uniform stretched to infinity in game Broken bone binding or rig. Redo the Skin Wrap step.
Wet or overly shiny uniforms Missing alpha channel on the specular map (roughness lives there). Residual shine near water reflections is a game-side issue you can't fix.
Pink textures in Unity Wrong Unity version or render-pipeline mismatch. Verify the exact SDK Unity version, or run the SDK's broken scene fixer.
Mesh pieces missing after Unity import Set Normals: Calculate on the FBX inspector.
Skin appears once per mod update in the class selector Stale build artifacts. Clean the build folder and rebuild.
All custom uniform definitions wiped after clicking Save Model Bug after the May 2025 materials update. Verify current status
All uniform mod names showing as [{0}] Localisation bug from December 2025. Verify current status
FBX export warning about bone binding matrices Standard and harmless. Ignore it.

SDK Version History (Uniform-Relevant)

Release notes that changed how uniform mods are made. Full upgrade steps live on the SDK Upgrade Guide; full game changelogs on Game Release History.

Version Unity What Changed for Uniform Modders
v2.31 (current) 2022.3.62f1 Unity bumped to the last LTS release of Unity 2022.
v2.27 2022.3.53f1 Added "Allow Backpacks" checkbox to the Uniform System Window (NaW factions); added Austrian to the Workshop upload faction dropdown.
v2.19 2022.3.11f1 Added the generic first-person model system (5 models with colour variants; custom FP models optional). Renamed "Uniform Data" to "Uniform Random Variants", "Class Sprite" to "Uniform Sprite", "Class Greyed Out Sprite" to "Head Sprite". Fixed officer lines drawing over modded uniforms and URP-shader shadow issues. Flag System Window now warns about Read/Write and Mesh Compression.
v2.15 2022.3.11f1 Built-in Render Pipeline to URP. Old materials and Holdfast shaders removed; auto-conversion exists for common shaders but rebuilding with URP shaders is recommended. Removed the "greyed out" sprite requirement. Added Austria to the faction enum and Beta Workshop support. Broke stock AssetStudio extraction and most pre-2024 tutorials.
Game 2.5 n/a Holdfast SDK 5.0: multi-uniform mods, shared atlases, random variants, and 1500+ new assets in the level, uniform, and flag editors.
Game 1.3 n/a Holdfast SDK V1 released: the first uniform and flag editor.

Tools & Resources

Tutorials & Videos

Tools

Asset Packs

Repos & Wiki Pages

Commissions

A community-maintained list of uniform modders taking commissions is pinned in the mod-discussion channel on the Workshop Discord.

Known Limitations & Open Questions

Things the community has hit the edges of. If you solve one of these, share it in #mod-support and update this page.

  • Blender rigging: not possible. A Blender exporter plugin that mimics 3DS Max's FBX output has been proposed but never built. This is the biggest gap for uniform modders.
  • Copying a rig between similar uniforms while preserving Abs. Effect weight values in 3DS Max: not possible. Skin Wrap partially addresses it.
  • Per-config faction/class reassignment of uniform mods: requested repeatedly by server owners; not implemented. The modder must rebuild.
  • Saddle modding: not possible, and saddle types cannot be assigned to cavalry uniform mods.
  • Mod optimisation auditing: no official way to measure how heavy someone else's Workshop uniform mod is.
  • Ship and artillery model modding: only texture-level replacement has been demonstrated.
  • Weapon skins: stated as an intent by the developers in 2021; never shipped.
  • Uniform mods blocking map rotation (reported March 2026): unresolved.

Support

Got a question that's not covered in this documentation?

We will gladly give you a helping hand should you require, so don't shy away from asking any questions. You will also find members within the community familiar with the toolset willing to do so.

Join the Official Discord, then head to the #become-a-modder channel and click the button to get the Modder role. This will unlock all channels concerning the discussion of modifications and scripting, including #mod-support.

Discord: Holdfast Workshop