7DRL 2017 Devlog
This March 5-12th I worked on Space Station Plunder, a roguelike game for the Seven Day Roguelike Challenge. 7DRL is a yearly event where participants make a roguelike game from scratch in 168 hours.
Download for Linux and Windows on itch.io
- Source code on GitHub
My First Roguelike#
I'm not that big on roguelikes, but I did play a lot of CalcRogue and POWDER years back and always wanted to make something in the genre.
Map and world generation are a core part of these games, and most take place in elaborate dungeons with an overwhelming number of stats weapons and spells to keep every play fresh. Complex worlds full of objects and rules that interact and combine in ways that not even the programmers imagined.
As I brainstormed ideas leading up to 7DRL, I decided that my roguelike should take place in outer space, far away from any dungeons. Generating good-looking structures is not something I wanted to dive into for the first time with only seven days to work with.
Design and Planning#
Most of what I make starts in my sketchbook. I first wanted to use a version of the CGA palette that I used in previous game jams, but once I started on the pixel art I ended up going in a different direction.
On Monday, I used HacknPlan to lay out the work for each upcoming day. Blindly following this self-imposed schedule is probably why I had a modest but almost-finished roguelike at the end of the week. I had to send a lot of non-essential tasks to the backlog along the way, and unfortunately had to forfeit hiscores and object stats persistence.
This is the project's status at the end:
Lessons on Staying Focused#
48h and 168h are not that different. Both are short and both sneak up on you fast, especially when you're in the whirlwind of working and obsessing over a single thing. There's no way to really "finish" a game in seven days. Even if you end up with a playable prototype, there will always be a backlog of things that you didn't get around to.
You always move forward to the next thing on the To Do list, so there's no time to redo something you already made. I tried my best to avoid placeholder art and throw-away code, because I knew I wouldn't get a chance to go back and fix it before the deadline.
I worked on code and art in parallel on a need-to basis, and tried not to spend time on anything unless it was guaranteed to make it in 7DRL build. For each feature, I aimed for the simplest implementation that resembled the goal:
An enemy needs to chase the player?
- A. I could code a pathfinding algorithm that takes all the other objects on the map into account, or
- B. Each turn, the enemy moves left if the player is to its left, down if the player is below it, and so on.
I chose Option B which is only a few lines of code, and moved on to the next item in the 60-something task list. Turns out Option B had a very cool side effect, too: an angry enemy may bump into other units on its way to the player, instigating AI vs. AI battles! I didn't even think to design that feature, I got it for free just by letting the game world run its course.
Got a tilemap going with objects, and the player ship moving around on it.
The current screen is just one of 216 sectors - outer space really is endless, at least in a 16bit sense. Added an action log.
The player is able to attack other objects or just say hello, depending on what selected mood it's in: benevolent or aggressive.
Moved the action log to the bottom of the screen, this way the map is centered and there's room for lengthier sentences.
The winner of a battle plunders the loser's cargo.
The AI fights back and the player's ship takes damage.
Asteroids that can be mined for resources, and different AI personalities. Some ships stay put, others run away from battle, and some actively chase their attacker.
The player can trade with merchant ships and get repairs.
This was the first time I took an animated screenshot of something I made. I used LICEcap, which was very intuitive and worked perfectly with Wine.
I then loaded the GIF file into GIMP, where I scaled it up and reduced its size by 16% with Filters > Animation > Optimize (for GIF).
I never cease to be amazed by all the brilliant, high-quality software out there available for free.
There are a few dozen tasks in the game's HacknPlan backlog, which are bound to triple in number as I'll go through them in the coming weeks. I think this prototype has promise so I plan to develop it into a full small-scale roguelike. I will tackle these first:
- Balance all the stats properly
- Remember objects' changed stats in each space screen
- Calculate and save hiscores
- A bit of eye candy
Thanks for reading, and check out my Twitter page for frequent screenshots of my work in progress.