Piper Documentation
-------------------

[ PIPER staat in de SCHIP directory !! ]

H. Piper version 2.0
====================

Changes:	- CURVED CORNERS!!! 
		- resume game ability!
		- most randomness removed

RESUME:  Between jobs (i.e. while at the dripping faucet wait
	 screen) you can press the decimal (.) key to leave
	 the game and go to the regular calculator mode.  The
	 total score and level you achieved will be stored in
	 the user flags so that next time you start the game,
	 you will resume the game as you left it.  Do not
	 run the SCORE program or you will lose the resumable
	 state.

RANDOM:  The starting pipe for the first level is still 
	 placed randomly.  For subsequent levels, however,
	 the starting pipe is located on the grid site
	 you "leaked" on with the starting direction opposite
	 of that you entered.  If you leaked onto the border,
	 then the starting pipe is placed on the site you
	 leaked from.
	 The first five pipes in the queue are selected 
	 randomly.  Placing a pipe on the grid with the (7)
	 key will still randomly select a new pipe to put at
	 the top of the queue.  If you press (4) to place
	 a pipe, the pipe at the top of the queue will be
	 the one currently displayed between the score and
	 level indicators.

Development Notes:  It is really funny how work involved on
	each aspect of this last update was inversely proportional
	to what I expected.  The rounded corners were much, much
	easier to implement than I thought.  It does increase the
	code size by a hefty chunk, but it took little work.  The
	derandomization of the starting pipe was an absolute
	b:tch.  I had to extensively recode several procedures
	and add some complex testing just to make sure you didn't
	end up having a starting pipe going into a border.

Program Size:  I have put a semi-rigid limit of 2K on the size
	of the program.  Any improvement that will put it over
	that barrier just won't be worth it. (I will of course
	probably eat these words later.)

----

SCORE program to read last games score and level
from the user flags:

%%HP: T(3)A(D)F(.);
\<< RCLF 2 GET
# FFFFFFh AND DUP
# FFFFh AND DUP
# FFh AND SWAP
# 100h / # 64h * +
B\->R SWAP # 10000h /
# 2h - # 4h / # 14h
SWAP - B\->R 1 - RCLF
2 # 0h PUT STOF
\>>
