SOCOM Legacy Modding

Changelog / format versions

Status: Format onlyOwned by: redotcom/docs/specs/2026-10-25-pack-framework.md, redotcom/packages/creator-contracts/src/packs.ts, redotcom/packages/creator-contracts/src/rules.ts, redotcom/packages/viewer/src/console/adapters/mods.ts, redotcom/packages/viewer/src/packs/pagePacks.ts, redotcom/packages/viewer/src/packApplyOverlay.ts, redotcom/tools/hdPackThunderstore.ts

The pack formats and the contract versions, newest first, each with what it does today.

Status: Format only. The current format, s2u-pack version 2, is checked and stored but not applied in the game. The earlier formats below each keep their own status, given with each entry; they are the ones a player can see work today, loaded in Home > Experiments > Mods.

The current versions

Read from the pack contract's code. A pack names the engine contract it needs in its contract range; the build publishes its own version, and a pack whose range does not include it is refused (pack.CONTRACT_MISMATCH).

namevaluewhat it is
PACK_FORMATs2u-packThe format every v2 manifest names.
PACK_FORMAT_VERSION2The formatVersion every v2 manifest names.
ENGINE_CONTRACT_VERSION0.1.1The engine contract this build publishes.
RULES_PACK_CONTRACT_FLOOR0.1.1The lowest engine contract a rules pack may admit. It stays 0.1.1 when the engine contract moves on.
RULES_VOCABULARY_VERSION0The version of the rules vocabulary (events, conditions, actions).
PACK_TARGET_USSCUS-97275The disc revision a pack's target names.

How the engine contract moves: under the caret ranges the project uses, ^0.1.0 takes any 0.1.x. An addition that breaks no existing pack raises the last number, so older packs keep loading; a change that would break packs raises the middle one.

History

Newest first. Dates are when the change landed in the code.

2026-11-07 -- Home > Experiments > Mods, and texture packs on every page

One loader for every earlier format: Home > Experiments > Mods. Drop a zip, a folder or loose files, or choose a file; each pack is listed with its kind, its size (an HD pack's decoded) and where it applies, with a switch and Remove; one texture pack is chosen at a time. A pack wrapped in Thunderstore's package format is unwrapped and read as the pack inside. Texture packs and HD texture packs now apply on every page -- the main game's matches, online ones included, its menus, the Forge and the test room -- under the MODERN and PS2 pictures, at once, behind an "Applying pack... n/N" overlay. Removed: VIDEO MODE's "HD (GoE Soul)" picture, the test room's HD switch, and its texture-pack chooser and "Import pack (.zip)" button; the test room's mods panel is one line and Reload map. A temporary "Add test HD texture pack" button downloads the project's test HD pack until the pack is on Thunderstore. The project's tool for the HD pack (tools/hdPackThunderstore.ts) can write it as a Thunderstore package. Today: works -- texture packs and HD texture packs on every page; data mods and the model pack in the test room only. See Testing a pack locally.

2026-10-31 -- HD texture packs import from a zip

The test room's "Import pack (.zip)" took an HD texture pack and kept it in this browser only, one pack at a time. An earlier-format pack, not a v2 one. Until 2026-11-07 it was held: imported and stored, drawn nowhere. Today: works -- dropped into Home > Experiments > Mods (the test room's button is gone), chosen there, drawn on every page. See The earlier formats.

2026-10-27 -- Thunderstore's package format, and the rules-pack checks

  • The store's root files (manifest.json, icon.png, README.md, optional CHANGELOG.md) may sit beside a v2 pack's s2u-pack.json, outside the pack's identity. New code pack.STORE_FILE for a files row that names one.
  • The store's rules held as data (THUNDERSTORE_PACKAGE_RULES), the export mapping our id and version onto the store's, and a store package check, with the store. codes.
  • A rules pack must not admit an engine before 0.1.1 (pack.CONTRACT_FLOOR); its rules members must be JSON objects (pack.RULES_MEMBER_INVALID) whose capabilities agree with the manifest's handler claims (pack.CAPABILITY_MISMATCH).
  • A v2 pack can be imported: checked and stored. The import also reads .md, .gltf, .ktx2, .ogg and .wav members for v2 packs.

Today: format only for a v2 pack. Nothing builds a store package from a v2 pack, the project's store team is not decided yet, and the game loads nothing from the store; Home > Experiments > Mods reads a Thunderstore zip of an earlier-format pack you downloaded yourself. See Thunderstore.

2026-10-27 -- the rules vocabulary, version 0; engine contract 0.1.0 to 0.1.1

The events, conditions and actions a rules pack may use, frozen as data, with their budgets (RULES_VOCABULARY_VERSION 0). Because the vocabulary is an addition, the engine contract moved from 0.1.0 to 0.1.1, the last number, so packs written for ^0.1.0 keep loading. (The contract's first draft of this change said 0.2.0; it was corrected to 0.1.1 the same day.) A rules pack states ^0.1.1. Today: rules packs run in the Forge's local Play only, and the Forge is paused. See Rules and limits.

2026-10-26 -- options on a handler claim

A handlers claim may carry options: plain JSON data for the claimed handler, its size and nesting bounded by the contract (PACK_HANDLER_OPTIONS_BYTES_ADAPTATION, PACK_HANDLER_OPTIONS_DEPTH_ADAPTATION), its content checked by the handler. Today: format only.

2026-10-25 -- s2u-pack version 2

The v2 pack: a manifest, s2u-pack.json, with an id, a SemVer version, a target, an engine contract range, kinds (content, rules, system), sides, dependencies, a sha256 and size for every file, intents and handler claims; the pack hash as the pack's identity; the bounds; the pack. refusal codes; and one model of findings and reports. Engine contract 0.1.0. The three earlier formats are read through adapters as v2 content packs, so one checker covers them all. Today: format only -- checked and stored, never applied.

2026-10-20 -- the model pack (s2u-model-pack version 1)

A folder or zip with models.json and GLB files, drawing a GLB in place of one of the game's meshes. Collision stays the game's. Today: test room only, with modmodels in the page's address; added and switched in Home > Experiments > Mods.

2026-10-18 -- s2u-mod version 1

A zip or folder with mod.json, replacing files of the game's data with your own bytes, chosen in the test room's mod panel. The bytes are substituted, never run. Today: test room only, added, ordered and switched in Home > Experiments > Mods. Refused in a lobby match and in the replay viewer.

2026-10-08 -- texture packs (s2u-local-texture-pack version 1)

Replacement images for one map's opaque textures, served from a local folder the repository never holds. They change the colour of solid texels only, never how anything is drawn. Today: works on every page, on its own map, chosen in Home > Experiments > Mods.

Not yet in any version

  • JSON Schema files for editors.
  • A command that builds a Thunderstore package from a v2 pack.
  • Applying a v2 pack in the game, pack code of any kind, a pack's own audio in play, and packs in online matches.

On this page