Escape From Pong rev 5
A 1K NES entry into the MiniGame 2003 Compo (http://www.ffd2.com/minigame/)
by Halley's Comet Software 
http://here.is/halleyscomet
http://hcs.freeshell.org/efp.html

Assembled with DASM by Matthew Dillon.
Written in edit.com

1,016 bytes of code and data.

Object:
Your goal, as a Ping Pong ball, is to avoid the paddles and other obstacles
to escape from the screen in 13 variously difficult levels.

Gameplay:
Levels consist of one paddle which always tries to stay in front of the ball.
There are also white walls which the ball will bounce off of and red walls
which will restart the level if you contact them.  If you get in the way of
a paddle the level will also restart, this is to prevent you from having the
paddle push you through a wall.  In order to advance to the next level you
must get the ball to leave the screen.
The early levels do not have gravity, but later levels do.
The difficulty level generally gets higher as the game progesses.
When you have completed all 13 levels the game will restart from level 1,
but the paddles will move faster. There is no way to actually "win" the game,
but then again there is no way to "lose".
I have personally played every level the first time through (with both control
configurations), but I don't know if it is even physically possible to beat it
again.

Controls:
The directional pad controls thrust.  Remember that the ball will accelerate
in the opposite direction of the button you press.

Note: The included file efpbw.nes has the controls reversed for those
      who think it is easier to play that way. 4 bytes are different.

Recommended Emulators:
loopyNES (runs well on older computers, the best alternative to Nesticle),
FCEU, nnnesterj, nestopia

NonRecommended Emulators:
Nesticle (scroll issues), Nester (colors are wrong)

Bugs:
In rare situations it is possible for the ball to get stuck inside the
paddle.

Due to an optimization of the controller code the start, select, a, and b
buttons also activate the thrust. This actually makes control quite a bit
easier (you can use both hands), but it is an unintended feature.
The directional buttons correspond to the other buttons as follows:
B = Up
A = Down
Select = Left
Start = Right

As of revision 5, the game now works on hardware (NTSC NES, at least).

History:
first release: er, it was the... first release?
revision 1: Nintendulator helped me find a bug, I had not set the
            interrupt flag. Only unusually accurate emulators (and the
            NES itself, I suppose) would have a problem with it.
revision 2: Fixed a glitch of the screen when loading a level by not
            enabling the screen in the middle of a frame, only required
            a slight reordering of commands. (this was the version entered
            in the MiniGame Compo)
revision 3: Released under a BSD license, some clarification to source,
            included reversed version
revision 4: Fixed bug with speed limitation in reversed version, added support
            for reversed gravity, added level 13, optimized palette loading
            so that file size did not change from rev 3
revision 5: Fixed to work on hardware (thanks to Memblers). Made gravity stable.

Based on concepts from:
* Pong
* Lunar Lander
* Some QBasic game (I remember finding it on AOL, it involved a bouncing ball)
* Several other games I've written (Rise of the Triangle, Cheese Reactor,
  Mushrong)

Why the file is so big:
The 1,016 bytes of the game are distributed as follows: 1,012 bytes at the
beginning, which make up the program, and 4 bytes at the end (the reset and
NMI vectors). The last two bytes, for the BRK/IRQ vector, are not used. No
iNES format ROM can be less than 16,400 bytes in size, all of the other bytes
are the iNES header (first 16) or filler.

Level data:
The levels are read from "scripts" as specified by comments in the source.
Level data begins at the label "level". Levels of up to 256 bytes and games of
unlimited size (within the restraints of 16KB of PRGROM) can be created and
should be fully supported by the physics engine.

License:
See the source or the included file LICENSE for details.
