04 May 2022 18:20
I used to play Ultra Peril Snake back in the day and liked it for it's graphics, atmosphere and the distinct sound Snake makes when snaking around . A quick search on-line learned that Ultra Peril Snake is fairly unknown. Yet, a download of the shareware version is still available on archive.org! You can also download Ultra Peril Snake here.
So what's this Snake all about?
As the hero of this game you control Ultra Peril Snake. A lovely green little snake that grows as it eats galactic foods. While snaking around it makes a distinct clicking noise. On a seemingly nice day he runs into Princess Mega Galactic Snake, a beautiful red snake that makes Ultra Peril Snake schwing! Unfortunately she's kidnapped by the evil Sad Graphics Man. Your goal is to rescue her. To rescue her from the Sad Graphics' Man secret lair you'll have to complete all the levels. |
In-game video
Playing Ultra Peril Snake up to level 13.
The shareware version
I couldn't find the full version anywhere on-line. Throughout LinkedIn I contacted the programmer of Ultra Peril Snake but unfortunately the original files are lost in time. However, the shareware version does provide a good bit of gameplay despite you can't really save our beloved red snake.
Since I've played through Ultra Peril Snake I have all the level-codes:
- Level 5: GRTHGYJT
- Level 9: ILUSIONS
- Level 13:OPIOJVXG
- Level 21:VDFRIJHG
- Level 25:LEVELAST
- Level ?:ILLUSION
I also dove into the game to find out if it is possible to crack the shareware lock-out (you can play Ultra Peril Snake for 50 executions or 30 days, then you have to replace SNAKE.EXE with the original file). Also changing the levels would be interesting and turned out to be possible, too.
Editing the levels
You can edit SNAKE.LEV using a hex-editor. The very first character in the file is the top-left position of the first level. From address 0000 to 0018 is the first row from top to bottom. If you'd like to collect extra lives you can add a few 12h's . Remember that the numbers you are changing are in hexadecimal: after 09 you don't continue to 10 but to 0A (10 in decimal), 0B (11), 0C (12), 0D (13), 0E (14), 0F (15) and then to 10 (16). Unfortunately I haven't found a way to add Princess Mega Galactic Snake .
In the screenshots you can see the first level with all available characters:
All the available objects added to the first level.
All the available objects added to the first level from the hex-editors perspective.
The first section is about 1026 bytes. This would indicate that the second level is the next section of 1026. I found that levels don't accumulate like this. Some of the later levels are defined earlier in the SNAKE.LEV-file. Look at the patterns in the hex-editor to see which level you're modifying. You can also search in the hex-editor if you know that a certain level has been made out of a lot of the same blocks (i.e. 20h, the diagonal lines, one level has a complete wall of these blocks so you can search for 20 20 20 20 20 20 20 20 20 20 (in hex!) and find the appropriate level).
Removing the shareware lock-out
First of all: you can simply copy the original SNAKE.EXE from the .ZIP-file to reset the shareware lock-out counter . But the challenge to overcome the lock-out still persists and since the hex-editors we're already at full steam editing levels why not dive into SNAKE.EXE as well?
I have been fiddling around with Turbo Debugger and Soft-ICE to see what is going on when Ultra Peril Snake is launched. I see references to BGI indicating it has been programmed in Turbo Pascal. I also see a lot of far and near calls and traced every one of them. Unfortunately I could not skip the nag-screens or skip the code that keeps track of the number of times it has been run. I did see a reference (and far call) to address 2000:0500 that went straight to the menu. If you tie this to the ESC-function in the menu you can't exit the game anymore since you'll be redirected to the main menu again. I wasn't able to skip to the menu directly (hoping to skip the shareware lock-out as well).
Another route was making the file write protected. A author has programmed a check to find out if the file is write-protected. I couldn't skip this check either.
The last route is to let the shareware lock-out kick in and see what happens. It turns out that the "your version has expired"-text is located within the SNAKE.EXE file. Unlike the other nag-screens that are located in the overlay-file (SNAKE.OVL). The code in SNAKE.EXE shows the expired screen and then at 4AA9h pushes the value of the Base Pointer that skips it to the exit-screen of Ultra Peril Snake. Instead of pushing this value we can change the value to CB which is the opcode to return from procedure. SNAKE.EXE will then fall back in its normal routine instead of quitting. It will then show the shareware notice indicating you have -1 executions left .
Change the value from 55 to CB.