The year 204x. After the last World War the mankind has finally found a civilized way of dealing with their differences: the 8-BIT Grid System.
This is the story of unnamed heroes trained to load their minds into the world's grids as Battle Internet Technicians, although they like to call themselves Grid Runners.
The game requires at least OpenGL 2.0 and 960x720 resolution or better (windowed mode, although I tried it full-screen in a netbook with less resolution and it works fine).
The source code version requires Python 2 and AVBin (10 or later -Linux distros may package a very old version-, 11 Alpha is highly recommended!) and OpenAL (optionally).
The windows and Linux packages are ready to go!
- Windows: unzip the ZIP and run GRUNNERS.EXE
- Linux (Debian/Ubuntu): choose the right package for your system (32 or 64 bit), install the package and a "grunners" icon should be added to your Games section (the game can also started with /opt/grunners/grunners.py).
Important: the source code version has a bug that may crash the game in Windows and Mac. Just comment line 72 in game/__init__.py. It's a bug in the shipped version of Pyglet. Sorry about that!
Ratings (show detail)
WIndows binary bundle
Rendered map (WIP)
Day 1: Idea, scaffolding, starting
So finally the "8-bit" theme won! Despite not being the most intriguing theme ever, I must confess I find it appealing. It's true it's been somewhat abused lately by indie games, but there's still something I find attractive in pixel-art graphics and chiptunes (I started in computing with a ZX Spectrum, soooo I'm biased).
Today I got some ideas in paper, and basically I started doing all the scaffolding of the project (plain pyglet, borrowing some pieces from cocos2d; today I wasted way too much time fighting a shader, but at the end I won!).
So I have a good foundation to start working on the gameplay, controls, a menu, some graphics and a song for the title screen (I tried a NES style, but failed... and it reminds me of some of the Bitmap Brothers' productions, which is not too bad!).
It's too soon to say how all this will end, but I like the game idea and it's not too ambitious for a week.
I think I can get a good 8-bit look/feel/mood. I know I'm not aiming for a too innovative interpretation of the theme but I hope that, if I can deliver a game that is fun to play, the judges might be forgiving on that regard ;).
Day 2: Slow start
Today I wasn't too inspired so I started working on small and simple things, which means that I don't have a game... but look a this lovely stage selection screen!
Looks nice, but I kind of regret doing this because the map is not 100% accurate (pixels!), so I hope nobody gets offended if I place a city in the wrong place ;).
Johannesburg is locked in the screenshot; you are required to complete some missions so other stages are unlocked, but you can replay old stages at any time. In this way it won't be that bad if I can't finish too many stages (I'll try 10!).
Also I've been drawing some basic graphics to start working on the game engine tomorrow. I'd like to have the basic mechanics working by Thursday so I have more or less two days to finish the details and stage design.
Day 3: Graphics!
Today I started my "PyWeek time" fixing some issues I noticed yesterday, but it was time to go to bed.
After that I did my first refactoring (yay!). The project structure was starting to be annoying because all the scenes in the same file, meaning a lot of back and forth in a "large" file (not that much, but divide et impera). Anyway, tomorrow I'll start working on the map renderer.
I'm not advancing too much, but given that I need my time to do the graphics, I'm happy today I nailed most of the map components (more or less), that is: walls, terminals, doors and lasers. I still have to draw the grid runners though.
Hopefully I'll finish tomorrow the renderer and basic movement with simple collision detection (let's see how it goes, but it shouldn't be harder than what I did for "Lunar").
Also I'm still not sure if the game will be fun, but at least I'll try to make it look nice ;).
Finally I'm having a good time with pyglet. It's starting to feel very familiar and that translates in less time reading documentation and code!
Day 4: Map renderer, a hud, delayed!
Well, I'm definitely not on schedule!
Today I kind of finished the map renderer, although a bug got me stuck for way too much time. I couldn't work on the player character, let alone collisions; just-render-the-map.
At least I implemented the HUD:
- Grid scan: you play against the clock! Once your character is "uploaded" to the grid, the anti-intrusion system will try to find you with a grid scan. If the 8-bit counter (of course) gets to zero, you're disconnected and your mission is over! You can crack terminals to get more time.
- Link: you only have 5 bars of signal, if the grid runners defending the grid zap you, you'll lose one bar. When all the bars are gone, you're disconnected and your mission is over! Again you can crack terminals to recover your link.
I'd love to add the radar too (it's in the original spec), but I don't know if I'll have time for that.
I'm tired and I think I'm going to call it a day and hopefully tomorrow I'll advance a little bit more!
Day 5: A Grid Runner!
Today was a long and intense day, so I couldn't work much on the game. At least I got the animation for the main character of the game: the grid runner!
You can take a look to an early test here: he runs!
Only two days left, but as I'm off work tomorrow I'll be able to work on the game full time and hopefully I'll be able to finish it!
Day 6: Collisions, lasers and terminals
My game is reaching its critical point! Today I implemented almost all the elements required to design the stages:
- Lasers: you can cross them, but they will give away your location (meaning: the grid scan will be faster and it will spawn enemies!).
- Terminals: you can crack them targeting one of four items (access: will open nearby doors, lasers: will disable nearby lasers, link: will restore your health, firewall: will add extra time to the grid scan). Each terminal can be used once.
Also the collision detection is pretty good, I'm happy with the character movement. I composed a bg music for the stage, and general sounds effects are already in place. I left sound for the last minute in my previous PyWeek and it was a very bad idea, so I'm trying to make everything at the same time, although it means I'm overall slower in the process.
Things to do tomorrow:
- Make the lasers and doors react to the terminals (link and firewall are already working).
- A "disconnected" screen (because you're out of link -enemy impacts-, because the grid scan got to zero or because you aborted the mission -you may need to do it if you choose poorly the targets to crack-).
- Enemy grid runners (important).
- 10 levels! I'll try to add a "overview" screen before each stage explaining your mission and it will work as a tutorial too (I plan to use Tokyo and Madrid stages for that).
Ok, that's enough for today. I think the game is looking good so far, I'm looking forward to finish it and see how it plays!
Day 7: Release!
Finally I managed to include 10 levels, and more or less all the stuff I planned, so I'm extremely happy!
I've uploaded the source code version (should work in Linux, Mac and Windows; read the README.txt), and a binary bundle for windows ready to run.
I'll do a post-mortem in the next days, when I'm fully recovered! ;)
Edit: I also uploaded packages for Debian/Ubuntu.
Grid Runners post-mortem
I always try to do the post-mortem ASAP so it doesn't get cold, even if the emotions still run high and that could influence my writing. I couldn't do it this time as I finished the game too exhausted to keep thinking on it.
As the days went by I felt less and less keen to write it, so this post-mortem is going to be shorter than usual.
What went right
The idea for "Grid Runners" came from a previous PyWeek (16?). At that time the theme was not what was I was hoping and I didn't use it. I thought that the idea had potential but I never implemented it as a non-pyweek game. The 8-bit theme is not very inspiring, but it is quite open and it's not impossible to adapt your idea so it fits.
More or less I implemented what I had planned, so that was something that definitely went right.
I'm getting very effective with the tools I use: Gimp, Tiled, Audacity, Schism Tracker (new this PyWeek, replaced the old SoundTracker in my tool-set) and Pyglet (more about this one in what went wrong).
My workflow regarding animations in Gimp is not the best (anything but the most basic animations are difficult to test and adjust). Getting the grid runners' animation right was slow, although it turned out quite nice at the end.
I spent a lot of time polishing the game even before it was a game, and I think it was a good idea. In PyWeek 17 I left the music and audio to the last minute and it affected the final result. This time I tried to allocate time to work on every aspect of the game, although I didn't succeeded completely because I couldn't start with the level design until Saturday afternoon. Close enough!
What went wrong
I got stuck a couple of times with Pyglet/OpenGL related stuff. For example I used a shader for the first time and that was a bad idea because I wasted a lot of time getting it right (although it looks great at the end!). Also I had a lot of problems to get the viewport right so the graphics were scaled properly to get a nice pixel-art effect. I knew how to do it but I was getting artifacts and pixel-bleeding and after all the efforts that didn't feel right; I narrowed down the problem to some sort of issue related to the viewport being multiple of 2 or the tile size, so I found a workaround that seems to work making the game look nice both in a window and in full screen.
Besides that I had a couple of W-T-F issues related to the fact that I'm a OpenGL-newbie, but I managed to carry on with a workaround or changing the implementation of that feature. In fact the game has a couple of glitches because last minute fixes (they don't affect the gameplay at all, so it's OK).
I made a mistake not planing the AI of the enemies during the week because I had never done it before and when I started working on it on Saturday I was already tired and it doesn't help that you know that you shouldn't invest more than a couple of hours or you won't have time to do the levels. The end result works, but it can be improved (and I did it in a post-compo version).
Finally I think the game was a little bit too ambitious for a week, and it was definitely too risky doing the levels Saturday afternoon when I was quite tired. I love Tiled and it's a wonderful tool but when I finished the last level I swear I don't want to have to deal with its interface in some time.
I'm quite proud of the end result: the music, the graphics and the gameplay. It was hard work but totally worth it!