Ocarina of Time 3D’s Horse Race Is Screwy

Skawo over on Youtube explains a lot of early 3D Zelda weirdnesses well, and they have a new video (8 minutes) explaining a great strangeness in Ocarina 3D on the 3DS. Here it is, a basic summary follows:

The scene: Lon Lon Range. The time: Adult Link’s period. The event: rescuing Epona from farm usurper Ingo. To do it, you have to beat Ingo in two races, each two laps, around the pasture.

The basic gise is that, in the 3DS version only, for some reason walking away from the race while it’s still going on can allow you to still win. Skawo demonstrates the phenomenon in their video.

So, how? In the N64 version, race progress is tracked by checking for Link and Ingo passing through three spheres in order, then a finish line. Both games contain a provision to prevent Ingo from despawning when far away, so Ingo does go around the track twice. In both versions a horse’s position is tracked by the center ground point of its model. In the 3DS version, however, for just the final finish line check, the game instead checks the draw position of each horse’s front-most hoof instead, to avoid cases where a horse’s front leg and its center point might disagree on which crossed the line first.

The issue is, if Ingo isn’t on screen, his horse isn’t drawn, and its legs’ position isn’t updated, so Ingo can’t win the race if he isn’t on camera. He can still win by default, if Link takes more than three minutes to finish.

The full details are in the video. It is interesting how unintended consequences like this can sabotage a programmer’s best intentions. I’m left wondering, now that terrible “AI” coding agents are being allowed to program things on their own, how many such bugs will creep into programming of all times? My own coding experience make me sure it’s going to be many.

I also wonder how many silly errors like this are going to sneak into the Switch 2 remake of Ocarina of Time, whether it’s coded by a human or a big pile of linear algebra?

Image borrowed from XKCD.

Leave a Reply

Your email address will not be published. Required fields are marked *