--- title: "Desert Crossing" id: 71923 type: "computer_media" slug: "desert-crossing" url: "http://localhost/computer_media/desert-crossing/" markdown_url: "http://localhost/computer_media/desert-crossing.md" published_at: "2026-10-20T14:07:48+00:00" modified_at: "2026-10-20T14:10:43+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2026/10/DESERT1.png" excerpt: "Flee across 200 miles of desert on a stolen camel, rationing six drinks of water while angry pursuers, sandstorms, nomads and a tiring camel close in." category: - name: "Archived Media" slug: "archived-media" taxonomy: "category" url: "http://localhost/category/archived-media/" post_tag: - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - name: "TS 1000" slug: "ts1000" taxonomy: "post_tag" url: "http://localhost/tag/ts1000/" model: - name: "Timex/Sinclair 1000" slug: "ts-1000" taxonomy: "model" url: "http://localhost/model/ts-1000/" indiv: - name: "Patrick Spera" slug: "patrick-spera" taxonomy: "indiv" url: "http://localhost/indiv/patrick-spera/" genre: - name: "Game" slug: "game" taxonomy: "genre" url: "http://localhost/type/game/" media_type: "Program" programmers: - name: "Patrick Spera" slug: "patrick-spera" taxonomy: "indiv" url: "http://localhost/indiv/patrick-spera/" download_url: "https://archive.org/download/timex-sinclair-software-archive/Desert%20Crossing%20%28198x%29%28Spera%2C%20Patrick%29%28TS1000%29%28US%29%28Program%29.zip" mediadate: "198x" images: - url: "http://localhost/wp-content/uploads/2026/10/DESERT1.png" - url: "http://localhost/wp-content/uploads/2026/10/DESERT0.png" - url: "http://localhost/wp-content/uploads/2026/10/DESERT2.png" - url: "http://localhost/wp-content/uploads/2026/10/DESERT-CROSSING-scaled.jpg" media_type_tags: "Game" --- # Desert Crossing Puts the player on a stolen camel with 200 miles of desert to cross and pursuers following behind. Each turn offers four choices: drink, go ahead slowly, rest, or go ahead at full speed. The water skin holds six drinks and can be refilled at an oasis; pushing the camel too hard can kill it. Random events include a hot hoof, sandstorms, capture by nomads (with an escape attempt), and rescue by a holy man when dying of thirst. Losing ends with one of six randomly chosen epitaphs. The title screen reads “A P.M. Spera Production – A program adapted from Camel,” followed by a block-graphic camel that walks across the screen and leaves the words DESERT CROSSING behind it. The tape holds two saves, `DESERT` and `DESERT1`, which differ only in line 1508: one tests `IF NOT B$="Y"`, the other `IF B$<>"Y"`. ## Program Analysis ### Program Structure - Lines 8–92: credits and animation in `SLOW` mode, a two-frame walking camel, then a larger grey-shaded figure that moves across the screen - Lines 94–132: instructions in `FAST` mode, held for `PAUSE 1800` - Lines 140–232: setup and main turn loop; new random values for pursuer speed `A`, own speed `D` and the event triggers `O`, `I`, `N` and `V` each turn - Lines 300–612: subroutines for the four actions - Lines 700–1086: thirst, capture, hot hoof, oasis, camel death and sandstorm events - Lines 1200–1512: death epitaphs, capture, win message and replay prompt - Lines 2015–2050: one-letter `PRINT` subroutines for the title animation ### Game Mechanics `S` is the distance covered and `L` the pursuers’ position. Going slowly adds 1–8 miles, full speed adds 5 more, and the pursuers advance 1–11 miles on every move. Camel stamina `C` starts at 4, drops by one per move and is restored by resting or by an oasis; full speed also has a random chance of killing the camel outright. Thirst is tracked in `M`: a drink resets it to 3, resting costs 1, and drinking from an empty skin costs 0.5. At `M=1` the program prints a THIRST ALERT, and at 0 the player starts dying, with a one-in-six chance of rescue. Events trigger when a random number matches a fixed value, for example an oasis when `O=5` (1 in 20) or capture when `N=8` (1 in 25). ### Notable Techniques - The title text is spelled out by `GOSUB 2000+(2*B)` as the camel walks, with one two-line subroutine per letter. The target for the first column, line 2014, does not exist, so that call falls through to the `RETURN` at 2015. - `GOTO (U*10)+1200` picks one of six epitaph lines at random. - `PRINT ,,` uses two comma tab stops to start text on a fresh line. - The ZX81 has no apostrophe, so “AIN’T” is printed with the top-left quadrant graphic. - Inverse-video text is used for the oasis, thirst alert and win messages. ### Potential Issues - Capture by the pursuers (line 190) happens only when `ABS (L-S)` is exactly 0. If they move past the player in one jump, the distance simply grows again and no capture happens. - Moving never increases thirst; only resting or drinking from an empty skin lowers `M`. Because the empty-skin penalty is 0.5, `M` can step past 1 and 0 without matching either test, which skips the thirst alert or death check. - Line 740 uses `GOSUB 1200` where a `GOTO` is meant; the return address is left on the stack. - A sandstorm (line 1084) subtracts the pursuers’ speed `A` from the player’s distance, which can make it negative early in the game. - Several strings contain spelling errors, such as “THEIVES”, “SHIEK” and “SAFTY”. ## Source Code ``` 8 SLOW 10 PRINT AT 7,3;"A P.M. SPERA PRODUCTION" 12 FOR Y=1 TO 300 14 NEXT Y 16 PRINT AT 10,1;"A PROGRAM ADAPTED FROM CAMEL" 18 FOR Y=1 TO 300 20 NEXT Y 22 CLS 24 LET A=1 26 FOR Z=1 TO 26 30 PRINT AT 4,A;" ▗" 32 PRINT AT 5,A;" ▐▖▛" 34 PRINT AT 6,A;" ██▌" 36 PRINT AT 7,A;"▞ ▚" 40 PRINT AT 4,A;" ▐" 42 PRINT AT 5,A;" ▗▖▞▘" 44 PRINT AT 6,A;" ██▌" 46 PRINT AT 7,A;" ▚▞ " 50 LET B=A 52 IF A>6 AND A<23 THEN GOSUB 2000+(2*B) 54 LET A=A+1 56 NEXT Z 60 PRINT AT 4,A;" " 62 PRINT AT 5,A;" " 64 PRINT AT 6,A;" " 66 PRINT AT 7,A;" " 67 FOR Y=1 TO 300 68 NEXT Y 70 LET B=0 71 FOR Y=1 TO 23 72 PRINT AT 5,B;" ,,,," 74 PRINT AT 6,B;" ▒▒▒▒▖▖)" 76 PRINT AT 7,B;"▒▒▒▒▒▜▜" 82 PRINT AT 5,B;" ,," 84 PRINT AT 6,B;" [▒][▒][▒]▗▗)" 86 PRINT AT 7,B;" [▒][▒][▒][▒]▛▛" 90 LET B=B+1 92 NEXT Y 94 FAST 96 CLS 100 PRINT 105 PRINT 110 PRINT "YOU MUST CROSS A DESERT 200" 112 PRINT "MILES WIDE. YOU HAVE STOLEN A" 114 PRINT "PRIZED CAMEL, AND ARE BEING" 116 PRINT "CHASED BY ANGRY ARABS." 118 PRINT 120 PRINT 122 PRINT " YOU HAVE 1QT. OF WATER WHICH" 124 PRINT "WILL LAST YOU FOR 6 DRINKS. YOU " 126 PRINT "CAN REFILL AT ANY OASIS." 128 PRINT 130 PRINT "BE SWIFT, O SHIP OF THE DESERT" 132 PAUSE 1800 134 CLS 140 LET C=4 142 LET S=0 144 LET Q=0 146 LET W=6 148 LET M=3 150 LET L=1 152 LET K=0 154 RAND 160 LET A=INT (RND*11)+1 162 LET D=INT (RND*8)+1 164 LET O=INT (RND*20)+1 166 LET I=INT (RND*30)+1 168 LET N=INT (RND*25)+1 170 LET V=INT (RND*30) 171 PRINT 172 PRINT "1=DRINK","3=REST" 174 PRINT 176 PRINT "2=AHEAD SLOW","4=AHEAD FULL" 178 PRINT 180 IF S>199 THEN GOTO 1400 182 IF S=0 THEN PRINT "YOU AND THE CAMEL ARE READY..." 186 IF S>0 THEN PRINT "YOU HAVE GONE ";S;" MILES" 188 LET K=ABS (L-S) 190 IF K=0 THEN GOTO 1300 191 PRINT 192 PRINT "THE ARABS ARE ";K;" MILES AWAY" 194 PRINT 196 PRINT "YOUR WISH, O DUSTY ONE" 198 INPUT J 199 CLS 200 IF J<1 OR J>4 THEN GOTO 198 204 IF M=0 THEN GOTO 720 206 IF N=8 THEN GOTO 800 210 IF J=1 THEN GOSUB 300 212 IF J=2 THEN GOSUB 400 216 IF J=3 THEN GOSUB 500 218 IF J=4 THEN GOSUB 600 220 IF C=1 THEN PRINT "CAMEL IS GETTING TIRED." 222 IF I=28 THEN GOSUB 920 224 IF O=5 THEN GOSUB 940 225 IF M=1 THEN GOTO 700 226 IF C<=0 THEN GOTO 1000 230 IF V=17 THEN GOSUB 1080 232 GOTO 160 300 LET W=W-1 302 IF W<=-1 THEN LET W=-1 304 IF W=-1 THEN GOTO 320 306 PRINT "AHHH, THAT WAS GOOD. THERE IS ";W 308 PRINT "DRINKS LEFT." 310 IF W>-1 THEN LET M=3 312 GOTO 330 320 PRINT "THE WATERSKIN IS AS DRY AS YOUR" 322 PRINT "THROAT." 324 LET M=M-.5 330 RETURN 400 LET S=S+D 402 LET C=C-1 404 IF C>1 THEN PRINT "CAMEL IS ENJOYING THE STROLL." 406 LET L=L+A 408 RETURN 500 PRINT "NICE REST. TAKE DRINK." 502 LET M=M-1 504 LET C=4 506 RETURN 600 LET S=S+D+5 602 LET C=C-1 604 LET H=INT (RND*10)+1 606 IF H=C THEN LET C=0 608 IF C>1 THEN PRINT "CAMEL IS HUMPPING IT OUT." 610 LET L=L+A 612 RETURN 700 PRINT 702 PRINT "***[T][H][I][R][S][T]█[A][L][E][R][T]***" 704 GOTO 226 720 CLS 722 PRINT "YOU ARE DYING OF THIRST..." 724 PAUSE 120 728 PRINT 729 PRINT "THE VULTURES ARE WINGING IN..." 730 PAUSE 120 734 LET H=INT (RND*6)+1 736 IF H=6 THEN GOTO 760 738 PRINT "AND YOU DIE." 740 GOSUB 1200 760 PRINT "BUT YOU ARE SAVED BY A HOLY MAN," 762 PRINT "AND YOU ARE GIVEN SOME WATER." 764 LET M=3 766 LET W=2 768 GOTO 160 800 CLS 802 PRINT "YOU ARE CAPTURED BY NOMADS" 804 LET Q=INT (RND*20+1) 806 PRINT 808 IF Q<6 THEN PRINT "YOU ARE LUCKY, THEY SHOOT YOU." 810 REM 812 IF Q>=6 AND Q<=10 THEN PRINT "THEY KEEP THE CAMEL, SELL YOU. TO THE ARABS..." 814 IF Q>10 THEN GOTO 820 816 PAUSE 120 818 GOTO 1200 820 IF Q>15 THEN GOTO 860 822 PRINT "YOU ARE STAKED OUT IN THE SUN." 824 PRINT "THE CAMEL IS HELD FOR RANSOM." 826 PAUSE 240 828 PRINT 830 PRINT "DO YOU WISH TO TRY AN ESCAPE?" 832 PRINT "(Y/N)" 834 INPUT A$ 836 PRINT 838 IF A$="N" OR A$="Y" THEN GOTO 842 840 GOTO 834 842 IF A$="Y" THEN GOTO 850 844 PRINT "O.K.,DEAD MEAT." 846 PAUSE 120 848 GOTO 1200 850 LET H=INT (RND*10)+1 852 IF H<6 THEN PRINT "VALIANT ATTEMPT, BUT YOU DIED..." 854 IF H<6 THEN GOTO 1200 855 PRINT "YOU ESCAPED..." 856 PRINT "THE NOMADS ARE EATING YOUR DUST" 857 PAUSE 300 858 CLS 859 GOTO 160 860 PRINT "THEY FIND YOU ARE A LONG LOST" 862 PRINT "RELATION AND LET YOU GO..." 864 PAUSE 200 868 PRINT 870 GOTO 160 900 STOP 920 PRINT "CAMEL HAS A HOT HOOF." 922 LET C=1 924 RETURN 940 PRINT "[O][A][S][I][S] WATERSKIN IS FILLED." 942 PRINT 944 PRINT "CAMEL IS EATING MILK AND HONEY" 946 PRINT "SERVED BY A BEAUTIFUL HOURIS." 948 LET M=3 950 LET C=4 952 LET W=6 954 RETURN 1000 PRINT "YOU RAN THE CAMEL TO DEATH." 1002 PAUSE 180 1006 PRINT 1008 PRINT "AND KILLED YOUR-SELF AS WELL." 1010 PAUSE 180 1012 GOTO 1200 1080 PRINT 1082 PRINT "LOST IN A SAND STORM." 1084 LET S=S-A 1086 RETURN 1200 LET U=INT (RND*6)+1 1202 GOTO (U*10)+1200 1210 PRINT ,,"TURKEYS SHOULD FLY, NOT RIDE CAMELS." 1215 GOTO 1500 1220 PRINT ,,"FOOLS SHOULD STAY OUT OF THE DESERT." 1225 GOTO 1500 1230 PRINT ,,"A LOCAL SHIEK NOW USES YOUR SKULL FOR A ASHTRAY." 1235 GOTO 1500 1240 PRINT ,,"AIN▘T IT FUN TO BE BUZZARD BAIT?" 1245 GOTO 1500 1250 PRINT ,,"THE LOCAL CAMEL UNION WILL NOT COME TO YOUR FUNERAL." 1255 GOTO 1500 1260 PRINT ,,"I HOPE YOUR INSURANCE WAS PAID UP..." 1265 GOTO 1500 1300 CLS 1301 PRINT "THEY GOT YOU." 1302 PRINT ,,"ARABS DISLIKE CAMEL THEIVES." 1304 PAUSE 240 1308 PRINT ,,"ITS BEEN REAL NICE KNOWING YOU." 1310 PAUSE 180 1314 PRINT ,,"WHERE DO WE SENT THE FLOWERS?" 1316 PAUSE 240 1320 GOTO 1200 1400 CLS 1402 PRINT "[Y][O][U]█[M][A][D][E]█[I][T]█[T][O]█[(][R][E][L][A][T][I][V][E][)]█[S][A][F][T][Y][.]" 1404 PRINT 1406 PRINT "A CELEBRATION IS BEING HELD FOR" 1408 PRINT "YOU. THE ARABS HIRED OUT AS" 1410 PRINT "CATERS. HUMMMMM...." 1414 GOTO 1500 1500 PRINT ,,"WANT TO HUMP ALONG SOMEMORE?" 1504 PRINT "(Y/N)" 1506 INPUT B$ 1508 IF NOT B$="Y" THEN STOP 1510 CLS 1512 GOTO 140 2015 RETURN 2016 PRINT AT 6,A;"D" 2017 RETURN 2018 PRINT AT 6,A;"E" 2019 RETURN 2020 PRINT AT 6,A;"S" 2021 RETURN 2022 PRINT AT 6,A;"E" 2023 RETURN 2024 PRINT AT 6,A;"R" 2025 RETURN 2026 PRINT AT 6,A;"T" 2027 RETURN 2028 PRINT AT 6,A;" " 2029 RETURN 2030 PRINT AT 6,A;"C" 2031 RETURN 2032 PRINT AT 6,A;"R" 2033 RETURN 2034 PRINT AT 6,A;"O" 2035 RETURN 2036 PRINT AT 6,A;"S" 2037 RETURN 2038 PRINT AT 6,A;"S" 2039 RETURN 2040 PRINT AT 6,A;"I" 2041 RETURN 2042 PRINT AT 6,A;"N" 2043 RETURN 2044 PRINT AT 6,A;"G" 2050 RETURN ```