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

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

1,021 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 12 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 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 12 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, 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.
Your thrust is slightly more powerful than gravity (when gravity is active).

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

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

Bugs:
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, but it is an unintended feature.
B = Up
A = Down
Select = Left
Start = Right

I have not tested the program on an actual NES, so it very well may not
work with the real hardware, but it works on every decent emulator I've
tried it with.

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.

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)

Things I had fully coded but took out due to space restraints:
* Little flames showing the ball's thrust
* Multiple paddles
* More levels
* Breakout style walls that disappear when you hit them

Things I wanted to do but didn't (due to space restraints):
* Imperfectly elastic walls, which slow the ball down when hit
* Music
* Pause
* Multiplayer (actually would be easy to implement)

Why the file is so big:
The 1,021 bytes of the game are distributed as follows: 1,017 bytes at the
beginning, which make up the program and header, 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 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.

Copyrights:
The source code and binary are (c) 2003 Halley's Comet Software.
They may be distributed or resued in any way without express permission so
long as credit is given to the author.