0xFF
CC Attribution 2.0 Belgium:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor.
Moulet, Xavier
Create a complete game for the bitbox DIY console with GIMP on a single256x256, 256 color image, and use the hardware (or an emulator) to play your(small) multi level platformer with custom levels, sounds and unique enemybehaviours.
 Otherwise, there's so much noise. Okay, thank you so much. So, hello everyone. I would like to present you a game framework for the Bitbox. So this presentation will be a little nerdy maybe, and it has been fun to do. I don't know if it would be fun to use or to watch, but anyway, it's the occasion to present it. So first, what's the Bitbox? The Bitbox is a small console that has been made for fun, of course. I will pass it to you. It's a tiny console, do-it-yourself, open source, open hardware. And the idea was to have a side project for fun, to build a console because I like electronics, so what could I do? Well, game console, of course. And the aim is to be do-it-yourself, so that other people could redo it themselves. So availability of the components, so you don't have to buy hundreds of thousands of the same chip to actually have the chance to have one. So it's a very simple way to do that. You can do that in your basement, which I did, with no particular skills or hardware. So it's a kind of retro game console project because do-it-yourself generally means limited power, generality, and it matches very well with the retro game concept, and it's fun to build some game. And in a way, it's really retro coding also because I'll show you it's very low level. So the characteristics of... You can't see. Okay. It's single board computer or console. There is one chip on it only. That was one of the simplicity of the design decisions. The output is on VGA. There is a 15-bit output VGA. You got two USB, one microSD input, so that you can load the games. The CPU itself is a microcontroller, so you're getting it 168 MHz, one mega flash, so one game should make one maximum, and 192 K of RAM, which means that at a typical resolution, 640 by 480, you don't have enough room to store a single picture, a single screen on RAM. So you have to generate it, and you have to raise the beam, meaning that at the beginning, you have to generate line by line very quickly, and at the end of the screen, you get it up, so you move your game and your advances, and go back and generate on the fly. So you cannot... For example, if you want an output movie, you cannot remember what was the preceding frame to compress, for example, because you don't have enough memory. But that's make it fun. It's basically the limitations that make it fun, because Raspberry Pi 3 has had on how many times the power of this, it's very tiny. And since it was too powerful, I did also a bitbox micro, which is basically half the bitbox, in every possible element, so the size is roughly half. The number of USB ports is half, and the number of microSD is half, meaning there is none. The CPU, the memory, the resolution, everything is in half. So that's basically it. The development... If you want to have a look... I don't know what to say. The development on this is basically a retrocoding. You directly on the bare metal, you don't have the room to have an operating system, no driver, no lips, you have your game and you run directly on the console, and you have to code everything by hand, which is fun for some kind of people. CD development is easy. Generally, those are modern interfaces compared to retro console. You have USB, you have etc. And the tool chain is standard GCC. You download that on Ubuntu, for example, or DBM, GCC, or MBD, you can develop for it. So it's quite simple to develop. There are people who have developed with this on Ubuntu, Windows, macOS, and Haiku, of course, thanks, to some people here. So there is a PC backend, it's not really an emulator, it's basically a re-implementation of the basic API, your kernel API. It's basically a kind of a list to initialize everything to simplify the development. And there is a re-implementation of this higher level API with SDL. So basically you make all of your game high level stuff, and you code it on the PC, and then you port it on the Bitbox. There are some people who developed completely a game with the API and with the emulator, let's call it like this, and they send it to me, and just with a re-compleation, it runs on the Bitbox, which was nice for me as part. There is some generation. Some generation is basically, you write a byte on memory, and it outputs to the speaker. That's the kind of level of hardware you have, so basically none. So you have to re... but there are existing libraries, very nice library for cheat tunes, so made by somebody. Thanks, Adrian. With a tracker to compose your songs and to help you having cheat tunes. USB handling is particularly nice and simple to write yourself in C, so there are libraries, because it's really painful, in fact. Handling a USB gamepad, et cetera, because it's difficult to make a gamepad that is pleasing to do, so I didn't want to do that myself. So I'm reusing USB standard gamepad that you can find for very cheap. And the graphics generation are kind of library also, available to avoid you for doing routine stuff, but you can do it yourself. And the basic... the basic, I would say, thing about this console is not invented here. The thing is, do we do everything yourself? So it's perfectly understandable to drop everything, every library, et cetera, and recreate on your own. That's what's interesting for certain people. Games and community, there are a few big boxes around the world, a few dozen. There are small, active core developers for making games or libraries. There are custom extensions, hardware extensions, and video output. You can output on TV, not using a SCART and Periter, so there is some output to this that has been hacked from the console itself. There is an external port for the gig port, so you can plug whatever you want and have external, funny controllers or physical buttons or what you want. And you have to do the driver yourself, of course, et cetera, et cetera, et cetera. There is a software index with, so far, I think, 26 centuries for different software. So you can see there is a full motion video game, so decoding live from the SD card, directly output and decompressed live. There is a port of Bulldo-Dash. There is... There are some old games over there. Jumping games, polarity, Rapidbo, which is kind of a mobile game, Snake, Forest, Stitchers, where is it? Some other great ports of Superness. There are emulators also, and 8-bit emulators. It's a 32-bit console playing 16-bit games and emulating 8-bit systems. There is Gameboy emulator, ZX-Pictrum emulator, and, of course, M05, which is a Thompson, it's a French computer, nobody knows, but I had it in school, so I... I didn't honestly write the emulator. It's just a port of existing emulators and axing to the code to remove mostly everything that is not... so that it could fit on the memory. And, yeah. There is a graphical drum loop sequencer. There is a tracker for which there is no... OK. And some... Sorry? There is a switch on the link. And the link. If I can follow the link. Yep. I want a switch. I should have done one. No, there isn't. If it's worth, it should be. OK. So it's a tracker to compose your sound directly on the bitbox. It's for some work in progress, BitCaster, Bomberman, Krone, which is not finished, and many, many, many, many prototypes of games, which I didn't finish, of course. Let's get back to this. So making games. How do you make games for the bitbox? Well, let's make a little survey quickly. Who knows game development in C? Quite a lot of people. Handling or making simple games. General light based graphics, sprite styles with collision. So making a small 2D, making pixel graphics with game 2D, little design with tiles, by example. And cross-compining everything for another M Cortex M4. It's... And compose music with a tracker for this. It seems a little complicated. It is not every single task is quite not complicated. But if you don't know several of them, it can be a little intimidating. So the idea was to lower the perceived bariatric entry to build a program and design some simple games for the bitbox. So let's make a new survey. Who can draw a BMP file with GIMP? So the idea was to simplify the process and having complete simple game on a unique image. So you put it on the Aussie card, you put the Aussie card on the console, and there is an interpreter who loads the image in RAM and runs from this. And you then play the game. It's a Mario Maker for the bitbox, except you can redraw it yourself. Restricted to certain kind of 2D games, but there can be several kind of gameplays. Of course, it's very limited, and that's the idea, of course, to limit it. General workflow, there are the reference MD, you saw a kind of documentation, you can read it, you saw your BMP file as SD card, and the reference generates some definitions, the program reads them and plays it, or the PC emulator. So what do you need to do a full level 2D platformer, and how do you put that in an image? So basically to make a 2D game, platformer, such with our infinite runner, you need to have world physics, how do you scroll, how do you jump, is there any gravity or not? You need to have tileset graphics, so little pictures that will repeat to make your level. You have to have your level time maps, how do you order different levels. The sprite frames graphic, of course, different frames, different behaviors and movements. There are different ways to do that. You can have a full programming language, it exists, there is a Montgrey Yon, for example, it's a graphical programming language, but it doesn't really fit well on the limited, very limited image. So you can also use presets, so you just have one sprite, is always such as Henry. The idea was to mix those to be versatile enough and to fit in one, and you need to have music and sound effects. So how do you encode it? First you start with a blank canvas. It's 256 colors, so you can index it by number from 0 to 0xff. And this number will be repeated quite a bit of time, so hence the name. 256-color pixel-barred pixels on the bitmap, it's divided in 16 by 16 squares, or 16 by 16 pixels, which means that with your color tiles and pixel per tiles, you see that there is a mapping between the tile, the number of the tiles, if you number the tiles themselves on your drawing, one pixel in a tile, you can have the top left pixel, which represents the top left tile on the whole image, and a color. So you can give a color and reference, and there is a relationship with the tile, with the color, because the color has an index from 0 to 0xff. So it can represent a tile, a pixel in the tile maybe, so let's use this. So this is, for example, a simple row canvas, but you can start from a blank one, it's just to show you how it's ordered. You see there is a color represented for each tile, so if you say color EB, it represents this tile, and if you say color 0, it's the other one, you don't have to start with that, you just have to start with a single palette, which is ordered like this, and you can see that on your palette, the position of the color represents the position on your picture. That's easier to draw. Now, how do you do the different drawing? The tiles, well, you draw it on the canvas. The sprite frame, you draw them on the canvas, but you can have several tiles to draw them. And the tile map, the tile map meaning your levels, well, you will draw with a color, referencing the tile that you precedently draw on the canvas. Let's make an example. The top left tile is number 00, so you draw black on your level. For now, we have no behavior. We didn't say that this is some sky, this is something that blocks the player, etc. So, for example, here we have some tiles on the top left, so we have nine tiles and plus one, and a level under it. The sky over there is black, meaning that it will reference this small, this small here, and you see here the terrain, sorry, but it corresponds to the color of this tile here, 16 by 16, etc., etc. So, you can draw your level like that. You can put some sprites. There are some sprites over there, so there are, for example, five elements, and you can see the green points, meaning that these points will be the hitbox of the sprite. You can have bigger sprites, so your hitbox will be separated on several sprites, so you will scan after that where it is. How do you represent that on your level? That's easy. The first frame of the animation is in number 40, so you put color number 40 on your level. You still cannot play it, it's just display. You can have another sprite, bigger one with another hitbox, by example. This one has only two frames. We didn't say how to animate it. There are five special tiles at the bottom, which are here to define all of the behaviors. There is a mini map on the bottom left. Maybe you've seen that in the presenting. The mini map shows you that each pixel here represents a tile on your whole drawing, and there is preset colors for saying, well, this is the ground, this is the sky, this will kill you if you go into rate, etc. This color here is the color of the first level. If you are in the program, you need to find the first level. It's here. The number of levels, objects, info. There is one tile where you can reference how your objects will behave. You can specify three things with three pixels, basically per line, per object. First one, four, where is position your object. The first is the physics. How does it work? Is it standing? Does it walk? Does it chase the player? Does it, etc. The second one is what does it do when you collide with a player? Does it give a bonus? Does it kill you? Does it make you end the level, etc. Another one meaning what do I do after I'm killed? Do I spawn another sprite? You can have interaction. For example, if you jump on a mushroom, it spawns another one that is a coin, and it spawns another one with an animation for giving you points, for example. You can have some combinations between your different behaviors. There are loads and loads of different behaviors. I will show you, maybe if I have time in the reference, you can see that. But you can mix in much different ways. For the movement, you have static, move once, and then disappear, bullet, so it goes fast through the screen. Where do I walk? Walk and fall. If the enemy walks and jumps sometimes, the sign pattern, for example, the collision. Does it kill the player? Does it switch sometimes from one level to one identity to the next one if you jump to it? For example, you can have keys to open some doors, for example, with that kind of behavior. What does it do when you are killed? You can spawn another sprite. You can see there, the minimap and the different sprite. Quickly, you can finish it with some titles. Here you have four titles for four levels. You have some titles also for another levels. You have some pixels defined here at the beginning to give you parallel to number. You can do world physics of your game. I didn't add music. I'll show you. You can also use a real map editor. I just created something to use a real map editor and then output to an image. Let me show you the images that you can do with that. Can I do it better? This one is a finished game. I'll show you how it works. This one maybe you've heard about. You can do that like that. It's basically auto scroll with infinite jumps and you die when you touch anything. Maybe you've heard of this one also. This is basically a four level Mario Bros. Not everything is finished. You can compose everything with the different elements. You can see how our positions are different levels, what are the different titles and what are the different sprites. There is also this one which is absolutely not finished but it could be done maybe. This one is a tiny space shooter. This one is a little bit ashamed of the graphics but it should be kind of ghost and goblins or... We'll have to have a small demo. Maybe... Does it work? Can you see something? This one is bad. Basically, this is the demo I've shown you. Maybe let's start with the... This one is the one that I've shown you as a graphics. It's a very simple title but it's directly read from the Bitmap graphics. I didn't define numbers on the demo. So you have the guy. You can jump. You can... You can see that the gravity is off because you can jump very high. There is some coins over there. So it's a sprite that doesn't move except... that has one frame, moves a little bit and then just... If you touch it, it's killed. There is no output. And you can... And if you've got one... You have some... So let's just take another one. This one is a demo game. Maybe a little more... Graphically less advanced but... And you can add... There are ladders. So... I'm bad. And if you can go through the second level, you can... The second level is a shooter on this game. Let's show you maybe a shooter how you can... Space Force. I don't know if it works actually, this one. Yes, it does. You cannot shoot, in fact, because... Because I didn't code the shooter. So you have to... Okay, so... Okay, I failed. Okay, maybe the Mario... It was just a simple... Yeah. So the first level... There is sound, actually, for this one, with the first level of Mario. There is the first sound of Mario, but you can see that... And I'm bad, okay? But it's playable. It's basically playable. So it's really a walk in progress. You can... You can try yourself to build on another one. You can draw all you need is Gimp and the emulator, which is running and running on the PC. And... Yeah, that's physically it. And you can use your same drawing to run it on the big box, directly. That's it. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Maybe please give me questions in a moment. Okay. Yeah. So it's only platform games, or are there plans to allow, like, top-down games, maybe? There are too many ideas, but, yes, you can do... Well, you could do top-down games with the gravity because you fall. You have a maximum vertical, so you could do that with it, with vertical... With no jumps, vertical levels. And the gravity, it could be... Yeah, you could add a top-down. Growing up would mean that you can have a negative gravity. It could be done, of course. But, yeah, the idea is that we will add some world physics from... And expanding what the number of games you can do. Yeah. Sorry. Oh, sorry. So is the framework interpreting the image, or are you translating it into something, transpiling it, or by many... No, because the bitbox... Sorry, yeah. The question is, is there any transpiling or recompilation of the image in RAM? No, because the bitbox is too constrained for that. And so it directly reads the content of the game in memory. It dumps... Basically, it dumps of your image in memory and interpreting and generating the graphics on the fly. Is it to integrate multiple games? No. No, not for no reason. I don't know. Well, of course, if you have got a compiler. Sorry, the question was, can you make multiplayer games? Well, if you've got a good compiler and you have enough time, you could. For no reason, it's a little bit forfeited from this. But, yeah, why not? There are two USB. You should... you can have...
 Otherwise, there's so much noise.  Okay, thank you so much.  So, hello everyone.  I would like to present you a game framework for the Bitbox.  So this presentation will be a little nerdy maybe,  and it has been fun to do.  I don't know if it would be fun to use or to watch,  but anyway, it's the occasion to present it.  So first, what's the Bitbox?  The Bitbox is a small console that has been made for fun, of course.  I will pass it to you.  It's a tiny console, do-it-yourself, open source, open hardware.  And the idea was to have a side project for fun,  to build a console because I like electronics,  so what could I do?  Well, game console, of course.  And the aim is to be do-it-yourself,  so that other people could redo it themselves.  So availability of the components,  so you don't have to buy hundreds of thousands  of the same chip to actually have the chance to have one.  So it's a very simple way to do that.  You can do that in your basement, which I did,  with no particular skills or hardware.  So it's a kind of retro game console project  because do-it-yourself generally means limited power,  generality, and it matches very well with the retro game concept,  and it's fun to build some game.  And in a way, it's really retro coding also  because I'll show you it's very low level.  So the characteristics of...  You can't see.  Okay.  It's single board computer or console.  There is one chip on it only.  That was one of the simplicity of the design decisions.  The output is on VGA.  There is a 15-bit output VGA.  You got two USB, one microSD input,  so that you can load the games.  The CPU itself is a microcontroller,  so you're getting it 168 MHz, one mega flash,  so one game should make one maximum,  and 192 K of RAM,  which means that at a typical resolution,  640 by 480, you don't have enough room  to store a single picture, a single screen on RAM.  So you have to generate it, and you have to raise the beam,  meaning that at the beginning,  you have to generate line by line very quickly,  and at the end of the screen, you get it up,  so you move your game and your advances,  and go back and generate on the fly.  So you cannot...  For example, if you want an output movie,  you cannot remember what was the preceding frame to compress,  for example, because you don't have enough memory.  But that's make it fun.  It's basically the limitations that make it fun,  because Raspberry Pi 3 has had on how many times the power of this,  it's very tiny.  And since it was too powerful,  I did also a bitbox micro,  which is basically half the bitbox,  in every possible element,  so the size is roughly half.  The number of USB ports is half,  and the number of microSD is half,  meaning there is none.  The CPU, the memory, the resolution, everything is in half.  So that's basically it.  The development...  If you want to have a look...  I don't know what to say.  The development on this is basically a retrocoding.  You directly on the bare metal,  you don't have the room to have an operating system,  no driver, no lips,  you have your game and you run directly on the console,  and you have to code everything by hand,  which is fun for some kind of people.  CD development is easy.  Generally, those are modern interfaces  compared to retro console.  You have USB, you have etc.  And the tool chain is standard GCC.  You download that on Ubuntu,  for example, or DBM, GCC, or MBD,  you can develop for it.  So it's quite simple to develop.  There are people who have developed with this on Ubuntu,  Windows, macOS, and Haiku, of course, thanks,  to some people here.  So there is a PC backend, it's not really an emulator,  it's basically a re-implementation of the basic API,  your kernel API.  It's basically a kind of a list to initialize  everything to simplify the development.  And there is a re-implementation of this  higher level API with SDL.  So basically you make all of your game  high level stuff, and you code it on the PC,  and then you port it on the Bitbox.  There are some people who developed completely a game  with the API and with the emulator,  let's call it like this, and they send it to me,  and just with a re-compleation, it runs on the Bitbox,  which was nice for me as part.  There is some generation.  Some generation is basically, you write a byte on memory,  and it outputs to the speaker.  That's the kind of level of hardware you have,  so basically none.  So you have to re...  but there are existing libraries,  very nice library for cheat tunes,  so made by somebody.  Thanks, Adrian.  With a tracker to compose your songs  and to help you having cheat tunes.  USB handling is particularly nice and simple  to write yourself in C, so there are libraries,  because it's really painful, in fact.  Handling a USB gamepad, et cetera,  because it's difficult to make a gamepad  that is pleasing to do, so I didn't want to do that myself.  So I'm reusing USB standard gamepad that you can find for very cheap.  And the graphics generation are kind of library also,  available to avoid you for doing routine stuff,  but you can do it yourself.  And the basic...  the basic, I would say, thing about this console  is not invented here.  The thing is, do we do everything yourself?  So it's perfectly understandable to drop everything,  every library, et cetera, and recreate on your own.  That's what's interesting for certain people.  Games and community, there are a few big boxes around the world,  a few dozen.  There are small, active core developers  for making games or libraries.  There are custom extensions, hardware extensions,  and video output.  You can output on TV, not using a SCART  and Periter, so there is some output to this  that has been hacked from the console itself.  There is an external port for the gig port,  so you can plug whatever you want  and have external, funny controllers or physical buttons  or what you want.  And you have to do the driver yourself, of course, et cetera,  et cetera, et cetera.  There is a software index with, so far, I think,  26 centuries for different software.  So you can see there is a full motion video game,  so decoding live from the SD card,  directly output and decompressed live.  There is a port of Bulldo-Dash.  There is...  There are some old games over there.  Jumping games,  polarity, Rapidbo, which is kind of a mobile game,  Snake, Forest, Stitchers,  where is it?  Some other great ports of Superness.  There are emulators also, and 8-bit emulators.  It's a 32-bit console playing 16-bit games  and emulating 8-bit systems.  There is Gameboy emulator, ZX-Pictrum emulator,  and, of course, M05, which is a Thompson,  it's a French computer, nobody knows,  but I had it in school, so I...  I didn't honestly write the emulator.  It's just a port of existing emulators  and axing to the code to remove mostly everything  that is not...  so that it could fit on the memory.  And, yeah.  There is a graphical drum loop sequencer.  There is a tracker for which there is no...  OK. And some...  Sorry?  There is a switch on the link.  And the link.  If I can follow the link.  Yep.  I want a switch.  I should have done one.  No, there isn't. If it's worth, it should be.  OK. So it's a tracker to compose your sound directly on the bitbox.  It's for some work in progress,  BitCaster, Bomberman, Krone, which is not finished,  and many, many, many, many prototypes of games,  which I didn't finish, of course.  Let's get back to this.  So making games. How do you make games for the bitbox?  Well, let's make a little survey quickly.  Who knows game development in C?  Quite a lot of people.  Handling or making simple games.  General light based graphics,  sprite styles with collision.  So making a small 2D,  making pixel graphics with game 2D,  little design with tiles, by example.  And cross-compining everything for another M Cortex M4.  It's...  And compose music with a tracker for this.  It seems a little complicated.  It is not every single task is quite not complicated.  But if you don't know several of them,  it can be a little intimidating.  So the idea was to lower the perceived bariatric entry  to build a program and design some simple games for the bitbox.  So let's make a new survey.  Who can draw a BMP file with GIMP?  So the idea was to simplify the process  and having complete simple game on a unique image.  So you put it on the Aussie card,  you put the Aussie card on the console,  and there is an interpreter who loads the image in RAM  and runs from this.  And you then play the game.  It's a Mario Maker for the bitbox, except you can redraw it yourself.  Restricted to certain kind of 2D games,  but there can be several kind of gameplays.  Of course, it's very limited,  and that's the idea, of course, to limit it.  General workflow, there are the reference MD,  you saw a kind of documentation,  you can read it, you saw your BMP file as SD card,  and the reference generates some definitions,  the program reads them and plays it, or the PC emulator.  So what do you need to do a full level 2D platformer,  and how do you put that in an image?  So basically to make a 2D game,  platformer, such with our infinite runner,  you need to have world physics, how do you scroll,  how do you jump, is there any gravity or not?  You need to have tileset graphics,  so little pictures that will repeat to make your level.  You have to have your level time maps,  how do you order different levels.  The sprite frames graphic, of course,  different frames, different behaviors and movements.  There are different ways to do that.  You can have a full programming language,  it exists, there is a Montgrey Yon,  for example, it's a graphical programming language,  but it doesn't really fit well on the limited,  very limited image.  So you can also use presets,  so you just have one sprite, is always such as Henry.  The idea was to mix those to be versatile enough  and to fit in one, and you need to have music and sound effects.  So how do you encode it?  First you start with a blank canvas.  It's 256 colors, so you can index it by number from 0 to 0xff.  And this number will be repeated quite a bit of time,  so hence the name.  256-color pixel-barred pixels on the bitmap,  it's divided in 16 by 16 squares,  or 16 by 16 pixels,  which means that with your color tiles and pixel per tiles,  you see that there is a mapping between the tile,  the number of the tiles,  if you number the tiles themselves on your drawing,  one pixel in a tile,  you can have the top left pixel,  which represents the top left tile on the whole image,  and a color.  So you can give a color and reference,  and there is a relationship with the tile, with the color,  because the color has an index from 0 to 0xff.  So it can represent a tile, a pixel in the tile maybe,  so let's use this.  So this is, for example, a simple row canvas,  but you can start from a blank one,  it's just to show you how it's ordered.  You see there is a color represented for each tile,  so if you say color EB, it represents this tile,  and if you say color 0, it's the other one,  you don't have to start with that,  you just have to start with a single palette,  which is ordered like this,  and you can see that on your palette,  the position of the color represents the position on your picture.  That's easier to draw.  Now, how do you do the different drawing?  The tiles, well, you draw it on the canvas.  The sprite frame, you draw them on the canvas,  but you can have several tiles to draw them.  And the tile map, the tile map meaning your levels,  well, you will draw with a color,  referencing the tile that you precedently draw on the canvas.  Let's make an example.  The top left tile is number 00,  so you draw black on your level.  For now, we have no behavior.  We didn't say that this is some sky,  this is something that blocks the player, etc.  So, for example, here we have some tiles on the top left,  so we have nine tiles and plus one,  and a level under it.  The sky over there is black,  meaning that it will reference this small,  this small here,  and you see here the terrain,  sorry, but it corresponds to the color of this tile here,  16 by 16, etc., etc.  So, you can draw your level like that.  You can put some sprites.  There are some sprites over there,  so there are, for example, five elements,  and you can see the green points,  meaning that these points will be the hitbox of the sprite.  You can have bigger sprites,  so your hitbox will be separated on several sprites,  so you will scan after that where it is.  How do you represent that on your level?  That's easy.  The first frame of the animation is in number 40,  so you put color number 40 on your level.  You still cannot play it, it's just display.  You can have another sprite,  bigger one with another hitbox, by example.  This one has only two frames.  We didn't say how to animate it.  There are five special tiles at the bottom,  which are here to define all of the behaviors.  There is a mini map on the bottom left.  Maybe you've seen that in the presenting.  The mini map shows you that each pixel here  represents a tile on your whole drawing,  and there is preset colors for saying,  well, this is the ground, this is the sky,  this will kill you if you go into rate, etc.  This color here is the color of the first level.  If you are in the program, you need to find the first level.  It's here.  The number of levels, objects, info.  There is one tile where you can reference  how your objects will behave.  You can specify three things with three pixels,  basically per line, per object.  First one, four, where is position your object.  The first is the physics.  How does it work?  Is it standing?  Does it walk?  Does it chase the player?  Does it, etc.  The second one is what does it do  when you collide with a player?  Does it give a bonus?  Does it kill you?  Does it make you end the level, etc.  Another one meaning what do I do after I'm killed?  Do I spawn another sprite?  You can have interaction.  For example, if you jump on a mushroom,  it spawns another one that is a coin,  and it spawns another one with an animation  for giving you points, for example.  You can have some combinations between your different behaviors.  There are loads and loads of different behaviors.  I will show you, maybe if I have time in the reference,  you can see that.  But you can mix in much different ways.  For the movement, you have static, move once,  and then disappear, bullet, so it goes fast through the screen.  Where do I walk?  Walk and fall.  If the enemy walks and jumps sometimes,  the sign pattern, for example, the collision.  Does it kill the player?  Does it switch sometimes from one level to one identity  to the next one if you jump to it?  For example, you can have keys to open some doors,  for example, with that kind of behavior.  What does it do when you are killed?  You can spawn another sprite.  You can see there, the minimap and the different sprite.  Quickly, you can finish it with some titles.  Here you have four titles for four levels.  You have some titles also for another levels.  You have some pixels defined here at the beginning  to give you parallel to number.  You can do world physics of your game.  I didn't add music.  I'll show you.  You can also use a real map editor.  I just created something to use a real map editor  and then output to an image.  Let me show you the images that you can do with that.  Can I do it better?  This one is a finished game.  I'll show you how it works.  This one maybe you've heard about.  You can do that like that.  It's basically auto scroll with infinite jumps  and you die when you touch anything.  Maybe you've heard of this one also.  This is basically a four level Mario Bros.  Not everything is finished.  You can compose everything with the different elements.  You can see how our positions are different levels,  what are the different titles and what are the different sprites.  There is also this one which is absolutely not finished  but it could be done maybe.  This one is a tiny space shooter.  This one is a little bit ashamed of the graphics  but it should be kind of ghost and goblins  or...  We'll have to have a small demo.  Maybe...  Does it work?  Can you see something?  This one is bad.  Basically, this is the demo I've shown you.  Maybe let's start with the...  This one is the one that I've shown you as a graphics.  It's a very simple title  but it's directly read from the Bitmap graphics.  I didn't define numbers on the demo.  So you have the guy.  You can jump.  You can...  You can see that the gravity is off  because you can jump very high.  There is some coins over there.  So it's a sprite that doesn't move except...  that has one frame, moves a little bit  and then just... If you touch it, it's killed.  There is no output.  And you can...  And if you've got one...  You have some...  So let's just take another one.  This one is a demo game.  Maybe a little more...  Graphically less advanced but...  And you can add...  There are ladders.  So... I'm bad.  And if you can go through the second level,  you can...  The second level is a shooter on this game.  Let's show you maybe a shooter how you can...  Space Force.  I don't know if it works actually, this one.  Yes, it does.  You cannot shoot, in fact, because...  Because I didn't code the shooter.  So you have to...  Okay, so... Okay, I failed.  Okay, maybe the Mario...  It was just a simple...  Yeah.  So the first level...  There is sound, actually, for this one,  with the first level of Mario.  There is the first sound of Mario,  but you can see that...  And I'm bad, okay?  But it's playable.  It's basically playable.  So it's really a walk in progress.  You can...  You can try yourself to build on another one.  You can draw all you need is Gimp  and the emulator, which is running and running on the PC.  And...  Yeah, that's physically it.  And you can use your same drawing to run it on the big box, directly.  That's it.  Thank you.  Thank you.  Thank you.  Thank you.  Thank you.  Thank you.  Maybe please give me questions in a moment.  Okay.  Yeah.  So it's only platform games,  or are there plans to allow, like,  top-down games, maybe?  There are too many ideas, but, yes, you can do...  Well, you could do top-down games with the gravity  because you fall.  You have a maximum vertical,  so you could do that with it,  with vertical...  With no jumps, vertical levels.  And the gravity, it could be...  Yeah, you could add a top-down.  Growing up would mean that you can have a negative gravity.  It could be done, of course.  But, yeah, the idea is that we will add some world physics  from...  And expanding what the number of games you can do.  Yeah.  Sorry.  Oh, sorry.  So is the framework interpreting the image,  or are you translating it into something,  transpiling it, or by many...  No, because the bitbox...  Sorry, yeah.  The question is,  is there any transpiling or recompilation of the image  in RAM?  No, because the bitbox is too constrained for that.  And so it directly reads the content of the game in memory.  It dumps...  Basically, it dumps of your image in memory  and interpreting and generating the graphics on the fly.  Is it to integrate multiple games?  No.  No, not for no reason.  I don't know.  Well, of course, if you have got a compiler.  Sorry, the question was, can you make multiplayer games?  Well, if you've got a good compiler and you have enough time,  you could.  For no reason, it's a little bit forfeited from this.  But, yeah, why not?  There are two USB.  You should... you can have...
0xFF_Drawing_games_for_a_DIY_console_0_131.png 0xFF_Drawing_games_for_a_DIY_console_132_251.png 0xFF_Drawing_games_for_a_DIY_console_252_1331.png 0xFF_Drawing_games_for_a_DIY_console_1332_1463.png 0xFF_Drawing_games_for_a_DIY_console_1464_5999.png 0xFF_Drawing_games_for_a_DIY_console_6000_10763.png 0xFF_Drawing_games_for_a_DIY_console_10764_12191.png 0xFF_Drawing_games_for_a_DIY_console_12192_12419.png 0xFF_Drawing_games_for_a_DIY_console_12420_12539.png 0xFF_Drawing_games_for_a_DIY_console_12540_12731.png 0xFF_Drawing_games_for_a_DIY_console_12732_12827.png 0xFF_Drawing_games_for_a_DIY_console_12828_13319.png 0xFF_Drawing_games_for_a_DIY_console_13320_13391.png 0xFF_Drawing_games_for_a_DIY_console_13392_13439.png 0xFF_Drawing_games_for_a_DIY_console_13440_14003.png 0xFF_Drawing_games_for_a_DIY_console_14004_14111.png 0xFF_Drawing_games_for_a_DIY_console_14112_14171.png 0xFF_Drawing_games_for_a_DIY_console_14172_14351.png 0xFF_Drawing_games_for_a_DIY_console_14352_14555.png 0xFF_Drawing_games_for_a_DIY_console_14556_14675.png 0xFF_Drawing_games_for_a_DIY_console_14676_14891.png 0xFF_Drawing_games_for_a_DIY_console_14892_14987.png 0xFF_Drawing_games_for_a_DIY_console_14988_15155.png 0xFF_Drawing_games_for_a_DIY_console_15156_20975.png 0xFF_Drawing_games_for_a_DIY_console_20976_22991.png 0xFF_Drawing_games_for_a_DIY_console_22992_23375.png 0xFF_Drawing_games_for_a_DIY_console_23376_24731.png 0xFF_Drawing_games_for_a_DIY_console_24732_25499.png 0xFF_Drawing_games_for_a_DIY_console_25500_27203.png 0xFF_Drawing_games_for_a_DIY_console_27204_28067.png 0xFF_Drawing_games_for_a_DIY_console_28068_29219.png 0xFF_Drawing_games_for_a_DIY_console_29220_29819.png 0xFF_Drawing_games_for_a_DIY_console_29820_30479.png 0xFF_Drawing_games_for_a_DIY_console_30480_30563.png 0xFF_Drawing_games_for_a_DIY_console_30564_30827.png 0xFF_Drawing_games_for_a_DIY_console_30828_33563.png 0xFF_Drawing_games_for_a_DIY_console_33564_37595.png 0xFF_Drawing_games_for_a_DIY_console_37596_37708.png