The story so far
|May 26th 2018|
|More coming soon!|
Hi, I'm Ross. Over the past 18 months I've been spending some time learning how to make games for the Sega Dreamcast. I've started documentng my progress here.
The Dreamcast was around just a little before my time. I was eight years old when it was first released and already an avid gamer, but only got around to borrowing a friend's Dreamcast shortly after they were discontinued in 2001.
I always thought it was charming, with its LCD-screen memory cards and internet capabilities, and after playing Sonic Adventure and Phantasy Star Online I was left with the impression that it was way ahead of its time.
Fast forward seventeen years and the Dreamcast has a lively homebrew scene with brand new games being released and sold. This is largely thanks to the works of the Cryptic Allusion Dev Team, who developed the core software that makes Dreamcast homebrew possible - KallistiOS.
To me, the Dreamcast lies in the sweet spot between retro and modern: it has good 3D performance and high fidelity video and audio, but a simplicity and robustness that's hard to find in modern hardware.
In terms of homebrew, anyone with a computer and some basic C programming experience can get started without expensive devkits or licenses (providing they don't mind turning a few CDs into coasters in the process) and can easily share their creations with any other Dreamcast owner, quite frankly due to its lack of decent copy protection.
When I was in college learning how to make games I came across a video series called Adventures in Game Development where a team of developers had started work on a new game for the Dreamcast called Elysian Shadows. This was the first time I'd seen an ambitious homebrew project underway and I knew it was something I'd try myself one day.
In general, my approach is to build the simplest thing possible that solves the problem I have.
It's all too easy to get caught up in making the perfect engine, tools and technologies while trying to solve the general problem of game development 'once and for all', but ultimately I find that focusing on the task at hand yields the best results.
I prefer to work reasonably close to the hardware and try to program in a manner aligned to the strengths of the target platform for the specific game I'm making. This is preferable to using off-the-shelf engines such as Unity, as they introduce a lot of heavy abstractions that developers have to wrestle with in order to get good performance and the exact right behaviour for their game. For me, this saps my morale and makes me frustrated, so I just code the thing that I want in the first place and learn whatever is needed to bridge any gaps.
As it happens, there's nothing like Unity for the Dreamcast anyway, so programming the game directly is the only real choice. I use the term "engine" to describe the collection of re-usable code that I've written for the Dreamcast, but this is in no way a "full engine" as one might consider Unity or Unreal.
My first shot at making a Dreamcast game was Dungeon Ross. It had the very loose remit of 'dungeon crawler'. The first prototype was developed over two days during Global Game Jam 2017 with a friend of mine (Alastair Low) providing 3D models, and a further few days of work brought some extra systems such as skeletal animation and vertex colouring.
It wasn't really designed or thought out all that much, and was mainly an exploration into how the Dreamcast works. It features cartoon versions of me and Alastair fighting our way through a handful of levels with basic swiping attacks and a few different kinds of enemies.
The decision to put us in the game was just down to a lack of better ideas on my part, and the fact I had a very simple 3D model of myself that I used for testing. Alastair ended up using this as a starting point for the character models.
The Dreamcast Junkyard wrote an article on an early build of the game. Although it hasn't changed much since then we're likely to revisit the project when we have a better design vision. In all likelihood we'll have actual characters, proper gameplay and a backstory instead of just us running around in there!
2018's Global Game Jam had me on a new team, so I started a different kind of Dreamcast project. Kernel Rybec is a two-player competitive space shooter where players move over the surface of a planet and shoot around it to hit their opponent.
I worked with Mitch Mack (3D modelling) and Brian Diamond (music and SFX) who both provided great assets for the game. This time around there was more of a design focus, and some new features were added to the engine including split-screen multiplayer and HUD elements.
The gameplay is functional but not well refined as the shots are too hard to predict. It's also quite bare-bones just now with only one type of ship and one type of attack.
I have a pretty good idea of where to go with Kernel Rybec, so it will likely be the first Dreamcast game I actually finish.
As a slight departure from the other projects, I decided to build a table-top aracde cabinet powered by the Dreamcast. This would mean I could show our games at events in a cool format, and also just enjoy playing my Dreamcast library on it.
As my first ever woodworking project it's very rough around the edges, but it's been a great learning experience with something fun to show at the end.
At the time of writing, the arcade cabinet is fully assembled but I'm still in the process of hooking up the arcade controls to the Dreamcast unit itself.
This involves using a Raspberry Pi as a middle-man between the arcade controls (which behave as a standard USB joystick) and the Dreamcast, which expects all its controllers to communicate using the MAPLE protocol.
In the mean time I've set it up with redream Dreamcast emulator on a PC and have the controls hooked up via USB.
Check out Dundee MakerSpace if you're from the area and interested in this kind of project.
Thanks for reading! I look forward to posting more about my Dreamcast projects as they progress. Feel free to drop me an e-mail with any questions or recommendations.