The Boguin Cannon

I recently played through the fun little platformer Owlboy (Steam) and became pretty enamored with it.

At one point in the game you've got the opportunity to do a "Boguin Cannon" challenge, where you're launched via cannon into this course where you only have the ability to swerve left or right, conserving momentum through various tunnels. Along the way are more rings you can fly through to acquire more coins (which by that point you're quite familiar with, of course).

The course is reasonably challenging, at least for someone as platforming-impaired as I am, so I decided to cheat and just use Linux's xdotool command to script a solution to the course which gets me all the rings. For ease of tweaking and management, I did it via a short little Python script which just builds an xdotool commandline and then executes it at the end.

Note that xdotool is only going to exist on Linux (or other UNIXy systems which use Xorg, though of course those systems wouldn't have an Owlboy port), so Windows and Mac users won't be helped out by this. You could take a look at the script for the timings (or below on this page) to plug into a similar utility on Win/Mac, though, assuming such a thing exists.

Here's the script: owlboy-cannon.py

As it says in the script itself, up near the top:

It expects the player to start right on top of the "Ranking" sign, on the ground to the right of the cannon, as if the player's just respawned after an unsuccessful attempt.

Limitations!

  1. Whether due to accuracy threshholds on 'sleep' commands, multiprocess timing issues, xdotool, Xorg, or possibly the game itself, this utility is NOT entirely consistent. There's one point at which you'll run into the wall maybe 20% of the time, and the very end is quite inconsistent as well (there's various fail conditions there). It appears to work enough of the time, though, and is certainly more consistent than *I* am. It may take a few runs to entirely make it through.
  2. I started this after a few manual attempts, when I'd already gotten a few of the initial groups of rings, so I'm not 100% sure that it does get all of them. Specifically, it looks to me like we might be a little too high for the "bottom" rings on the initial circle. Also the very last rings may end up getting missed 'cause I rejiggered the end after realizing I'd missed all the ones on the far wall, so I'm not sure if they're being hit properly anymore.

If you, too, are looking to cheat your way to 100% ring completion in Owlboy, but don't want to figure out running a Python script (but are running Linux, where xdotool is a thing), here's the resulting command that gets run:

xdotool sleep 3 \
    keydown w sleep 0.1 keyup w \
    sleep 0.1 \
    keydown w sleep 0.5 keyup w \
    keydown a sleep 0.35 keyup a \
    mousedown 3 sleep 0.1 mouseup 3 \
    sleep 0.2 \
    mousedown 3 sleep 0.1 mouseup 3 \
    sleep 0.3 \
    mousedown 1 sleep 0.1 mouseup 1 \
    sleep 5.8 \
    keydown d sleep 1.3 keyup d \
    sleep 0.5 \
    keydown a sleep 0.3 keyup a \
    sleep 0.5 \
    keydown a sleep 1.5 keyup a \
    sleep 3.75 \
    keydown a sleep 1.1 keyup a \
    sleep 0.2 \
    keydown a sleep 0.4 keyup a \
    sleep 0.1 \
    keydown a sleep 0.4 keyup a \
    sleep 0.1 \
    keydown a sleep 0.4 keyup a \
    sleep 1.7 \
    keydown a sleep 1.0 keyup a \
    sleep 0.4 \
    keydown a sleep 0.3 keyup a \
    sleep 1.0 \
    keydown d sleep 1.2 keyup d \
    sleep 1.1 \
    keydown d sleep 0.7 keyup d \
    sleep 1.0 \
    keydown d sleep 0.9 keyup d \
    sleep 0.5 \
    keydown d sleep 0.3 keyup d \
    sleep 1.7 \
    keydown d sleep 0.8 keyup d \
    sleep 0.5 \
    keydown d sleep 0.4 keyup d \
    sleep 0.2 \
    keydown d sleep 0.4 keyup d \
    sleep 1.8 \
    keydown a sleep 0.6 keyup a \
    sleep 0.4 \
    keydown a sleep 0.4 keyup a \
    sleep 0.4 \
    keydown a sleep 0.4 keyup a

Let me know if you've got questions, or comments!