We have now remastered all of the core graphics. The original code compiles successfully, we have wired up the input and the sound to the new engine, high scores work, and the game is playable from start to finish. (*)
* Figuratively speaking. CI1 doesn’t really end.
You might think that this means that we’re almost done, but in truth we are only at the half-way point. To arrive at the final polished product, we still need to do approximately as much work as we have already done so far. The devil is in the details, they say, and they are right.
Although the game ‘works’, recall that we have taken a lot of shortcuts to make this happen:
Some functionality has been removed or disabled.
We’re using CIU’s menu system (which includes a lot of irrelevant/non-applicable options for CI1).
We are loading a lot of unused language and graphics assets (again, inherited from CIU).
We’ve only tackled the core game (not the introduction or other ancillary stuff).
A lot of little other details are still missing: An OS icon, a mouse pointer, a loading bar (maybe)
So, although we’ve won this battle, the war is far from over.
I spend some time updating the title screen with the new control methods. Formatting this type of text is normally a royal pain, but thankfully CIU can already do a lot of the heavy lifting for us. I notice that the lines must be spaced out vertically more than they were originally. This is a side-effect of the taller font we’re now using.
Technically, the game can’t be paused because the rendering loop isn’t separate from the logic loop. But we can still put it on hold (without showing the game screen while paused, of course). I quickly implement a basic pause screen:
You can also catch a glimpse of the new GUI here. Designing a good GUI is something that takes a lot of thought and effort, none of which we can spare right now. Besides, after 6 entries in the series, how unique and distinctive can each episode’s GUI really be?
I decide to employ the “principle of least effort” and perform minimal modifications to CIU’s theme (mainly by rounding off the buttons more, darkening the color theme, and applying a thick border). I even re-use some of the icons.
The original CI1 did not have a GUI to speak of, and this is both a blessing and a curse. On one hand, it’s good that we are not restricted by the original design, but on the other hand, we don’t have anything to guide us either.
I go through the language phrases and all loaded graphical and sound resources, and try to weed out as many unneeded ones as possible. This takes a long time and, from experience, I’m bound to miss a few.
At least the game is loading much faster now.
I also go through all menus and remove unneeded options. This takes even longer.
This is a new element because obviously the original didn’t have any mouse support.
I choose something simple that doesn’t stray too far off expectations.
Although there are a lot of fancy things that could be done for this, I’d rather have something evocative of the original game, so I decide to crop part of the original introductory bitmap. As a bonus, this will be a nice nod to this screen (which would otherwise not appear in the game at all):
There’s an issue, though. When cropping to a square, there’s no good framing that includes both chickens. Plus it all looks a bit empty at the top:
Ideally I’d like to move some of these elements closer together. But looking at my source files, I only have the finished opaque bitmap, not individual layers (back then I hadn’t yet refined my workflow, and I was not in the habit of rendering individual layers).
Normally, I’d simply go back and re-render the chickens will proper translucency information, so I can freely compose them on the background (I do have the earth as a layer). But, if you recall, the chickens all have that horrible “beak problem”:
Alright, it’s time to get creative. First, I’ll load up the CI2 chicken and delete everything except the beak and the body (the body is only needed as a reference for the beak’s relative placement to it):
Then, I’ll delete the problematic beaks from the original file:
“I Have No Mouth, and I Must Scream”.
Next, I’ll merge the body-plus-beaks into the scene, align the bodies exactly on top of each other (which will place the beaks also at their correct location), and finally delete the duplicate bodies. It all sounds a bit complicated when written down, but it’s quite straightforward. After a little bit of work, everything is done:
Well, uhm, I seem to have forgotten to re-parent the beaks to the bodies.
* Actually, I seem to have rendered the wrong frame in the sequence for these screenshots, the wings should not be bent so far upwards
There. I can now render them out with translucency information and move them around independently. I don’t even have to render at twice the resolution, because the icon is so small:
Finally. It’s not great, but it reads a little bit better.
Looking at the source code again, I see a reference to a certain flying pig:
It’s commented out, but it’s there nonetheless. And the assets folder actually includes the necessary bitmaps:
So, it turns out there might have been plans to launch this pig into space much earlier than 2002.