 So welcome to my talk on game development for Fedora. You will notice that the title is slightly different than what was originally planned. So this is all about game development and how to get a game onto Fedora as well. So not just about developing a game, but developing a game with the intention of getting it on Fedora. So who am I? I am a game developer and an open source developer. I also package programs for Fedora. This is a sample of some of the games I have worked on or created, more than likely you have not played all of them because some of them are kind of hard to build and I haven't had that many complaints about the fact that they're hard to build. So I'll leave it up to you to figure out which games are which. But I don't have a lot of time, so we're just gonna get right into the core of this talk. So for basic game development, you need to be able to put stuff onto the screen and read data files and everything. And to a large degree, you are not doing that with the bare hardware anymore. And instead, you're using some sort of library to handle that. SDL2 is a popular one for games. It handles graphics and input and sound, but only at a very low level. And so there's some additional libraries to add additional features like SDL2 image, which allows you to import like ping files and things like that for reading in data. There is XPAT for XML parsing and Janson for JSON parsing. There are other libraries as well if you find one that you prefer. There's a fair number of them out there. There are also ones for reading any files or stuff like that if that's a format that you'd prefer to go with. SFML is a library kind of like SDL2 in that it handles graphics, keyboard input and sound and everything, except it's a little more all-encompassing than SDL2 is. So you won't need as many smaller libraries with it. If you are doing 3D, you are probably going to be needing to use OpenGL or Vulkan. I personally have not delved into 3D that much. I've only got a little bit of peripheral work on SuperTux cart. Now this is all for C or C++. If you're using another language, they may have bindings for SDL2 because it has a massive number of bindings, same with SFML, but they also may have libraries built on top of that. So for Python, there is Pygame and C-Sharp has Monogame for it. Now all of this is great, but this is not game development. This right here is game engine development. And if that's what you want to do, fine, but it's going to take you longer to get a working game and get something into Fedora if you're building your own engine first. So if you really want to get into game development and jump right into game design, it's better off, you're better off using a game engine like Godot. I have developed two games from Scratch and Godot, pinball disc room, which you see there was for the disc room game jam. It consists of only a single room where you're sitting there dodging those discs until they kill you. It's very short, but that and the other game I developed, Learning Basic on Mars has shown me that there was a lot of capabilities in Godot. And so I highly recommend that engine if you want to design your own game. There is currently, as far as I know, only one Godot game that is available from the Fedora repositories and that is Pigeon Ascent, which is one I packaged. You can use the spec file from that to create other packages of Godot games. That's not the only game engine out there. There is Love, which is a game engine that you code in Lua script. I haven't personally developed a game from Scratch in them in Love, but I've modified Marvelous Inc. Gateway Jump you see on the screen that is a modification of Mari Zero. And I've also played around with a game called Bite Path, all using the Love engine. And it seems like a very capable engine. Mr. Rescue is one of a few games that are available in the Fedora repositories that is using the Love game engine. Another game engine I've heard about recently is Bevy. It is a Rust game engine. I personally have not gotten around to playing with it yet. So I don't know how good it is, but I've seen some examples of it and it seems like it may be getting there as a good engine to start with. Now, in addition to these, there are a bunch of specialized engines. So BT Builder is a program that I've created, which is an open source implementation of the Bardstale construction set. And so if what you want to create is a game like an old school Bardstale, you know, Bardstale one, two and three, BT Builder can create one of those games. If your goal is to create any other type of game, BT Builder will not help you at all. GB Studio is another engine that that one's designed to make Game Boy games. And so you have all the limitations of working on the Game Boy, where you have limited color. You have a limited amount of size, of course, but as long as you're willing to work within those restrictions, that can be a pretty easy way to get into game development. Now, I will say that if you want to get into game development, you need to know some programming basics. You, any of these engines, if there is or will have some sort of event or scripting system in it, because you invariably need them for making games. And that scripting language, whatever it is, you're going to need to know some of the basics of programming. You don't necessarily need to know a lot, but you do need to know some, you know, things like how conditionals work. So if statements and stuff like that. Now, you do have the complication of what do you do if you can't make art, music, sound. Now, in those cases, the perhaps the easiest solution would be to find someone to team up with. But sometimes that could be pretty hard because of the fact that everyone wants to make their own game, they don't want to help you build your game. One way to get around this is to go with the keeping it very simple. So anyone can go over and make a Tetris or a breakout clone because of the fact that all you need to do is to draw squares. But of course, that doesn't necessarily entice everyone. I happen to not particularly care for those games. There are some free resources out there. I happen to really like open game art. You can see the example on the bottom there is from the Liberated Pixel Cup where they created a whole bunch of assets in a similar style so that you could grab them and make a game using them and have it look consistent, which is one of the problems you encounter if you're using free resources where you find this is a really good picture from this artist. And then this other artist did a really good sprite but they don't match in style. So putting them in your game might end up clashing. Now you can always go with programmer art where you just go over and get something up and running with the intention of replacing it later. So you see those red walls and just like the fading horizon there, that's just programmer art just to get something up and running initially and then replace it later. Photo manipulation is another one you can use. So that picture there was taken on a beach so I darkened the background and brightened up the lizard to some degree so that that way he could be used as some sort of giant creature in a game. But honestly, that's great for making a game. But the fastest way to get a game into Fedora is to have someone else having already written it for you. There are a lot of open source games out there that are not packaged with Fedora and so you just need to go over and find them. Now I happen to really like the open source game clones site. Now you might say that these aren't original games, you're taking just a clone of something. Starting as a clone is not a problem. Almost all games are initially clones with some tweaks to them. Even Minecraft took its initial idea from Infiniminer. So the nice thing about cloning a game is it allows you to have a set of rules for game design initially and then as you become more comfortable with the game you can sit there and decide that you wanna add new features in or you can decide that you know what, I don't like that feature, I'm not going to implement it or I'm going to remove it. So I find open source game clones to be really useful to be able to find games that are similar to a game that you like. And then they might be direct clones, they might be something inspired by, sometimes they do require the commercial data files. So it might just be an open source engine to run the data files from the game in which case if you really want it to be completely freely available you'll have to create your own data files for it, which may or may not be easy to do. If there isn't anything on the open source game clones you can always just search GitHub. It has a large number of people put their own programs up there all the time. And so you just need to look around to see what's there. There is also some other resources like the Lieber game wiki. And if you're still can't find something you can always go to a forum like the free game dev forum. I'm on that forum, I post on there. People will post up what projects they're doing. So maybe you'll find something that interests you that way. Or you can just ask them if they know of a game similar to what you're looking for. And maybe someone will be able to help you out and point you to something that has the gameplay you're looking for. Now all of this is not without its problems. So the first problem you can come up with is that building can be difficult. Programmers are not always the best at telling you how to build their program. They may also require unsupported libraries. So for example, on here you have ostrich riders. Now ostrich riders is a clone of joust. I went over and decided to look for a clone of joust after my kids watched an episode of Teen Titans Go. And we were talking about all the games. And so I don't remember whether joust was included in that episode, but I decided to look up a open source version. Now this is despite the fact that I actually have the arcade version on a PlayStation game, but I decided to look up an open source version. I found a couple of different versions. Two of them I couldn't build. One of them I did build and you immediately died as soon as you started the game. And that was because the game had no speed control whatsoever. And so it was written for probably a 386 or 486. And so at this point, the computers run so fast that you immediately fall and die. So I ended up looking at one of the ones that I couldn't get building. And I liked the style of that and that was ostrich riders. And so I ended up having to figure out how to build it. Now in that case, it was using SFML1. So I ported it to SFML2. In hindsight, I believe at the time Fedora actually had SFML1 available, but I didn't realize that. So I could have avoided that, but in the end that's what I did. And so then I was able to play ostrich riders with my kids. Now ostrich riders does have a feature beyond what Jaws has in that it supports up to three players now because both my kids wanted to play and I didn't want to sit back and watch. So that's an advantage of having a game be open source. One of the other problems you may find though is that if you want to package your game up for Fedora, some languages can be hard to package. If I know that Fedora includes Pygame, if it did not include Pygame, I don't know what it would take to get that in. I am not an expert on packaging Python packages. So if you're need to do that or some packaging from like Rust or Go or something, then you might need to get involved with some experts in those languages and packaging them on Fedora. There can be copyright and licensing issues for our four programs you find on this screen. You see Sonic Robo Blast 2, which is a fun game, but Fedora is never going to carry it because of the fact that it's using the Sonic characters without a license. So that's just not going to happen. Now Fedora does carry OpenSurge. OpenSurge is based off of OpenSonic, which was another fan-made Sonic game, but OpenSurge went over and replaced all of the graphics with new graphics and new characters so that it could be included. That's sort of what I'm doing, that's what I'm doing with the Gateway Jump as well because Mari Zero can't be packaged with Fedora. You may find some promising games that are unfinished. At that point, you might decide that it's too much work to finish it yourself or you might find that you know what, finishing what they've started is easier than creating your own from scratch, but that depends on the state of the game. Now this last one is a problem that game developers aren't always Unix developers. So for Windows, when you develop your game, you tend to have the binary and all the data files in the same location. Under Unix, typically you will go over and keep the binary in the user bin folder and the data files would be under user share in the name of the game. And so you can end up with situations where you find a game that can't handle that. And then you either have to update the game to be able to look in a different place or you have to use like a shell script to change directory into the user share first and then start up the game. That can be problematic if it then saves the save file in the same location, but at that point you are probably going to have to modify the game to get it working under Fedora. So that is what I have for game development. There with the timeframe of this talk, I can't get into a whole lot of details, but hopefully you were able to get something out of it. My website is on there. I have also just started today a Kickstarter for Mojotron Robot Wars. Mojotron is an open source program that I found similar to Robotron 2084 or Lamatron. And so I've been fixing it up and I'm testing the waters with using Kickstarter to fund my open source game development work. I can be contacted on the free game dev forums. If you want to talk to other free software or open source game developers, I recommend that forum. And my email address and mastodon, if you want to get into contact with me. I can take questions if there are any. Looks like no one has asked any questions at the moment. Yeah, flat packs are not something that I've delved into yet. It's something that I'm looking to do, but I just haven't found the time to get into it yet. I will say having released games on itch.io and trying to make them run on as many Linux distributions as possible. I can definitely see the advantages of flat pack even with some of the games that I was building Linux binaries for. I built it on the earliest version of Fedora that had the library I needed. And I found that that version is still too late for Debian. So it requires a newer version of G-Lib C than what Debian provides. So if you take that binary, it still can't run on Debian, which is unfortunate. All right, how close is Fedora or any Linux from being viable for AAA development? Quite frankly, I think it is perfectly viable for AAA development right now. Now, obviously I don't do AAA development, but I don't think there's anything that we are really missing. It's just a question of familiarity. In some cases, it may be that people are used to the tools like Visual Studio. I know a lot of people really love Visual Studio. I much prefer just a text editor myself, a Visual Studio doesn't really get me a whole lot, but I definitely think we are capable of doing AAA development. It's just expensive and the game companies don't necessarily have incentive to target or to develop directly on Linux because most of their customers are going to be using Windows anyways. All right, you mentioned you haven't done much of 3D games, but I'm curious to hear your general opinion about Open 3D Engine, previously Amazon Lumberyard, previously CryEngine, and how it went from closed source commercial product to an open source product, lately turning into a Linux compatible project as well. So in general, I'm not really that big on the commercial products that have been turned into open source products. In particular for Open 3D, it really felt to me like Amazon realized that this wasn't going to make them money. So they're just throwing it over the wall and saying, here, you can have this. I haven't personally played with it, so it's quite possible that it's a great engine to use, but I'm not generally very favorable on them. I, as I said, I really like Godot. I think that's an amazing engine that's available completely open source. You can go over and build it for a web deployment. So I think that's really great. I have heard that it is not as great for 3D games, but they, everyone has been saying that Godot 4 will be good for that. It'll have a lot of improvements in that case. My only concern with that is that I have found Godot 2 games and I have not been able to build and play any of them. From what I understand, there was a tool to convert a Godot 2 game to Godot 3, and the developers on Free Game Dev who have made Godot 2 games said that there was still so much work that it wasn't worth the effort of doing. And so I'm hopeful that that's not the case with Godot 4. I do wonder what Fedora's plan is with Godot 4 as to whether we're going to keep having Godot 3 around or whether it replaces Godot 3. So thanks for coming to my talk. Did you know that it's the year of the Linux and gaming again? Actually, I am very hopeful with the Steam Deck. I am hoping that that manages to push a lot of more games to be running under Linux. Now, I think they're almost all going to be running under Proton. There are some games that I have got from itch.io that I can't run under Linux either. And I end up running the Windows version under Wine, but I am hopeful that that does improve support under Linux. All right, thank you.