Modding
Modding refers to modifying any part of the game through means other than gameplay! This includes:
- Editing sprites (the game’s art)
- Editing dialogue
- Editing your save file
- Editing the game world itself with LDtk
- Editing and creating Lua scripts
Modding the game is a great way to learn how it works, and can lead to contributing to the base game itself!
Modifying Sprites
Most sprites in this game are in the .ase format, as opposed to .png.
This is because Aseprite is the primarily used pixel art software, and .ase is a much more convenient format to save sprites in, as it has native integration with Aseprite for things like layers and animations.
To edit .ase files, you can either:
- Purchase Aseprite for $20 USD.
- Compile Aseprite for free (can be a bit more technical, and takes time).
- Use Libresprite, a free and open source alternative.
When you’re ready, simply open any image you want to edit in the assets/sprites directory and let loose!
Modifying Dialogue
WIP
Modifying Save Files
WIP
Modifying Game World
To modify the game world, you need LDtk, a free and open source software for editing 2D levels.
You can then open assets/ldtk/world.ldtk and start changing it how you wish.
Modifying and Creating Scripts
Much of the game’s logic is put inside of Lua scripts, for the sole purpose of being moddable!
Knowing how to script the game correctly does depend on understanding Bevy’s ECS, but you can avoid that if you’re making small changes to existing code.
Picking a code editor
You really could use any text editor, but it’s better to use one with good Lua support for things like syntax highlighting and autocompletion.
I recommend either Zed or VSCode, both needing the Lua extension installed for the best development experience.
Basics
The easiest way to modify scripts is just by changing variables’ values!
To see this in action, open up assets/scripts/player.lua and go to the set_player_values() function.
Inside of this function, you can change the values of attributes given to the player, like acceleration and max speed.
-- a function that sets attributes of the player.
function set_player_values()
---@type MovementAcceleration
local acceleration = world.get_component(entity, MovementAcceleration)
---@type MaxLinearSpeed
local max_speed = world.get_component(entity, MaxLinearSpeed)
-- set attributes
acceleration[1] = 850.0 -- change this!
max_speed[1] = 100.0 -- change this!
end
You can even do this while the game is open. Scripts are hot-reloadable, meaning changes are applied in the game the moment you save the file!
Contributing
Contributing is when you make a change to the game that gets officially accepted. There are many ways to contribute, like improving art, improving and optimizing code, and adding missing and highly requested features!