Voyage of Peril

Developer(s): Gregory Harder
Type: Cassette
Platform(s): TS 1000
Tags: Game

Voyage of Peril, adapted by Greg Harder from a ZX81 program in a British magazine, is a sailing adventure game in which the player captains the HMS Seawitch across six map regions, collecting treasure while managing crew, food, hull integrity, and gold. The program is split into two parts: Part I (this listing) handles UDG character definition, screen data storage, and introductory text, while Part II contains the main game loop. Custom UDG characters are loaded via LPRINT commands to an external high-resolution board (the “SHREB” sprite system) at address 19400, and the machine’s memory above 32K is used to store the six map grids without raising RAMTOP. Constants such as N0–N9, I0–I9, T0, T1, T4, T6, T8, HU, and P5 are precomputed at initialization (lines 9500–9530) to reduce token overhead throughout the program. Map transitions are handled by POKEing load/save addresses directly into machine code routines, then calling USR to swap map data in and out of high RAM.


Program Analysis

Program Structure

The listing is divided into two separately saved parts. Part I (lines 10–9996 in the first segment) defines UDG characters, stores screen data, and presents the introductory text and instructions. It ends by loading Part II (LOAD "VOYAGE2"). Part II (lines 10–9995 in the second segment) contains the full game engine. The REM blocks at lines 0, 1, 2, and 3 in each part hold compiled machine code or packed data used by the SHREB sprite subsystem; their content is not valid BASIC but binary data embedded in REM storage.

Initialization and Constant Table

Lines 9500–9530 pre-calculate a large set of named constants using minimal BASIC tokens, a well-known size-saving technique. Integer and fractional values are derived from PI, NOT PI, and CODE of printable characters rather than being stored as numeric literals. Key constants include:

  • N0 through N9 — integers 0–9 derived from NOT PI, PI/PI, sums, INT PI, and VAL "n"
  • I0 through I9 — values 10–19, where I0=CODE "\~~" (10), I2=CODE "£" (12), etc., exploiting character codes
  • T0=CODE "=" (61→used as 20 in context? Actually 61; used as the POKE multiplier for repairs), T1=CODE "+" (43), HU=I0*I0 (100, the ship’s hull/crew capacity)
  • T4=VAL "4500", T6=VAL "6E3", T8=VAL "8980" — frequently-called subroutine/jump targets stored as variables to save repeated literal token space
  • P5=VAL ".5" — used in boundary checks throughout the movement loop

SHREB Sprite System and USR Calls

All graphical output — clearing the screen, printing sprites, moving the ship — is routed through an external high-resolution board whose machine code entry point is stored in HR (19400). The idiom IF USR HR THEN ... is used pervasively: the USR call either performs a hardware action and returns a non-zero value (allowing the THEN branch to execute a normal BASIC display statement as a fallback), or it handles rendering entirely. LPRINT is used as the communication channel to the sprite board, sending command codes such as SD, SM, SS, SE, and SP followed by parameters.

Line 610 defines the ship sprite: IF USR HR THEN LPRINT SD;1,"16,1C,3C,7C,FE,10,D7,7E". Lines 1173–1176 animate the ship on the legend screen using a sine-wave path computed in BASIC and sent as sprite move commands.

UDG Character Definitions

Part I defines a full set of UDG characters for the game’s map symbols and alphanumerics. Each definition is sent via IF USR HR THEN LPRINT U;"X","HH HH HH HH HH HH HH HH", where U is a command byte and the quoted string contains eight hex byte pairs. Characters defined include:

  • Digits 0–9 and symbols ?, ( — custom numerals for the hi-res display
  • Full uppercase alphabet A–Z
  • Map hazard symbols: rocks (▞), reefs (=), icebergs ([~~]), sandbanks (*), Queen’s Castle ([*])
  • Treasure chests (codes A–Z, lines 570–600) — a FOR loop at line 570 iterates through character codes 166–191, POKEing each into the UDG table address computed from system variables at 16425/16426, then sending a single chest bitmap
  • Three vegetation types for the three climate zones: palms (tropics), pines (temperate), mountains (northlands), each loaded or reloaded when the map zone changes (line 6200–6220)

Map System and High-Memory Storage

Six maps are stored above address 32768 without raising RAMTOP, as noted at line 9980. Map data addresses are assigned at lines 7250, 7500, 7750, 8000, 8250, and 8500 in steps of 375 bytes (375 = 25 columns × 15 rows for the D$ array). The load/save mechanism at lines 6110–6180 works by POKEing the target address’s low and high bytes directly into machine code at fixed locations (20507/20508), then calling USR VAL "20495" or USR VAL "20519" to invoke the copy routines. This avoids any BASIC array copy overhead.

The map display array D$ is declared as DIM D$(CODE "?", CODE ";") = DIM D$(63,59) — though only 15×25 of those cells are actively used for the visible map grid.

Main Game Loop

The sailing loop (lines 100–600) runs each day’s turn:

  1. Roll wind force (WF) and direction (WD) randomly
  2. Accept course (C) and sail area (A) from the player
  3. Check if course is within 45° of the wind — if so, branch to the “in irons” penalty (line 1200)
  4. Compute distance sailed: D=0.00001*A*WF^1.5*H
  5. Step along the course in a FOR loop, updating X, Y and moving the ship sprite
  6. At each step, check D$(L,K) for a hazard and branch accordingly

The hazard dispatch at line 430 is a single computed GOTO expression summing boolean products:

GOTO VAL "2E3"*(CODE D$(L,K)>=CODE "[A]")+VAL "2250"*(D$(L,K)="▞")+...

This evaluates each condition independently and sums the target line numbers, which works correctly only because exactly one condition can be true at a time.

Event Subroutines

LineEventEffect
1000BecalmedNo movement; crew eats rations
1200In IronsSailed too close to wind; crew eats rations
1400Storm/HurricaneHull damage proportional to (WF-N2)*I0
2000TreasureGold added; chest replaced with land tile; Q() array updated
2250/2500/2750/3000Rocks/Reefs/Sandbanks/IcebergsRandom hull damage using INT(H*(N1-RND/N2))-N2 formula
3250PiratesAll gold stolen; crew and hull randomly reduced
3500Home PortGame end; hi-score check against HG
3750LandRandom branch: savages (R<0.2), maidens (R<0.4), or trade menu
5000/5250/5500/5750Lose conditionsMutiny (no food), marooned (few crew on land), adrift (few crew at sea), shipwrecked (H<N5)

Trade Menu

The trade menu (line 4000) uses a four-option dispatch at line 4050: GOTO VAL "4E3"+HU*(T$="F")+CODE "COS "*(T$="C")+VAL "300"*(T$="R")+VAL "400"*(T$="S"). The offsets land at 4100 (food), 4200 (crew), 4300 (repair), and 4400 (sail on). The use of CODE "COS " gives 200 (the character code of the C keyword token) as an offset — an unusual technique exploiting keyword token values.

Flavor Text by Map Zone

The land-encounter messages at lines 3830 and 3920 use boolean arithmetic to select zone-appropriate text inline: "SAVAGES" AND (N=N1 OR N=N2);"AMAZONS" AND (N=N3 OR N=N4);"VIKINGS" AND (N=N5 OR N=N6). Since AND with a true condition returns the string unchanged and AND with false returns 0 (printed as nothing), exactly one name appears.

Notable Techniques

  • VAL “number” in GO TO/GO SUB: Used throughout to encode destination line numbers as string literals, saving bytes versus storing large integer literals directly in the token stream.
  • CODE “char” for constants: Character codes of printable characters supply integer constants (e.g., CODE "£"=12, CODE "+"=43) without using numeric literals.
  • LPRINT as sprite command channel: All sprite and hi-res display operations are sent to the external board via LPRINT, with BASIC display statements as conditional fallbacks under IF USR HR THEN.
  • Computed GOTO via summed booleans: Line 430’s hazard dispatch and line 4050’s trade dispatch both compute a single numeric target by summing products of boolean conditions and offsets.
  • Treasure chest loop: Lines 570–600 iterate through 26 character codes, each time POKEing a new UDG address and sending the same bitmap, effectively defining 26 distinct UDG slots (A–Z codes 166–191) with a single loop.

Potential Anomalies

  • Line 200 branches to CODE "[Y]" on out-of-range course input; this evaluates to the character code of Y (an uppercase UDG), which is a non-standard but deliberate line-number encoding.
  • The DIM D$(63,59) declaration allocates far more cells than the 15×25 map uses, consuming extra memory but simplifying index arithmetic.
  • Line 5800 (the end-of-game PRINT) is referenced by GOTO from multiple lose/win conditions but does not appear as a numbered line in the listing — it falls through from line 5790, which terminates with GOTO VAL "5800"; the actual PRINT at line 5805 is the first statement at or after that address.

Content

Appears On

Related Products

Related Articles

Related Content

Image Gallery

Voyage of Peril

Source Code

   0 REM [C]█[1][9][8][7]█[S][M][C]##▘ ""LN  RUN ##[P]#Y2 GOSUB #<>5▟▝TAN  PRINT # RETURN,C▌LN [*]RNDINT / LET TAN 6-RNDLN #? FASTLN LN + LPRINT TAN LN [H]RND PRINT LN [4]RND7LN [H]RND# LET #TAN 7# RETURN#C▀ RETURN;""6-RNDTAN A ##▞▌ACS 9ACS =( IF ,,▘ 4,,TAN 7LN [T]RNDLN [4]RNDLN ,,INKEY$ ##ACS ZACS ZACS Z##STR$ LN STR$ RND LET J NEW▛W#TAN Y3[)]K▌LN [*]RNDINT (Y[Z][(]SQR LN [*]RNDINT 25  6AT ZA4##<▘ COPY*Q  GOSUB [K]TAN  NEXT Y▞# ( CLEARLEN  LIST W4 CLEAR▞"" CLEARACS ##C▝▞[K])4 5 4##INKEY$   ▌ASN #INKEY$ ;# GOSUB ###▛ INPUT E£RND ###) RUN ▙;Y2 GOSUB #Y PRINT ▘▛▝ CLEARACS ##CODE [P]▝LN [>]▝LN 4▝<>5GINKEY$ #[8]▝ CLEARACS #▚/▖ CLEARACS #LEN E£RND▘9  GOSUB PIF FOR 5 █;6#INKEY$  FOR  GOSUB [K]LN F?<>5GINKEY$ TAN 7LN [T]RNDLN [4]RND##LN ▞INKEY$ VAL 7LN [H]RNDAT LN STR$ RND#TAN 2 COPY/▝2 STR$ 7LN [T]RNDLN ,,INKEY$ SGN  GOSUB ##ZLN  LET RND##?( CLEARACS .*PI▌4▝▞▒▛( CLEAR#TAN Y COPY/▘[J]MVAL Z CLEARACS #[:]7LN [T]RNDLN ,,INKEY$ # RETURN,4"7 GOSUB ##ZLN [T]RNDLN ,,INKEY$ ## GOSUB ##ZVAL #[)]-▘K▖ GOSUB #- COPY4▝-  FAST##MSQR Z LET [(]2▘K▖ GOSUB #2 COPY4▝2 ##MINT Z#[W]S▞##- /▝2  GOSUB #SGN Z6PEEK Z#[B]3#A 6STR$ ZAT VAL Y[Z][(] PRINT UVAL Z# LET  CLEARACS ##4▌LN SGN INKEY$ /▀LN ##UPEEK Z#▞ USTR$ Z##,,#MSTR$ Z GOSUB #SGN ZUUSR Z# GOSUB PIS▒#MSTR$ Z GOSUB #INT ZAT #▙##▄#5CHR$ ZOUUSR Z[Y]4[N] GOSUB ##ZTAN Y COPY/▘[J]MVAL Z7LN [T]RNDLN [4]RNDVAL 7LN [H]RND#I 6INT Z#6SGN ZAT Y▘ PRINT VAL VAL EINT Z GOSUB #SGN Z▞▌VAL ACS EACS .( IF [R] GOSUB #6INT Z GOSUB #SGN ZAT ACS GACS 1( IF ;6SGN Z GOSUB #INT ZAT #ACS <[~~]##ACS +[£]#Y[Z][(]S,, PRINT UVAL Z# LET LN SGN INKEY$ AT  LET W RETURNASN S[O]TAN Y▘MINT ZLN COS RNDCOS LN [H]RNDMINT ZLN TAN RNDCOS 7LN [T]RNDLN [4]RND[S]S▀#INKEY$ #LN (INKEY$ #INKEY$ LN (INKEY$ #PI GOSUB #SQR Z[)]W PRINT 7LN [T]RND[S]K▀#INKEY$ # GOSUB #ABS Z[(]W4▘XSGN # GOSUB #USR ZUPEEK Z#USGN Z#[B]LN  INPUT RND6CHR$ ZUABS Z#USGN Z#[B]LN  INPUT RND6**Z£TAN LN +#4*UINT Z#5 4▘ /#J#7"#[L]4 RUN +4 INPUT TAN USTR$ ZECHR$ Z GOSUB #**Z6 AND Z GOSUB #>=Z PRINT  FAST GOSUB # LPRINT C#UPEEK ZLN  INKEY$ STR$ VAL #3ZACS <( IF AT ACS .*( CLS#SGN 7 FAST[B] GOSUB # LPRINT C▌#J#/ NEXT UABS ZLN  INKEY$ Y,,[(]#VAL ,*ZACS 1( IF AT ACS +3( CLS>▘4 E>=Z,,6>=Z FOR E AND Z,,6 AND Z LET X4[A]5INT ZP4[?]TAN UUSR Z RETURN▒4▖,J/NOT UPEEK ZLN  INKEY$ VAL ,3ZACS +( IF AT ACS 1*( CLS#UABS ZJ NEW▛C$#,VAL ?ACS 0( CLSAT ACS ▖( UNPLOT #/[E]E(RND#[T]COS  RETURN█4▌LN [*]RNDINT ▘VAL LN  PAUSE ,,AT  FOR / GOTO  PRINT  SCROLL FAST:RND▟#LN ##7 FAST▞▌[J]#( CLEARSGN  LPRINT  LET TAN LN  SCROLLRND#?( CLEARLN ##K▀Y▟>LN COS RNDTAB SQR #TAN LN  SCROLLRND FASTAT LN 4+ FASTLN ##AT  FAST##LN  PLOT ;LN [~~]+ LPRINT / STEP LN  SCROLLRND#▞ / SLOW###Y[Z][(]STR$ VAL  PRINT LN SGN INKEY$  LET AT SGN TAN 2 COPY/▝2 STR$ LN C#SGN USTR$ Z#UPEEK Z5SGN Z PRINT  FASTLN [D]#+C▞WLN [J]#/ RUN UUSR Z# LPRINT  LET F FASTLN [D]#+C▞£LN [J]#/ RUN USTR$ Z# LPRINT UABS Z PRINT  FASTLN [D]#+C▞XLN [J]#/ RUN UUSR Z# LPRINT  LET 7LN [D]#+COS $LN [J]#/ SAVE LN 7?2"" CLEARACS ##C▝2[K]5 4[J]PEEK  CLSLN #?ABS ▐▒<= CLS*K CLS-4▞▒#<= CLS3K CLS# NEW█PEEK  CLSACS )( PAUSE 7+4 FOR <= CLS3K CLSLN ##/SGN 76-RNDLN #?LN [B]:##▘▘COS  CLEARACS V#""( RAND $4 PLOT .#[N]4 INPUT TAN 7# RETURN#4,,LN  OR #LN  RUN #/L7# RETURN,C> RETURN;CG RETURN#C# RETURNAT C# RETURNTAB C#/# GOSUB #AT Z# NEW LIST LEN ( RETURNRNDCODE [O]#ATN [J]#/STR$ #LEN ▒#[J]# GOSUB #AT ZTAN ▞ COPY7# RETURN#COS  RETURN,4▖Y▖/" RETURN;4VAL ▖# RETURN▀ASN SQR #M""Z/ STOP GOSUB #AT Z/SQR 7LN [T]RND## RETURN[T]ABS =INKEY$ # RETURNRNDABS "INKEY$  GOSUB #AT Z/[?]7LN [H]RND NEWZ GOSUB #AT Z[T]#K GOTO Y▒█#/ NEW6-RNDLN #? FAST CLEARACS ▘#CODE STR$ .LN  SAVE < LPRINT  FAST#[L]C£,VAL STR$ LN K#SGN AT <"/ LIST  LPRINT /CODE  RETURN""4▖Y"/U PRINT  NEW# RETURNRNDK▛ LET  CLEARACS ▘LEN /G CLEARACS ▘#C~~[J] CLEARACS ▘▚LN ##/▖ CLEARACS ▘LEN  LET LN #,,~~ PRINT VAL  NEW#LN ##AT ▀ LET  RETURN█S LET  CLEARACS ▘▚[J] GOSUB #AT Z PRINT YZ[)]>=[J]#LN  RUN # LET VAL M<=Z[B]*[B]**- ACS >#5 2; FASTACS TLN STR$ RNDSGN U""Z RETURN▖ASN  # RETURN▝C# RETURN▘CFY▒ PRINT STR$ , PRINT U""Z[B]4"U<=ZACS #C▖ LET J/▘ LET #)4 ;SGN  LET <X4 TO AT ££ GOSUB #AT ZTAN U<=Z RETURNASEXP  RETURN[A]KASN  FAST5 2; FOR  LPRINT /AT U<=Z▛ FAST5 0S LET A,/ GOSUB  CLEARACS ##Y[S]C▝Y[C][S]SQR ## NEW▛▙#VAL ) 45 5ACS SACS SACS S# GOSUB [K]F#( UNPLOT AT TAN LN COS RNDY*C▀LN [H]RND)  WEAT Z FAST GOSUB #AT Z GOSUB #£RND< PRINT ▞4,VAL STR$ LN ##SGN AT <( PRINT  LET X4 GOSUB  LPRINT 6AT ZTAN LN COS RNDCATN LN [H]RNDW PRINT #Y""CHR$ ▒( UNPLOT ## LET /LEN 7LN [T]RNDLN ,,INKEY$ LN [4]RNDTAN Y COPY/▘[J]MVAL Z CLEARACS #[:]LN ## GOSUB #NOT ZE-RNDLN ## GOSUB # OR ZE-RND7LN [T]RNDLN ,,INKEY$  GOSUB #<=ZE#Z FAST GOSUB ##ZE OR Z FASTLN £PI LPRINT 6#ZENOT Z FASTLN £PI LPRINT 6#ZE<=ZLN £PI LPRINT 6#ZTAN LN +#4.UINT Z5 4##▘4 ,,▘ STEP * GOSUB [K]▞4F#( UNPLOT X4 DIM TAN USGN Z RETURN C##UPEEK Z#VAL Y[Z][(]VAL  PRINT WVAL LN  LET RNDSGN Y▒[S]4*UABS Z[<] RETURN▒S?#▘4  GOSUB PI# LET AT #LEN ▒#/ OR #?( CLEAR2 COPYS▘0 LET AT VAL LN SGN INKEY$ AT #▞ UABS Z##▀[B] GOSUB PIPIK[U]AT ▌USQR Z[S]4[L]USQR Z#EPEEK ZY COPY[W]4▘8# FASTVAL Y[Z][(]2 LN SGN INKEY$ AT £ LPRINT 94 LIST 5INT ZP4▟TAN LN +#40UINT Z5 COPYR##▘4  GOSUB PI▘ STEP * GOSUB [S]▞47#( UNPLOT X4 CONT TAN USQR Z RETURN[Z]C##UPEEK Z#VAL Y[Z][(]VAL  PRINT XVAL LN  LET RNDSGN Y▒[S]4-UABS Z[<] RETURN▒S:#▘4 ,,# LET AT #LEN ▒#/ AND #?( CLEAR2 COPYS▘0 LET AT VAL LN SGN INKEY$ AT #▞ UABS Z##▀[B] GOSUB PIPIK[V]AT ▖USGN Z RETURN C▀[S]4[I]USGN Z#EPEEK ZY COPY[W]4▘8# FASTVAL Y[Z][(]2 LN SGN INKEY$ AT £ LPRINT 94 LIST 5INT ZPTAB ▗#TAN LN +#4*UINT Z#5 COPYR▞4#[B]ACS -F( CLS[8]4 POKE 14 INPUT TAN USGN Z#UPEEK Z#VAL Y[Z][(]VAL  PRINT £LN  LET RND#?( CLEAR2 COPYS▘0 LET AT VAL LN SGN INKEY$ AT UABS Z£[T]4 STEP AT ▌# RETURN COPYC▒USQR Z##[U]KSQR  GOSUB #SGN Z#INKEY$ #USTR$ Z# FASTVAL Y[Z][(]2 LN SGN INKEY$ AT ▌ LPRINT H4 LIST 5INT ZP4[B]TAN LN +#41UINT Z#5 4[B]▞4ACS 27( CLS▘ S[B] FAST GOSUB PI LPRINT 4 INPUT 14 CONT TAN USGN Z#UABS Z#VAL Y[Z][(]VAL  PRINT $LN  LET RNDY,,[(]##▛( CLEAR2 COPYS▘0 LET AT VAL LN SGN INKEY$ AT UPEEK Z$[T]4>=AT ▌# RETURN COPYC▒USQR Z##[U]KATN USGN Z#UPEEK Z#USTR$ Z# FASTVAL Y[Z][(]2 LN SGN INKEY$ AT ▌ LPRINT H4 LIST 5INT ZP4[6]TAN 7# RETURN0K▌LN [*]RNDINT 1 RETURNGK RUN CHR$ 0TAN LN ▝##ACS 4ACS 4ACS 4ACS 4LN ▝#█#7# RETURN"#TAN 7# RETURN"TAB SQR #7#ACS #C▝CHR$ RND)  77 FAST▞▒A # FOR ;( CLEAR FOR 5 S; FOR  LPRINT 7LN =#>4▌76-RNDTAN </ PAUSE 7LN [H]RND RETURN4) ▞SSTR$ LN [*]RNDINT .▘4 ,,# RETURNS**CHR$ /#TAN 7LN [H]RND RETURN4K SCROLLLN [4]RND[B]***- #5 Y;6**Z SCROLLLN [T]RND GOSUB # AND ZTAN LN ##Y[Z][(]K▝CHR$ RND##ACS WACS 1ACS WACS 1ACS WACS 1ACS  GOTO 6>=Z#J NEW▛WM#RND) STOPZ GOSUB #**ZY▒ PRINT #>~~VAL #U#RND RETURN▌S)JLEN ,,[B]##: C:3ACS ;( CLS/▛#[J]ACS )*( CLS[Q]#7<#>#[Q]#FLN ##<AT ▀ LET XTAB ACS #TAN LN COS RNDTAB SQR #E>=Z) STOPZ▞▒VAL ,#7<,#LN ##F<AT ( LET TAN  CLEARACS #EXP LN ##E-RND# RETURN,4$7 GOSUB ##Z FASTLN [4]# LPRINT LN [T]RND#~~PIVAL 5ORND##[S]C UNPLOT  CLEAR[-]#M#RNDLN £#AT LN [4]#U#RND CLEAR[Y]O4 CLSTAN LN COS RNDY C▀LN [H]RNDM#RNDTAN 1""AT Y▖PEEK  CLS0LN ###["]INKEY$  GOSUB ##INKEY$ <<7# RETURN#C*STR$ LN [H]RND#LN ▞INKEY$ ▖SGN ##ACS [W],LEN █>#<( POKE TAN ▞4[J]##ACS [W]>#<( RUN TAN  E-RND# RETURN;C# RETURN#C▌LN [*]RNDINT + LPRINT 6-RND▘  TAN  TO     RETURN THENC▌LN [*]RNDINT ) FAST SCROLL )""#STR$  RETURN LLIST ASN ## RETURN SCROLLASN [:]RND RETURN LOAD ASN ▛# RETURN LIST ASN 3# RETURN PAUSE ASN ## RETURN PRINT ASN ## RETURN PLOT ASN [Y]INKEY$  RETURN RUN ASN ▟INKEY$  RETURN SAVE ASN PEEK # RETURN RAND ASN ## RETURN CLSASN ;INKEY$  RETURN UNPLOT ASN TAB INKEY$  RETURN CLEARASN ▗INKEY$  RETURN RETURNASN [*]RND RETURN COPYASN /# RETURN LPRINT 4[9]SGN )[J]#STR$ 7# RETURNXC##7# RETURN#C[<] RETURN;4 PLOT # RETURNAASN [▒]# RETURNBASN [B]INKEY$  RETURNCASN [B]PI RETURNDASN  SCROLLINKEY$  RETURNIASN ## RETURNLASN [5]# RETURNPASN ## RETURNRASN [T]# RETURNS42F#7 RETURNDASN ## RETURNEASN ▞# RETURNMASN 8# RETURNPASN [1]# RETURNSASN ##/# RETURNTASN ## RETURNUASN F# RETURNW4UF#7 RETURNDASN ## RETURNLASN "# RETURNRASN ▟# RETURNUASN LEN #/57#7# RETURN#C; RETURN;4 PLOT # RETURNCASN [F]PI RETURNDASN  FOR INKEY$  RETURNRASN [X]# RETURNTASN ###SQR #
   1 REM  FAST SAVE  LOAD ##LN  SCROLL▝ SCROLLLN #?LN  SAVE <#[K]C+ RETURN/K) TO  RETURN#COS  SCROLL RETURNSCOS  RETURNVCOS  RETURNCODE COS  RETURNHCOS # POKE ▝, RETURN,C▖ RETURNCODE 4▝AT TAN .CHR$ 1**W,,X4 UNPLOT TAN  FOR 5  .▘▘ LN ▒#:~~LN ▒#:#LN ▒#▘ CONT ▀LN ▒#▘(BLN ▒#TAN ▘▘COS ( RETURN$4 CLS.#[N]4 NEXT TAN ▞▛ACS 5>=##USR ##Y▀X4 CLEAR GOSUB #▌TAB ##ACS 5>=##USR ##TAN PEEK  COPYY-X4 CLEAR<= RETURNY:X4 CLEAR#[(]####PEEK  COPYY9X4 CLEAR<= RETURNY0X4 CLEARF7RTAN ▘ █VAL  LN ##AT ▌TAB [=]#▀ GOSUB #LN ##LN SQR #$LN ## CLEAR FAST LET #:[E]LN ##LN SQR ##LN ##LN SQR ##LN ## CLEAR FAST LET ##LN ##7.#[N]4 PLOT   TAN LN  LLIST # RETURNHASN ▌#STR$ VAL  PRINT LN  LLIST ▒) ▝LN Z# LET M#RND RETURNS4£5 46#RND5 / /) RETURNV4>E(RND6#RND FOR E=RND[B] GOSUB #6#RND/O RETURNCODE C▌5,,RND/ CONT  SCROLL RETURN,C£ RETURN0 AND  POKE ▝ RETURNAABS  POKE ▝/ LOAD LN 1#6#RND SCROLL RETURN#C~~ RETURN0S SCROLL RETURNAK CONT / LET LN 1#/SIN AT  LPRINT )WRNDSTR$  GOSUB [K][J]E#RND GOSUB ##RND▚7.##[N]#4 RUN M#RNDF#M#RND LPRINT )4 LN [)]# GOSUB ##RND GOSUB ##RNDE#RNDLN [)]#/0    F#[J]E#RND GOSUB ##RND▚7.##[N]#4 RUN [T]C▝INT =LN  LLIST ▒LN ▛▝TAN <= RETURN*S CLS: £<= RETURN*K IF #LEN  FOR ACS <TAN 2 ▞▒LN [4]#( CLSTAN - =PEEK  COPY# RETURNRNDK)2 LN [4]#LN #?ABS [A]▀#[B]4 SCROLL/ SCROLL2 PEEK  COPYLN [4]##[B]C PRINT LN [N]#04CHR$ LN [N]## RETURN[E]4EXP LN [N]##LN [N]#STR$ PEEK  COPYLN [N]##SGN 7.#[N]4 PAUSE TAN  FASTLN  LLIST # RETURNHASN [=]# PRINT STR$ VAL 5WRNDLN [X]#AT SGN /£-▝LN Z# LET  LPRINT 6-RND/ THEN5WRND,[Y]4 GOSUB 7<"#[L]4 PRINT  LET  LPRINT E#RND FAST RETURNS4:5 4 6#RNDLN [X]#AT #▟# RETURNV4/E(RND6#RNDLN [X]#AT  FASTLN ▟# LPRINT FLN [1]=SGN  LPRINT ##▞ RETURN#4▌5,,RND/ LLIST  SCROLL RETURN#4?E#RND/SIN  SCROLL RETURN#4▌LN 1#/[X] RETURN0 AND  POKE ▝ RETURNAABS  POKE ▝/ REM  LET ▘4 5WRNDLN [X]#U#RND RETURNCODE 4▖YC/▞ RETURN#4▝YP INPUT █M#RND▞;5WRND#NOT 7( CLSY#E#RND GOSUB ##RNDSTR$  FAST;LN  TO # LPRINT Y-LN  TO # LPRINT Y=LN  TO #Y#NOT #[;]#NOT ##LN 4+LN <=+TAN ***
   3 REM [S][C][R][E][E][N]█[D][A][T][A]##▘ASN ▒) █5S#VAL  FAST GOSUB [K] LPRINT AT  GOSUB [K]) S5 2: STEP  GOSUB [K]) S5 U▘ ▝,J#"<7#[L]4 PLOT ▞▝) W5 U GOSUB [K]TAN ▞   ▒  ▒       ▒▒▒    ▒▒▒       ▒      ▞▒▒▒▒▒▒▒▒[D]▒    ▒▒▒▒       ▒[C] ▒▒▒                   ▒▒   ▒        ==  ==      ▒▒  ▒      ==      ==     ▞  ▒      ==▒▒ ▒ ==         ▒▒     ==▒▒[A] ==    ▞    ▞▒▒      ===▒▒==   ▞▒    ▒▒▒▒  =   =====   ▞▒▒  =   ▒▒▞ ==          ▒▒▒      [B]▒▞  ==       = ▒▒▒▒▒▒▒▒▒▒▒       ***  = ▞▞  ▞▞      *    ***  ==             *        ===            **▒▒▒     ▒▒▞      [~~]      [~~]▒▒▒▞ ▞ ▒▒▒     ▞    [~~]     ▒▒▒[F]▒▒▒▒                  ▒▒▒▒▒▒▒    ▞▞   [~~]   [~~]    ▒▒▒▒▒▒▒   ▒▒▞            ▒▒       ▞▒▒      [~~][~~]     ▒▒ ▞      [G]▒    ▒▒▒▒▒    ▒▒  ▒▒▒▒  ▒▒   ▒▒  ▒▒   ▞▒[E]▒▒▒▒▒▒▒▒▒▒  ▒▒   ▒▒    ▒▒▒▒▒ ▒▒▒▒▒▒      ▒▒▒    ▒▒▒▒▒   ▞▞  ▞     ▒▒     ▒▒▒             ▞ ▒▒  ▒*        ▞        ▒[H]▒▒▒ ▒*        ▞        ▒▒▒▒  ▒**      ▞           ▒[I]▒▒▒            ▒▒▒     ▒▒▒▒▒▞           ▒▒      ▒▒▒▒▞  ▞▞     ▞   ▞▒    ▒▒▒▒ ▞   ▞       ▞▞▞▞▒  ▒▒          ▞  ▞ ▞              ▞▞ ▞      ▞              ▞  ▞         ***            ▒[L]▒▒▒▒   **             ▒▒▒▒▒▒▒▒  *   **  ▞▞     ▒   ▒▒▒▒  * [M]**   ▒▒▒▒▒  ▒ [K] ▒▒▒▒  ****    ▒▒▒▒▒      ▒▒▒▒   ***    ▞▒▒    ▒▒▒▒▒▒▒▒       ▞          ▒▒[J]▒▒▒      ▒▒▒    ▒▒▒▞   ▒  ▒       ▒▒▒    ▒▒▒▒   ▞▞    **** *  **     ▞ ▞  ▞   *****[Q]*  ***   *▞    ▞▞     **** **    **      ▞▞    ***      ****            **    *******       ▞▞  **          **    ▒▒▒▞        ****    *  ▒▒▒▒[O]▒▞      **** *   * ▒▒▒   ▒▒     *  *  *    ▒▒▒   ▒▒      *  [P]   =   ▒▒▒  ▒▒      =      =     [N]▒ ▞         == == =     ▒▒       ▞    ==  == =  ▒▒▒▞    ▒▒▞         ==   ▒▒▒     ▒▒▞      [~~]      [~~]▒▒▒       ▞▞▞         ** ▒▒▒▒ [~~]     ▞▞  ▞      ***  ▒▒[R]  [~~]    ▞        ****    ▒                  *   [~~]   [~~]       ▞▞             [~~]          ▒▒  ▒▒               ▞   ▒▒▒▒▒▒▒  ▒ [~~]         ▒▒  ▒▒ ▒     ▒      [~~]     ▒▒▒[S]▒   ▒▒      [~~]         ▒▒▒[T]   ▒                  ▒▒▒▒▒▒▒  ▒▒               ▒▒▒▒▒[V]▒▒▒▒      [~~]       ▒▒▒  [U]▒▒▒▒▒             ▒▒▒▒  ▒▒▒▒[W]              ▒▒▒    ▒▒▒▒▒     ▒▒▒▒     ==     == [*]*     ▒▒     ==          *           ==    ==            ▒▒   == ===[Z]==            ▒   ==    ==    = ▒▒▞▞   ▒    ==   ==  ===▒▒▒[X]▞   ▒▒    === == ====▒  ▒▒    ▒        ==  ==    ▒▒    ▒   ==  ===      ▒▒▒▞   ▞▒▞   ===▒==     ▒▒▒▒     [Y]          ==   ▒▒▒     ▞ ▞          ==  ▒▒▒▒   ▞  ▞  ******         ▞▞      ***    **     ▒   ▞▞    **** *   **     ******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
  10 LET HR=19400
  20 SLOW
  30 PRINT AT 10,0;"█[P][L][E][A][S][E]█[S][T][A][N][D][B][Y][E][,]█[L][O][A][D][I][N][G]█[D][A][T][A][.]█"
  90 REM [U][D][G]█[C][H][A][R][A][C][T][E][R][S]
  91 REM 
  92 REM [N][U][M][E][R][A][L][S]
 100 IF USR HR THEN LPRINT U;"0","18 24 46 5A 52 24 18 00[1]20 10 10 10 10 10 08 00[2]3C 42 02 0C 10 20 7E 00[3]3C 42 02 0C 02 42 3C 00"
 110 IF USR HR THEN LPRINT U;"4","08 18 28 48 7C 08 08 00[5]3E 40 5C 22 02 42 3C 00[6]06 18 20 7C 42 42 3C 00[7]7E 02 04 08 10 20 40 00"
 120 IF USR HR THEN LPRINT U;"8","3C 42 42 3C 42 42 3C 00[9]3C 42 42 3E 04 18 60 00"
 125 REM [S][Y][M][B][O][L][S]
 130 IF USR HR THEN LPRINT U;"?","3C 42 02 04 08 00 08 00[(]10 10 10 10 10 00 10 00"
 135 REM [L][E][T][T][E][R][(][U][P][P][E][R]█[C][A][S][E]█[O][N][L][Y][)]
 140 IF USR HR THEN LPRINT U;"A","1E 22 42 7E 42 42 42 00[B]5C 62 42 5C 42 42 7C 00[C]1C 22 40 40 40 22 1C 00[D]4C 62 42 42 42 44 58 00[E]5E 60 40 70 40 40 7E 00[F]5E 60 40 70 40 40 40 00"
 150 IF USR HR THEN LPRINT U;"G","1C 22 40 40 46 22 1E 00[H]42 42 42 7E 42 42 42 00[I]38 10 10 10 10 10 38 00[J]38 08 08 08 08 48 30 00[K]44 48 50 70 48 44 42 00[L]40 40 40 40 40 42 7C 00[M]42 66 5A 42 42 42 42 00"
 160 IF USR HR THEN LPRINT U;"N","42 62 52 4A 46 42 42 00[O]18 24 42 42 42 24 18 00[P]5C 62 42 5C 40 40 40 00[Q]18 24 42 42 42 24 1A 00[R]5C 62 42 5C 48 44 42 00[S]3C 42 40 3C 02 42 3C 00"
 170 IF USR HR THEN LPRINT U;"T","7C 10 10 10 10 10 10 00[U]72 22 42 42 42 46 3A 00[V]42 42 22 22 12 14 08 00[W]77 22 41 41 49 49 36 00[X]41 22 14 08 14 22 41 00[Y]41 22 14 08 08 08 08 00[Z]3F 42 04 08 10 21 7E 00"
 500 RAND USR 20479
 505 REM [S][P][E][C][I][A][L]█[C][H][R][S]
 506 REM 
 507 REM [R][O][C][K][S]
 510 IF USR HR THEN LPRINT U;"▞","00,3C,1E,7E,FC,78,3C,78"
 515 REM [R][E][E][F][S]
 520 IF USR HR THEN LPRINT U;"=","00,4B,4A,34,18,3C,7E,00"
 525 REM [I][C][E][B][E][R][G][S]
 530 IF USR HR THEN LPRINT U;"[~~]","00,10,38,7C,FE,66,99,00"
 535 REM [S][A][N][D][B][A][N][K][S]
 540 IF USR HR THEN LPRINT U;"*";"28,54,AA,54,2A,55,2A,54"
 555 REM [Q][U][E][E][N][S]█[C][A][S][T][L][E]
 560 IF USR HR THEN LPRINT U;"[*]","00,DB,FF,5A,7E,66,E7,00"
 565 REM [T][R][E][A][S][U][R][E]█[C][H][E][S][T][S]                 [C][O][D][E][S]█[A]█[T][H][R][U]█[Z][.]
 570 FOR N=166 TO 191
 580 POKE PEEK 16425+256*PEEK 16426+13,N
 590 IF USR HR THEN LPRINT U;"[Z]";"00,1E,26,4A,F2,92,94,F8"
 600 NEXT N
 605 REM [S][H][I][P]█[S][P][R][I][T][E]
 610 IF USR HR THEN LPRINT SD;1,"16,1C,3C,7C,FE,10,D7,7E"
 620 GOTO 1000
 625 REM [L][A][N][D]█[2]█[P][I][N][E][S]
 630 IF USR HR THEN LPRINT U;"▒","00,10,38,10,38,7C,10,00"
 640 RETURN
 645 REM [L][A][N][D]█[3]█[M][O][U][N][T][A][I][N][S]
 650 IF USR HR THEN LPRINT U;"▒","10,18,3C,34,76,72,F2,69"
 660 RETURN
 1000 REM [L][A][N][D][-][1]█[P][A][L][M][S]
 1005 IF USR HR THEN LPRINT U;"▒","00,66,55,48,88,08,1C,3E"
 1010 IF USR HR THEN CLS
 1020 IF USR HR THEN RUN 
 1030 IF USR HR THEN PRINT ;;;"█VOYAGE█OF█PERIL███BY█N[.]█BROOKS[.]█HI[-]RES█CONVERSION█BY█G[.]█HARDER[.]"
 1040 IF USR HR THEN PRINT ;;;;AT 24,0;"YOU ARE THE CAPTAIN OF THE ",;;;"HMS█SEAWITCH";;;;"AT ANCHOR IN THE"
 1050 IF USR HR THEN PRINT "SOUTHWEST CORNER OF MAP 1. YOUR OBJECTIVE IS TO SAIL WITH AS    MUCH GOLD AS POSSIBLE BACK TO   YOUR HOME PORT, WHERE THE QUEEN IS WAITING FOR AN ACCOUNTING."
 1060 IF USR HR THEN PRINT ,,,,"YOU MUST SET A SUITABLE COURSE  AND SAIL AREA AGAINST THE WIND, WHILE NAVIGATING AROUND HAZARDS."
 1070 IF USR HR THEN PRINT ,,,,"BE PREPARED FOR ATTACKS BY PIR- ATES AND SAVAGES. EACH CREWMAN  EATS 1 FOOD RATION PER DAY, BUT YOU MAY BUY FOOD, REPAIR DAMAGESAND TAKE ON CREW WHEN YOU LAND, IF GOLD PERMITS."
 1080 IF USR HR THEN PRINT ,,,,"YOU WILL FIND MORE GOLDAT THE  TREASURE POINTS MARKED BY A [A]."
 1090 IF USR HR THEN PAUSE 3000
 1100 IF USR HR THEN CLS
 1110 IF USR HR THEN PRINT ;;;"MAP█SYMBOLS:",,,,,,,;;;;"[*] - HOME PORT, THE QUEENS CASTLE"
 1120 IF USR HR THEN PRINT "▞ - ROCKS",,,"= - REEFS",,,"[~~] - ICEBERGS",,,"* - SANDBANKS"
 1130 IF USR HR THEN PRINT "[A] - TREASURE CHEST",,"▒ - PALMS, THE BALMY TROPICS"
 1140 GOSUB 625
 1150 IF USR HR THEN PRINT "▒ - PINES, THE TEMPERATE ZONE"
 1160 GOSUB 645
 1170 IF USR HR THEN PRINT "▒ - MOUNTAINS, THE NORTHLANDS",;;;"  - THE SEAWITCH"
 1171 IF USR HR THEN UNPLOT 0,50
 1172 IF USR HR THEN LPRINT SS;
 1173 FOR X=0 TO 255 STEP 20
 1174 IF USR HR THEN LPRINT SM;1,X,40+50*SIN (X/20)
 1175 NEXT X
 1176 IF USR HR THEN LPRINT SM;1,0,102
 1180 IF USR HR THEN PRINT ,,,,;;;;"THERE ARE SIX MAPS TO EXPLORE   AND COLLECT TREASURE. EACH TREA-SURE CHEST CONTAINS A DIFFERENT AMOUNT OF GOLD."
 1190 IF USR HR THEN PRINT ,,,,"WARNING, DO NOT SAIL TOO CLOSE  TO THE WIND +/- 45 DEGREES OR   YOU WILL FACE THE CONSEQUENCES."
 2000 IF USR HR THEN PAUSE 3000
 2010 IF USR HR THEN CLS
 2020 IF USR HR THEN PRINT "TO JUDGE YOUR SUCCESS:",,,,,,"GOLD PIECES"
 2030 IF USR HR THEN PRINT ,,,,"UNDER1000 THE QUEEN WILL NOT BE           HAPPY."
 2040 IF USR HR THEN PRINT ,,,,"1000-2500 YOU CAN JUST AFFORD TO          PAY OFF THE REMAINING           CREW."
 2050 IF USR HR THEN PRINT ,,,,"2500-5000 A MODERATELY SUCCESS-           FUL VOYAGE."
 2060 IF USR HR THEN PRINT ,,,,"5000-7500 WELL DONE, YOU HAVE             MADE A HANDSOME PROFIT"
 2070 IF USR HR THEN PRINT ,,,,"OVER 7500 YOUR FORTUNE IS MADE            AND PROMOTION TO                ADMIRAL ASSURED."
 2090 IF USR HR THEN PRINT ,,,,"PRESS: L TO  LOAD VOYAGE                R TO REREAD INSTRUCTIONS."
 2100 LET A$=INKEY$ 
 2110 IF A$="" THEN GOTO 2100
 2120 IF A$="L" THEN LOAD "VOYAGE[2]"
 2130 IF A$="R" THEN GOTO 1000
 2140 GOTO 2100
 9970 SAVE "VOYAG[E]"
 9980 PRINT "[D][A][T][A] LOADED.";AT 3,0;"[N][O][T][E]:THIS IS PART I OF A TWO    PART PROGRAM. AT LEAST 32K OF   RAM IS REQUIRED, IN ADDITION TO THE 8-16K STATIC RAM. PART I    (THIS PROGRAM) CONTAINS THE DATAUSED BY PART II. IT WILL ALSO   TRANSFER 4.5K OF SCREEN DATA TO ADDRESS 32K AND UPWARDS. HOWEVERKEEP RAMTOP AT THE STANDARD     VALUE OF 32K."
 9990 PAUSE 1000
 9992 FOR N=0 TO 50
 9994 PRINT AT 15,0;"ENABLE SCRAM BOARD, RUN  TO START";AT 15,0;"[E][N][A][B][L][E]█[S][C][R][A][M]█[B][O][A][R][D][,]█[R][U][N]█[T][O]█[S][T][A][R][T]"
 9996 NEXT N
 
   0 REM [C]█[1][9][8][7]█[S][M][C]##▘ ""LN  RUN ##[P]#Y2 GOSUB #<>5▟▝TAN  PRINT # RETURN,C▌LN [*]RNDINT / LET TAN 6-RNDLN #? FASTLN LN + LPRINT TAN LN [H]RND PRINT LN [4]RND7LN [H]RND# LET #TAN 7# RETURN#C▀ RETURN;""6-RNDTAN A ##▞▌ACS 9ACS =( IF ,,▘ 4,,TAN 7LN [T]RNDLN [4]RNDLN ,,INKEY$ ##ACS ZACS ZACS Z##STR$ LN STR$ RND LET J NEW▛W#TAN Y3[)]K▌LN [*]RNDINT (Y[Z][(]SQR LN [*]RNDINT 25  6AT ZA4##<▘ COPY*Q  GOSUB [K]TAN  NEXT Y▞# ( CLEARLEN  LIST W4 CLEAR▞"" CLEARACS ##C▝▞[K])4 5 4##INKEY$   ▌ASN #INKEY$ ;# GOSUB ### RETURN PLOT E£RND ###) RUN ▙;Y2 GOSUB #Y PRINT ▘▛▝ CLEARACS ##CODE [P]▝LN [>]▝LN 4▝<>5GINKEY$ #[8]▝ CLEARACS #▚/▖ CLEARACS #LEN E£RND▘9  GOSUB PIF FOR 5 █;6#INKEY$  FOR  GOSUB [K]LN F?<>5GINKEY$ TAN 7LN [T]RNDLN [4]RND##LN ▞INKEY$ VAL 7LN [H]RNDAT LN STR$ RND#TAN 2 COPY/▝2 STR$ 7LN [T]RNDLN ,,INKEY$ SGN  GOSUB ##ZLN  LET RND##?( CLEARACS .*PI▌4▝▞▒▛( CLEAR#TAN Y COPY/▘[J]MVAL Z CLEARACS #[:]7LN [T]RNDLN ,,INKEY$ # RETURN,4"7 GOSUB ##ZLN [T]RNDLN ,,INKEY$ ## GOSUB ##ZVAL #[)]-▘K▖ GOSUB #- COPY4▝-  FAST##MSQR Z LET [(]2▘K▖ GOSUB #2 COPY4▝2 ##MINT Z#[W]S▞##- /▝2  GOSUB #SGN Z6PEEK Z#[B]3#A 6STR$ ZAT VAL Y[Z][(] PRINT UVAL Z# LET  CLEARACS ##4▌LN SGN INKEY$ /▀LN ##UPEEK Z#▞ USTR$ Z##,,#MSTR$ Z GOSUB #SGN ZUUSR Z# GOSUB PIS▒#MSTR$ Z GOSUB #INT ZAT #▙##▄#5CHR$ ZOUUSR Z[Y]4[N] GOSUB ##ZTAN Y COPY/▘[J]MVAL Z7LN [T]RNDLN [4]RNDVAL 7LN [H]RND#I 6INT Z#6SGN ZAT Y▘ PRINT VAL VAL EINT Z GOSUB #SGN Z▞▌VAL ACS EACS .( IF [R] GOSUB #6INT Z GOSUB #SGN ZAT ACS GACS 1( IF ;6SGN Z GOSUB #INT ZAT #ACS <[~~]##ACS +[£]#Y[Z][(]S,, PRINT UVAL Z# LET LN SGN INKEY$ AT  LET W RETURNASN S[O]TAN Y▘MINT ZLN COS RNDCOS LN [H]RNDMINT ZLN TAN RNDCOS 7LN [T]RNDLN [4]RND[S]S▀#INKEY$ #LN (INKEY$ #INKEY$ LN (INKEY$ #PI GOSUB #SQR Z[)]W PRINT 7LN [T]RND[S]K▀#INKEY$ # GOSUB #ABS Z[(]W4▘XSGN # GOSUB #USR ZUPEEK Z#USGN Z#[B]LN  INPUT RND6CHR$ ZUABS Z#USGN Z#[B]LN  INPUT RND6**Z£TAN LN +#4*UINT Z#5 4▘ /#J#7"#[L]4 RUN +4 INPUT TAN USTR$ ZECHR$ Z GOSUB #**Z6 AND Z GOSUB #>=Z PRINT  FAST GOSUB # LPRINT C#UPEEK ZLN  INKEY$ STR$ VAL #3ZACS <( IF AT ACS .*( CLS#SGN 7 FAST[B] GOSUB # LPRINT C▌#J#/ NEXT UABS ZLN  INKEY$ Y,,[(]#VAL ,*ZACS 1( IF AT ACS +3( CLS>▘4 E>=Z,,6>=Z FOR E AND Z,,6 AND Z LET X4[A]5INT ZP4[?]TAN UUSR Z RETURN▒4▖,J/NOT UPEEK ZLN  INKEY$ VAL ,3ZACS +( IF AT ACS 1*( CLS#UABS ZJ NEW▛C$#,VAL ?ACS 0( CLSAT ACS ▖( UNPLOT #/[E]E(RND#[T]COS  RETURN█4▌LN [*]RNDINT ▘VAL LN  PAUSE ,,AT  FOR / GOTO  PRINT  SCROLL FAST:RND▟#LN ##7 FAST▞▌[J]#( CLEARSGN  LPRINT  LET TAN LN  SCROLLRND#?( CLEARLN ##K▀Y▟>LN COS RNDTAB SQR #TAN LN  SCROLLRND FASTAT LN 4+ FASTLN ##AT  FAST##LN  PLOT ;LN [~~]+ LPRINT / STEP LN  SCROLLRND#▞ / SLOW###Y[Z][(]STR$ VAL  PRINT LN SGN INKEY$  LET AT SGN TAN 2 COPY/▝2 STR$ LN C#SGN USTR$ Z#UPEEK Z5SGN Z PRINT  FASTLN [D]#+C▞WLN [J]#/ RUN UUSR Z# LPRINT  LET F FASTLN [D]#+C▞£LN [J]#/ RUN USTR$ Z# LPRINT UABS Z PRINT  FASTLN [D]#+C▞XLN [J]#/ RUN UUSR Z# LPRINT  LET 7LN [D]#+COS $LN [J]#/ SAVE LN 7?2"" CLEARACS ##C▝2[K]5 4[J]PEEK  CLSLN #?ABS ▐▒<= CLS*K CLS-4▞▒#<= CLS3K CLS# NEW█PEEK  CLSACS )( PAUSE 7+4 FOR <= CLS3K CLSLN ##/SGN 76-RNDLN #?LN [B]:##▘▘COS  CLEARACS V#""( RAND $4 PLOT .#[N]4 INPUT TAN 7# RETURN#4,,LN  OR #LN  RUN #/L7# RETURN,C> RETURN;CG RETURN#C# RETURNAT C# RETURNTAB C#/# GOSUB #AT Z# NEW LIST LEN ( RETURNRNDCODE [O]#ATN [J]#/STR$ #LEN ▒#[J]# GOSUB #AT ZTAN ▞ COPY7# RETURN#COS  RETURN,4▖Y▖/" RETURN;4VAL ▖# RETURN▀ASN SQR #M""Z/ STOP GOSUB #AT Z/SQR 7LN [T]RND## RETURN[T]ABS =INKEY$ # RETURNRNDABS "INKEY$  GOSUB #AT Z/[?]7LN [H]RND NEWZ GOSUB #AT Z[T]#K GOTO Y▒█#/ NEW6-RNDLN #? FAST CLEARACS ▘#CODE STR$ .LN  SAVE < LPRINT  FAST#[L]C£,VAL STR$ LN K#SGN AT <"/ LIST  LPRINT /CODE  RETURN""4▖Y"/U PRINT  NEW# RETURNRNDK▛ LET  CLEARACS ▘LEN /G CLEARACS ▘#C~~[J] CLEARACS ▘▚LN ##/▖ CLEARACS ▘LEN  LET LN #,,~~ PRINT VAL  NEW#LN ##AT ▀ LET  RETURN█S LET  CLEARACS ▘▚[J] GOSUB #AT Z PRINT YZ[)]>=[J]#LN  RUN # LET VAL M<=Z[B]*[B]**- ACS >#5 2; FASTACS TLN STR$ RNDSGN U""Z RETURN▖ASN  # RETURN▝C# RETURN▘CFY▒ PRINT STR$ , PRINT U""Z[B]4"U<=ZACS #C▖ LET J/▘ LET #)4 ;SGN  LET <X4 TO AT ££ GOSUB #AT ZTAN U<=Z RETURNASEXP  RETURN[A]KASN  FAST5 2; FOR  LPRINT /AT U<=Z▛ FAST5 0S LET A,/ GOSUB  CLEARACS ##Y[S]C▝Y[C][S]SQR ## NEW▛▙#VAL ) 45 5ACS SACS SACS S# GOSUB [K]F#( UNPLOT AT TAN LN COS RNDY*C▀LN [H]RND)  WEAT Z FAST GOSUB #AT Z GOSUB #£RND< PRINT ▞4,VAL STR$ LN ##SGN AT <( PRINT  LET X4 GOSUB  LPRINT 6AT ZTAN LN COS RNDCATN LN [H]RNDW PRINT #Y""CHR$ ▒( UNPLOT ## LET /LEN 7LN [T]RNDLN ,,INKEY$ LN [4]RNDTAN Y COPY/▘[J]MVAL Z CLEARACS #[:]LN ## GOSUB #NOT ZE-RNDLN ## GOSUB # OR ZE-RND7LN [T]RNDLN ,,INKEY$  GOSUB #<=ZE#Z FAST GOSUB ##ZE OR Z FASTLN £PI LPRINT 6#ZENOT Z FASTLN £PI LPRINT 6#ZE<=ZLN £PI LPRINT 6#ZTAN LN +#4.UINT Z5 4##▘4 ,,▘ STEP * GOSUB [K]▞4F#( UNPLOT X4 DIM TAN USGN Z RETURN C##UPEEK Z#VAL Y[Z][(]VAL  PRINT WVAL LN  LET RNDSGN Y▒[S]4*UABS Z[<] RETURN▒S?#▘4  GOSUB PI# LET AT #LEN ▒#/ OR #?( CLEAR2 COPYS▘0 LET AT VAL LN SGN INKEY$ AT #▞ UABS Z##▀[B] GOSUB PIPIK[U]AT ▌USQR Z[S]4[L]USQR Z#EPEEK ZY COPY[W]4▘8# FASTVAL Y[Z][(]2 LN SGN INKEY$ AT £ LPRINT 94 LIST 5INT ZP4▟TAN LN +#40UINT Z5 COPYR##▘4  GOSUB PI▘ STEP * GOSUB [S]▞47#( UNPLOT X4 CONT TAN USQR Z RETURN[Z]C##UPEEK Z#VAL Y[Z][(]VAL  PRINT XVAL LN  LET RNDSGN Y▒[S]4-UABS Z[<] RETURN▒S:#▘4 ,,# LET AT #LEN ▒#/ AND #?( CLEAR2 COPYS▘0 LET AT VAL LN SGN INKEY$ AT #▞ UABS Z##▀[B] GOSUB PIPIK[V]AT ▖USGN Z RETURN C▀[S]4[I]USGN Z#EPEEK ZY COPY[W]4▘8# FASTVAL Y[Z][(]2 LN SGN INKEY$ AT £ LPRINT 94 LIST 5INT ZPTAB ▗#TAN LN +#4*UINT Z#5 COPYR▞4#[B]ACS -F( CLS[8]4 POKE 14 INPUT TAN USGN Z#UPEEK Z#VAL Y[Z][(]VAL  PRINT £LN  LET RND#?( CLEAR2 COPYS▘0 LET AT VAL LN SGN INKEY$ AT UABS Z£[T]4 STEP AT ▌# RETURN COPYC▒USQR Z##[U]KSQR  GOSUB #SGN Z#INKEY$ #USTR$ Z# FASTVAL Y[Z][(]2 LN SGN INKEY$ AT ▌ LPRINT H4 LIST 5INT ZP4[B]TAN LN +#41UINT Z#5 4[B]▞4ACS 27( CLS▘ S[B] FAST GOSUB PI LPRINT 4 INPUT 14 CONT TAN USGN Z#UABS Z#VAL Y[Z][(]VAL  PRINT $LN  LET RNDY,,[(]##▛( CLEAR2 COPYS▘0 LET AT VAL LN SGN INKEY$ AT UPEEK Z$[T]4>=AT ▌# RETURN COPYC▒USQR Z##[U]KATN USGN Z#UPEEK Z#USTR$ Z# FASTVAL Y[Z][(]2 LN SGN INKEY$ AT ▌ LPRINT H4 LIST 5INT ZP4[6]TAN 7# RETURN0K▌LN [*]RNDINT 1 RETURNGK RUN CHR$ 0TAN LN ▝##ACS 4ACS 4ACS 4ACS 4LN ▝#█#7# RETURN"#TAN 7# RETURN"TAB SQR #7#ACS #C▝CHR$ RND)  77 FAST▞▒A # FOR ;( CLEAR FOR 5 S; FOR  LPRINT 7LN =#>4▌76-RNDTAN </ PAUSE 7LN [H]RND RETURN4) ▞SSTR$ LN [*]RNDINT .▘4 ,,# RETURNS**CHR$ /#TAN 7LN [H]RND RETURN4K SCROLLLN [4]RND[B]***- #5 Y;6**Z SCROLLLN [T]RND GOSUB # AND ZTAN LN ##Y[Z][(]K▝CHR$ RND##ACS WACS 1ACS WACS 1ACS WACS 1ACS  GOTO 6>=Z#J NEW▛WM#RND) STOPZ GOSUB #**ZY▒ PRINT #>~~VAL #U#RND RETURN▌S)JLEN ,,[B]##: C:3ACS ;( CLS/▛#[J]ACS )*( CLS[Q]#7<#>#[Q]#FLN ##<AT ▀ LET XTAB ACS #TAN LN COS RNDTAB SQR #E>=Z) STOPZ▞▒VAL ,#7<,#LN ##F<AT ( LET TAN  CLEARACS #EXP LN ##E-RND# RETURN,4$7 GOSUB ##Z FASTLN [4]# LPRINT LN [T]RND#~~PIVAL 5ORND##[S]C UNPLOT  CLEAR[-]#M#RNDLN £#AT LN [4]#U#RND CLEAR[Y]O4 CLSTAN LN COS RNDY C▀LN [H]RNDM#RNDTAN 1""AT Y▖PEEK  CLS0LN ###["]INKEY$  GOSUB ##INKEY$ <<7# RETURN#C*STR$ LN [H]RND#LN ▞INKEY$ ▖SGN ##ACS [W],LEN █>#<( POKE TAN ▞4[J]##ACS [W]>#<( RUN TAN  E-RND# RETURN;C# RETURN#C▌LN [*]RNDINT + LPRINT 6-RND▘  TAN  TO     RETURN THENC▌LN [*]RNDINT ) FAST SCROLL )""#STR$  RETURN LLIST ASN ## RETURN SCROLLASN [:]RND RETURN LOAD ASN ▛# RETURN LIST ASN 3# RETURN PAUSE ASN ## RETURN PRINT ASN ## RETURN PLOT ASN [Y]INKEY$  RETURN RUN ASN ▟INKEY$  RETURN SAVE ASN PEEK # RETURN RAND ASN ## RETURN CLSASN ;INKEY$  RETURN UNPLOT ASN TAB INKEY$  RETURN CLEARASN ▗INKEY$  RETURN RETURNASN [*]RND RETURN COPYASN /# RETURN LPRINT 4[9]SGN )[J]#STR$ 7# RETURNXC##7# RETURN#C[<] RETURN;4 PLOT # RETURNAASN [▒]# RETURNBASN [B]INKEY$  RETURNCASN [B]PI RETURNDASN  SCROLLINKEY$  RETURNIASN ## RETURNLASN [5]# RETURNPASN ## RETURNRASN [T]# RETURNS42F#7 RETURNDASN ## RETURNEASN ▞# RETURNMASN 8# RETURNPASN [1]# RETURNSASN ##/# RETURNTASN ## RETURNUASN F# RETURNW4UF#7 RETURNDASN ## RETURNLASN "# RETURNRASN ▟# RETURNUASN LEN #/57#7# RETURN#C; RETURN;4 PLOT # RETURNCASN [F]PI RETURNDASN  FOR INKEY$  RETURNRASN [X]# RETURNTASN ###SQR #
   1 REM  FAST SAVE  LOAD ##LN  SCROLL▝ SCROLLLN #?LN  SAVE <#[K]C+ RETURN/K) TO  RETURN#COS  SCROLL RETURNSCOS  RETURNVCOS  RETURNCODE COS  RETURNHCOS # POKE ▝, RETURN,C▖ RETURNCODE 4▝AT TAN .CHR$ 1**W,,X4 UNPLOT TAN  FOR 5  .▘▘ LN ▒#:~~LN ▒#:#LN ▒#▘ CONT ▀LN ▒#▘(BLN ▒#TAN ▘▘COS ( RETURN$4 CLS.#[N]4 NEXT TAN ▞▛ACS 5>=##USR ##Y▀X4 CLEAR GOSUB #▌TAB ##ACS 5>=##USR ##TAN PEEK  COPYY-X4 CLEAR<= RETURNY:X4 CLEAR#[(]####PEEK  COPYY9X4 CLEAR<= RETURNY0X4 CLEARF7RTAN ▘ █VAL  LN ##AT ▌TAB [=]#▀ GOSUB #LN ##LN SQR #$LN ## CLEAR FAST LET #:[E]LN ##LN SQR ##LN ##LN SQR ##LN ## CLEAR FAST LET ##LN ##7.#[N]4 PLOT   TAN LN  LLIST # RETURNHASN ▌#STR$ VAL  PRINT LN  LLIST ▒) ▝LN Z# LET M#RND RETURNS4£5 46#RND5 / /) RETURNV4>E(RND6#RND FOR E=RND[B] GOSUB #6#RND/O RETURNCODE C▌5,,RND/ CONT  SCROLL RETURN,C£ RETURN0 AND  POKE ▝ RETURNAABS  POKE ▝/ LOAD LN 1#6#RND SCROLL RETURN#C~~ RETURN0S SCROLL RETURNAK CONT / LET LN 1#/SIN AT  LPRINT )WRNDSTR$  GOSUB [K][J]E#RND GOSUB ##RND▚7.##[N]#4 RUN M#RNDF#M#RND LPRINT )4 LN [)]# GOSUB ##RND GOSUB ##RNDE#RNDLN [)]#/0    F#[J]E#RND GOSUB ##RND▚7.##[N]#4 RUN [T]C▝INT =LN  LLIST ▒LN ▛▝TAN <= RETURN*S CLS: £<= RETURN*K IF #LEN  FOR ACS <TAN 2 ▞▒LN [4]#( CLSTAN - =PEEK  COPY# RETURNRNDK)2 LN [4]#LN #?ABS [A]▀#[B]4 SCROLL/ SCROLL2 PEEK  COPYLN [4]##[B]C PRINT LN [N]#04CHR$ LN [N]## RETURN[E]4EXP LN [N]##LN [N]#STR$ PEEK  COPYLN [N]##SGN 7.#[N]4 PAUSE TAN  FASTLN  LLIST # RETURNHASN [=]# PRINT STR$ VAL 5WRNDLN [X]#AT SGN /£-▝LN Z# LET  LPRINT 6-RND/ THEN5WRND,[Y]4 GOSUB 7<"#[L]4 PRINT  LET  LPRINT E#RND FAST RETURNS4:5 4 6#RNDLN [X]#AT #▟# RETURNV4/E(RND6#RNDLN [X]#AT  FASTLN ▟# LPRINT FLN [1]=SGN  LPRINT ##▞ RETURN#4▌5,,RND/ LLIST  SCROLL RETURN#4?E#RND/SIN  SCROLL RETURN#4▌LN 1#/[X] RETURN0 AND  POKE ▝ RETURNAABS  POKE ▝/ REM  LET ▘4 5WRNDLN [X]#U#RND RETURNCODE 4▖YC/▞ RETURN#4▝YP INPUT █M#RND▞;5WRND#NOT 7( CLSY#E#RND GOSUB ##RNDSTR$  FAST;LN  TO # LPRINT Y-LN  TO # LPRINT Y=LN  TO #Y#NOT #[;]#NOT ##LN 4+LN <=+TAN ***
   2 REM [T][R][A][N][S][F][E][R][S]##▘ASN ▒5ASN [▒]) █ GOSUB [K]TAN       ▘#▘E(RND)▒ ; FOR 5#▜ GOSUB [K]TAN        ▘#▘E(RND)▒ ;) INPUT ▙ GOSUB [K]TAN        
  10 REM [P][E][R][I][L]
  20 SLOW
  30 GOSUB VAL "9500"
  50 GOTO VAL "8750"
 100 REM [M][A][I][N]█[L][O][O][P]
 105 GOSUB T6
 110 LET WF=INT (RND*N8)
 115 IF NOT WF THEN LET WF=INT (RND*N8)
 120 IF WF=N7 THEN LET WF=WF+INT (RND*N5)
 130 IF WF=II THEN LET WF=WF+INT (RND*N2)
 140 LET WD=INT (RND*360)
 150 IF USR HR THEN PRINT AT I6,N2;;;"WIND";;;;" FORCE ";WF;
 152 LET F=(F-CS)*(F>CS)
 154 LET T=T+N1
 160 IF NOT WF THEN GOTO VAL "1E3"
 170 IF USR HR THEN PRINT ", ";WD;" DEG.FROM";;;" N"
 180 IF USR HR THEN PRINT TAB N2;"COURSE";;;;"? (DEG.CLOCKWISE FROM ";;;"N)"
 190 INPUT C
 200 IF C<N0 OR C>359 THEN GOTO CODE "[Y]"
 210 IF USR HR THEN PRINT AT N3*N8,I4;"                        "
 220 IF USR HR THEN PRINT AT N3*N8,I6;;;;C;" DEGREES FROM ";;;"N"
 229 REM [C][H][E][C][K]█[C][O][U][R][S][E]█[W][I][T][H]█[W][I][N][D]
 230 IF ABS ((C+360*(C<45 AND WD>315))-(WD+360*(C>315 AND WD<45)))<45 THEN GOTO VAL "1200"
 240 LET C=PI*C/180
 250 LET SA=50*CS
 260 IF USR HR THEN PRINT TAB N2;;;"SAIL█AREA";;;;"? (MAX. ";SA;" SQ.FT.)"
 270 INPUT A
 280 IF A<N0 OR A>SA THEN GOTO VAL "270"
 290 IF USR HR THEN PRINT AT N4*N8,T0;"                    "
 300 IF USR HR THEN PRINT AT N4*N8,II*N2;A;" SQ.FT. HOISTED"
 310 IF WF>N6 AND A>500*(12-WF) THEN GOSUB VAL "1400"
 320 LET D=.00001*A*WF**1.5*H
 330 FOR R=N0 TO D STEP N2
 340 LET X=X2+R*SIN C
 350 LET Y=Y2+R*COS C
 360 IF X<-P5 OR X>=49.5 OR Y<-P5 OR Y>=29.5 THEN GOTO VAL "1600"
 380 LET L1=I5-INT ((Y1+P5)/N2)
 385 LET K1=N1+INT ((X1+P5)/N2)
 390 LET L=I5-INT ((Y+P5)/N2)
 395 LET K=N1+INT ((X+P5)/N2)
 400 LET K2=(N5+K)*N8
 410 LET L2=191-((N5+L)*N8)
 415 IF (PEEK 16323<>K2 OR PEEK 16324<>L2) THEN IF USR HR THEN LPRINT SS;I2-WF;SM;N1,K2,L2
 420 IF R=N0 OR D$(L,K)=" " THEN GOTO 500
 430 GOTO VAL "2E3"*(CODE D$(L,K)>=CODE "[A]")+VAL "2250"*(D$(L,K)="▞")+VAL "2500"*(D$(L,K)="=")+VAL "2750"*(D$(L,K)="*")+VAL "3E3"*(D$(L,K)="[~~]")+VAL "3500"*(D$(L,K)="[*]")+VAL "3750"*(D$(L,K)="▒")
 500 IF INT (RND*250+N1)=N5 THEN GOSUB VAL "3250"
 510 LET X1=X
 520 LET Y1=Y
 530 NEXT R
 540 LET X2=X
 550 LET Y2=Y
 600 GOTO T4
 1000 REM [B][E][C][A][L][M][E][D]
 1010 FOR R=N1 TO CODE "M"
 1020 NEXT R
 1025 GOSUB T6
 1030 IF USR HR THEN PRINT AT I6,N2;;;"BECALMED";;;;"  YOU DRIFT HELPLESS"
 1040 IF USR HR THEN PRINT TAB II*N2;"WHILE YOUR CREW"
 1050 IF USR HR THEN PRINT TAB II*N2;"EAT ";CS;S$
 1060 GOTO T4
 1200 REM [I][N]█[I][R][O][N][S]
 1205 GOSUB T6
 1210 IF USR HR THEN PRINT AT I6,N2;;;"IN█IRONS";;;;"  YOU HAVE SAILED TOO"
 1220 IF USR HR THEN PRINT TAB II*N2;"CLOSE TO THE WIND."
 1230 IF USR HR THEN PRINT TAB II*N2;"EAT ";CS;S$
 1390 GOTO T4
 1400 REM [S][T][O][R][M]█[D][A][M][A][G][E][S]
 1410 GOSUB T6
 1420 LET H1=I0*(WF-N2)
 1440 IF WF<I2 THEN IF USR HR THEN PRINT AT I6,N2;;;"STORM     ";
 1450 IF WF=I2 THEN IF USR HR THEN PRINT AT I6,N2;;;"HURRICANE ";;;;
 1455 IF USR HR THEN PRINT "BATTEN DOWN HATCHES."
 1460 IF USR HR THEN PRINT AT N3*N8,II*N2;;;;Q$
 1470 IF USR HR THEN PRINT TAB II*N2;H1*(H>H1)+H*(H<=H1);R$
 1480 LET H=(H-H1)*(H>H1)
 1490 RETURN
 1600 REM [O][F][F]█[M][A][P]
 1605 LET D=D-R
 1610 IF (N/N2<>INT (N/N2)) AND (X>=VAL "47.5") THEN GOTO VAL "1700"
 1620 IF (N/N2=INT (N/N2)) AND (X<VAL "1.5") THEN GOTO VAL "1725"
 1630 IF (N<N5) AND (Y>=VAL "27.5") THEN GOTO VAL "1750"
 1640 IF (N>N2) AND (Y<VAL "1.5") THEN GOTO VAL "1775"
 1645 GOSUB T6
 1650 IF USR HR THEN PRINT AT I6,N2;;;"EDGE█OF";;;;"  CREW PERSUADE YOU TO"
 1660 IF USR HR THEN PRINT TAB N2;;;"█WORLD█";;;;"  GO NO FURTHER. (FLAT"
 1670 IF USR HR THEN PRINT TAB T0;"EARTH SOC.MEMBERS.)"
 1672 LET X=X1
 1674 LET X2=X1
 1676 LET Y=Y1
 1678 LET Y2=Y1
 1680 GOTO T4
 1700 LET N=N+N1
 1705 LET Y2=Y1
 1710 LET X2=X1-CODE "K"
 1715 LET X1=X2
 1720 GOTO T8
 1725 LET N=N-N1
 1728 LET Y2=Y1
 1730 LET X2=X1+CODE "K"
 1735 LET X1=X2
 1745 GOTO T8
 1750 LET N=N+N2
 1755 LET X2=X1
 1760 LET Y2=Y1-CODE "0"
 1765 LET Y1=Y2
 1770 GOTO T8
 1775 LET N=N-N2
 1778 LET X2=X1
 1780 LET Y2=Y1+CODE "0"
 1785 LET Y1=Y2
 1795 GOTO T8
 2000 REM [T][R][E][A][S][U][R][E]
 2010 GOSUB T6
 2020 LET G=G+I0*CODE D$(L,K)
 2030 IF USR HR THEN PRINT AT I6,N2;;;"TREASURE";;;;"  YOU EXPLORE ASHORE."
 2040 IF USR HR THEN PRINT TAB II*N2;"HERE▘S A CHEST WITH"
 2050 IF USR HR THEN PRINT TAB II*N2;I0*CODE D$(L,K);" GOLD PIECES."
 2060 LET Q(CODE D$(L,K)-CODE "[9]")=N8
 2070 LET D$(L,K)="▒"
 2240 GOTO VAL "4400"
 2250 REM [R][O][C][K][S]
 2260 GOSUB T6
 2262 LET HL=H
 2265 LET H=INT (H*(N1-RND/N2))-N2
 2270 IF USR HR THEN PRINT AT I6,N2;;;"ROCKS     ";;;;P$
 2280 IF USR HR THEN PRINT TAB II*N2;Q$
 2290 IF USR HR THEN PRINT TAB II*N2;HL-H;R$
 2310 GOTO T4
 2500 REM [R][E][E][F][S]
 2510 GOSUB T6
 2512 LET HL=H
 2515 LET H=INT (H*(N1-RND/N4))-N2
 2520 IF USR HR THEN PRINT AT I6,N2;;;"REEF      ";;;;P$
 2530 IF USR HR THEN PRINT TAB II*N2;Q$
 2540 IF USR HR THEN PRINT TAB II*N2;HL-H;R$
 2560 GOTO T4
 2750 REM [S][A][N][D][B][A][N][K][S]
 2760 GOSUB T6
 2770 IF USR HR THEN PRINT AT I6,N2;;;"SANDBANK  ";;;;P$
 2780 IF USR HR THEN PRINT TAB II*N2;"SHIP AGROUND."
 2790 IF USR HR THEN PRINT TAB II*N2;"EAT ";CS;S$
 2800 GOTO T4
 3000 REM [I][C][E][B][E][R][G][S]
 3010 GOSUB T6
 3012 LET HL=H
 3015 LET H=INT (H*(N1-RND/N2))-N2
 3020 IF USR HR THEN PRINT AT I6,N2;;;"ICEBERG   ";;;;P$
 3030 IF USR HR THEN PRINT TAB II*N2;Q$
 3040 IF USR HR THEN PRINT TAB II*N2;HL-H;R$
 3060 GOTO T4
 3250 REM [P][I][R][A][T][E][S]
 3260 GOSUB T6
 3270 IF USR HR THEN PRINT AT I6,N2;;;"PIRATES";;;;"   ALL YOUR GOLD STOLEN"
 3272 LET G=N0
 3276 LET CS1=CS
 3278 LET CS=INT ((CS-N1)/(N2-RND))
 3280 IF USR HR THEN PRINT TAB II*N2;CS1-CS;" CREWMEN KILLED."
 3286 LET H1=INT ((H-N1)/(N2-RND))
 3290 IF USR HR THEN PRINT TAB II*N2;H-H1;" PTS. SHIP DAMAGE."
 3292 LET H=H1
 3300 FOR R=N1 TO HU
 3310 NEXT R
 3490 RETURN
 3500 REM [H][O][M][E]
 3505 LET Z=N1
 3506 GOSUB T4
 3510 GOSUB T6
 3520 IF USR HR THEN PRINT AT I6,N2;;;"HOME";;;;"    SHIP ANCHORS SAFELY"
 3530 IF USR HR THEN PRINT TAB N2;;;"PORT";;;;"    AFTER ";T;" DAYS AT SEA"
 3540 IF USR HR THEN PRINT TAB I8;"WITH ";G;" GOLD PIECES."
 3550 IF G>HG THEN GOSUB VAL "3600"
 3560 GOTO VAL "5800"
 3610 FOR R=N1 TO CODE ";"
 3620 IF USR HR THEN PRINT AT N8,I2*N2;;;;"HI-SCORE"
 3630 IF USR HR THEN PRINT AT N8,I2*N2;;;"HI-SCORE"
 3650 NEXT R
 3690 RETURN
 3750 REM [L][A][N][D]
 3755 LET CS1=CS
 3756 GOSUB T6
 3760 LET R=RND
 3770 IF R>=VAL ".4" THEN GOTO VAL "4E3"
 3780 IF R>=VAL ".2" THEN GOTO VAL "3900"
 3800 REM [S][A][V][A][G][E][S]
 3810 LET CS=INT (CS*(N1-RND/N2))-N2
 3830 IF USR HR THEN PRINT AT I6,N2;;;"LAND";;;;"      ";"SAVAGES" AND (N=N1 OR N=N2);"AMAZONS" AND (N=N3 OR N=N4);"VIKINGS" AND (N=N5 OR N=N6);" ATTACK YOU."
 3840 IF USR HR THEN PRINT TAB II*N2;CS1-CS;" CREWMEN KILLED."
 3850 IF USR HR THEN PRINT TAB II*N2;"YOU JUST ESCAPED."
 3860 GOTO VAL "4400"
 3900 REM [M][A][I][D][E][N][S]
 3910 LET CS=INT (CS*(N1-RND/N4))-N2
 3920 IF USR HR THEN PRINT AT I6,N2;;;"LAND";;;;"      ";"DUSKY MAIDENS" AND (N=N1 OR N=N2);"CUTE MERMAIDS" AND (N=N3 OR N=N4);"BUXOM SIRENS " AND (N=N5 OR N=N6);" LURE"
 3930 IF USR HR THEN PRINT TAB II*N2;CS1-CS;" CREWMEN AWAY..."
 3940 IF USR HR THEN PRINT TAB II*N2;">LUCKY LADS<"
 3950 GOTO VAL "4400"
 4000 REM [T][R][A][D][E]
 4005 LET Z=N1
 4006 GOSUB T4
 4010 IF USR HR THEN PRINT AT I6,N2;;;"LAND";;;;" YOU MAY TRADE OR SAIL ON."
 4020 IF USR HR THEN PRINT TAB I2;"FOOD(F),CREW(C),REPAIR(R)"
 4030 IF USR HR THEN PRINT TAB I2;"SAIL(S).....WHICH OPTION?"
 4040 IF INKEY$ <>"" THEN GOTO VAL "4040"
 4042 IF INKEY$ ="" THEN GOTO VAL "4042"
 4045 LET T$=INKEY$ 
 4048 GOSUB T6
 4050 GOTO VAL "4E3"+HU*(T$="F")+CODE "COS "*(T$="C")+VAL "300"*(T$="R")+VAL "400"*(T$="S")
 4075 IF USR HR THEN PRINT AT N3*N8,I0;"  NOT ENOUGH GOLD IN HAND"
 4080 IF USR HR THEN PRINT AT I0*N8,N0;"▌    ";AT I0*N8,VAL "(1-(G>9999))*2";G
 4085 IF USR HR THEN PRINT ;;;AT N4*N8,I2;"PUSH█ANY█KEY█TO█CONTINUE ";;;;
 4090 IF USR HR THEN PAUSE VAL "4E4"
 4095 GOTO VAL "4010"
 4100 REM [F][O][O][D]
 4105 IF USR HR THEN PRINT ;;;AT I6,N2;"FOOD";;;;" 1 RATION ";;;"=";;;;" 1 GOLD PIECE."
 4110 IF USR HR THEN PRINT TAB I2;"HOW MANY RATIONS?"
 4120 INPUT R
 4130 IF (G-R)<N0 THEN GOTO VAL "4075"
 4135 IF F+R>VAL "2500" THEN IF USR HR THEN PRINT AT N4*N8,I2;"SHIP HOLD TOO SMALL."
 4136 IF F+R>VAL "2500" THEN GOTO VAL "4120"
 4140 LET F=F+R
 4145 IF USR HR THEN PRINT AT I2*N8,N2;"    ";AT I2*N8,N2;F
 4150 LET G=G-R
 4160 IF USR HR THEN PRINT AT N3*N8,I2;R;" RATIONS BOUGHT."
 4170 GOTO VAL "4080"
 4200 REM [C][R][E][W]
 4205 IF USR HR THEN PRINT AT I6,N2;;;"CREW";;;;" 1 MAN ";;;"=";;;;" 10 GOLD PIECES"
 4210 IF USR HR THEN PRINT TAB I2;"HOW MANY CREWMEN?"
 4220 INPUT R
 4225 IF CS+R>HU THEN IF USR HR THEN PRINT AT N4*N8,I2;"NOT ENOUGH ROOM ON BOARD."
 4226 IF CS+R>HU THEN GOTO VAL "4220"
 4230 IF (G-10*R)<N0 THEN GOTO VAL "4075"
 4240 LET CS=CS+R
 4245 IF USR HR THEN PRINT AT I4*N8,N2;"    ";AT I4*N8,N2;CS
 4250 LET G=G-I0*R
 4260 IF USR HR THEN PRINT AT N3*N8,I2;R;" CREWMEN TAKEN ON."
 4270 GOTO VAL "4080"
 4295 REM [R][E][P][A][I][R][S]
 4300 IF USR HR THEN PRINT AT I6,N2;;;"REPAIR";;;;" 20 GOLD PIECES PER PT."
 4310 IF USR HR THEN PRINT TAB I6;"MEND HOW MANY HARM PTS?"
 4320 INPUT R
 4325 IF (H+R)>HU THEN GOTO VAL "4320"
 4330 IF (G-T0*R)<N0 THEN GOTO VAL "4075"
 4340 LET H=H+R
 4345 IF USR HR THEN PRINT AT I6*N8,N2;"    ";AT I6*N8,N2;HU-H
 4350 LET G=G-T0*R
 4360 IF USR HR THEN PRINT AT N3*N8,I2;R;" HARM PTS. MENDED.     "
 4370 GOTO VAL "4080"
 4400 REM [L][E][A][V][E]█[L][A][N][D]
 4420 LET X2=X1
 4425 LET X=X1
 4430 LET Y2=Y1
 4435 LET Y=Y1
 4440 REM  IF USR HR THEN LPRINT SE;;SM;N1,(X2+I2)*N4,(Y2+N2)*N4+T1
 4441 IF USR HR THEN LPRINT SE;
 4445 IF USR HR THEN PRINT AT (N5+L)*N8,(N5+K)*N2;;;;"▒"
 4446 IF USR HR THEN LPRINT SP;N1,(N5+K)*N8,VAL "191"-((N5+L)*N8)
 4447 IF USR HR THEN LPRINT SM;N1,(X2+I2)*N4,(Y2+N2)*N4+T1
 4450 LET Z=N0
 4500 REM [U][P][D][A][T][E]█[D][I][S][P][L][A][Y]
 4510 FOR R=N8 TO I6 STEP N2
 4520 IF USR HR THEN PRINT AT R*N8,N0;"▌    "
 4530 NEXT R
 4540 IF USR HR THEN PRINT ;;;;AT N8*N8,N2;T;AT I0*N8,N2*VAL "1-(G>9999)";G;AT I2*N8,N2;F;AT I4*N8,N2;CS;AT I6*N8,N2;HU-H
 4550 IF Z THEN RETURN
 4750 REM [L][O][S][E][?]
 4760 IF H<N5 THEN GOTO VAL "5750"
 4770 IF CS<I0 AND D$(L,K)=" " THEN GOTO VAL "5500"
 4780 IF CS<I0 THEN GOTO VAL "5250"
 4790 IF NOT F THEN GOTO VAL "5E3"
 4820 GOTO HU
 5000 REM [M][U][T][I][N][Y]
 5005 GOSUB T6
 5010 IF USR HR THEN PRINT AT I6,N2;;;"MUTINY";;;;"    THE HUNGRY CREW TAKE"
 5020 IF USR HR THEN PRINT TAB II*N2;"OVER YOUR SHIP AND"
 5030 IF USR HR THEN PRINT TAB II*N2;"YOU WALK THE PLANK."
 5040 GOTO VAL "5800"
 5250 REM [M][A][R][O][O][N][E][D]
 5255 GOSUB T6
 5260 IF USR HR THEN PRINT AT I6,N2;;;"MAROONED";;;;"  INSUFFICIENT CREW."
 5270 IF USR HR THEN PRINT TAB II*N2;"LIKE ROBINSON CRUSOE"
 5280 IF USR HR THEN PRINT TAB II*N2;"YOU ARE HIGH AND DRY"
 5290 GOTO VAL "5800"
 5500 REM [A][D][R][I][F][T]
 5505 GOSUB T6
 5510 IF USR HR THEN PRINT AT I6,N2;;;"ADRIFT";;;;"    INSUFFICIENT CREW TO"
 5520 IF USR HR THEN PRINT TAB II*N2;"SAIL THE SHIP,THIRST"
 5530 IF USR HR THEN PRINT TAB II*N2;"AND HUNGER SET IN..."
 5540 GOTO VAL "5800"
 5750 REM [S][H][I][P][W][R][E][C][K][E][D]
 5755 GOSUB T6
 5760 IF USR HR THEN PRINT AT I6,N2;;;"ABANDON";;;;"   TOO MUCH DAMAGE-SHIP"
 5770 IF USR HR THEN PRINT TAB N4;;;"SHIP";;;;"     STARTS TO LIST-WATER"
 5780 IF USR HR THEN PRINT TAB II*N2;"GUSHES IN-SHIP SINKS"
 5790 GOTO VAL "5800"
 5805 IF USR HR THEN PRINT AT T1*N8,N0;;;"████TRY█ANOTHER█VOYAGE[?]█[(]Y[/]N[)]███"
 5810 INPUT A$
 5820 IF A$="Y" THEN RUN 
 5830 IF A$="N" THEN STOP
 5840 GOTO VAL "5810"
 6000 REM  CLEAR[M][E][S][S][A][G][E]█[A][R][E][A]
 6010 FOR R=N1 TO N4
 6020 IF USR HR THEN PRINT AT R*N8,N2;"                              "
 6030 NEXT R
 6040 LET X2=X
 6050 LET Y2=Y
 6060 RETURN
 6100 REM  PRINT  NEW[M][A][P]
 6110 POKE VAL "20530",PEEK VAL "20507"
 6120 POKE VAL "20531",PEEK VAL "20508"
 6130 IF USR VAL "20519" THEN REM  SAVE [O][L][D]█[M][A][P]
 6140 LET LO=AD-256*INT (AD/VAL "256")
 6150 LET HI=INT (AD/VAL "256")
 6160 POKE VAL "20507",LO
 6170 POKE VAL "20508",HI
 6180 IF USR VAL "20495" THEN REM  LOAD  NEW[M][A][P]
 6200 IF N=N1 OR N=N2 THEN IF USR HR THEN LPRINT U;"▒";"00,66,55,48,88,08,1C,3E"
 6210 IF N=N3 OR N=N4 THEN IF USR HR THEN LPRINT U;"▒";"00,10,38,10,38,7C,10,00"
 6220 IF N=N6 OR N=N7 THEN IF USR HR THEN LPRINT U;"▒","10,18,3C,34,76,72,F2,69"
 6500 FOR R=N1 TO I5
 6510 IF USR HR THEN PRINT AT (N5+R)*N8,N6*N2;D$(R)
 6520 NEXT R
 6700 RETURN
 7000 REM [M][A][P]█[D][A][T][A]█[A][D][D][R][.]
 7250 LET AD=VAL "32768"
 7260 GOTO VAL "6100"
 7500 LET AD=VAL "33143"
 7510 GOTO VAL "6100"
 7750 LET AD=VAL "33518"
 7760 GOTO VAL "6100"
 8000 LET AD=VAL "33893"
 8010 GOTO VAL "6100"
 8250 LET AD=VAL "34268"
 8260 GOTO VAL "6100"
 8500 LET AD=VAL "34643"
 8510 GOTO VAL "6100"
 8750 REM [D][R][A][W]█[B][O][A][R][D]
 8760 IF USR HR THEN CLS
 8765 IF USR HR THEN CLEAR
 8768 IF USR HR THEN PRINT ;;;"█████████VOYAGE█OF█PERIL████████"
 8770 FOR R=N1 TO N4
 8780 IF USR HR THEN PRINT "▌";TAB VAL "62";"▐"
 8790 NEXT R
 8810 IF USR HR THEN PRINT "▙▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▟"
 8820 FOR R=N1 TO I5
 8830 IF USR HR THEN PRINT "██████";TAB VAL "62";"█"
 8840 NEXT R
 8850 IF USR HR THEN PRINT "██████MAP███████████████████████"
 8860 IF USR HR THEN PRINT AT N6*N8,N0;"STATUS";AT N7*N8,N2;"DAYS";AT N8*N8,N0;"▌0   ▐"
 8870 IF USR HR THEN PRINT AT N9*N8,N2;"GOLD";;;;AT I0*N8,N0;"▌1000▐";;;AT II*N8,N2;"FOOD";;;;AT I2*N8,N0;"▌2500▐"
 8880 IF USR HR THEN PRINT AT I3*N8,N2;;;"CREW";;;;AT I4*N8,N0;"▌100 ▐";AT I5*N8,N2;;;"HARM";;;;AT I6*N8,N0;"▌0   ▐"
 8890 IF USR HR THEN PRINT AT I7*N8,N0;"▛▀▀▀▜";AT I8*N8,N0;;;"▌ N ▐";;;;AT I9*N8,N0;"▌W+E▐";AT T0*N8,N0;"▌ S ▐";AT T1*N8,N0;"▙▄▄▄▟"
 8895 SLOW
 8980 IF USR HR THEN PLOT (X1+I2)*N4,(Y1+N2)*N4+T1
 8982 GOSUB VAL "(7E3+250*N)"
 8985 IF USR HR THEN PRINT AT CODE "[C]",T0;CHR$ (N+CODE "[0]");;;"█TROPICS██" AND (N=N1 OR N=N2);"█TEMPERATE" AND (N=N3 OR N=N4);"█NORTHLANDS" AND (N=N5 OR N=N6)
 8990 IF T THEN GOTO VAL "330"
 8992 IF USR HR THEN LPRINT SS;;SM;N1,CODE " COPY",CODE "[Z]",CODE "K",CODE "3"
 8999 REM [I][N][I][T][I][A][L][I][Z][E]
 9000 GOTO HU
 9500 FAST
 9501 DIM D$(CODE "?",CODE ";")
 9502 LET N0=NOT PI
 9503 LET N1=PI/PI
 9504 LET N2=N1+N1
 9505 LET N3=INT PI
 9506 LET N4=VAL "4"
 9507 LET N5=VAL "5"
 9508 LET N6=VAL "6"
 9509 LET N7=VAL "7"
 9510 LET N8=VAL "8"
 9511 LET N9=VAL "9"
 9512 LET I0=CODE "~~"
 9513 LET II=VAL "11"
 9514 LET I2=CODE "£"
 9515 LET I3=CODE "$"
 9516 LET I4=CODE ":"
 9517 LET I5=CODE "?"
 9518 LET I6=CODE "("
 9519 LET I7=CODE ")"
 9520 LET I8=CODE ">"
 9521 LET I9=CODE "<"
 9522 LET T0=CODE "="
 9523 LET T4=VAL "4500"
 9524 LET T6=VAL "6E3"
 9525 LET P5=VAL ".5"
 9526 LET T8=VAL "8980"
 9527 LET HU=I0*I0
 9528 LET T1=CODE "+"
 9730 LET HG=N0
 9740 RAND 
 9760 LET CS=HU
 9770 LET N=N1
 9780 LET HR=VAL "19400"
 9800 LET H=CS
 9810 LET G=VAL "1E3"
 9820 LET F=VAL "2500"
 9830 LET X1=N0
 9840 LET Y1=N0
 9850 LET X=N1
 9860 LET Y=N1
 9870 LET T=N0
 9880 LET L=I5
 9890 LET K=N1
 9900 DIM Q(CODE ",")
 9910 FOR R=N1 TO CODE ","
 9920 LET Q(R)=CODE "[9]"+R
 9930 NEXT R
 9940 LET P$="BAD NAVIGATION."
 9950 LET Q$="SHIP DAMAGE OF"
 9960 LET R$=" PTS SUSTAINED."
 9970 LET S$=" FOOD RATIONS"
 9980 LET Z=N0
 9982 IF USR VAL "20477" THEN REM [I][N][I][T][.]█[S][C][R][E][E][N]█[D][A][T][A]
 9984 POKE VAL "20507",N0
 9986 POKE VAL "20508",CODE "█"
 9988 IF USR VAL "20495" THEN REM  LOAD [M][A][P]█[1]
 9990 RETURN
 9995 SAVE "VOYAGE[2]"
 9997 RUN 
 
 

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

Scroll to Top