Our next milestone is to get the CI1 code to compile inside the CIU framework. We want to get the absolute bare minimum to compile (but not necessarily actually work correctly), and then iteratively build upon it.
This means we ditch anything optional or superfluous and focus on the bare essentials. We comment out or stub out the introductory sequence, outro, disk I/O (saving/loading high scores), high score name entry. Even the sound and input systems are ripped out almost entirely (CI2 provides a sound emulation layer that we can use, and we’ll do significant rework on the input system to support mouse and joypads anyway). There are a lot of casualties here, but we’ll swing around and fix them later on.
This is a crucial step because it can’t be broken down any further sub-steps, and there’s no indication of whether we’re on the right path or even how close we are to a successful compilation (well, except for the giant list of compiler errors that should
hopefully get shorter and shorter as time goes by). We have to spend several hours ‘flying blind’ until we land on solid ground again.
Thankfully, CI1 is a small project, and it’s easy to strip it down to a minimal working version. Other projects are much larger/harder, and we can easily spend several days or even weeks in an non-compilable state.
As part of this process, we also wire up the graphical resources so CI1 can access them (otherwise we won’t be able to see anything). We’ll use that program I wrote for CI2 to convert the essentials from bitmaps to textures:
These graphical assets are in the original (low) resolution, so let’s configure UVE for 640x480 and single-resolution (1X) graphics.
Since UveUDX9, UVE has a mode called HQ2X, which doubles the resolution of all textures (while keeping the rest of the game exactly the game). This is how CI3 and CI4 were “remastered”: by re-rendering all assets in 1600x960 resolution (instead of the original 800x480). Uve++11 expands upon this concept, theoretically allowing for HQ3X, HQ4X, or above. Very recently, the capability to have different resources use different HQ factors was added. So, for example, it’s now possible for the UI to have twice the resolution of the rest of the game (this is used in the Android version of CIU).
When HQ2X was first introduced, two separate sets of assets needed to be created (one for 1X and one for 2X), and they were both kept separate on disk. It quickly became apparent that this is not a sustainable strategy, however. The two versions of each file must always be kept ‘in sync’ – updating one but forgetting to update the other causes a lot of bugs and maintenance headaches.
So CIU took a different approach. Only one version of the assets is ever created (the highest-resolution version). When the game is looking for an asset to load in low resolution, it will automatically downsample the higher-resolution version appropriately(*).
* This is only during development. For the final build, when the WAD data file is created, assets are baked into their final resolutions. There are also a lot of details I’m glossing over, such that .JPG files are never downsampled to prevent quaility loss, or that high-resolution asset dimensions are restricted so that they perfectly match the 1X dimension, or that you can mark certain assets to be ‘resolution-agnostic’. But this detour is long enough as it is.
As I’ve mentioned, the decision at this point in time was to NOT remaster the graphics. Using existing graphics as-is (a) saves effort (b) arguably creates a more authentic experience and (c) is more in line with the initial reasoning behind this project, which was not a full remaster but more of a ‘technical refresh’. In fact, I agonized over the subtitle and how to best communicate this to the players:
- Chicken Invaders: One ?
- Chicken Invaders: Redoux ?
- Chicken Invaders: Tech Refresh ?
- Chicken Invaders: Re-heated ?
In practice, however, keeping the original graphics in 1X resolution was a poor decision:
UVE doesn’t actually support loading 1X assets directly – it always requires a 2X asset that it can downscale. So changes needed to be made to the engine to support this, hence more work. Most egregiously, it breaks compatibility with the older folder layout of assets on disk. As of this writing, I’m uncertain whether this change will be reverted.
After viewing the game for the first time, it became apparent that 640x480 graphics upsampled to FHD resolutions (or above) simply became to murky and blurry. And it only gets worse if you turn “bilinear interpolation” off(*).
I tried to half-fix this by upscaling the UI, but having the UI at 2X while the game is at 1X creates a jarring inconsistency in the quality.
* I should really have more screenshots of this process, but I didn’t know I would be doing a write-up until later.
So, the decision has been reversed: we’ll remaster the graphics at 2X resolution (similar to CI2), which now lands this project firmly in the “remastering” category. On the upside, we now at least know what the subtitle will be…
… but we now have a new set of problems.