Skip to content
Back to skills

Saints Row Modding

ASecurity

Use for Saints Row 3/4 PC modding and the srforge workbench.

  • 5 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 3, 2026
ai-agentspythongoshellbashgit

Works with

  • cli
  • mcp

Security analysis

A100/100

Scanned September 3, 2026

npx -y skills add ShugokiFable/Ultimate-AI-Starter-Bundle --skill saints-row-modding --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Saints Row Modding?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Saints Row Modding
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/shugokifable-saints-row-modding/badge)](https://www.skillsdirectory.com/skills/shugokifable-saints-row-modding)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
---
name: saints-row-modding
description: Use for Saints Row 3/4 PC modding and the srforge workbench.
---

# Saints Row modding (SRTT + SRIV family)

Load `game-mod-memory` and `game-mod-versioned-workspace` before first write (router rules apply).

## Targets

| Game | Notes |
|---|---|
| Saints Row: The Third (original PC) | asm_pc version **0x0B** |
| Saints Row IV / Re-Elected | asm_pc version **0x0C**; Workshop SDK exists |
| Gat Out Of Hell | Shares SRIV formats (0x0C) |
| SRTT Remastered | DIFFERENT engine/build — NOT covered; do not pretend |

## Verified binary formats

Details + struct layouts: `references/formats.md`. Headlines:

- `.vpp_pc` / `.str2_pc` = Packfile **version 0x0A**: 0x28-byte header
  (descriptor `0x51890ACE`, header CRC over bytes 0x0C..0x28), 0x18-byte
  entries, 2-aligned name block, payload. Compressed+condensed archives are
  ONE zlib stream over all payloads in order.
- `.asm_pc` = Asset Assembler (`0xBEEFFEED`): 0x0B (SRTT) vs 0x0C (SRIV)
  differ by exactly ONE byte per container (compression_type). Repacking a
  str2 REQUIRES updating its ASM container: `PackfileBaseOffset`,
  `TotalCompressedPackfileReadSize`, per-primitive CPU/GPU sizes
  (gpu file = same name with `.cNNN` -> `.gNNN`). Missing/failed ASM update
  must FAIL the build, never ship silently.
- `.xtbl` = tab-indented XML; `<Name>` child TEXT is the record identity
  (attribute-based parsing breaks duplicates). Preserve comments/format.
- `le_strings` = header id `0xA84C7F73`; buckets hash&mask keyed by Volition
  CRC; UTF-16-LE NUL-terminated records.
- Volition CRC = standard CRC-32 table, init 0, no final xor, lowercase input.
- Load precedence: loose files > `patch_compressed.vpp_pc` >
  `patch_uncompressed.vpp_pc` > base vpps. Always resolve the winner before
  editing; editing the base copy when a patch exists = wasted/incorrect mod.

## Toolchain (provenance-verified)

- **ThomasJepp.SaintsRow rev133** (Minimaul) — extract/build packfiles,
  Stream2 (ASM<->XML), strings, soundbanks. License permits redistribution
  WITH credit + link back (keep license.txt). Pin:
  `https://minimaul.saintsrowmods.com/files/tools/releases/ThomasJepp.SaintsRow-rev133.7z`.
  Known regression: CustomizationItemClone fails on many items >rev121 —
  use rev121 for cloning.
  Full source zip (has tool Program.cs sources):
  `https://minimaul.saintsrowmods.com/files/tools/saintsrowmods-src.zip`.
- **Gibbed.Volition** — older SRTT-era alternative; community forks vary.
- **Zinyak's Cache of Wonders** — official Volition SRIV SDK:
  `https://github.com/volition-inc/Zinyaks-Cache-Of-Wonders`
  (peg_assemble/mesh/rig/texture crunchers, vPkg, FBX converter).
  NO license file -> acquisition-only, NEVER redistribute.
- SRIV Workshop mods support partial-table merging (ship only changed
  records) — prefer that shape for table mods.

### Hard-won gotchas

- `ThomasJepp.SaintsRow.BuildPackfile.exe` throws
  `NotImplementedException` for game `srtt` (supports sr2/sriv/srgooh only).
  For SRTT builds use a native writer (see srforge below) and validate by
  reopening with TJ ExtractPackfile (cross-tool validation).
- ALL ThomasJepp CLIs crash with `Console.BufferWidth` IOException when
  stdout is piped AND args fail parsing. Never rely on `--help`; call with
  real arguments only. Usage signatures live in the source zip's Program.cs.
- `Stream2.exe <file.asm_pc> update` refreshes ASM from sibling str2 files;
  actions: clean/toasm/toxml/update.
- Legacy FBX converter needs Python 2.6 + wxPython + FBX SDK 2014 — isolate
  or defer; classic MANUAL ACTION REQUIRED dependency.

## srforge workbench (this machine)

**Run from the installed copy**: `%LOCALAPPDATA%\SaintsRowForge` — source
repo `S:\Apps\Saints Row Tools\SaintsRowForge` (GitHub: ShugokiFable/SaintsRowForge,
releases v0.1/v0.2, CI-protected). After changing repo code refresh the
install: `powershell -File Update.ps1` from repo root (robocopy /MIR).

Session setup:
```bash
export SRFORGE_GAME_SRTT="S:\SteamLibrary\steamapps\common\Saints Row the Third"
export SRFORGE_GAME_SRIV="S:\SteamLibrary\steamapps\common\Saints Row IV"
```

- Native readers/writers: `src/srforge/formats/{vpp,vpp06,asm,xtbl,strings,crc,lua}.py`
  (SRTT=vpp06 native writer too; SRIV=vpp0A; round-trip tested).
- Core: workspace/transaction/receipts/toolbroker/discovery/index under
  `src/srforge/core/` (+ `merger.py`). Game dirs are read-only sources;
  mods build in workspaces; receipts record per-op old→new values.
- CLI (`src/srforge_cli.py`, `--json` everywhere): doctor, asset find/origin/
  extract, xtbl query/patch/diff, mod new/patch/diff/build, deps import,
  **merge** — cross-mod table merge:
  `srforge merge --game sriv ModA/ ModB/` → three-way union vs vanilla,
  conflicts logged in merge-report.json (later-listed mod wins), non-table
  collisions flagged.
- MCP server: `mcp_server/server.py` — 13 stdio JSON-RPC tools incl.
  `sr_knowledge_search`; NOT registered globally (token cost) — launch on demand.
- Knowledge layer: `python %LOCALAPPDATA%\SaintsRowForge\scripts\KnowledgeSearch.py "<topic>"`
  searches `knowledge/*.md` + SOURCES.json upstream map.
- Tests: `python tests/run_tests.py` (18 checks, synthetic fixtures).
- Inbox/vault: downloads → hashed → `tools_vault/` + manifest.json (sha256 pinned).

Project state and resume pointers: `references/srforge-project.md`.

## Workflow skeleton

1. `srforge doctor` — game found? tools ready? capability matrix truthful?
2. Index vanilla (precedence-aware) BEFORE any extraction.
3. Workspace per mod; extract winning copies only.
4. Structured edits (XTBL ops / Lua lint), never blind regex on packed data.
5. Rebuild str2 -> ASM update -> reopen-and-verify package (zero exit code
   is NOT success).
6. Semantic vanilla diff; unexpected collateral changes = FAIL the build.
7. Receipt with evidence level; runtime behavior always needs in-game test.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…