Mod Setup Basics

axiand edited this page Mar 10, 2024 · 12 revisions

This page explains how to set up a mod for Celeste 64 using Fuji.

Mods are stored in the game's Mods directory.

To set up a new mod, create a folder in the Mods folder. Name it something unique. Generally, something like YourName_YourModName works best. From here on out, "your mod folder" will refer to the folder you've created

Fuji allows you to load custom assets, as long as they're in the correct place. The following folders are supported:

  • Audio for FMOD audio
  • Faces for character expressions
  • Fonts
  • Maps for your map files
  • Models for custom models
  • Shaders
  • Sprites
  • Text for Dialog
  • Textures
  • Sounds
  • Music
  • Libraries for compiled DLLs

Additionally, Fuji will take care of importing custom levels via the Levels.json files. It can also load custom dialog via .json files in the Text folder. These are explained in their respective wiki pages.

Mod Info Format - Fuji.json

Fuji requires you add a file to define some metadata about your mod, to give Fuji additional information about what your mod is and what it does.

To do this, we create a Fuji.json file in our mod's folder. The format of this file is as follows:

{
"Id": "<mod-id>",
"Name": "<human-readable-mod-name>",
"ModAuthor": "<mod-author-name>",
"Description": "<human-readable-mod-description>",
"Icon": "<mod-icon>",
"Version": "<semver>",
"FujiRequiredVersion": "<semver>",
"Dependencies": {
"<mod-id>": "<mod-minimum-version>",
},
"AssetReplaceItems": {
"<vanilla-asset-name>": "<mod-asset-name>",
}
}

Note

For FujiRequiredVersion, you'll want to put in the minimum version of Fuji required to load the mod. Generally, this would be whatever the latest version is at the time of you reading this page.

Do note, however, that your mod will likely stop loading with every major version of Fuji, since those can introduce breaking changes. So, if your mod asks for Fuji 1.2.3, expect it to not load after 2.0.0.

To resolve this, simply bump up the FujiRequiredVersion when the time comes.

Fill in this file according to the guidelines. Once done, your file should look somewhat like this:

{
"Id": "Madeline_MyMod",
"Name": "My First Mod",
"ModAuthor": "Madeline",
"Description": "My first mod, made to learn modding with Fuji",
"Icon": "MyModIcon",
"Version": "1.0.0",
"FujiRequiredVersion": "0.2.0",
"Dependencies": {
"OtherMod": "1.2.3",
},
"AssetReplaceItems": {
"strawberry": "CoolerStrawberry",
}
}

Important

Remember that mod IDs must be unique!

There's several ways to achieve this, but the most common (and Fuji-approved) way is to make your mod ID yourName_modName.

For example, if my name is Madeline and my mod name is CoolerStrawberry, my mod ID would be Madeline_CoolerStrawberry.

Note

Everything in this file is optional except for Id, your mod ID, and Name, your mod name, and the Version, your mod's version. Though, it's good practice to also include the minimum required Fuji version to avoid surprise crashes for users. You might also want to add a description, your name, and an icon.

Setting up an icon

  • To set up an icon, simply place the file as a png in your Sprites folder like you would for any other sprite.
  • Then make sure the Icon Field in the Fuji.json is set to just the name of that file (not the filepath), like "MyModIcon" and not something like "Sprites/MyModIcon.png"

Note

Mod Icons should generally be square, and have the same width and height. If it is not, fuji will try to make it square, so it might look squished. Mod Icons are also special, in that they cannot be asset replaced. (although you shouldn't really need to do this anyway)

Preparing your mod for release

You may zip your mod in order to send it to others. To do this, go to your mod folder, select everything inside, right click, select "Send to", and click "Zip folder".

You can then upload the resulting zip folder. Users will put this folder in their game's Mods directory to install your mod.

Warning

Ensure your mod zip is structured properly. It should be mod.zip/textures, mod.zip/maps etc. Not mod.zip/mod/maps.

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

Mod Setup Basics

axiand edited this page Mar 10, 2024 · 12 revisions

This page explains how to set up a mod for Celeste 64 using Fuji.

Mods are stored in the game's Mods directory.

To set up a new mod, create a folder in the Mods folder. Name it something unique. Generally, something like YourName_YourModName works best. From here on out, "your mod folder" will refer to the folder you've created

Fuji allows you to load custom assets, as long as they're in the correct place. The following folders are supported:

  • Audio for FMOD audio
  • Faces for character expressions
  • Fonts
  • Maps for your map files
  • Models for custom models
  • Shaders
  • Sprites
  • Text for Dialog
  • Textures
  • Sounds
  • Music
  • Libraries for compiled DLLs

Additionally, Fuji will take care of importing custom levels via the Levels.json files. It can also load custom dialog via .json files in the Text folder. These are explained in their respective wiki pages.

Mod Info Format - Fuji.json

Fuji requires you add a file to define some metadata about your mod, to give Fuji additional information about what your mod is and what it does.

To do this, we create a Fuji.json file in our mod's folder. The format of this file is as follows:

{
"Id": "<mod-id>",
"Name": "<human-readable-mod-name>",
"ModAuthor": "<mod-author-name>",
"Description": "<human-readable-mod-description>",
"Icon": "<mod-icon>",
"Version": "<semver>",
"FujiRequiredVersion": "<semver>",
"Dependencies": {
"<mod-id>": "<mod-minimum-version>",
},
"AssetReplaceItems": {
"<vanilla-asset-name>": "<mod-asset-name>",
}
}

Note

For FujiRequiredVersion, you'll want to put in the minimum version of Fuji required to load the mod. Generally, this would be whatever the latest version is at the time of you reading this page.

Do note, however, that your mod will likely stop loading with every major version of Fuji, since those can introduce breaking changes. So, if your mod asks for Fuji 1.2.3, expect it to not load after 2.0.0.

To resolve this, simply bump up the FujiRequiredVersion when the time comes.

Fill in this file according to the guidelines. Once done, your file should look somewhat like this:

{
"Id": "Madeline_MyMod",
"Name": "My First Mod",
"ModAuthor": "Madeline",
"Description": "My first mod, made to learn modding with Fuji",
"Icon": "MyModIcon",
"Version": "1.0.0",
"FujiRequiredVersion": "0.2.0",
"Dependencies": {
"OtherMod": "1.2.3",
},
"AssetReplaceItems": {
"strawberry": "CoolerStrawberry",
}
}

Important

Remember that mod IDs must be unique!

There's several ways to achieve this, but the most common (and Fuji-approved) way is to make your mod ID yourName_modName.

For example, if my name is Madeline and my mod name is CoolerStrawberry, my mod ID would be Madeline_CoolerStrawberry.

Note

Everything in this file is optional except for Id, your mod ID, and Name, your mod name, and the Version, your mod's version. Though, it's good practice to also include the minimum required Fuji version to avoid surprise crashes for users. You might also want to add a description, your name, and an icon.

Setting up an icon

  • To set up an icon, simply place the file as a png in your Sprites folder like you would for any other sprite.
  • Then make sure the Icon Field in the Fuji.json is set to just the name of that file (not the filepath), like "MyModIcon" and not something like "Sprites/MyModIcon.png"

Note

Mod Icons should generally be square, and have the same width and height. If it is not, fuji will try to make it square, so it might look squished. Mod Icons are also special, in that they cannot be asset replaced. (although you shouldn't really need to do this anyway)

Preparing your mod for release

You may zip your mod in order to send it to others. To do this, go to your mod folder, select everything inside, right click, select "Send to", and click "Zip folder".

You can then upload the resulting zip folder. Users will put this folder in their game's Mods directory to install your mod.

Warning

Ensure your mod zip is structured properly. It should be mod.zip/textures, mod.zip/maps etc. Not mod.zip/mod/maps.

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

Mod Setup Basics

axiand edited this page Mar 10, 2024 · 12 revisions

This page explains how to set up a mod for Celeste 64 using Fuji.

Mods are stored in the game's Mods directory.

To set up a new mod, create a folder in the Mods folder. Name it something unique. Generally, something like YourName_YourModName works best. From here on out, "your mod folder" will refer to the folder you've created

Fuji allows you to load custom assets, as long as they're in the correct place. The following folders are supported:

  • Audio for FMOD audio
  • Faces for character expressions
  • Fonts
  • Maps for your map files
  • Models for custom models
  • Shaders
  • Sprites
  • Text for Dialog
  • Textures
  • Sounds
  • Music
  • Libraries for compiled DLLs

Additionally, Fuji will take care of importing custom levels via the Levels.json files. It can also load custom dialog via .json files in the Text folder. These are explained in their respective wiki pages.

Mod Info Format - Fuji.json

Fuji requires you add a file to define some metadata about your mod, to give Fuji additional information about what your mod is and what it does.

To do this, we create a Fuji.json file in our mod's folder. The format of this file is as follows:

{
"Id": "<mod-id>",
"Name": "<human-readable-mod-name>",
"ModAuthor": "<mod-author-name>",
"Description": "<human-readable-mod-description>",
"Icon": "<mod-icon>",
"Version": "<semver>",
"FujiRequiredVersion": "<semver>",
"Dependencies": {
"<mod-id>": "<mod-minimum-version>",
},
"AssetReplaceItems": {
"<vanilla-asset-name>": "<mod-asset-name>",
}
}

Note

For FujiRequiredVersion, you'll want to put in the minimum version of Fuji required to load the mod. Generally, this would be whatever the latest version is at the time of you reading this page.

Do note, however, that your mod will likely stop loading with every major version of Fuji, since those can introduce breaking changes. So, if your mod asks for Fuji 1.2.3, expect it to not load after 2.0.0.

To resolve this, simply bump up the FujiRequiredVersion when the time comes.

Fill in this file according to the guidelines. Once done, your file should look somewhat like this:

{
"Id": "Madeline_MyMod",
"Name": "My First Mod",
"ModAuthor": "Madeline",
"Description": "My first mod, made to learn modding with Fuji",
"Icon": "MyModIcon",
"Version": "1.0.0",
"FujiRequiredVersion": "0.2.0",
"Dependencies": {
"OtherMod": "1.2.3",
},
"AssetReplaceItems": {
"strawberry": "CoolerStrawberry",
}
}

Important

Remember that mod IDs must be unique!

There's several ways to achieve this, but the most common (and Fuji-approved) way is to make your mod ID yourName_modName.

For example, if my name is Madeline and my mod name is CoolerStrawberry, my mod ID would be Madeline_CoolerStrawberry.

Note

Everything in this file is optional except for Id, your mod ID, and Name, your mod name, and the Version, your mod's version. Though, it's good practice to also include the minimum required Fuji version to avoid surprise crashes for users. You might also want to add a description, your name, and an icon.

Setting up an icon

  • To set up an icon, simply place the file as a png in your Sprites folder like you would for any other sprite.
  • Then make sure the Icon Field in the Fuji.json is set to just the name of that file (not the filepath), like "MyModIcon" and not something like "Sprites/MyModIcon.png"

Note

Mod Icons should generally be square, and have the same width and height. If it is not, fuji will try to make it square, so it might look squished. Mod Icons are also special, in that they cannot be asset replaced. (although you shouldn't really need to do this anyway)

Preparing your mod for release

You may zip your mod in order to send it to others. To do this, go to your mod folder, select everything inside, right click, select "Send to", and click "Zip folder".

You can then upload the resulting zip folder. Users will put this folder in their game's Mods directory to install your mod.

Warning

Ensure your mod zip is structured properly. It should be mod.zip/textures, mod.zip/maps etc. Not mod.zip/mod/maps.

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

Mod Setup Basics

axiand edited this page Mar 10, 2024 · 12 revisions

This page explains how to set up a mod for Celeste 64 using Fuji.

Mods are stored in the game's Mods directory.

To set up a new mod, create a folder in the Mods folder. Name it something unique. Generally, something like YourName_YourModName works best. From here on out, "your mod folder" will refer to the folder you've created

Fuji allows you to load custom assets, as long as they're in the correct place. The following folders are supported:

  • Audio for FMOD audio
  • Faces for character expressions
  • Fonts
  • Maps for your map files
  • Models for custom models
  • Shaders
  • Sprites
  • Text for Dialog
  • Textures
  • Sounds
  • Music
  • Libraries for compiled DLLs

Additionally, Fuji will take care of importing custom levels via the Levels.json files. It can also load custom dialog via .json files in the Text folder. These are explained in their respective wiki pages.

Mod Info Format - Fuji.json

Fuji requires you add a file to define some metadata about your mod, to give Fuji additional information about what your mod is and what it does.

To do this, we create a Fuji.json file in our mod's folder. The format of this file is as follows:

{
"Id": "<mod-id>",
"Name": "<human-readable-mod-name>",
"ModAuthor": "<mod-author-name>",
"Description": "<human-readable-mod-description>",
"Icon": "<mod-icon>",
"Version": "<semver>",
"FujiRequiredVersion": "<semver>",
"Dependencies": {
"<mod-id>": "<mod-minimum-version>",
},
"AssetReplaceItems": {
"<vanilla-asset-name>": "<mod-asset-name>",
}
}

Note

For FujiRequiredVersion, you'll want to put in the minimum version of Fuji required to load the mod. Generally, this would be whatever the latest version is at the time of you reading this page.

Do note, however, that your mod will likely stop loading with every major version of Fuji, since those can introduce breaking changes. So, if your mod asks for Fuji 1.2.3, expect it to not load after 2.0.0.

To resolve this, simply bump up the FujiRequiredVersion when the time comes.

Fill in this file according to the guidelines. Once done, your file should look somewhat like this:

{
"Id": "Madeline_MyMod",
"Name": "My First Mod",
"ModAuthor": "Madeline",
"Description": "My first mod, made to learn modding with Fuji",
"Icon": "MyModIcon",
"Version": "1.0.0",
"FujiRequiredVersion": "0.2.0",
"Dependencies": {
"OtherMod": "1.2.3",
},
"AssetReplaceItems": {
"strawberry": "CoolerStrawberry",
}
}

Important

Remember that mod IDs must be unique!

There's several ways to achieve this, but the most common (and Fuji-approved) way is to make your mod ID yourName_modName.

For example, if my name is Madeline and my mod name is CoolerStrawberry, my mod ID would be Madeline_CoolerStrawberry.

Note

Everything in this file is optional except for Id, your mod ID, and Name, your mod name, and the Version, your mod's version. Though, it's good practice to also include the minimum required Fuji version to avoid surprise crashes for users. You might also want to add a description, your name, and an icon.

Setting up an icon

  • To set up an icon, simply place the file as a png in your Sprites folder like you would for any other sprite.
  • Then make sure the Icon Field in the Fuji.json is set to just the name of that file (not the filepath), like "MyModIcon" and not something like "Sprites/MyModIcon.png"

Note

Mod Icons should generally be square, and have the same width and height. If it is not, fuji will try to make it square, so it might look squished. Mod Icons are also special, in that they cannot be asset replaced. (although you shouldn't really need to do this anyway)

Preparing your mod for release

You may zip your mod in order to send it to others. To do this, go to your mod folder, select everything inside, right click, select "Send to", and click "Zip folder".

You can then upload the resulting zip folder. Users will put this folder in their game's Mods directory to install your mod.

Warning

Ensure your mod zip is structured properly. It should be mod.zip/textures, mod.zip/maps etc. Not mod.zip/mod/maps.

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

Mod Setup Basics

axiand edited this page Mar 10, 2024 · 12 revisions

This page explains how to set up a mod for Celeste 64 using Fuji.

Mods are stored in the game's Mods directory.

To set up a new mod, create a folder in the Mods folder. Name it something unique. Generally, something like YourName_YourModName works best. From here on out, "your mod folder" will refer to the folder you've created

Fuji allows you to load custom assets, as long as they're in the correct place. The following folders are supported:

  • Audio for FMOD audio
  • Faces for character expressions
  • Fonts
  • Maps for your map files
  • Models for custom models
  • Shaders
  • Sprites
  • Text for Dialog
  • Textures
  • Sounds
  • Music
  • Libraries for compiled DLLs

Additionally, Fuji will take care of importing custom levels via the Levels.json files. It can also load custom dialog via .json files in the Text folder. These are explained in their respective wiki pages.

Mod Info Format - Fuji.json

Fuji requires you add a file to define some metadata about your mod, to give Fuji additional information about what your mod is and what it does.

To do this, we create a Fuji.json file in our mod's folder. The format of this file is as follows:

{
"Id": "<mod-id>",
"Name": "<human-readable-mod-name>",
"ModAuthor": "<mod-author-name>",
"Description": "<human-readable-mod-description>",
"Icon": "<mod-icon>",
"Version": "<semver>",
"FujiRequiredVersion": "<semver>",
"Dependencies": {
"<mod-id>": "<mod-minimum-version>",
},
"AssetReplaceItems": {
"<vanilla-asset-name>": "<mod-asset-name>",
}
}

Note

For FujiRequiredVersion, you'll want to put in the minimum version of Fuji required to load the mod. Generally, this would be whatever the latest version is at the time of you reading this page.

Do note, however, that your mod will likely stop loading with every major version of Fuji, since those can introduce breaking changes. So, if your mod asks for Fuji 1.2.3, expect it to not load after 2.0.0.

To resolve this, simply bump up the FujiRequiredVersion when the time comes.

Fill in this file according to the guidelines. Once done, your file should look somewhat like this:

{
"Id": "Madeline_MyMod",
"Name": "My First Mod",
"ModAuthor": "Madeline",
"Description": "My first mod, made to learn modding with Fuji",
"Icon": "MyModIcon",
"Version": "1.0.0",
"FujiRequiredVersion": "0.2.0",
"Dependencies": {
"OtherMod": "1.2.3",
},
"AssetReplaceItems": {
"strawberry": "CoolerStrawberry",
}
}

Important

Remember that mod IDs must be unique!

There's several ways to achieve this, but the most common (and Fuji-approved) way is to make your mod ID yourName_modName.

For example, if my name is Madeline and my mod name is CoolerStrawberry, my mod ID would be Madeline_CoolerStrawberry.

Note

Everything in this file is optional except for Id, your mod ID, and Name, your mod name, and the Version, your mod's version. Though, it's good practice to also include the minimum required Fuji version to avoid surprise crashes for users. You might also want to add a description, your name, and an icon.

Setting up an icon

  • To set up an icon, simply place the file as a png in your Sprites folder like you would for any other sprite.
  • Then make sure the Icon Field in the Fuji.json is set to just the name of that file (not the filepath), like "MyModIcon" and not something like "Sprites/MyModIcon.png"

Note

Mod Icons should generally be square, and have the same width and height. If it is not, fuji will try to make it square, so it might look squished. Mod Icons are also special, in that they cannot be asset replaced. (although you shouldn't really need to do this anyway)

Preparing your mod for release

You may zip your mod in order to send it to others. To do this, go to your mod folder, select everything inside, right click, select "Send to", and click "Zip folder".

You can then upload the resulting zip folder. Users will put this folder in their game's Mods directory to install your mod.

Warning

Ensure your mod zip is structured properly. It should be mod.zip/textures, mod.zip/maps etc. Not mod.zip/mod/maps.

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

Mod Setup Basics

axiand edited this page Mar 10, 2024 · 12 revisions

This page explains how to set up a mod for Celeste 64 using Fuji.

Mods are stored in the game's Mods directory.

To set up a new mod, create a folder in the Mods folder. Name it something unique. Generally, something like YourName_YourModName works best. From here on out, "your mod folder" will refer to the folder you've created

Fuji allows you to load custom assets, as long as they're in the correct place. The following folders are supported:

  • Audio for FMOD audio
  • Faces for character expressions
  • Fonts
  • Maps for your map files
  • Models for custom models
  • Shaders
  • Sprites
  • Text for Dialog
  • Textures
  • Sounds
  • Music
  • Libraries for compiled DLLs

Additionally, Fuji will take care of importing custom levels via the Levels.json files. It can also load custom dialog via .json files in the Text folder. These are explained in their respective wiki pages.

Mod Info Format - Fuji.json

Fuji requires you add a file to define some metadata about your mod, to give Fuji additional information about what your mod is and what it does.

To do this, we create a Fuji.json file in our mod's folder. The format of this file is as follows:

{
"Id": "<mod-id>",
"Name": "<human-readable-mod-name>",
"ModAuthor": "<mod-author-name>",
"Description": "<human-readable-mod-description>",
"Icon": "<mod-icon>",
"Version": "<semver>",
"FujiRequiredVersion": "<semver>",
"Dependencies": {
"<mod-id>": "<mod-minimum-version>",
},
"AssetReplaceItems": {
"<vanilla-asset-name>": "<mod-asset-name>",
}
}

Note

For FujiRequiredVersion, you'll want to put in the minimum version of Fuji required to load the mod. Generally, this would be whatever the latest version is at the time of you reading this page.

Do note, however, that your mod will likely stop loading with every major version of Fuji, since those can introduce breaking changes. So, if your mod asks for Fuji 1.2.3, expect it to not load after 2.0.0.

To resolve this, simply bump up the FujiRequiredVersion when the time comes.

Fill in this file according to the guidelines. Once done, your file should look somewhat like this:

{
"Id": "Madeline_MyMod",
"Name": "My First Mod",
"ModAuthor": "Madeline",
"Description": "My first mod, made to learn modding with Fuji",
"Icon": "MyModIcon",
"Version": "1.0.0",
"FujiRequiredVersion": "0.2.0",
"Dependencies": {
"OtherMod": "1.2.3",
},
"AssetReplaceItems": {
"strawberry": "CoolerStrawberry",
}
}

Important

Remember that mod IDs must be unique!

There's several ways to achieve this, but the most common (and Fuji-approved) way is to make your mod ID yourName_modName.

For example, if my name is Madeline and my mod name is CoolerStrawberry, my mod ID would be Madeline_CoolerStrawberry.

Note

Everything in this file is optional except for Id, your mod ID, and Name, your mod name, and the Version, your mod's version. Though, it's good practice to also include the minimum required Fuji version to avoid surprise crashes for users. You might also want to add a description, your name, and an icon.

Setting up an icon

  • To set up an icon, simply place the file as a png in your Sprites folder like you would for any other sprite.
  • Then make sure the Icon Field in the Fuji.json is set to just the name of that file (not the filepath), like "MyModIcon" and not something like "Sprites/MyModIcon.png"

Note

Mod Icons should generally be square, and have the same width and height. If it is not, fuji will try to make it square, so it might look squished. Mod Icons are also special, in that they cannot be asset replaced. (although you shouldn't really need to do this anyway)

Preparing your mod for release

You may zip your mod in order to send it to others. To do this, go to your mod folder, select everything inside, right click, select "Send to", and click "Zip folder".

You can then upload the resulting zip folder. Users will put this folder in their game's Mods directory to install your mod.

Warning

Ensure your mod zip is structured properly. It should be mod.zip/textures, mod.zip/maps etc. Not mod.zip/mod/maps.

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

Mod Setup Basics

axiand edited this page Mar 10, 2024 · 12 revisions

This page explains how to set up a mod for Celeste 64 using Fuji.

Mods are stored in the game's Mods directory.

To set up a new mod, create a folder in the Mods folder. Name it something unique. Generally, something like YourName_YourModName works best. From here on out, "your mod folder" will refer to the folder you've created

Fuji allows you to load custom assets, as long as they're in the correct place. The following folders are supported:

  • Audio for FMOD audio
  • Faces for character expressions
  • Fonts
  • Maps for your map files
  • Models for custom models
  • Shaders
  • Sprites
  • Text for Dialog
  • Textures
  • Sounds
  • Music
  • Libraries for compiled DLLs

Additionally, Fuji will take care of importing custom levels via the Levels.json files. It can also load custom dialog via .json files in the Text folder. These are explained in their respective wiki pages.

Mod Info Format - Fuji.json

Fuji requires you add a file to define some metadata about your mod, to give Fuji additional information about what your mod is and what it does.

To do this, we create a Fuji.json file in our mod's folder. The format of this file is as follows:

{
"Id": "<mod-id>",
"Name": "<human-readable-mod-name>",
"ModAuthor": "<mod-author-name>",
"Description": "<human-readable-mod-description>",
"Icon": "<mod-icon>",
"Version": "<semver>",
"FujiRequiredVersion": "<semver>",
"Dependencies": {
"<mod-id>": "<mod-minimum-version>",
},
"AssetReplaceItems": {
"<vanilla-asset-name>": "<mod-asset-name>",
}
}

Note

For FujiRequiredVersion, you'll want to put in the minimum version of Fuji required to load the mod. Generally, this would be whatever the latest version is at the time of you reading this page.

Do note, however, that your mod will likely stop loading with every major version of Fuji, since those can introduce breaking changes. So, if your mod asks for Fuji 1.2.3, expect it to not load after 2.0.0.

To resolve this, simply bump up the FujiRequiredVersion when the time comes.

Fill in this file according to the guidelines. Once done, your file should look somewhat like this:

{
"Id": "Madeline_MyMod",
"Name": "My First Mod",
"ModAuthor": "Madeline",
"Description": "My first mod, made to learn modding with Fuji",
"Icon": "MyModIcon",
"Version": "1.0.0",
"FujiRequiredVersion": "0.2.0",
"Dependencies": {
"OtherMod": "1.2.3",
},
"AssetReplaceItems": {
"strawberry": "CoolerStrawberry",
}
}

Important

Remember that mod IDs must be unique!

There's several ways to achieve this, but the most common (and Fuji-approved) way is to make your mod ID yourName_modName.

For example, if my name is Madeline and my mod name is CoolerStrawberry, my mod ID would be Madeline_CoolerStrawberry.

Note

Everything in this file is optional except for Id, your mod ID, and Name, your mod name, and the Version, your mod's version. Though, it's good practice to also include the minimum required Fuji version to avoid surprise crashes for users. You might also want to add a description, your name, and an icon.

Setting up an icon

  • To set up an icon, simply place the file as a png in your Sprites folder like you would for any other sprite.
  • Then make sure the Icon Field in the Fuji.json is set to just the name of that file (not the filepath), like "MyModIcon" and not something like "Sprites/MyModIcon.png"

Note

Mod Icons should generally be square, and have the same width and height. If it is not, fuji will try to make it square, so it might look squished. Mod Icons are also special, in that they cannot be asset replaced. (although you shouldn't really need to do this anyway)

Preparing your mod for release

You may zip your mod in order to send it to others. To do this, go to your mod folder, select everything inside, right click, select "Send to", and click "Zip folder".

You can then upload the resulting zip folder. Users will put this folder in their game's Mods directory to install your mod.

Warning

Ensure your mod zip is structured properly. It should be mod.zip/textures, mod.zip/maps etc. Not mod.zip/mod/maps.

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

Mod Setup Basics

axiand edited this page Mar 10, 2024 · 12 revisions

This page explains how to set up a mod for Celeste 64 using Fuji.

Mods are stored in the game's Mods directory.

To set up a new mod, create a folder in the Mods folder. Name it something unique. Generally, something like YourName_YourModName works best. From here on out, "your mod folder" will refer to the folder you've created

Fuji allows you to load custom assets, as long as they're in the correct place. The following folders are supported:

  • Audio for FMOD audio
  • Faces for character expressions
  • Fonts
  • Maps for your map files
  • Models for custom models
  • Shaders
  • Sprites
  • Text for Dialog
  • Textures
  • Sounds
  • Music
  • Libraries for compiled DLLs

Additionally, Fuji will take care of importing custom levels via the Levels.json files. It can also load custom dialog via .json files in the Text folder. These are explained in their respective wiki pages.

Mod Info Format - Fuji.json

Fuji requires you add a file to define some metadata about your mod, to give Fuji additional information about what your mod is and what it does.

To do this, we create a Fuji.json file in our mod's folder. The format of this file is as follows:

{
"Id": "<mod-id>",
"Name": "<human-readable-mod-name>",
"ModAuthor": "<mod-author-name>",
"Description": "<human-readable-mod-description>",
"Icon": "<mod-icon>",
"Version": "<semver>",
"FujiRequiredVersion": "<semver>",
"Dependencies": {
"<mod-id>": "<mod-minimum-version>",
},
"AssetReplaceItems": {
"<vanilla-asset-name>": "<mod-asset-name>",
}
}

Note

For FujiRequiredVersion, you'll want to put in the minimum version of Fuji required to load the mod. Generally, this would be whatever the latest version is at the time of you reading this page.

Do note, however, that your mod will likely stop loading with every major version of Fuji, since those can introduce breaking changes. So, if your mod asks for Fuji 1.2.3, expect it to not load after 2.0.0.

To resolve this, simply bump up the FujiRequiredVersion when the time comes.

Fill in this file according to the guidelines. Once done, your file should look somewhat like this:

{
"Id": "Madeline_MyMod",
"Name": "My First Mod",
"ModAuthor": "Madeline",
"Description": "My first mod, made to learn modding with Fuji",
"Icon": "MyModIcon",
"Version": "1.0.0",
"FujiRequiredVersion": "0.2.0",
"Dependencies": {
"OtherMod": "1.2.3",
},
"AssetReplaceItems": {
"strawberry": "CoolerStrawberry",
}
}

Important

Remember that mod IDs must be unique!

There's several ways to achieve this, but the most common (and Fuji-approved) way is to make your mod ID yourName_modName.

For example, if my name is Madeline and my mod name is CoolerStrawberry, my mod ID would be Madeline_CoolerStrawberry.

Note

Everything in this file is optional except for Id, your mod ID, and Name, your mod name, and the Version, your mod's version. Though, it's good practice to also include the minimum required Fuji version to avoid surprise crashes for users. You might also want to add a description, your name, and an icon.

Setting up an icon

  • To set up an icon, simply place the file as a png in your Sprites folder like you would for any other sprite.
  • Then make sure the Icon Field in the Fuji.json is set to just the name of that file (not the filepath), like "MyModIcon" and not something like "Sprites/MyModIcon.png"

Note

Mod Icons should generally be square, and have the same width and height. If it is not, fuji will try to make it square, so it might look squished. Mod Icons are also special, in that they cannot be asset replaced. (although you shouldn't really need to do this anyway)

Preparing your mod for release

You may zip your mod in order to send it to others. To do this, go to your mod folder, select everything inside, right click, select "Send to", and click "Zip folder".

You can then upload the resulting zip folder. Users will put this folder in their game's Mods directory to install your mod.

Warning

Ensure your mod zip is structured properly. It should be mod.zip/textures, mod.zip/maps etc. Not mod.zip/mod/maps.

Clone this wiki locally