[comp.sys.handhelds] Blob, a monster-bashing game.

gt3398b@prism.gatech.EDU (DELANO,ANDREW DOUGLAS) (09/21/90)

If somebody feels like it, maybe they can modify this game for the 48.
I'm not quite familier enough with my 48sx to do it myself.



				thanks

					Andy

-- 
DELANO,ANDREW DOUGLAS
Georgia Institute of Technology, Atlanta Georgia, 30332
uucp:	  ...!{decvax,hplabs,ncar,purdue,rutgers}!gatech!prism!gt3398b
Internet: gt3398b@prism.gatech.edu

hptool@rigel.efd.lth.se (09/21/90)

Hello World!

I'm posting this game for a friend who doesn't have access to news.
Hope you like it!

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Hi!

In this game you stand face to face to
horrible monsters (called BLOBS). 
You are supposed to shoot as many BLOBS
as possible (with your bazooka)
before you end up between the bloody jaws of
a mini-BLOB.
This is how to play the game:
When you run the main program BLOB
you'll see a square in which you and
the BLOB get placed. The biggest of
the figures is the BLOB, the small
one is you.
Now you can move or fire 
by pressing:

NEXT	:move right
USER	:  "  down
SOLV 	:  "  left
LEFT	:  "  up
SHIFT 	:fire left
DEL	:  "  up
TRIG	:  "  right
CURSOR	:  "  down

You'll soon realise that something
else is happening between the irrescapable
walls - a mean monsterbaby has been born.
The longer you play the game the longer will
the babies be alive chasing you. Note that
you can't shoot any babies, only their parents.
In the end you can't escape anymore and the baby will
simply eat you up (you'll even hear it burp).	
Now you're dead meat.
To return from your results to the stack
press ENTER.

Before playing the game the first time you
must run the program DRW in order to create the
playfield.

Order your directory so that you'll have the 
BLOB - program to the left.
I hope you'll find the game worth being tested on your HP28S.

                            Rickard Petersson M89-LTH.
                            (Machine-engineers have more fun).

I've used this program to check the sums
(The things between the ""):

        CHECK  "1142"

<< RCLF STD HEX 64
STWS 48 CF SWAP RCL
->STR 16 STWS DUP
# 0h 1 ROT SIZE
FOR j OVER j j SUB
NUM R->B XOR RL
NEXT ->STR 3 OVER
SIZE 1 - SUB ROT
STOF SWAP DROP
>>

Here are the programs:
    
	BLOB  "5F5D"
  	
<< CLLCD FAST
SQUARE ->LCD 0 
'AGE' STO 0 'NBABY' STO
PMONST P LIST-> 7
DROPN 'Y' STO 'X' STO
.01 'HLTH' STO 0 'PTS'
STO MAKEKOORD DUP
'G' STO SWAP DUP
'H' STO R->C PIXEL
WHILE 1 REPEAT
  DO  .005 
  'HLTH' STO+ BIRTH
  BMOV BMOV
  UNTIL KEY END

	BCHK  "7C97"

<< G H R->C -> pl
  <<
    IF X Y R->C pl ==
    THEN 20 1 BEEP
    CLLCD PTMAX
    "GAME OVER" 1 DISP
    "YOU SHOT " PTS
    ->STR + " BLOBS" + 2
    DISP "BEST IS "
    MAXPT ->STR + 3 DISP
    "           PRESS ENTER"
    4 DISP  ENTER?
CLMF [ T S
HLTH P H G Q PTS HIT
X Y NBABY AGE ]
PURGE CLEAR ABORT
  END
  >>
>>

	BMOV  "8219"

<< IF NBABY 1 == AGE
50 < AND RAND HLTH < 
AND
THEN G X - DUP ABS
.0001 + / H Y - DUP
ABS .0001 + / X 3
ROLLD Y 3 ROLLD BLMV
100 .01 BEEP .5 + IP
`Y` STO .5 + IP `X`
STO BCHK
  ELSE
  IF AGE 50 >=
  THEN 0 `AGE` STO
X Y R->C 500 .01 BEEP
UNPIXEL 0 `NBABY` STO
    END
   END 1 `AGE` 
   STO+
>>

	PTMAX  "EE6F"

<< IF PTS MAXPT >=
THEN 1 4
START 2000 .1
BEEP
NEXT PTS `MAXPT`
STO
END
>>

	BIRTH  "83C0"

<< IF RAND HLTH <
NBABY 0 == AND 
THEN P LIST-> 7
DROPN `Y` STO `X`
STO 0 `AGE` STO 1
`NBABY` STO 100 .1
BEEP 
ELSE
IF NBABY 1 ==
AGE 5 <= AND
THEN BUM
END
END
>>

	TCHECK  "C00A"

<< S T R->C -> pl
<< P LIST-> 1 SWAP 2
/
START 
IF R->C pl ==
THEN S T EXPL
1 `HIT` STO REM
PMONST 1 `PTS`
STO+
  END
 NEXT
 >>
>>
            
	DRW  "D2FD"

<< CLLCD 0 31
FOR X 52 X R->C
PIXEL
NEXT 52 84
FOR X X 31 R->C
PIXEL
NEXT 31 0
FOR X 84 X R->C
PIXEL -1
STEP 84 52
FOR X X 0 R->C
PIXEL -1
STEP LCD-> 'SQUARE'
STO
>>


	SHOOT  "37B1"

<< -> X Y
<< 0 `HIT` STO 1000
.01 BEEP G X 2 / +
`S` STO H Y 2 / +
`T` STO
WHILE HIT 0 == 
REPEAT S T X Y
BLMV `T` STO `S` STO
TCHECK
END S T R->C
UNPIXEL
>>
>>

         EXPL  "8EC3"

<< -> X Y
<< X 1 + Y 5 + R->C
X 3 + Y 2 - R->C X 1
+ Y 3 + R->C X 4 - Y
1 - R->C X 3 - Y 3 +
R->C 30 .1 BEEP 5 0 
FOR T DUP PIXEL
T ROLLD T 10 * .01
BEEP -1 
STEP 1 5
START UNPIXEL
NEXT
>>
>>


        ENTER?  "1477"

<< DO
    DO
    UNTIL KEY
    END
   UNTIL "ENTER" SAME
   END
>>
    
	PMONST  "F4B9"

<< MAKEKOORD -> Y X
<< X Y X 1 + Y X Y
1 + X 1 + Y 1 + 8
->LIST `P` STO BUM
>>
>>

	REM  "63FA"

<< P LIST-> 1 SWAP 2 /
START R->C UNPIXEL
NEXT
>>

	BUM  "F9B2"

<< P LIST-> 1 SWAP 2 /
START R->C PIXEL
NEXT
>>

	MAKEKOORD  "24E2"

<< RAND 29 * IP 1 +
RAND 30 * 53 + IP
>>

	NEXTCOM  "31BE"

<< G H 2 0 BLMV `H`
STO `G` STO
>>

	SOLVCOM  "9809"

<< G H -2 0 BLMV `H`  
STO `G` STO
>>

	USERCOM  "2009"

<< G H 0 -2 BLMV `H`
STO `G` STO
>>

	LEFTCOM  "3BBE"

<< G H 0 2 BLMV `H`
STO `G` STO
>>

	CURSORCOM  "451C"

<<  0 -2 SHOOT
>>

	TRIGCOM  "252F"

<< 2 0 SHOOT
>>

	DELCOM  "312F"

<< 0 2 SHOOT
>>

	SHIFTCOM  "351D"

<< -2 0 SHOOT
>>

	BLMV  "AB88"

<<FAST -> a b x y
<< a b R->C UNPIXEL a
x + b y + 
IF OVER 68 - ABS
16 < OVER 15.5 - ABS
15.5 < AND
THEN R->C DUP
ELSE 1 'HIT' STO
a b R->C DUP
END PIXEL C->R
>>
>>	
         PPAR

{ (0,0) (136,31)
constant 1 (0,0) }

	MAXPT

  0

	UNPIXEL

This is Toonen's  programs which lead to the UNPIXEL - command.
This is a copy of the file.  

Subject: SYS, MAKE, ->PROG, PROG->, UNPIXEL programs for the HP28S

|							     |
| Forwarded for Eric Toonen, who doesn't have USENET access. |
|							     |

The SYSEVAL command does exactly what its name suggests:
It EVALuates a SYStem object.

Instead of writing programs like
	<< #A SYSEVAL #A SYSEVAL >>
You should be able to write
	<< System Object System Object >>
To do the same job.

Here are a small set of utilities and an example to generate those
System Objects. These will work on VERSION 2BB ONLY!
If you are not very interested in using SYSEVALS (and therefore SYS)
a lot, DO NOT type them in, because they can be extremely dangerous!

Please type them in exactly as they are written, because a typo
can cause a Memory Lost !!

First, save anything on stack you want to keep,
and type
----------------------------------------
					|
CLEAR HEX 64 STWS			| First, set correct modes
					|
<< #71BD SYSEVAL			| Make a temporary SYSEVAL-version
   #3E9D7 SYSEVAL			|  of SYS.
>>					|
'SYS' STO				| chk[A4C8]
					|
<< #200E SYSEVAL			| Make a temporary SYSEVAL-version
   #3EEB SYSEVAL			|  of MAKE.
>>					|
'MAKE' STO				| chk[1525]
					| ** BEWARE THAT THE STACK IS EMPTY
					|    AT THIS POINT !
					|
#71BD SYS				| Use SYS to generate two System 
#3E9D7 SYS				|  Objects on the stack
MAKE					| Use MAKE to generate them into
'SYS' STO				|  a program, and we have the new SYS!
					|
					| ** STACK MUST BE EMPTY NOW!
					|
#200E SYS				| Again, use SYS to get the System
#3EEB SYS				|  Objects
MAKE					| And collect them into a program
'MAKE' STO				| Called MAKE.
					| Stack must be empty
#C53B SYS				| Generate ->PROG program
#3EEB SYS				|
MAKE					|
'->PROG' STO				|
					| Stack must be empty
#78A6 SYS				| Generate PROG-> program
'PROG->' STO				| Because there is only one object,
					| there is no need to MAKE
----------------------------------------
Sorry, posting the checksums of the system-object programs is nonsense,
the checksum program doesn't see differences between System Objects. (Bob?)

Now, you will have four DANGEROUS programs. These can be very handy,
but can do enormous damage if you use them wrong.

What they do:
First, let me explain: Internally, lists and programs are stored in
almost the same way (a list-structure). With these programs, you
can do with programs what LIST-> and ->LIST do with lists,
and thus can put any sequence of objects in a program.

Why, you might ask, do I need this?
Well, System Objects cannot be typed in. Actually, System Object
appears on the screen, as soon as the display routines don't know
how to display it in another way, therefore, in-line machine code,
and actual system-objects are displayed as "System Object".

To make quick-n-dirty programs (that is, use Syseval addresses
that don't check arguments, instead of the user-functions),
you just generate their objects by using SYS, and collect them
into a program with MAKE or ->PROG. Because you cannot edit those
programs, they can be put on stack with PROG->.

PLEASE NOTE:
Sys, ->Prog and Prog-> DO NOT CHECK STACK-DEPTH and ARGUMENT TYPES.

Usage:

SYS (Generate system-objects)
	!!! Needs a binary integer in level 1. !!!
	Returns a System-Object in level 1.

	Example: 
		#A SYS
	 Returns a System Object, which can be EVAL'd. Try this!

MAKE (Generate program from stack)
	Takes total stack, and puts it into a program.
	If the stack is empty, the program will be empty.
	If there are no << and >> on stack, the program will
	 not have them either.

	Example1:
		CLEAR MAKE 5 SWAP
	 Generates an empty program, which is invisible for the user.
	Example2:
		CLEAR 2 5 { + } 1 GET MAKE
	 Generates the program 2 5 + (without << and >>)

->PROG (to program)
	!! Takes a real <n> from level1, and stack depth should be <n>+1 !!
	Returns a program with <n> objects.

	Example:
		2 5 { + } 1 GET 3 ->PROG
	 Generates the same program as in Example2 of MAKE.

PROG-> (program out)
	!! Takes a program in level1 !!
	Returns all objects separate to stack, and then the number of
	 objects.

	Example1:
		<< 2 5 + >> PROG->
	Example2:
		<< 2 5 + >> PROG-> ->PROG


Example using SYS and MAKE, generating an UNPIXEL function,
which is exactly compatible with PIXEL.

'UNPIXEL'
Type in the following, and check the checksum!
----------------------------------------------------------------

<< CLEAR { C->R } 1 GET
#2484B SYS #3D5F6 SYS #020E5 SYS #24927 SYS
#3D7F8 SYS #11D1D SYS 31
#020E5 SYS #11D82 SYS #020E5 SYS #3D815 SYS
#11D1D SYS 136
#020E5 SYS #11D82 SYS #3D6B8 SYS #3D682 SYS
#11D1D SYS #11D48 SYS #3D72C SYS #3D636 SYS
#11D1D SYS #11D48 SYS 31
#020E5 SYS #11D1D SYS #0206E SYS #11B17 SYS
#020E5 SYS #11B17 SYS #06CB9 SYS #3D636 SYS
#0C1DD SYS #0206E SYS #072E9 SYS #06E55 SYS
#020E5 SYS #3ECC2 SYS #06E55 SYS #06CB9 SYS
#3D65C SYS #06CB9 SYS #18A85 SYS #3DC5F SYS
#1ADF2 SYS #0211A SYS 
MAKE 'UNPIXEL' STO >>
'MUNPIXEL' STO

----------------------------------------------------------------
The checksum of MUNPIXEL is [8237]

(I have tried it again from this text, and am sure there are
no typo's)

-----------------------------------------------------------------------------
           Eric Toonen

Snailmail: Djept-Zuid 6	      | Hogeschool-Eindhoven: s89406143@hsepm1.hse.nl
           5502 RP Veldhoven  | (Not an uucp-address)
	   The Netherlands    | (Might work on SURFNET (?))
-----------------------------------------------------------------------------


	

You also need a program that sets the highest speed
on the calculator. Here is how to make it:
Type in this program (make sure that you doesn't do anything
wrong). This program will only work on version 2BB.

        MFAST  "D000"

<<
# 1FFF00F1F0302331h
# C8084612411310D5h
# 3B82h SYSEVAL
# 7195h SYSEVAL
# 44A4h SYSEVAL
>>

When you run it a "System Object" turns up.
Store this under the name FAST.
Now the highest speed will be set whenever you
run FAST.

hptool@rigel.efd.lth.se (09/21/90)

I forgot to say that the Blob program previously posted is for 
the HP28S.

Sorry for taking up bandwidth...

Fredrik Norrman
hptool@rigel.efd.lth.se

hptool@rigel.efd.lth.se (09/22/90)

*sigh*

There was a 'small' typo in the main program of the game...
The last rows were missing...


	BLOB  "5F5D"
  	
<< CLLCD FAST
SQUARE ->LCD 0 
'AGE' STO 0 'NBABY' STO
PMONST P LIST-> 7
DROPN 'Y' STO 'X' STO
.01 'HLTH' STO 0 'PTS'
STO MAKEKOORD DUP
'G' STO SWAP DUP
'H' STO R->C PIXEL
WHILE 1 REPEAT
  DO  .005 
  'HLTH' STO+ BIRTH
  BMOV BMOV
  UNTIL KEY END
  "COM" + STR->                  !These lines
  CLEAR END >>                   !were missing


Fredrik Norrman
hptool@rigel.efd.lth.se