A generic game engine made for the love2D framework
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.



All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.


  • Project renamed to Birb

  • New loading system


  • Add a gamesystem module

  • core/debug: new logging framework

  • camera+maps: add a way to add padding to map limits


  • world: extract map module from the world module

  • core/input: extract virtualpads from the input controller

  • core: The core is now separated from the rest of birb

[0.6.0] - 2019-07-20

  • Meta: Add proper crediting


  • actor2D: Make hitbox modifiable.

  • actor2D: Add multiple hitbox support.

  • assets: Add a way to get current relative frame

  • assets: Add more wrapper around animator functions in Sprite

  • world: Add more wrapper around sprite functions in BaseActor

  • assets: Add a new getCurrentAnimation function

  • world: Add a way to automatically load hitbox from a file

  • utils: Add basic table functions

  • camera: Add two new camera types: “middle” and “zoom”.

  • world: Add a fake 3D world, à la Zelda or BeatThemAll, complete with shadow support

  • examples: Test all player number and camera types

  • core.screen: Add a way to get coordinate and scale


  • world2D: Use a list for bodies (hitboxes, etc) and one other for actors

  • world2D: Make the hitbox an object, owned by the actor

  • actor: Rename all function related to YGravity to just *Gravity

  • world: Separate “queryRect()” into two functions

  • world: Make object creation more customizable by worlds

  • camera: Make mode configuration configurable

  • examples: Rename “movable” to “topdown”

  • camera: Brand new camera system based on canvases instead of just transforms

  • core: Activate vsync by default.

  • examples: Put together all assets.


  • world: Remove a forgotten camera debug function

  • examples: Add missing translations

  • camera: Fix onscreen coordinates by using new core.screen func

  • camera: Fix camera’s drawing in other resolution mode

  • world: Don’t draw unused sti objectlayer


  • actor: Remove all function related to XGravity

  • examples: Remove basic examples

  • libs: Remove hump.camera

[0.5.1] - 2019-06-21


  • examples: Add missing HUD example for one-player plateformer

  • world: Separate getting dimensions of the internal and advertised view.

  • world: use right camera internal coordinate

[0.5.0] - 2019-06-16

  • Meta: Add a Code of Conduct

  • Meta: Add a Changelog


  • world: Add an activity system

  • assets: Add an activity system

  • example/plateformer: add a basic pause button

  • scene: Add functions to add stuf before and after update and draw()

  • actor: Add functions to add stuf before and after update and draw()

  • world/camera: Add support for Head-Up-Display

  • world: Support batching actor loading

  • world: Add Actor.creationID to keep the order in which actors have been created

  • world: Add Actor.depth to keep the order in which actors are drawn

  • menusystem; Add a way to deactivate assets and the world when activating the menu

  • world: Add a reset function

  • examples/plateform: Add a pause menu


  • world: automatize world integration in a scene

  • world: only visible actors are drawn


  • core.input: use the right argument in core.input:flushKeys()’s loop

  • scene: use core.input:flushKeys() in Scene:flushKeys() instead of core.input:flushSourceKeys()

[0.4.0] - 2019-05-06

  • Add Bump2D-handled world system


  • world: Add a World2D world object using Bump2D as a backend

  • world/actor: Support bump2D filter

  • loveutils: love.math.toZero substract a variable to another to zero

  • assets: Add batch loading of assets

  • examples: Add batch asset files

  • examples/plateformer: Add a plateformer example

  • world: Add a splitscreen-compatible camera system powered by hump.camera

  • examples: Add cameras

  • world: Support object loading from Tiled

  • world/actor: Add sprite support in Actor2D

  • assets: Add support for sprites origins in tileset and animations

  • world: Add World:initActors() to init Actors

  • world: automatize multiple character handling

  • loveutils: utils.math.between(num, min, max) make sure that a number is between two value

  • world: Add a gravity system

  • world/actors: Actor:destroy() destroy the actor

  • world/actors: Add a basic timer system to actors

  • world/actors: Create a parent BaseActor that’ll serve as a parent for Actor2D and other future actors

  • assets: add getDimensions() to tileset, sprite and animators

  • world: add a generic gfx actor


  • examples/moveplayer: move to World2D

  • world: separate map loading from level initialization

  • examples/moveplayer: use a different map

  • examples/moveplayer: Use this example to show multiplayer capabilities

[0.3.0] - 2019-04-20

  • General cleanups and reorganisation of the base code to be more legible

  • Add translation

  • Some internal improvement to how gamecore works


  • examples: Basic Inventory menu

  • menusystem: Horizontal listbox menu

  • menusystem: Lock/visiblity management functions

  • examples/mainmenu: Add a back and exit widget

  • world: Embed librairies

  • world: Add actors managing functions

  • world: Map loading system using STI

  • examples: Add a movable multi-player example

  • world: Add a basic player system directly inside world system

  • menusystem: Widget.creationID contain the creation order of every menu widget

  • menusystem: Widget.order handle the order of the widget in the menu

  • world: add xsp and ysp variable to handle speed to the actor object

  • examples: add an option menu

  • menusystem: Widget:invalidateCanvas() to make a canvas need a redraw

  • core.lang: Get the translation data instead of directly putting them in core.lang.datas

  • core.options: Add controller variable

  • core.options: core.options:setInputKey(sourceid, padkey, key)

  • scenes: Scene:keypressed( key, scancode, isrepeat ) and Scene:keyreleased( key ) callbacks added

  • menusystem: Add a global activity flag

  • examples/options: Key customization handling

  • examples: Add music and SFX

  • menusystem: Add Menu:resetSound() to entirely reset the sound values of a menu

  • menusystem: Add Menu:setSoundFromSceneAssets(name) to simplify sound managin

  • menusystem: Add sound batch management function


  • menusystem: Separate activity and visiblity lock

  • menusystem: Add as an argument to widgets actions if the widget have been interacted by a pointer or a key

  • examples: Reorganize folder

  • world: Make world system need an actorlist

  • core.inputs: /!\BREAKING: Use a multi-source system for the input system, and adapt different module to use it

  • core.lang: /!\BREAKING: New language metadata format and complete rework of the translation system

  • core: directly handle love2D’s callbacks inside gamecore

  • menusystem: rename Menu:playSelectSound() to Menu:self:playSelectSound()

  • menusystem: Internally link the whole menusystem to a scene


  • MenuSystem.TextMenu wasn’t used since a long time, and was a menu that modified the widgets.

  • MenuSystem:keyreleased(key, code) was just dead code

  • core.lang:getStringList(library, file) is replaced in the new translation system


  • core: load core.lang

[0.2.0] - 2019-06-04


  • examples: Use some text menus in the example menu

  • examples: Test entity system

  • examples: Add a main menu to the examples

  • menusystem: Add functions to menusystem to set visibility to menus

  • menusystem: Add functions to menusystem to switch current menu

  • menusystem: Add depth system to menus

  • world: Add world and actor system


  • scene: rework input locking system to add a timeout


  • loveutils: Fix a crash in utils.math.pointDistance

[0.1.0] - 2019-18-03


  • examples: First two basic examples to show the capability of gamecore

  • scenes: Start using a wrapper around core.scenemanager.currentScene to set the new Scene

  • scenes: Add a storage system inside core.scenemanager to be able to keep previous scene

  • menusystem: Basic menu examples to test menu capabilities

  • assets: Add a mask system to Texture, Tileset and Animation


  • scene: Scene now registerd themselves

  • assets: Texture assets are now a custom object instead of directly using love’s texture.


[0.0.1] - 2019-16-03

  • Initial release based on a standalone version of Imperium Porcorum’s Core.