Submission #5928: MrWint's A2600 Barnstorming "no collisions" in 00:32.41

Console Atari 2600 Emulator BizHawk 2.2.2
Game Version USA Frame Count 1942
ROM Filename Barnstorming (1982) (Activision, Steve Cartwright) (AX-013).bin Frame Rate 59.9227510135505
Branch no collisions Rerecord Count 365
Unknown Authors MrWint
Game Barnstorming
Submitted by MrWint on 4/14/2018 2:01:23 PM

Submission Comments

Submitting #5880: MrWint's A2600 Barnstorming in 00:53.15 as two separate submissions as suggested by feos. This is a literal copy&paste of the previous inputs. All explanations can be found there.

Copy of the game mechanics section of #5880: MrWint's A2600 Barnstorming in 00:53.15 since the submission form doesn't like short description texts.

Game mechanics

The game as a whole is very simple: fly through the barns in the shortest amount of time.

Game modes

The game features 4 game modes, which differ in the amount of barns you need to fly through and the pattern of buildings and geese on the map. Game mode 4 is supposed to be random, but all it randomizes is the starting position in the pattern, the patterns themselves are still fixed.
This run only considers game mode 1, which requires the least amount of barns and can be completed the fastest.


The movement looks like a simple auto-scroller, but has quite some oddities to it which make it hard to optimize. The plane moves forward at 1.5 pixels/frame by default, and up to 2.3125 pixels/frame when pressing B. However, when pressing up or down, it only moves at 15/16 its normal speed, so you want to fly straight as much as possible.
Vertically, the plane moves up to 1.4375 pixels/frame up or down. The vertical speed gradually builds up and resets to 0 immediately once you stop the input.
Fractional movement amounts are stored in subpixel variables. However, the fractional amounts don't have any direction, it's easier to think of them as movement potential: potential built up moving upwards can also be used to accelerate moving downwards. One of the quirks is that the speeds are only updated every second frame, but they are applied to your movement every frame. This, in combination with the fractional movement buffers, means that it's not optimal to hold up or down to move vertically. It's better to only press up/down every second frame to keep the speed up, and use the in-between frames only if you have enough fractional potential stored up to move 2 pixels instead of 1. That way, for each frame you press up or down and therefore lose out on horizontal distance, you get more vertical distance on average.


Another quirk is that the barns and windmills don't have a fixed distance between them. They're not laid out on a fixed track, instead the next building spawns as soon as the last building left the screen (there are "blank" buildings which sometimes create gaps, but they follow the same rules). The new building always spawns at the same relative position to you at the right edge of the screen, independent of how much you were moving. That means it's possible to overshoot and waste a pixel of distance during this transition, depending on how your position aligns with the one of the current building. To avoid that, you can intentionally slow down, using the extra slack to start moving vertically early for free, or aligning your subpixels better.


Collisions in this game are kind of painful to predict, because it is based on the hardware collision detection of the Atari 2600 console, which does pixel-perfect collision detection. That means you collide if and only if your pixels overlap. And this is affected by the animation cycles of the different objects, so you may or may not hit a windmill at a certain height depending on where it is in its animation when you pass over. But it also means you can thread the needle through objects in some instances, and this runs shows some instances of that.


Whenever you are moving at more than 2 pixels/frame, geese spawn at the top of the screen. Their patterns are based on a fixed cycle, hitting them costs a lot of time, and avoiding them also costs time since you need to move up and down around them, costing you horizontal distance. So the best situation is when they don't get in your way at all. There are two ways to manipulate the geese. The first one is slowing down to avoid spawning them, but this is not practical for obvious reasons. The second, way more effective method shown in this run is using the difficulty switch. The right difficulty switch controls the number of geese that spawn, when switched it doubles the rate at which the game cycles through the geese patterns. So toggling it mid-game can be used to speed up or slow down where you are in the pattern cycle, making the geese spawn earlier or later. By using this strategically, you can avoid the geese ever getting in your way without slowing down.

feos: There's no reason to consider abusing difficulty switches of A2600 illegal. It is input that is just as valid as Reset. And games are supposed to handle it the way they want. It so happens that some games allow switching them during play and process this action like they normally do. It resembles how Reset can be explicitly rejected during saving to SRAM to prevent save corruption: games that allow this action passively let us corrupt our save data. TASing is not expected to avoid this like some sort of a cheat, just like we don't avoid Left+Right.
So while this run is fully legitimate, and it has some awesome research behind it, we're still only talking about a game with 2.4 entertainment rating. No matter how crazily you play it, you only get that. Which means this game can only exist in Vault. Which, in turn, means that there can only be one any% branch of it. We don't accept runs that avoid some technique for entertainment into Vault. And for this game, the fastest any% run is #5929: MrWint's A2600 Barnstorming in 00:14.74, which uses the same shenanigans with difficulty switching.
Rejecting this run for an unvaultable goal.

Last Edited by on 1/1/2022 6:13:44 PM
Page History Latest diff List Referrers