GameMod Reference

Jasmine 'Jazzrabbit' Stephens edited this page Apr 7, 2024 · 2 revisions

In Fuji, the GameMod class is the entry point for a lot of actions within code mods. GameMod is an abstract class with a number of virtual functions that you can override to subscribe to various events in the game. This page will document the various events and functions the GameMod provides and how to use them.

How To Use

To subscribe to gamemod events, simply override the function in your custom gamemod class:

publicoverridevoidOnActorCreated(Actoractor){// Your Code Here}

Make sure you use the override keyword to properly override the virtual function.

You only need to override functions that you actually need to use. Anything else can just be ignored.

These events will not get called if the mod is disabled (Other than OnModUnloaded), so you don't need to worry about managing that

Event Types

Events

Mod

EventDescription
OnModLoaded()Called when the Mod is loaded if it is enabled. Also called during reload after it gets enabled.
OnModUnloaded()Called after the mod gets disabled. Note: this does not get called immediately, but will get called when the game next reloads.
Update(float deltaTime)Called once every frame after the scene is updated. Note: This also gets called on the title screen and level select.

Player

EventDescription
OnPlayerKilled(Player player)Called when a player is killed.
OnPlayerLanded(Player player)Called whenever a player lands on the ground after a jump or fall.
OnPlayerJumped(Player player, Player.JumpType jumpType)Called when a player jumps. jumpType gives you what type of jump (i.e. Normal Jump, Wall Jump, Skid Jump, Dash Jump)
OnPlayerStateChanged(Player player, Player.States? state)Called whenever a player's state changes. state gives you the new state it changes to.
OnPlayerSkinChange(Player player, SkinInfo skin)Called when a player's skin changes.
OnItemPickup(Player player, IPickup item)Called when a player picks up something that implements IPickup.

Actor

EventDescription
OnActorCreated(Actor actor)Called when an actor is first created. Note: This is before it gets added to the World.
OnActorAdded(Actor actor)Called when an Actor gets first added to the world
OnActorDestroyed(Actor actor)Called when an Actor is destroyed.

Map

EventDescription
OnPreMapLoaded(World world, Map map)Called right before the Map load starts. This is the ideal place to register custom mod actors
OnMapLoaded(Map map)Called after a map is finished loading.

Game

EventDescription
OnGameLoaded(Game game)Called when the game is first loaded.
OnSceneEntered(Scene scene)Called after a scene transition either when a scene is first loaded, or reloaded.
OnWorldLoaded(World world)Called after the world finishes loading.
OnAssetsLoaded()Called after all assets have been loaded or reloaded.

Properties

The GameMod class also provides a number of additional properties to access various bits of data.

Reference Properties

These properties give you an easy reference to common objects used by the game

PropertyDescription
Game? GameConvenience property to get a reference to the game. Equivalent to calling Game.Instance. Can be null.
World? WorldConvenience property to get a reference to the current World. Equivalent to calling Game.Instance?.World. Can be null.
Map? MapConvenience property to get a reference to the current Map. Equivalent to calling Game.Instance?.World?.Map. Can be null.
Player? PlayerConvenience property to get a reference to the Player. Equivalent to calling Game.Instance?.World?.Get<Player>(). Can be null.

Asset Dictionaries And Lists

These properties provide readonly access to assets associated with this specific mod. This is similar to how you'd access assets from the Assets class, but they'll pull directly from the assets associated with this mod. These can be used to bypass asset replacement and naming conflict checks which may be more efficient.

PropertyDescription
IReadOnlyDictionary<string, Map> ModMapsDictionary containing all maps loaded by this mod, indexed by the map filename.
IReadOnlyDictionary<string, SkinnedTemplate> ModModelsDictionary containing all models loaded by this mod, indexed by the model filename.
IReadOnlyDictionary<string, Texture> ModTexturesDictionary containing Textures loaded by this mod, indexed by the texture filename.
IReadOnlyDictionary<string, Subtexture> ModSubTexturesDictionary containing all subtextures(sprites) loaded by this mod, indexed by the image filename.
IReadOnlyDictionary<string, Shader> ModShadersDictionary containing all shaders loaded by this mod, indexed by the shader filename.
IReadOnlyDictionary<string, Font> ModFontsDictionary containing all fonts loaded by this mod, indexed by the font filename.
IReadOnlyDictionary<string, FMOD.Sound> ModSoundsDictionary containing all wav Sounds loaded by this mod, indexed by the sound filename. Note: This does not include Sounds loaded from FMOD banks.
IReadOnlyDictionary<string, FMOD.Sound> ModMusicDictionary containing all wav Music Sounds loaded by this mod, indexed by the filename. Note: This does not include Sounds loaded from FMOD banks.
IReadOnlyDictionary<string, Dictionary<string, string>> ModStringsDictionary containing all non-dialog strings loaded by this mod. The outer dictionary is indexed by the Language ID, and the inner dictionary is indexed by the string key. So to access the confirm key from the base game language for example, you'd write ModStrings["english"]["Confirm"]
IReadOnlyDictionary<string, Dictionary<string, List<Language.Line>>> ModDialogLinesDictionary containing all maps loaded by this mod. The outer dictionary is indexed by the Language ID, and the inner dictionary is indexed by the the dialog id. So to access the Granny1 key from the base game language for example, you'd write ModStrings["english"]["Granny1"], which would give you a list of all the dialog lines associated with that chunk of dialog.
IReadOnlyList<LevelInfo> ModLevelsList containing all the LevelInfo objects that were loaded from the Levels.json file.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

GameMod Reference

Jasmine 'Jazzrabbit' Stephens edited this page Apr 7, 2024 · 2 revisions

In Fuji, the GameMod class is the entry point for a lot of actions within code mods. GameMod is an abstract class with a number of virtual functions that you can override to subscribe to various events in the game. This page will document the various events and functions the GameMod provides and how to use them.

How To Use

To subscribe to gamemod events, simply override the function in your custom gamemod class:

publicoverridevoidOnActorCreated(Actoractor){// Your Code Here}

Make sure you use the override keyword to properly override the virtual function.

You only need to override functions that you actually need to use. Anything else can just be ignored.

These events will not get called if the mod is disabled (Other than OnModUnloaded), so you don't need to worry about managing that

Event Types

Events

Mod

EventDescription
OnModLoaded()Called when the Mod is loaded if it is enabled. Also called during reload after it gets enabled.
OnModUnloaded()Called after the mod gets disabled. Note: this does not get called immediately, but will get called when the game next reloads.
Update(float deltaTime)Called once every frame after the scene is updated. Note: This also gets called on the title screen and level select.

Player

EventDescription
OnPlayerKilled(Player player)Called when a player is killed.
OnPlayerLanded(Player player)Called whenever a player lands on the ground after a jump or fall.
OnPlayerJumped(Player player, Player.JumpType jumpType)Called when a player jumps. jumpType gives you what type of jump (i.e. Normal Jump, Wall Jump, Skid Jump, Dash Jump)
OnPlayerStateChanged(Player player, Player.States? state)Called whenever a player's state changes. state gives you the new state it changes to.
OnPlayerSkinChange(Player player, SkinInfo skin)Called when a player's skin changes.
OnItemPickup(Player player, IPickup item)Called when a player picks up something that implements IPickup.

Actor

EventDescription
OnActorCreated(Actor actor)Called when an actor is first created. Note: This is before it gets added to the World.
OnActorAdded(Actor actor)Called when an Actor gets first added to the world
OnActorDestroyed(Actor actor)Called when an Actor is destroyed.

Map

EventDescription
OnPreMapLoaded(World world, Map map)Called right before the Map load starts. This is the ideal place to register custom mod actors
OnMapLoaded(Map map)Called after a map is finished loading.

Game

EventDescription
OnGameLoaded(Game game)Called when the game is first loaded.
OnSceneEntered(Scene scene)Called after a scene transition either when a scene is first loaded, or reloaded.
OnWorldLoaded(World world)Called after the world finishes loading.
OnAssetsLoaded()Called after all assets have been loaded or reloaded.

Properties

The GameMod class also provides a number of additional properties to access various bits of data.

Reference Properties

These properties give you an easy reference to common objects used by the game

PropertyDescription
Game? GameConvenience property to get a reference to the game. Equivalent to calling Game.Instance. Can be null.
World? WorldConvenience property to get a reference to the current World. Equivalent to calling Game.Instance?.World. Can be null.
Map? MapConvenience property to get a reference to the current Map. Equivalent to calling Game.Instance?.World?.Map. Can be null.
Player? PlayerConvenience property to get a reference to the Player. Equivalent to calling Game.Instance?.World?.Get<Player>(). Can be null.

Asset Dictionaries And Lists

These properties provide readonly access to assets associated with this specific mod. This is similar to how you'd access assets from the Assets class, but they'll pull directly from the assets associated with this mod. These can be used to bypass asset replacement and naming conflict checks which may be more efficient.

PropertyDescription
IReadOnlyDictionary<string, Map> ModMapsDictionary containing all maps loaded by this mod, indexed by the map filename.
IReadOnlyDictionary<string, SkinnedTemplate> ModModelsDictionary containing all models loaded by this mod, indexed by the model filename.
IReadOnlyDictionary<string, Texture> ModTexturesDictionary containing Textures loaded by this mod, indexed by the texture filename.
IReadOnlyDictionary<string, Subtexture> ModSubTexturesDictionary containing all subtextures(sprites) loaded by this mod, indexed by the image filename.
IReadOnlyDictionary<string, Shader> ModShadersDictionary containing all shaders loaded by this mod, indexed by the shader filename.
IReadOnlyDictionary<string, Font> ModFontsDictionary containing all fonts loaded by this mod, indexed by the font filename.
IReadOnlyDictionary<string, FMOD.Sound> ModSoundsDictionary containing all wav Sounds loaded by this mod, indexed by the sound filename. Note: This does not include Sounds loaded from FMOD banks.
IReadOnlyDictionary<string, FMOD.Sound> ModMusicDictionary containing all wav Music Sounds loaded by this mod, indexed by the filename. Note: This does not include Sounds loaded from FMOD banks.
IReadOnlyDictionary<string, Dictionary<string, string>> ModStringsDictionary containing all non-dialog strings loaded by this mod. The outer dictionary is indexed by the Language ID, and the inner dictionary is indexed by the string key. So to access the confirm key from the base game language for example, you'd write ModStrings["english"]["Confirm"]
IReadOnlyDictionary<string, Dictionary<string, List<Language.Line>>> ModDialogLinesDictionary containing all maps loaded by this mod. The outer dictionary is indexed by the Language ID, and the inner dictionary is indexed by the the dialog id. So to access the Granny1 key from the base game language for example, you'd write ModStrings["english"]["Granny1"], which would give you a list of all the dialog lines associated with that chunk of dialog.
IReadOnlyList<LevelInfo> ModLevelsList containing all the LevelInfo objects that were loaded from the Levels.json file.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

GameMod Reference

Jasmine 'Jazzrabbit' Stephens edited this page Apr 7, 2024 · 2 revisions

In Fuji, the GameMod class is the entry point for a lot of actions within code mods. GameMod is an abstract class with a number of virtual functions that you can override to subscribe to various events in the game. This page will document the various events and functions the GameMod provides and how to use them.

How To Use

To subscribe to gamemod events, simply override the function in your custom gamemod class:

publicoverridevoidOnActorCreated(Actoractor){// Your Code Here}

Make sure you use the override keyword to properly override the virtual function.

You only need to override functions that you actually need to use. Anything else can just be ignored.

These events will not get called if the mod is disabled (Other than OnModUnloaded), so you don't need to worry about managing that

Event Types

Events

Mod

EventDescription
OnModLoaded()Called when the Mod is loaded if it is enabled. Also called during reload after it gets enabled.
OnModUnloaded()Called after the mod gets disabled. Note: this does not get called immediately, but will get called when the game next reloads.
Update(float deltaTime)Called once every frame after the scene is updated. Note: This also gets called on the title screen and level select.

Player

EventDescription
OnPlayerKilled(Player player)Called when a player is killed.
OnPlayerLanded(Player player)Called whenever a player lands on the ground after a jump or fall.
OnPlayerJumped(Player player, Player.JumpType jumpType)Called when a player jumps. jumpType gives you what type of jump (i.e. Normal Jump, Wall Jump, Skid Jump, Dash Jump)
OnPlayerStateChanged(Player player, Player.States? state)Called whenever a player's state changes. state gives you the new state it changes to.
OnPlayerSkinChange(Player player, SkinInfo skin)Called when a player's skin changes.
OnItemPickup(Player player, IPickup item)Called when a player picks up something that implements IPickup.

Actor

EventDescription
OnActorCreated(Actor actor)Called when an actor is first created. Note: This is before it gets added to the World.
OnActorAdded(Actor actor)Called when an Actor gets first added to the world
OnActorDestroyed(Actor actor)Called when an Actor is destroyed.

Map

EventDescription
OnPreMapLoaded(World world, Map map)Called right before the Map load starts. This is the ideal place to register custom mod actors
OnMapLoaded(Map map)Called after a map is finished loading.

Game

EventDescription
OnGameLoaded(Game game)Called when the game is first loaded.
OnSceneEntered(Scene scene)Called after a scene transition either when a scene is first loaded, or reloaded.
OnWorldLoaded(World world)Called after the world finishes loading.
OnAssetsLoaded()Called after all assets have been loaded or reloaded.

Properties

The GameMod class also provides a number of additional properties to access various bits of data.

Reference Properties

These properties give you an easy reference to common objects used by the game

PropertyDescription
Game? GameConvenience property to get a reference to the game. Equivalent to calling Game.Instance. Can be null.
World? WorldConvenience property to get a reference to the current World. Equivalent to calling Game.Instance?.World. Can be null.
Map? MapConvenience property to get a reference to the current Map. Equivalent to calling Game.Instance?.World?.Map. Can be null.
Player? PlayerConvenience property to get a reference to the Player. Equivalent to calling Game.Instance?.World?.Get<Player>(). Can be null.

Asset Dictionaries And Lists

These properties provide readonly access to assets associated with this specific mod. This is similar to how you'd access assets from the Assets class, but they'll pull directly from the assets associated with this mod. These can be used to bypass asset replacement and naming conflict checks which may be more efficient.

PropertyDescription
IReadOnlyDictionary<string, Map> ModMapsDictionary containing all maps loaded by this mod, indexed by the map filename.
IReadOnlyDictionary<string, SkinnedTemplate> ModModelsDictionary containing all models loaded by this mod, indexed by the model filename.
IReadOnlyDictionary<string, Texture> ModTexturesDictionary containing Textures loaded by this mod, indexed by the texture filename.
IReadOnlyDictionary<string, Subtexture> ModSubTexturesDictionary containing all subtextures(sprites) loaded by this mod, indexed by the image filename.
IReadOnlyDictionary<string, Shader> ModShadersDictionary containing all shaders loaded by this mod, indexed by the shader filename.
IReadOnlyDictionary<string, Font> ModFontsDictionary containing all fonts loaded by this mod, indexed by the font filename.
IReadOnlyDictionary<string, FMOD.Sound> ModSoundsDictionary containing all wav Sounds loaded by this mod, indexed by the sound filename. Note: This does not include Sounds loaded from FMOD banks.
IReadOnlyDictionary<string, FMOD.Sound> ModMusicDictionary containing all wav Music Sounds loaded by this mod, indexed by the filename. Note: This does not include Sounds loaded from FMOD banks.
IReadOnlyDictionary<string, Dictionary<string, string>> ModStringsDictionary containing all non-dialog strings loaded by this mod. The outer dictionary is indexed by the Language ID, and the inner dictionary is indexed by the string key. So to access the confirm key from the base game language for example, you'd write ModStrings["english"]["Confirm"]
IReadOnlyDictionary<string, Dictionary<string, List<Language.Line>>> ModDialogLinesDictionary containing all maps loaded by this mod. The outer dictionary is indexed by the Language ID, and the inner dictionary is indexed by the the dialog id. So to access the Granny1 key from the base game language for example, you'd write ModStrings["english"]["Granny1"], which would give you a list of all the dialog lines associated with that chunk of dialog.
IReadOnlyList<LevelInfo> ModLevelsList containing all the LevelInfo objects that were loaded from the Levels.json file.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

GameMod Reference

Jasmine 'Jazzrabbit' Stephens edited this page Apr 7, 2024 · 2 revisions

In Fuji, the GameMod class is the entry point for a lot of actions within code mods. GameMod is an abstract class with a number of virtual functions that you can override to subscribe to various events in the game. This page will document the various events and functions the GameMod provides and how to use them.

How To Use

To subscribe to gamemod events, simply override the function in your custom gamemod class:

publicoverridevoidOnActorCreated(Actoractor){// Your Code Here}

Make sure you use the override keyword to properly override the virtual function.

You only need to override functions that you actually need to use. Anything else can just be ignored.

These events will not get called if the mod is disabled (Other than OnModUnloaded), so you don't need to worry about managing that

Event Types

Events

Mod

EventDescription
OnModLoaded()Called when the Mod is loaded if it is enabled. Also called during reload after it gets enabled.
OnModUnloaded()Called after the mod gets disabled. Note: this does not get called immediately, but will get called when the game next reloads.
Update(float deltaTime)Called once every frame after the scene is updated. Note: This also gets called on the title screen and level select.

Player

EventDescription
OnPlayerKilled(Player player)Called when a player is killed.
OnPlayerLanded(Player player)Called whenever a player lands on the ground after a jump or fall.
OnPlayerJumped(Player player, Player.JumpType jumpType)Called when a player jumps. jumpType gives you what type of jump (i.e. Normal Jump, Wall Jump, Skid Jump, Dash Jump)
OnPlayerStateChanged(Player player, Player.States? state)Called whenever a player's state changes. state gives you the new state it changes to.
OnPlayerSkinChange(Player player, SkinInfo skin)Called when a player's skin changes.
OnItemPickup(Player player, IPickup item)Called when a player picks up something that implements IPickup.

Actor

EventDescription
OnActorCreated(Actor actor)Called when an actor is first created. Note: This is before it gets added to the World.
OnActorAdded(Actor actor)Called when an Actor gets first added to the world
OnActorDestroyed(Actor actor)Called when an Actor is destroyed.

Map

EventDescription
OnPreMapLoaded(World world, Map map)Called right before the Map load starts. This is the ideal place to register custom mod actors
OnMapLoaded(Map map)Called after a map is finished loading.

Game

EventDescription
OnGameLoaded(Game game)Called when the game is first loaded.
OnSceneEntered(Scene scene)Called after a scene transition either when a scene is first loaded, or reloaded.
OnWorldLoaded(World world)Called after the world finishes loading.
OnAssetsLoaded()Called after all assets have been loaded or reloaded.

Properties

The GameMod class also provides a number of additional properties to access various bits of data.

Reference Properties

These properties give you an easy reference to common objects used by the game

PropertyDescription
Game? GameConvenience property to get a reference to the game. Equivalent to calling Game.Instance. Can be null.
World? WorldConvenience property to get a reference to the current World. Equivalent to calling Game.Instance?.World. Can be null.
Map? MapConvenience property to get a reference to the current Map. Equivalent to calling Game.Instance?.World?.Map. Can be null.
Player? PlayerConvenience property to get a reference to the Player. Equivalent to calling Game.Instance?.World?.Get<Player>(). Can be null.

Asset Dictionaries And Lists

These properties provide readonly access to assets associated with this specific mod. This is similar to how you'd access assets from the Assets class, but they'll pull directly from the assets associated with this mod. These can be used to bypass asset replacement and naming conflict checks which may be more efficient.

PropertyDescription
IReadOnlyDictionary<string, Map> ModMapsDictionary containing all maps loaded by this mod, indexed by the map filename.
IReadOnlyDictionary<string, SkinnedTemplate> ModModelsDictionary containing all models loaded by this mod, indexed by the model filename.
IReadOnlyDictionary<string, Texture> ModTexturesDictionary containing Textures loaded by this mod, indexed by the texture filename.
IReadOnlyDictionary<string, Subtexture> ModSubTexturesDictionary containing all subtextures(sprites) loaded by this mod, indexed by the image filename.
IReadOnlyDictionary<string, Shader> ModShadersDictionary containing all shaders loaded by this mod, indexed by the shader filename.
IReadOnlyDictionary<string, Font> ModFontsDictionary containing all fonts loaded by this mod, indexed by the font filename.
IReadOnlyDictionary<string, FMOD.Sound> ModSoundsDictionary containing all wav Sounds loaded by this mod, indexed by the sound filename. Note: This does not include Sounds loaded from FMOD banks.
IReadOnlyDictionary<string, FMOD.Sound> ModMusicDictionary containing all wav Music Sounds loaded by this mod, indexed by the filename. Note: This does not include Sounds loaded from FMOD banks.
IReadOnlyDictionary<string, Dictionary<string, string>> ModStringsDictionary containing all non-dialog strings loaded by this mod. The outer dictionary is indexed by the Language ID, and the inner dictionary is indexed by the string key. So to access the confirm key from the base game language for example, you'd write ModStrings["english"]["Confirm"]
IReadOnlyDictionary<string, Dictionary<string, List<Language.Line>>> ModDialogLinesDictionary containing all maps loaded by this mod. The outer dictionary is indexed by the Language ID, and the inner dictionary is indexed by the the dialog id. So to access the Granny1 key from the base game language for example, you'd write ModStrings["english"]["Granny1"], which would give you a list of all the dialog lines associated with that chunk of dialog.
IReadOnlyList<LevelInfo> ModLevelsList containing all the LevelInfo objects that were loaded from the Levels.json file.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

GameMod Reference

Jasmine 'Jazzrabbit' Stephens edited this page Apr 7, 2024 · 2 revisions

In Fuji, the GameMod class is the entry point for a lot of actions within code mods. GameMod is an abstract class with a number of virtual functions that you can override to subscribe to various events in the game. This page will document the various events and functions the GameMod provides and how to use them.

How To Use

To subscribe to gamemod events, simply override the function in your custom gamemod class:

publicoverridevoidOnActorCreated(Actoractor){// Your Code Here}

Make sure you use the override keyword to properly override the virtual function.

You only need to override functions that you actually need to use. Anything else can just be ignored.

These events will not get called if the mod is disabled (Other than OnModUnloaded), so you don't need to worry about managing that

Event Types

Events

Mod

EventDescription
OnModLoaded()Called when the Mod is loaded if it is enabled. Also called during reload after it gets enabled.
OnModUnloaded()Called after the mod gets disabled. Note: this does not get called immediately, but will get called when the game next reloads.
Update(float deltaTime)Called once every frame after the scene is updated. Note: This also gets called on the title screen and level select.

Player

EventDescription
OnPlayerKilled(Player player)Called when a player is killed.
OnPlayerLanded(Player player)Called whenever a player lands on the ground after a jump or fall.
OnPlayerJumped(Player player, Player.JumpType jumpType)Called when a player jumps. jumpType gives you what type of jump (i.e. Normal Jump, Wall Jump, Skid Jump, Dash Jump)
OnPlayerStateChanged(Player player, Player.States? state)Called whenever a player's state changes. state gives you the new state it changes to.
OnPlayerSkinChange(Player player, SkinInfo skin)Called when a player's skin changes.
OnItemPickup(Player player, IPickup item)Called when a player picks up something that implements IPickup.

Actor

EventDescription
OnActorCreated(Actor actor)Called when an actor is first created. Note: This is before it gets added to the World.
OnActorAdded(Actor actor)Called when an Actor gets first added to the world
OnActorDestroyed(Actor actor)Called when an Actor is destroyed.

Map

EventDescription
OnPreMapLoaded(World world, Map map)Called right before the Map load starts. This is the ideal place to register custom mod actors
OnMapLoaded(Map map)Called after a map is finished loading.

Game

EventDescription
OnGameLoaded(Game game)Called when the game is first loaded.
OnSceneEntered(Scene scene)Called after a scene transition either when a scene is first loaded, or reloaded.
OnWorldLoaded(World world)Called after the world finishes loading.
OnAssetsLoaded()Called after all assets have been loaded or reloaded.

Properties

The GameMod class also provides a number of additional properties to access various bits of data.

Reference Properties

These properties give you an easy reference to common objects used by the game

PropertyDescription
Game? GameConvenience property to get a reference to the game. Equivalent to calling Game.Instance. Can be null.
World? WorldConvenience property to get a reference to the current World. Equivalent to calling Game.Instance?.World. Can be null.
Map? MapConvenience property to get a reference to the current Map. Equivalent to calling Game.Instance?.World?.Map. Can be null.
Player? PlayerConvenience property to get a reference to the Player. Equivalent to calling Game.Instance?.World?.Get<Player>(). Can be null.

Asset Dictionaries And Lists

These properties provide readonly access to assets associated with this specific mod. This is similar to how you'd access assets from the Assets class, but they'll pull directly from the assets associated with this mod. These can be used to bypass asset replacement and naming conflict checks which may be more efficient.

PropertyDescription
IReadOnlyDictionary<string, Map> ModMapsDictionary containing all maps loaded by this mod, indexed by the map filename.
IReadOnlyDictionary<string, SkinnedTemplate> ModModelsDictionary containing all models loaded by this mod, indexed by the model filename.
IReadOnlyDictionary<string, Texture> ModTexturesDictionary containing Textures loaded by this mod, indexed by the texture filename.
IReadOnlyDictionary<string, Subtexture> ModSubTexturesDictionary containing all subtextures(sprites) loaded by this mod, indexed by the image filename.
IReadOnlyDictionary<string, Shader> ModShadersDictionary containing all shaders loaded by this mod, indexed by the shader filename.
IReadOnlyDictionary<string, Font> ModFontsDictionary containing all fonts loaded by this mod, indexed by the font filename.
IReadOnlyDictionary<string, FMOD.Sound> ModSoundsDictionary containing all wav Sounds loaded by this mod, indexed by the sound filename. Note: This does not include Sounds loaded from FMOD banks.
IReadOnlyDictionary<string, FMOD.Sound> ModMusicDictionary containing all wav Music Sounds loaded by this mod, indexed by the filename. Note: This does not include Sounds loaded from FMOD banks.
IReadOnlyDictionary<string, Dictionary<string, string>> ModStringsDictionary containing all non-dialog strings loaded by this mod. The outer dictionary is indexed by the Language ID, and the inner dictionary is indexed by the string key. So to access the confirm key from the base game language for example, you'd write ModStrings["english"]["Confirm"]
IReadOnlyDictionary<string, Dictionary<string, List<Language.Line>>> ModDialogLinesDictionary containing all maps loaded by this mod. The outer dictionary is indexed by the Language ID, and the inner dictionary is indexed by the the dialog id. So to access the Granny1 key from the base game language for example, you'd write ModStrings["english"]["Granny1"], which would give you a list of all the dialog lines associated with that chunk of dialog.
IReadOnlyList<LevelInfo> ModLevelsList containing all the LevelInfo objects that were loaded from the Levels.json file.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

GameMod Reference

Jasmine 'Jazzrabbit' Stephens edited this page Apr 7, 2024 · 2 revisions

In Fuji, the GameMod class is the entry point for a lot of actions within code mods. GameMod is an abstract class with a number of virtual functions that you can override to subscribe to various events in the game. This page will document the various events and functions the GameMod provides and how to use them.

How To Use

To subscribe to gamemod events, simply override the function in your custom gamemod class:

publicoverridevoidOnActorCreated(Actoractor){// Your Code Here}

Make sure you use the override keyword to properly override the virtual function.

You only need to override functions that you actually need to use. Anything else can just be ignored.

These events will not get called if the mod is disabled (Other than OnModUnloaded), so you don't need to worry about managing that

Event Types

Events

Mod

EventDescription
OnModLoaded()Called when the Mod is loaded if it is enabled. Also called during reload after it gets enabled.
OnModUnloaded()Called after the mod gets disabled. Note: this does not get called immediately, but will get called when the game next reloads.
Update(float deltaTime)Called once every frame after the scene is updated. Note: This also gets called on the title screen and level select.

Player

EventDescription
OnPlayerKilled(Player player)Called when a player is killed.
OnPlayerLanded(Player player)Called whenever a player lands on the ground after a jump or fall.
OnPlayerJumped(Player player, Player.JumpType jumpType)Called when a player jumps. jumpType gives you what type of jump (i.e. Normal Jump, Wall Jump, Skid Jump, Dash Jump)
OnPlayerStateChanged(Player player, Player.States? state)Called whenever a player's state changes. state gives you the new state it changes to.
OnPlayerSkinChange(Player player, SkinInfo skin)Called when a player's skin changes.
OnItemPickup(Player player, IPickup item)Called when a player picks up something that implements IPickup.

Actor

EventDescription
OnActorCreated(Actor actor)Called when an actor is first created. Note: This is before it gets added to the World.
OnActorAdded(Actor actor)Called when an Actor gets first added to the world
OnActorDestroyed(Actor actor)Called when an Actor is destroyed.

Map

EventDescription
OnPreMapLoaded(World world, Map map)Called right before the Map load starts. This is the ideal place to register custom mod actors
OnMapLoaded(Map map)Called after a map is finished loading.

Game

EventDescription
OnGameLoaded(Game game)Called when the game is first loaded.
OnSceneEntered(Scene scene)Called after a scene transition either when a scene is first loaded, or reloaded.
OnWorldLoaded(World world)Called after the world finishes loading.
OnAssetsLoaded()Called after all assets have been loaded or reloaded.

Properties

The GameMod class also provides a number of additional properties to access various bits of data.

Reference Properties

These properties give you an easy reference to common objects used by the game

PropertyDescription
Game? GameConvenience property to get a reference to the game. Equivalent to calling Game.Instance. Can be null.
World? WorldConvenience property to get a reference to the current World. Equivalent to calling Game.Instance?.World. Can be null.
Map? MapConvenience property to get a reference to the current Map. Equivalent to calling Game.Instance?.World?.Map. Can be null.
Player? PlayerConvenience property to get a reference to the Player. Equivalent to calling Game.Instance?.World?.Get<Player>(). Can be null.

Asset Dictionaries And Lists

These properties provide readonly access to assets associated with this specific mod. This is similar to how you'd access assets from the Assets class, but they'll pull directly from the assets associated with this mod. These can be used to bypass asset replacement and naming conflict checks which may be more efficient.

PropertyDescription
IReadOnlyDictionary<string, Map> ModMapsDictionary containing all maps loaded by this mod, indexed by the map filename.
IReadOnlyDictionary<string, SkinnedTemplate> ModModelsDictionary containing all models loaded by this mod, indexed by the model filename.
IReadOnlyDictionary<string, Texture> ModTexturesDictionary containing Textures loaded by this mod, indexed by the texture filename.
IReadOnlyDictionary<string, Subtexture> ModSubTexturesDictionary containing all subtextures(sprites) loaded by this mod, indexed by the image filename.
IReadOnlyDictionary<string, Shader> ModShadersDictionary containing all shaders loaded by this mod, indexed by the shader filename.
IReadOnlyDictionary<string, Font> ModFontsDictionary containing all fonts loaded by this mod, indexed by the font filename.
IReadOnlyDictionary<string, FMOD.Sound> ModSoundsDictionary containing all wav Sounds loaded by this mod, indexed by the sound filename. Note: This does not include Sounds loaded from FMOD banks.
IReadOnlyDictionary<string, FMOD.Sound> ModMusicDictionary containing all wav Music Sounds loaded by this mod, indexed by the filename. Note: This does not include Sounds loaded from FMOD banks.
IReadOnlyDictionary<string, Dictionary<string, string>> ModStringsDictionary containing all non-dialog strings loaded by this mod. The outer dictionary is indexed by the Language ID, and the inner dictionary is indexed by the string key. So to access the confirm key from the base game language for example, you'd write ModStrings["english"]["Confirm"]
IReadOnlyDictionary<string, Dictionary<string, List<Language.Line>>> ModDialogLinesDictionary containing all maps loaded by this mod. The outer dictionary is indexed by the Language ID, and the inner dictionary is indexed by the the dialog id. So to access the Granny1 key from the base game language for example, you'd write ModStrings["english"]["Granny1"], which would give you a list of all the dialog lines associated with that chunk of dialog.
IReadOnlyList<LevelInfo> ModLevelsList containing all the LevelInfo objects that were loaded from the Levels.json file.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

GameMod Reference

Jasmine 'Jazzrabbit' Stephens edited this page Apr 7, 2024 · 2 revisions

In Fuji, the GameMod class is the entry point for a lot of actions within code mods. GameMod is an abstract class with a number of virtual functions that you can override to subscribe to various events in the game. This page will document the various events and functions the GameMod provides and how to use them.

How To Use

To subscribe to gamemod events, simply override the function in your custom gamemod class:

publicoverridevoidOnActorCreated(Actoractor){// Your Code Here}

Make sure you use the override keyword to properly override the virtual function.

You only need to override functions that you actually need to use. Anything else can just be ignored.

These events will not get called if the mod is disabled (Other than OnModUnloaded), so you don't need to worry about managing that

Event Types

Events

Mod

EventDescription
OnModLoaded()Called when the Mod is loaded if it is enabled. Also called during reload after it gets enabled.
OnModUnloaded()Called after the mod gets disabled. Note: this does not get called immediately, but will get called when the game next reloads.
Update(float deltaTime)Called once every frame after the scene is updated. Note: This also gets called on the title screen and level select.

Player

EventDescription
OnPlayerKilled(Player player)Called when a player is killed.
OnPlayerLanded(Player player)Called whenever a player lands on the ground after a jump or fall.
OnPlayerJumped(Player player, Player.JumpType jumpType)Called when a player jumps. jumpType gives you what type of jump (i.e. Normal Jump, Wall Jump, Skid Jump, Dash Jump)
OnPlayerStateChanged(Player player, Player.States? state)Called whenever a player's state changes. state gives you the new state it changes to.
OnPlayerSkinChange(Player player, SkinInfo skin)Called when a player's skin changes.
OnItemPickup(Player player, IPickup item)Called when a player picks up something that implements IPickup.

Actor

EventDescription
OnActorCreated(Actor actor)Called when an actor is first created. Note: This is before it gets added to the World.
OnActorAdded(Actor actor)Called when an Actor gets first added to the world
OnActorDestroyed(Actor actor)Called when an Actor is destroyed.

Map

EventDescription
OnPreMapLoaded(World world, Map map)Called right before the Map load starts. This is the ideal place to register custom mod actors
OnMapLoaded(Map map)Called after a map is finished loading.

Game

EventDescription
OnGameLoaded(Game game)Called when the game is first loaded.
OnSceneEntered(Scene scene)Called after a scene transition either when a scene is first loaded, or reloaded.
OnWorldLoaded(World world)Called after the world finishes loading.
OnAssetsLoaded()Called after all assets have been loaded or reloaded.

Properties

The GameMod class also provides a number of additional properties to access various bits of data.

Reference Properties

These properties give you an easy reference to common objects used by the game

PropertyDescription
Game? GameConvenience property to get a reference to the game. Equivalent to calling Game.Instance. Can be null.
World? WorldConvenience property to get a reference to the current World. Equivalent to calling Game.Instance?.World. Can be null.
Map? MapConvenience property to get a reference to the current Map. Equivalent to calling Game.Instance?.World?.Map. Can be null.
Player? PlayerConvenience property to get a reference to the Player. Equivalent to calling Game.Instance?.World?.Get<Player>(). Can be null.

Asset Dictionaries And Lists

These properties provide readonly access to assets associated with this specific mod. This is similar to how you'd access assets from the Assets class, but they'll pull directly from the assets associated with this mod. These can be used to bypass asset replacement and naming conflict checks which may be more efficient.

PropertyDescription
IReadOnlyDictionary<string, Map> ModMapsDictionary containing all maps loaded by this mod, indexed by the map filename.
IReadOnlyDictionary<string, SkinnedTemplate> ModModelsDictionary containing all models loaded by this mod, indexed by the model filename.
IReadOnlyDictionary<string, Texture> ModTexturesDictionary containing Textures loaded by this mod, indexed by the texture filename.
IReadOnlyDictionary<string, Subtexture> ModSubTexturesDictionary containing all subtextures(sprites) loaded by this mod, indexed by the image filename.
IReadOnlyDictionary<string, Shader> ModShadersDictionary containing all shaders loaded by this mod, indexed by the shader filename.
IReadOnlyDictionary<string, Font> ModFontsDictionary containing all fonts loaded by this mod, indexed by the font filename.
IReadOnlyDictionary<string, FMOD.Sound> ModSoundsDictionary containing all wav Sounds loaded by this mod, indexed by the sound filename. Note: This does not include Sounds loaded from FMOD banks.
IReadOnlyDictionary<string, FMOD.Sound> ModMusicDictionary containing all wav Music Sounds loaded by this mod, indexed by the filename. Note: This does not include Sounds loaded from FMOD banks.
IReadOnlyDictionary<string, Dictionary<string, string>> ModStringsDictionary containing all non-dialog strings loaded by this mod. The outer dictionary is indexed by the Language ID, and the inner dictionary is indexed by the string key. So to access the confirm key from the base game language for example, you'd write ModStrings["english"]["Confirm"]
IReadOnlyDictionary<string, Dictionary<string, List<Language.Line>>> ModDialogLinesDictionary containing all maps loaded by this mod. The outer dictionary is indexed by the Language ID, and the inner dictionary is indexed by the the dialog id. So to access the Granny1 key from the base game language for example, you'd write ModStrings["english"]["Granny1"], which would give you a list of all the dialog lines associated with that chunk of dialog.
IReadOnlyList<LevelInfo> ModLevelsList containing all the LevelInfo objects that were loaded from the Levels.json file.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

GameMod Reference

Jasmine 'Jazzrabbit' Stephens edited this page Apr 7, 2024 · 2 revisions

In Fuji, the GameMod class is the entry point for a lot of actions within code mods. GameMod is an abstract class with a number of virtual functions that you can override to subscribe to various events in the game. This page will document the various events and functions the GameMod provides and how to use them.

How To Use

To subscribe to gamemod events, simply override the function in your custom gamemod class:

publicoverridevoidOnActorCreated(Actoractor){// Your Code Here}

Make sure you use the override keyword to properly override the virtual function.

You only need to override functions that you actually need to use. Anything else can just be ignored.

These events will not get called if the mod is disabled (Other than OnModUnloaded), so you don't need to worry about managing that

Event Types

Events

Mod

EventDescription
OnModLoaded()Called when the Mod is loaded if it is enabled. Also called during reload after it gets enabled.
OnModUnloaded()Called after the mod gets disabled. Note: this does not get called immediately, but will get called when the game next reloads.
Update(float deltaTime)Called once every frame after the scene is updated. Note: This also gets called on the title screen and level select.

Player

EventDescription
OnPlayerKilled(Player player)Called when a player is killed.
OnPlayerLanded(Player player)Called whenever a player lands on the ground after a jump or fall.
OnPlayerJumped(Player player, Player.JumpType jumpType)Called when a player jumps. jumpType gives you what type of jump (i.e. Normal Jump, Wall Jump, Skid Jump, Dash Jump)
OnPlayerStateChanged(Player player, Player.States? state)Called whenever a player's state changes. state gives you the new state it changes to.
OnPlayerSkinChange(Player player, SkinInfo skin)Called when a player's skin changes.
OnItemPickup(Player player, IPickup item)Called when a player picks up something that implements IPickup.

Actor

EventDescription
OnActorCreated(Actor actor)Called when an actor is first created. Note: This is before it gets added to the World.
OnActorAdded(Actor actor)Called when an Actor gets first added to the world
OnActorDestroyed(Actor actor)Called when an Actor is destroyed.

Map

EventDescription
OnPreMapLoaded(World world, Map map)Called right before the Map load starts. This is the ideal place to register custom mod actors
OnMapLoaded(Map map)Called after a map is finished loading.

Game

EventDescription
OnGameLoaded(Game game)Called when the game is first loaded.
OnSceneEntered(Scene scene)Called after a scene transition either when a scene is first loaded, or reloaded.
OnWorldLoaded(World world)Called after the world finishes loading.
OnAssetsLoaded()Called after all assets have been loaded or reloaded.

Properties

The GameMod class also provides a number of additional properties to access various bits of data.

Reference Properties

These properties give you an easy reference to common objects used by the game

PropertyDescription
Game? GameConvenience property to get a reference to the game. Equivalent to calling Game.Instance. Can be null.
World? WorldConvenience property to get a reference to the current World. Equivalent to calling Game.Instance?.World. Can be null.
Map? MapConvenience property to get a reference to the current Map. Equivalent to calling Game.Instance?.World?.Map. Can be null.
Player? PlayerConvenience property to get a reference to the Player. Equivalent to calling Game.Instance?.World?.Get<Player>(). Can be null.

Asset Dictionaries And Lists

These properties provide readonly access to assets associated with this specific mod. This is similar to how you'd access assets from the Assets class, but they'll pull directly from the assets associated with this mod. These can be used to bypass asset replacement and naming conflict checks which may be more efficient.

PropertyDescription
IReadOnlyDictionary<string, Map> ModMapsDictionary containing all maps loaded by this mod, indexed by the map filename.
IReadOnlyDictionary<string, SkinnedTemplate> ModModelsDictionary containing all models loaded by this mod, indexed by the model filename.
IReadOnlyDictionary<string, Texture> ModTexturesDictionary containing Textures loaded by this mod, indexed by the texture filename.
IReadOnlyDictionary<string, Subtexture> ModSubTexturesDictionary containing all subtextures(sprites) loaded by this mod, indexed by the image filename.
IReadOnlyDictionary<string, Shader> ModShadersDictionary containing all shaders loaded by this mod, indexed by the shader filename.
IReadOnlyDictionary<string, Font> ModFontsDictionary containing all fonts loaded by this mod, indexed by the font filename.
IReadOnlyDictionary<string, FMOD.Sound> ModSoundsDictionary containing all wav Sounds loaded by this mod, indexed by the sound filename. Note: This does not include Sounds loaded from FMOD banks.
IReadOnlyDictionary<string, FMOD.Sound> ModMusicDictionary containing all wav Music Sounds loaded by this mod, indexed by the filename. Note: This does not include Sounds loaded from FMOD banks.
IReadOnlyDictionary<string, Dictionary<string, string>> ModStringsDictionary containing all non-dialog strings loaded by this mod. The outer dictionary is indexed by the Language ID, and the inner dictionary is indexed by the string key. So to access the confirm key from the base game language for example, you'd write ModStrings["english"]["Confirm"]
IReadOnlyDictionary<string, Dictionary<string, List<Language.Line>>> ModDialogLinesDictionary containing all maps loaded by this mod. The outer dictionary is indexed by the Language ID, and the inner dictionary is indexed by the the dialog id. So to access the Granny1 key from the base game language for example, you'd write ModStrings["english"]["Granny1"], which would give you a list of all the dialog lines associated with that chunk of dialog.
IReadOnlyList<LevelInfo> ModLevelsList containing all the LevelInfo objects that were loaded from the Levels.json file.

Clone this wiki locally