After going over the code of the old Aliens game, I started reorganizing it a bit.
For this, I set up an emulator to “Print to a text file”, and then listed the program to the “printer”.
After some Copy-Pasting (and line number changing), I moved the lines that create the graphics to the end of the code. This way, the main loop ended up between the 10th and 30th line, instead of around the 80th to 100th. This already makes it faster because of the way the infamous GOTO command works.
While doing this, I noticed that I was initializing some variables that are never used, and that there was provision for up to 50 aliens in one level!
I don’t think that fixing that gave me any extra speed, but at least there is no waste of memory as before.
Then, for the hardest part.
The lines in main loop had to be rearranged to have all the graphics drawn in the graphics page that is not being displayed. Then, copy that page to the one in the screen, do the math, delete the sprites that are going to move in the first page, and loop back to drawing the sprites.
I think I kind of sorted that out in a decent way, but there might still be room for improvement.
Then came code compacting.
Again, in Notepad++, I started looking at lines that could be crammed into a single one.
430 COLOR 1
440 PMODE 4,1
460 PMODE 4,5:SCREEN 1,0
420 PR=1:COLOR1:PMODE 4,1:LINE(Q*8,Z*8)-(Q*8+8,Z*8+8),PSET,BF:PMODE 4,5:SCREEN 1,0:PLAY”O4;L8;C;L16O3BL32AL8GL16FL8ED”:S=S+25:RETURN
The risk here is that you may delete a line that is referenced in a GOTO or GOSUB, That is why I always keep a backup of “uncompacted” listing, in case I need to figure out where something used to be.
After all looks good, I take the file into a disk image using either IMGTOOL from MAME or with Toolsheed
With this, the program went from 132 lines to 100.
At this point, code was probably as neat and fast as I would get it without a major rewrite, and that was not the goal.
The flicker is, of course, gone. But sometimes, when more than 2 aliens move at the same time, you can tell that it is slowing down. Perhaps I should change it to have only one alien move in each cycle?
I’ll move on, make some minor changes to the look of the game, and then come back to that thought.
While I was at work, I managed to find some time to go over the code of the first game in my list, titled “Aliens II”.
By looking at the game, I found a few things that seemed easy to improve/fix.
There is a lot of flickering, and using page flipping should fix that.
The maze is not well designed, with lots of dead ends that tend to block the alien’s movement, and can force you to take very long paths to get to a particular place.
The time available to complete each level is just not enough in most cases, and finally, the text messages is horribly placed on the screen.
In the code, I found that the DATA for the graphics is on top of the code, instead of in a routine at the end.
Then, I realized that implementing page flipping to minimize flicker is not going to be that easy.
The game keeps the maze in one of the pages, copies it to the second, and draws the “sprites” there. In the next cycle, instead of erasing the sprites, the clean background is copied again from one page to the other.
This means that, in order to use the page flipping technique to eliminate the flicker, I will have to add the commands to delete the sprites from the old positions. This will make the game slower…
Moving on, I found this:
910 IF PEEK(344)255 THEN IF X<31 THENIF PPOINT(X*8+10,Y*8+2)=5 THEN X=X+1:GOSUB 1040:
And the line 1040 is just….
OK, then, first task, speed up the game.
Rearrange the code to bring the main loop as close to the top as possible, declare all variables at the game start, giving priority to the most used ones, find some numbers that are used a lot and change them to variables.
Then, the game’s look.
I decided not to change the graphics. They are quite …. bad, let’s face it. But I guess is part of the game’s personality. The only real change will be to get rid of the white color and change it for green. Fits better with the game idea. And of course, the text must be aligned better, not just dropped anywhere in the screen!
And finally, game play.
The maze needs a redesign. Not a major one, but it should be easier to go from one place to the other, for both, the player and the aliens.
And like I said, the time available is not enough.
Here is a video of the original gameplay.
And the sound! What was I thinking? I believe that i just took a part of the music from some demos in the CoCo’s manual.
Should that stay or should that go?
Well, I guess we’ll see… tomorrow?
And for the last post of the weekend, my “Second Challenge”.
write a game that will run in any TRS-80 Color Computer, using the low-res graphics mode (64×32) and no more than 16 KB RAM.
A great way to save time, is to “clone” an existing game. That way, I don’t have to come up with the game mechanics, and I will already have a fair idea on what the graphics should look like.
And it turns out that there is one game, quite simple, that I used to play a lot many years ago, and that as far as I know, was never available in any computer.
A small handheld LCD game called “Hippo Teeth”
The Hippo has only 3 teeth, and a nasty worm is trying to eat them!
Your task, as a veterinarian dentist, is to kill the worms with your gas spray. Nut that is not so easy. The worm moves around a lot, and the Hippo’s tongue gets in the way….
As the gameplay is already set, I decided to test if I could do some decent graphics in the 64×32 mode. One of the difficulties, is that each 2×2 block can only have 1 color and black, a limitation similar to the one the ZX Spectrum has in the high res-mode.
Instead of trying to design the graphics using a regular “Paint like” program, I took advantage of the excellent online SG graphics editor at https://daftspaniel.neocities.org/tools/sgeditremix/
With this tool, it didn’t take that long to come out with what I believe is a decent design for the graphics.
There you have the Hippo with it’s big open mouth, the 3 teeth, the nasty orange worm, red tongue, “cyan” gas cloud, and the Doc.
Except for the Doc’s feet, everything else happens over a black background, making it easier to design the graphics and animate them.
I will save the Hippo’s picture as a ML file, and load it at the start of the game, perhaps even keeping a copy in another memory location, to make it easier to redraw it if needed.
I have to do some tests to see what is faster, if printing the semigraphic characters, or POKEing them. I guess print will be faster, as each “sprite” will use 3 commands, instead of 9-12 POKEs.
On a side note, something that caught my eye, is the way that the cyan color looks like. I would have sworn that it was a sky-blue like color, as it should be according to Wikipedia.
But my CoCo 3, and all the emulators I tested show the same greenish hue… well, not all. The original Java based “Mocha” emulator does show the color I remember from all those years ago…
I really don’t know what happened to that color that was perfect for bright skies or clean waters. Do you?
And I had to do it. Start with my 3rd Challenge.
So I went over my old BASIC programs looking for something interesting that could be part of this challenge. I have 10 full disks, and after 5, it seemed to me that I had more than enough games to keep me busy for the month.
Let’s see what I found…
Inspired by the movie “Aliens”, you are a space marine trying to rescue the alien’s victim in a maze of tunnels.
A Russian roulette simulation. Yeah, I guess I was kind of sick back then 🙂
You must try to catch the weird tentacled thing, avoiding the pac-man like chomper.
Inspired by (I believe) a ZX Spectrum game inspired by the “Airwolf” TV show.
A simple target shooting game.
Keep the missile on target to blow the tank before it blows you.
You are alone against 2 enemy fighters. At least that is better than 5 vs 2 as in the movie!
Shoot the enemy space fighter from your base’s turret before it fires on you.
You may have noticed that some of the names and text in the screenshots are in Spanish. Yes, that is my native language. I’m not really sure if I want to translate them.
What do you think?
Now is time to pick one, and start trying to figure out 30 year old code written by a 15 year old kid….