This document explains the process of creating Mods for the game Soundself.
The modding system is still in its early stages with new adaptations to make it a more user friendly system coming in the future.
Mods in Soundself are essentially going to copy and match the folder structure at the install location for whatever files you are wishing to modify. They will cross reference the file from the main directory and if it was a text file it will create a .diff file in its place. Mods can also substitute alternative files for non-text assets and introduce new files.
Soundself would obviously be needed in order to test out your mods. In order to edit the files you can use a code editor like Notepad++ but I recommend Visual Studio Code for editing ozone files. If you are going to use Visual Studio code install the C/C++ language extension. Then under Settings/Text Editor/Files:Associations add " *.ozone " as " cpp ". While it’s not perfect to read Ozone it helps with some syntax highlighting. VSCode is also wonderful for searching certain keywords used in each of the soundself files, which can be helpful when you are trying to find where certain code is declared.
Mods can target the following file types:
- .ozone scripts (diff/patch)]
- .vert shaders (diff/patch)
- .frag shaders (diff/patch)
- .wav .ogg (audio)
- .png .jpg .jpeg .bmp .gif (and other image files)
- .webm (video)
- .otf .ttf (fonts, excluding the engine font in plaid)
- .obj (3D models)
Ozone, vert and frag are text files and would be changed into .diff files in the Mods directory when first run. The modding system will allow multiple .diff's from different mods to be applied to the same file as long as they don't conflict. For example one mod might change a line in a file and another mod might add a few lines in the same file. All the other files types would just create a copy of itself.
For this initial modding system we will have designated modding folders where you will place your current mods.
First you will need to edit the ss_config.ini file in the soundself directory. Simply erase the semi colon before “#set ozone.mods” and “#set ozone.modding” and run the game once in order to create the folders. “#set ozone.mods” is where you will name the mods you will load, “#set ozone.modding” is to enable the mod building.
The modding folder is where you would place the mods you are developing. The modding folder is the only folder you should be adding files to. It would be located at C/Users/"You"/Appdata/Roaming/com.soundself. app/modding.
When a mod is first run it would build to a mods folder. The mods folder is where Soundself would load the Mods from. It is located at C/Users/"You"/Appdata/Roaming/com.soundself. app/mods.
In order to get mods loaded correctly you have to duplicate Soundself's folder tree, and any file you wish to mod, into your mod's subfolder.
For example let's say you want to modify one of the shaders in game to change the color of a certain effect and you wish to call this mod “Red_Mod”.
- The shader you wish to edit is located at Soundself/soundself/post/colorcorrection.frag
- In your “Red_Mod” folder you will make a copy of colorcorrection.frag and match Soundself’s folder structure. (eg….. Red_Mod/soundself/post/colorcorrection.frag)
- You will place this folder inside the modding folder (eg…..Roaming/com.soundself. app/modding/Red_Mod)
- When the game is run it would build and create the mod folder on it own at Roaming/com.soundself. app/mods
- To enable the mod and mod building you will need to modify 2 lines in the ini file ss_config.ini in your main soundself directory.
- First line to modify is “#set ozone.mods”. Type in the name of the mod you wish to load. (eg.. #set ozone.mods Red_Mod,some_other_mod,some_other_mod2). Multiple mods can be loaded by this method being separated by a comma.
- Second line to modify is #set ozone.modding and add a 1 to the end of it. (eg.. #set ozone.modding 1)
If you can’t get past the initial screen and an error comes up there was some issue in how you loaded your mod or there is a conflict in the code you changed.