Submission #8764: nymx's C64 The Viper "maximum score" in 01:46.41

(Link to video)
Commodore 64
maximum score
Bizhawk 2.9.1
6366
59.826089499853765
1782
PowerOn
1983-08.d64
Submitted by nymx on 12/2/2023 5:51:02 AM
Submission Comments

The Viper (Compute's Gazette)

This is a fast, furious, hungry snake. It races about, devouring its favorite food-asterisks!. And the more it eats, the bigger it gets. Since snakes have a hard time growing wider, the Viper simply gets longer. Since the Viper has such sharp, venomous teeth, it must not in its haste accidentally run into its own lengthening body. To make things especially interesting, the Viper must maneuver through a maze with electric walls. One false move means certain doom.
The article for this game can be found on page 42 of Compute's Gazette Issue 2 (August 1983)

Why TAS This Game?

The continuation of TASing games from my all-time favorite magazine, Compute's Gazette. This makes my 46th TAS from this series. Additionally, a YouTuber responded to my publication of "Sky Diver". The statement was a response to someone asking "Why?". Basically..."It also sets up the competition that allows us to see what is possible in a game". So this is what I also agree with, with an extra of completing a "Compute's Gazette" library.
One other note. I was resistant to TASing this game, until I found that it had an "Machine Language" routine inserted into it to help the game run super fast. This suddendly made this game more appealing for me to tackle.
Previous Compute's Gazette submissions include (In order of submission):
1Astro-Panic!2Royal Rescue
3Miami Ice4Chopper 1
5Spike6Heat Seeker
7Omicron8Alien Armada
9Star Dragon10White Water
11Space Gallery12Bagdad
13Race Ace14Quolerus
15Trap16Maze-Mania
17Balloon Blitz18Bowling Champ
19Circuits20Going Up?
21Space Dock22Saloon Shootout
23Sno-Cat24Queens' Quarrel
25Stronghold26Lincoln Green
27Disc Blitz28SuperSprite
29Dunk30Basketball Sam & Ed
31Bee Zone32Q-Bird
33Space Worms34Powerball
35Castle Dungeon36Pool
37Snake Pit38RADs
39Spy Defense40The Forbidden Crypt
41Cosmic Combat42Canyon Cruiser
43Cell Runner44Sky Diver
45Snake Escape

Game Difficulty and Ending

The difficulty is set in two different settings. One...you must select the speed that your wish to operate at. The second one is having the choice of a maze to navigate through. By selecting the "Hard" maze, we can go for the most points possible, since the calculate for determining score is below:
No Maze: (Number of Asterisks Eaten) X (1) X (Speed Selection)
Easy Maze: (Number of Asterisks Eaten) X (2) X (Speed Selection)
Hard Maze: (Number of Asterisks Eaten) X (5) X (Speed Selection)
In this run, I choose the "Hard" maze, since it helps me to get the most points in a quicker manner.

Effort In TASing

This game started off looking easy, and I quickly realized that it was quite difficult. In fact, the version that I'm submitting here was my best effort of many times through. I tried multiple run-throughs with different concepts and only one come through.
There was a few things I found out about this run:
  • You cannot play this game on speed 20. I had to reduce it to 19, since 20 was impossible for a TAS to control. Its almost like it didn't have any throttling to allow control.
  • You cannot get a continuing growing snake. There is a programming error where the snake's length breaks an 8 bit value and crashed the ML (Machine Language) routine being used to help make the game run super fast. So the maximum score that can be achieved is 11970.
  • RNG is controlled by the B.A.S.I.C. written part of the game. This means that we will see each asterisk come up in an expected place; however, there is a way to control RNG in a small way. If you don't want an asterisk to show up in a place, you can put your snake in the pathway of it. In this case, the BASIC routine will just go to the next location...which is not directly controllable by any RNG manipulation.
  • After the snake length address hits 127, it will continuing growing in length. The length is not really increasing, but is a programming error in how to keep the length the same. Increasing the value past that point, it will break away and leave the original snake on the screen. It starts over with a 2 block length and you get to do it all over again...until it hits 256. This value breaks the ML routine, keeping the score from increasing.
Here is a version that proves that you cannot go any further, after the last asterisk is collected in this submission. https://tasvideos.org/UserFiles/Info/638370934146385855

Human Comparison

Special Thanks

Thanks to DrD2k9 for the talk over the way this game responded. For each surprising thing it threw at me, we had a discussion over it. Basically, he has the same problem as I do...I hate not figuring out why something happened.

DrD2k9: Claiming for judging.
DrD2k9: It could be argued that this run doesn't meet the definition for Maximum Score as it's still possible to eat one more star (thus theoretically further increasing the score), but doing so does crash the run. In this game, the score is not displayed during gameplay; it is only shown after the game has ended (via death of the snake). So a decision has to be made between accepting this submission as presented (containing an actual ending with the score displayed) or requiring one more star to crash the run as a type of kill-screen ending (which unfortunately prevents displaying the final score). Between the two options, I feel that actually displaying the final score is important and thus the better option.
Because it's theoretically possible to reach the final edible star or the crash/kill screen faster on a difficulty with less obstacles, I feel there could still be an any% branch/goal option for this game.
Accepting as a Maximum Score branch/goal.
Note to publisher: The magazine calls this game "The Viper" but the title screen in-game only says "Viper." I'm not sure what the policy is for naming the game when there's this type of discrepancy.

EZGames69: Processing...
Last Edited by EZGames69 on 1/25/2024 4:48 AM
Page History Latest diff List referrers