REM PITMAN BY CCLX33 V1.0
DIM GLOBAL LV$(50), BOARD(12,9)
GLOBAL DIR
GAMEPAD 1

REM CONST
LADDER=1
GEM=2
CLAY=3
BLOCK=4
WALL=5
MAN=6
MANLADDER=7

INTRO:
TEXT 0,12,"BUTTON A: RESET"
TEXT 0,13,"BUTTON B: NEXT STAGE"
TEXT 0,14,"PAUSE: SELECT STAGE"


GOSUB BORDER
MAXLVL=22
GOSUB READ_LEVEL
DIR=0
LVL=1
PAUSE OFF
GOTO RESTART


SELECTLVL:
PAUSE OFF
LOCATE 6,10
INPUT LVL
KEYBOARD OFF


RESTART:
GOSUB DRAWLEVEL
WAIT 10


DO
  IF PAUSE THEN GOTO SELECTLVL
  IF BUTTON TAP(0,0) THEN
    GOTO RESTART
  ELSE IF BUTTON TAP(0,1) THEN
    LVL=LVL+1
    GOTO RESTART
  ELSE IF LEFT TAP(0) THEN
    DIR=0
    X1=MX-1
    GOSUB WALK
  ELSE IF RIGHT TAP(0) THEN
    DIR=1
    X1=MX+1
    GOSUB WALK
  ELSE IF UP TAP(0) AND BOARD(MX,MY)=MANLADDER THEN
    Y1=MY-1
    GOSUB CLIMB
  ELSE IF DOWN TAP(0) THEN
    Y1=MY+1
    GOSUB CLIMB
  END IF
  IF GEMS=0 THEN
    TEXT 5,5,"GOOD"
    WAIT 60
    LVL=LVL+1
    GOTO RESTART
  END IF
  WAIT 1
LOOP


CLIMB:
 IF Y1=0 OR Y1=9 THEN RETURN
 V1=BOARD(MX,Y1)
 IF V1<>0 AND V1<>LADDER THEN RETURN
 V0=BOARD(MX,MY)-MAN
 CALL DRAWPIC(MX,MY,V0)
 MY=Y1
 CALL DRAWPIC(MX,MY,V1+MAN)
 IF V1=LADDER THEN RETURN
 GOTO FALL


PUSH:
 OK=0
 X2=X1+(X1-MX)
 IF X2=0 OR X2=12 THEN RETURN
 V2=BOARD(X2,MY)
 IF V2>0 THEN RETURN
 CALL DRAWPIC(X2,MY,BLOCK)
 CALL DRAWPIC(X1,MY,0)
 OK=1
RETURN


WALK:
 IF X1=0 OR X1=12 THEN RETURN
 V1=BOARD(X1,MY)
 IF V1=WALL THEN RETURN
 IF V1=BLOCK THEN
   GOSUB PUSH
   IF OK=0 THEN RETURN
   V1=0
 END IF
 IF V1=CLAY THEN V1=0
 IF V1=GEM THEN
   GEMS=GEMS-1
   V1=0
 END IF

 V0=BOARD(MX,MY)-MAN
 CALL DRAWPIC(MX,MY,V0)
 MX0=MX
 MX=X1
 CALL DRAWPIC(MX,MY,V1+MAN)
 IF V1=LADDER THEN GOTO BLOCKFALL
 GOTO FALL

 
FALL:
 Y1=MY+1
 IF Y1=9 THEN GOTO BLOCKFALL
 V2=BOARD(MX,Y1)
 IF V2=GEM OR V2=LADDER OR V2=WALL OR V2=BLOCK OR V2=CLAY THEN GOTO BLOCKFALL
 CALL DRAWPIC(MX,MY,0)
 MY=Y1
 CALL DRAWPIC(MX,MY,MAN)
 WAIT 2
GOTO FALL


BLOCKFALL:
 FOR IY=7 TO 1 STEP -1
   FOR IX=1 TO 11
     V=BOARD(IX,IY)
     IF V=BLOCK OR V=GEM THEN
       Y2=IY
       GOSUB FALL1
     END IF
   NEXT IX
 NEXT IY
RETURN


FALL1:
 IF Y2=8 THEN RETURN
 IF BOARD(IX,Y2+1)<>0 THEN RETURN
 CALL DRAWPIC(IX,Y2,0)
 Y2=Y2+1
 CALL DRAWPIC(IX,Y2,V)
 WAIT 2
GOTO FALL1


BORDER:
FOR I=0 TO 12
  CELL I,0,WALL
  CELL I,9,WALL
NEXT I
FOR I=0 TO 9
  CELL 0,I,WALL
  CELL 12,I,WALL
NEXT I
RETURN


DRAWLEVEL:
 IF LVL<1 THEN LVL=1
 IF LVL>MAXLVL THEN LVL=MAXLVL
 L$=LV$(LVL)
 I=1
 GEMS=0
 FOR Y=1 TO 8
  FOR X=1 TO 11
   V=VAL(MID$(L$,I,1))
   CALL DRAWPIC(X,Y,V)
   IF V=MAN THEN
     MX=X
     MY=Y
   END IF
   IF V=GEM THEN GEMS=GEMS+1
   I=I+1
  NEXT X
 NEXT Y
 LOCATE 0,10
 PRINT "STAGE="+STR$(LVL)+"  "
RETURN


READ_LEVEL:
 FOR I=1 TO MAXLVL
   READ LV$(I)
 NEXT I
RETURN


SUB DRAWPIC(X,Y,V)
 BOARD(X,Y)=V
 IF V=5 OR V=4 THEN
   ATTR(0,)
 ELSE IF V=2 THEN
   ATTR(3,)
 ELSE
   ATTR(1,)
 END IF
 IF V=7 OR V=6 THEN ATTR(,DIR) ELSE ATTR(,0)
 CELL X,Y,V
END SUB


' Stage 1
DATA "0004000000015545055551100405000011063000000155550500001000050000012000000004155505550555"
DATA "0040000000000404000000005123000000051322000200513330333205100333005051000000650555555555"
DATA "0000605040000004151400000241512000023315122005211151550055555515200000000155005555555550"
DATA "0000040000002000300002031012545010002135254002031034320231016333403002055533132135233331"
DATA "5555555555542400005335444151053353330010533500215105335344001053352121510533510200165555"
' stage 6
DATA "0040000000006404000000133010000001003333111033332001542000030550442000050012450531015132"
DATA "0110400055501404006535014025515350140144153551502331535510011555355500515333535021155555"
DATA "3330500111133365203021333154032413441530354103415003041003151110310251555155101110000001"
DATA "0000400205315514015053105120150531051205505510514055001105553000511002005555110010060001"
DATA "0060005330204333152334023311543130303153331300401513313035310510131510303513330133133123"
' stage 11
DATA "0040010040000555100400000000004110055555434100111114041001323030312010420500110102105061"
DATA "3220052023334521051403135331053101353331050113033331014165113115423351410113433313330001"
DATA "0004000000000040000050011405551000143440000001403400000013033000206100400024055113000120"
DATA "0040060040011111311111100403040011032303230110353035301103330333011000101000110001010001"
DATA "4000554004330640030021153313330330240133030033331001030254015050004033333002031000001050"
' stage 16
DATA "1111100000012441420000142412440001242143210014241244100132214231005515124110252151111601"
DATA "1000000000113334333431103260324011033403420110322033301100320240011002443400110333303301"
DATA "0000003354515543133525150251435451104013354510033300333011533333441064040003350550505121"
DATA "0004000000005451455510004403600100233033001003501000010200300000105055555555050500000000"
DATA "0000533544000025555440000311153110040401200111434005001163340020011303300500111111115001"
' stage 21
DATA "3400000000036055555551032400000013032400000103032400001303032400010303032000130303030001"
DATA "1146400000010414000000104140000001054541000010040401000105505055001004040500210550505005"



#2:MAIN CHARACTERS
00000000000000000000000000000000
8181FF818181FF810000000000000000
1020408001020408081C3E7F7F3E1C08
00000000000000007EFFFFFFFFFFFF7E
020101010101837E7EFFFFFFFFFFFF7E
FFFDFFFFFFDFFFFF00FEFEFE00EFEFEF
3C7C5C78003C246C3C0C0C043C3C246C
BDFDDFF981BDFFED3C0C0C043C3C246C

