Jump to content
IGNORED

Port of Aardvark Software's Quest


mindlord

Recommended Posts

Here's a pretty rough port of the game Quest by Aardvark Software to the TI. There was supposedly an official port, but it appears to have been lost to time. This is based off the MC-10 basic source. I didn't fancy it up too much, but it should be playable, but it's SLOOOOOOW. There are probably bugs since I didn't test it thoroughly. I plan on adding some nice graphics and sound, but don't have time at the moment. I'm throwing it in here so I don't forget about it. :D

1 CALL CHAR(96,"0042000840002000")
2 CALL CHAR(104,"55084421085104AA")
3 CALL CHAR(112,"1A121A3E585414161C145AB5FFB5FFB500183C3E77E3C3C300048CCAADC7BDD7")
4 CALL CHAR(116,"081C3E141C141C1C0042E7427E7E666660F0406A7F5B7F7F5A7E24BEFFE7C3C3")
5 CALL CHAR(120,"9888BCDA9A28286C58485C774A5D545A9AAA9AFC98BCA4660018083C5A181436")
6 CALL CHAR(124,"000000829254FF00060F0256FED6FEFE")
7 CALL CHAR(128,"01030517193E77DB88CCDC6CB6FA7EBF")
8 DATA 1,15,2,2,15,2,3,15,2,4,15,2,5,15,2,6,15,2,7,15,2,8,15,2
9 DATA 9,4,3,10,6,5,11,2,3,12,2,3,13,7,3,14,2,3
10 FOR C=1 TO 14::READ CS,CF,CB::CALL COLOR(CS,CF,CB)::NEXT C
11 DIM D$(9),O$(17),D(28,4),O(17,6)::CALL CLEAR:: CALL SCREEN(2)
12 GOSUB 13000
15 CALL KEY(0,K,S)::IF S=0 THEN X=(RND*100)::GOTO 15
20 CALL CLEAR:(17,1)=INT(RND*155)+100::SP=INT(RND*6)+1::ST=INT(RND*10)+1::CH=INT(RND*6)+1::M=10::MC=6::BQ=96::S1=BQ::SW1=INT(RND*10)::SW2=INT(RND*20)
30 DO$="WANT TO"::W$="WHICH ITEM?"::E$="DON'T HAVE ANY!"::H$="HOW MANY?"::M$="DON'T HAVE THAT MANY!"
31 Y$="YOU'RE WASTING MY TIME!"::R$="THEY ATTACKED ANYWAY!"
40 DATA 117CASTLE,115RUIN,114CAVE,116TOWER,113CITY,123PILGRIMS,121WIZARDS,122OGRES,120SOLDIERS
50 DATA SIEGE TOWERS,SMALL BOAT,GRAPPLING HOOKS,OIL LAMPS,AXES,SHOVELS,ROPE,LEATHER JERKINS,CHAIN MAIL,PLATE ARMOR,SHIELDS
51 DATA BROAD SWORDS,LONG BOWS,CROSSBOWS,RATIONS,LARGE KEY,GOLD COINS
60 DATA 1500,2500,0,150,255,0,15,30,0,5,20,0,10,30,0,10,20,0,15,25,0,15,40,2,25,60,4,50,100,8,3,20
61 DATA 2,10,50,5,11,50,5,18,40,4,4
62 DATA 15,0,1,5,0,0.25,1,0
70 FOR I=1 TO  9 :: READ D$(I)
71 NEXT I
72 FOR I=1 TO 17 :: READ O$(I)
73 NEXT I
74 FOR I=1 TO 17 
75 FOR J=2 TO 4 
76 READ O(I,J) 
77 NEXT J 
78 NEXT I
80 DATA 117,116,114,115,117,116,114,115,117,116,114,115,117,116,114,115,117,116,114,115,123,123,121,122,120,120
83 CALL CLEAR::DISPLAY AT(10,15):"PLEASE WAIT"
85 D(1,1)=113:(2,1)=113:(1,2)=INT(RND*6)+1:(2,2)=INT(RND*6)+9:(1,3)=INT(RND*30)+1:(2,3)=INT(RND*30)+1
86 FOR I=3 TO 28:(I,4)=1::READ D(I,1)
90 D(I,2)=INT(RND*14)+1:(I,3)=INT(RND*30)+1::IF D(I,2)=8 THEN 90
95 FOR J=1 TO I::IF D(I,2)=D(J,2) THEN IF D(I,3)=D(J,3) THEN IF J<>I THEN 90
100 NEXT J
101 NEXT I
102 FOR I=8 TO 14::IF (RND*10)>5 THEN O(I,1)=(RND*
110 NEXT I:(15,1)=INT(RND*25)+15::A=INT(RND*7)+1::B=INT(RND*31)+1::GOSUB 9000
120 F1=1::GOSUB 3030::GOSUB 6100
999 ! ===== MAIN GAME LOOP
1000 GOSUB 5900::EG=EG+1::IF DF THEN 1008
1004 Q=1::F1=1::GOSUB 3030::GOSUB 6100::IF TW<=M*100 THEN 1008
1005 DISPLAY AT(24,1) SIZE(31):"CARRYING TOO MUCH!";::CALL WAIT(1000)::GOSUB 3000::GOSUB 9000::GOTO 1000
1008 DISPLAY AT(24,1) SIZE(31):"WHAT NOW SIRE?";::A$="IUNSEW"
1009 GOSUB 2000::IF Q=0 THEN 1009
1021 IF Q=1 THEN GOSUB 3000 :: GOSUB 9000
1022 IF Q=2 THEN GOSUB 5000 :: GOSUB 9000
1023 OA=A::OB=B
1030 IF Q=3 AND A>1 THEN A=A-1
1040 IF Q=4 AND A<15 THEN A=A+1
1050 IF Q=5 AND B<32 THEN B=B+1
1060 IF Q=6 AND B>1 THEN B=B-1
1065 IF A<>8 OR O(2,1)>0 THEN 1070
1066 DISPLAY AT(24,1) SIZE(31):"YOUR MEN CAN'T SWIM!";::CALL WAIT(1000)::A=A-1::IF Q=3 THEN A=A+2
1067 GOTO 1000
1070 F=F+1:=O(15,1)-INT(M/2)::IF F<10 THEN 1084
1071 F=0
1076 O(15,1)=P::IF P<M THEN DISPLAY AT(24,1) SIZE(31):"FOOD LOW!";::CALL WAIT(1000)::IF O(15,1)<0 THEN O(15,1)=0
1080 IF P<INT(M/2) THEN P=INT((RND*M)+1)/3):: DISPLAY AT(24,1) SIZE(31);"MEN DIED!";::M=M-P::CALL WAIT(1000)
1084 MC=MC+1:: FOR I=1 TO 28::IF A=D(I,2) THEN IF B=D(I,3) THEN 7000
1090 NEXT I:: CALL GCHAR(A,B,TS1):: IF TS1<>112 THEN CALL GCHAR(A,B,S1)
1099 ! ===== SET LOCATION FLAGS
1100 DF=0::SWF=0::MF=0:: DISPLAY AT(24,1) SIZE(31):"YOU ARE IN THE ";::B$="WILDERNESS"::IF A=8 THEN B$="RIVER"
1120 IF B>18 THEN IF A<8 THEN B$="MOUNTAINS"::MF=1::F=F+.5
1130 IF S1=125 THEN B$="SWAMP"::SWF=1
1140 IF S1=220 THEN DISPLAY AT(23,1):"SHADOW OF";::CALL WAIT(1000):: DISPLAY AT(24,1) SIZE(31):"THE DREADED MORLOCK'S TOWER!";::CALL WAIT(1000)::GOTO 6000
1170 DISPLAY AT(24,16):B$;:: CALL SPRITE(#1,112,2,A*8-7,B*8-7)::GOSUB 9100
1199 ! ===== CHECK FOR ENCOUNTERS
1200 BT=0:: FOR X=1 TO 28::IF ABS(A-D(X,2))>2 THEN 1290
1210 IF ABS(B-D(X,3))>2 THEN 1290
1220 IF D(X,4)=1 THEN D(X,4)=0
1230 FOR Y=1 TO 9::IF VAL(SEG$(D$(Y),1,3))<>D(X,1) THEN 1280
1260 IF Y>5 THEN BT=Y
1270 DISPLAY AT(24,1) SIZE(31):SEG$(D$(Y),4,99);" NEAR";::CALL WAIT(1000)
1275 IF X>2 THEN CALL SPRITE(#X-1,D(X,1),2,D(X,2)*8-7,D(X,3)*8-7)
1280 NEXT Y
1290 NEXT X
1291 IF A>12 THEN IF B>22 THEN DISPLAY AT(24,1) SIZE(31):"CITADEL NEAR";::CALL WAIT(1000)
1299 ! ===== CHECK FOR EVENTS
1300 IF SWF THEN IF (RND*100)<10 THEN DISPLAY AT(24,1) SIZE(31):"2 MEN ARE STUCK IN QUICKSAND!";::M=M-2::DF=1::CALL WAIT(1000)::GOTO 1319
1305 IF MF THEN IF (RND*100)<10 THEN DISPLAY AT(24,1) SIZE(31):"2 MEN FELL INTO A DEEP RAVINE!";::M=M-2::DF=1::CALL WAIT(1000)
1319 IF BT THEN 1000
1320 BC=BC+1::IF BC<3 THEN 1000
1329 ! ==== EVERY 3 DAYS MOVE THE WANDERING ENCOUNTERS
1330 BC=0:: FOR J=23 TO 28::IF D(J,4)=0 THEN D(J,4)=1:: CALL DELSPRITE(#J-1)
1340 X=INT(RND*14)+1::Y=INT(RND*31)+1::IF X=8 THEN 1340
1350 FOR ZZ=1 TO 28::IF X=D(ZZ,2) THEN IF Y=D(ZZ,3) THEN IF J<>ZZ THEN 1340
1359 ! ===== THERES A CHANCE ONE OF THE WANDERING ENCOUNTERS WILL TELEPORT STRAIGHT TO THE PLAYER
1360 NEXT ZZ:(J,2)=X:(J,3)=Y
1361 NEXT J::IF EX>0 THEN IF (RND*100)>80 THEN J=INT(RND*6)+22:(J,2)=A:(J,3)=B::GOTO 1084
1369 ! ===== DRAW PLAYER ICON AND START MAIN LOOP AGAIN
1370 CALL SPRITE(#1,112,2,A*8-7,B*8-7)::GOTO 1000
1999 ! ===== GET ONE KEY
2000 CALL KEY(0,K,S)::Q=0::IF S=0 THEN 2000 ELSE Q=POS(A$,CHR$(K),1)
2001 IF Q=0 THEN 2000
2010 RETURN
2099 ! ===== GET QUANTITY
2100 Q=0 :: ACCEPT AT(24,1) VALIDATE(DIGIT): Q :: RETURN
2999 ! ===== INVENTORY MANAGEMENT
3000 CALL CLEAR::CALL DELSPRITE(ALL):: DISPLAY AT(1,10):"INVENTORY"
3010 DISPLAY AT(2,1): "ITEM              QTY WT. TOTAL"::F1=0::ZL=0
3029 ! ========== CALCULATE CARRY WEIGHT
3030 WV=0::TW=0:: FOR I=1 TO 17::IF O(I,1)=0 THEN 3058
3040 J=O(I,1)::K=O(I,2)::TW=INT(TW+J*K)::IF F1=0 THEN GOSUB 3180::ZL=ZL+1::IF ZL=15 THEN GOSUB 8904::ZL=0
3050 X=O(I,4)::IF J>M THEN J=M
3055 WV=WV+J*X
3058 NEXT I::IF F1 THEN RETURN
3070 IF Q=3 THEN RETURN
3080 DISPLAY AT(18,1):"TOTAL WEIGHT";TW;" LBS.":: DISPLAY AT(19,1):"YOUR";M;" MEN CAN CARRY";M*100
3085 IF Z=5 THEN 8700 ! START BARTERING IF IN A CITY OTHERWISE DROP ITEMS
3089 ! ===== INVENTORY MAINTAINENCE 
3090 DISPLAY AT(24,1) SIZE(31):DO$;" DROP ANYTHING?";
3095 CALL KEY(0,K,S)::Q=0::IF S=0 THEN 3095
3100 IF CHR$(K)<>"Y" THEN Q=1::RETURN
3109 ! ===== WHICH ITEM LOOP
3110 DISPLAY AT(24,1) SIZE(31):W$;::CALL WAIT(1000)::GOSUB 2100::IF Q>17 THEN 3110
3111 ! ===== DONT HAVE ANY 
3112 I=Q::QT=O(I,1)::IF QT=0 THEN DISPLAY AT(24,1) SIZE(31):E$;::CALL WAIT(1000)::GOTO 3090
3139 ! ===== HOW MANY LOOP
3140 DISPLAY AT(24,1) SIZE(31):H$;::CALL WAIT(1000)::GOSUB 2100::IF Q>QT THEN DISPLAY AT(24,1) SIZE(31):M$;::CALL WAIT(1000)::GOTO 3090
3159 ! ===== REMOVE THEM FROM INVENTORY AND RECALCULATE
3160 O(I,1)=QT-Q::Q=1::GOTO 3000
3179 ! ===== PRINT THE INVENTORY LIST
3180 IMAGE ## ############### #### ### ###
3181 DISPLAY AT(ZL+3,1) SIZE(31):USING 3180:I,O$(I),J,K,J*K
3185 RETURN
3499 ! ===== LEAVE ENCOUNTER
3500 Z=0::BC=3::BT=0::B=B-1::IF (RND*10)>5 THEN B=B+2
3510 RETURN
4999 ! ===== USE ITEM LOOP
5000 CALL CLEAR::Q=3::GOSUB 3010:: DISPLAY AT(24,1) SIZE(31):W$;::CALL WAIT(1000)::GOSUB 2100::IF Q>17 THEN 5000
5001 I=Q:=O(I,1)::IF P=0 THEN DISPLAY AT(24,1) SIZE(31):E$;::CALL WAIT(1000)::GOTO 5041
5020 IF(I=16 AND Z=1)OR(I=6 AND Z=2)OR(I=4 AND Z=3)OR(I=3 AND Z=4) THEN 5100
5030 IF I=7 AND DF=1 THEN 5600
5040 DISPLAY AT(24,1) SIZE(31)$(I);" - NO EFFECT";::CALL WAIT(1000)
5041 DISPLAY AT(24,1) SIZE(31):"SOMETHING ELSE?";::CALL WAIT(1000)
5045 CALL KEY(0,K,S)::Q=0::IF S=0 THEN 5045
5050 IF CHR$(K)<>"Y" THEN 5000
5060 GOSUB 9000::RETURN
5099 ! ===== EXPLORE DUNGEON LOOP
5100 GOSUB 9000:: DISPLAY AT(24,1) SIZE(31):"YOU'RE IN A ";SEG$(D$(Z),4,99);::CALL WAIT(1000)::J=0
5110 DISPLAY AT(24,1) SIZE(31):"SEARCH OR LEAVE?";
5115 CALL KEY(0,K,S)::Q=0::IF S=0 THEN 5115
5120 IF CHR$(K)<>"Y" THEN J=J+10::GOTO 5210
5130 GOSUB 3500::RETURN
5209 ! ===== FIGHT!
5210 SF=0::IF (RND*100)>90 THEN SF=Z::SU=1::Z=9::GOTO 7300
5219 ! ===== NOTHING
5220 IF (RND*100)>J THEN DISPLAY AT(24,1) SIZE(31):"THERE'S NOTHING HERE!";::CALL WAIT(1000)::GOTO 5110
5249 ! ===== FOUND A CHEST WITH GOLD, TRAP, OR POSSIBLY A LARGE KEY
5250 DISPLAY AT(24,1) SIZE(31):"THERE'S A CHEST HERE!";::CALL WAIT(1000)::IF (RND*100)>90 THEN 5390
5255 IF D(AL,4)=-1 THEN DISPLAY AT(24,1) SIZE(31):"IT'S EMPTY!";::CALL WAIT(1000)::GOTO 5350
5260 D(AL,4)=-1:: DISPLAY AT(24,1) SIZE(31):"CONTAINING";::IF O(16,1) OR (RND*100)>20 THEN 5300
5261 DISPLAY AT(24,10):"A ";O$(16);:(16,1)=1::GOTO 5350
5300 J=INT(RND*500)+50:: DISPLAY AT(24,10):J;O$(17);:(17,1)=O(17,1)+J
5349 ! ===== FORCE EXIT OF DUNGEON
5350 CALL WAIT(1000):: DISPLAY AT(24,1) SIZE(31):"BETTER LEAVE NOW!";::CALL WAIT(1000)::Q=0::GOTO 5130
5389 ! ===== ITS A TRAP
5390 J=INT(RND*2)+1::IF M>20 THEN J=INT(RND*5)+1
5400 DISPLAY AT(24,1) SIZE(31):"IT'S A TRAP!";J;"MEN ARE KILLED";::M=M-J::GOTO 5350
5999 ! ===== CHANCE TO SAVE MEN WHO FELL IN RAVINE IF YOU HAVE ROPE IN INVENTORY
5600 IF (RND*100)<80 THEN DISPLAY AT(24,1) SIZE(31):"THE ROPE BROKE-IT'S USELESS NOW";::CALL WAIT(1000):(7,1)=O(7,1)-1::DF=0::GOTO 5610
5601 DISPLAY AT(24,1) SIZE(31):"YOU SAVED THEM"::CALL WAIT(1000)::DF=0::M=M+2
5610 GOSUB 9000::RETURN
5899 ! ===== CHECK FOR TOTAL FAILURE
5900 IF M>0 THEN RETURN
5901 DISPLAY AT(24,1) SIZE(31):"ALL YOUR MEN ARE DEAD!"::END
5999 ! ===== PREPARE FOR CITADEL FIGHT
6000 IF TW<2400 THEN GOSUB 20030
6010 IF O(1,1)=0 THEN GOSUB 20050
6020 DISPLAY AT(24,1) SIZE(31):DO$;::CALL WAIT(1000):: DISPLAY AT(24,1) SIZE(31):"ATTACK OR LEAVE?";
6030 A$="LA"::GOSUB 2000::IF Q=0 THEN 6030
6031 IF Q=2 THEN 6050
6040 IF (RND*100)>70 THEN GOSUB 20010
6045 A=A-1::GOTO 1084
6050 FA=1::BM=INT(RND*40)+160::IW=20::BW=2000::SU=0::GOTO 7470
6099 ! ===== DETERMINE CHANCE TO RUN AWAY
6100 I=INT(TW/M):: FOR TSP=1 TO 9::IF 10*TSP>=I THEN SP=TSP
6101 NEXT TSP
6120 SP=10-SP::RETURN
6999 ! ==== DETERMINE ENCOUNTER TYPE 
7000 AL=I:=D(I,1):: FOR Z=1 TO 9 
7007 IF P=VAL(SEG$(D$(Z),1,3)) THEN 7010
7008 NEXT Z :: GOTO 1000
7009 ! ==== RUN ENCOUNTER Z<5 IS A CITY/DUNGEON Z>5 WANDERING ENCOUNTER
7010 SU=0::IF Z>5 THEN 7300
7020 DISPLAY AT(24,1) SIZE(31):"YOU'VE COME TO A ";SEG$(D$(Z),4,99);::CALL WAIT(1000)::ON Z GOTO 7040,7060,7080,7090,7100
7040 DISPLAY AT(24,1) SIZE(31):"THE WAY IS BARRED BY A STOUT,";::CALL WAIT(1000):: DISPLAY AT(24,1) SIZE(31):"DOOR WITH AN IRON LOCK! ";::CALL WAIT(1000)::GOTO 1000
7060 DISPLAY AT(24,1) SIZE(31):"THE ENTRANCE IS FILLED WITH";::CALL WAIT(1000):: DISPLAY AT(24,1) SIZE(31):"DRIFTED SAND!";::CALL WAIT(1000)::GOTO 1000
7080 DISPLAY AT(24,1) SIZE(31):"IT'S TOO DARK TO SEE!";::CALL WAIT(1000)::GOTO 1000
7090 DISPLAY AT(24,1) SIZE(31):"THERE'S NO VISIBLE ENTRANCE!";::CALL WAIT(1000)::GOTO 1000
7099 ! ==== STOCK THE SHELVES
7100 IF MC<6 THEN 7200
7110 MC=0:: FOR I=1 TO 15:(I,5)=0::IF (RND*100)>50 OR (I=1 AND A> THEN IF I<15 THEN 7190
7120 O(I,5)=INT(RND*20)+1::V=O(I,3)::GOSUB 8990:(I,6)=V::IF I=1 THEN O(I,5)=1
7130 IF I=15 THEN O(I,5)=INT(RND*100)+M
7190 NEXT I
7219 ! ===== CITY ENCOUNTER / BUY SELL LOOP
7200 DISPLAY AT(24,1) SIZE(31):"LEAVE,BUY AT MARKET,INVENTORY?";::A$="LBMI"::GOSUB 2000::IF Q=0 THEN 7200
7220 IF Q=1 THEN GOSUB 3500::GOSUB 9000::GOTO 1000
7221 IF Q=4 THEN GOSUB 3000::GOTO 7200
7222 GOTO 8000
7299 ! ===== WANDERING ENCOUNTER
7300 DISPLAY AT(24,1) SIZE(31):"YOU'VE ENCOUNTERED A BAND OF";::CALL WAIT(1000)
7301 DISPLAY AT(24,1) SIZE(31):SEG$(D$(Z),4,99);::CALL WAIT(1000)
7309 ! ===== DETERMINE NUMBER AND STRENGTH OF OPPONENTS
7310 BM=INT((RND*M)+(M/4))+INT(EG/10)::BS=INT(RND*10)+1::BX=INT(RND*INT(EG/10))+1::SB=INT(RND*10)+1::BI=BM::BX=INT(BX)
7320 IF Z<8 THEN DISPLAY AT(24,1) SIZE(31):"THEY HAVE AN ESCORT!";::CALL WAIT(1000)
7330 IW=INT(RND*-10*(EX>2)::BW=BM*IW:: IF IW<6 THEN B$=" LIGHTLY"::GOTO 7335
7331 IF IW>5 AND IW<15 THEN B$=" WELL"::GOTO 7335
7332 B$=" HEAVILY"
7335 DISPLAY AT(24,1) SIZE(31):"THERE ARE";BM;",";B$;" ARMED";::CALL WAIT(1000)
7340 IF SU THEN 7450
7399 ! ===== ATTACK, RUN, PARLAY
7400 DISPLAY AT(24,1) SIZE(31):DO$;::CALL WAIT(1000):: DISPLAY AT(24,1) SIZE(31):"ATTACK, RUN OR BE FRIENDLY?";::CALL WAIT(1000)::A$="ARF"::GOSUB 2000
7401 ON Q GOTO 7440,7800,7900::GOTO 7400
7399 ! ===== PLAYER ATTACKED - CHECK FOR SURPRISE
7440 SU=-1::IF (RND*100)>50 THEN SU=0::GOTO 7470
7449 ! ===== IF SOMEONE WAS SURPRISED DISPLAY A MESSAGE
7450 B$="THEY"::IF SU=1 THEN B$="YOU":: DISPLAY AT(24,1) SIZE(31):B$;" WERE SURPRISED!";::CALL WAIT(1000)
7469 ! ===== DO COMBAT ROUND
7470 F1=1::GOSUB 3030::BW=BM*IW::CALL CLEAR:: CALL DELSPRITE(ALL):: DISPLAY AT(1,1):"          ";"YOU   THEM":: DISPLAY AT(2,1):"MEN       ";M;" ";BM
7471 DISPLAY AT(3,1):"WEAPONS   ";WV;" ";BW:: DISPLAY AT(4,1):"EXPERIENCE";EX;" ";BX
7480 I=INT(RND*100)::J=INT(RND*100):: DISPLAY AT(5,1):"LUCK      ";I;" ";J::CALL KEY(0,K,S)::IF S=0 THEN 7480
7490 I=I-SU*10::J=J+SU*10::TW=WV+I+ST*5+EX*5::IF FA THEN IF O(1,1)=0 THEN TW=INT(TW/5)
7500 WT=BW+J+SB*2+BX*2::M=INT(M+(WT>TW)*(RND*(M/10))+(TW>WT)*((RND*(M/20))-1))
7501 BM=INT(BM+(TW>WT)*(RND*(BM/10))+(WT>TW)*((RND*(BM/20))-1))::IF BM<0 THEN BM=0
7504 ! ===== DISPLAY COMBAT RESULTS
7505 GOSUB 5900:: DISPLAY AT(6,1):"SURVIVORS";M,BM::IF BM=0 THEN 7950
7506 IF BM<INT(BI/4) AND (RND*100)>50 AND FA=0 THEN 7901
7509 ! ===== ASK PLAYER WHAT TO DO NEXT
7510 DISPLAY AT(24,1) SIZE(31):"FIGHT, RUN OR TERMS?"::A$="FRT"::GOSUB 2000::IF Q=0 THEN 7510
7511 IF Q=2 THEN 7800
7512 IF Q=3 THEN 7820
7513 GOTO 7470
7799 ! ===== ATTEMPT TO FLEE
7800 IF SP>B OR (RND*100)>90 OR FA=1 THEN DISPLAY AT(24,1) SIZE(31):"YOU GOT AWAY!";::CALL WAIT(1000)::FA=0::GOTO 7930
7810 DISPLAY AT(24,1) SIZE(31):"THEY CAUGHT YOU!";::CALL WAIT(1000)::SU=1::GOTO 7450
7820 I=WT*INT(RND*100)::J=TW*INT(RND*10)*CH::CALL WAIT(1000)::IF J>I AND FA=0 THEN 7830
7821 DISPLAY AT(24,1) SIZE(31):R$;::CALL WAIT(1000)::SU=1::GOTO 7450
7830 BM=INT(RND*BM)+1::GOTO 7901
7899 ! ===== PARLAY
7900 IF INT(RND*10)+1>CH THEN DISPLAY AT(24,1) SIZE(31):R$;::CALL WAIT(1000)::SU=1::GOTO 7450
7901 ! ===== THEY SURRENDER
7902 BM=INT(RND*BM)+1
7903 DISPLAY AT(24,1) SIZE(31):BM;"WILL JOIN YOU!";::CALL WAIT(1000)::M=M+BM:: CALL CLEAR ::  DISPLAY AT(1,1): "THEY HAVE:" 
7909 ! ===== GET SALVAGE
7910 FOR I=8 TO 15::IF (RND*100)>50 THEN L=L+1::QT=INT(RND*BM)+1:(I,1)=O(I,1)+QT::  DISPLAY AT(L,1): QT;O$(I)
7920 NEXT I ::IF (RND*100)>90 THEN  DISPLAY AT(L+1,1):"TOO BAD THEY HAD NO GOLD!"::GOTO 7930
7921 QT=INT(INT(RND*5)*((EG/10)+1)*BM)+1:(17,1)=O(17,1)+QT::  DISPLAY AT(L+1,1): QT;O$(17)
7929 ! ===== END WANDERING ENCOUNTER - RETURN SEARCHING OR KICK OUT TO WORLD MAP
7930 EX=EX+1:: DISPLAY AT(24,1) SIZE(31):"READY TO GO ON?";::A$="Y"::GOSUB 2000::IF SF THEN Z=SF::GOTO 5100
7931 GOSUB 9000::GOTO 1330
7949 ! ===== CHECK FOR TOTAL VICTORY
7950 IF FA THEN 9500
7951 ! ===== ALL OPPONENTS DEAD - COLLECT SPOILS
7952 CALL CLEAR:: DISPLAY AT(2,1):"YOU WON!"
7960 BM=2::  DISPLAY AT(3,1) SIZE(31):"YOU MANAGED TO SALVAGE:"::GOTO 7910
7999 ! ===== SELL INVENTORY LOOP
8000 HC=0::OC=0::ZL=0::CALL CLEAR::VF=1:: DISPLAY AT(2,1): "ITEM              VAL WT. QTY":: FOR I=1 TO 15::IF O(I,5)=0 THEN 8090
8002 DISPLAY AT(ZL+3,1) SIZE(31):USING 3180:I,O$(I),O(I,6),O(I,2),O(I,5)
8020 ZL=ZL+1::IF ZL=15 THEN GOSUB 8900::IF ZL=99 THEN I=15
8090 NEXT I
8100 HB=0::F1=1::GOSUB 3030:: DISPLAY AT(18,1):"YOU HAVE";O(17,1);"GOLD COINS":: DISPLAY AT(19,1):"YOUR";M;"MEN ARE CARRYING";TW;"LBS"
8279 ! ===== SELL WHICH ITEM
8280 DISPLAY AT(24,1) SIZE(31):W$;::CALL WAIT(1000)::GOSUB 2100::IF Q>17 THEN 8280
8281 V=O(Q,6)::OL=3+INT(RND*4)-(5*(V>150))::GOSUB 8990:=Q::IF O(X,5)=0 THEN DISPLAY AT(24,1) SIZE(31):E$;::CALL WAIT(1000)::GOTO 7200
8299 ! ===== ACCEPT OFFER
8300 DISPLAY AT(24,1) SIZE(31):"YOUR OFFER?";::CALL WAIT(1000)::GOSUB 2100::Q=INT(Q)::IF Q>=V THEN V=Q::GOTO 8400
8305 IF INT(RND*30)=15 THEN V=Q::GOTO 8400
8306 IF INT(RND*20)=12 THEN OL=OL+10
8307 IF INT(RND*100)=74 THEN V=V*2
8310 IF Q<INT(V/3) THEN DISPLAY AT(24,1) SIZE(31):"NOT INTERESTED!";::GOTO 8610
8315 IF Q=HB THEN HC=HC+1
8320 IF Q<HB OR (Q=HB AND HC=2) THEN 8600
8330 HB=Q:: DISPLAY AT(24,1) SIZE(31):"TELL YOU WHAT I'M GOING TO DO--";::CALL WAIT(1000)::ZZ=INT(V*((INT(RND*15)+5)*.01))::IF ZZ<1 THEN ZZ=1
8340 V=V-ZZ::IF V<HB THEN V=HB 
8345 IF Q>=V THEN V=Q::GOTO 8400
8349 ! ===== MAKE COUNTEROFFER
8350 IF (RND*100)>50 THEN DISPLAY AT(24,1) SIZE(31):"FOR YOU I'LL MAKE IT";V;"OK?";::GOTO 8355
8351 DISPLAY AT(24,1) SIZE(31):"WHAT DO YOU SAY TO";V;"?";
8355 CALL KEY(0,K,S)::Q=0::IF S=0 THEN 8355
8360 IF CHR$(K)<>"Y" THEN OC=OC+1::IF OC<OL THEN 8300
8361 GOTO 8600
8399 ! ===== HOW MANY LOOP
8400 DISPLAY AT(24,1) SIZE(31):H$;::CALL WAIT(1000)::GOSUB 2100::IF Q>O(X,5) THEN DISPLAY AT(24,1) SIZE(31):M$;::CALL WAIT(1000)::GOTO 8400
8420 IF Q*V>O(17,1) THEN DISPLAY AT(24,1) SIZE(31):"NOT ENOUGH GOLD!";::CALL WAIT(1000)::GOTO 8400
8430 O(X,1)=O(X,1)+Q:(17,1)=O(17,1)-Q*V:(X,5)=O(X,5)-Q::GOTO 7200
8599 ! ===== WASTING MY TIME LOOP
8600 DISPLAY AT(24,1) SIZE(31):Y$;
8610 CALL WAIT(1000):(X,6)=INT(O(X,6)/4)+O(X,6)::GOTO 7200
8699 ! ===== SELL ITEM LOOP
8700 DISPLAY AT(24,1) SIZE(31):DO$;" SELL ANYTHING?";::CALL KEY(0,K,S)::Q=0::IF S=0 THEN 8700
8701 IF CHR$(K)<>"Y" THEN RETURN
8709 ! ===== WHICH ITEM LOOP
8710 DISPLAY AT(24,1) SIZE(31):W$;::CALL WAIT(1000)::GOSUB 2100::IF Q>17 THEN 8710
8711 I=Q::IF O(I,1)=0 THEN DISPLAY AT(24,1) SIZE(31):E$::CALL WAIT(1000)::GOTO 8700
8714 ! ===== MAKE OFFER LOOP
8715 V=INT(O(I,3)/(INT(RND*3)+2))::OL=5+INT(RND*5)-10*(V>80)::HB=O(I,3)+1::HC=0
8720 IF (RND*100)>50 THEN DISPLAY AT(24,1) SIZE(31):"I'LL GIVE YOU";V;"OK?";::GOTO 8725
8721 DISPLAY AT(24,1) SIZE(31):"WILL YOU TAKE";V;"?";
8725 CALL KEY(0,K,S)::IF S=0 THEN 8725
8726 IF CHR$(K)="Y" THEN 		 8800
8729 ! ===== ACCEPT OFFER LOOP
8730 DISPLAY AT(24,1) SIZE(31):"HOW MUCH DO YOU WANT?";::CALL WAIT(1000)::GOSUB 2100::J=Q::IF J=HB THEN HC=HC+1::GOTO 8735
8731 HC=0
8735 IF J<=V THEN 8800
8740 IF J>HB OR (J=HB AND HC=2) OR OL=0 THEN DISPLAY AT(24,1) SIZE(31):Y$;::CALL WAIT(1000)::RETURN
8750 HB=J::ZZ=INT(V*(INT(RND*20)+10)*.01)::IF ZZ<1 THEN ZZ=1
8760 V=V+ZZ::IF V<J THEN 8720
8799 ! ===== HOW MANY LOOP
8800 DISPLAY AT(24,1) SIZE(31):H$;::CALL WAIT(1000)::GOSUB 2100::IF Q>O(I,1) THEN DISPLAY AT(24,1) SIZE(31):M$;::CALL WAIT(1000)::GOTO 8800
8810 O(17,1)=O(17,1)+V*Q:(I,1)=O(I,1)-Q::RETURN
8899 ! ===== PRESS ENTER OR SPACE TO BUY
8900 J=0:: DISPLAY(23,1):"PRESS ENTER TO CONTINUE, OR ":: DISPLAY(24,1):"SPACE BAR TO BUY":: GOTO 8910
8904 DISPLAY AT(24,1)::"PRESS ENTER TO CONTINUE"
8910 CALL KEY(0,K,S)::IF S=0 THEN 8910
8920 IF K=32 THEN ZL=99
8930 RETURN
8989 ! ===== INFLATE PRICE
8990 V=V-INT(RND*V/4)::RETURN
8999 ! ===== DRAW WORLD MAP
9000 CALL CLEAR::FOR I=1 to 16::CALL HCHAR(I,1,96,32)::NEXT I:: FOR I=1 TO 11:: FOR J=1 TO 4::IF (RND*10)>5 THEN CALL HCHAR(J+SW1,I+SW2,124)
9001 NEXT J
9002 NEXT I
9010 FOR I=1 TO 32 :: CALL HCHAR(8,I,104)
9015 NEXT I ! RIVER
9020 FOR I=1 TO 14 STEP 2 :: FOR J=1 TO 6 :: IF (RND*10)>6 THEN CALL HCHAR(J,I+18,128) :: CALL HCHAR(J,I+19,129)
9021 NEXT J
9022 NEXT I
9023 CALL HCHAR(D(1,2),D(1,3),D(1,1)):: CALL HCHAR(D(2,2),D(2,3),D(2,1))
9030 CALL HCHAR(14,25,118):: CALL HCHAR(14,26,119):: CALL HCHAR(14,27,125) ! CITADEL
9100 CALL SPRITE(#1,112,2,A*8-7,B*8-7) ! PLAYER
9110 FOR X=3 TO 28::IF D(X,4)<1 THEN CALL SPRITE(#X-1,D(X,1),2,D(X,2)*8-7,D(X,3)*8-7) ! ENCOUNTER ICONS
9120 NEXT X::RETURN
9499 ! ===== VICTORY
9500 DISPLAY AT(24,1) SIZE(31):"YOU'VE CONQUERED THE FORCES OF";
9501 CALL WAIT(1000):: DISPLAY AT(24,1) SIZE(31):"EVIL! ALL HAIL THE VICTOR!!!!"::END
13000 DISPLAY AT(10,7):"TITLE GOES HERE";
14150 DISPLAY AT(10,9):"-PRESS ENTER-";
14200 RETURN
20010 I=INT(((RND*M)+1)/10)::M=M-I:: DISPLAY AT(24,1) SIZE(31):"A VOLLEY OF ARROWS";::CALL WAIT(1000):: DISPLAY AT(24,1) SIZE(31):"FROM THE TOWER HAS KILLED";::CALL WAIT(1000)
20020 DISPLAY AT(24,1) SIZE(31):"OF YOUR MEN!";::CALL WAIT(1000)::RETURN
20030 DISPLAY AT(24,1) SIZE(31):"YOUR ARMY IS NOT STRONG ENOUGH";::CALL WAIT(1000):: DISPLAY AT(24,1) SIZE(31):"TO MAKE SUCCESS LIKELY!";
20040 CALL WAIT(1000):: RETURN
20050 DISPLAY AT(24,1) SIZE(31):"THE WALLS ARE TOO HIGH";::CALL WAIT(1000):: DISPLAY AT(24,1) SIZE(31):"FOR YOU TO BESIEGE THE TOWER!";::CALL WAIT(1000)
20060 RETURN
20070 SUB WAIT(SC)
20080 FOR WT=0 TO SC
20085 NEXT WT 
20090 SUBEND

  • Like 3
Link to comment
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...