Refactor game::fire() to behave sensibly about trajectories.

Addresses #1152 and fixes flamethrowers, which seem to have stopped working at some point.