Tech News
← Back to articles

Creating the Longest Possible Ski Jump in "The Games: Winter Challenge"

read original related products more articles

After spending way too much time getting side-tracked with investigating the copy protection measures, it is time to return to the actual reason I started looking into The Games: Winter Challenge to begin with: The quest to create the optimal ski jump and see how far you can push the game.

One of my initial questions was already answered, namely whether it’s possible to jump farther than 100 meters, a feat that I never managed as a kid. One of the hidden copy protection measures of the game limits how far you can jump when they are active, and without them I jumped farther without too much trouble:

I’d like to think that I’m just better at video games than I was as a kid, but realistically I likely could have achieved this decades ago without the artificial limitations the copy protection adds.

But the big question of “how far can you go?” still remained. I see two possible avenues for going about answering it. One is to build some form of harness to allow individually controlling the inputs the game receives, advancing one frame at a time and using savestates to try many different input sequences to see which produces the best result. This is how most tool-assisted speedruns for video games are created, using special emulators which have those functions built-in. However, this method has some drawbacks. For one, it is limited by your understanding of and creativity within the game: if there is some hidden mechanic you don’t know about, you won’t be able to exploit it. Also, if there are too many different possibilities to try, it can be very tedious to try them by hand, and doing it programmatically can be fairly slow because you need to emulate the whole game millions of times.

Instead, I will be going for a more analytical approach. We will not be playing the game at all, and instead crack the game binary open and deeply understand how it functions. By learning all the details of how the game runs the simulation, we can analyze how it represents the game state, how it runs its physics simulation, and how it determines the actual distance traveled. Maybe by this we will learn that the answer is as simple as “keep as straight as possible to maximize distance”. Likely the logic will be much more complicated than that though, and it should be possible to create a model re-implementation of the ski jump logic, extracting only the relevant parts and run much more efficient simulations on it. Then, by learning how the game’s replay file format works, we can create our own synthetic replays using the input sequences we found from our simulations, and play them back in the game, achieving the optimal ski jump entirely outside the game itself.

The basic mechanics of the ski jump event

To start off, let’s go over how a ski jump in the game works in general. There are four main phases for each jump: First, you go down the jumping ramp and can move the jumper left and right, counteracting random winds pushing you around. Then, you jump off the take-off table, by pressing down at the right time, which determines how high your jumper will lift off. Next, you fly over the hill, and can press up and down in order to adjust the angle of the skis for a more aerodynamic position, again with some wind randomly pushing against you. Finally, you press Enter as you approach the ground to land safely.

The game itself, as well as its manual, give some hints as to how you’re supposed to use your controls in order to jump farther. While going down the ramp, if you stray too far left or right, the game renders puffs of snow and plays a corresponding sound, indicating to you that you’re going off the track and are slowing down. During the flight section, while the game itself doesn’t give you any direct feedback on whether what you’re doing is good, the game’s manual recommends keeping the skis parallel during the flight to minimize drag. This “parallel style” is a great reminder of the game’s age, as it was in fact the dominant ski jump technique up until the early 90’s when this game was created, and was since replaced by the now dominant “V-style” of forming a V-shape with the skis. The game does allow you to form a V-shape as well, but it’s unlikely that it simulates air resistance in any meaningful way, and I assume that what is optimal is what the developers wanted you to do, instead of what is actually better in the real world.

Overall, this surface-level analysis goes by what the game itself tells us is good or bad, but there is no guarantee that this is actually true. For one, there could be hidden mechanics that influence the jump which are not explained directly. And even if that isn’t the case, what the developers intended to be the optimal strategy, and what the optimal strategy actually is, can be very different things. It’s quite plausible that there are some emergent behaviors that the developers didn’t anticipate, but which can help us achieve better results. There are numerous well-known examples in video games where this happens, like the famous Backwards Long Jump in Super Mario 64, which is an unintended consequence of Mario’s movement system which allows to reach higher speeds than the developers expected were possible.

... continue reading