This is a huge tribute to LK Avalon, company that produced and released many great Atari games in early 90’s.
One of their first productions is Lasermania, logical game with laser beam controlled by blocks that can be pushed by crawler drone. Your task is to collect all the memory capsules and destroy all the alarm sensors by aiming laser beam on them. I simply love this game, but honestly I was not able to play it till the end screen.
The main issue of the game are its controls. They are unresponsive which requires for you to move the joystick (or push the key) longer to make the move… which also on the other hand sometimes ended with double move that many times caused no-way-out situation and you had to reset the level and sacrifice a life (in game of course).
About a month ago I saw an NTSC compatible version of Lasermania on AtariAge so I slowly decided to perform game disassembly with goal to replace controls routine.
What is quite unique in Lasermania is the fact that game contains several protections built in the game which is I think something that no other game on Atari had. The NTSC version mentioned in above paragraph broke the protection which made the game unplayable. The task was then a bit complicated … not even fix the controls but also remove the protections.
It was not very easy, but I had also great time investigating the code and reverse engineering the flow. The game had 4 protections (performed by EORing some memory areas and comparing to checksums). Each was on different place and each was causing some other nasty behavior. One caused that the level exit door opened, but the player was not able to enter them. Other was causing laser emitter explosion when touching door switch – inability to play further. Also other protection was causing random next level (many times out of bounds of the level data …. jumping to rubbishland). I really doubt there is another Atari game that contains these kind of protections.. and effects of breaking them.
Anyway, it took some time to patch the game. During that I reverse engineered lot of stuff there and I decided to perform additional changes to the game to make the time spent really worth, since I spent a lot of time reverse engineering it. First of all I wanted to add some sort of visible boundaries into playfield, because game uses narrow screen and lot of black emptier backgrounds which made you push the block to the edge of playfield without knowing that you reached the edge. Also the statusbar was showing only level number and number of lives without displaying the status of main goal – number of remaining memory capsules to collect and number of remaining alarm sensors to destroy. I contacted PG if he could think about the design of new statusbar and then the journey really started. By the way it is quite funny that lot of games from that days have sound visualizer in status bar … makes no sense to me :).
After PG created several mockups, we decided to extend the scope and completely redesign the game tiles. It also required couple of iterations, but this gave the game quite unique new feeling.
Since the ingame design was completely revamped, I decided to change everything that remained. PG adjusted title screen graphics, there was not much space to change it, because of the technical boundaries of the engine that operates the flying LASERMANIA text. BTW that software sprite routine is really a piece of code, I decided to not touch it. It is really hard to fully understand it and that was not my goal anyway. Still it required lot of manual font adjustments to reflect PG’s changes, but I like small rest from the coding, playing with some graphics:
Now all the graphics were replaced, but something old still remained… the music. Original game have CMC (Chaos Music Composer) music, I spent some time looking for converter to Raster Music Tracker… but then I realized such tool simply does not exist. Well, so found CMC binary file definition on web and checked RMT text output format. I opened visual studio and built a converter from scratch in one afternoon. It was not working on 100% on first try, but together with PG testing the output we managed to convert the music super quickly. PG had to recreate all the instruments from scratch in RMT and I think he did also great job in slight remixing to upgrade the sound to higher level.
You can download the cmc2rmt converter here:
I did not like the fact that the instructions in the game are scrolling in the bottom of screen in like 5 text lines so I planned to create separate instructions screen. When time came to implement the instruction screen, I decided to show the scrolling text in animation area. It required some fighting but I believe it looks pretty neat now. I completely redrew the text font and also game is completely translated to English.
Now back to my original goal… the control responsiveness improvement. This was not that easy as I thought at the beginning. Game runs lot of stuff in VBI and controls themselves were not read in every frame. So I completely replaced the controls routine which is now executed in VBI every frame, but the results are stored and evaluated in other routine that does not run that often. This makes the controls finally nicely responsive, but still there was possibility to end up with double move quite easily. To fix this I implemented movement debounce delay which adds small pause after first move of the player. This allows you to flawlessly move step by step without risk of unwanted double move. I have also extended the controls by adding additional WASD schema, so it is possible to play with joystick, arrows or WASD keys. Sometimes (in some levels) it is required to move the crawler drone quickly to collect the memory capsule and this debounce delay causing slowdowns. This can be overridden by pressing FIRE on joystick or SHIFT on keyboard.
I had nice brainstorming with Czech Atari colleagues on Discord two days ago and I made the game fully NTSC compatible without any sacrifice to the design or content.
Yesterday I finally finished the game from programming perspective and also from gaming perspective (all levels beaten).
Enjoy the game, it’s a gem.