THE FIRST CELL an MS-DOS game programmed in x86 assembly by Kugee http://razorback95.com/projects/1stcell This game and its source code are released under a CC0 public domain license. ** NOTE ** If you're confused about which executable to run, just run 1STCELL.EXE. If it doesn't work right, read section 7 for more details. TABLE OF CONTENTS ----------------- 1. Getting Started 2. Synopsis 3. How to Play 4. The Bad Guys 5. Strategies 6. Known Bugs 7. Notes on the Different Executables 8. Version Notes 9. Special Thanks 1. Getting Started ------------------ This game requires a working DOS environment of some sort. Most should work, but newer computers running DOS on bare metal or certain versions of Windows may not be able to run this program. In such cases, you can use the DOSBox emulator if you need a quick and dirty solution to getting this game up and running. The First Cell is known to work correctly in MS-DOS 3.30 to 6.22, Windows 9x, and most 32-bit versions of Windows NT through NTVDM. Its dependence on the DOS API is extremely minimal, so it may be able to run on a much wider variety of DOS versions as well, maybe even PC-DOS 1.0. No installation is required. Once you have the program, you just run it from the command line or a PIF/shortcut and start playing. This game does not create any save files for high scores. Once you reach the title screen, you can start a new game by pressing one of the arrow or WASD keys. 2. Synopsis ----------- You are a simulation of a single cell residing in a primitive mainframe, one of many which have failed before you, all derived from a powerful multicellular organism elected for the cell template. Being a cell, your life is very simple - win against an endless onslaught of opposing cells. Even in such a seemingly benign virtual microscopic environment, you stand out with unusual abilities like producing piercing cell killers, great potential for reflexing out of otherwise futile situations, and generally a greater will that persists through you even as the odds end up becoming insurmountable. The cell will inevitably die, but if it fulfills the required outstanding expectations, one day an unstoppable warrior will emerge out of the refined template based on the simulation results, or so some in charge of the project believe. Do you have what it takes to become alive? 3. How to Play -------------- You control the cell, represented by a hollow smiley face (ASCII code 1 as represented by IBM code page 437). The cell is moved with the arrow keys (up, right, down, left). If you are using an 83-key keyboard (common with many XT-based systems), you can use 5 on the numeric keypad as an alternative down arrow key, which should partially replicate the comfort of using the arrow keys on a 101 to 105-key keyboard. The cell can shoot in eight directions using the WASD keys (assuming a US QWERTY keyboard layout). Up to six bullets can be present on the screen at once. For best results, it is recommended that you use a keyboard with good key rollover. Many Unicomp keyboards (modern Model M) should have sufficient key rollover to ensure fluid control, while other old ones have a chance of causing keys to become stuck if too many are pressed at once. If a key gets stuck, you may be able to tell by where the cell is trying to move or shoot. If you choose to use such an old keyboard with rollover limitations, pressing and releasing all the keys in a quick "circular" motion as well as being mindful of how many keys are pressed at once can help. A slow CPU such as an 8088 may also be cause for stuck keys. While the keyboard interrupt handler is short and to the point, it may have trouble keeping up. The objective of the game is to kill every enemy in each wave as quickly as possible using the aforementioned shooting mechanism. If you hang around in one wave too long, the top bar will turn yellow or orange to warn you, then red to indicate you have entered timeout mode, where more garbage enemies colored intense red will be spawned on a fast interval. A finite weapon you have at your disposal is the bomb, which creates a powerful wave of smoke around you that expands up to a certain diameter. This is not only useful for clearing out multiple enemies surrounding you when you're in a pinch, but may also destroy enemy projectiles. An enemy hit by bomb smoke has eight units of damage applied to it. When you start a new game, you are given three lives and three bombs to start off with. For every 10,000 points you score, you are awarded a bonus life and bomb. However, once you reach 1,000,000 points, no more bonuses will be awarded, so effectively you can only score 99 bonuses. This may seem like a lot, but believe me, you'll need them. There are 25 waves in The First Cell, with the last one being endless. The last wave also foregoes the timeout mode and instead makes ALL enemies slightly harder. The HUD bar turns green to indicate this special mode. To compensate for the added difficulty, all enemies on the last wave also award double points. When you lose all your lives, the game ends, predictably. There are four possible results for the cell after the simulation is completed: DEFECTIVE: no conditions were met. POTENTIAL: scored 500,000 points, but did not reach Wave 25. OPTIMAL: reached Wave 25. This is a victorious result. PERFECT: reached Wave 25 AND scored 1.5 million or more. To pause the game, press P. To mute or unmute the PC speaker audio, press M. When you're done, you can press Escape to exit the program. 4. The Bad Guys --------------- STUPID: depicted by an asterisk (*), this enemy just wanders aimlessly. It can be kind of tough to hit, though. CHASE: represented by a hash symbol (#), this enemy constantly chases the cell. DASH: represented by another sort of star symbol, wanders aimlessly until the cell crosses one of its axes, to which it then quickly dives towards the cell. Hopefully it ends up hitting the wall instead. GUNNER: a solid happy face that also wanders about but shoots bullets towards the player. WORM: a serpentine enemy that chases the player in four directions. Watch out for its long body! There are many other variants of these enemies with increased difficulty, with one new variant being introduced each wave. Pay attention to how they function in order to gain the upper hand in combat! 5. Strategies ------------- Shooting towards the upper left at the start of a wave can help A LOT in destroying plenty of the first few enemies. You will have to move away pretty quickly, though. In waves containing dashers, it's a good idea to stay off of the walls so as to avoid being an easy target for them. Dashers tend to get stuck on walls very often. You can exploit this when you find a good opportunity by moving to a reasonable spot and then immediately firing a barrage at an entire lineup of dashers. Since enemies spawn at certain positions away from the player, you may also be able to get them stuck into spawning in the same spot for a while and constantly shoot them down, clearing out the queue even faster. But, again, this can only be done for so long before other threats draw near! Save your bombs! Even if you have trouble pushing through a wave with only the gun, you can farm points with your leftover lives to eventually bomb through it. The more bombs you save for the last wave, the better your chances are of attaining a perfect cell result. Tapping backward little by little is helpful when you're shooting at a long line of chasers, but do watch your back. Playing on a slow CPU like a 4.77 MHz 8088 may actually be advantageous for you due to the slowdown which may occur, especially when you detonate a bomb. While lag is generally frowned upon in most games, it is considered beneficial in STGs in such cases where not having it can make the game more difficult. Since the lag virtually disappears when this game is run on a 486 and probably a 386, the same executable really becomes interesting since it effectively produces two different variations of a game. Sometimes, it is possible to pass through projectiles with split-second timing. Some will call it a programming oversight, but I call it a necessary survival factor! Keeping certain types of enemies alive may be critical to survival. Only 12 enemies can occupy the screen at once, so keeping more non-gunners on the screen means less projectiles cluttering it, and more time to focus on shooting and saving your bombs. 6. Known Bugs ------------- As of version 1.0, the game may crash in a DOS window running under Windows for Workgroups 3.11, as it will intercept what it perceives to be an illegal operation. The cause of this is not clear; this bug does not occur on Windows 95. A few video cards may have a problem where the player character irregularly disappears while moving. The AGP version of the ATI Rage IIC is known to do this, although NTVDM seems to negate that bug. Killing a red timeout enemy may be causing the enemy remainder count to decrease in certain circumstances. While this is not supposed to happen, it MAY be desirable. 7. Notes on the Different Executables ------------------------------------- Starting with version 1.0a, The First Cell comes in three different executables for different video modes: 1STCELL.EXE: The original. Uses 40x25 color text mode. 1STCELL8.EXE: Uses 80x25 color text mode. If running 1STCELL.EXE on, say, a more recent graphics chipset from the 2010s or later, produces garbled output, try this instead. 1STCELLM.EXE: Uses 80x25 monochrome text mode, designed with the IBM MDA in mind. Should also work on EGA and VGA adapters, albeit without color. In most cases, you should just run 1STCELL.EXE unless it exhibits problems with your particular hardware. 40x25 color is supported by pretty much any color-capable graphics adapter from the 1980's to the 2000's. Even systems touting monochrome displays, particularly portables, are most likely compatible with color graphics modes. All three executables share most of the same code. Sure, I could technically stick to distributing one executable and have the video mode determined at runtime, but knowing how slow an 8088 can be, I figured the extra overhead involved in evaluating such conditions would be wasteful. Better to have such conditions hardcoded. 8. Version Notes ---------------- 1.0a June 20th, 2022: - Interrupt remapping done through DOS API now. This created no benefits. - Added a function to mute/unmute PC speaker sounds. - Introduced more builds specifically for running the game in MDA or 80 column mode, as some very modern graphics chipsets (say from the mid 2010s and onward) do not support the 40x25 video mode. - In turn, some of the code was restructured for easier modification across all three builds. - Reduced snow output slightly, at least it seems that way (on applicable cards). It might be more prevalent in 80x25 color mode. 1.0 May 27th, 2022: Initial release. 9. Special Thanks ----------------- Mint (Limine programmer), for her recommendation of the Bochs internal debugger. That magic breakpoint saved my neck and allowed me to release the game on schedule! THEBaratusII (http://thebaratusii.razorback95.com), for broadcasting a near-final version of this game on one of his weekly streams. Tom Swan, author of Mastering Turbo Assembler (ISBN-13 978-0672305269), an excellent book for getting started with learning x86 assembly programming with MS-DOS. Tomasz Grysztar, creator of flat assembler, an awesome multiplatform assembler that was used to create the executable for The First Cell. And all the selected beta testers, both in and out of Razorback!