Modding

A mod is a special plugin that can do things that alter the experience of the game.

Making your own

Any mods that need to be compiled for a 32 bit WASM freestanding environment.

Mod exported functions

A mod MUST provide atleast 2 functions: init and deinit The signatures are:

init

The init function is the first function called in a mod and is used for setting up variables, initializing a memory manager and defining systems.

update

There's no formal definition of an update function but you can emulate an update function by hooking on render (See hooking for more info on how to do this)

deinit

The deinit function is the last function called in a mod and is used for deleting the defined memory managers and deleting the defined systems

Engine functions

There are a couple of functions you can use. (All of them have to be defined with the IA32 Cdecl + system-V (Subsection 3.2.3) calling convention):

Logging

The logDebug function is only executed if the sideros binary AND the mod itself are compiled in debug mode.

Each of these logging functions will print either until a null character has been found, or the length is exhausted.
They will also print a special identifier in front of them with their logging level (So [DEBUG] for logDebug, [INFO] for logInfo, ...)

Hooking functions

Systems

TODO

Hooks

Hooks are special in a way that they can latch on to a function in the engine and be executed when that function is called.
See this for function signatures.

Special information

All hooks have a special parameter refered to internally as deltatime this is just the time how long it took between the previous call and this call.
As modders you must make sure there is a main.zig file in the tar root, otherwise the mod will be marked as invalid and will crash sideros.

Installing mods

Installing mods can be done by copying the produced and/or downloaded .tar file to the $SIDEROS_PATH/assets/mods directory.
All .tar files in that directory will be loaded and ran.