This shows off raft movement, jumps, and the cannon. I could have written it with just a simple loop, but this way was much more fun.
The program starts with the cannon's raft moving north. The cannon destroys the west-most + on the top row and then moves back again. After a couple jumps, the raft of +s start moving up (if possible), thus moving a new line into position if the last had all been destroyed by the cannon. A couple more jumps and the raft of .s starts moving toward the raft of +s. The .s are to slow program execution before the raft reaches its position. As the program flow leaves that raft to board the raft of +s, the current memory position is reset to 0 and the raft sent moving back to its former position. Program flow runs along the lines of the raft, incrementing the current memory position by one each time. Since another + gets destroyed each time through, we ultimately end up counting down from 99. After that raft, the program jumps the printing out " bottles of beer on the wall" before jumping back to the cannon raft and the process repeats.
What follows is a syntax highlighted version of the code. A source file that can be downloaded and run can be found here.
[~ ~=~ ~] o ]_ o_s_ o_f..............!a ++++++++++=========~ [o++++++++++========~_] ld[ [o++++++++++=======~_] = [o++++++++++======~_] $f [o++++++++++=====~_] ~@+s.j [o++++++++++====~_] o [o++++++++++===~_] [o++++++++++==~_] [o++++++++++=~_] ^ ^ ^ ^ ^ ^ ^ ^ [o++++++++++~_] 0 2 f 4 c 5 3 0 2 6 6 7 6 6 7 2 _#====v"v"v"v""v"v"v"v"k <6f> [_ l""=^"] " <6c>0 <66> " a " <61>v <20> " " <77> <62> " " <20> <65> " " <65> " j"^"^"^"-"^"^"^h 6 7 2 6 2 7 8 4 0 f 0 2 v v v v v v