Impossible Bullet Trick

From KeenWiki
Jump to navigation Jump to search

The Impossible Bullet Trick, presumably caused by a small bug in Keen's programming, allows Keen to ride on a bullet. This bug requires careful timing to exploit, and only works in Keen 6. It is not an officially documented trick as with the Impossible Pogo Trick, but named as such by fans upon its discovery due to its comparable difficulty and niftiness.

The trick allows the player to fly upwards, until hitting the ceiling or otherwise interrupting the manoeuvre (such as by jumping — although it is possible to walk a couple of pixels left and right before "falling off" the bullet). It can be very helpful in levels such as Bloogton Tower and getting the Grappling Hook in the First Dome of Darkness, although technically it is considered cheating.

Steps to reproduce

Impossible bullet.
Keen riding a purple bullet.

It takes some practice to get the timing right:

  1. Jump in the air.
  2. As you start to fall, shoot downward.
  3. If done correctly, when you land, you should be standing a tile above the ground.
  4. Shoot up, and you will fly up with your bullet.

If you are standing against a wall when you perform this trick, shooting into the wall will also raise you by a small amount.

It is also possible to ride the purple bullets produced by the laser cannons. When Keen stands under the invisible sprite that spawns the shots, follow the first three steps and don't shoot up. If there was no enemy bullet moving while Keen shot downward, he will ride the next purple bolt sideways without harm.

Technicalities

This bug was most likely introduced when code was added to let Keen get hit by his own shots after they are reflected by a Flect. The code was added right before some other code that handles collisions with platform objects. This is what the original C code might have have looked like:

[...]
  break;
case shotobj:
  if (hit->temp4 != 0)
  {
    ExplodeShot(hit);
    ChangeState(ob, &s_keenstunned);
  }
case platformobj:
  if (!gamestate.platform)
    ClipToSpriteTop(ob, hit);
  break;
[...]

It might not be obvious at first sight, but the code is missing a break; instruction right before the case platformobj: line, which means that each shot object also counts as a platform object as far as this code is concerned. This allows Keen to ride his own shots like any regular platform in the game.

The second part that allows this bug to be exploited as the Impossible Bullet Trick is the fact that the game will remember that Keen was riding the shot even after the shot explodes and gets removed from the game. When an object is removed, the game simply stops drawing and updating the object, but the object data itself, including the position and collision data, will still be intact. This prevents Keen from falling when the shot explodes. When a new shot is fired, the game re-uses the slot of the most recently removed object, which often is the same slot as the shot Keen was just standing on. As the new shot moves, Keen will move along with it, as the game assumes it is still the platform that Keen is standing on. This does not work for shooting left or right, as that will spawn the shot to the left or right of Keen, causing the game to act as if Keen walked (or was pushed) off the platform.

See also

The Impossible Bullet bug is used extensively in a walkthrough for Keen 6 in which the player gets no points, exploits various clipping errors, etc.