As I mentioned in my last post, I was able to hook up with a local team from The Greater Gaming Society of San Antonio and participate in this year’s Global Game Jam. Global Game Jam® (GGJ) is the world’s largest game creation event taking place around the globe. This year’s theme was “lost and found” and the team decided that a private investigation / noir type game would be fun. So my teammate Ansley spun up some art and Wes composed some music and we got to work. We ended up naming the game “Chase Ventura: Kid Detective” – a mystery game where you have to find clues as the neighborhood kid sleuth to “solve cases”.
The game’s title screen
Overall it was a super cool experience. I was lucky to have a great team; they produced super quality assets to work with and were great at communicating and providing feedback. I wish there had been more time to implement all of the ideas, there was just too much to do in such a short amount of time. I guess that’s the nature of game jams though. I also wrote the game’s systems from scratch and that detracted a lot of time as well. Unfortunately with four hours to go and tons to do, I had to strip virtually every idea out of the game to get something shipped, so you basically get a cut-scene, and then walk around the neighborhood and talk to the various characters Ansley created. Fortunately I feel like our team was on the same page and the game, the art, and the music fit well together. Here are some stills from the game:
I put up a little time-lapse of the last four hours of the Jam condensed to 10 minutes (the deadline was at 5pm CST and I think I submitted at 4:56pm):
I’m super thankful to my wife for being supportive as I basically spent 48 hours binging over code. Also a big thanks to John and his team over at the Greater Gaming Society of San Antonio for putting on the event and helping me get on a team to participate.
If you haven’t ever done a game jam I think it’s a great exercise from a development perspective for a few reasons:
Even though I broke every programming best practice, from DRY to bad spaghetti code, the time constraints force you to move forward with the mistakes and take the least path of resistance at every turn, forcing you to write a lot more code and figure out problems quickly on the fly.
Letting your team dictate the idea and direction of the game takes you out of your comfort zone for games or projects you would normally make.
Reviewing your own code after the fact gives you an opportunity to review what you could have done to make the code better / more extensible if you had ideal conditions.
While it was stressful, It’s also great fun in general. We also ended up taking second place out of our portion of the GGJ, and I am pretty happy about that 😀.
It looks like it has been about 2 months since my last post 😬! November and December were crazy months for me in both my work and personal life. 2020 kept coming until the bitter end…
When I wasn’t up to my eyebrows in work, I carved out some time to finally work on and complete the multiplayer board game I had been working on since September:
Cavatars (Codenames with Avatars – clever I know) is a fully functioning multiplayer game playable in a web browser. I developed it in JavaScript using NodeJS, Socket.io, and Phaser3. The full source code is on GitHub:
It’s not the greatest thing I’ve ever written but it plays like it was intended. What I was most surprised about when testing it with friends was how well the latency responded across multiple states. We had players in California, Texas, and Nevada with the server being located in San Francisco, and there was no visible lag:
Cavatars’ maiden voyage 🚢
Far more importantly though, the project allowed me to meet all of the goals I set when I started this project. All of the decisions I made when developing the game were for specific purposes:
Far greater proficiency in JavaScript, which I considered my weakest language at the time.
Better understanding of multiplayer gaming, client/server network architecture.
Learn Phaser3, a framework I have never used before.
As one of my friends pointed out, there is no real purpose to the movement of the characters other than the fact it was to hone in on the movement for later projects down the road – which brings me into some of the stuff I have on the table for 2021.
Building on the art kit I purchased and set of skills I developed to finish Cavatars, I have decided to start working on some other, longer term projects:
Working on a Final Fantasy Tactics type game with my friend Travis. The game is yet to be named and we are in the very early stages. Travis brings a wealth of game knowledge and experience to the table and will handle most of the mechanics, balance, and lore. I will be handling all systems, programming, and development.
Working on a longer term MMO passion project. These sprites and this art kit are perfect to put something like that together, so why not. There aren’t many 2D mmos that have come out in recent memory, so the idea of chipping away at one over the next few years seems exciting!
Working on a smaller game to ship earlier, I’m thinking about a 1v1 multiplayer PVP arena type game.
Aside from that, I reached out to The Greater Gaming Society of San Antonio which is a game development community in San Antonio that apparently has some folks participating in the upcoming Global Game Jam taking place this week, January 27-31. With any luck I’ll be able to connect with a team and follow up with a post about my experience 🙂
I spent this past weekend attending Handmade Seattle which is an independent, low level programming conference. It is usually held in Seattle but due to the ongoing COVID-19 pandemic, this year’s conference was held online.
First things first: wow. I was blown away.
I was really impressed at the quality of speakers and the content they brought to the table. It never ceases to amaze me how many smart folks are out there deep diving into complicated topics and sharing what they learn with the rest of us. Huge kudos as well to Abner Coimbre for organizing the event and the job he did facilitating as its host. Abner did a fantastic job of being professional and informed with the topics he discussed with the speakers while managing to keep it real in true indie fashion 😎.
Some of the talks were interviews between the speakers and the host, some were pre-recorded presentations or podcasts, but all ended with a Q&A with the speakers where all ticket holders were able to engage directly with the speakers using a private Matrix chat for which an invite was sent upon ticket purchase. It was really cool to see Matrix used like this in the wild, especially as it’s a project that my company recently invested millions into. I love the idea of this open, decentralized communication platform of the future. If you do too, we’re hiring engineers to help bring Matrix to Automattic 😊.
Without further ado – I have included a list of the speakers below with a brief take on some of their topics with links to where you can check out more of what some of these folks are doing.
Speakers: Day 1, November 14th 2020
Freya Holmér Indie Game Dev – Developing Shader Expertise
This was my first exposure to Freya as I haven’t dipped many toes into the shader world but oh. my. god. This is the person that accidentally created the industry standard shader editor for the biggest game engine in 2014?
What a way to kick off this conference. Freya spoke heavily to the value in focusing on one thing and really digging down. In that, however, she emphasized a few points that I think is fantastic advice in general:
Only learn the things you need to learn to do what you need to do.
Don’t try to step into dozens of different topics, drill down and master one.
Laser focus on one thing will result in getting more done faster.
I love this because it’s a super common problem in the tech world and for learning in general. You start working on a project, but there is so much to learn that it’s easy to get distracted or never progress because you start looking into the various adjacent technologies. You end up becoming okay at the basics in a dozen technologies but have no deep understanding required to truly innovate.
By the way, her YouTube channel is so good. Among other things, she has a dedicated series called “Math for Game Devs” which will make you a better game developer.
Nuno Leiria Polystream Senior Engineer – Modern CPU Optimizations: From the kernel to the cloud
This was so good. I know I probably sound like a broken record, but wow. Here was a AAA production solve for a performance bottleneck. The first obstacle had all of us laughing. Whoever had “Adobe Updater on the Server” on their systems bingo card, cash in that ticket!
Beyond that, Nuno orchestrated a deep dive into performance profiling. On this particular project, he and his team went so deep into the matrix that they ended up discovering a bug in the Microsoft kernel. What’s more, they were able to provide specific enough information to have that bug patched, fixing their application.
Yes, I couldn’t believe Microsoft actually patched a kernel bug either 😊.
Joey de Vries Author – The History behind learnopengl.com
Really great talk about the history behind learnopengl.com and how Joey ended up starting what many to be the definitive resource behind learning what is basically the industry standard in graphics rendering.
Joey also has a new book: Learn OpenGL: Learn Modern OpenGL Graphics Programming in a Step-by-step Fashion which I will definitely be picking up!
Ramón Santamaría Epic MegaGrants Recipient – Developing a Handmade Mindset for raylib
This guy. I have pretty much been Ramón’s self-proclaimed #1 fan for about a year now, and I knew that this talk was going to be amazing but holy moly.
How do you make an entrance into an indie programming conference? How about starting your presentation by compiling it from vanilla C source to web live using the software you wrote.
Do you think it stopped there? Um…..
I can fit on zero hands the amount of folks that thought guitar, cooking, and tree pruning would be the core tenants of a software conference talk.
Ramón expertly translated how he applied these three passions from his life to his approach to software development. I won’t be able to give this talk its due justice here, so I highly recommend checking out the recorded video.
Elizabeth Baumel Unity3D Engineer – You CAN Teach an Old Programmer New Paradigms!
Data Oriented Design. This is the content I purchased my ticket for. Elizabeth teaches DOD for a living and expertly broke down components of DOD using various worksheets throughout her talk:
This is my favorite software presentation slide ever:
Andrew Kelley, Ginger Bill, Joshua Huelsman Compiler Writers – The Race to Replace C and C++
Excellent podcast between uber smart developers who work heavily with compilers and bring different perspectives to the table. Bill is the creator of the Odin Programming Language and converted many of his strong opinions into actions into his programming language. Josh is the creator of the Jiyu programming language and also worked on Johnathan Blow‘s upcoming Jai Language at Thekla. Andrew is the creator of the Zig Programming language. Abner keeps everything in order 😊.
Gal Zaban Security Researcher – Linux Kernel Adventures: Reversing & Exploiting a Linux Driver
🤯. A very humbling talk about exploiting systems via kernel device drivers. Gal’s talk goes deep into the matrix, discussing and breaking down ioctl syscalls in depth.
This is one of those talks I’ll need to watch again….more than once 😅.
Vegard Nossum Kernel Developer – Parallelisation in the Linux Kernel
Outstanding presentation from a true legend in the space. Check out this rig that his friend built:
This is a computer with 6,144 cores. Yes, Linux supports this.
As a point of reference, Windows supports a max of 256 cores.
Linux Parallelism is state-of-the-art
Vegard Nossum
This talk perfectly covered the topics required to understand parallelism without going too deep into the rabbit hole on each branch (note: it is easy to do this). This is another talk I’m not capable of delivering justice to and highly recommend checking out Vegard’s work, white paper, and the talk itself.
Hannah Gamiel & Eric A. Anderson Myst VR Directors – Cyan, Inc.
Myst is upcoming VR game – but you already knew that. This interview was a cool chat between Abner and the directors of the project.
One recurring topic in the podcast was the obstacles encountered via a sudden switch to remote work during the global pandemic. In the private chat I told Hannah she could reach out if she wanted some insight on some best practices, as I know a few folks who set the gold standard for remote work 😏.
Other than that, it was just super cool getting a behind the scenes look at the folks @ Cyan and how they approached work on Myst and their transition to remote.
Randy is a legend in the low level programming game space. If you’ve ever worked in this area you know about the Cute Header Libraries.
This talk highlighted how good these small and useful libraries actually are and referenced future improvements I wasn’t even aware of, like networking libraries supporting both TCP and UDP. He also laid out the roadmap for the project and what we can expect to be released within the next year or so. It’s always cool to know awesome projects are under active development working towards features everyone wants 😀.
Abner Coimbre System Software Engineer – A New Terminal Emulator
I was super looking forward to this as I basically live in the terminal, but it was postponed and totally understandably so. Abner has a working demo and is ready to present but was working so hard to host and keep everything organized that he chose to delay this a bit. Respect.
Allen Webster, Ryan Fleury The How And Why Of Reinventing The Wheel / (Introduction To Dion)
DION
DION
DION!!
It turns out the hype was worth the wait as Allen and Ryan revealed Dion to the world in a big way.
These guys weren’t kidding about reinventing the wheel. Imagine programming as you know it re imagined. When writing this I had a really hard time defining everything I was seeing, so I’ll let Ryan share his take:
Dion is our experiment at a new iteration of what it means to program. Our existing programming tools are hamstrung, and it shows; they are often dumber, slower, and more difficult to use than it feels like they should be. We (Dion Systems) have a theory about why that is, and we’re focused in on demonstrating what we think is the solution.
Dion aims to be an entire computing environment with one key tweak to the architecture of the programming systems we’re familiar with. Instead of storing code as text files, we store it as a more direct, structured representation that more closely maps to a traditional abstract syntax tree (which is a data structure that a compiler, for example, will use to store extracted semantic information from code).
Instead of storing code as text files, we store it as a more direct, structured representation that more closely maps to a traditional abstract syntax tree
This key tweak opens many doors. We now have the freedom to render code in different ways, achieve much smarter tools with much less effort, iterate on the user-interface and user-experience of the programmer, surface more sophisticated information about code, provide more insight for experts, improve the educational experience for beginners, and more, all with much less work.
We’re not done with our experiment, and our demo is just a first glimpse into the kind of future that rethinking the architecture of our programming environments can bring, but we’re really excited with what we’ve found so far, and wanted to share that vision with the Handmade community.
our demo is just a first glimpse into the kind of future that rethinking the architecture of our programming environments can bring
There were too many “omg” moments for me to count but a few include:
All functions/procedures can be built by themselves.
How you view the code is up to you. Inline braces, newline braces, no braces, it’s all on the table.
Instant feedback on changes, errors, etc. The system knows not to build until something is fixed.
Zooming in and out on code granularity. This is crazy to watch. You can look at all definitions and calls, or just the calls or definitions.
Function arguments, variable declarations update their references instantly. By the way, this isn’t matching a string to do it. What? 🤯
I’m so excited to see where this project goes. There are a few hurdles the team will need to overcome (e.g. version control) – but there are more possibilities than there are obstacles…. you can count on that.
Between the interviews, there were “5 minute indie demos” which showcased some extremely interesting up-and-coming projects. Here were a couple that stood out to me:
Ripcord
This is one of the coolest cross-platform chat clients I’ve seen in a long time. It reminds me a lot of the old Trillian days. Remember Trillian? It would bring your AIM/ICQ/IRC convos into a single client.
Built in qt, it is a program designed to bring all of your various modern-day chat programs into one place in a localized client – without needing four 2GB electron apps murdering all of your CPU and RAM.
From the website, check out some of the features (emphasis mine):
Features
Not made from a web browser
Tabs
Multiple windows
Multiple accounts
Voice chat (Discord OK, Slack WIP)
Graphical emoji and custom emoji
Tab completion for user names and emoji
Customizable fonts, colors, and sizes
Custom bookmark lists for easily accessing only the channels you actually use
Variable DPI and multi-monitor support
Low CPU and memory usage
Zero GPU usage
No tracking or analytics
No installer or forced updates
Here are some screenshots of the software:
I’m already tooling around with this, and really excited to see how this project evolves!
WhiteBox
A really cool tool that compiles, runs, and debugs real time as you write code 😲. Is there more to say? Check it out below:
The code has always been on GitHub, but has lived in a private repository which is now public. The code itself isn’t the finest example of best practices programming or game development programming, but there is a single dependency (raylib) and I can say with confidence that I wrote every line of the code from scratch. There are also some live videos out there for most of the development process.
I also wrote successful build scripts to four platforms: Windows, GNU/Linux, MacOS, and Web (HTML5/WASM). It’s never code I’ll look back on and think is great, but it *is* code that I’m proud to have written. It also served its purpose: make a small game from scratch in C programming, and learn and use raylib.
I couldn’t be more happy for @raysan5 and his project. He is a great developer, nice person, and is totally deserving of this awesome recognition!
Back to the code. My hopes in making it open source is that folks learning C programming or raylib can have another source of reference for a working, published game. Perhaps someone will even fork the project and improve on it, isn’t open source amazing? 😁
What’s next for me? Well, I have a few things on my plate at the moment. There are some work projects that are taking up the bulk of my time, but in addition to that, I plan on participating in Miziziziz‘s 48 hour game jam in four days. I was thinking about using Godot for the first time in this jam to learn it, but I also might use C and Raylib 😁. The concept of these jams that Miziziziz does is pretty cool: multiple game developers use the same art kit and have 48 hours to create a game with it. Here’s an example:
Aside from that, I have been working to stay healthy and sane during these unprecedented times. Exercising a bit and trying to stay sharp and productive – I have also been playing a little bit of Starcraft2 and Hearthstone after a long, long break from gaming in general 😊.
After the game jam, I was thinking about starting my next big project/game to chip away at for a long time. I have some ideas, and I’m thinking about an RPG/Roguelike as the general idea, but hopefully completely different than anything anyone’s seen before. I have some ideas 🤠.
Original Text | Posted here with Author’s permission.
A couple of weeks ago I played (and finished) A Plague Tale, a game by Asobo Studio. I was really captivated by the game, not only by the beautiful graphics but also by the story and the locations in the game. I decided to investigate a bit about the game and I was surprised to see it was developed with a custom engine by a relatively small studio. I know there are lots of companies using custom engines but it’s very difficult to find a detailed market study with that kind of information curated and updated. So I decided to write this article.
Nowadays a lot of companies choose engines like Unreal or Unity for their games (or rather, that’s what people think) because developing a custom AAA level engine requires lots of resources. I decided to list here some of the most popular custom engines with the team-sizes and notable titles released with those engines.
Most of the engines listed here have been developed along the years with multiple iterations and multiple video games, those engines have gone through multiple versions or even complete (or semi-complete) rewrites from scratch, with an engine name change. Also, important to note, most of those engines use multiple middle-ware for specific functionalities (Platform, Physics, Network, Vegetation, UI, Rendering, Audio…).
*Author’s Note: I tried to be as much accurate as possible with the information about the employees count (I checked the companies websites, Wikipedia or even the company LinkedIn) but take it with a grain of salt (some employees numbers could not be up to date).
The BIG Companies
*From left to right: Assassin’s Creed Odyssey, Final Fantasy XV, Red Dead Redemption 2
The below list is for very large companies, sometimes with complex corporate structures comprising multiple divisions (not only focused on video games) and multiple studios/subsidiaries also developing games. Some of them work with multiple engines, not only custom ones but also licensed ones.
The companies above invested in custom engines to have full control over the technology and also avoid the revenue cut imposed by licensed engines. Despite that fact, there are some big companies that in the latest years have chosen Unreal Engine for their productions, the most notable cases are:
Capcom is using Unreal Engine for the new Street Fighter IV/V titles
Bandai Namco latest big titles are using Unreal: Jump Force, Dragon Ball Fighter Z, Dragon Ball Z: Kakarot, Tales of Arise
Square Enix also moved to Unreal Engine for several new titles: Dragon Quest XI, Kingdom Hearts III, Final Fantasy VII Remake
Interesting to see that those big three are Japaneses companies, maybe a market trend for that country? Also, maybe related (or maybe not), the Chinese holding Tencent owns 40% of Epic Games, I bet it has some influence in the Asian market.
Middle-size Studios
*From left to right: Rise of the Tomb Raider, Uncharted 4, A Plague Tale
Here we have the medium-small companies that decided to create custom technology for their titles.
The number of employees could be a nice reference to consider because a custom game engine is usually developed in-house (not outsourced) but note that some of those companies could have a big number of people because they also have in-house artist/audio teams while others outsource those parts of the development.
It would be really nice to know how many engineers are working on the engine division of each company, I’m sure there would be some big surprises for the different companies, probably in some cases by the low number of them!
Also, it would be interesting to have more info about the tooling included with those engines, it’s really difficult to have access to that kind of information. Engines tooling is usually a hidden-secret (beside some GDC presentation or some quick showcase video).
*From left to right: Horizon Zero Dawn, God of War, Death Stranding
Kojima Productions use Decima engine, developed by Guerrilla Games, despite not having a custom in-house engine, it’s surprisingly their accomplishments considering such a small team.
Media Molecule latest game/engine (Dreams) seems to have been developed by only ~15 coders, amazing!
Companies targeting one single platform, usually have less restrictions and can push the limits of that platform. Unfortunately, that’s a luxury that most companies can not afford.
Asobo Studio, the company that originated this market study is not that small…
Small-size Studios (Indie Studios)
*From left to right: The Witness, No Man’s Sky, X-Morph Defense
Here we have some really small studios that also choose to develop a custom engine for their games. Note that most of those engines rely on other libraries/frameworks for certain parts of the game, the common choices we find are SDL (cross-platform graphics/input), OGRE (rendering engine), MonoGame (cross-platform game framework, also relyes on SDL, SharpDX, OpenTK, OpenAL-Soft…).
One question many people could ask is, what parts of the engine are actually coded by the developers? Well, it depends, but usually coders take care of the screen-manager, entities-manager and content-manager as well as the wrappers/interfaces to the other external libraries.
Second question, what parts of the engine usually rely on external libraries/middleware? It also depends on the company resources but usually audio-system, physics, rendering, networking, ui-system, terrain-system, vegetation-system and some other pieces.
*From left to right: Factorio, Thimbleweed Park, Owlboy
On the following list (and the next one below) I added the publishing date (only +2012) and the link to Steam for all the games… there are not many games with custom engine from small studios out there and I think they deserve to be recognized and supported.
Hello Games is a very small studio considering the size No Man’s Sky game and custom engine. Really impressive!
Runic Games was dissolved in November 2017, the founders created Double Damage, not they are work on Echtra Games on Torchlight III.
In most of those studios the people in charge of creating the game engine it’s only 1-3 persons!
Lo-fi Games was a one-man team (Chris Hunt) for more than 6 years!
Some of the games in this list took +5 years of development!
Not many games… a couple of hits per year…
One-man custom engines
*From left to right: Stardew Valley, ScourgeBringer, Eagle Island
Finally, the list of the heroes.
Games developed by 1-2 people with custom game engines, engines mostly coded by one person! Respect.
*From left to right: Axiom Verge, Ghost 1.0, Remnants of Naezith
Creating an engine and a game from scratch to the point of publishing it is an extraordinary accomplishment, not many people in the world is ready for that. Almost all of them are 2D games, usually with very small budgets and developed along multiple years. Congratulations to the developers!
Some of those teams are formed by 1-2 people but probably growed at some moment and/or outsourced some parts of the development (art, audio…). Usually the publisher also helps with some resources (localization, marketing…).
Omar Cornut from Lizardcube is also the developer of Dear ImGui, a free and open-source immediate-mode gui library used by lots of AAA custom engines.
Some of the games in this list took +5 years of development!
I’ll start saying I’m biased, I’m really passionate about video games making technologies and I admire custom engines and game-making tools. I also contributed to custom engines ecosystem with my grain of salt: raylib and several game-making tools. I prefer a custom engine over a licensed one, it really feels extra amount of effort put into the product, usually translated into some specific mechanic of extra in-game details.
Said that, I must admit that creating a custom engine is a big endeavor and not many people are ready for that. I recognize Unity (and Unreal to less extend) have really democratized video game development, lots of small-medium size companies can use Unity today to quickly develop games and put them on the market, sometimes with very low budgets… But, still, lots of big companies prefer to rely on their own custom technologies.
From a game dev/teacher perspective I think students must learn how engines work internally with much detail as possible. Relying only on engines like Unity/Unreal for education to allow students develop eye-candy project in short-time is not the way to go. At the end of the day, someone has to write the engine and the tools!
Ramon Santamaria is a teacher and game developer from Barcelona, Spain and the author of Raylib, a simple and easy-to-use library to enjoy video game programming.
Kristen is out of town today which means I have some free time to drill down and work on my little game side project. The working title is “Lucy’s Adventure” (Lucy being the fox). It’s a Super Meat Boy/Boshy inspired platformer that aims to be progressively difficult, but in a non-bullshit type of way. Translation: death happens a lot, but the game telegraphs to the player how. The goal is for the player to feel like every death could have been avoidable.
After completing the game’s first two levels, aptly named “Baby Steps” and “Mechanics” I started work on level 3: the game’s first boss fight. In this fight, Lucy picks up an M16 which initiates a battle with the Boss of the first three stages: Lava Lord.
Sometimes when programming, the funniest and/or most unexpected things can happen. In my case, this usually is from a result of lack of understanding, a mistake, or more often: laziness. These two images sum this up perfectly:
For example, I didn’t want to redraw or edit sprites to have the gun move with Lucy, so the gun destroys itself and redraws every frame on Lucy’s position. It works great, and looks hilarious. Perfect.
😂
Even more funny was when I started programming the Boss’ A.I. It’s a pretty challenging process in itself, lots of function tail calls and recursion until certain conditions are met, signalling the boss to change states. I created some states to bring what I’ve considered abstractly to the game. When I ran my build, I just about lost it:
Holy…
The problem was obvious: I was calling the function that handled the Boss’ attack incorrectly. However, the outcome was better than if the game were working properly: it was harder to dodge, and actually looked pretty cool.
LAME
After I fixed it (he only throws a single fireball, which was the original intention) it felt… lame. Obviously the movement will be sped up, but a single fireball at this point seems unfulfilling.
I wonder if I should change it back. If I do, I wonder if creating so many instances of the fireball object like that will run poorly in some browsers or devices. I wonder if I should find a way to make it look like that properly without devastating that poor Android device running KitKat.
I wonder how many developers work on software and make mistakes that become features. It’s really a great feeling. I imagine it’s like painting a picture and spilling the paint bucket on the canvas. While you’re initially worried that you screwed up, on second look – that blotch kind of looks like something, let me add a few more colors. Wow, that mistake really made the piece!
At a minimum, I definitely think I need more fireballs on this canvas 🔥.