I like to call myself a "hobbyist game developer." One, because I'm very interested in video game design (mechanics, art, story, structure, etc.) and development (software implementation, physical hardware, etc.). Two, I don't do it professionally. And three, I kind of always approach things the wrong way.
Sure, I do like to draft up design documents of how I'd like the game to function. But I have this really bad notion of "I'm going to do everything by myself, and do it The Hardcore Way™!" Which always ends up (probably,) being that wrong way. What is The Hardcore Way™ you might ask? That's the little evil voice inside my grey matter saying such adorable things like "You should build your own game engine & framework around low level libraries! It would be way more efficient and fun!!"
Well, I don't think he's completely incorrect. But it's something I need to stop doing if I actually want to make games. A few weekends ago I was participating in the Linux Game Jam 2017 where I made Pucker Up. I decided to build the thing in Nim w/ SDL2 and raw OpenGL calls. And since Nim is quite young, I also had to make things for myself like a geometry and collision system. There's a common joke in the game dev scene, is that when you're at that tier, you're not even making a game. For a good two thirds of the jam, that is what all I was doing; no actual game mechanic implementation, just framework stuff. It sucked. And because of that time sink, I had to forgo adding a lot of content to Pucker Up that I wanted. All I could do were the basics.
I've always had the idea of sitting down and taking some time to learn an off the shelf game engine. But my experiences with the LGJ2017 is what prompted me to actually now try that. I know Unity is very hip and hopin' with the young and popular cool kid indies. Though playing games made with the engine, I have always had some issue with it running under Linux. So: pass.
What other engine has a massive following, loads of documentation, spectacular tooling, great performance, works on Linux and commercial success? Unreal. As a bonus, Epic Games is nice enough to let people peek into the source! Pretty cool.
I'm also someone who likes to learn from taking classes or reading books. I'm not totally adverse to reading online tutorials, but I don't mind paying money for words. After taking a few minutes to query the Amazon for "Unreal Engine 4 book," I found this; Unreal Engine 4 for Beginners. It's written by a David Nixon. He looks quite young and it seems like this is his first book that he has ever written. Props to him doing that so early in his life. I couldn't find too much more about him online except for this snippet:
David Nixon is a professional software developer and amateur game developer who holds a degree in Computer Science from Florida Atlantic University. He started his career developing websites and providing SEO services for companies nationwide. He then dove into the world of mobile gaming. Recently, he worked as a web developer for a major SaaS company.
It was $50 for a print copy or $10 for a kindle. Being cheap, I went for the later option. Here's a special feature about the Kindle Edition of this book: You cannot read it in the Amazon Cloud Reader; you have to use a physical device. Normally when I'm reading a book that I assume has code samples, I like to read it on a computer and have it side by side with my text editor. I tried using emulation systems such as Shashlik and ARChon, but none of them worked. I wanted to try to contact the author, asking him why this was so or if he could provide me with a non-kindle copy, but he doesn't have a personal website setup or any public email address. I'm lucky enough to have a tablet where I was able to read this on, but this really sucks for programming books.
Anyways, so what is actually in the book? Here is the table of contents:
- Getting Started
- Basic Concepts
- The Level Editor
- Players & Input
- User Interfaces
- Additional Topics
All of the chapters have the same structure: Introduce the chapter topics, divide into sections, then divided into further subsections, maybe a small example, and a quiz at the end. That's it. Rinse and repeat nine more times for nearly five hundred pages. That many pages might also seem like a lot but to be honest, I think I read the entirety of the book in less than an hour and a half. If you're wondering how I did that so fast, take a look at page 20:
I think this page is the one that has the most text on it, and it's not that much. Many of the other pages contain a lot of spacing for headers, paragraph breaks, images, section spacers, etc. If this book were to be in something like pt. 12 font size Times New Roman, I think it could be pegged at 150 pages maximum.
As for the actual quality of the content, there is not that much I can really say for it. It was an underwhelming read for me. Aside from the quizzes there was no engagement with the reader whatsoever. Sure there were some examples but they were sparse and all of them were with using the Blueprints Visual Scripting (more on that later).
I bought this book expecting it to be a sort of in depth tutorial. Every other game development book I have bought in the past 10+ years has been walkthrough where you build a game from the ground up. Unreal Engine 4 for Beginners left me with nothing other than a few common mechanisms (e.g. how to do simple character movement). Most of the content too was just mentioning what something does for you; not really much how to use it along with other things. The entire time I felt like I was reading simplified reference documentation. Nothing was detailed or highly constructed.
Now about the Blueprints. I'm not going to lie and say I'm fond of visual programming languages; I am very much so not. All of the entire code for this book was with Unreal's Blueprints. I was hoping to do some of that C++, but nope. It was dragging nodes and connections all of the way. I can understand the importance of visual scripting languages for people who work with Unreal yet don't have a traditional programming background but it was a real disappointment for me. On top of that Chapter 5, which is dedicated to introducing Blueprints was 1/6 of the entire book. And by no means is it a good introduction to how programming works. Most of the sections of this chapter would simply state "This is an <x> node, it functions like so." Most sections didn't have an example tied to them to better explain how the statement would work.
And… That's all I can really say about the actual content of the book. There was nothing that really made me a massive impression on me or gave me a good insight on how the Unreal Engine works or good practices with using it. Most of the information presented could have been scoured from the official UE4 documentation. In fact, I would say that this book was nothing more than a light reference manual than an actual tutorial. I really wanted to have this book show me how to build a game with Unreal; it did not do that.
I don't feel as if I got my money's worth out of this purchase. It was only $10 so it's not too much out of my wallet. But do avoid dropping $50 on the hard copy. I will cut Nixon some slack because this is his first book and does seem like a recent graduate. I wish him the best. He does also offer a course on Udemy about UE4, but I have not paid for it so I can't judge the quality of the content.
My conclusion is that I don't recommend getting it. I'll be looking for a different Unreal book in the future.
Over the last semester, I've been working on a game engine. It was meant to be a personal challenge for myself, to see if I could make my own game engine with some bare materials. Those being C++, OpenGL, and Qt. I wanted it to be more though. Seeing as most professional game engines these days (developed by community or company) feature some sort of scripting engine, I decided to make my own scriptable game engine.
After some troubles with trying to embed Python & Lua inside of a C++ dummy projects, I discovered this thing called ChaiScript. The tl;dr is that it's a scripting language for C++ that's dead simple to use. I decided to use it for my project since it gave me a no hassle way to add scripting features to my project. It was dead simple as "include the headers," and "give me a pointer to your C++ function/variable, and tell me what you want to call it."
Of course with simplicity, comes some cost. One of the first things for example are the long build times. If you statically include ChaiScript (which is the simplest way of using it), expect to take a small break when compiling. This can be easily remedied by dynamically linking ChaiScript's standard library and including a .dll/.so file alongside your executable. I did this when developing Masala.
I also ran into performance issues with ChaiScript. At the current version (5.8.1), the language is executed using an Abstract Syntax Tree. While this is necessary for parsing a language, using it to run code is much slower than it could be.
Enough about ChaiScript, let's talk about the engine itself, Masala!
Masala was built using C++ (14), Qt 5.x, ChaiScript, and OpenGL. I had the goal of trying to create a reusable game engine where you write all of your logic inside of ChaiScript files. It follows a very lose XNA/MonoGame-like pattern. Right now it features:
- Cross platform (Built with Linux)
- Featureful sprite object (with animations!)
- Tilemaps (Flare maps)
- Basic sound effects
- Keyboard Input
- Interactive debugging terminal
It's pretty simple. I mean, very simple. I don't think it stands up well to other engines that are out there, so I really consider it to be an experiment in using ChaiScript for a game engine.
I implemented two simple games, one being a clone of the classic Atari Pong:
And another more original one I've dubbed "Grab n' Dodge:"
I would say that I accomplished my goal in writing a game engine. Something that I have never done. As for the cross-platform part, I was able to get the code to compile on OS X and Windows, but had some trouble upon running it. One of my friends said that he was able to get it working on OS X, but I haven't seen the proof.
If anyone wants to help me getting this running on Windows or OS X, contact me. Since it was made using cross platform tools, it should work on all of the OSes Qt & OpenGL support.
And last, you can find the official code repository over here on GitLab. It's GPLv3 licensed.