Skip to content

# Publishing recommendations

## Ship no game bytes

A mod must not contain data derived from a Spyro disc: no models, textures, sounds, level payloads, or code overlays, and no patch whose plaintext is game data. Ship a generator the player runs once against their own disc image, writing the derived files into `assets/` on their machine. State what the generator needs to run (a shell, python3) and how a Windows player runs it, from Git Bash or WSL or by hand. Original content (a synthesised sound, a painted texture, a model you built) is yours to ship.

## Carry a licence

Put a `LICENSE` file at the mod root. Code and assets may carry different licences; say which applies to what. Content by someone else ships only with that author's recorded permission, credited in the README.

## Pin the API as a minimum

`api = N` is the lowest engine API version the mod needs: the version that introduced the last entry the mod calls. The engine refuses a mod that asks for a newer API than it has, before the entry point runs. The API struct is append-only, so a mod built for api N loads on every later engine.

## Prefer source

A mod that ships `src/*.c` compiles on the player's machine against the engine's `sdk/`, with the bundled toolchain on Windows and the system compiler on Linux. It needs no build on the author's side, works on every platform the engine ships for, and recompiles when the engine's SDK changes.

## Prebuilt objects

A mod with no `src/` and a `.build/<id>.so` or `.dll` loads that object as-is on any platform. A mod with `src/` uses its prebuilt object only when no compiler resolves; a compile error disables the mod rather than falling back.

Every object must export the ABI descriptor: compile `<sdk>/openpete_mod_abi.c` alongside the sources, or put `OPENPETE_MOD_ABI_DEFINE()` in one of them. The engine refuses an object with no descriptor, one built for a newer API than the engine, one whose API struct is larger than the engine's, or one built before the layout freeze at api 11, and logs both versions.

## Package

A `.zip` with `mod.toml` at its root, plus `src/`, `shaders/`, `assets/`, `README`, and `LICENSE`. Players drop it into `mods/` unchanged. Do not zip a wrapping folder, and leave out `.build/` (compile cache) and `data/` (per-player state).