Tursi Posted January 29, 2012 Share Posted January 29, 2012 Bill Gaskill managed to find this old, old title of mine in his archives, rescued from some BBS archive, soon to be released as part of his Altman disk series. I thought this was a nice short one to paste here. According to the comments, I originally wrote this in 1987, and I definately remember writing it, although I thought it was TI BASIC (it's actually Extended BASIC). In 1987 I was just 15, so that means I wrote this in the haunted house I lived in in Summerland BC before I even had my driver's license. The comments also say it was updated six years later by Jeff Brown and Lucie Dorais, who are no doubt responsible for the rather professional presentation. I must have uploaded it to the Ottawa BBS. I'm not convinced it's bug-free, it seems to redraw the screen inexplicably sometimes, but it's a somewhat fun, if simple puzzler - the goal is to scale the cliff. Every move must land your climber on a handhold and not a blank piece of cliff. You can 'jump' over a blank square by holding the fire button. Have a looksee. Recommend NOT playing in Overdrive. 100 ! ***** CLIFF CLIMBER **** M. Ward 1987 / rev. J. Brown/L. Dorais Feb. 1993 / Ottawa UG 110 DIM SC(2),L(2),M(2),SCR$(23),DIFF$(3):: CALL COLOR(13,2,15) 120 GOTO 150 :: A$,AL,C,CDIF,DIFF,DIFL,G,HS,J,K,NP,P,Q,R,RC,RM,RR,S,X,Y,Z :: CALL CLEAR :: CALL SCREEN :: CALL KEY :: CALL JOYST 130 CALL CHAR :: CALL HCHAR :: CALL GCHAR :: CALL COLOR :: CALL SPRITE 140 CALL LOCATE :: CALL POSITION :: CALL COINC :: CALL PATTERN :: CALL MOTION :: CALL DELSPRITE :: CALL SOUND :: [email="!@P"]!@P[/email]- 150 DIFF$(0)="EASY" :: DIFF$(1)="INTERMEDIATE" :: DIFF$(2)="PROFESSIONAL" :: DIFF$(3)="IMPOSSIBLE!" 160 CALL CHAR(128,"0008142242420100",129,"",140,"FFFFFFFFFFFF8080",141,"8080808080808080",142,"F0F0FEFEFEFE8E8E")!mountain, winner flag 170 CALL CHAR(64,"005A5A3C18182442",130,"0058583C1A7A4402",131,"001A1A3C585E2240",132,"003C7E7E7E7E3C")! man, rock 180 CALL CLEAR :: CALL SCREEN(15):: DISPLAY AT(1,7):"CLIFF CLIMBER" :: IF AL THEN 200 ELSE AL=1 190 DISPLAY AT(5,1):"Use Joystick #1": :"JUMP ROW with FIRE button": :"RELEASE ALPHA-LOCK..." :: ACCEPT AT(9,24):A$ 200 DISPLAY AT(5,1):"HIGH SCORE:";HS: :"LAST SCORE PLAYER 1:";SC(1): :"LAST SCORE PLAYER 2:";SC(2) 210 DISPLAY AT(15,1):"Press <SPACE> to change":"DIFFICULTY level": : :"Press <1> or <2> for number":" of PLAYERS": :"Press <Q> to QUIT" 220 DISPLAY AT(13,1):"DIFFICULTY: "&DIFF$(DIFL):: CDIF=DIFF 230 CALL KEY(0,K,S):: IF S=0 THEN 230 :: IF K=81 OR K=113 THEN END 240 IF K<>32 THEN 250 ELSE DIFL=DIFL+1 :: IF DIFL>3 THEN DIFL=0 :: GOTO 220 ELSE 220 250 IF K<49 OR K>50 THEN 230 ELSE DIFF=20+DIFL*20 :: IF DIFF=CDIF THEN 300 260 DISPLAY AT(24,1)ERASE ALL:DIFF$(DIFL)&" mountain data" :: RANDOMIZE 270 FOR R=1 TO 23 :: SCR$(R)="" :: FOR C=1 TO 28 :: G=129+(INT(RND*100)>DIFF) 280 SCR$(R)=SCR$(R)&CHR$(G):: NEXT C :: DISPLAY AT(24-R,1):SCR$(R):: NEXT R 290 ! ===== start ===== 300 L(1),L(2)=1 :: NP=K-48 :: SC(1),SC(2)=0 :: M(1),M(2)=5 :: Q=-1 310 FOR P=1 TO NP :: IF M(P)=0 THEN 600 320 CALL CLEAR :: CALL SCREEN(3):: CALL HCHAR(1,3,64,M(P)-1) 330 DISPLAY AT(1,9):"LEVEL";L(P):: IF NP=2 THEN DISPLAY AT(1,21):"PLAYER";P 340 FOR X=220 TO 880 STEP 110 :: CALL SOUND(50,X,0):: NEXT X :: FOR X=880 TO 220 STEP -110 :: CALL SOUND(-100,X,0):: NEXT X 350 RANDOMIZE :: FOR R=24 TO 2 STEP -1 :: C=INT(RND*23)+1 :: DISPLAY AT(R,1):SCR$(C):: NEXT R ! mountain 360 C=INT(RND*27)+3 :: CALL GCHAR(24,C,G):: IF G=129 THEN 350 ELSE CALL SPRITE(#1,130,2,185,C*8-7):: R=24 ! man at bottom 370 RC=INT(RND*216)+17 :: RM=INT(RND*10)+5*L(P):: CALL SPRITE(#2,132,2,9,RC,RM,0)! rock 380 ! ===== climb ===== 390 CALL JOYST(1,X,Y):: IF X=0 AND Y=0 THEN 480 400 J=1 :: CALL KEY(1,K,S):: IF K=18 THEN J=2 ! jump one row with fire 410 CALL COINC(ALL,Z):: IF Z THEN 550 420 R=R-SGN(Y)*J :: IF R>=25 THEN R=24 430 SC(P)=SC(P)+Y :: IF R<=1 THEN 520 440 C=C+SGN(X)*J :: IF C>2 OR C<31 THEN 460 ELSE C=C-SGN(X)*J 450 CALL COINC(ALL,Z):: IF Z THEN 550 460 CALL GCHAR(R,C,G):: CALL SOUND(-10,-6,0):: CALL PATTERN(#1,130+(Q=-1)*-1):: Q=-Q 470 CALL LOCATE(#1,R*8-7,C*8-7):: IF G<>128 THEN 550 ! climb 480 CALL COINC(ALL,Z):: IF Z THEN 550 ELSE CALL POSITION(#2,RR,RC):: IF RR<193 THEN 500 ELSE CALL DELSPRITE(#2)! check rock row 490 RC=INT(RND*216)+17 :: RM=INT(RND*10)+5*L(P):: CALL SPRITE(#2,132,2,9,RC,RM,0)! change rock column/speed 500 CALL COINC(ALL,Z):: IF Z THEN 550 ELSE 390 510 ! ===== wins level ===== 520 CALL DELSPRITE(ALL) 530 FOR X=330 TO 770 STEP 110 :: CALL SOUND(-500,X,0):: NEXT X :: L(P)=L(P)+1 :: IF L(P)>15 THEN 620 ELSE 320 540 ! ===== man falls (hit by rock or reaches hole) ===== 550 CALL MOTION(#1,20,0) 560 CALL POSITION(#1,R,C):: IF R<193 THEN CALL SOUND(-100,320-R,0):: GOTO 560 ELSE CALL DELSPRITE(ALL)! man falls 570 M(P)=M(P)-1 :: IF M(P)<>0 THEN 600 :: CALL HCHAR(8,10,32,12):: CALL HCHAR(9,10,32,12):: CALL HCHAR(10,10,32,12) 580 DISPLAY AT(9,9)SIZE(-10):"GAME OVER!" :: IF NP=2 THEN DISPLAY AT(12,9)SIZE(-10):" PLAYER "&STR$(P)&" " 590 FOR X=1 TO 20 :: CALL SOUND(-100,RND*200+110,0):: NEXT X :: IF HS>SC(P)THEN 600 ELSE HS=SC(P) 600 NEXT P :: IF M(1)=0 AND M(2)=0 THEN 180 ELSE IF M(1)=0 AND NP=1 THEN 180 ELSE 310 610 ! ===== total win ===== 620 FOR R=1 TO 6 :: DISPLAY AT(R,1):RPT$(CHR$(128),R):: NEXT R :: DISPLAY AT(3,:"CONGRATULATIONS!" 630 CALL HCHAR(6,10,64):: CALL HCHAR(5,11,140):: CALL HCAR(6,11,141) 640 IF NP=1 THEN A$=" YOU WIN!" ELSE A$="PLAYER "&STR$(P)&" WINS" 650 Q=-1 :: DISPLAY AT(5,11)SIZE(-13):A$ :: DISPLAY AT(24,1):" Press FIRE or ANY KEY..." 660 Q=-Q :: CALL SOUND(-100,RND*800+110,0):: CALL HCHAR(5,11,140+Q=-1)*-2) 670 CALL KEY(0,K,S):: CALL KEY(1,X,Y):: IF S=0 AND Y=0 THEN 660 680 IF HS>SC(1)THEN 690 ELSE HS=SC(1) 690 IF HS>SC(2)THEN 180 ELSE HS=SC(2):: GOTO 180 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.