Who's your programming hero? There are many names that could come up, but for some reason one name seems to bleed throughout all programming industries. We all know what games make John Carmack's programming so iconic, DOOM especially comes to mind, but that obviously wasn't his first game.
Why Look Back?
I was working away at some of my own game projects, and sometimes it felt like I wasn't getting anywhere because I hadn't released any of it. That's when it hit me, most game developers don't get popular off their first game, at least, not DOOM popular. So while I was having fun working on a game I would love to play, it inevitably bloats up into oblivion. So everybody has to start somewhere, but what's a good point to start at? Luckily, we have an example in John Carmack.
Shadowforge (1989)
Published by Nite Owl Productions, Shadowforge is an RPG for the Apple II. It had turn-based combat, xp, movement, a tile-based world, sound effects, and different attack types. If you're wondering what gameplay looks like, here's a video.
Also, here's an image of gameplay (in case you don't want to watch the video).
So What's Going On Here?
It's already cool seeing a game like this from one of best programmers ever, but I want you to go through this list and check off what you think you could develop.
- Player name
- XP/Level system
- Currency
- Weapons
- Inventory
- Movement (grid based)
- Multiple attack types
- A tile based world
- Low-res sprites
- Enemies
- Commands
- Sound effects
Obviously there's more to the game than that, but a very large percentage of programmers could pick up any language with any engine/graphics library, and create these features within a month, heck, maybe a week.
It all depends on your skill level and familiarity with your tools, but regardless you could do it, you could make John Carmack's first game.
Foreshadowing
Or so you thought, but as John Carmack is, he is able to one-up even the simplest of concepts. If you ended up watching the gameplay video, you may have noticed that tiles appear and disappear. This is actually simulating visibility. How would John Carmack have done this? Well, the simplest solution I could imagine would be to cast rays from the player in all direction, and only draw the tiles that get hit by these rays.
Sound familiar?
Hovertank One
Let's fast-forward to April, 1991. id was being published by Softdisk, and, would release games at a consistent rate. One of these games was 3D, or, kind of. Computers back then could display 3D graphics, but not at real-time, it was just too much computation. John Carmack implemented a technique to create the illusion of 3D graphics, while only requiring minimal hardware.
So how did this technology work? Well, you would cast rays out from the player at regular intervals of space until they hit a wall. When it hit a wall, you would draw a line, and how tall that line is depends on how far the line travelled. Rays? Casting? That sounds exactly the same as casting rays in Shadowforge to check for visible tiles. This doesn't seem that interesting, until you realize that creating 3D graphics this way was in Catacomb 3-D, Wolfenstein3D, and DOOM.
Whether John Carmack actually used some sort of ray-casting in Shadowforge is unknown, but, it would hold a nice testament. Every game John Carmack made was useful to him. These games all built off one another, becoming better and better each time. They all came from a humble starting point.
The technology that allows you to see the most iconic maps wasn't made in a day, or even just DOOM's development time, it's from pre-existing experience.
Your Own Games
How should this change how you create your games?
Firstly, if you're just starting out, limit the scope of your game, and I don't mean just make it a bit smaller, I mean this game should take no longer than a month to make. Sure, you can get experience programming by making large games, but you'll never get experience releasing them. John Carmack was able to get a lot of experience releasing games while working for publishers like Softdisk.
Secondly, use technology from your previous games. The ray-casting in Shadowforge and Hovertank serve extremely different purposes, but it was an extremely useful thing to have learned. Concepts like these aren't bound by language or tools, you can create a ray-caster with anything. Personally, I released a game called *NULL, and although it's small and very simple, I added the ability to save runs by recording game inputs. You can also replay this runs so you can show off your fastest times. This is something I can bring into future games. I'm intentionally implementing useful concepts to build from in future.
John Carmack didn't just spawn in implementing BSP trees, but neither did you, so spend a bit of time creating a simple game, you'll never know how useful it will be in the future.