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).