RetroChallenge #2, part 3. Challenge completed!
Yes! “Hippo Teeth” is completed!
well, there wasn’t that much left to do, mostly, get the “play again” option working.
The simplest way to do this is, of course, to run the program again, which would be fine since I’m not keeping a high score.
But, as I mentioned before, the background image is being loaded as a file. If you are running an emulator, or using any hard drive solution, this is probably fine, but for a floppy disk system, or even worst, a tape one, a better solution had to be used.
It was then that I remembered that the (C)LOADM command accepts an additional parameter, offset. Using this, I could LOADM the background to the memory range 1537 – 2049, normally used for the high-res modes. Then, at any time, it was just a matter of copying the memory content from there to the 1024-1536 range to have it “loaded” in the visible text screen.
As simple as FOR A=1537 TO 2049:POKE A-513,PEEK(A):NEXT
Then, I needed to restore the vertical position of the worm to the original one. As this is stored in a 3×3 array (3 possible horizontal positions, 3 lines in the graphic) with values that are READ from a DATA statement, RESTORE was clearly an option. I decided to use it, and basically reinitialize the game, going back to the first lines used to set the game variables.
This saved the space that would have been needed to reset the variables somewhere else in the code (I’m still thinking about eventually making a 4 KB version). A CLEAR was needed to make sure all was reset, but also keeps me from implementing a high score or something similar.
Eventually, by rearranging the order in which the variables are initialized, I will probably be able to have a high score list, and some other nice things. I wonder if the game is worth it?
The next step was to tweak the sounds a bit. I have been using the SOUND command, and for a while, I thought about replacing it with PLAY, since I could use just one PLAY to play multiple SOUNDs, saving some space.
I was surprised to find that SOUND can produce higher pitched sounds than PLAY, and PLAY goes lower than SOUND. After going around for a while trying to find the equivalent PLAY to the SOUNDs I was using, I realized that in a CoCo with Extended BASIC (the one that has PLAY), I would have 16 KB as minimum, so saving a few bytes by using a command that would not be available in the 4 KB machines did not make much sense.
Just in case anyone is curious, The closest PLAY equivalent I got to SOUND 150,1:SOUND 100,1:SOUND 50,1 was PLAY”O3L16GC+O2A-“.
Finally, I started compacting the code the usual way. Merging multiple lines in one, removing spaces and remarks, etc. I went from 70 lines with 3825 characters (according to Notepad++), to 37 lines with 3309 characters. Not bad at all.
I kept a copy of the “uncompacted” code, as it will make it easier to work with it in the future.
Well, that is it. The game is ready!
As the gameplay has not changed at all from what is seen in the previous video, I will leave you with the game’s code, the background code, and a DSK file, ready to play.