PROGRAM: Invaded
VERSION: 1.0
AUTHOR: James Vernon - TCPA
DESCRIPTION: Side scrolling shoot-'em-up
MACHINES: TI-83, TI-83+
PLATFORMS: Ion, MirageOS
LANGUAGE: Z80 Assembly
RELEASED: June 2001
SIZE: TI-83 Ion Size:       6808 bytes
TI-83+ Ion Size:      6792 bytes
TI-83+ MirageOS Size: 6793 bytes



**************
** CONTENTS **
**************
The Story So Far...
Installation
Main Menu
The Object of the Game
Gameplay
Control Summary
Add-Ons

The Steps of Creating a Levelset
Creating a Tileset
The Levelset Editor
Editing Levels
Changing to a Different Tileset
Editing Enemies
Placing Enemies
Editing End-of-Level Bosses
Saving and Quitting
Final Notes on Levelsets

Troubleshooting
Disclaimer
Source Code
Version History
Future Versions
Thanks to...
Beta Testers
Closing Notes




#########################
## The Story So Far... ##
#########################
It is the year 2099. On the verge of the new century, the planet Earth is preparing for massive celebrations and festivities. Then, out of nowhere, come these damned alien invaders to take the place over (as they usually do in these stories). Huge waves come crashing down to the planet whilst the huge motherships orbit the planet.

Being a proud defender of your planet, you take off in your state-of-the-art® fighter to stop the invasion.


##################
## Installation ##
##################
TI-83 Ion
Ensure that Ion is installed on your calculator. Ion can be downloaded from http://joewing.calc.org. The latest version of Ion at time of release was v1.6. Copy invaded.83p to your calculator. You need 1888 bytes of free memory to play.

TI-83+ Ion
Ensure that Ion is installed on your calculator. Ion can be downloaded from http://joewing.calc.org. The latest version of Ion at time of release was v1.6. Copy invaded.8xp to your calculator. You need 1878 bytes of free memory to play.

TI-83+ MirageOS
Ensure that MirageOS is installed on your calculator. MirageOS can be downloaded from http://www.detacheds.com. The latest version of MirageOS at time of release was v1.1. Copy invadedm.8xp to your calculator. You need 1878 bytes of free memory to play.

If you have just downloaded Invaded and you are playing it for the first time, you will probably only have the Levelsets that come with Invaded. The main one is called "JIM01". To use this level, copy the file ziljim01.8?p (where ? is the calculator you're using) to your calculator and also the file zittcpa1.8?p. This second file is the Tileset file, which is sort of a library file that can be accessed by different Levelsets. This is explained in greater detail later. The documentation for the Levelset "JIM01" is located in the file "JIM01.doc". Read this for level & enemy explanations.

You can also play the 2 demonstration Levelsets, "DEMO1" & "DEMO2", by sending their files to your calculator, along with their Tilesets (they don't use "TCPA1").

If you have more Levelsets for Invaded, you can copy them to your calculator, making sure you also have the required Tilesets on your calculator as well.

Note for all TI-83+ Users
All Levelset files that you wish to play (and their required Tileset) must be located in RAM. If they aren't, they won't show up for selection in the Main Menu. However, you can temporarily store Levelsets/Tilesets that you aren't using in your Archive memory, they just won't be accessible from the game.


###############
## Main Menu ##
###############
When you run the program, the Main Menu will come up, in which you have 4 choices:

START GAME Start playing the selected Levelset.
LEVELSET Change the Levelset you want to play.
GAME SPEED Change the speed of the game. As more enemies appear on the screen, the game will slow down somewhat. If you change the speed to SLOW, the speed change will be less noticible, however, if you change the speed to FAST the speed will change noticibly when only 1 or 2 enemies are on the screen.
QUIT Return to Ion/MirageOS.


############################
## The Object of the Game ##
############################
After selecting START GAME from the Main Menu, the game will begin. You take control of your state-of-the-art® fighter as you attempt to save the planet from the alien invaders.

The object of the game is to battle your way through all the levels in the Levelset. At the end of each level, you will encounter an end-of-level boss. Defeat it and the level is complete! Complete all the levels in the Levelset and you have saved the planet :D

The Levelset included in this zip file (JIM01) has 5 levels for you to battle your way through. The necessary tools required to make your own Levelsets are included in this zip file also ;)


##############
## Gameplay ##
##############
Once in the game, you can use the arrow keys to control your state-of-the-art® fighter. You can move it in 8 directions. To fire at your enemies, use the [2nd] key. Press it quickly for rapid fire or hold it down to power up your beam. When you let it go you will get a more powerful blast, depending on how much your beam is powered up.

When you first begin, your ship is rather impervious to attack. Upon making contact with any enemies or enemy fire your ship will disintegrate and you lose a life. You are not, however, without any defence. Some enemies might drop bonus items for you to pick up, some of which will dispatch the Orb, your helpful friend in the battle against the enemy. The Orb can be used in 2 ways: you can leave it to move around by itself or you can attach it to your ship, either on the front or the back. When attached to your ship it can be used as a kind of shield to block enemy fire. Note that it can only block the weaker enemy fire. When moving by itself, it will fire whenever you do, providing twice the firepower.

Upon picking more bonus weaponry the Orb will become more powerful. If attached to your ship, you will gain use of one of the 3 special weapons. They are:

Power Gun This gun fires a spiral type laser either forwards or backwards, depending on which end of your ship the Orb is attached to. This is the strongest weapon you have (apart from a fully powered beam shot).
2-way Gun This gun fires off 2 lasers diagonally forwards or backwards although isn't as powerful as the Power Gun.
Vertical Gun This gun fires 2 shots vertically out of the Orb. It is slightly more powerful than the 2-way Gun but not quite as powerful as the Power Gun.

However, when the Orb isn't attached to your ship and you get an additional weapons bonus, it will shoot 4 normal bullets diagonally forwards (two going up and two going down). These 4 bullets have the same strength as one of your normal shots.

To attach the Orb to your ship, make sure you are exactly horizontal with it (you can do this by sitting still for a couple of seconds and it will adjust automatically) then move up to it and it should stick to your ship, either on the front or the back. Once attached to your ship, it can also be ejected, to do this press the [ALPHA] key.

Other bonuses available are an extra life, although these are hard to come by. Also there is a bonus points bonus, which will give you 1000 bonus points.


#####################
## Control Summary ##
#####################
MAIN MENU
[Up] & [Down] Change selection
[2nd] Activate selection

IN-GAME
Arrow Keys Navigate ship
[2nd] Hold down to power up gun, press quickly for rapid fire
[ALPHA] Shoot off Orb
[MODE] Pause
[MATH] Teacher key
[CLEAR] Quit to Main Menu

PAUSED
[ENTER] Continue playing


#############
## Add-Ons ##
#############
Included in this zip file are 3 Levelsets, although there is only 1 complete Levelset. More Levelsets are available on my web site - click here to take a look.


######################################
## The Steps of Creating a Levelset ##
######################################
Creating your own entire Levelset takes a lot of time and patience and requires a lot of work. Here are the basic steps of creating your own Levelset:

1. Decide how many levels you want (between 1-5) and what the basic look of each level will be.
2. Design the Tileset for your Levelset, or if you don't want to design your own Tileset, use someone elses (remember to give them credit where due).
3. Design the enemies you want to have in your Levelset (between 1-20 enemies). Look through the AI scripts (listed below) and work out what you want each enemy to do.
4. Design the end-of-level boss for each level, deciding what you want each one to look like and do.
5. Design the actual levels!
6. Place the enemies around the levels.
7. When the Levelset is finished, write a brief documentation file that tells things like how many levels there are, what each enemy is, etc., zip it up, and send it to me and I'll put it on my web site! I suggest putting the following files in the zip you distribute:
- The .83p & .8xp files.
- A documentation file.
- The .bin file for the Tileset you used so that others can use your Tileset but not edit it.


########################
## Creating a Tileset ##
########################
Creating your own Tileset is simple but time consuming, which is one reason I've made it so that you can use previously designed Tilesets to save time ;)

Included in the zip file is the source code to the Tileset "DEMO1". It is written in an .asm file just like an Assembly Code program. The first 4 parts are as follows:

.db "I0T_DEMO1"

This is the detection string. The first bit, "I0T_" means that the file is an Invaded Tileset with a compatibility number of 0. This is so that if the Tileset format changes in the future, the first part will be changed to "I1T_" to let the game know that this Tileset is in the old format. If that bit just confused you, ignore it, just remember to put the "I0T_" at the start. The last bit, "DEMO1", is the name of the Tileset, which should be the same as the filename (eg. "demo1.asm"). Make sure that you always put the detection string in capital letters, otherwise it might not be detected properly on the calculator!

.db 6

This is the total number of tiles in the Tileset.

.db 4

Every tile from this number onwards is a solid tile, meaning that the player can't move through this tile.

.db 5

Every tile from this number onwards will kill the player on contact, meaning that if the player runs into one of these tiles, he/she will crash and die.

After this are the actual tiles themselves. They are stored just as any other 8x8 black & white sprite is stored for an Assembly Program. It's useful to have a smallish comment or label before each tile to remind you what that tile is and perhaps what number tile it is and any other useful info you'd like to include.

Remember at the end of the file to have ".end" followed by a blank line. Once you have done all this, at a DOS prompt, make sure you are in the correct directory, then type the following:

tileset {tileset name}

where {tileset name} is the name of the Tileset, eg. DEMO1. Remember that the name of your Tileset must be exactly 5 characters long! Your Tileset will then be compiled into a .bin file that can be used by the Levelset Editor. The file demo1.asm contains the source to the Tileset "DEMO1".


#########################
## The Levelset Editor ##
#########################
To start up the Levelset Editor, go to a DOS prompt, go to the directory where you have Invaded and type the following:

editor {levelset name}

where {levelset name} is the name of the Levelset, eg. DEMO1. As with Tileset names, the name must be exactly 5 characters long. If the Levelset doesn't already exist, a new one is created, otherwise the existing one is opened. If you create a new Levelset, the default Tileset to be used is "TCPA1", but you can change this whenever you wish (see below).

You will be presented with the Main Menu with a number of options. At the prompt, press [6] for a description of what each option does.


####################
## Editing Levels ##
####################
At the Main Menu of the Levelset Editor, press [1] to bring up the Level Editor. To get back from this screen to the Main Menu press [ESC]. This screen is where most of the work is done in designing a Levelset. You get to add/remove levels, change the length of levels, place tiles and set checkpoints.

Most of the stuff you do on this screen is relatively simple. Press [F1] to get a summary of all the keys to use. Use the arrow keys to move the cursor around in the level, and use the [<] & [>] to scroll left & right in the level. Above the arrow keys are the keys [HOME], [END], [DELETE] & [PGDOWN]. Use these 4 keys like arrow keys to move the tile selection cursor around, then press [SPACEBAR] to place the selected tile at the selected block position in the level. You'll notice in the Tileset display at the bottom that the first solid tile and also the first hurty tile will have black boxes around them.

To resize a level, use the [+] and [-] keys. The largest length a level can be is 200 tiles, whilst the smallest it can be is 20 tiles. One nice feature is that you can implement up to 3 checkpoints to your levels. Set your 3 checkpoints by using the [1]-[3] keys. The checkpoint will be set to the leftmost block showing on your viewing screen. IMPORTANT: If you want your checkpoints to work properly, always ensure that they are in ascending order! If they aren't, they won't work in the desired order!

Each Levelset can have up to 5 levels. To add another level to your Levelset, use the [F6] key. To decrease the number of levels, use the [F5] key. The last level will be removed. Don't worry if you accidentally delete a level you want to keep. As long as you press the [F6] key straight away you won't lose the level data. Note that you can't remove a level that you are currently viewing. To move through your levels, use the [F7] & [F8] keys.

Often you will decide that you want to add or remove parts of a level that are located in the middle of the level somewhere. This is made easy with the Insert/Remove Column keys. Pressing [F10] will insert a blank column at the current cursor position, whilst pressing [F9] will remove the column the cursor is sitting on. Be careful when using the [F9] key, if you accidentally remove a column it is lost for good!

There are three more things that you can do on this screen. Pressing [F2] will bring up the Find & Replace screen. Here you can choose a tile number and replace any occurances of this tile with another tile. This affects every level in the Levelset, as do the following keys.

If at some time you add an extra tile to your Tileset but it's located somewhere in the middle of the Tileset, you will find after rebuilding the Tileset that your levels could look slightly messed up. Press the [F3] key, enter the number of the tile you added to the Tileset, and the Levelset Editor will update all the levels accordingly. The same applies if you remove a tile from your Tileset. Press the [F4] key and enter the number of the tile you removed and the Editor will fix up your levels :)

That pretty much covers all that you can do in the Level Editing screen, so now let's move on to the other screens.


#####################################
## Changing to a Different Tileset ##
#####################################
At the Main Menu, press [2] to change the Tileset you want to use. At the prompt, type in the name of the Tileset you wish to use, eg. "DEMO1". Don't worry if you don't type it in capitals, the Levelset Editor will automatically capitalise the name.


#####################
## Editing Enemies ##
#####################
At the Main Menu, press [3] to bring up the Enemy Editor. On this screen you create the enemies you want for your Levelset. You specify what the enemy looks like, how it acts, how strong it is, etc. Again, press [F1] to view a summary of the keys for this screen.

Firstly, let's talk about drawing your enemies. In the middle of the screen you'll see two boxes, one labelled "Sprite" and the other labelled "Mask". In one of these boxes will be the cursor. Use the [ENTER] key to toggle between the two boxes. Move your cursor to the Sprite box, then draw something by using the arrow keys and [SPACEBAR] to the blocks. As you do so, you'll notice in the first Preview box what your enemy looks like. The second Preview box, however, remains checkered. This second box shows what the enemy looks like when drawn over a background. As you can see, at the moment none of your enemy is showing. This is what the "Mask" box is for.

Press [ENTER] to put your cursor in the "Mask" box. Now draw in this. You'll see in the second Preview box that bits of your enemy will appear. Generally, the "Mask" box determines what parts of the "Sprite" box are drawn and what parts of the background will show through. If a pixel is black in the "Mask" box, then the coinciding pixel in the "Sprite" box is drawn, otherwise the background stays the same. If you don't understand, just experiment and you'll begin to see how it works. The purpose is just to determine what bits of background you want to let through.

As in the Level Editor, you can add/remove and move through enemies the same as you did with levels, using the [F5]-[F8] keys. Again, if you accidentally remove an enemy, you can get it back if you do so straight away.

As well as determining what your enemy will look like, there are a few other attributes to set up. Firstly, you can set the speed of your enemy, ranging from "Slow" to "Fast". An enemy set to "Slow" will update every 4th frame during gameplay, when set to "Normal" it will update every 2nd frame and when set to "Fast" it will update every frame. Press [F2] to change the speed of an enemy.

Another important attribute of your enemy it its strength. Its strength obviously determines how many hits it requires to be killed but it also determines how many points the player gets for killing it. Use the [F3] & [F4] keys to decrease/increase the strength of an enemy.

Now, you don't want your enemy to just sit on the screen doing nothing. This is what the AI scripts are for. Each enemy can have 2 AI scripts, which enables it to perform 2 tasks. Use the [F9] & [F10] keys to specify the AI scripts for an enemy. More information about each AI script can be found in the file "aiscripts.doc". The best way to master the AI scripts is to experiment with them. If you have any suggestions for more AI scripts, contact me and I'll consider your ideas.

The final attribute is what Bonus Item your enemy drops when its killed. Information on what each Bonus Item does can be found in the file "pickups.txt". Press [CTRL]+G to toggle the Bonus Items attribute.

Finally, some keys to make editing a little easier in some cases. You can flip the sprite & mask of your enemy both vertically & horizontally by using [CTRL]+A & [CTRL]+S. Also, you can copy all the attributes of the current enemy to a clipboard by pressing [CTRL]+D and you can paste by pressing [CTRL]+F. Be careful with the paste command because it can't be reversed!

That's it for enemy editing. It is fairly simple once you get the hang of it.


#####################
## Placing Enemies ##
#####################
Press [4] on the Main Menu to get the Enemy Placement Screen. Press [F1] to get a key summary. On this screen you place enemies around the levels you have created. Firstly, an important thing to remember is that if you put some enemies in your levels then make changes to the level designs, the placement of your enemies will remain the same until you manually move them.

In the middle of the screen you will see the level. As in the Level Editor, use the [<] & [>] keys to scroll left and right through the level. Use [F9] & [F10] to change levels.

This screen is perhaps the hardest to understand in terms of exactly how it works. During gameplay, enemies are initialised by the scrolling of the screen. I can't really explain this properly yet, so just bear with me. Seeings as you can have up to 20 enemies in a Levelset, you use the number keys and the row below them to place each type of enemy. eg. if I press [4], it'll place an enemy of type 4, if I press [0], it'll place an enemy of type 10, if I press [y] it'll place an enemy of type 16.

When you first place an enemy, it will appear on the right hand side of the screen. However, if you scroll right one block the enemy will disappear. Scroll back again and it reappears. This shows you when the enemy will be initialised - when the screen scrolls to this point during gameplay, the enemy will appear. It can enter the screen from either the top, bottom, left or right. Default is right, but use the [F5]-[F8] keys to change which end of the screen the enemy enters from.

You'll notice when you place an enemy that it's type number appears at the bottom under where it says "Type". Only up to 5 enemies can be initialised on each screen, and down the bottom every enemy that is initialised on the current screen is listed. Use the [Up] & [Down] keys to move through them. Only the selected enemy will appear on screen.

As well as determining what end of the screen an enemy appears from, you can also use the [HOME], [END], etc. keys to determine the exact spot on that side of the screen it appear. Again, the best way to understand this is to experiment.

To remove an enemy, select it down the bottom of the screen and press the [BACKSPACE] key. It will be removed from the level for you. You can have up to 100 enemies on each level. Remember that during the game only 8 enemies can be on the screen at once, and the more enemies that are on the screen at the once the slower the game will run.

That's is for placing enemies. It's probably the hardest part of the making your own Levelsets to understand but with practice it isn't too hard to master.


#################################
## Editing End-of-Level Bosses ##
#################################
Press [5] in the Main Menu to get to the End-of-Level Boss Editor. From here press [F1] for a key summary. On this screen you set up your End-of-Level Bosses for each level in the Levelset. It is similar to the Enemy Editor but with a few extra little bits & pieces.

Changing the way the Boss looks is the same as for enemies except that Bosses can be 16x16 in size. This means up to 4 sprites. Access each sprite by using the [1]-[4] keys. Refer to the small table to the left of the "Sprite" box to see which number brings up which sprite.

Use the [F9] & [F10] keys to move through the Bosses. You will have as many Bosses as you do levels in the Levelset. They use the same AI scripts as enemies, except on this screen use the [F7] & [F8] keys to specify the AI scripts. The strength of the Boss is specified exactly the same way as it is for enemies.

You have the option whether or not you want the screen to be cleared when the player gets up to the Boss of a level. Use the [F2] key to toggle this option. There are advantages & disadvantages to clearing the screen for this battle in terms of difficulty.

As well as running 2 AI scripts, your Boss can be set to shoot out a certain type of enemy at regular intervals. Use the [TAB] key to toggle which enemy the Boss shoots. This is useful for making your Boss more difficult and interesting.

I previously mentioned that your Boss can be 16x16 pixels in size. It can also be 8x8, 8x16 or 16x8. 16x8 means that the Boss is 16 pixels in height and 8 pixels in width. Use the [F5] & [F6] keys to toggle the size. This size setting only determines collision detection between the Boss and the players bullets, it doesn't concern how many sprites are drawn for the Boss. When the Boss is drawn during gameplay, all 4 sprites are drawn always.

Finally, you need to specify where on the screen the Boss shows up when the player gets to the end of the level and the screen stops scrolling. Use [CTRL]+A to decrease the X Coord, [CTRL]+S to increase the X Coord, [CTRL]+D to decrease the Y Coord and [CTRL]+F to increase the Y Coord.

An important thing to remember with the End-of-Level Boss is try not to use AI scripts that will make the Boss go off the screen totally. This could cause troubles in the game. You'll probably notice that most of my End-of-Level Bosses don't move but they shoot bullets & enemies at the player from the spot that's hard to the player to get to it at. I feel this is the safest way to go but again, experimentation is the best way to find out.

And that's all that's required when designing End-of-Level Bosses. They are are quite simple to design.


#########################
## Saving and Quitting ##
#########################
In the Main Menu, press the [7] key to save your entire Levelset. Pressing [8] will prepare to quit. On quitting the Editor will ask if you wish to save. This is so that if you've made a massive mistake or something you can quit without saving the mistake then load the saved copy :)


##############################
## Final Notes on Levelsets ##
##############################
Included in the zip file are 2 demo Levelsets along with the .bin files you need to edit them. This is so that you can look at them and see how they go together. Their respective Tilesets are also included along with source code for you to learn from. If you have any questions on creating Tilesets/Levelsets, please don't hesitate to ask me.

Remember that once you complete a Levelset, if you wish to publicly release it you can send it to me and I'll put it on my website. There's a page there that contains all Levelsets/Tilesets that get emailed to me. If you have a web site that you want me to put a link to, let me know of that as well :)


#####################
## Troubleshooting ##
#####################
Q When I try to run Invaded, nothing happens.
A Firstly, ensure you have enough free memory to play. Check the Installation section to see how much free memory you need. If you still can't run it, ensure you have at least 1 Levelset on your calculator along with the required Tileset. If you own a TI-83+, any Levelsets/Tilesets you wish to use must be located in RAM, otherwise they won't be available in the Main Menu.


################
## Disclaimer ##
################
Because this game is programmed in ASM there is always the possibility that something could go wrong, causing your calculator to crash, although it shouldn't. However, I take no responsibility for any harm that this program causes to your calculator. It has been extensively tested on both the TI-83 and TI-83+ calculators running Ion v1.6 & MirageOS v1.1.


#################
## Source Code ##
#################
Included in the zip file are all the source code files for the game. Also included is the source to the Levelset Editor (written in C). The code to the Levelset Editor was programmed for Borland C++ v4.02 and uses the Borland Graphics Interface.

You are free to use any of the code included in this zip file that you want as long as you give credit where it's due. However, you aren't allowed to release a modified version of this source code or the compiled version of it without my permission.

If you have any ideas for the game, please contact me by either email or ICQ (see below).


#####################
## Version History ##
#####################
v1.0 <> June 2001
 TI-83 Size:  **** bytes
 TI-83+ Size: **** bytes

  - First public release :)


#####################
## Future Versions ##
#####################
I don't have any major plans for this game in the future as of yet, although I do plan to perhaps add some more AI scripts and to design more Levelsets/Tilesets. You won't need to worry about any Levelsets/Tilesets you make now not being compatible in the future - it's unlikely that the format will change although if it does I will write a program that converts older files to the new format.

Of course, optimisation is another thing I'd like to work on further because the game slows down a lot at the moment when enemies come on to the screen so we'll see how I go with that.

I will definitely be working on improving the look of the Levelset Editor, because as you might have noticed, it only works in CGA graphics mode, hence why there are only 4 colors on the screen at once. I've been writing my own graphics routines the last month or so and I will soon implement them in this editor, which will allow me to use a 256 color graphics mode ;)


##################
## Thanks to... ##
##################
- TCPA for their ideas.
- David Phillips for the Zelda Editor from which I used the layout idea (having all the tiles displayed at the bottom).
- Jeremy Goetsch for Assembly Studio 8x.
- Patrick Davidson for his collision detection in Phoenix and for giving me some help with the enemy shooting routine.
- Jimmy Mårdell and Florent Dhordain for ASCR83 and the Huffman Compression tools.
- Solignac Julien for the APD stuff out of his Ion port of Sqrxz.
- Hannes 'Movax' Edfeldt & Scott Dial for Devpac83 and Devpac8x.
- Joe Wingbermuehle for Ion.
- Dan Englender & Jason Kovacs of Detached Solutions for MirageOS.
- IRem for the original R-Type, the game that Invaded is based on.
- The people that wrote WinUAE, a great Amiga Emulator that I used to play R-Type (saved me spending the time to set up the Amiga again!).


##################
## Beta Testers ##
##################
Many thanks to the following people that were my beta testers for this game. They did a great job in finding bugs and other assorted little oddities for me to fix up before releasing the game. These people are (in alphabetical order):

- Matt B., ICQ#: 85052788
- Jordan Butler, URL, AIM: butlerjor, bigbrother365
- Jason Foster
- Shen Han Lee
- Nathan Johnson
- Andy Poes
- Joel Porgand
- Zac Targac
- Matt Wilkinson, AIM: gameboysut


###################
## Closing Notes ##
###################
You may put Invaded on your website as long as you have a link to the TCPA page ;)

Invaded is based on the old game R-Type which was made on a few platforms (Sega, Amiga, etc.). The latest version of R-Type is R-Type Delta, the 3rd game, which is for the Playstation. If you have a Playstation and you haven't got R-Type Delta, I suggest you get it. It's the best shoot-'em-up I've ever seen :D

For other great TI calculator games, check out the TCPA page.



Invaded
Version 1.0
Copyright (c)2000-2001 TI-Calculator Programming Alliance
Written and Programmed by James Vernon
ICQ#: 71589304
http://tcpa.calc.org/members/james/