Skip to content

Instantly share code, notes, and snippets.

@scruss
Created November 26, 2023 22:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save scruss/a143d538f40882e48e264f946505412b to your computer and use it in GitHub Desktop.
Save scruss/a143d538f40882e48e264f946505412b to your computer and use it in GitHub Desktop.
1 REM TAIPAN - HAYDEN BOOK CO COPYRIGHT 1986
2 REM BY ART CANFIL, KARL ALBRECHT, AND JIM MCCLENAHAN
3 REM TYPED, NOT EXHAUSTIVELY CHECKED, AND MILDLY TWEAKED BY DEAN OISBOID 2022
4 REM REPLACED DIRECT CTRL-G CALLS WITH BP$
5 REM INITIALIZATION (10-50)
10 HOME :A$ = " ":W$ = "ELDER BROTHER YU":LY$ = "LI YUEN":YS$ = "YAMATO & SMYTHE":TC$ = "O, S, T, A, P, OR R"
11 B$ = " "
14 REM OZZY REPLACED JUST BELOW WITH PROPER CTRL-G
15 BP$ = CHR$(7)
20 VTAB 4: INVERSE : PRINT A$: HTAB 15: PRINT "T A I P A N:": NORMAL : HTAB 13: PRINT "_________________"
21 SPEED= 100: VTAB 9: HTAB 14: PRINT "A G A M E I N": PRINT TAB( 15);"C O N T E X T": PRINT : PRINT TAB( 14);"HAYDEN BOOK CO."
22 SPEED= 255: VTAB 15: INVERSE : PRINT A$: NORMAL
30 DIM M$(11),G$(5),AP(9,5),GG(5),L(9,5),GP(5),V(9): FOR I = 0 TO 9: READ L$(I): NEXT I: FOR I = 0 TO 11: READ M$(I): NEXT I: FOR I = 0 TO 5: READ G$(I): NEXT I
40 FOR I = 0 TO 9: FOR J = 0 TO 5: READ AP(I,J):AP(I,J) = AP(I,J) *6 ^(5 -J): NEXT J,I: GOSUB 180
50 FOR I = 0 TO 9: READ L0(I): NEXT I:D = 1000:Y = 1860:GT = 1:C = 400:MW = 50:SH = MW:SR = 1:G = 1:V(0) = 1: GOSUB 5000:X$ = "": GOSUB 590: HOME : GOTO 120
55 REM GET$ SUBROUTINE (60-64)
60 POKE -16368,0
61 IF PEEK( -16384) <128 THEN 61
62 X$ = CHR$( PEEK( -16384) -128)
63 POKE -16368,0
64 RETURN
65 REM INITIALIZATION DATA (70-110)
70 DATA HONGKONG,FOOCHOW,SHANGHAI,NAGASAKI,MANILA,SINGAPORE,BATAVIA,SAIGON,CALCUTTA,LIVERPOOL
80 DATA JAN,FEB,MAR,APR,MAY,JUN
81 DATA JUL,AUG,SEP,OCT,NOV,DEC
90 DATA OPIUM,SILK,TEA,ARMS,PEPPER,RICE
100 DATA 8,2,2,4,5,2,8,2,1,8,4,3,9,3,3,6,5,4,6,4,2,8,6,5,3,3,4,7,4,4,2,4,5,4,3,5,3,4,5,5,2,6,3,1,4,5,3,3,1,5,6,3,4,5,3,9,9,1,9,5
110 DATA 21,14,7,0,35,49,56,42,84,200
115 REM MAIN DISPLAY (120-150)
120 GOSUB 130: GOTO 220
130 VTAB 1: HTAB 1: PRINT "PORT ";L$(L);: HTAB 28: PRINT M$(M);". ";DA +1;",";Y
140 VTAB 2: INVERSE : PRINT "CASH ";:Q = C: GOSUB 1330: NORMAL : VTAB 2: HTAB 28: PRINT "GUNS ";G: VTAB 3: PRINT "DEBT ";:Q = D: GOSUB 1330: VTAB 3: HTAB 28: PRINT "HOLD ";:Q = SH: GOSUB 1330
141 VTAB 4: INVERSE : PRINT "GOODS ABOARD SHIP HONGKONG GODOWN": NORMAL
150 FOR I = 0 TO 5: VTAB 5 +I: PRINT G$(I): VTAB 5 +I: HTAB 11: PRINT CHR$(133);:Q = SG(I): GOSUB 1330: VTAB 5 +I: HTAB 26: PRINT CHR$(133);:Q = GG(I): GOSUB 1330: NEXT I: INVERSE : PRINT A$: NORMAL : RETURN
155 REM UPDATE SUBROUTINE (160-172)
160 ET = INT(ET +(ET * RND(1)/3)):GT = GT +ET:D = D + INT(D *(ET/360)):JD = JD +ET: IF JD >360 THEN JD = JD -360:Y = Y +1
161 IF JD <1 THEN JD = 1
170 M = INT((JD -30)/30):DA = INT((((JD/30) - INT(JD/30))) *30): IF RND(1) >.95 THEN TR = 0
171 IF M <0 THEN M = 0
172 RETURN
175 REM PRICE VARIATION SUBROUTINE (180)
180 FOR I = 0 TO 5:GP(I) = INT(AP(L,I) +( RND(1) *AP(L,I))): NEXT I: RETURN
185 REM HI-LO SUBROUTINE (190-210)
190 FOR I = 0 TO 5: IF GP(I) >H(L,I) THEN H(L,I) = GP(I)
200 IF GP(I) <L(L,I) OR L(L,I) = 0 THEN L(L,I) = GP(I)
210 NEXT I: RETURN
212 REM MARKET (220-350)
217 REM MARKET PRICES (220-221)
220 GOSUB 790: GOSUB 1340: VTAB 11: INVERSE : HTAB 8: PRINT " ";L$(L);" MARKET PRICES ": NORMAL : PRINT A$: FOR I = 0 TO 4 STEP 2: VTAB 13 +I/2: HTAB 1: PRINT G$(I);: HTAB 10: PRINT GP(I);: HTAB 21: PRINT G$(I +1);
221 HTAB 30: PRINT GP(I +1): NEXT I
225 REM MARKET MENU
230 PRINT : VTAB 18: PRINT " B)UY, S)ELL, L)EAVE, OR R)ETIRE?"
235 REM MARKET MENU INPUT (240-244)
240 GOSUB 60: IF X$ = "B" THEN T$ = "BUY":X = 1
241 IF X$ = "S" THEN T$ = "SELL":X = 2
242 IF X$ = "L" THEN 360
243 IF X$ = "R" THEN 1300
244 IF X$ < >"B" AND X$ < >"S" AND X$ < >"L" AND X$ < >"R" THEN GOSUB 770: GOTO 240
245 REM BUY/SELL (250-351)
247 REM ITEM MENU (250)
250 VTAB 18: PRINT A$;: VTAB 18: HTAB 3: PRINT T$;" ";TC$;"?": GOSUB 260: GOTO 280
255 REM ITEM CHOICE SUBROUTINE (260-270)
260 GOSUB 60: IF X$ = "O" THEN X1 = 0
261 IF X$ = "S" THEN X1 = 1
262 IF X$ = "T" THEN X1 = 2
263 IF X$ = "A" THEN X1 = 3
264 IF X$ = "P" THEN X1 = 4
265 IF X$ = "R" THEN X1 = 5
266 IF X$ < >"O" AND X$ < >"S" AND X$ < >"T" AND X$ < >"A" AND X$ < >"P" AND X$ < >"R" THEN GOSUB 770: GOTO 260
270 RETURN
280 IF X = 1 AND GP(X1) >C THEN VTAB 18: PRINT "YOU CAN'T AFFORD ANY "G$(X1)";:GOSUB 760:GOTO 230
290 IF X = 2 AND SG(X1) <1 THEN VTAB 18: PRINT "YOU HAVE NO "G$(X1)" ABOARD! ";: GOSUB 760: GOTO 230
300 VTAB 18: PRINT A$;: VTAB 18: PRINT T$;" HOW MUCH ";G$(X1);: PRINT "? ";:NUM$ = "":NUM = 0: GOSUB 310: GOTO 320
305 REM SOOPER DOOPER NUMBER SCOOPER SUBROUTINE (310-314)
310 PRINT CHR$(8);: INVERSE : PRINT " ";: NORMAL : GOSUB 60: IF LEN(NUM$) >0 AND ASC(X$) = 8 THEN PRINT X$;: PRINT " ";: PRINT X$;X$;: PRINT " ";:FG = 1: IF LEN(NUM$) = 1 THEN NUM$ = "":FG = 0: GOTO 310
311 IF FG = 1 THEN NUM$ = LEFT$(NUM$, LEN(NUM$) -1):FG = 0: GOTO 310
313 IF ASC(X$) = 65 OR ASC(X$) = 13 THEN RETURN
313 IF ASC(X$) <48 OR ASC(X$) >57 THEN 310
314 NUM$ = NUM$ +X$: PRINT CHR$(8);X$;: INVERSE : PRINT " ";: NORMAL : GOTO 310
320 IF X = 1 THEN IF X$ = "A" THEN PRINT CHR$(8);: INVERSE : PRINT "ALL";:NUM = INT(C/GP(X1)
321 IF X = 1 AND X$ < >"A" THEN NUM = VAL(NUM$)
330 IF X = 2 THEN IF X$ = "A" THEN PRINT CHR$(8);: INVERSE : PRINT "ALL";:NUM = SG(X1)
331 IF X = 2 AND X$ < >"A" THEN NUM = VAL(NUM$)
335 NORMAL
340 IF X = 1 THEN IF NUM *GP(X1) >C THEN PRINT : VTAB 18: PRINT "YOU CAN'T AFFORD SO MUCH! ";: GOSUB 760: VTAB 18: PRINT A$;: GOTO 300
341 IF X = 1 AND NUM *GP(X1) < = C THEN SG(X1) = SG(X1) +NUM:SH = SH -NUM:C = C -GP(X1) *NUM: GOSUB 130: GOTO 230
350 IF NUM >SG(X1) THEN VTAB 18: PRINT A$;: VTAB 18: PRINT "YOU DON'T HAVE THAT MUCH! ";: GOSUB 760: VTAB 18: PRINT A$: GOTO 300
351 SG(X1) = SG(X1) -NUM:SH = SH +NUM:C = C +(NUM *GP(X1)): GOSUB 130: GOTO 230
355 REM OTHER OPTIONS (360-381)
360 GOSUB 130: GOSUB 1340: VTAB 11: INVERSE : PRINT A$: NORMAL : PRINT " T)RADE, R)ECORDS";: IF L = 0 THEN PRINT ", L)ENDER, G)ODOWN OR E)MBARK?": PRINT : PRINT A$
361 IF L < >0 THEN PRINT " OR E)MBARK?": PRINT : PRINT : PRINT A$;
370 GOSUB 60: IF X$ = "G" AND L = 0 THEN X = 1
371 IF X$ = "T" THEN 120
372 IF X$ = "R" THEN X = 2
373 IF X$ = "L" THEN X = 3
374 IF X$ = "E" THEN 730
375 IF (X$ < >"G" OR L < >0) AND X$ < >"T" AND X$ < >"R" AND X$ < >"L" AND X$ < >"E" THEN GOSUB 770: GOTO 370
380 IF X = 3 AND L < >Q THEN GOSUB 770: GOTO 370
381 IF X < >3 OR L = 0 THEN ON X GOSUB 390,600,470: GOTO 360
384 REM GODOWN SUBROUTINE (390-461)
387 REM GODOWN MENU (390-392)
390 GOSUB 130: VTAB 13: PRINT A$: VTAB 13: PRINT "CARGO <T>O OR <F>ROM GODOWN?": PRINT A;: GOSUB 60: IF X$ = "T" THEN 410
391 IF X$ = "F" THEN 440
392 IF X$ < >"T" AND X$ < >"F" THEN GOSUB 770: GOTO 390
395 REM GODOWN CARGO CHOICE SUBROUTINE (400)
400 VTAB 13: PRINT "MOVE WHAT (";TC$;")? ": GOSUB 260: RETURN
410 GOSUB 400: IF SG(X1) = 0 THEN VTAB 13: PRINT "YOU HAVE NO ";G$(X1);" ABOARD! ": GOSUB 760: RETURN
420 NUM$ = "": VTAB 13: PRINT A$: VTAB 13: PRINT " MOVE HOW MUCH ";G$(X1);"? ";: GOSUB 310: IF X$ = "A" THEN INVERSE : PRINT CHR$(8);"ALL";:NUH = SG(X1): NORMAL
421 IF X$ < >"A" THEN NUM = VAL(NUM$)
425 HTAB 1
430 IF NUM >SG(X1) THEN VTAB 13: PRINT " ONLY ";:Q = SG(X1): GOSUB 1330: HTAB 11: PRINT " UNITS ABOARD! ": GOSUB 760: GOTO 420
431 IF NUM < = SG(X1) THEN SG(X1) = SG(X1) -NUM:SH = SH +NUM:GG(X1) = GG(X1) +NUM:NUM$ = "": RETURN
440 GOSUB 400: IF GG(X1) = 0 THEN VTAB 13: PRINT " THE GODOWN HAS NO ";G$(X1);", ": GOSUB 760: RETURN
450 NUM$ = "": VTAB 13: PRINT B$;: HTAB 1: PRINT " MOVE HOW MUCH ";G$(X1);" TO SHIP? ";: GOSUB 310: IF X$ = "A" THEN PRINT CHR$(8);: INVERSE : PRINT "ALL";: NORMAL :NUM = GG(X1)
451 IF X$ < >"A" THEN NUM = VAL(NUM$)
460 IF NUM >GG(X1) THEN VTAB 13: PRINT " JUST ";:Q = GG(X1): GOSUB 1330: PRINT " UNITS STORED!": GOSUB 760: GOTO 450
461 IF NUM < = GG(X1) THEN GG(X1) = GG(X1) -NUM:SG(X1) = SG(X1) +NUM:SH = SH -NUM:NUM$ = "": RETURN
465 REM LENDER SUBROUTINE (470-580)
470 GOSUB 130: GOSUB 1340: VTAB 12: PRINT "[WANCHAI DISTRICT OF HONGKONG: HOME OF ";W$;"]": PRINT W$;" GREETS YOU, TAIPAN, AND WISHES YOU WELL.": GOSUB 780: VTAB 14: PRINT A$: PRINT A$
480 VTAB 14: PRINT "WU STATES THAT HIS IRON LOTUS": PRINT "TRIAD HAS BEEN WATCHING YOU.": GOSUB 780
490 VTAB 14: PRINT A$: PRINT A$: PRINT A$: VTAB 14: PRINT W$;" ASKS, DO YOU": PRINT A$;: VTAB 15: PRINT "WISH TO B)ORROW, P)AY, OR Q)UIT? ";:NUM$ = ""
500 GOSUB 60: IF X$ = "B" THEN LD$ = "BORROW":LD = 1
501 IF X$ = "P" THEN LD$ = "PAY":LD = 2
502 IF X$ = "Q" THEN PRINT : GOSUB 1340: RETURN
503 IF X$ < >"B" AND X$ < >"P" AND X$ < >"Q" THEN GOSUB 770: GOTO 500
510 IF LD = 1 AND (B = 1 OR D >1E4) THEN GOSUB 1340: VTAB 15: PRINT "WU REGRETS THAT HE CANNOT LOAN": PRINT "YOU MORE AT THIS TIME, TAIPAN.";: GOSUB 760: GOTO 490
520 GOSUB 1340: VTAB 15: PRINT "HOW MUCH DO YOU WISH TO ";LD$;",": PRINT "TAIPAN? ";: GOSUB 310:NUM = VAL(NUM$)
530 IF X$ = "A" AND LD = 1 THEN PRINT CHR$(8);: INVERSE : PRINT "ALL";: NORMAL :NUM = C *2
531 IF X$ = "A" AND LD = E THEN PRINT CHR$(8);: INVERSE : PRINT "ALL";: NORMAL :NUM = D
540 IF LD = 2 THEN 560
541 IF NUM >2 *C THEN VTAB 15: PRINT A$: VTAB 15: PRINT W$;" REGRETS THAT HE": PRINT "CANNOT LOAN YOU THAT MUCH.";: GOSUB 760: GOTO 490
550 B = 1:C = C +NUM:D = D +NUM: GOSUB 130: GOTO 490
560 IF NUM >C THEN NUM = C:D = D -C:C = 0: GOSUB 130: VTAB 15: PRINT W$;" THANKS YOU,": PRINT "TAIPAN, FOR THE PAYMENT.";: GOSUB 780: IF D <D THEN D = 0: GOSUB 130: GOTO 490
561 IF NUM >C AND D > = 0 THEN GOSUB 130: GOTO 490
570 IF NUM >D THEN D = 0:C = C -NUM: VTAB 15: PRINT W$;" THANKS YOU FOR YOUR STARTLING GENEROSITY!";: GOSUB 130: GOSUB 780: GOTO 490
580 C = C -NUM:D = D -NUM: GOSUB 130: VTAB 15: PRINT W$;" ACCEPTS YOUR PAYMENT WITH GRATITUDE, TAIPAN.";: GOSUB 780: GOTO 490
585 REM RANDOMIZER SUBROUTINE (590-591)
590 VTAB 15: HTAB 8: PRINT "PRESS <";: FLASH : PRINT "SPACEBAR";: NORMAL : PRINT "> TO START";: GOSUB 60: IF X$ = " " THEN RETURN
591 X = INT( RND(1) *9) +1: GOTO 590
595 REM RECORDS SUBROUTINE (600-721)
600 HOME : INVERSE : PRINT A$;: NORMAL : PRINT " RECORDS OF HIGH & LOW PRICES": INVERSE : PRINT A$;: NORMAL : PRINT : PRINT " RECORDS BY P)ORT OR I)TEM?": PRINT " __________________________"
601 VTAB 10: PRINT " PRESS <SPACEBAR> WHEN FINISHED": PRINT : INVERSE : PRINT A$: NORMAL
610 GOSUB 60: IF X$ = "P" THEN GOSUB 720: GOTO 620
611 IF X$ = "I" THEN PRINT : VTAB 5: PRINT A$;: PRINT A$: GOSUB 660: GOTO 670
612 IF X$ = " " THEN HOME : RETURN
613 IF X$ < >"P" AND X$ < >"I" AND X$ < >" " THEN GOSUB 770: GOTO 610
620 GOSUB 60: IF ASC(X$) >47 AND ASC(X$) <58 THEN X = VAL(X$)
621 IF ASC(X$) <48 OR ASC(X$) >57 THEN GOSUB 770: GOTO 620
630 HOME : PRINT " ";L$(X);" PRICES (VISITS:";V(X);")": INVERSE : PRINT " ITEM HIGH LOW ";: NORMAL : FOR I = 0 TO 5: PRINT " ";G$(I);: HTAB 21
640 IF H(X,I) = 0 THEN PRINT " ?";: HTAB 30: INVERSE : PRINT " ";: NORMAL : PRINT " ?";: NEXT I
641 IF H(X,I) < >0 THEN HTAB 21: PRINT H(X,I);: HTAB 30: INVERSE : PRINT " ";: NORMAL : PRINT " ";L(X,I): NEXT I
650 INVERSE : PRINT A$: NORMAL : GOTO 700
660 VTAB 5: FOR I = 0 TO 5: PRINT " ";G$(I);: NEXT I: PRINT : PRINT " WHAT ITEM (";TC$;" ?": PRINT : PRINT A$: INVERSE : PRINT A$: NORMAL : GOSUB 260: RETURN
670 HOME : PRINT " ";G$(X1);" PRICES": INVERSE : PRINT " PORT VISITS HIGH LOW ";: NORMAL : FOR I = 0 TO 9: PRINT L$(I);
680 VTAB I +3: HTAB 12: PRINT V(I);: IF L(I,X1) = 0 THEN HTAB 21: INVERSE : PRINT " ";: NORMAL : PRINT " ?";: HTAB 32: PRINT "?": NEXT I: GOTO 690
681 IF L(I,X1) < >0 THEN HTAB 21: INVERSE : PRINT " ";: NORMAL : PRINT " ";H(I,X1);: HTAB 31: PRINT " ";L(I,X1): NEXT I
690 INVERSE : PRINT A$: NORMAL
700 PRINT " PRESS <SPACEBAR> WHEN FINISHED";
710 GOSUB 60: IF X$ = " " THEN 600
711 GOTO 710
715 REM PORT CHOICE SUBROUTINE (720)
720 FOR I = 0 TO 9 STEP 2: VTAB (I/2) +4: PRINT A$: VTAB (I/2) +4: PRINT I;" ";L$(I);: HTAB 20: PRINT I +1;" ";L$(I +1): NEXT I: PRINT
721 PRINT " WHICH PORT (0-9)?";: PRINT : INVERSE : PRINT A$: NORMAL : RETURN
725 REM EMBARK (730-751)
730 IF SH <0 THEN VTAB 13: PRINT "YOUR SHIP IS OVERLOADED, TAIPAN ";: PRINT A$: GOSUB 760: GOTO 360
731 IF SH > = 0 THEN HOME : PRINT TAB( 11);: INVERSE : PRINT "EMBARKING": NORMAL : PRINT TAB( 9);"FROM ";L$(L): INVERSE : PRINT A$: NORMAL : FOR I = 0 TO 9: IF L = I THEN NEXT I: GOTO 740
732 IF L < >I THEN PRINT TAB( 10);I;" ";L$(I): NEXT I
740 PRINT : PRINT : INVERSE : PRINT A$: NORMAL : PRINT "WHAT PORT O' CALL, TAIPAN (0-9)?"
750 GOSUB 60: IF ASC(X$) >47 AND ASC(X$) <58 AND VAL(X$) < >L THEN PO = VAL(X$): GOTO 980
751 GOSUB 770: GOTO 750
755 REM NO CAN DO SUBROUTINE (760)
756 REM OZZY NEXT LINE REPLACED CONTROL-G
760 PRINT BP$: GOSUB 780: RETURN
765 REM INPUT ERROR SUBROUTINE (770)
766 REM OZZY NEXT LINE REPLACED CONTROL-G
770 PRINT BP$;: RETURN
775 REM DELAY SUBROUTINE (780-783)
780 POKE -16368,0
781 FOR I = 0 TO 250
782 IF PEEK( -16384) >127 THEN POKE -16386,0: RETURN
783 NEXT I: RETURN
785 REM EVENTS SUBROUTINE (790-851)
790 IF K = 1 THEN RETURN
791 K = 1:X = 50 + INT( RND(1) *100) +1:GN = INT( RND(1) *3) +1:XP = (X +(GN *50)) *100: IF C <XP OR RND(1) <.75 THEN 805
792 GOSUB 1340: VTAB 12: PRINT " A BROKER OFFERS TO TAKE YOUR": PRINT "VESSEL IN TRADE FOR ONE WITH": PRINT GN +G;" GUNS & ";X +MW;" CAPACITY"
800 PRINT "FOR ";XP;" IN CASH- WILL YOU": PRINT " ACCEPT (<Y> OR <N>)?";: GOSUB 60: VTAB 12: IF X$ = "Y" THEN C = C -XP:SH = SH +X:MW = MW +X:G = G +GN: GOSUB 130
805 GOSUB 1340
810 IF C >D AND D >2000 AND RND(1) >.7 THEN GOSUB 1340: VTAB 12: PRINT "YOU'VE BEEN ATTACKED AND ROBBED BY IRON LOTUS RUFFIANS, TAIPAN !";:C = INT(C/3): GOSUB 760: GOSUB 130
820 GOSUB 180: GOSUB 860: GOSUB 190: GOSUB 1340:DN = INT((C/2) * RND(1)): IF RND(1) >.8 AND TR = 0 AND L < >0 THEN VTAB 12: PRINT " A MESSENGER FROM ";LY$;" ASKS": PRINT "THAT YOU RETURN TO HONGKONG"
821 IF RND(0) >.8 AND TR = 0 AND L < >0 THEN PRINT "WITHOUT DELAY, TAIPAN.": GOSUB 780
830 IF C >100 AND TR = 0 AND L = 0 THEN GOSUB 1340: VTAB 12: PRINT YS$;", LIEUTENANTS": PRINT "OF THE MARINER, ";LY$;", ASK IF": PRINT "YOU WILL DONATE ";:Q = DN: GOSUB 1330: PRINT "TO THE TEMPLE OF TIN HAU, THE"
831 IF C >100 AND TR = 0 AND L = 0 THEN PRINT "SEA GODDESS. (Y) OR (N)"
840 IF C >0 AND TR = 0 AND L = 0 THEN GOSUB 60: IF X$ = "Y" THEN C = C -DN:TR = 1: GOSUB 130: GOSUB 1340: VTAB 12: PRINT " ": PRINT " ";YS$;" THANK": PRINT " YOU, AND DEPART.": PRINT : PRINT A$;
841 IF C >0 AND TR = 0 AND L = 0 THEN IF X$ < >"Y" THEN GOSUB 1340: VTAB 12: PRINT " ": PRINT " ";YS$;" DEPART": PRINT "ABRUPTLY IN A CHILLY SILENCE.": PRINT A$;
850 IF (TR = 0 AND L = 0) OR X$ = "Y" AND L = 0 THEN PRINT : PRINT A$;: GOSUB 780: VTAB 13: PRINT A$: PRINT : PRINT
851 RETURN
855 REM BEARS 'N' BULLS SUBROUTINE (860-910)
860 I = INT( RND(1) *6)
870 IF RND(1) <.85 THEN RETURN
880 GP(I) = INT(GP(I) *( RND(1) *4) +.5)
890 VTAB 12: PRINT L$(L);" MARKET FORCES HAVE": PRINT "DRIVEN ";G$(I);" PRICES TO ";: PRINT GP(I);: PRINT "!";
900 GOSUB 780
910 RETURN
975 REM VOYAGE (980-1290)
980 HOME : PRINT : INVERSE : PRINT A$;: NORMAL : PRINT " SEA VOYAGE FROM ";L$(L): PRINT " TO ";L$(PO): INVERSE : PRINT A$: NORMAL : GOSUB 780: HOME :ET = ABS(L0(L) -L0(PO))
981 IF INT( RND(1) *50) +1 > INT( RND(1) *ET) +1 THEN 1290
985 REM STORM (990-1022)
990 IF RND(1) >.5 THEN 1030
991 VTAB 13: PRINT B$;: HTAB 1: PRINT " STORM, TAIPAN!": GOSUB 760
1000 IF RND(1) >.2 THEN 1020
1001 VTAB 14: PRINT " ANY PORT IN A STORM, ": GOSUB 760:PO = INT( RND(1) *10): IF PO = L THEN VTAB 14: PRINT " WE CAN'T MAKE IT, TAIPAN, ":SR = 0: GOTO 1090
1010 VTAB 14: PRINT " WE'RE HEADED FOR SHELTER, ": GOSUB 780
1020 VTAB 14: PRINT " WE RODE OUT THE STORM, TAIPAN! ": GOSUB 780
1021 IF RND(1) >.5 THEN 990
1022 GOTO 1290
1025 REM PIRATES (1030-1281)
1030 HOME :ID = INT( RND(1) *2) +1: GOSUB 5290:P = INT( RND(1) *(MW/25) *2 ^(ID *2)) + INT( RND(1) *3) +1: HTAB 1: VTAB 17: PRINT P;" PIRATE CRAFT SIGHTED!": GOSUB 780: GOSUB 1100
1040 IF ID = 1 THEN VTAB 19: PRINT " LOOKS LIKE INDEPENDENT PIRATES!": GOSUB 780
1041 IF ID < >1 THEN VTAB 19: PRINT B$;: HTAB 1: PRINT " THERE'S ";LY$;"'S BANNER!": GOSUB 780
1050 GOSUB 1100: IF ID = 1 AND RND(1) >.95 THEN VTAB 19: PRINT B$;: HTAB 1: PRINT " ";LY$;"'S FLEET DROVE'EM OFF!": GOSUB 6100:P = P * INT( RND(1) *10) +6:ID = 2: GOSUB 5290: GOSUB 1100: IF TR = 0 THEN 1070
1060 IF ID = 2 AND TR = 1 THEN VTAB 19: PRINT "THEY GREET US, AND SAIL OFF. ": GOSUB 6100:P = 0: GOSUB 780: IF RND(1) >.8 THEN 1030
1061 IF ID = 2 AND TR = 1 THEN 1290
1070 IF CR = 0 AND TR = 0 AND ID = 2 THEN CR = 1: VTAB 19: PRINT B$;: HTAB 1: PRINT " ";YS$;" ARE CURSING US!": GOSUB 780
1080 VTAB 19: PRINT " THEY'RE FIRING ON US! ": GOSUB 5380
1081 IF INT( RND(1) *P) +1 > INT( RND(1) *5) +1 THEN GOSUB 5540: VTAB 19: PRINT B$;: HTAB 1: PRINT " THE BUGGERS HIT US!":SR = SR -( RND(1)/(MW/( INT( RND(1) *50) +1))): GOSUB 780: GOSUB 1100: GOTO 1090
1085 VTAB 19: PRINT " MISSED US, TAIPAN! ": GOSUB 780
1090 IF SR <.1 THEN GOSUB 780: VTAB 19: PRINT " WE'RE GOING UNDER, TAIPAN!";: GOSUB 6300:X$ = "": GOTO 1300
1091 GOTO 1120
1095 REM SHIP STATUS SUBROUTINE (1100-1110)
1100 HTAB 1: VTAB 16: INVERSE : PRINT A$;: NORMAL : PRINT " GUNS: ";G;" REPAIR:";: IF SR <0 THEN SR = 0
1110 PRINT INT(SR *100);"% ": PRINT "SHIPS ENCOUNTERED: ";P;" ": PRINT A$;: PRINT A$;: PRINT A$;: RETURN
1120 VTAB 19: PRINT " SHALL WE R)UN, F)IGHT, OR P)ARLEY?": GOSUB 60: IF X$ = "R" THEN X = 1
1121 IF X$ = "F" THEN X = 2
1122 IF X$ = "P" THEN X = 3
1123 IF X$ < >"R" AND X$ < >"F" AND X$ < >"P" THEN GOSUB 770: GOTO 1120
1130 ON X GOTO 1140,1160,1200
1140 IF SR < = RND(1) AND INT( RND(1) *6) +1 < = INT( RND(1) *P) +1 THEN 1150
1141 IF SR > RND(1) AND INT( RND(1) *6) +1 > INT( RND(1) *P) +1 THEN 1143
1142 GOTO 1150
1143 GOSUB 6220: VTAB 18: PRINT " WE ESCAPED FROM 'EM TAIPAN! ":P = 0: GOSUB 780: GOSUB 1100: IF RND(1) >.8 THEN 1030
1144 GOTO 1290
1150 IF SR > RND(1) AND RND(1) >.6 THEN P = P - INT( INT(( RND(1) *P) +1)/2): GOSUB 6220: GOSUB 5290: VTAB 19: HTAB 1: PRINT P;" OF 'EM STILL WITH US! ": GOSUB 780: GOSUB 1100: GOTO 1050
1151 VTAB 19: PRINT " CAN'T SHAKE 'EM! ": GOSUB 780: GOTO 1050
1160 VTAB 19: PRINT " WE'RE FIRING ON 'EM! ": GOSUB 5540: IF INT( RND(1) *(G +1)) +1 > INT( RND(1) *4) THEN VTAB 19: PRINT B$;: HTAB 1: PRINT "HIT 'EM!": GOSUB 5680: GOTO 1170
1161 VTAB 19: PRINT " MISSED 'EM! ": GOSUB 780: GOTO 1190
1170 NK = RND(1): IF NK >.4 THEN IF P > = G THEN X = INT( INT(( RND(1) *(G -1)) +1)/3) +1
1171 IF NK >.4 AND P <G THEN X = INT( RND(1) *P) +1
1172 IF NK < = .4 THEN VTAB 19: PRINT " THEY'RE STILL AFLOAT.": GOSUB 780: GOTO 1190
1180 P = P -X: VTAB 19: PRINT " SANK ";X;" OF 'EM, TAIPAN!": GOSUB 5830: IF P >0 THEN GOSUB 5290
1190 GOSUB 1100: IF P = 0 THEN IF RND(1) >.5 THEN 1270
1191 IF P = 0 THEN VTAB 19: PRINT " THAT'S ALL FOR THE BUGGERS!": GOSUB 780: IF RND(1) >.8 THEN 1030
1192 IF P = 0 THEN 1290
1193 GOSUB 780: GOTO 1050
1200 IF RND(1) <.8 THEN VTAB 19: PRINT " THEY REFUSE TO PARLEY, TAIPAN. ": GOSUB 780: GOTO 1050
1201 VTAB 19: PRINT " THEY AGREE TO DISCUSS TERMS. ": GOSUB 780
1210 IF P >G/2 OR RND(1) >.7 THEN VTAB 19: PRINT " THEY OFFER TO LET US GO IN EXCHANGE FOR";: PRINT "ALL OUR CASH. DO WE ACCEPT? TAIPAN (Y/N)";: GOTO 1220
1211 GOTO 1240
1220 GOSUB 60: VTAB 19: PRINT A$;: PRINT A$;: VTAB 18: IF X$ = "Y" THEN IF RND(1) >.2 AND C >100 + INT( RND(1) *2000) THEN P = 0:C = 0: VTAB 19: PRINT " THEY TOOK IT & RAN!": GOSUB 780: GOSUB 1100: GOTO 1280
1221 IF X$ < >"Y" THEN 1050
1222 C = 0: VTAB 19: PRINT " THEY STILL INTEND TO FIGHT!": PRINT : PRINT A$;: GOSUB 780
1230 GOSUB 780: GOTO 1050
1240 VTAB 1: HTAB 13: PRINT SFL$;: VTAB 19: PRINT " THEY OFFER TO SURRENDER. ": GOSUB 780: VTAB 19: PRINT " DO WE LET THEM GIVE UP (Y/N)? ": GOSUB 60: IF X$ = "Y" THEN 1260
1250 IF RND(1) >.5 AND P >0 THEN E = INT( RND(1) *P) +1:P = P -E: GOSUB 6100: VTAB 19: PRINT B$;: HTAB 1: PRINT E;OF'EMRANAWAY!":GOSUB 780:GOSUB 1100:GOSUB 5290:GOTO 1050
1260 IF RND(1) >.7 THEN VTAB 19: PRINT " THEY'RE PREPARING TO ATTACK! ": GOSUB 780: GOTO 1050
1265 REM CAPTURE (1270-1281)
1270 VTAB 19: PRINT " WE'VE CAPTURED A BIGGER SHIP!": GOSUB 760: VTAB 19: PRINT " WE'RE TRANSFERRING TO IT NOW.": GOSUB 780:G = G + INT( RND(1) *(G +1)) +1:E = SH + INT( RND(1) *(SH +150)) +1:SH = SH +E:MW = MW +E:P = 0
1280 IF SR <.1 THEN 1300
1281 IF P >0 THEN 1050
1285 REM ARRIVAL (1290)
1290 CR = 0:SR = 1:L = PO:V(L) = V(L) +1:B = 0:K = 0: GOSUB 160: HOME : PRINT : INVERSE : PRINT A$;: NORMAL : PRINT " ARRIVING ";L$(L);" AFTER": PRINT " A VOYAGE OF ";ET;" DAYS.": INVERSE : PRINT A$: NORMAL : GOSUB 780: HOME : GOTO 120
1295 REM THAT'S ALL FOLKS (1300-1321)
1300 HOME :NW = C -D:Q = NW/GT: VTAB 4: INVERSE : PRINT A$;: NORMAL : PRINT : PRINT "YOUR SCORE, BASED UPON TIME AND YOUR": PRINT "NET WORTH (EXCLUDING STOCK) IS ";: GOSUB 1330: INVERSE : PRINT A$: NORMAL
1310 IF X$ = "R" THEN PRINT "WOULD YOU LIKE TO PICK UP THIS": PRINT "GAME WHERE YOU LEFT OFF (Y/N)?": GOSUB 60: IF X$ = "Y" THEN HOME : GOTO 120
1320 GOSUB 1340: VTAB 10: PRINT A$;: PRINT "DO YOU WISH TO START OVER (Y/N)?": GOSUB 60: IF X$ = "Y" THEN RUN
1321 END
1325 REM BIG NUMBER SUBROUTINE (1330-1370)
1330 IF ABS(Q) <1E6 THEN PRINT INT(Q);: NORMAL : PRINT " ": RETURN
1331 IF ABS(Q) <1E9 THEN Q = Q/1E6:Q$ = "MIL": GOTO 1335
1332 IF ABS(Q) <1E12 THEN Q = Q/1E9:Q$ = "BIL": GOTO 1335
1333 IF ABS(Q) > = 1E12 THEN Q = Q/1E12:Q$ = "TRL": GOTO 1335
1335 PRINT INT(Q);Q$;: NORMAL : PRINT " "
1337 RETURN
1338 REM CLEANUP SUBROUTINE (1340-1370)
1340 FOR I = 12 TO 18
1345 HTAB 1
1350 VTAB I: PRINT A$;
1360 NEXT I
1365 PRINT : VTAB 12
1370 RETURN
4555 REM SEA ACTION SUBROUTINES (5000-6360)
4557 REM GRAPHICS INITIALIZATION (5000-5120)
4999 REM OZZY DIM WERE 14
5000 DIM CH$(13),CN$(13)
5005 FOR V1 = 0 TO 12
5010 READ CH$(V1)
5020 CN$(V1) = CH$(V1)
5030 NEXT V1
5040 DATA " : "
5050 DATA " ------- "
5060 DATA " ------- \: "
5070 DATA " :/ ------- \\ "
5075 DATA " // ------- \\\ "
5080 DATA "/// ------- \\\ "
5085 DATA "/// ------- \\ "
5090 DATA "/// ------- :\ "
5100 DATA "// ------- : "
5105 DATA "/: ------- -:- "
5110 DATA " :-- : :000: "
5111 DATA ": \----------/ / "
5112 DATA " \ / "
5120 RETURN
5290 REM PIRATES ARRIVE (5300-5370)
5300 GOSUB 5950
5305 IF ID < >1 THEN CH$(0) = " ===: "
5310 FOR A = 1 TO 10: VTAB 1: PRINT AS;: NEXT A
5320 FOR A = 1 TO 30
5340 FOR B = 0 TO 13
5350 VTAB B +1: HTAB 40 -A: PRINT LEFT$(CH$(B),A),;" ";
5360 NEXT B: NEXT A
5370 RETURN
5380 REM PIRATES FIRE (5380-5440)
5390 FOR A = 1 TO INT( RND(1) *6) +1
5410 A1 = INT( RND(1) *10) +1
5420 IF A1 = 5 THEN 5410
5430 HTAB 16 +A1: VTAB 11: PRINT "*"
5431 REM OZZY NEXT LINE REPLACED CTRL-G
5432 PRINT BP$
5433 HTAB 16 +A1: VTAB 11: PRINT " "
5435 NEXT A
5440 RETURN
5540 REM CANNON HIT (5550-5560)
5549 REM OZZY NEXT LINE REPLACED CTRL-G
5550 PRINT BP$
5560 RETURN
5680 REM DAMAGE 'EM (5730-5760)
5730 I = INT( RND(1) *17) +2:I1 = INT( RND(1) *9) +2
5740 CH$(I1) = LEFT$(CH$(I1),I -1) +" " + MID$ (CH$(I1),I +1, LEN(CHS(I1)))
5750 HTAB 10: VTAB I1 +1: PRINT CH$(I1)
5755 GOSUB 780
5760 RETURN
5830 REM PIRATES SINK (5840-5940)
5840 FOR A = 0 TO 12
5850 VTAB A +1: PRINT A$;
5870 FOR A1 = 0 TO 12 -A
5880 VTAB 2 +A +A1: HTAB 10: PRINT CH$(A1)
5890 NEXT A1
5910 NEXT A
5920 VTAB 14: PRINT A$;
5930 GOSUB 5950
5940 RETURN
5950 REM REPAIR DAMAGE (5960-5990)
5960 FOR A = 0 TO 13
5970 CH$(A) = CN$(A)
5980 NEXT A
5990 RETURN
6100 REM PIRATES DEPART (6110-6210)
6110 FOR A = 9 TO 0 STEP -1
6130 FOR B = 0 TO 13
6140 HTAB A +1: VTAB B +1: PRINT CH$(B);" "
6150 NEXT B: NEXT A
6160 FOR A = 22 TO 1 STEP -1
6180 FOR B = 0 TO 13
6190 HTAB 1: VTAB B +1: PRINT RIGHT$(CH$(B),A);" "
6200 NEXT B: NEXT A
6210 RETURN
6220 REM WE PULL AWAY (6230-6280)
6230 FOR A = 30 TO 1 STEP -1
6250 FOR B = 0 TO 13
6260 HTAB 40 -A: VTAB B +1: PRINT " "; LEFT$(CH$(B),A); CHR$(8);" ";
6270 NEXT B: NEXT A
6280 RETURN
6290 REM WE'RE SUNK! (6300-6360)
6300 FOR A = 1 TO 17
6310 FOR B = 1 TO 100: NEXT B
6320 VTAB 24: HTAB INT( RND(1) *40) +1: PRINT "0"
6350 NEXT A
6360 RETURN
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment