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:
N0throughN9— integers 0–9 derived fromNOT PI,PI/PI, sums,INT PI, andVAL "n"I0throughI9— values 10–19, whereI0=CODE "\~~"(10),I2=CODE "£"(12), etc., exploiting character codesT0=CODE "="(61→used as 20 in context? Actually 61; used as thePOKEmultiplier 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 spaceP5=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:
- Roll wind force (
WF) and direction (WD) randomly - Accept course (
C) and sail area (A) from the player - Check if course is within 45° of the wind — if so, branch to the “in irons” penalty (line 1200)
- Compute distance sailed:
D=0.00001*A*WF^1.5*H - Step along the course in a FOR loop, updating
X,Yand moving the ship sprite - 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
| Line | Event | Effect |
|---|---|---|
| 1000 | Becalmed | No movement; crew eats rations |
| 1200 | In Irons | Sailed too close to wind; crew eats rations |
| 1400 | Storm/Hurricane | Hull damage proportional to (WF-N2)*I0 |
| 2000 | Treasure | Gold added; chest replaced with land tile; Q() array updated |
| 2250/2500/2750/3000 | Rocks/Reefs/Sandbanks/Icebergs | Random hull damage using INT(H*(N1-RND/N2))-N2 formula |
| 3250 | Pirates | All gold stolen; crew and hull randomly reduced |
| 3500 | Home Port | Game end; hi-score check against HG |
| 3750 | Land | Random branch: savages (R<0.2), maidens (R<0.4), or trade menu |
| 5000/5250/5500/5750 | Lose conditions | Mutiny (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
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.
