Hacker News new | ask | show | jobs
by b0b_d0e 4421 days ago
I've had a similar project floating around in the back of my mind, except instead of reading the state off the emulator to determine when to split, the program watches the video stream and uses visual cues to determine when to split. As a simplistic example, consider the original mario game. When a runner would want to split, the game screen would display the text 1-1 with a black background roughly at the center area of the screen. With this information, I'm sure it wouldn't be too hard to determine when to split by scanning in the rough area for a picture similar to the what you would expect at this spot. I know that in practice this is possible to do since I have (just for fun) written a similar program for pokemon games when I wanted to EV train on an emulator. It would scan for the edge block of the tall grass (since all grass looks the same), and then turn around and scan for the edge again. When the screen went black, I knew I was entering a battle, so I was start scanning where the wild pokemon's name was and the program would be able to decide if I wanted to kill it or if I wanted to run (so I can keep count of the EVs I've gotten) The main issue with that program is that it couldn't tell shinies apart, so maybe over night I could have lost a shiny without ever knowing.

Anyway, long post short, I think it would be possible to monitor the live video and determine when to split based off information that can be stored in some kinda downloadable database (or some way to preset all the different required split information).

3 comments

This is how kartlytics.com works for Mario Kart 64.

More info: http://www.joyent.com/blog/introducing-kartlytics-mario-kart...

That's a very cool idea, but its application seems limited to games with clear 'level' screens. Recently I've been watching speedruns of Ocarina of Time as well as Metroid Prime and neither of those have obvious indicators for most of the splits.
I agree that it would be more difficult for those kinds of games, but I think with a little bit of cleverness it can still be managed. Since it doesn't really matter where you split, but rather that you consistently split at the same spot, I think it can work by splitting on "You've got item!" text or other things like that. For instance, the first split of the Ocarina of Time escape could be split as soon as it displays part of the map for the zora river. The bottle split could be hit when you hold the bottle over your head, it could match part of the blue text box displayed over your hand since this exact spot on the screen would look the same for all N64 versions of the game. One of the key features of the auto split program would have to be that the image matching program wouldn't be so strict as to require pixel perfect matches, but also would be strict enough that it wouldn't pick up any false positives.
Sorry, what does "splitting" mean in this context?
It means stopping one recording and starting another, and defines the point in time that determines the duration of the run. It can be used to, say, automatically save the state as a checkpoint to return to after a mistake.
For segmented speedruns, you are correct, but more commonly what someone means when they say split is the speedrunner has a separate program running on his machine with a list of key points of progress in the game and the runner previous best times to that spot. When the speedrunner wants to race against his/herself, the speedrunner can start a split program with their previous record and play the game through. When a key point is reached, they press some button to denote that they reached this check point and the program will mark the time it took to reach it and tell you whether you are ahead or behind the previous record. Speedrunners use this to gauge whether they want to continue trying to beat the record or to restart and try again.