Almost there (?)
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.
Title screen
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.
Pause screen
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.
Cleaning up
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.
Mouse pointer
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.
OS icon
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.
Bonus: Pigs in space
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.