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.
Matthias Gatto ef609f3adb entity: add floats operations 2 days ago
app/image_viewer rpg-fight: allow not lpcs character 2 years ago
core canvas: fix odd bugs 2 days ago
docker docker: nproc and submodule init 3 months ago
example/modules remove very oudated and broken examples 3 months ago
games Update start.json 3 months ago
include entity: add floats operations 2 days ago
modules sprite-manager: handler advance 6 days ago
scripts-dependancies lua: add rand_array_elem 9 months ago
tests modules: small non fixies 1 week ago
tinycc@9ef0c42b17 3rdparty: update tcc 3 months ago
.gitmodules 3rdparty: use tinycc with cleanup 2 years ago yirl: spellfix 2 years ago
DejaVuSansMono.ttf sdl: new default path for font 1 year ago
LICENSE Create LICENSE 3 years ago
Makefile sprite-manager: add to make install 1 week ago Update 3 months ago build: fix error from 4 years ago
configure build: fix linux, break windows 5 months ago game: gamemode support 1 year ago script: add cpp to 3 years ago build: add gdb script 3 years ago
lgtm.yml fix yaml ? 2 years ago build: better game packaging 3 months ago build: don't remove libpcre 10 months ago dialogue-box: it move 3 years ago tests: fix pacth in 3 years ago widget: remove widget-callback.h 3 years ago

YIRL isn't a Rogue-like

YIRL is a WIP,

YIRL is a game engine aiming to be fully configurable, fully scriptable and mod friendly.

YIRL has been started as an school project at EPITECH

The first version, the one release at the end of my scholarship can be found on bitbucket

for peoples who don't like github:


The idea behind YIRL is to give to the user some basic tools and widgets that everyone can reuse or wrap into more complex widgets. We can see YIRL as a CMS for video game: Everyone should be able to add module to YIRL, and everyone should be able to wrap modules into more powerful modules.

As an example the snake module is a map with more function and a init, it's basically an inheritance of a map, this allow everyone to add a snake easily in his game. Snake module is written in lua, but as YIRL have a generic script system, we could have written snake in any scripting language. Here is an example how Snake module can be use: Another example would be how I integrate most games widgets into my RPG Sukeban: I first load the games modules in sukeban start.json: An then create a lua in widget that is of the type of the desired game that is then push in the container widget: you can then call play function, that will start and run the desired game. quit and exit callback are used in most game widget to tell the game what to do when you quit the game. It need to be implemented in the module and generally quit the engine by default.

supportted scripting languages are lua, C(with tinycc), scheme(s7), javascript(quickjs) and yb(YIRL own asm) feel free to add your language :).


YIRL is licensed under the LGPL license, the idea behind that, is that you can add a modules under the license you want, but if you make a modification to the engine, you need to share it.


  • include: headers
    • sys: system header, that can be useful for TCC
    • tinycc: tcc libc header
    • YIRL: YIRL header, use internally and for TCC scripting, but so far, the best documentation, most functions have bindings
      • widget.h: widget base class and common widgets functions
      • events.h; check if a key have been press, windget contain functions to handle events too, but these one are better
      • map.h: a square map
      • menu.h; either a clasique menu or a panel
      • canvas.h: canvas API(for 2D rendering)
      • text-screen.h: a simple text widget.
      • container.h: widget that contain others widgets
      • pos.h: helpers to manipulate everything with a position
      • rect.h: helpers for rectangles
      • sdl-driver.h; internal, look away
      • keydef.h: keyboard touches define base on curses key numbers
      • game.h: starting point, initializ everything, and handle modules
      • entity.h: the YIRL entity system, use everywhere in the engine
      • debug.h: some debug functions
      • description.h: generic api for descriptions files(files that describe entities tree)
      • json-desc.h
      • script.h: generic api for scripting manipulation
      • lua-script.h
      • tcc-script.h
      • native-script.h: allow to create FunctionEntity from YIRL internal API
      • lua-binding.h: binding between yirl api and lua
      • block-array.h: yirl internal array use by ArrayEntity
      • sound.h: yirl abstract sound system
      • sound-libvlc.h: libvlc sound implementation
      • util.h
      • timer.h
  • core: engine sources
  • test: unit tests
  • modules: set of basic YIRL modules, still used a lot, it contain some games too, tiled map parser, and a character generator that use Liberated Pixel Cup sprites
  • games: old crap, on which I don't work anymore
  • example: all examples are outdated


Obviously contributions are very welcome, to contribute you can simply make a Pull Request on GitHub, if something is wrong, I'll tell you :) As I didn't have time to write a coding style, in case of contribution, you should just try to imitate code already in place.

I'd like to use Linux coding style, but this would require to change every functions and structures names. A good contribution would be to make YIRL compatible with Linux coding style.

Projects using YIRL


Development package of these libs:

  • glib2
  • lua 53+
  • sdl2, sdl2_image, sdl2_ttf
  • json-c
  • sdl2_mixer with a version >= 2.0.5 (you can use ./configure --clone-sdl-mixer)


Linux - Mac Os:

git submodule update --init

Due to the way Ubuntu package lua, you need to do ./configure -t ubuntu instead of ./configure

Windows: you need to use msys2:

git submodule update --init
./configure -t mingw-i686

chat with us


Modules are a very important part of YIRL, a modules can be a set of functions, A widget that implement some game mechanism(like snake), or a full game (like game/vapz)

Each modules have a start file that will serve as entry file, and will tell YIRL how to load every other files. It can be either a json file (start.json), or a C/lua/scheme/javascript file. how to load every other files

Start a game from the source

./ --default-tcc-path --binary-root-path $PWD -d path/to/game/module

Package Game

for windows you can use with mingw

for linux (like Arch Linux that I use BTW):

Both script are rarly used because I'm lazy and might require manual inervention to remove some lib Also you should use an old distro (like centos 6) to package you game, otherwise old(or stable) distro might have incompatibility wih glibc

how to start using YIRL

For now the easier way to use YIRL is to come chat with us and ask for help But you can still understand how YIRL work by:

  • using examples
  • reading examples json file, and scripting files (either lua, C or yb)
  • copy past an example and change it to create your own game
  • patch every things that don't work

Ideas of Contributions/TODO