 ' ******************************
 ' *        TRAP 'EM            *
 ' *                            *
 ' * Programed By,              *
 ' *                            *
 ' *   Richard Copeland, 1994   *
 ' *                            *
 ' *                            *
 ' ******************************
  
  DEFINT A-Z: CLS

'    ** TITLE & INSTRUCTINOS **
IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
 LOCATE , 36: PRINT "TRAP 'EM": LOCATE 3, 22: PRINT "Trapp the beasts before they get you!"
LOCATE 22, 20: PRINT "Programed By:  Richard Copeland, 1994"
  LOCATE 5, 32: PRINT "7"; SPACE$(6); CHR$(24); SPACE$(6); "9"
LOCATE , 34: PRINT "."; SPACE$(9); "."
LOCATE , 36: PRINT "."; SPACE$(5); "."
LOCATE 9, 32: PRINT CHR$(27); SPACE$(6); "5"; SPACE$(6); CHR$(26)
 LOCATE , 36: PRINT "."; SPACE$(5); "."
 LOCATE , 34: PRINT "."; SPACE$(9); ". "
  LOCATE 13, 32: PRINT "1"; SPACE$(6); CHR$(25); SPACE$(6); "3"
   LOCATE 15, 23: PRINT "You: "; CHR$(1); SPACE$(20); "Them: "; CHR$(42)
LOCATE 17, 9: PRINT "Move by pressing the keys on the numeric keypad as shown above."
 LOCATE , 15: PRINT "The 5 key stops you - byt don't sit still to long!": LOCATE , 20: PRINT "(Be sure that the NUM LOCK key is on)"
IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
170 CLEAR : DIM p(24, 80)
IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
' ** FILL ARRAY p WITH SCREEN LOCATIONS **
IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
  FOR I = 1 TO 80: FOR J = 1 TO 24: p(J, I) = ((I - 1) * 2) + ((J - 1) * 160): NEXT J: NEXT I
LOCATE 24, 1: PRINT SPACE$(26); "Press (ANY KEY) to continue"; : A$ = INPUT$(1)

' ** SET UP GAME **

CLS
Back:
IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
 LOCATE , , 1: PRINT "NUMBER OF BEAST (1-3): ";
DF$ = INKEY$: IF DF$ < "1" OR DF$ > "3" THEN GOTO Back ELSE PRINT DF$: DF = VAL(DF$): CLS : LOCATE , , 0

BackA:
IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
 PRINT "LEVEL OF DIFFICULTY (1-3): ";
EA$ = INKEY$: IF EA$ < "1" OR EA$ > "3" THEN GOTO BackA ELSE PRINT EA$: EA = VAL(EA$): CLS : LOCATE , , 0

' ** CHECK FOR CGA OR MONO CARD **
IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
 DEF SEG = 0: IF (PEEK(&H410) AND &H30) = &H30 THEN DEF SEG = &HB000 ELSE DEF SEG = &HB800

' **  PLACE OBSTACLES **
IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
 FOR I = 2 TO 79: POKE p(1, I), 205: POKE p(23, I), 205: NEXT I
  FOR I = 2 TO 22: POKE p(I, 1), 186: POKE p(I, 80), 186: NEXT I
POKE p(1, 1), 201: POKE p(1, 80), 187: POKE p(23, 1), 200: POKE p(23, 80), 188
 RANDOMIZE VAL(LEFT$(TIME$, 2)) + VAL(MID$(TIME$, 4, 2)) * 60 + VAL(RIGHT$(TIME$, 2))
  FOR I = 1 TO 400: A = INT(RND(1) * (78) + 2): B = INT(RND(1) * 21 + 2)
POKE p(B, A), 219: NEXT I

' ** PLACE BEASTS **
IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
 FOR I = 1 TO DF

BackB:
IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
  V(I) = INT(RND(1) * 21 + 2): H(I) = INT(RND(1) * (78) + 2): IF PEEK(p(V(I), H(I))) <> 32 THEN GOTO BackB
   FOR J = 1 TO 20: POKE p(V(I), H(I)), 32: FOR K = 1 TO 20: NEXT K: POKE p(V(I), H(I)), 42: SOUND 200 * I, .4: FOR K = 1 TO 20: NEXT K: NEXT J: NEXT I

' ** PLACE OUR HERO A REASONABLE DISTANCE FROM BEASTS **

BackC:
IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack": CHAIN "Games\Trapem"
 V1 = INT(RND(1) * 21 + 2): H1 = INT(RND(1) * (78) + 2): IF PEEK(p(V1, H1)) <> 32 THEN GOTO BackC
  FOR I = 1 TO DF: D(I) = (V(I) - V1) ^ 2 + (H(I) - H1) ^ 2: NEXT I
FOR I = 1 TO DF: IF D(I) < 226 - 30 * (DF - 1) THEN GOTO BackC
 NEXT I
  FOR J = 1 TO 20: POKE p(V1, H1), 32: FOR K = 1 TO 20: NEXT K: POKE p(V1, H1), 1: SOUND 800, .4: FOR K = 1 TO 20: NEXT K: NEXT J

' ** MAIN PROGRAM **

BackD:
IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
 X$ = INKEY$: Y = RND(-RND(1)): IF X$ = "" THEN GOTO BackD
    ST! = TIMER: LOCATE 24, 1: PRINT "TIME:";
480 GOSUB 1560: COUNT = 0
 FOR Z = 1 TO 4 - EA: GOSUB 520: NEXT Z: FOR N = 1 TO DF: GOSUB 1160: NEXT N
  SOUND 32767, 2: GOSUB 480
 
' ** CHECK FOR KEY PRESS **

IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
520 K$ = INKEY$: IF K$ <> "" THEN X$ = K$
  ON INSTR("84623179", X$) GOSUB 560, 650, 740, 830, 920, 950, 980, 1010
RETURN

' ** MOVE HERO AND PUSH OBSTACLES **

IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
560 IF PEEK(p(V1 - 1, H1)) = 32 THEN POKE p(V1, H1), 32: POKE p(V1 - 1, H1), I: V1 = V1 - 1: RETURN
  IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
  Y = 0
IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
FOR I = V1 - 1 TO 1 STEP -1: IF PEEK(p(I, H1)) = 32 THEN Y = I: I = 1: GOTO 600
 IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
 IF PEEK(p(I, H1)) = 42 THEN I = 1
600 NEXT I
IF Y = 0 THEN RETURN
 FOR I = Y TO V1 - 2: POKE p(I, H1), 177: NEXT I
  POKE p(I, H1), 1: POKE p(V1, H1), 32
V1 = V1 - 1: RETURN
650 IF PEEK(p(V1, H1 - 1)) = 32 THEN POKE p(V1, H1), 32: POKE p(V1, H1 - 1), 1: H1 = H1 - 1: RETURN
   Y = 0
 FOR I = H1 - 1 TO 1 STEP -1: IF PEEK(p(V1, I)) = 32 THEN Y = I: I = 1: GOTO 690
IF PEEK(p(V1, I)) = 42 THEN I = 1
690 NEXT I
  IF Y = 0 THEN RETURN
FOR I = Y TO H1 - 2: POKE p(V1, I), 177: NEXT I
  POKE p(V1, I), 1: POKE p(V1, H1), 32
 H1 = H1 - 1: RETURN
740 IF PEEK(p(V1, H1 + 1)) = 32 THEN POKE p(V1, H1), 32: POKE p(V1, H1 + 1), 1: H1 = H1 + 1: RETURN
Y = 0
 FOR I = H1 + 1 TO 80: X = PEEK(p(V1, I)): IF X = 32 THEN Y = I: I = 80: GOTO 780
  IF X = 42 THEN I = 80
780 NEXT I
 IF Y = 0 THEN RETURN
  FOR I = Y TO H1 + 2 STEP -1: POKE p(V1, I), 177: NEXT I
POKE p(V1, I), 1: POKE p(V1, H1), 32
 H1 = H1 + 1: RETURN
830 IF PEEK(p(V1 + 1, H1)) = 32 THEN POKE p(V1, H1), 32: POKE p(V1 + 1, H1), 1: V1 = V1 + 1: RETURN
   Y = 0
FOR I = V1 + 1 TO 23: X = PEEK(p(I, H1)): IF X = 32 THEN Y = I: I = 23: GOTO 870
 IF X = 42 THEN I = 23
870 NEXT I
IF Y = 0 THEN RETURN
 FOR I = Y TO V1 + 2 STEP -1: POKE p(I, H1), 177: NEXT I
  POKE p(I, H1), 1: POKE p(V1, H1), 32
V1 = V1 + 1: RETURN
IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
920 IF PEEK(p(V1 + 1, H1 + 1)) = 32 THEN POKE p(V1, H1), 32: POKE p(V1 + 1, H1 + 1), I: V1 = V1 + 1: H1 = H1 + 1: RETURN
  VS = 1: HS = 1: X = 22 - V1: IF H1 > V1 + (57) THEN X = (79) - H1
IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
GOTO 1040
IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
950 IF PEEK(p(V1 + 1, H1 - 1)) = 32 THEN POKE p(V1, H1), 32: POKE p(V1 + 1, H1 - 1), 1: V1 = V1 + 1: H1 = H1 - 1: RETURN
  VS = 1: HS = -1: X = 22 - V1: IF H1 < 24 - V1 THEN X = H1 - 2
GOTO 1040
IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
980 IF PEEK(p(V1 - 1, H1 - 1)) = 32 THEN POKE p(V1, H1), 32: POKE p(V1 - 1, H1 - 1), 1: V1 = V1 - 1: H1 = H1 - 1: RETURN
  VS = -1: HS = -1: X = V1 - 2: IF H1 < V1 THEN X = H1 - 2
 GOTO 1040
IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
1010 IF PEEK(p(V1 - 1, H1 + 1)) = 32 THEN POKE p(V1, H1), 32: POKE p(V1 - 1, H1 + 1), 1: V1 = V1 - 1: H1 = H1 + 1: RETURN
  VS = -1: HS = 1: X = V1 - 2: IF V1 > (81) - H1 THEN X = (79) - H1
GOTO 1040
1040 Y = 0
  FOR I = 1 TO X
IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
IF PEEK(p(V1 + VS * I, H1 + HS * I)) = 32 THEN Y = I: I = X: GOTO 1080
 IF PEEK(p(V1 + VS * I, H1 + HS * I)) = 42 THEN RETURN
1080 NEXT I
IF Y = 0 THEN RETURN
 FOR I = Y TO 2 STEP -1
  POKE p(V1 + VS * I, H1 + HS * I), 177
NEXT I
 POKE p(V1, H1), 32: V1 = V1 + VS: H1 = H1 + HS: POKE p(V1, H1), 1
  RETURN

' ** MOVE BEASTS **
IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
1160 FOR J = -1 TO 1: FOR K = -1 TO 1: IF PEEK(p(V(N) + J, H(N) + K)) = 1 THEN GOTO 1450
  NEXT K: NEXT J
Y = -1: IF V1 > V(N) THEN Y = 1
 IF V1 = V(N) THEN 1230
  X = RND(1): IF X < .6 THEN 1250
Y = Y * -1: IF X > .75 THEN Y = 0
 GOTO 1250
IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
1230 Y = 0: X = RND(1): IF X < .25 THEN Y = 1: GOTO 1250
IF X > .75 THEN Y = -1
1250 V = V(N) + Y
  Y = -1: IF H1 > H(N) THEN Y = 1
 IF H1 = H(N) THEN 1310
X = RND(1): IF X < .7 THEN 1330
 Y = Y * -1: IF Y > .8 THEN Y = 0
  GOTO 1330
1310 Y = 0: X = RND(1): IF X < .25 THEN Y = 1: GOTO 1330
 IF X > .75 THEN Y = -1
1330 H = H(N) + Y
IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
IF PEEK(p(V, H)) = 32 THEN POKE p(V(N), H(N)), 32: POKE p(V, H), 42: V(N) = V: H(N) = H: RETURN
 IF PEEK(p(V, H)) = 1 THEN V(N) = V: H(N) = H: GOTO 1450
  A = 1: B = -1: IF V1 > V(N) THEN B = 1: A = -1
FOR J = B TO A STEP A
 Z = 1: D = -1: IF H1 > H(N) THEN Z = -1: D = 1
  FOR K = D TO Z STEP Z
IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
IF PEEK(p(V(N) + J, H(N) + K)) = 1 THEN V = V(N) + J: H(N) = H(N) + K: GOTO 1450
 IF PEEK(p(V(N) + J, H(N) + K)) = 32 THEN POKE p(V(N), H(N)), 32: V(N) = V(N) + J: H(N) = H(N) + K: POKE p(V(N), H(N)), 42: RETURN
  NEXT K: NEXT J: COUNT = COUNT + 1: IF COUNT = DF THEN 1490: ' ** WIN **
RETURN

' ** LOSE **

IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
1450 POKE p(V(N), H(N)), 32: POKE p(V1, H1), 42: PLAY "MBT180O1GG8.G8GB-8.A8A8.G8G8.F#8G2"
  FOR I = 1 TO 10: POKE p(V1, H1), 42: SOUND 32767, 1: NEXT I
GOSUB 1560: LOCATE 24, 15, 1: PRINT "You lose! "; : GOTO 1510

' *** WIN ***
IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
1490 PLAY "MBT180O2GF#8G8AG8A8B>DG2GED8<B8AG"
  GOSUB 1560: LOCATE 24, 15, 1: PRINT "You win!";
1510 PRINT "  Play again? (Y/N): ";
1520 A$ = INPUT$(1): IF INSTR("YNyn", A$) = 0 OR A$ = CHR$(13) THEN 1520
  IF A$ = "Y" OR A$ = "y" THEN GOTO 170
COLOR 7, 0: CLS : CLS : PRINT "Please Wait...": CHAIN "MoneyCga"

' ** UPDATE TIME **
IF FRE(-2) < 10 THEN CLS : PRINT "<ERROR>...": PRINT "Sorry to interupt...": PRINT "Game Now Over!": PRINT "Due to computer stack space time up!!": CHAIN "Games\Trapem"
1560 TI! = TIMER - ST!: LOCATE 24, 7: PRINT RIGHT$("0" + MID$(STR$(INT(TI! / 60)), 2), 2) + ":" + RIGHT$("0" + MID$(STR$(TI! MOD 60), 2), 2); : RETURN

