|
Post by playvectrex on Nov 6, 2021 19:05:02 GMT -5
After Vector War ends... I'll share some more thoughts on Pole Position. After playing so many times, I had a thought about how it works and pretty much think I know the secret to get high scores. Despite thinking I know though, I still don't have 78,000 or higher Definitely not the kind of secret that is a cheat either. If I forget to post it, please email me As promised, here's my crazy theory about how to get the high score in Pole Position.... Have you ever noticed that when you play a few times that you swear you see the same pattern of cars? Well the Vectrex random BIOS routine is not completely random. If given the same inputs from the time you turn on the Vectrex and immediately play a game without delay, the random number generator can generate the same sequence. But it appears to change subtly at times. Why? I tried to think about when this sequence can be changed, and I might be dreaming still... it's just a feeling, but the cars do not start to appear until after you switch into second gear. So switching into second gear signals a starting point in the code that starts pulling random numbers for cars. If you keep getting the same sequence, it's likely because you are shifting at exactly the same time. At times I'll try shifting when I see 12X or 13X (optimal is 135, but maybe not!). Try to vary the point when you switch to second gear; doing so seems to have an effect on the random numbers for me. So if you keep getting the same score, try shifting at a different point, and then driving as perfectly as you can. But even if you have to let off of the gas on the second left turn on the 4th lap due to too many cars bunched up, DO IT! It will not affect your time if you are driving more or less perfectly. It's just enough to allow you to change lanes without crashing and finish the race. My run of 77,750 in fact involved letting off of the gas just then to avoid crashing. And if you think you are going to crash, it's likely because the random number of cars is higher which means a higher score. So take care and slow down just that one time. You'll still finish with total 248.8 and 22 seconds left. Of course this will take time, and about 4.15 minutes per attempt Good luck!
|
|
|
Post by Chainsaw on Nov 6, 2021 20:57:45 GMT -5
Thanks for this additional information. I will play / try around a bit, because playing Pole Position is always fun. Now I just considered: If I shift very early to sendond gear, is there a chance, that I get more random cars (more points) because the code starts generating the random numbers earlier? But sure, you will also lose time by shifting too early to second gear. Will try this / play around this Sunday :-) Or if it's abouting shifting to second gear, maybe it's also dependend of the speed of the own car, if / when other cars are "generated" with the random number?
|
|
|
Post by playvectrex on Nov 6, 2021 23:20:54 GMT -5
Thanks for this additional information. I will play / try around a bit, because playing Pole Position is always fun. Now I just considered: If I shift very early to sendond gear, is there a chance, that I get more random cars (more points) because the code starts generating the random numbers earlier? But sure, you will also lose time by shifting too early to second gear. Will try this / play around this Sunday :-) Or if it's abouting shifting to second gear, maybe it's also dependend of the speed of the own car, if / when other cars are "generated" with the random number? To be honest, I'm just kind of guessing at how it works. It feels like it makes sense to me. The one thing I don't know is how does the sequence of random numbers get skewed by a lot unless the Random_3 (picks random byte) routine is called over and over while in 1st gear. If so, it would advance the "list" of numbers (remember the list is the same every time) based on the point where the code detects the button pressed, thereafter it likely runs the routine once per time delay to space the cars evenly so you can steer through them no matter where they are placed. So if that's true, you can think of the list of random number as like the sequence of digits in Pi (3.141569265...), and while in 1st gear it's just incrementing a pointer to the next digit. When you shift to 2nd gear, the digit it is on is going to be the next random routine's output value the next time it's called. Said another way, instead of Pi, if we use a list of 0123 digits... 01232222323012312310230123023222[2]312112123322223330... ^ | when you shift to 2nd, it stops here ----- Then the car sequence is [312112123322223330...] And depending on where you shift, it literally shifts the sequence of numbers forwards or backwards. Then possibly there is a higher number of non-zero digits (i.e. all cars). Just a theory... I haven't really looked at the code that hard. It would make some sense to code it that way as well, because it would be based on chance, but also a bit of skill. I would say it is asking a lot for 192 numbers in a sequence to all be non-zero, but it's possible.
|
|
|
Post by playvectrex on Nov 7, 2021 0:14:30 GMT -5
Ouh really? I mean this would be extremely nice of you, but really only, if it's not too much effort for you. And i don't know what i could offer as a thank you... But I would gladly accept the offer. Somehow I would also be interested in trying something like this myself, but I simply don't have the time in my everyday life to get involved, and with my very very weak assembly skills, it is certainly not easy to analyze the game code. Im more the user / player, sometimes betatester, sometimes a tinkerer, but my last program code that I wrote, was in Commodore 64 Basic... Hi, no worries. What I get in return is knowledge of how Vectrex assembly works. I have to dig through and reverse engineer and try to figure it out. It's quite a different "game" but fun, for me. So far I have disabled crashing into the sides so now you can happily drive through the trees Looking for car position comparisons next... Unfortunately it's not as easy as other games that have calls to the Obj_Hit routine to help point me to the right locations in code quickly. Hyperchase seems to have been coded rather simply. g.recordit.co/uAHu5yA6Oh.gif (see here)
|
|
|
Post by playvectrex on Nov 7, 2021 0:46:32 GMT -5
Looking for car position comparisons next... I guess it was easier than I thought it would be... here's the binary, which has no crash detection for the sides or cars in both game 1 and 2. So you can see what the fastest time for Game 1 is as well playvectrex.com/gameroom/gce/hyperchase-invincible.binI thought I could easily make a version that only disables the sides OR car collision detection so you can practice one thing at a time. I'd like to have something like that as well I'll create this possibly tomorrow, but I have a few things going on tomorrow so I might not get to it. Cheers!
|
|
|
Post by Vorkosigan on Nov 7, 2021 4:00:56 GMT -5
Thanks for this additional information. I will play / try around a bit, because playing Pole Position is always fun. Now I just considered: If I shift very early to sendond gear, is there a chance, that I get more random cars (more points) because the code starts generating the random numbers earlier? But sure, you will also lose time by shifting too early to second gear. Will try this / play around this Sunday :-) Or if it's abouting shifting to second gear, maybe it's also dependend of the speed of the own car, if / when other cars are "generated" with the random number? To be honest, I'm just kind of guessing at how it works. It feels like it makes sense to me. The one thing I don't know is how does the sequence of random numbers get skewed by a lot unless the Random_3 (picks random byte) routine is called over and over while in 1st gear. If so, it would advance the "list" of numbers (remember the list is the same every time) based on the point where the code detects the button pressed, thereafter it likely runs the routine once per time delay to space the cars evenly so you can steer through them no matter where they are placed. So if that's true, you can think of the list of random number as like the sequence of digits in Pi (3.141569265...), and while in 1st gear it's just incrementing a pointer to the next digit. When you shift to 2nd gear, the digit it is on is going to be the next random routine's output value the next time it's called. Said another way, instead of Pi, if we use a list of 0123 digits... 01232222323012312310230123023222[2]312112123322223330... ^ | when you shift to 2nd, it stops here ----- Then the car sequence is [312112123322223330...] And depending on where you shift, it literally shifts the sequence of numbers forwards or backwards. Then possibly there is a higher number of non-zero digits (i.e. all cars). Just a theory... I haven't really looked at the code that hard. It would make some sense to code it that way as well, because it would be based on chance, but also a bit of skill. I would say it is asking a lot for 192 numbers in a sequence to all be non-zero, but it's possible. Very interesting analysis and thesis, Brett. 👍 In my successful run for the 78000 points I’m sure I changes gears in the optimum, cause that was my first goal in all attempts. To change gears at the moment, when the lower gear ends with its max speed, seems to be logical for optimum acceleration. It would be interesting to test, if the 16000 points in the qualifying round can be reached, when you‘ll change gears very early. I’m trying to remember, if I also had to brake/get off the gas for a moment in the race. But I’m not sure. But I think, I caught one oil puddle, so that may be an argument for your theory. 😄
|
|
|
Post by Chainsaw on Nov 7, 2021 9:14:07 GMT -5
Looking for car position comparisons next... I guess it was easier than I thought it would be... here's the binary, which has no crash detection for the sides or cars in both game 1 and 2. So you can see what the fastest time for Game 1 is as well playvectrex.com/gameroom/gce/hyperchase-invincible.binI thought I could easily make a version that only disables the sides OR car collision detection so you can practice one thing at a time. I'd like to have something like that as well I'll create this possibly tomorrow, but I have a few things going on tomorrow so I might not get to it. Cheers! Ohhh that was fast, and it's a very great version without crash detection. So I can finally enjoy a Hyper Chase "ride" without watching the traffic and enjoy the landscape. Or analyse a bit, how the traffic is working / is generated. I'm already very very happy with this version. If you do another one (only side collision or only car collision) it would also be nice to have, but with this version (no detections) I'm already happy. Thank you a lot for this. In Game 1, my fastest time was now something about 56.8 plus/minus a bit, depending of, how fast you switch the gears at the beginning. And in Game 2, I was able to find out now, if there is an ending or not. {Spoiler about Game 2 track }It is a very long track, I knew this already, because I also reached the second tunnel of the track in the past in the normal version. But after the second tunnel, it's still a long way to the end. Reaching this, would be very difficult in the normal version without deactivated collisions. But if you reach the end of the track, the game doesn't stop or there is no finishing line, but the track just starts again from the beginning. So if you would be the perfect player without doing mistakes in the normal version, you could "marathon" this game. But with the normal difficulty level, I think marathoning this game is impossible.
Intersting is, or it was always intersting in the past, but now I can have a look at this closer without "crashing": If you brake down, or shift down a gear, it seems all cars that you already passed are passing you now again. I'm not sure if this is randomized, or if the game really "remember" or "saving" the cars that you passed. Because if you are breaking, a lot of cars are passing you, but after a short while, no cars will pass you again. It's interesting how such things are done in the game. So I will play a little bit around now with Hyper Chase :-) Btw. analysing the game, for example, how to beat level 1 without crashes as good as possible was done in the past already, some years ago in a Vector War. But I had to search when this was exactly. If you are interested, I will find and post it here again. So thank you again :-) If you create other versions, I'm looking forward for them, but as I said: This version here already fullfills my wishes :-)
|
|
|
Post by playvectrex on Nov 7, 2021 10:13:40 GMT -5
Very interesting analysis and thesis, Brett. 👍 In my successful run for the 78000 points I’m sure I changes gears in the optimum, cause that was my first goal in all attempts. To change gears at the moment, when the lower gear ends with its max speed, seems to be logical for optimum acceleration. It would be interesting to test, if the 16000 points in the qualifying round can be reached, when you‘ll change gears very early. I’m trying to remember, if I also had to brake/get off the gas for a moment in the race. But I’m not sure. But I think, I caught one oil puddle, so that may be an argument for your theory. 😄 Thanks for trying to recall your glory run for the record books, Vorkosigan! If my theory is correct, perhaps forcing the code to shift at the optimum point would help find it. Although I suspect the speed doesn't change on every frame draw of the Vectrex, so there would be multiple frames that would contain 135 to try. I just know that I was getting really consistent results, like 77,250 every run... and then I changed the shift point from 12x to 13x and found the patterns changed. For me and my reaction times, I was shifting as soon as I saw 12x, and with video analysis I could see that I was shifting a tiny bit early 130. So 13x would be 140, a bit late. So kind of hard for me to gauge when to shift at 135, but it's fun to try! This all might be wrong and Pole Position might just be a random game, but I'm hoping that it's not
|
|
|
Post by playvectrex on Nov 7, 2021 10:50:04 GMT -5
Ohhh that was fast, and it's a very great version without crash detection. So I can finally enjoy a Hyper Chase "ride" without watching the traffic and enjoy the landscape. Or analyse a bit, how the traffic is working / is generated. I'm already very very happy with this version. If you do another one (only side collision or only car collision) it would also be nice to have, but with this version (no detections) I'm already happy. Thank you a lot for this. Glad to hear it meets your expectations BTW I tried for a high score in Game 1 and only got 97.5 or so; so I'm learning a lot already!! Hope you don't mind the title change I wanted to make sure it was somehow different. Game 2 gets to have an insane number of cars on the track, doesn't it? I don't know how you'd navigate through those... but I think it can be done. I've often thought it would be cool to add endings to these games that don't have them... but in a way it's also fun from a high score perspective when there is no ending. Like for Veccy Bird, I like the ending at 50 (no spoiler, this is wildly known), but it would be kind of cool to put the ending at 100, or just have a high score version that never ended. I think that's why Game 2 exists on Hyperchase. Here are the two other versions, have fun testing! hyperchase-invincible-no-cars.binhyperchase-invincible-no-walls.binIf you'd like to take a look at the assembly code, I've added "BRETT" everywhere I've made changes or just added a couple comments to note what code does. So if you search for those you'll find the sweet spots. I reverse engineered this in VIDE. The trick to making changes to code is to keep the same number of bytes, so if you want to effectively delete a JSR $ADDR, that's 3 bytes, so you would comment it out and add 3 NOP commands. This is required because the disassembly that VIDE provides has relative address jumps in the code, so if you move the code around, when you reassemble it, it will break and crash. You can add new code very easily by finding where you want to make a change, then replace some code with a JSR to a label at the end of the file, bring the code you replaced there and add your new code, then RTS and boom... hack inserted hyperchase-invincible.asmHere's a bonus test game you never asked for, but I'm pretty sure you'll like (Game 1 - 20 is Level 1 - 20) web-wars-level-select.binweb-wars-level-select-weak-mega-bird.bin
|
|
|
Post by Chainsaw on Nov 7, 2021 11:48:27 GMT -5
about of insane number of cars: Yes, sometimes there a lot of cars. The issue that I often have is, when 2 fast cars are approching side by side (fast does mean, that they drive also very fast, and only approaching slow on the street) and then a third or fourth car is approaching in another speed. Then navigate through is very difficult, then I often switch a gear back and up again to slow down a short while and the situation on the street changes. But if you slow down, often another car crash from behind into the own car. I think they made it this way, to avoid, that players just can slow down everytime, if there are a lot of cars on the street. Or there is always a risk to crash when slowing down.
Thanks a lot for the other versions, and the tips about the ASM code and using VIDE to reverse engineer. I heard / read already about VIDE, maybe now time to try it. I also see, on Malban's website and also others, there are a lot of manuals, instructions etc.
Ohh and also thanks for the Web Wars hacks, they will help me chasing the trophies over 20. Always catching 20 trophies before I can try to catch the inofficial 21 - ?? and what happens in the game or trophy room needs time, your hack is helping me here a lot to start directly with level / trophy 20 :-) Wow, that's a lot of great stuff :-)
|
|
|
Post by playvectrex on Nov 17, 2021 11:58:56 GMT -5
I've created a version of Pole Position that I'm calling, The Hardest Race! It effectively ensures ALL cars are generated, and still keeps them randomly positioned (Left, Center, Right) but effectively at a fixed distance. If you manage to beat the game without too many slow downs, you'll have the highest score you've ever seen in the game. Have fun! pole-position-hardest-race.binSome more info about Pole Position!!! This is the good stuff!!! - There is a random number generator for the cars Left, Center, Right - There is a random number generator for the distance between cars (and a minimum gets added to it) - There is a random number generator that determines if the car is shown or not (75% chance it's shown) - There is also something you can do to ensure cars are 75% shown... if you don't do this the cars will 100% NOT be shown (or counted). The secret is, analog controls!! If you steer too hard, the last random number generator and car drawing routine is completely skipped. So to maximize your chance of it NOT doing that, you should be trying to steer gently around cars as much as possible. If you have to steer heavily, and it goes to generate a car just then... it will skip doing that. - The shift point doesn't seem to play too heavily into the random number generator pattern as I suspected before, because there are so many other times that the random number generator is called, the "pattern" advances quite a bit all throughout the race. It'll probably be hard to control that. Best bet... drive smooth and get lucky! The Hardest Race above fixes the distance to 16, disables the steering skip check (so you can steer as hard as you want, you'll need it!), and it also makes sure cars are generated 100% of the time. So it's just an onslaught of randomly positioned cars (left, center, right) at a fairly tight distance. This is enough to make you sweat, and give you the highest score you've ever seen in the game. I'll let you experience it instead of telling you what it is It's kind of the pay off of finishing the hardest race.
|
|
|
Post by Chainsaw on Nov 17, 2021 16:02:54 GMT -5
Oh first I thought, you coded this version with the analog control, but this was in the original - and you disabled it now. These information are very intersting, how some things in Pole Position are working. And your version is an awesome idea, I will try it tomorrow.
Maybe we should remember Helmuth next year, that this could be a game for the next Vector War? Why original or home brew, if we have such great "special versions"?
|
|
|
Post by playvectrex on Nov 17, 2021 18:21:56 GMT -5
Oh first I thought, you coded this version with the analog control, but this was in the original - and you disabled it now. These information are very intersting, how some things in Pole Position are working. And your version is an awesome idea, I will try it tomorrow. Maybe we should remember Helmuth next year, that this could be a game for the next Vector War? Why original or home brew, if we have such great "special versions"? Definitely possible to make special competition versions of games that might not be otherwise considered as competition worthy. I don't think this particular Pole Position is a good competition version though so it disables a lot of the randomness, and most good players will be able to finish with the same top high score. It could be made a bit more random though, while still being set to VERY hard and that might be closer to a competition version. As it stands, Pole Position unmodified is fairly hard to get a high score... but maybe with a little practice and a good analog controller, more high scores will show up.
|
|
|
Post by hcmffm on Nov 20, 2021 15:32:20 GMT -5
Interesting discussion. Actually, Berzerk Ultimate is on the list for next year's Vector War XII. And Malban might create an Armor Attack Ultimate - i.e. a version without the position where you can play endlessly. Only drawback is that have been achieved highscores cannot compared with highscore of the original version. But that's not too bad, I think.
|
|