First Playthrough
We start our project by playing through a single mission of the original game. We'll draw out the game flow and note specific features that we'll need to design. My goal is to reproduce features both visually and mechanically, but the implementation may be vastly different from the original. We're not bound to limitations of DOS.
Mount the game folder in DosBox and kick off by running td1.exe
Overall Game Flow
We learn that Marta Velasquez lost her father during the Vulture Incursion and now it's her turn to defend the planet and maybe get revenge. The entire story unfolds over 59 missions originally separated in to three episodes of 20. The story is told through the briefing and debriefing sequences. Logically, the game follows this loop for each mission:
Feature Recap
Each feature we noted during the playthrough presents a challenge for us. We'll find a way to handle, or replace each of these:
Feature | Comment |
---|---|
Low Resolution | The original game has a 320 x 200 resolution. We should find a way to improve this during our implementation. |
Sprites | All images are pre-rendered. We won't need 3D tools to recreate them, but we'll need to extract them. |
Music/SFX | The original game has great sounds thanks to the AdLib (OPL) synth. We'll have to extract these. |
Intro | A fixed introduction sequence presents background story through static screens and text. We'll have to find these screens and program a fixed loading sequence. |
Subtitles | Every fixed screen is accompanied by subtitles unveiling story to the player. We'll have to find the text in either a data file or as a string in the binary file. |
Fading | Both screens and text fade in and out as they change. We'll have to develop a fixed fading effect throughout the prototype |
Credits | The action credits mirrors gameplay: We'll need ships and a game world to travel through. We won't be able to do this until the engine is fully functioning. |
Palettes | The backgrounds have dithering artifacts. This is a good sign that images are stored with indexed color palettes. We'll have to find palette data to match with image data. |
Menu | The main menu has many options, but only a couple are directly involved in the game flow critical path. |
Color Cycling | The menu highlighting effects are done through color cycling of the base palette. A space-saving technique that we'll probably cut out in favor of backlighting |
Popups | Some main menu options generate options depending on circumstances. For instance, starting a new game when a game is already active. We'll have to create popups that block normal menu usage. |
Loading Saving | Big surprise - we'll have to find a way to load and save games. The original game includes 10 slots. |
Quitting | Players can gracefully quit from the main menu. This will produce a popup warning. |
Banner | Mission briefings begin with a banner showing the mission title. Banners also appear at other times during briefings. |
Settings | Briefings include one or more setting splash screens that include several lines of descriptive text. |
Characters | The character faces alternate between speaker and listener roles. The screen displays names and assigns a color to their text. |
Dialogue | Character speech is printed sequentially from left to right, top to bottom. Text color identifies speaker and control characters force pauses. We'll extract all information from dialogue files. |
Parsing | Displaying the text involves parsing letters from the source dialogue files. We'll have to learn about the custom control characters and create a way to fit characters on the screen. |
Frame Rate | We can see the peak frame rate during mission play of 30 fps. Looking closely at the action view, it appears to update less than that, maybe around 24 fps. We'll aim for constant 60 fps |
Ships | The player controls and fights against ships in the game world. There are several varieties for each side. |
Alignment | Ships can be ally, enemy, or neutral. Typical enemy ships are colored purple and named vulture mark vi, vii, and viii. Neutral ships are typically transports. |
Weapons | All fighting ships have blasters and most also have missiles. There appears to be a weak, normal, and strong type of both. Neutral ships appear unarmed. |
Absolute Movement | Arrow key controls force absolute directional movement. Hitting left makes the ship turn the left and head left, etc. This is different from most games today. |
Collisions | Ships collide with walls, buildings, and weapon fire. Ships do not collide with each other. Detecting collisions is a canonical problem in game design. |
Rebounding | Ships rebound away from collisions with barriers. We'll build an efficient solution to guarantee this effect. |
HUD | The HUD sits at the bottom of the screen and contains several widgets reporting information including a minimap, ticker, weapons, shields, and armor. This could be a highly coupled and expensive object design. |
Effects | Explosions and flashes appear when ships are destroyed and weapons hit a target. These are sprite effects in the original game but we could emulate this with particle systems today. |
Map | The game world consists of 32 x 32 sprites layed out according to map data files. There's also an underlying collision map depending on the sprite type. |
Rotation | Ship sprite rotation is emulated through axis flipping of multiple base sprites that have been pre-rotated. We'll likely just store sprite and use arbitrary rotations. |
Stats | Ships have statistics including armor, shields and maximum speed. We'll try to honor handling these statistics as closely as possible. |
Balancing | With statistics comes game balancing. The game should be challenging yet manageable for the player. We can directly copy the original due to higher processing speeds and frame rates. |
Events | Each mission consists of events that happen in sequence. The final event is to finish the mission. We'll need to find a way to manage event sequences for each mission. |
AI | The original game includes a basic AI that allows ships to complete missions and fight the player. The original AI is easy to exploit so we'll see if we can meet, then beat, the original design without making it too difficult. |
Results | Mission performance is tallied after a mission. The only meaningful statistics are number of kills and mission success or failure. We'll track these in our prototype |
Debriefing | The debriefing sequence is exactly the same as a briefing sequence. We should generalize the design to be flexible for both briefing and debriefing. |