1 500 CALL CLEAR
2 510 ON WARNING NEXT
3 520 OPTION BASE 1
4 530 DIM H$ ( 20 ) , N$ ( 9 ) , HS ( 260 ) , TS ( 9 ) , RA ( 9 )
5 540 S$ = "() " & CHR$ ( 136 ) & CHR$ ( 137 )
6 550 FOR I = 1 TO 19
7 560 H$ ( I ) = SEG$ ( "!!!!!!!!!!!!!!!!!!*+ " & CHR$ ( 138 ) & CHR$ ( 139 ) & "!!!!!!!!!!!!!!!!!!!" , I , 28 )
8 570 NEXT I
9 580 DEF TP ( X ) = INT ( X / 60 )
10 590 DEF TQ ( X ) = INT ( ( X - TP ( X ) * 60 ) * 100 ) / 100
11 600 DEFINITION
12 610 CALL CHAR ( 33 , "000000FFFF" , 128 , "0000001824C3" )
13 620 Z$ = "070707070707040400C0F0F0C000000004040404040404040"
14 630 CALL CHAR ( 40 , Z$ , 136 , Z$ , 129 , "000000FFFF" , 64 , "000010107C101" )
15 640 CALL CHAR ( 96 , "000707070F1F1315191101000000030E000000E0B19ACCC0C0C0C0EEF8E08" )
16 650 CALL CHAR ( 100 , "000303071F3727272F37270606060202008080C0F0D8C8C8E8D8C8C0C0C0808" )
17 660 CALL CHAR ( 104 , "000000078D593303030303771F07010000E0E0E0F0F8C8A8988880000000C07" )
18 670 GOSUB 2570
19 680 CALL SCREEN ( 12 ) :: DISPLAY ERASE ALL AT ( 6 , 2 ) : "ANZAHL SPIELER [1-9]?:1"
20 690 ACCEPT AT ( 6 , 24 ) BEEP VALIDATE ( DIGIT ) SIZE ( - 1 ) : SPIELER :: IF SPIELER = 0 OR SPIELER > 9 THEN 690
21 700 IF SPIELER = 1 THEN 770
22 710 DISPLAY AT ( 9 , 1 ) : "NAMENSEINGABE :"
23 720 FOR G = 1 TO SPIELER
24 730 DISPLAY AT ( 10 + G , 1 ) : "SPIELER " & STR$ ( G ) & "?:"
25 740 ACCEPT AT ( 10 + G , 13 ) BEEP VALIDATE ( UALPHA , ".-" ) SIZE ( 8 ) : N$ ( G )
26 750 IF N$ ( G ) = "" THEN 740
27 760 NEXT G
28 770 CALL SCREEN ( 4 ) :: DISPLAY AT ( 9 , 1 ) ERASE ALL : "GEBEN SIE DIE NUMMER DER PISTE AN, AUF DER SIE FAHRENWOLLEN[1-9999]: 1"
29 780 ACCEPT AT ( 11 , 17 ) SIZE ( - 4 ) BEEP VALIDATE ( DIGIT ) : PSN :: IF PSN = 0 THEN 780
30 790 CALL CLEAR :: CALL SCREEN ( 8 )
31 800 DISPLAY AT ( 4 , 2 ) : "BITTE WAEHLEN SIE:" : : TAB ( 4 ) ; "1 ABFAHRT \" : TAB ( 20 ) ; ">EINFACH" : TAB ( 4 ) ; "2 RIESENSLALOM /" : : TAB ( 4 ) ; "3 SLALOM >SCHWIERIG"
32 810 CALL KEY ( 0 , K , S )
33 820 IF K < 49 OR K > 51 THEN 810
34 830 ON K - 48 GOTO 840, 860, 880
35 840 F1 = 3 :: F2 = 8 :: F3 = 8 :: F4 = 12 :: F5 = 1.0
36 850 GOTO 890
37 860 F1 = 4 :: F2 = 7 :: F3 = 7 :: F4 = 16 :: F5 = 0.5
38 870 GOTO 890
39 880 F1 = 5 :: F2 = 3 :: F3 = 3 :: F4 = 24 :: F5 = 2
40 890 CALL CLEAR
41 900 CALL MAGNIFY ( 3 )
42 910 CALL CLEAR :: CALL SCREEN ( 14 )
43 930 Z$ = "070707070707040400C0F0F0C000000004040404040404040"
44 940 IF K < > 51 THEN Z$ = "2030383F3F3F3F3F040C1CFCFCFCFCFC3F2F272020202020FCF4E40404040404"
45 950 CALL CHAR ( 40 , Z$ , 136 , Z$ )
46 960 Z$ = ""
47 970 RANDOMIZE PSN
48 980 LS = INT ( 60 + 200 * RND ) :: SL = 1
49 985 DISPLAY AT ( 10 , 7 ) : "BITTE WARTEN" : : "[ PISTE NR." ; PSN ; "LAENGE:" ; INT ( LS / F1 * 10 ) ; "M" : " WIRD GERADE PRAEPARIERT ]"
50 990 FOR I = 1 TO LS
51 1000 HS ( I ) = INT ( 51 + RND * 100 )
52 1010 NEXT I
53 1020 FOR I = 1 TO LS - 5
54 1030 IF F1 = 3 THEN HS ( I ) = INT ( 19 * RND + 1 ) ELSE HS ( I ) = INT ( 10 + SGN ( SL ) * ( 3 + 6 * RND ) ) :: SL = - SL
55 1040 HS ( I + 1 ) = HS ( I ) + 20
56 1050 I = I + F2 + INT ( F3 * RND )
57 1060 NEXT I
58 1070 CALL COLOR ( 0 , 2 , 8 , 1 , 16 , 16 , 2 , 7 , 16 , 3 , 2 , 16 , 4 , 2 , 16 , 5 , 2 , 16 , 6 , 2 , 16 )
59 1080 CALL COLOR ( 7 , 2 , 16 , 8 , 2 , 16 , 9 , 5 , 16 , 10 , 5 , 16 , 11 , 2 , 16 , 12 , 2 , 16 , 13 , 2 , 16 , 14 , 5 , 16 )
60 1090 CALL SCREEN ( 8 )
61 1100 START
62 1110 FOR G = 1 TO 9 :: TS ( G ) , RA ( G ) = 0 :: NEXT G
63 1120 FOR SP = 1 TO SPIELER
64 1130 CALL CLEAR
65 1140 CALL DELSPRITE ( ALL )
66 1150 CALL VCHAR ( 1 , 31 , 31 , 96 )
67 1160 IF SPIELER = 1 THEN 1180
68 1170 DISPLAY AT ( 2 , 2 ) : "NR." ; SP ; " " ; N$ ( SP )
69 1180 DISPLAY AT ( 6 , 1 ) : " " & RPT$ ( CHR$ ( 129 ) , 7 ) & " START"
70 1190 DISPLAY AT ( 14 , 1 ) : TAB ( 10 ) ; S$ : H$ ( 10 )
71 1200 CALL SPRITE ( # 1 , 100 , 3 + SP , 26 , 120 , 0 , 0 )
72 1210 ZIEL , T = 0
73 1220 CALL KEY ( 1 , K , S )
74 1230 IF K < > 18 THEN 1220
75 1240 FOR ZA = 1 TO 3
76 1250 CALL SOUND ( 100 , 440 , 9 )
77 1260 CALL SOUND ( 100 , 110 , 30 )
78 1270 NEXT ZA
79 1280 CALL SOUND ( 200 , 659 , 9 )
80 1290 SPD = 8
81 1300 TZ = .2
82 1305 XL = - 10 :: SX = 0 :: SL = - 100
83 1310 CALL SOUND(4250,-5,29)
84 1320 GOSUB 2230
85 1330 IF X THEN T = T + .5
86 1340 CALL POSITION ( # 1 , P , Q )
87 1350 IF P < 56 THEN 1320
88 1360 CALL MOTION ( # 1 , 0 , 0 )
89 1370 CALL LOCATE ( # 1 , 58 , Q )
90 1380 SPD = 0
91 1385 TZ = 1 / F1
92 1387 XL = 0
93 1390 FOR PS = 1 TO LS
94 1410 GOSUB 2230
95 1415 CALL POSITION ( # 1 , P , Q ) :: IF JUMP THEN CALL LOCATE ( # 1 , P + 4 , Q ) :: P = P + 4 :: JUMP = 0
96 1420 P = ( P + 15 ) / 8 :: Q = ( Q + 11 ) / 8 :: IF Q < = 2 OR Q > = 31 THEN 1680
97 1460 CALL GCHAR ( P , Q , Z )
98 1470 IF Z = 32 THEN 1780
99 1475 IF Z = 128 THEN 1671
100 1480 IF Z = 33 OR ( Z = 139 AND F1 = 4 ) THEN 1520
101 1490 IF Z = 129 THEN 1910
102 1500 IF Z = 42 OR ( Z = 43 AND F1 < > 4 ) OR Z = 138 OR ( Z = 139 AND F1 < > 4 ) THEN 1570
103 1510 GOTO 1780
104 1520 CALL COLOR ( 1 , 15 , 16 )
105 1530 CALL SOUND ( - 100 , 440 , 20 )
106 1540 T = T + 1.0
107 1550 CALL COLOR ( 1 , 16 , 16 )
108 1560 GOTO 1780
109 1570 CALL HCHAR ( P , Q , 32 )
110 1580 CALL PATTERN ( # 1 , 100 )
111 1590 CALL PATTERN ( # 1 , 96 )
112 1600 CALL PATTERN ( # 1 , 100 )
113 1610 CALL PATTERN ( # 1 , 104 )
114 1620 CALL SOUND ( - 100 , - 6 , 15 )
115 1630 CALL PATTERN ( # 1 , 100 )
116 1640 CALL PATTERN ( # 1 , 96 )
117 1650 CALL PATTERN ( # 1 , 100 + X )
118 1660 T = T + .2
119 1670 GOTO 1780
120 1671 CALL POSITION ( # 1 , P , Q )
121 1672 CALL LOCATE ( # 1 , P - 4 , Q )
122 1673 CALL SOUND ( - 100 , - 5 , 15 )
123 1674 JUMP = 1
124 1675 T = T + 0.1
125 1679 GOTO 1780
126 1680 CALL MOTION ( # 1 , 0 , 0 )
127 1690 CALL SOUND ( - 500 , - 6 , 10 )
128 1700 FOR G = 1 TO 20
129 1710 CALL COLOR ( 0 , 2 , 10 )
130 1720 CALL COLOR ( # 1 , 12 )
131 1730 CALL COLOR ( 0 , 2 , 8 )
132 1740 CALL COLOR ( # 1 , 5 )
133 1750 NEXT G
134 1760 CALL DELSPRITE ( ALL )
135 1770 GOTO 2130
136 1780 CALL SOUND(-1500,-5,29)
137 1790 PISTE
138 1800 IF ZIEL THEN PRINT :: GOTO 1860
139 1810 WP = HS ( PS )
140 1820 IF WP > 50 THEN 1850
141 1830 IF WP < 20 THEN PRINT TAB ( 20 - WP ) ; S$ ELSE PRINT H$ ( WP - 20 )
142 1840 GOTO 1860
143 1850 IF WP < 79 THEN PRINT TAB ( WP - 50 ) ; CHR$ ( 128 ) ELSE PRINT :
144 1860 NEXT PS
145 1870 ZIEL , PS = 1
146 1880 CALL HCHAR ( 23 , 3 , 129 , 28 ) :: PRINT TAB ( 12 ) ; "ZIEL"
147 1890 TZ = 1 / F1
148 1900 GOTO 1390
149 1910 TS ( SP ) = INT ( T * 100 ) / 100
150 1920 SPD = 5 :: CALL MOTION ( # 1 , SPD , SX )
151 1930 IF RA ( 1 ) = 0 THEN 1970
152 1940 IMAGE "## : ##.##"
153 1950 IMAGE "##.##"
154 1960 DISPLAY AT ( 23 , 2 ) : USING 1940 : TP ( TS ( RA ( 1 ) ) ) , TQ ( TS ( RA ( 1 ) ) )
155 1970 DISPLAY AT ( 23 , 15 ) : USING 1940 : TP ( TS ( SP ) ) , TQ ( TS ( SP ) )
156 1980 SPD = 8
157 1990 IF SPIELER = 1 THEN 2040
158 2000 DISPLAY AT ( 1 , 1 ) : : " NR." ; SP ; N$ ( SP ) : :
159 2010 GOSUB 2300
160 2020 FOR G = 1 TO SPIELER :: IF RA ( G ) = SP THEN DISPLAY AT ( 24 , 23 ) : "[" ; G ; "]" :: GOTO 2040
161 2030 NEXT G :: STOP
162 2040 TZ = 0
163 2050 SPD = 4
164 2060 FOR G = 1 TO 50 :: GOSUB 2230 :: NEXT G
165 2070 T = 0 :: CALL MOTION ( # 1 , 0 , 0 )
166 2080 DISPLAY AT ( 14 , 4 ) : "DRUECKEN SIE EINE TASTE"
167 2090 CALL KEY ( 1 , K , S1 ) :: CALL KEY ( 0 , K , S )
168 2100 IF S = 0 AND S1 = 0 THEN 2090
169 2110 CALL DELSPRITE ( ALL )
170 2120 IF K = 6 THEN 770ELSE IF K = 15 THEN 680
171 2130 IF SP < 3 THEN 2150
172 2140 GOSUB 2410
173 2150 NEXT SP
174 2160 DISPLAY AT ( 12 , 5 ) ERASE ALL BEEP : "NOCH EIN SPIEL ?[J/N]"
175 2170 CALL KEY ( 0 , K , S ) :: IF S < = 0 THEN 2170
176 2180 IF K = 78 OR K = 110 THEN STOP
177 2190 IF K = 74 OR K = 106 THEN IF SPIELER = 1 THEN 1120ELSE 1110
178 2200 GOTO 2170
179 2210 STOP
180 2220 SKIFAHRER
181 2230 CALL JOYST ( 1 , X , Y )
182 2240 T = T + TZ
183 2250 IF X THEN T = T + 0.01
184 2260 IF X < > XL THEN CALL PATTERN ( # 1 , X + 100 ) :: CALL MOTION ( # 1 , SPD , X * F1 ) :: XL = X
185 2280 RETURN
186 2290 ! RANGBERECHNUNG
187 2300 !
188 2310 FOR G = 1 TO SPIELER
189 2320 IF RA ( G ) = 0 THEN 2360
190 2330 IF TS ( SP ) < = TS ( RA ( G ) ) THEN 2360
191 2340 NEXT G
192 2350 STOP
193 2360 FOR I = SPIELER - 1 TO G STEP - 1
194 2370 RA ( I + 1 ) = RA ( I )
195 2380 NEXT I
196 2390 RA ( G ) = SP
197 2400 RETURN
198 2410 ! AUSDRUCK
199 2420 CALL DELSPRITE ( ALL )
200 2430 CALL CLEAR
201 2440 DISPLAY AT ( 2 , 1 ) : "PL. STRNR. NAME ZEIT"
202 2450 FOR G = 1 TO SPIELER
203 2460 IF RA ( G ) = 0 THEN 2530
204 2470 IF G = 1 THEN TP1 = TP ( TS ( RA ( 1 ) ) ) :: TQ1 = TQ ( TS ( RA ( 1 ) ) ) :: P$ = " " ELSE TP1 = 0 :: TQ1 = TS ( RA ( G ) ) - TS ( RA ( 1 ) ) :: P$ = "@"
205 2480 IF G = 1 THEN G1 = G :: GOTO 2500
206 2490 IF TS ( RA ( G ) ) < > TS ( RA ( G - 1 ) ) THEN G1 = G
207 2500 DISPLAY AT ( 3 + G , 1 ) : G1 ; TAB ( 5 ) ; RA ( G ) ; TAB ( 10 ) ; N$ ( RA ( G ) ) ; TAB ( 19 ) ; P$
208 2510 IF G > 1 THEN DISPLAY AT ( 3 + G , 24 ) : USING 1950 : TQ1 ELSE DISPLAY AT ( 3 + G , 19 ) : USING 1940 : TP1 , TQ1
209 2520 NEXT G
210 2530 DISPLAY AT ( 23 , 7 ) : "TASTE DRUECKEN"
211 2540 CALL KEY ( 1 , K , S1 ) :: CALL KEY ( 0 , K , S ) :: IF S < = 0 AND S1 < = 0 THEN 2540
212 2550 RETURN
213 2560 ! ** TITEL **
214 2570 CALL MAGNIFY ( 2 ) :: CALL SCREEN ( 16 )
215 2580 CALL SPRITE ( # 1 , 83 , 2 , 20 , 128 , # 2 , 75 , 2 , 30 , 128 , # 3 , 73 , 2 , 60 , 128 )
216 2590 CALL MOTION ( # 1 , 8 , - 8 , # 2 , - 8 , 0 , # 3 , - 8 , 8 )
217 2600 CALL COINC ( # 1 , 40 , 108 , 2 , O ) :: IF NOT O THEN 2600
218 2610 CALL MOTION ( # 1 , 0 , 0 , # 2 , 0 , 0 , # 3 , 0 , 0 )
219 2620 CALL LOCATE ( # 1 , 40 , 108 , # 2 , 16 , 128 , # 3 , 40 , 148 )
220 2630 CALL COLOR ( # 1 , 5 , # 2 , 7 , # 3 , 14 )
221 2640 CALL MOTION ( # 2 , 8 , 0 )
222 2650 CALL COINC ( # 2 , 40 , 128 , 2 , O ) :: IF NOT O THEN 2650
223 2660 CALL MOTION ( # 2 , 0 , 0 ) :: CALL LOCATE ( # 2 , 40 , 128 )
224 2670 DISPLAY AT ( 10 , 8 ) : "() HALLO " & CHR$ ( 136 ) & CHR$ ( 137 ) : TAB ( 8 ) ; "*+ HALLO " & CHR$ ( 138 ) & CHR$ ( 139 )
225 2680 DISPLAY AT ( 13 , 1 ) : "LIEBE SKIFREUNDE," : : "`b DER COMPUTER BEGRUESST hjac SIE ZUM SKIPROGRAMM. ik"
226 2690 DISPLAY AT ( 18 , 1 ) : "HIER DIE REGELN:" : "ES KOENNEN BIS ZU 9 FAHRER TEILNEHMEN.JEDER GIBT SEINENNAMEN EIN UND ERHAELT EINE STARTNUMMER."
227 2700 GOSUB 2800
228 2705 CALL LOCATE ( # 1 , 1 , 108 , # 2 , 1 , 128 , # 3 , 1 , 148 )
229 2710 PRINT : : : : "() ES WIR IMMER MIT JOYSTICK*+ NR.1 GESPIELT.AM ENDE ERSCHEINT DANN DIE " & CHR$ ( 136 ) & CHR$ ( 137 )
230 2715 PRINT " GEFAHRENE ZEIT UND EINE" & CHR$ ( 138 ) & CHR$ ( 139 ) & "`b RANGTABELLE."
231 2720 PRINT "ac" ; TAB ( 27 ) ; "df" : " SIE MUESSEN VERSUCHEN eg() SO DURCH DIE PISTE ZU" : "*+ KOMMEN, OHNE DASS SIE " & CHR$ ( 136 ) & CHR$ ( 137 )
232 2725 PRINT " EIN TOR STREIFEN ODER " & CHR$ ( 138 ) & CHR$ ( 139 ) & "hj AUSLASSEN." : "ik SONST ERHALTEN SIE EINEN ZEITZUSCHLAG."
233 2727 PRINT : : RPT$ ( "()" & CHR$ ( 136 ) & CHR$ ( 137 ) , 2 ) & " VIEL" ;
234 2730 PRINT TAB ( 20 ) ; RPT$ ( "()" & CHR$ ( 136 ) & CHR$ ( 137 ) , 2 )
235 2735 PRINT RPT$ ( "*+" & CHR$ ( 138 ) & CHR$ ( 139 ) , 2 ) & " GLUECK" ; TAB ( 20 ) ; RPT$ ( "*+" & CHR$ ( 138 ) & CHR$ ( 139 ) , 2 ) : :
236 2740 GOSUB 2800
237 2745 CALL DELSPRITE ( ALL ) :: CALL COLOR ( 2 , 2 , 1 )
238 2750 RETURN
239 2760 !
240 2770 !
241 2780 !
242 2790 !
243 2800 DISPLAY AT ( 24 , 6 ) : "WEITER MIT ENTER"
244 2810 FOR J = 1 TO 3 :: CALL COLOR ( # J , INT ( 14 * RND + 2 ) ) :: NEXT J
245 2820 CALL COLOR ( 2 , INT ( 14 * RND + 2 ) , 1 ) :: CALL COLOR ( 9 , INT ( 14 * RND + 2 ) , 1 ) :: CALL COLOR ( 14 , INT ( 14 * RND + 2 ) , 1 ) :: CALL COLOR ( 10 , INT ( 14 * RND + 2 ) , 1 )
246 2830 CALL KEY ( 0 , K , S ) :: IF K < > 13 THEN 2810
247 2840 RETURN