Contributing Guide - FujiAPI/Fuji GitHub Wiki

Fuji Contributor's Guide

If you're reading this, it means you're probably interested in contributing to Fuji. If that's true then, awesome! We're glad to have you here.

Let's set down some ground rules first:

  • Make sure your patches extend from the dev branch and that your PR also targets dev. The main and beta branches are reserved for release pushes.
  • Do not modify the vanilla gameplay. We'd like Fuji to hopefully be a speedrun/TAS-compatible mod loader. Stuff like visual/critical bug fixes and feature implementations is fine.
  • Take note of the minimum requirements and make a good effort to adhere to them. We want Fuji to run on a very wide range of setups, both new and old, much like Celeste 64. If your patch would require us to raise these requirements by a substantial amount, it needs to go back to the drawing board.
  • We're not big fans of adding additional dependencies. If you really must, please run it by us first.

Project Structure

Knowing the project structure is important to contributing. While we can't give you the same level of familiarity with the project as a seasoned maintainer in 15 minutes, here's a brief rundown, starting in the Source folder:

  • Actors - code for the in-game actors.
  • Audio - code that implements audio for the game. This doesn't get touched 99% of the time.
  • Data - the game's data structures, such as settings, saves, map data, etc.
  • Graphics - implementations for the game's various graphics and rendering systems.
  • Helpers - helper utilities.
  • Mod - anything and everything strictly related to mods.
    • Core - the heart of the modding system.
    • Data - data structures for mods.
    • Filesystem - file system APIs for mods.
    • Helpers - helper utilities.
    • Hook - managers and code for MonoMod hooks.
    • ImGui - ImGui implementation.
    • Menu - user-facing menus relevant to mods.
    • Patches - custom Fuji patches targeting the vanilla game or its dependencies
    • StatusEffects - code relating to the status effect system.
  • Scenes - the game's scenes. Scenes are user-facing classes that provide gameplay, such as the main game scene, World.
  • Screenwipes - code that implements screen wipes for scene transitions.
  • Spatial - 3D helper utils.

Also, the code that runs the game is in Celeste64.Launcher, in the project's root directory.

You'll also see the Content and Mods folders in the root dir. Content is the game's assets, it's usually left untouched. Mods contains prepackaged mods that come with Fuji. If you're adding a new prepackaged mod (but please get permission first!), modify the gitignore file to make sure it isn't ignored.

Getting in touch

Before you even start working on your PR, it's generally a good idea to run it by the maintainers, especially if your PR is a feature implementation, or any kind of major rework. This step is important because we'd hate to see all your work go to waste just because your contribution isn't exactly what we're looking for.

Now, if you really want to discuss everything over GitHub issues, that's fine. But we highly encourage you to join our Discord server and talk with the maintainers directly - this will likely give you a faster response than going back and forth in issue comments. We have the @Fuji Maintainers role, you can spot us by the purple/yellow names. Feel free to say hi!

Building your patches

The build process is deliberately left simple to avoid headaches. Run dotnet build in the project's root directory. The resulting executable should be at /Celeste64.Launcher/bin/.../Celeste64-Fuji.exe.

Submitting your patches

Open a new pull request. Please describe your changes as accurately as possible in the subject line and body.

Please leave the "Allow maintainers to edit this pull request" option enabled. We're gonna want to go through your changes and review them, and it'll make things faster if we can just push directly to your fork.

Allow some time for your changes to be reviewed and, assuming your PR passes the review, you're all done! Enjoy your Fuji contributor status, and thanks for helping us make the project better!