A metroidvania template in Love2d.
- Love2d 11.4
- a recent enough
make
(can be installed with chocolatey on windows for example; more info here) - if you plan on deploying to itch.io, butler - run
butler login
before you use the Makefile - if you plan on bundling for web, a compatible version of Node.js, since we use love.js.
This project is set up to use love-deploy. Follow the README there to set everything up the way it should!
# project folder for Love projects
- myLoveProjects
- love_deploy_makefile_here
- your_project_here/
- project_Makefile_here
- LDtk to design levels
- Aseprite to create pixel art animations
- Anything that can produce audio files compatible with Love2d. Good options include Bosca Ceoil and LMMS for example.
- VS Code
- easy input mapping with baton
- responsive resizable pixel perfect screen with push
- gamestates with ScreenManager
- signals and message passing with hump.signal
- light OOP with classic
- a better way to debug tables with inspect
- automated Aseprite animation import with peachy
- fancy camera effects with STALKER-X
- LDtk tilemap parsing and collisions with tilemapper, json.lua, and bump.lua
Not included, but easy to add:
extensions.json
lists recommended extensionssettings.json
sets a few things like autoformatting, Lua Autocompletion, etc
This is a list of rules used to enforce a standard coding style.
This is where you find all the libraries we have installed. While it is possible to fetch them from GitHub using submodules or a package manager, it's often safer to just download them and include them in this folder. You'll notice that some libraries depend on other libraries, like peachy
does on tween
for example, which explains why we have tween.lua
in this folder.
Put anything related to art (sounds, music, pngs, aseprite json, etc) in this folder.
You can think of this as a way to define both global variables as constants, where tables would be less ambiguous and risky than strings for example (signal names are a good example), but also config values, like screen and game sizes.
This is where we put all the actors in the game: enemies, player, items, projectiles, etc. We also use classic
, a lightweight OOP library for Lua, which allows us to define classes and extend them as we want.
This project uses ScreenManager
(more info here to manage scenes/states/screens/whatever you want to call them. Each one of the files inside this folder is an instance of Screen
, which redefines the Love2d callbacks such as update
and draw
.
This is where it all starts! Also have a look at conf.lua
, which holds the config for the Love engine; more info here.