 Otherwise, there's so much noise. The big presenter forgot half of his ball. Oh, he'll come back. You want to bring him closer to the door, so you can hear him? He'll welcome back, sir. OK, thank you so much. So hello, everyone. I would like to present you a game framework for the bid box. 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 bid box? The bid box is a small console that has been made for fun, of course. Well, 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 change 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 concepts. And it's fun to build some games. 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 see, OK. It's a single board computer or console. There is one chip on it only that was on one of the simplicity of the design decisions. The output is on VGA. There is a 15-bit output VGA. You've 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 megahertz, one mega flash. So one game should make one maximum. And 192K of RAM, which means that the typical resolution is 640 by 480, you don't have enough room to store a single picture, 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 advertiser slides and go back and generate on the fly. So you cannot, by example, if you want to output a 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 is very tiny. And since this 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 port is half. The number of microSD is half, meaning there is none. Yeah, the CPU speeds, the memory, the resolution, everything is in half. So that's basically it. If you want to have a look at the console, the development on this is basically a retrocoding. You direct on the bare metal. You don't have the room to have an operating system. No driver, no leaves. 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 in a retro console, compared to retro console. You have USB, you have et cetera. And the tool chain is a standard GCC. You download that on Ubuntu, by example, or DBM. Apptigate GCC are embedded, and you can develop for it. So it's quite simple to develop. There are people who have developed with this on Ubuntu, Windows, Mac OS, 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, a 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-implementation, it runs on the Bitbox, which was nice for me. 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. And so you have to re... So, but there are existing libraries, very nice library for chiptunes, also made by somebody. Thanks, Adrienne. With a tracker to compose your songs and to help you having chiptunes and stuff. 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 download gamepad that you can find for very cheap. And the graphics generation, they 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 to redo everything yourself. So it's perfectly understandable to drop everything, every library is extra, and recreate on your own. That's what's interesting for certain people. Games and community, there are a few bit 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 there are kind of video output. You can output on TV, not using a SCART and Periter. There is some output to this that has been, and after the fact, 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 BudoDash. There is, I don't know, you can recognize some old games over there, jumpers games, polarity, rapidbo, which is kind of a mobile game, snake, forest, teachers, where is it, yeah. Some other great ports of Super NES, and there are emulators, also, and 8-bit emulators. It's a 32-bit console, playing 16-bit games and emulating 8-bit systems. So the systems are, yeah. There is Gameboy emulator, ZX-Pictrum emulator, and, of course, M05, which is a Thomson very, it's a French computer, nobody knows, but I had it in school, so I, I didn't honestly write the emulators, just the ports 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, yeah, there is a graphical drum loop sequencer, there is a tracker for which there is no, okay. And some, sorry? There is a switch that's in the link, I think. Ah, in the link. If I can follow the link, yep. I should have done one. Yeah, no, there isn't, if it's worth. It should be, okay, so it's a tracker to compose your sound directly on the bitbox. It's for some work in progress, bitcaster Bomberman clone, 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? Of course a lot of people. Handling, well, making simple games. General light based graphics, sprite size with collision, so making a small 2D, making pixel graphics with game 2D level design, with tile, by example, and combining, 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 kinds of 2D games, but there can be several kind of gameplays. Or, 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 in the 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 the 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 that it exists. There is a Montreal Young, 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. The canvas is 256 colors. So you can index it by number from zero to zero XFF. And this number will be repeated quite a bit of time, so hence the name. Two fifths, so 256 color, pixel by pixels on the bitmap. It's divided in 16 by 16 squares of 16 by 16 pixel, 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 a 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 zero to zero XFF. So it can represent a tile, a pixel in the tile maybe. So let's use this. So this is by 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 zero, 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 while you draw it on the canvas? The sprite's 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 zero zero. So you draw black on your level. For now, we have no behaviors. We didn't say that this is some sky. This is something that blocks the player, et cetera. 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, oops, this small here. And you see here the terrain, maybe you don't, sorry, but it corresponds to the color of this tile here, 16 by 16, et cetera, et cetera. 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, or you will scan after that where it is. How do you represent that on your level? That's easy. The first tile, 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, a bigger one, with another hitbox, by example. This one has only two frames. We didn't say how to animate it. Animated. 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 preceding. 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 it, et cetera, et cetera. And this color here is the color of the first level. So if the program needs 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, well, four, where is position your object. The first is the physics. How does it work? How does your, is it standing? Is it working? Does it chase the player? Does it, et cetera. 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, et cetera? And another one meaning what do I do after be killed? Do I spawn another sprites? So you can have interaction. For example, if you jump on a mushroom, by example, it spawns another one that is a coin and it spawns another one with an animation for giving you points, by example. So you can have some combinations between your different behavior without laws and laws and different behavior. I will show you maybe if I got time in the reference, you can see that. But you can mix in much different way too. For the movement, yeah, you have static, move once, and then disappear, bullet, so it go fast through the screen, where fly, walk, walk and fall. If the enemy walk and jump sometimes, the sign pattern, by example, the collision. Does it kill the player? Does it switch sometimes from one level to from one identity to the next one if you jump to it? For example, you can have keys to open some doors, by example, with that kind of behavior. And what does it do when you're killed? You can spawn another sprite. So you can see there, the minimap and a different sprite. And quickly you can finish it with some titles. Here you have some four titles for four levels. You have some titles also for another levels. You have some pixel defined here at the beginning to give you per level the number. What is the word physics of your game? And I didn't add the 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? So this one is a finished game. I will show you how it works. This one maybe you've heard about. So 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, not everything is, but you can compose everything with the different elements I told you. You can see how are positioned, the different levels, what are the different types and what are the different sprites. There is also this one which is absolutely not finished but it could be done maybe. And this one is a space shooter. This one is, well, a little bit of shame of the graphics but it should be kind of gross and goblins or... Okay, we'll have to have a small demo. Maybe, so does it work? Okay, can you see something? Okay, this one is bad. So basically, this is the demo I've shown you. Maybe let's start with the... Yeah, so this one is the one that I've shown you as a graphics. So 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. So 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 as one friend 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's demo game, maybe a little more graphically less advanced and you can... 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 I didn't encode the shooter. So you have to... Okay, I failed. 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. 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. But you can try yourself to build on another one. You can draw... All you need is GIMP and the emulator, which is running and run on the PC. And... Yeah, that was a good hit. And you can use your same drawing to run it on the big box directly. That's it. 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 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. The idea is that we will add some world physics and expanding the number of games you can do. Yeah. Sorry. Oh, sorry. So is the framework interpreting the image, or are you transmitting it into something, transpiling it, compiling it? No, because the big box... Sorry, yeah. The question is, is there any transpiling or re-compilation of the image in RAM? No, because the big box is too constrained for that. And so it directly reads the content of the game in memory. It dumps... It's basically a dump of your image in memory and interpreting and generating the graphics on the fly. It's not to create multiplayer games? No. No, not for... I don't know. Well, of course, if you've 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 now, it's a little bit far-fetched from this. But yeah, why not? There are two USB. You can...