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