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 abb1198ad9 asteroid-shooter: axeman walk 8 hours ago
.github/workflows github: mv all ttf when create tar.gz 4 weeks ago
SDL_mixer@93d264b2bd build: add sdl git module 9 months ago
app/image_viewer rpg-fight: allow not lpcs character 3 years ago
core rect: bind setters 19 hours ago
docker Update 2 months ago
example/modules remove very oudated and broken examples 1 year ago
games Update 2 months ago
include text-screen: add txt-file option 4 weeks ago
modules asteroid-shooter: axeman walk 8 hours ago
scripts-dependancies lua: add a function to create Entity from lua array 2 weeks ago
sdl-gpu@c2ce97f031 map: can't get negative value 8 months ago
tests sdl: implement margin and use it in text-screen 4 weeks ago
tinycc@9ef0c42b17 3rdparty: update tcc 1 year ago
.gitmodules add ywCanvasNewImgFromTexture2 and update sdl_gpu 8 months ago Update 4 weeks ago
DejaVuSansMono.ttf sdl: new default path for font 3 years ago
LICENSE Create LICENSE 4 years ago
Makefile Update Makefile 2 months ago Update 3 months ago build: fix error from 5 years ago
configure Update configure 2 months ago game: gamemode support 3 years ago script: add cpp to 4 years ago build: add gdb script 4 years ago
lgtm.yml fix yaml ? 3 years ago build: better game packaging 1 year ago Update 2 weeks ago
sazanami-mincho.ttf sdl: use japanese font by default 4 weeks ago dialogue-box: it move 4 years ago tests: fix pacth in 4 years ago widget: remove widget-callback.h 4 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

./ -P $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 games using YIRL (
  • modify some functionality form a game
  • copy one to create your own game/module

Ideas of Contributions/TODO

  • use Linux coding style
  • create a module that allow to use web radio
  • add isometric view in map
  • add canvas widget, with an API base on HTML5 canvas [partially done:]
  • add an hex map
  • add any other cool widget
  • remove glib
  • make a raycasting module
  • Improve 8086 emulator module
  • BASIC emulator module
  • add any language support (python, perl and ruby would be nice)
  • add any cool game template module
  • support that, and add throphy mechanisme in yirl