Compare commits
4 Commits
976e7db366
...
80a9ec5807
Author | SHA1 | Date |
---|---|---|
j | 80a9ec5807 | |
j | abcce0985c | |
j | df6b24fc99 | |
j | 6ed6d58174 |
|
@ -0,0 +1,717 @@
|
||||||
|
' FreeBASIC port of Oregon Trail
|
||||||
|
' ------------------------------
|
||||||
|
'
|
||||||
|
' The program that follows is a reconstruction
|
||||||
|
' of the Oregon Trail game written for HP time-shared
|
||||||
|
' BASIC by Don Rawitsch and Bill Heinemann and Paul Dillenberger
|
||||||
|
' in 1971. Its source is an updated version published in the
|
||||||
|
' July-August 1978 issue of Creative Computing.
|
||||||
|
'
|
||||||
|
|
||||||
|
10 REM PROGRAM NAME - 0REGON VERSION:01/01/78
|
||||||
|
20 REM ORIGINAL PROGRAMMING BY BILL HEINEMANN - 1971
|
||||||
|
30 REM SUPPORT RESEARCH AND MATERIALS BY DON RAVITSCH
|
||||||
|
40 REM MINNESOTA EDUCATIONAL COMPUTING CONSORTIUM STAFF
|
||||||
|
50 REM CDC CYBER 70/73-26 BASIC 3-1
|
||||||
|
60 REM DOCUMENTATION BOOKLET 'OREGON' AVAILABLE FROM
|
||||||
|
61 REM MECC SUPPORT SERVICES
|
||||||
|
62 REM 2520 BROADWAY DRIVE
|
||||||
|
63 REM ST. PAUL, MN 55113
|
||||||
|
80 REM
|
||||||
|
150 REM *FOR THE MEANING OF THE VARIABLES USED, LIST LINES 6470-6790*
|
||||||
|
155 REM
|
||||||
|
|
||||||
|
160 PRINT "DO YOU NEED INSTRUCTIONS (YES/NO)";
|
||||||
|
170 DIM CS AS STRING
|
||||||
|
180 REM RANDOMIZE REMOVED
|
||||||
|
190 INPUT CS
|
||||||
|
200 IF CS="NO" THEN 690
|
||||||
|
210 PRINT
|
||||||
|
220 PRINT
|
||||||
|
|
||||||
|
230 REM ***INSTRUCTIONS***
|
||||||
|
240 PRINT "THIS PROGRAM SIMULATES A TRIP OVER THE OREGON TRAIL FROM"
|
||||||
|
250 PRINT "INDEPENDENCE, MISSOURI TO OREGON CITY, OREGON IN 1847."
|
||||||
|
260 PRINT "YOUR FAMILY OF FIVE WILL COVER THE 2040 MILE OREGON TRAIL"
|
||||||
|
270 PRINT "IN 5-6 MONTHS --- IF YOU MAKE IT ALIVE."
|
||||||
|
280 PRINT
|
||||||
|
290 PRINT "YOU HAD SAVED $900 TO SPEND FOR THE TRIP, AND YOU'VE JUST"
|
||||||
|
300 PRINT " PAID $200 FOR A WAGON ."
|
||||||
|
310 PRINT "YOU WILL NEED TO SPEND THE REST OF YOUR MONEY ON THE"
|
||||||
|
320 PRINT " FOLLOWING ITEMS:"
|
||||||
|
330 PRINT
|
||||||
|
340 PRINT " OXEN - YOU CAN SPEND $200-$300 ON YOUR TEAM"
|
||||||
|
350 PRINT " THE MORE YOU SPEND, THE FASTER YOU'LL GO"
|
||||||
|
360 PRINT " BECAUSE YOU'LL HAVE BETTER ANIMALS"
|
||||||
|
370 PRINT
|
||||||
|
380 PRINT " FOOD - THE MORE YOU HAVE, THE LESS CHANCE THERE"
|
||||||
|
390 PRINT " IS OF GETTING SICK"
|
||||||
|
400 PRINT
|
||||||
|
410 PRINT " AMMUNITION - $1 BUYS A BELT OF 50 BULLETS"
|
||||||
|
420 PRINT " YOU WILL NEED BULLETS FOR ATTACKS BY ANIMALS"
|
||||||
|
430 PRINT " AND BANDITS, AND FOR HUNTING FOOD"
|
||||||
|
440 PRINT
|
||||||
|
450 PRINT " CLOTHING - THIS IS ESPECIALLY IMPORTANT FOR THE COLD"
|
||||||
|
460 PRINT " WEATHER YOU WILL ENCOUNTER WHEN CROSSING"
|
||||||
|
470 PRINT " THE MOUNTAINS"
|
||||||
|
480 PRINT
|
||||||
|
490 PRINT " MISCELLANEOUS SUPPLIES - THIS INCLUDES MEDICINE AND"
|
||||||
|
500 PRINT " OTHER THINGS YOU WILL NEED FOR SICKNESS"
|
||||||
|
510 PRINT " AND EMERGENCY REPAIRS"
|
||||||
|
520 PRINT
|
||||||
|
530 PRINT
|
||||||
|
540 PRINT "YOU CAN SPEND ALL YOUR MONEY BEFORE YOU START YOUR TRIP -"
|
||||||
|
550 PRINT "OR YOU CAN SAVE SOME OF YOUR CASH TO SPEND AT FORTS ALONG"
|
||||||
|
560 PRINT "THE WAY WHEN YOU RUN LOW. H0WEVER, ITEMS COST MORE AT"
|
||||||
|
570 PRINT "THE FORTS. YOU CAN ALSO GO HUNTING ALONG THE WAY TO GET"
|
||||||
|
580 PRINT "MORE FOOD."
|
||||||
|
590 PRINT "WHENEVER YOU HAVE TO USE YOUR TRUSTY RIFLE ALONG THE WAY,"
|
||||||
|
600 PRINT "YOU WILL BE TOLD TO TYPE IN A WORD (ONE THAT SOUNDS LIKE A"
|
||||||
|
610 PRINT "GUN SHOT). THE FASTER YOU TYPE IN THAT WORD AND HIT THE"
|
||||||
|
620 PRINT """RETURN"" KEY, THE BETTER LUCK YOU'LL HAVE WITH YOUR GUN."
|
||||||
|
630 PRINT
|
||||||
|
640 PRINT "AT EACH TURN, ALL ITEMS ARE SHOWN IN DOLLAR AMOUNTS"
|
||||||
|
650 PRINT "EXCEPT BULLETS"
|
||||||
|
660 PRINT "WHEN ASKED TO ENTER MONEY AMOUNTS, DON'T USE A ""$""."
|
||||||
|
670 PRINT
|
||||||
|
680 PRINT "GOOD LUCK!!!"
|
||||||
|
690 PRINT
|
||||||
|
700 PRINT
|
||||||
|
|
||||||
|
710 PRINT "HOW GOOD A SHOT ARE YOU WITH YOUR RIFLE?"
|
||||||
|
720 PRINT " (1) ACE MARKSMAN, (2) GOOD SHOT, (3) FAIR TO MIDDLIN'"
|
||||||
|
730 PRINT " (4) NEED MORE PRACTICE, (5) SHAKY KNEES"
|
||||||
|
740 PRINT "ENTER ONE OF THE ABOVE -- THE BETTER YOU CLAIM YOU ARE, THE"
|
||||||
|
750 PRINT "FASTER YOU'LL HAVE TO BE WITH YOUR GUN TO BE SUCCESSFUL."
|
||||||
|
760 INPUT D9
|
||||||
|
770 IF D9>5 THEN 790
|
||||||
|
780 GOTO 810
|
||||||
|
790 D9=0
|
||||||
|
|
||||||
|
800 REM *** INITIAL PURCHASES***
|
||||||
|
810 X1=-1
|
||||||
|
820 K8=S4=F1=F2=M=M9=D3=0
|
||||||
|
830 PRINT
|
||||||
|
840 PRINT
|
||||||
|
850 PRINT "HOW MUCH DO YOU WANT TO SPEND ON YOUR OXEN TEAM";
|
||||||
|
860 INPUT A
|
||||||
|
870 IF A >= 200 THEN 900
|
||||||
|
880 PRINT "NOT ENOUGH"
|
||||||
|
890 GOTO 850
|
||||||
|
900 IF A <= 300 THEN 930
|
||||||
|
910 PRINT "TOO MUCH"
|
||||||
|
920 GOTO 850
|
||||||
|
930 PRINT "HOW MUCH DO YOU WANT TO SPEND ON FOOD";
|
||||||
|
940 INPUT F
|
||||||
|
950 IF F >= 0 THEN 980
|
||||||
|
960 PRINT "IMPOSSIBLE"
|
||||||
|
970 GOTO 930
|
||||||
|
980 PRINT "HOW MUCH DO YOU WANT TO SPEND ON AMMUNITION";
|
||||||
|
990 INPUT B
|
||||||
|
1000 IF B >= 0 THEN 1030
|
||||||
|
1010 PRINT "IMPOSSIBLE"
|
||||||
|
1020 GOTO 980
|
||||||
|
1030 PRINT "HOW MUCH DO YOU WANT TO SPEND ON CLOTHING";
|
||||||
|
1040 INPUT C
|
||||||
|
1050 IF C >= 0 THEN 1080
|
||||||
|
1060 PRINT "IMPOSSIBLE"
|
||||||
|
1070 GOTO 1030
|
||||||
|
1080 PRINT "HOW MUCH DO YOU WANT TO SPEND ON MISCELLANEOUS SUPPLIES";
|
||||||
|
1090 INPUT M1
|
||||||
|
1100 IF M1 >= 0 THEN 1130
|
||||||
|
1110 PRINT "IMPOSSIBLE"
|
||||||
|
1120 GOTO 1080
|
||||||
|
1130 T=700-A-F-B-C-M1
|
||||||
|
1140 IF T >= 0 THEN 1170
|
||||||
|
1150 PRINT "YOU OVERSPENT--YOU ONLY HAD $700 TO SPEND. BUY AGAIN."
|
||||||
|
1160 GOTO 830
|
||||||
|
1170 B=50*B
|
||||||
|
1180 PRINT "AFTER ALL YOUR PURCHASES, YOU NOW HAVE ";T;" DOLLARS LEFT"
|
||||||
|
1190 PRINT
|
||||||
|
1200 PRINT "MONDAY MARCH 29 1847"
|
||||||
|
1210 PRINT
|
||||||
|
1220 GOTO 1750
|
||||||
|
1230 IF M >= 2040 THEN 5430
|
||||||
|
|
||||||
|
1240 REM ***SETTING DATE***
|
||||||
|
1250 D3=D3+1
|
||||||
|
1260 PRINT
|
||||||
|
1270 PRINT "MONDAY ";
|
||||||
|
1280 IF D3>10 THEN 1300
|
||||||
|
1290 ON D3 GOTO 1310, 1330, 1350, 1370, 1390, 1410, 1430, 1450, 1470, 1490
|
||||||
|
1300 ON D3-10 GOTO 1510, 1530, 1550, 1570, 1590, 1610, 1630, 1650, 1670, 1690
|
||||||
|
1310 PRINT "APRIL 12 ";
|
||||||
|
1320 GOTO 1720
|
||||||
|
1330 PRINT "APRIL 26 ";
|
||||||
|
1340 GOTO 1720
|
||||||
|
1350 PRINT "MAY 10 ";
|
||||||
|
1360 GOTO 1720
|
||||||
|
1370 PRINT "MAY 24 ";
|
||||||
|
1380 GOTO 1720
|
||||||
|
1390 PRINT "JUNE 7 ";
|
||||||
|
1400 GOTO 1720
|
||||||
|
1410 PRINT "JUNE 21 ";
|
||||||
|
1420 GOTO 1720
|
||||||
|
1430 PRINT "JULY 5 ";
|
||||||
|
1440 GOTO 1720
|
||||||
|
1450 PRINT "JULY 19 ";
|
||||||
|
1460 GOTO 1720
|
||||||
|
1470 PRINT "AUGUST 2 ";
|
||||||
|
1480 GOTO 1720
|
||||||
|
1490 PRINT "AUGUST 16 ";
|
||||||
|
1500 GOTO 1720
|
||||||
|
1510 PRINT "AUGUST 31 ";
|
||||||
|
1520 GOTO 1720
|
||||||
|
1530 PRINT "SEPTEMBER 13 ";
|
||||||
|
1540 GOTO 1720
|
||||||
|
1550 PRINT "SEPTEMBER 27 ";
|
||||||
|
1560 GOTO 1720
|
||||||
|
1570 PRINT "OCTOBER 11 ";
|
||||||
|
1580 GOTO 1720
|
||||||
|
1590 PRINT "OCTOBER 25 ";
|
||||||
|
1600 GOTO 1720
|
||||||
|
1610 PRINT "NOVEMBER 8 ";
|
||||||
|
1620 GOTO 1720
|
||||||
|
1630 PRINT "NOVEMBER 22 ";
|
||||||
|
1640 GOTO 1720
|
||||||
|
1650 PRINT "DECEMBER 6 ";
|
||||||
|
1660 GOTO 1720
|
||||||
|
1670 PRINT "DECEMBER 20 ";
|
||||||
|
1680 GOTO 1720
|
||||||
|
1690 PRINT "YOU HAVE BEEN ON THE TRAIL TOO LONG ------"
|
||||||
|
1700 PRINT "YOUR FAMILY DIES IN THE FIRST BLIZZARD OF WINTER"
|
||||||
|
1710 GOTO 5170
|
||||||
|
1720 PRINT "1847"
|
||||||
|
1730 PRINT
|
||||||
|
|
||||||
|
1740 REM ***BEGINNING EACH TURN***
|
||||||
|
1750 IF F >= 0 THEN 1770
|
||||||
|
1760 F=0
|
||||||
|
1770 IF B >= 0 THEN 1790
|
||||||
|
1780 B=0
|
||||||
|
1790 IF C >= 0 THEN 1810
|
||||||
|
1800 C=0
|
||||||
|
1810 IF M1 >= 0 THEN 1830
|
||||||
|
1820 M1=0
|
||||||
|
1830 IF F >= 13 THEN 1850
|
||||||
|
1840 PRINT "YOU'D BETTER DO SOME HUNTING OR BUY FOOD AND SOON!!!!"
|
||||||
|
1850 F=INT(F)
|
||||||
|
1860 B=INT(B)
|
||||||
|
1870 C=INT(C)
|
||||||
|
1880 M1=INT(M1)
|
||||||
|
1890 T=INT(T)
|
||||||
|
1900 M=INT(M)
|
||||||
|
1910 M2=M
|
||||||
|
1920 IF S4=1 THEN 1950
|
||||||
|
1930 IF K8=1 THEN 1950
|
||||||
|
1940 GOTO 1990
|
||||||
|
1950 T=T-20
|
||||||
|
1960 IF T<0 THEN 5080
|
||||||
|
1970 PRINT "DOCTOR'S BILL IS $20"
|
||||||
|
1980 LET K8=S4=0
|
||||||
|
1990 IF M9=1 THEN 2020
|
||||||
|
2000 PRINT "TOTAL MILEAGE IS";M
|
||||||
|
2010 GOTO 2040
|
||||||
|
2020 PRINT "TOTAL MILEAGE IS 950"
|
||||||
|
2030 M9=0
|
||||||
|
2040 PRINT "FOOD","BULLETS","CLOTHING","MISC. SUPP.","CASH"
|
||||||
|
2050 PRINT F, B, C, M1, T
|
||||||
|
2060 IF X1=-1 THEN 2170
|
||||||
|
2070 X1=X1*(-1)
|
||||||
|
|
||||||
|
2080 PRINT "DO YOU WANT TO (1) STOP AT THE NEXT FORT, (2) HUNT, ";
|
||||||
|
2090 PRINT "OR (3) CONTINUE"
|
||||||
|
2100 INPUT X
|
||||||
|
2110 IF X>2 THEN 2150
|
||||||
|
2120 IF X<1 THEN 2150
|
||||||
|
2130 LET X=INT(X)
|
||||||
|
2140 GOTO 2270
|
||||||
|
2150 LET X=3
|
||||||
|
2160 GOTO 2270
|
||||||
|
|
||||||
|
2170 PRINT "DO YOU WANT TO (1) HUNT, OR (2) CONTINUE"
|
||||||
|
2180 INPUT X
|
||||||
|
2190 IF X=l THEN 2210
|
||||||
|
2200 LET X=2
|
||||||
|
2210 LET X=X+1
|
||||||
|
2220 IF X=3 THEN 2260
|
||||||
|
2230 IF B>39 THEN 2260
|
||||||
|
2240 PRINT "TOUGH YOU NEED MORE BULLETS TO GO HUNTING"
|
||||||
|
2250 GOTO 2170
|
||||||
|
2260 X1=X1*(-1)
|
||||||
|
2270 ON X GOTO 2290,2540,2720
|
||||||
|
|
||||||
|
2280 REM ***STOPPING AT FORT***
|
||||||
|
2290 PRINT "ENTER WHAT YOU WISH TO SPEND ON THE FOLLOWING"
|
||||||
|
2300 PRINT "F00D";
|
||||||
|
2310 GOSUB 2330
|
||||||
|
2320 GOTO 2410
|
||||||
|
2330 INPUT P
|
||||||
|
2340 IF P<0 THEN 2400
|
||||||
|
2350 T=T-P
|
||||||
|
2360 IF T >= 0 THEN 2400
|
||||||
|
2370 PRINT "YOU DON'T HAVE THAT MUCH--KEEP YOUR SPENDING DOWN"
|
||||||
|
2375 PRINT "YOU MISS YOUR CHANCE TO SPEND ON THAT ITEM"
|
||||||
|
2380 T=T+P
|
||||||
|
2390 P=0
|
||||||
|
2400 RETURN
|
||||||
|
2410 F=F+2/3*P
|
||||||
|
2420 PRINT "AMMUNITION";
|
||||||
|
2430 GOSUB 2330
|
||||||
|
2440 LET B=INT(B+2/3*P*50)
|
||||||
|
2450 PRINT "CLOTHING";
|
||||||
|
2460 GOSUB 2330
|
||||||
|
2470 C=C+2/3*P
|
||||||
|
2480 PRINT "MISCELLANEOUS SUPPLIES";
|
||||||
|
2490 GOSUB 2330
|
||||||
|
2500 M1=M1+2/3*P
|
||||||
|
2510 M=M-45
|
||||||
|
2520 GOTO 2720
|
||||||
|
|
||||||
|
2530 REM ***HUNTING***
|
||||||
|
2540 IF B>39 THEN 2570
|
||||||
|
2550 PRINT "TOUGH---YOU NEED M0RE BULLETS TO GO HUNTING"
|
||||||
|
2560 GOTO 2080
|
||||||
|
2570 M=M-45
|
||||||
|
2580 GOSUB 6140
|
||||||
|
2590 IF B1 <= 1 THEN 2660
|
||||||
|
2600 IF 100*RND(-1)<13*B1 THEN 2710
|
||||||
|
2610 F=F+48-2*B1
|
||||||
|
2620 PRINT "NICE SHOT--RIGHT ON TARGET--GOOD EATIN' TONIGHT!!"
|
||||||
|
2630 B=B-10-3*B1
|
||||||
|
2640 GOTO 2720
|
||||||
|
|
||||||
|
2650 REM **BELLS IN LINE 2660**
|
||||||
|
2660 PRINT "RIGHT BETWEEN THE EYES---YOU GOT A BIG ONE!!!!"
|
||||||
|
2670 PRINT "FULL BELLIES TONIGHT!"
|
||||||
|
2680 F=F+52+RND(-1)*6
|
||||||
|
2690 B=B-10-RND(-1)*4
|
||||||
|
2700 GOTO 2720
|
||||||
|
2710 PRINT "YOU MISSED---AND YOUR DINNER GOT AWAY....."
|
||||||
|
2720 IF F >= 13 THEN 2750
|
||||||
|
2730 GOTO 5060
|
||||||
|
|
||||||
|
2740 REM ***EATING***
|
||||||
|
2750 PRINT "DO YOU WANT TO EAT (1) POORLY (2) MODERATELY"
|
||||||
|
2760 PRINT "OR (3) WELL";
|
||||||
|
2770 INPUT E
|
||||||
|
2780 IF E>3 THEN 2750
|
||||||
|
2790 If E<1 THEN 2750
|
||||||
|
2800 LET E=INT(E)
|
||||||
|
2810 LET F=F-8-5*E
|
||||||
|
2820 IF F >= 0 THEN 2860
|
||||||
|
2830 F=F+8+5*E
|
||||||
|
2840 PRINT "YOU CAN'T EAT THAT WELL"
|
||||||
|
2850 GOTO 2750
|
||||||
|
2860 LET M=M+200+(A-220)/5+10*RND(-1)
|
||||||
|
2870 L1=C1=0
|
||||||
|
|
||||||
|
2880 REM ***RIDERS ATTACK***
|
||||||
|
2890 IF RND(-1)*10>((M/100-4)^2+72)/((M/100-4)^2+12)-1 THEN 3550
|
||||||
|
2900 PRINT "RIDERS AHEAD. THEY ";
|
||||||
|
2910 S5=0
|
||||||
|
2920 IF RND(-1)<.8 THEN 2950
|
||||||
|
2930 PRINT "DON'T ";
|
||||||
|
2940 S5=1
|
||||||
|
2950 PRINT "LOOK HOSTILE"
|
||||||
|
2960 PRINT "TACTICS"
|
||||||
|
2970 PRINT "(1) RUN (2) ATTACK (3) CONTINUE (4) CIRCLE WAGONS"
|
||||||
|
2980 IF RND(-1)>.2 THEN 3000
|
||||||
|
2990 S5=1-S5
|
||||||
|
3000 INPUT T1
|
||||||
|
3010 IF T1<1 THEN 2970
|
||||||
|
3020 IF T1>4 THEN 2970
|
||||||
|
3030 T1=INT(T1)
|
||||||
|
3040 IF S5=1 THEN 3330
|
||||||
|
3050 IF T1>1 THEN 3110
|
||||||
|
3060 M=M+20
|
||||||
|
3070 M1=M1-15
|
||||||
|
3080 B=B-150
|
||||||
|
3090 A=A-40
|
||||||
|
3100 GOTO 3470
|
||||||
|
3110 IF T1>2 THEN 3240
|
||||||
|
3120 GOSUB 6140
|
||||||
|
3130 B=B-B1*40-80
|
||||||
|
3140 IF B1>1 THEN 3170
|
||||||
|
3150 PRINT "NICE SHOOTING---YOU DROVE THEM OFF"
|
||||||
|
3160 GOTO 3470
|
||||||
|
3170 IF B1 <= 4 THEN 3220
|
||||||
|
3180 PRINT "LOUSY SHOT---YOU GOT KNIFED"
|
||||||
|
3190 K8=1
|
||||||
|
3200 PRINT "YOU HAVE TO SEE OL' DOC BLANCHARD"
|
||||||
|
3210 GOTO 3470
|
||||||
|
3220 PRINT "KINDA SLOW WITH YOUR COLT .45"
|
||||||
|
3230 GOTO 3470
|
||||||
|
3240 IF T1>3 THEN 3290
|
||||||
|
3250 IF RND(-1)>.8 THEN 3450
|
||||||
|
3260 LET B=B-150
|
||||||
|
3270 M1=M1-15
|
||||||
|
3280 GOTO 3470
|
||||||
|
3290 GOSUB 6140
|
||||||
|
3300 B=B-B1*30-80
|
||||||
|
3310 M=M-25
|
||||||
|
3320 GOTO 3140
|
||||||
|
3330 IF T1>1 THEN 3370
|
||||||
|
3340 M=M+15
|
||||||
|
3350 A=A-10
|
||||||
|
3360 GOTO 3470
|
||||||
|
3370 IF T1>2 THEN 3410
|
||||||
|
3380 M=M-5
|
||||||
|
3390 B=B-100
|
||||||
|
3400 GOTO 3470
|
||||||
|
3410 IF T1>3 THEN 3430
|
||||||
|
3420 GOTO 3470
|
||||||
|
3430 M=M-20
|
||||||
|
3440 GOTO 3470
|
||||||
|
3450 PRINT "THEY DID NOT ATTACK"
|
||||||
|
3460 GOTO 3550
|
||||||
|
3470 IF S5=0 THEN 3500
|
||||||
|
3480 PRINT "RIDERS WERE FRIENDLY, BUT CHECK FOR POSSIBLE LOSSES"
|
||||||
|
3490 GOTO 3550
|
||||||
|
3500 PRINT "RIDERS WERE HOSTILE--CHECK FOR LOSSES"
|
||||||
|
3510 IF B >= 0 THEN 3550
|
||||||
|
3520 PRINT "YOU RAN OUT OF BULLETS AND GOT MASSACRED BY THE RIDERS"
|
||||||
|
3530 GOTO 5170
|
||||||
|
|
||||||
|
3540 REM ***SELECTION OF EVENTS***
|
||||||
|
3550 LET D1=0
|
||||||
|
3560 RESTORE
|
||||||
|
3570 R1=100*RND(-1)
|
||||||
|
3580 LET D1=D1+1
|
||||||
|
3590 IF D1=16 THEN 4670
|
||||||
|
3600 READ D
|
||||||
|
3610 IF R1>D THEN 3580
|
||||||
|
3620 DATA 6, 11, 13, 15, 17, 22, 32, 35, 37, 42, 44, 54, 64, 69, 95
|
||||||
|
3630 IF D1>10 THEN 3650
|
||||||
|
3640 ON D1 GOTO 3660, 3700, 3740, 3790, 3820, 3850, 3880, 3960, 4130, 4190
|
||||||
|
3650 ON D1-10 GOTO 4220, 4290, 4340, 4560, 4610, 4670
|
||||||
|
3660 PRINT "WAGON BREAKS DOWN--LOSE TIME AND SUPPLIES FIXING IT"
|
||||||
|
3670 LET M=M-15-5*RND(-1)
|
||||||
|
3680 LET M1=M1-8
|
||||||
|
3690 GOTO 4710
|
||||||
|
3700 PRINT "OX INJURES LEG--SLOWS YOU DOWN REST OF TRIP"
|
||||||
|
3710 LET M=M-25
|
||||||
|
3720 LET A=A-20
|
||||||
|
3730 GOTO 4710
|
||||||
|
3740 PRINT "BAD LUCK--YOUR DAUGHTER BROKE HER ARM"
|
||||||
|
3750 PRINT "YOU HAD TO STOP AND USE SUPPLIES TO MAKE A SLING"
|
||||||
|
3760 M=M-5-4*RND(-1)
|
||||||
|
3770 M1=M1-2-3*RND(-1)
|
||||||
|
3780 GOTO 4710
|
||||||
|
3790 PRINT "OX WANDERS OFF--SPEND TIME LOOKING FOR IT"
|
||||||
|
3800 M=M-17
|
||||||
|
3810 GOTO 4710
|
||||||
|
3820 PRINT "YOUR SON GETS LOST---SPEND HALF THE DAY LOOKING FOR HIM"
|
||||||
|
3830 M=M-10
|
||||||
|
3840 GOTO 4710
|
||||||
|
3850 PRINT "UNSAFE WATER--LOSE TIME LOOKING FOR CLEAN SPRING"
|
||||||
|
3860 LET M=M-10*RND(-1)-2
|
||||||
|
3870 GOTO 4710
|
||||||
|
3880 IF M>950 THEN 4490
|
||||||
|
3890 PRINT "HEAVY RAINS---TIME AND SUPPLIES LOST"
|
||||||
|
3910 F=F-10
|
||||||
|
3920 B=B-500
|
||||||
|
3930 M1=M1-15
|
||||||
|
3940 M=M-10*RND(-1)-5
|
||||||
|
3950 GOTO 4710
|
||||||
|
3960 PRINT "BANDITS ATTACK"
|
||||||
|
3970 GOSUB 6140
|
||||||
|
3980 B=B-20*B1
|
||||||
|
3990 IF B >= 0 THEN 4030
|
||||||
|
4000 PRINT "YOU RAN OUT OF BULLETS---THEY GET LOTS OF CASH"
|
||||||
|
4010 T=T/3
|
||||||
|
4020 GOTO 4040
|
||||||
|
4030 IF B1 <= 1 THEN 4100
|
||||||
|
4040 PRINT "YOU GOT SHOT IN THE LEG AND THEY TOOK ONE OF YOUR OXEN"
|
||||||
|
4050 K8=1
|
||||||
|
4060 PRINT "BETTER HAVE A DOC LOOK AT YOUR WOUND"
|
||||||
|
4070 M1=M1-5
|
||||||
|
4080 A=A-20
|
||||||
|
4090 GOTO 4710
|
||||||
|
4100 PRINT "QUICKEST DRAW OUTSIDE OF DODGE CITY!!!"
|
||||||
|
4110 PRINT "YOU GOT 'EM!"
|
||||||
|
4120 GOTO 4710
|
||||||
|
4130 PRINT "THERE WAS A FIRE IN YOUR WAGON--FOOD AND SUPPLIES DAMAGE!"
|
||||||
|
4140 F=F-40
|
||||||
|
4150 B=B-400
|
||||||
|
4160 LET M1=M1-RND(-1)*8-3
|
||||||
|
4170 M=M-15
|
||||||
|
4180 GOTO 4710
|
||||||
|
4190 PRINT "LOSE YOUR WAY IN HEAVY FOG---TIME IS LOST"
|
||||||
|
4200 M=M-10-5*RND(-1)
|
||||||
|
4210 GOTO 4710
|
||||||
|
4220 PRINT "YOU KILLED A POISONOUS SNAKE AFTER IT BIT YOU"
|
||||||
|
4230 B=B-10
|
||||||
|
4240 M1=M1-5
|
||||||
|
4250 IF M1 >= 0 THEN 4280
|
||||||
|
4260 PRINT "YOU DIE OF SNAKEBITE SINCE YOU HAVE NO MEDICINE"
|
||||||
|
4270 GOTO 5170
|
||||||
|
4280 GOTO 4710
|
||||||
|
4290 PRINT "WAGON GETSE SWAMPED FORDING RIVER--LOSE FOOD AND CLOTHES"
|
||||||
|
4300 F=F-30
|
||||||
|
4310 C=C-20
|
||||||
|
4320 M=M-20-20*RND(-1)
|
||||||
|
4330 GOTO 4710
|
||||||
|
4340 PRINT "WILD ANIMALS ATTACK!"
|
||||||
|
4350 GOSUB 6140
|
||||||
|
4360 IF B>39 THEN 4410
|
||||||
|
4370 PRINT "YOU WERE TOO LOW ON BULLETS--"
|
||||||
|
4380 PRINT "THE WOLVES OVERPOWERED YOU"
|
||||||
|
4390 K8=1
|
||||||
|
4400 GOTO 5120
|
||||||
|
4410 IF B1>2 THEN 4440
|
||||||
|
4420 PRINT "NICE SHOOTIN' PARDNER---THEY DIDN'T GET MUCH"
|
||||||
|
4430 GOTO 4450
|
||||||
|
4440 PRINT "SLOW ON THE DRAW---THEY GOT AT YOUR FOOD AND CLOTHES"
|
||||||
|
4450 B=B-20*B1
|
||||||
|
4460 C=C-B1*4
|
||||||
|
4470 F=F-B1*8
|
||||||
|
4480 GOTO 4710
|
||||||
|
4490 PRINT "COLD WEATHER---BRRRRRRR!---YOU ";
|
||||||
|
4500 IF C>22+4*RND(-1) THEN 4530
|
||||||
|
4510 PRINT "DON'T ";
|
||||||
|
4520 C1=1
|
||||||
|
4530 PRINT "HAVE ENOUGH CLOTHING TO KEEP YOU WARM"
|
||||||
|
4540 IF C1=0 THEN 4710
|
||||||
|
4550 GOTO 6300
|
||||||
|
4560 PRINT "HAIL STORM---SUPPLIES DAMAGED"
|
||||||
|
4570 M=M-5-RND(-1)*10
|
||||||
|
4580 B=B-200
|
||||||
|
4590 M1=M1-4-RND(-1)*3
|
||||||
|
4600 GOTO 4710
|
||||||
|
4610 IF E=1 THEN 6300
|
||||||
|
4620 IF E=3 THEN 4650
|
||||||
|
4630 IF RND(-1)>.25 THEN 6300
|
||||||
|
4640 GOTO 4710
|
||||||
|
4650 IF RND(-1)<.5 THEN 6300
|
||||||
|
4660 GOTO 4710
|
||||||
|
4670 PRINT "HELPFUL INDIANS SHOW YOU WERE TO FIND MORE FOOD"
|
||||||
|
4680 F=F+I4
|
||||||
|
4690 GOTO 4710
|
||||||
|
|
||||||
|
4700 REM ***MOUNTAINS***
|
||||||
|
4710 IF H <= 950 THEN 1230
|
||||||
|
4720 IF RND(-1)*10>9-((M/100-15)^2+72)/((M/100-15)^2+12) THEN 4860
|
||||||
|
4730 PRINT "RUGGED MOUNTAINS"
|
||||||
|
4740 IF RND(-1)>.1 THEN 4780
|
||||||
|
4750 PRINT "YOU GOT LOST---LOSE VALUABLE TIME TRYING TO FIND TRAIL!"
|
||||||
|
4760 M=M-60
|
||||||
|
4770 GOTO 4860
|
||||||
|
4780 IF RND(-1)>.11 THEN 4840
|
||||||
|
4790 PRINT "WAGON DAMAGED!—LOSE TIME AND SUPPLIES"
|
||||||
|
4800 MI=M1-5
|
||||||
|
4810 B=B-200
|
||||||
|
4820 M=M-20-30*RND(-1)
|
||||||
|
4830 GOTO 4860
|
||||||
|
4840 PRINT "THE GOING GETS SLOW"
|
||||||
|
4850 M=M-45-RND(-1)/.02
|
||||||
|
4860 IF F1=1 THEN 4900
|
||||||
|
4870 F1=1
|
||||||
|
4880 IF RND(-1)<.8 THEN 4970
|
||||||
|
4890 PRINT "YOU MADE IT SAFELY THROUGH SOUTH PASS--NO SNOW"
|
||||||
|
4900 IF M<1700 THEN 4940
|
||||||
|
4910 IF F2=1 THEN 4940
|
||||||
|
4920 F2=1
|
||||||
|
4930 IF RND(-1)<.7 THEN 4970
|
||||||
|
4940 IF M>950 THEN 1230
|
||||||
|
4950 M9=1
|
||||||
|
4960 GOTO 1230
|
||||||
|
4970 PRINT "BLIZZARD IN MOUNTAIN PASS--TIME AND SUPPLIES LOST"
|
||||||
|
4980 L1=1
|
||||||
|
4990 F=F-25
|
||||||
|
5000 M1=M1-10
|
||||||
|
5010 B=B-300
|
||||||
|
5020 M=M-30-40*RND(-1)
|
||||||
|
5030 IF C<18+2*RND(-1) THEN 6300
|
||||||
|
5040 GOTO 4940
|
||||||
|
|
||||||
|
5050 REM ***DYING***
|
||||||
|
5060 PRINT "YOU RAN OUT OF FOOD AND STARVED TO DEATH"
|
||||||
|
5070 GOTO 5170
|
||||||
|
5080 LET T=0
|
||||||
|
5090 PRINT "YOU CAN'T AFFORD A DOCTOR"
|
||||||
|
5100 GOTO 5120
|
||||||
|
5110 PRINT "YOU RAN OUT OF MEDICAL SUPPLIES"
|
||||||
|
5120 PRINT "YOU DIED OF ";
|
||||||
|
5130 IF K8=1 THEN 5160
|
||||||
|
5140 PRINT "PNEUMONIA"
|
||||||
|
5150 GOTO 5170
|
||||||
|
5160 PRINT "INJURIES"
|
||||||
|
5170 PRINT
|
||||||
|
5180 PRINT "DUE TO YOUR UNFORTUNATE SITUATION, THERE ARE A FEW"
|
||||||
|
5190 PRINT "FORMALITIES WE MUST GO THROUGH"
|
||||||
|
5200 PRINT
|
||||||
|
5210 PRINT "WOULD YOU LIKE A MINISTER?"
|
||||||
|
5220 INPUT CS
|
||||||
|
5230 PRINT "WOULD YOU LIKE A FANCY FUNERAL?"
|
||||||
|
5240 INPUT CS
|
||||||
|
5250 PRINT "WOULD YOU LIKE US TO INFORM YOUR NEXT OF KIN?"
|
||||||
|
5260 INPUT CS
|
||||||
|
5270 IF CS="YES" THEN GOTO 5310
|
||||||
|
5280 PRINT "BUT YOUR AUNT SADIE IN ST. LOUIS IS REALLY WORRIED ABOUT YOU"
|
||||||
|
8290 PRINT
|
||||||
|
8300 GOTO 5330
|
||||||
|
5310 PRINT "THAT WILL BE $4.50 FOR THE TELEGRAPH CHARGE."
|
||||||
|
5320 PRINT
|
||||||
|
5330 PRINT "WE THANK YOU FOR THIS INFORMATION AND WE ARE SORRY YOU"
|
||||||
|
5340 PRINT "DIDN'T MAKE IT TO THE GREAT TERRITORY OF OREGON"
|
||||||
|
5350 PRINT "BETTER LUCK NEXT TIME"
|
||||||
|
5360 PRINT
|
||||||
|
5370 PRINT
|
||||||
|
5380 PRINT TAB(30);"SINCERELY"
|
||||||
|
5390 PRINT
|
||||||
|
5400 PRINT TAB(17);"THE OREGON CITY CHAMBER OF COMMERCE"
|
||||||
|
5410 STOP
|
||||||
|
|
||||||
|
5420 REM ***FINAL TURN***
|
||||||
|
5430 F9=(2040-M2)/(M-M2)
|
||||||
|
5440 F=F+(1-F9)*(8*5*E)
|
||||||
|
5450 PRINT
|
||||||
|
|
||||||
|
5460 REM **BELLS IN LINES 5470, 5480**
|
||||||
|
5470 PRINT "YOU FINALLY ARRIVED AT OREGON CITY"
|
||||||
|
5480 PRINT "AFTER 2040 LONG MILES---HOORAY !!!!!"
|
||||||
|
5490 PRINT "A REAL PIONEER!"
|
||||||
|
5500 PRINT
|
||||||
|
5510 F9=INT(F9*14)
|
||||||
|
5520 D3=D3*I4+F9
|
||||||
|
5530 F9=F9+1
|
||||||
|
5540 IF F9<8 THEN 5560
|
||||||
|
5550 F9=F9-7
|
||||||
|
5560 ON F9 GOTO 5570,5590,5630,5650,5670,5690
|
||||||
|
5570 PRINT "MONDAY ";
|
||||||
|
5580 GOTO 5700
|
||||||
|
5590 PRINT "TUESDAY ";
|
||||||
|
5600 GOTO 5700
|
||||||
|
5610 PRINT "WEDNESDAY ";
|
||||||
|
5620 GOTO 5700
|
||||||
|
5630 PRINT "THURSDAY ";
|
||||||
|
5640 GOTO 5700
|
||||||
|
5650 PRINT "FRIDAY ";
|
||||||
|
5660 GOTO 5700
|
||||||
|
5670 PRINT "SATURDAY ";
|
||||||
|
5680 GOTO 5700
|
||||||
|
5690 PRINT "SUNDAY ";
|
||||||
|
5700 IF D3>124 THEN 5740
|
||||||
|
5710 D3=D3-93
|
||||||
|
5720 PRINT "JULY ";D3;" 1847"
|
||||||
|
5730 GOTO 5920
|
||||||
|
5740 IF D3>155 THEN 5780
|
||||||
|
5750 D3=D3-124
|
||||||
|
5760 PRINT "AUGUST ";D3;" 1847"
|
||||||
|
5770 GOTO 5920
|
||||||
|
5780 IF D3>155 THEN 5820
|
||||||
|
5790 D3=D3-155
|
||||||
|
5800 PRINT "SEPTEMBER ";D3;" 1847"
|
||||||
|
5810 GOTO 5920
|
||||||
|
5820 IF D3>216 THEN 5860
|
||||||
|
5830 D3=D3-155
|
||||||
|
5840 PRINT "OCTOBER ";D3;" 1847"
|
||||||
|
5850 GOTO 5920
|
||||||
|
5860 IF D3>246 THEN 5900
|
||||||
|
5870 D3=D3-246
|
||||||
|
5880 PRINT "NOVEMBER ";D3;" 1847"
|
||||||
|
5890 GOTO 5920
|
||||||
|
5900 D3=D3-246
|
||||||
|
5910 PRINT "DECEMBER ";D3;" 1847"
|
||||||
|
5920 PRINT
|
||||||
|
5930 PRINT "FOOD","BULLETS","CLOTHING","MISC. SUPP.","CASH"
|
||||||
|
5940 IF B>0 THEN 5960
|
||||||
|
5950 LET B=0
|
||||||
|
5960 IF C>0 THEN 5980
|
||||||
|
5970 LET C=0
|
||||||
|
5980 IF M1>0 THEN 6000
|
||||||
|
5990 LET M1=0
|
||||||
|
6000 IF T>0 THEN 6020
|
||||||
|
6010 LET T=0
|
||||||
|
6020 IF F>0 THEN 6040
|
||||||
|
6030 LET F=0
|
||||||
|
6040 PRINT INT(F),INT(B),INT(C),INT(M1),INT(T)
|
||||||
|
6050 PRINT
|
||||||
|
6060 PRINT TAB(11); "PRESIDENT JAMES K. POLK SENDS YOU HIS"
|
||||||
|
6070 PRINT TAB(17); "HEARTIEST CONGRATULATIONS"
|
||||||
|
6080 PRINT
|
||||||
|
6090 PRINT TAB(11);"AND WISHES YOU A PROSPEROUS LIFE AHEAD"
|
||||||
|
6100 PRINT
|
||||||
|
6110 PRINT TAB(22);"AT YOUR NEW HOME"
|
||||||
|
6120 STOP
|
||||||
|
|
||||||
|
6130 REM ***SHOOTING SUB-ROUTINE***
|
||||||
|
6131 REM THE METHOD OF TIMING THE SHOOTING
|
||||||
|
6132 REM WILL VARY FROM SYSTEM TO SYSTEM.
|
||||||
|
6133 REM USERS WILL PROBABLY PREFER TO USE
|
||||||
|
6134 REM IF TIMING ON THE USER'S SYSTEM IS HIGHLY SUSCEPTIBLE
|
||||||
|
6135 REM TO SYSTEM RESPONSE TIME, THE FORMULA IN LINE 6240 CAN
|
||||||
|
6136 REM BE TAILORED TO ACCOMODATE THIS BY EITHER INCREASING
|
||||||
|
6137 REM OR DECREASING THE 'SHOOTING' TIME RECORDED BY THE SYSTEM.
|
||||||
|
6140 DIM SS(5) AS STRING
|
||||||
|
6150 SS(1)="BANG"
|
||||||
|
6160 SS(2)="BLAM"
|
||||||
|
6170 SS(3)="P0W"
|
||||||
|
6180 SS(4)="WHAM"
|
||||||
|
6190 S6=INT(RND(-1)*4+1)
|
||||||
|
6200 PRINT "TYPE "; SS(S6)
|
||||||
|
'6210 B3 = CLK(0)
|
||||||
|
6220 INPUT CS
|
||||||
|
'6230 B1 = CLK(0)
|
||||||
|
6240 B1=((B1-B3)*3600)-(D9-1)
|
||||||
|
6250 PRINT
|
||||||
|
6255 IF B1>0 THEN 6260
|
||||||
|
6257 B1=0
|
||||||
|
6260 IF CS=SS(S6) THEN GOTO 6280
|
||||||
|
6270 B1=9
|
||||||
|
6280 RETURN
|
||||||
|
|
||||||
|
6290 REM ***ILLNESS SUB-ROUTINE***
|
||||||
|
6300 IF 100*RND(-1)<10+35*(E-1) THEN GOTO 6370
|
||||||
|
6310 IF 100*RND(-1)<100-(40/4^(E-1)) THEN GOTO 6410
|
||||||
|
6320 PRINT "SERIOUS ILLNESS"
|
||||||
|
6330 PRINT "YOU MUST STOP FOR MEDICAL ATTENTION"
|
||||||
|
6340 M1=M1-10
|
||||||
|
6350 S4=1
|
||||||
|
6360 GOTO 6440
|
||||||
|
6370 PRINT "MILD ILLNESS---MEDICINE USED"
|
||||||
|
6380 M=M-5
|
||||||
|
6390 M1=M1-2
|
||||||
|
6400 GOTO 6440
|
||||||
|
6410 PRINT "BAD ILLNESS---MEDICINE USED"
|
||||||
|
6420 M=M-5
|
||||||
|
6430 M1=M1-5
|
||||||
|
6440 IF M1<0 THEN 5110
|
||||||
|
6450 IF L1=1 THEN 4940
|
||||||
|
6460 GOTO 4710
|
||||||
|
|
||||||
|
6470 REM ***IDENDIFICATION OF VARIABLES IN THE PROGRAM***
|
||||||
|
6480 REM A = AMOUNT SPENT ON ANIMALS
|
||||||
|
6490 REM B = AMOUNT SPENT ON AMMUNITION
|
||||||
|
6500 REM B1 = ACTUAL RESPONSE TIME FOR INPUTTING "BANG"
|
||||||
|
6510 REM B3 = CLOCK TIME AT START OF INPUTTING "BANG"
|
||||||
|
6520 REM C = AMOUNT SPENT ON CLOTHING
|
||||||
|
6530 REM C1 = FLAG FOR INSUFFICIENT CLOTHING IN COLD WEATHER
|
||||||
|
6540 REM CS = YES/NO RESPONSE TO QUESTIONS
|
||||||
|
6550 REM D1 = COUNTER IN GENERATING EVENTS
|
||||||
|
6560 REM D3 = TURN NUMBER FOR SETTING DATE
|
||||||
|
6570 REM D4 = CURRENT DATE
|
||||||
|
6580 REM D9 = CHOICE OF SHOOTING EXPERTISE LEVEL
|
||||||
|
6590 REM E = CHOICE OF EATING
|
||||||
|
6600 REM F = AMOUNT SPENT ON FOOD
|
||||||
|
6610 REM F1 = FLAG FOR CLEARING SOUTH PASS
|
||||||
|
6620 REM F2 = FLAG FOR CLEARING BLUE MOUNTAINS
|
||||||
|
6630 REM F9 = FRACTION OF 2 WEEKS TRAVELED ON FINAL TURN
|
||||||
|
6640 REM K8 = FLAG FOR INJURY
|
||||||
|
6650 REM L1 = FLAG FOR BLIZZARD
|
||||||
|
6660 REM M =TOTAL MILEAGE WHOLE TRIP
|
||||||
|
6670 REM M1 = AMOUNT SPENT ON MISCELLANEOUS SUPPLIES
|
||||||
|
6680 REM M2 = TOTAL MILEAGE UP THROUGH PREVIOUS TURN
|
||||||
|
6690 REM M9 = FLAG FOR CLEARING SOUTH PASS IN SETTING MILEAGE
|
||||||
|
6700 REM P = AMOUNT SPENT ON ITEMS AT FORT
|
||||||
|
6710 REM R1 = RANDOM NUMBER IN CHOOSING EVENTS
|
||||||
|
6720 REM S4 = FLAG FOR ILLNESS
|
||||||
|
6730 REM S5 = ""HOSTILITY OF RIDERS"" FACTOR
|
||||||
|
6740 REM S6 = SHOOTING WORD SELECTOR
|
||||||
|
6750 REM SS = VARIATIONS OF SHOOTING WORD
|
||||||
|
6760 REM T = CASH LEFT OVER AFTER INITIAL PURCHASES
|
||||||
|
6770 REM T1 = CHOICE OF TACTICS WHEN ATTACKED
|
||||||
|
6780 REM X = CHOICE OF ACTION FOR EACH TURN
|
||||||
|
6790 REM X1 = FLAG FOR FORT OPTION
|
||||||
|
END
|
|
@ -0,0 +1,717 @@
|
||||||
|
' FreeBASIC port of Oregon Trail
|
||||||
|
' ------------------------------
|
||||||
|
'
|
||||||
|
' The program that follows is a reconstruction
|
||||||
|
' of the Oregon Trail game written for HP time-shared
|
||||||
|
' BASIC by Don Rawitsch and Bill Heinemann and Paul Dillenberger
|
||||||
|
' in 1971. Its source is an updated version published in the
|
||||||
|
' July-August 1978 issue of Creative Computing.
|
||||||
|
'
|
||||||
|
|
||||||
|
10 REM PROGRAM NAME - 0REGON VERSION:01/01/78
|
||||||
|
20 REM ORIGINAL PROGRAMMING BY BILL HEINEMANN - 1971
|
||||||
|
30 REM SUPPORT RESEARCH AND MATERIALS BY DON RAVITSCH
|
||||||
|
40 REM MINNESOTA EDUCATIONAL COMPUTING CONSORTIUM STAFF
|
||||||
|
50 REM CDC CYBER 70/73-26 BASIC 3-1
|
||||||
|
60 REM DOCUMENTATION BOOKLET 'OREGON' AVAILABLE FROM
|
||||||
|
61 REM MECC SUPPORT SERVICES
|
||||||
|
62 REM 2520 BROADWAY DRIVE
|
||||||
|
63 REM ST. PAUL, MN 55113
|
||||||
|
80 REM
|
||||||
|
150 REM *FOR THE MEANING OF THE VARIABLES USED, LIST LINES 6470-6790*
|
||||||
|
155 REM
|
||||||
|
|
||||||
|
160 PRINT "DO YOU NEED INSTRUCTIONS (YES/NO)";
|
||||||
|
170 DIM yesNoResponseToQuestions AS STRING
|
||||||
|
180 REM RANDOMIZE REMOVED
|
||||||
|
190 INPUT yesNoResponseToQuestions
|
||||||
|
200 IF yesNoResponseToQuestions="NO" THEN 690
|
||||||
|
210 PRINT
|
||||||
|
220 PRINT
|
||||||
|
|
||||||
|
230 REM ***INSTRUCTIONS***
|
||||||
|
240 PRINT "THIS PROGRAM SIMULATES A TRIP OVER THE OREGON TRAIL FROM"
|
||||||
|
250 PRINT "INDEPENDENCE, MISSOURI TO OREGON CITY, OREGON IN 1847."
|
||||||
|
260 PRINT "YOUR FAMILY OF FIVE WILL COVER THE 2040 MILE OREGON TRAIL"
|
||||||
|
270 PRINT "IN 5-6 MONTHS --- IF YOU MAKE IT ALIVE."
|
||||||
|
280 PRINT
|
||||||
|
290 PRINT "YOU HAD SAVED $900 TO SPEND FOR THE TRIP, AND YOU'VE JUST"
|
||||||
|
300 PRINT " PAID $200 FOR A WAGON ."
|
||||||
|
310 PRINT "YOU WILL NEED TO SPEND THE REST OF YOUR MONEY ON THE"
|
||||||
|
320 PRINT " FOLLOWING ITEMS:"
|
||||||
|
330 PRINT
|
||||||
|
340 PRINT " OXEN - YOU CAN SPEND $200-$300 ON YOUR TEAM"
|
||||||
|
350 PRINT " THE MORE YOU SPEND, THE FASTER YOU'LL GO"
|
||||||
|
360 PRINT " BECAUSE YOU'LL HAVE BETTER ANIMALS"
|
||||||
|
370 PRINT
|
||||||
|
380 PRINT " FOOD - THE MORE YOU HAVE, THE LESS CHANCE THERE"
|
||||||
|
390 PRINT " IS OF GETTING SICK"
|
||||||
|
400 PRINT
|
||||||
|
410 PRINT " AMMUNITION - $1 BUYS A BELT OF 50 BULLETS"
|
||||||
|
420 PRINT " YOU WILL NEED BULLETS FOR ATTACKS BY ANIMALS"
|
||||||
|
430 PRINT " AND BANDITS, AND FOR HUNTING FOOD"
|
||||||
|
440 PRINT
|
||||||
|
450 PRINT " CLOTHING - THIS IS ESPECIALLY IMPORTANT FOR THE COLD"
|
||||||
|
460 PRINT " WEATHER YOU WILL ENCOUNTER WHEN CROSSING"
|
||||||
|
470 PRINT " THE MOUNTAINS"
|
||||||
|
480 PRINT
|
||||||
|
490 PRINT " MISCELLANEOUS SUPPLIES - THIS INCLUDES MEDICINE AND"
|
||||||
|
500 PRINT " OTHER THINGS YOU WILL NEED FOR SICKNESS"
|
||||||
|
510 PRINT " AND EMERGENCY REPAIRS"
|
||||||
|
520 PRINT
|
||||||
|
530 PRINT
|
||||||
|
540 PRINT "YOU CAN SPEND ALL YOUR MONEY BEFORE YOU START YOUR TRIP -"
|
||||||
|
550 PRINT "OR YOU CAN SAVE SOME OF YOUR CASH TO SPEND AT FORTS ALONG"
|
||||||
|
560 PRINT "THE WAY WHEN YOU RUN LOW. H0WEVER, ITEMS COST MORE AT"
|
||||||
|
570 PRINT "THE FORTS. YOU CAN ALSO GO HUNTING ALONG THE WAY TO GET"
|
||||||
|
580 PRINT "MORE FOOD."
|
||||||
|
590 PRINT "WHENEVER YOU HAVE TO USE YOUR TRUSTY RIFLE ALONG THE WAY,"
|
||||||
|
600 PRINT "YOU WILL BE TOLD TO TYPE IN A WORD (ONE THAT SOUNDS LIKE A"
|
||||||
|
610 PRINT "GUN SHOT). THE FASTER YOU TYPE IN THAT WORD AND HIT THE"
|
||||||
|
620 PRINT """RETURN"" KEY, THE BETTER LUCK YOU'LL HAVE WITH YOUR GUN."
|
||||||
|
630 PRINT
|
||||||
|
640 PRINT "AT EACH TURN, ALL ITEMS ARE SHOWN IN DOLLAR AMOUNTS"
|
||||||
|
650 PRINT "EXCEPT BULLETS"
|
||||||
|
660 PRINT "WHEN ASKED TO ENTER MONEY AMOUNTS, DON'T USE A ""$""."
|
||||||
|
670 PRINT
|
||||||
|
680 PRINT "GOOD LUCK!!!"
|
||||||
|
690 PRINT
|
||||||
|
700 PRINT
|
||||||
|
|
||||||
|
710 PRINT "HOW GOOD A SHOT ARE YOU WITH YOUR RIFLE?"
|
||||||
|
720 PRINT " (1) ACE MARKSMAN, (2) GOOD SHOT, (3) FAIR TO MIDDLIN'"
|
||||||
|
730 PRINT " (4) NEED MORE PRACTICE, (5) SHAKY KNEES"
|
||||||
|
740 PRINT "ENTER ONE OF THE ABOVE -- THE BETTER YOU CLAIM YOU ARE, THE"
|
||||||
|
750 PRINT "FASTER YOU'LL HAVE TO BE WITH YOUR GUN TO BE SUCCESSFUL."
|
||||||
|
760 INPUT shootingExpertiseLevelChoice
|
||||||
|
770 IF shootingExpertiseLevelChoice>5 THEN 790
|
||||||
|
780 GOTO 810
|
||||||
|
790 shootingExpertiseLevelChoice=0
|
||||||
|
|
||||||
|
800 REM *** INITIAL PURCHASES***
|
||||||
|
810 fortOptionFlag=-1
|
||||||
|
820 injuryFlag=illnessFlag=clearSouthPassFlag=clearBlueMountainsFlag=totalMileageWholeTrip=clearSouthPassMileageFlag =turnNumberForSettingDate=0
|
||||||
|
830 PRINT
|
||||||
|
840 PRINT
|
||||||
|
850 PRINT "HOW MUCH DO YOU WANT TO SPEND ON YOUR OXEN TEAM";
|
||||||
|
860 INPUT amountSpentOnAnimals
|
||||||
|
870 IF amountSpentOnAnimals >= 200 THEN 900
|
||||||
|
880 PRINT "NOT ENOUGH"
|
||||||
|
890 GOTO 850
|
||||||
|
900 IF amountSpentOnAnimals <= 300 THEN 930
|
||||||
|
910 PRINT "TOO MUCH"
|
||||||
|
920 GOTO 850
|
||||||
|
930 PRINT "HOW MUCH DO YOU WANT TO SPEND ON FOOD";
|
||||||
|
940 INPUT amountSpentOnFood
|
||||||
|
950 IF amountSpentOnFood >= 0 THEN 980
|
||||||
|
960 PRINT "IMPOSSIBLE"
|
||||||
|
970 GOTO 930
|
||||||
|
980 PRINT "HOW MUCH DO YOU WANT TO SPEND ON AMMUNITION";
|
||||||
|
990 INPUT amountSpentOnAmmunition
|
||||||
|
1000 IF amountSpentOnAmmunition >= 0 THEN 1030
|
||||||
|
1010 PRINT "IMPOSSIBLE"
|
||||||
|
1020 GOTO 980
|
||||||
|
1030 PRINT "HOW MUCH DO YOU WANT TO SPEND ON CLOTHING";
|
||||||
|
1040 INPUT amountSpentOnClothing
|
||||||
|
1050 IF amountSpentOnClothing >= 0 THEN 1080
|
||||||
|
1060 PRINT "IMPOSSIBLE"
|
||||||
|
1070 GOTO 1030
|
||||||
|
1080 PRINT "HOW MUCH DO YOU WANT TO SPEND ON MISCELLANEOUS SUPPLIES";
|
||||||
|
1090 INPUT amountSpentOnMiscellaneousSupplies
|
||||||
|
1100 IF amountSpentOnMiscellaneousSupplies >= 0 THEN 1130
|
||||||
|
1110 PRINT "IMPOSSIBLE"
|
||||||
|
1120 GOTO 1080
|
||||||
|
1130 cashLeftAfterInitialPurchases =700-amountSpentOnAnimals-amountSpentOnFood-amountSpentOnAmmunition-amountSpentOnClothing-amountSpentOnMiscellaneousSupplies
|
||||||
|
1140 IF cashLeftAfterInitialPurchases >= 0 THEN 1170
|
||||||
|
1150 PRINT "YOU OVERSPENT--YOU ONLY HAD $700 TO SPEND. BUY AGAIN."
|
||||||
|
1160 GOTO 830
|
||||||
|
1170 amountSpentOnAmmunition=50*amountSpentOnAmmunition
|
||||||
|
1180 PRINT "AFTER ALL YOUR PURCHASES, YOU NOW HAVE ";cashLeftAfterInitialPurchases ;" DOLLARS LEFT"
|
||||||
|
1190 PRINT
|
||||||
|
1200 PRINT "MONDAY MARCH 29 1847"
|
||||||
|
1210 PRINT
|
||||||
|
1220 GOTO 1750
|
||||||
|
1230 IF totalMileageWholeTrip >= 2040 THEN 5430
|
||||||
|
|
||||||
|
1240 REM ***SETTING DATE***
|
||||||
|
1250 turnNumberForSettingDate=turnNumberForSettingDate+1
|
||||||
|
1260 PRINT
|
||||||
|
1270 PRINT "MONDAY ";
|
||||||
|
1280 IF turnNumberForSettingDate>10 THEN 1300
|
||||||
|
1290 ON turnNumberForSettingDate GOTO 1310, 1330, 1350, 1370, 1390, 1410, 1430, 1450, 1470, 1490
|
||||||
|
1300 ON turnNumberForSettingDate-10 GOTO 1510, 1530, 1550, 1570, 1590, 1610, 1630, 1650, 1670, 1690
|
||||||
|
1310 PRINT "APRIL 12 ";
|
||||||
|
1320 GOTO 1720
|
||||||
|
1330 PRINT "APRIL 26 ";
|
||||||
|
1340 GOTO 1720
|
||||||
|
1350 PRINT "MAY 10 ";
|
||||||
|
1360 GOTO 1720
|
||||||
|
1370 PRINT "MAY 24 ";
|
||||||
|
1380 GOTO 1720
|
||||||
|
1390 PRINT "JUNE 7 ";
|
||||||
|
1400 GOTO 1720
|
||||||
|
1410 PRINT "JUNE 21 ";
|
||||||
|
1420 GOTO 1720
|
||||||
|
1430 PRINT "JULY 5 ";
|
||||||
|
1440 GOTO 1720
|
||||||
|
1450 PRINT "JULY 19 ";
|
||||||
|
1460 GOTO 1720
|
||||||
|
1470 PRINT "AUGUST 2 ";
|
||||||
|
1480 GOTO 1720
|
||||||
|
1490 PRINT "AUGUST 16 ";
|
||||||
|
1500 GOTO 1720
|
||||||
|
1510 PRINT "AUGUST 31 ";
|
||||||
|
1520 GOTO 1720
|
||||||
|
1530 PRINT "SEPTEMBER 13 ";
|
||||||
|
1540 GOTO 1720
|
||||||
|
1550 PRINT "SEPTEMBER 27 ";
|
||||||
|
1560 GOTO 1720
|
||||||
|
1570 PRINT "OCTOBER 11 ";
|
||||||
|
1580 GOTO 1720
|
||||||
|
1590 PRINT "OCTOBER 25 ";
|
||||||
|
1600 GOTO 1720
|
||||||
|
1610 PRINT "NOVEMBER 8 ";
|
||||||
|
1620 GOTO 1720
|
||||||
|
1630 PRINT "NOVEMBER 22 ";
|
||||||
|
1640 GOTO 1720
|
||||||
|
1650 PRINT "DECEMBER 6 ";
|
||||||
|
1660 GOTO 1720
|
||||||
|
1670 PRINT "DECEMBER 20 ";
|
||||||
|
1680 GOTO 1720
|
||||||
|
1690 PRINT "YOU HAVE BEEN ON THE TRAIL TOO LONG ------"
|
||||||
|
1700 PRINT "YOUR FAMILY DIES IN THE FIRST BLIZZARD OF WINTER"
|
||||||
|
1710 GOTO 5170
|
||||||
|
1720 PRINT "1847"
|
||||||
|
1730 PRINT
|
||||||
|
|
||||||
|
1740 REM ***BEGINNING EACH TURN***
|
||||||
|
1750 IF amountSpentOnFood >= 0 THEN 1770
|
||||||
|
1760 amountSpentOnFood=0
|
||||||
|
1770 IF amountSpentOnAmmunition >= 0 THEN 1790
|
||||||
|
1780 amountSpentOnAmmunition=0
|
||||||
|
1790 IF amountSpentOnClothing >= 0 THEN 1810
|
||||||
|
1800 amountSpentOnClothing=0
|
||||||
|
1810 IF amountSpentOnMiscellaneousSupplies >= 0 THEN 1830
|
||||||
|
1820 amountSpentOnMiscellaneousSupplies=0
|
||||||
|
1830 IF amountSpentOnFood >= 13 THEN 1850
|
||||||
|
1840 PRINT "YOU'D BETTER DO SOME HUNTING OR BUY FOOD AND SOON!!!!"
|
||||||
|
1850 amountSpentOnFood=INT(amountSpentOnFood)
|
||||||
|
1860 amountSpentOnAmmunition=INT(amountSpentOnAmmunition)
|
||||||
|
1870 amountSpentOnClothing=INT(amountSpentOnClothing)
|
||||||
|
1880 amountSpentOnMiscellaneousSupplies=INT(amountSpentOnMiscellaneousSupplies)
|
||||||
|
1890 cashLeftAfterInitialPurchases =INT(cashLeftAfterInitialPurchases )
|
||||||
|
1900 totalMileageWholeTrip=INT(totalMileageWholeTrip)
|
||||||
|
1910 totalMileageUpThroughPreviousTurn=totalMileageWholeTrip
|
||||||
|
1920 IF illnessFlag=1 THEN 1950
|
||||||
|
1930 IF injuryFlag=1 THEN 1950
|
||||||
|
1940 GOTO 1990
|
||||||
|
1950 cashLeftAfterInitialPurchases =cashLeftAfterInitialPurchases -20
|
||||||
|
1960 IF cashLeftAfterInitialPurchases <0 THEN 5080
|
||||||
|
1970 PRINT "DOCTOR'S BILL IS $20"
|
||||||
|
1980 LET injuryFlag=illnessFlag=0
|
||||||
|
1990 IF clearSouthPassMileageFlag =1 THEN 2020
|
||||||
|
2000 PRINT "TOTAL MILEAGE IS";totalMileageWholeTrip
|
||||||
|
2010 GOTO 2040
|
||||||
|
2020 PRINT "TOTAL MILEAGE IS 950"
|
||||||
|
2030 clearSouthPassMileageFlag =0
|
||||||
|
2040 PRINT "FOOD","BULLETS","CLOTHING","MISC. SUPP.","CASH"
|
||||||
|
2050 PRINT amountSpentOnFood, amountSpentOnAmmunition, amountSpentOnClothing, amountSpentOnMiscellaneousSupplies, cashLeftAfterInitialPurchases
|
||||||
|
2060 IF fortOptionFlag=-1 THEN 2170
|
||||||
|
2070 fortOptionFlag=fortOptionFlag*(-1)
|
||||||
|
|
||||||
|
2080 PRINT "DO YOU WANT TO (1) STOP AT THE NEXT FORT, (2) HUNT, ";
|
||||||
|
2090 PRINT "OR (3) CONTINUE"
|
||||||
|
2100 INPUT actionChoiceForEachTurn
|
||||||
|
2110 IF actionChoiceForEachTurn >2 THEN 2150
|
||||||
|
2120 IF actionChoiceForEachTurn <1 THEN 2150
|
||||||
|
2130 LET actionChoiceForEachTurn =INT(actionChoiceForEachTurn )
|
||||||
|
2140 GOTO 2270
|
||||||
|
2150 LET actionChoiceForEachTurn =3
|
||||||
|
2160 GOTO 2270
|
||||||
|
|
||||||
|
2170 PRINT "DO YOU WANT TO (1) HUNT, OR (2) CONTINUE"
|
||||||
|
2180 INPUT actionChoiceForEachTurn
|
||||||
|
2190 IF actionChoiceForEachTurn =l THEN 2210
|
||||||
|
2200 LET actionChoiceForEachTurn =2
|
||||||
|
2210 LET actionChoiceForEachTurn =actionChoiceForEachTurn +1
|
||||||
|
2220 IF actionChoiceForEachTurn =3 THEN 2260
|
||||||
|
2230 IF amountSpentOnAmmunition>39 THEN 2260
|
||||||
|
2240 PRINT "TOUGH YOU NEED MORE BULLETS TO GO HUNTING"
|
||||||
|
2250 GOTO 2170
|
||||||
|
2260 fortOptionFlag=fortOptionFlag*(-1)
|
||||||
|
2270 ON actionChoiceForEachTurn GOTO 2290,2540,2720
|
||||||
|
|
||||||
|
2280 REM ***STOPPING AT FORT***
|
||||||
|
2290 PRINT "ENTER WHAT YOU WISH TO SPEND ON THE FOLLOWING"
|
||||||
|
2300 PRINT "F00D";
|
||||||
|
2310 GOSUB 2330
|
||||||
|
2320 GOTO 2410
|
||||||
|
2330 INPUT amountSpentOnItemsAtFort
|
||||||
|
2340 IF amountSpentOnItemsAtFort<0 THEN 2400
|
||||||
|
2350 cashLeftAfterInitialPurchases =cashLeftAfterInitialPurchases -amountSpentOnItemsAtFort
|
||||||
|
2360 IF cashLeftAfterInitialPurchases >= 0 THEN 2400
|
||||||
|
2370 PRINT "YOU DON'T HAVE THAT MUCH--KEEP YOUR SPENDING DOWN"
|
||||||
|
2375 PRINT "YOU MISS YOUR CHANCE TO SPEND ON THAT ITEM"
|
||||||
|
2380 cashLeftAfterInitialPurchases =cashLeftAfterInitialPurchases +amountSpentOnItemsAtFort
|
||||||
|
2390 amountSpentOnItemsAtFort=0
|
||||||
|
2400 RETURN
|
||||||
|
2410 amountSpentOnFood=amountSpentOnFood+2/3*amountSpentOnItemsAtFort
|
||||||
|
2420 PRINT "AMMUNITION";
|
||||||
|
2430 GOSUB 2330
|
||||||
|
2440 LET amountSpentOnAmmunition=INT(amountSpentOnAmmunition+2/3*amountSpentOnItemsAtFort*50)
|
||||||
|
2450 PRINT "CLOTHING";
|
||||||
|
2460 GOSUB 2330
|
||||||
|
2470 amountSpentOnClothing=amountSpentOnClothing+2/3*amountSpentOnItemsAtFort
|
||||||
|
2480 PRINT "MISCELLANEOUS SUPPLIES";
|
||||||
|
2490 GOSUB 2330
|
||||||
|
2500 amountSpentOnMiscellaneousSupplies=amountSpentOnMiscellaneousSupplies+2/3*amountSpentOnItemsAtFort
|
||||||
|
2510 totalMileageWholeTrip=totalMileageWholeTrip-45
|
||||||
|
2520 GOTO 2720
|
||||||
|
|
||||||
|
2530 REM ***HUNTING***
|
||||||
|
2540 IF amountSpentOnAmmunition>39 THEN 2570
|
||||||
|
2550 PRINT "TOUGH---YOU NEED M0RE BULLETS TO GO HUNTING"
|
||||||
|
2560 GOTO 2080
|
||||||
|
2570 totalMileageWholeTrip=totalMileageWholeTrip-45
|
||||||
|
2580 GOSUB 6140
|
||||||
|
2590 IF actualResponseTimeForBang <= 1 THEN 2660
|
||||||
|
2600 IF 100*RND(-1)<13*actualResponseTimeForBang THEN 2710
|
||||||
|
2610 amountSpentOnFood=amountSpentOnFood+48-2*actualResponseTimeForBang
|
||||||
|
2620 PRINT "NICE SHOT--RIGHT ON TARGET--GOOD EATIN' TONIGHT!!"
|
||||||
|
2630 amountSpentOnAmmunition=amountSpentOnAmmunition-10-3*actualResponseTimeForBang
|
||||||
|
2640 GOTO 2720
|
||||||
|
|
||||||
|
2650 REM **BELLS IN LINE 2660**
|
||||||
|
2660 PRINT "RIGHT BETWEEN THE EYES---YOU GOT A BIG ONE!!!!"
|
||||||
|
2670 PRINT "FULL BELLIES TONIGHT!"
|
||||||
|
2680 amountSpentOnFood=amountSpentOnFood+52+RND(-1)*6
|
||||||
|
2690 amountSpentOnAmmunition=amountSpentOnAmmunition-10-RND(-1)*4
|
||||||
|
2700 GOTO 2720
|
||||||
|
2710 PRINT "YOU MISSED---AND YOUR DINNER GOT AWAY....."
|
||||||
|
2720 IF amountSpentOnFood >= 13 THEN 2750
|
||||||
|
2730 GOTO 5060
|
||||||
|
|
||||||
|
2740 REM ***EATING***
|
||||||
|
2750 PRINT "DO YOU WANT TO EAT (1) POORLY (2) MODERATELY"
|
||||||
|
2760 PRINT "OR (3) WELL";
|
||||||
|
2770 INPUT eatingChoice
|
||||||
|
2780 IF eatingChoice>3 THEN 2750
|
||||||
|
2790 If eatingChoice<1 THEN 2750
|
||||||
|
2800 LET eatingChoice=INT(eatingChoice)
|
||||||
|
2810 LET amountSpentOnFood=amountSpentOnFood-8-5*eatingChoice
|
||||||
|
2820 IF amountSpentOnFood >= 0 THEN 2860
|
||||||
|
2830 amountSpentOnFood=amountSpentOnFood+8+5*eatingChoice
|
||||||
|
2840 PRINT "YOU CAN'T EAT THAT WELL"
|
||||||
|
2850 GOTO 2750
|
||||||
|
2860 LET totalMileageWholeTrip=totalMileageWholeTrip+200+(amountSpentOnAnimals-220)/5+10*RND(-1)
|
||||||
|
2870 blizzardFlag=insufficientClothingFlag=0
|
||||||
|
|
||||||
|
2880 REM ***RIDERS ATTACK***
|
||||||
|
2890 IF RND(-1)*10>((totalMileageWholeTrip/100-4)^2+72)/((totalMileageWholeTrip/100-4)^2+12)-1 THEN 3550
|
||||||
|
2900 PRINT "RIDERS AHEAD. THEY ";
|
||||||
|
2910 hostilityOfRidersFactor=0
|
||||||
|
2920 IF RND(-1)<.8 THEN 2950
|
||||||
|
2930 PRINT "DON'T ";
|
||||||
|
2940 hostilityOfRidersFactor=1
|
||||||
|
2950 PRINT "LOOK HOSTILE"
|
||||||
|
2960 PRINT "TACTICS"
|
||||||
|
2970 PRINT "(1) RUN (2) ATTACK (3) CONTINUE (4) CIRCLE WAGONS"
|
||||||
|
2980 IF RND(-1)>.2 THEN 3000
|
||||||
|
2990 hostilityOfRidersFactor=1-hostilityOfRidersFactor
|
||||||
|
3000 INPUT tacticsChoiceWhenAttacked
|
||||||
|
3010 IF tacticsChoiceWhenAttacked <1 THEN 2970
|
||||||
|
3020 IF tacticsChoiceWhenAttacked >4 THEN 2970
|
||||||
|
3030 tacticsChoiceWhenAttacked =INT(tacticsChoiceWhenAttacked )
|
||||||
|
3040 IF hostilityOfRidersFactor=1 THEN 3330
|
||||||
|
3050 IF tacticsChoiceWhenAttacked >1 THEN 3110
|
||||||
|
3060 totalMileageWholeTrip=totalMileageWholeTrip+20
|
||||||
|
3070 amountSpentOnMiscellaneousSupplies=amountSpentOnMiscellaneousSupplies-15
|
||||||
|
3080 amountSpentOnAmmunition=amountSpentOnAmmunition-150
|
||||||
|
3090 amountSpentOnAnimals=amountSpentOnAnimals-40
|
||||||
|
3100 GOTO 3470
|
||||||
|
3110 IF tacticsChoiceWhenAttacked >2 THEN 3240
|
||||||
|
3120 GOSUB 6140
|
||||||
|
3130 amountSpentOnAmmunition=amountSpentOnAmmunition-actualResponseTimeForBang*40-80
|
||||||
|
3140 IF actualResponseTimeForBang>1 THEN 3170
|
||||||
|
3150 PRINT "NICE SHOOTING---YOU DROVE THEM OFF"
|
||||||
|
3160 GOTO 3470
|
||||||
|
3170 IF actualResponseTimeForBang <= 4 THEN 3220
|
||||||
|
3180 PRINT "LOUSY SHOT---YOU GOT KNIFED"
|
||||||
|
3190 injuryFlag=1
|
||||||
|
3200 PRINT "YOU HAVE TO SEE OL' DOC BLANCHARD"
|
||||||
|
3210 GOTO 3470
|
||||||
|
3220 PRINT "KINDA SLOW WITH YOUR COLT .45"
|
||||||
|
3230 GOTO 3470
|
||||||
|
3240 IF tacticsChoiceWhenAttacked >3 THEN 3290
|
||||||
|
3250 IF RND(-1)>.8 THEN 3450
|
||||||
|
3260 LET amountSpentOnAmmunition=amountSpentOnAmmunition-150
|
||||||
|
3270 amountSpentOnMiscellaneousSupplies=amountSpentOnMiscellaneousSupplies-15
|
||||||
|
3280 GOTO 3470
|
||||||
|
3290 GOSUB 6140
|
||||||
|
3300 amountSpentOnAmmunition=amountSpentOnAmmunition-actualResponseTimeForBang*30-80
|
||||||
|
3310 totalMileageWholeTrip=totalMileageWholeTrip-25
|
||||||
|
3320 GOTO 3140
|
||||||
|
3330 IF tacticsChoiceWhenAttacked >1 THEN 3370
|
||||||
|
3340 totalMileageWholeTrip=totalMileageWholeTrip+15
|
||||||
|
3350 amountSpentOnAnimals=amountSpentOnAnimals-10
|
||||||
|
3360 GOTO 3470
|
||||||
|
3370 IF tacticsChoiceWhenAttacked >2 THEN 3410
|
||||||
|
3380 totalMileageWholeTrip=totalMileageWholeTrip-5
|
||||||
|
3390 amountSpentOnAmmunition=amountSpentOnAmmunition-100
|
||||||
|
3400 GOTO 3470
|
||||||
|
3410 IF tacticsChoiceWhenAttacked >3 THEN 3430
|
||||||
|
3420 GOTO 3470
|
||||||
|
3430 totalMileageWholeTrip=totalMileageWholeTrip-20
|
||||||
|
3440 GOTO 3470
|
||||||
|
3450 PRINT "THEY DID NOT ATTACK"
|
||||||
|
3460 GOTO 3550
|
||||||
|
3470 IF hostilityOfRidersFactor=0 THEN 3500
|
||||||
|
3480 PRINT "RIDERS WERE FRIENDLY, BUT CHECK FOR POSSIBLE LOSSES"
|
||||||
|
3490 GOTO 3550
|
||||||
|
3500 PRINT "RIDERS WERE HOSTILE--CHECK FOR LOSSES"
|
||||||
|
3510 IF amountSpentOnAmmunition >= 0 THEN 3550
|
||||||
|
3520 PRINT "YOU RAN OUT OF BULLETS AND GOT MASSACRED BY THE RIDERS"
|
||||||
|
3530 GOTO 5170
|
||||||
|
|
||||||
|
3540 REM ***SELECTION OF EVENTS***
|
||||||
|
3550 LET eventCounter=0
|
||||||
|
3560 RESTORE
|
||||||
|
3570 randomEventNumber=100*RND(-1)
|
||||||
|
3580 LET eventCounter=eventCounter+1
|
||||||
|
3590 IF eventCounter=16 THEN 4670
|
||||||
|
3600 READ D
|
||||||
|
3610 IF randomEventNumber>D THEN 3580
|
||||||
|
3620 DATA 6, 11, 13, 15, 17, 22, 32, 35, 37, 42, 44, 54, 64, 69, 95
|
||||||
|
3630 IF eventCounter>10 THEN 3650
|
||||||
|
3640 ON eventCounter GOTO 3660, 3700, 3740, 3790, 3820, 3850, 3880, 3960, 4130, 4190
|
||||||
|
3650 ON eventCounter-10 GOTO 4220, 4290, 4340, 4560, 4610, 4670
|
||||||
|
3660 PRINT "WAGON BREAKS DOWN--LOSE TIME AND SUPPLIES FIXING IT"
|
||||||
|
3670 LET totalMileageWholeTrip=totalMileageWholeTrip-15-5*RND(-1)
|
||||||
|
3680 LET amountSpentOnMiscellaneousSupplies=amountSpentOnMiscellaneousSupplies-8
|
||||||
|
3690 GOTO 4710
|
||||||
|
3700 PRINT "OX INJURES LEG--SLOWS YOU DOWN REST OF TRIP"
|
||||||
|
3710 LET totalMileageWholeTrip=totalMileageWholeTrip-25
|
||||||
|
3720 LET amountSpentOnAnimals=amountSpentOnAnimals-20
|
||||||
|
3730 GOTO 4710
|
||||||
|
3740 PRINT "BAD LUCK--YOUR DAUGHTER BROKE HER ARM"
|
||||||
|
3750 PRINT "YOU HAD TO STOP AND USE SUPPLIES TO MAKE A SLING"
|
||||||
|
3760 totalMileageWholeTrip=totalMileageWholeTrip-5-4*RND(-1)
|
||||||
|
3770 amountSpentOnMiscellaneousSupplies=amountSpentOnMiscellaneousSupplies-2-3*RND(-1)
|
||||||
|
3780 GOTO 4710
|
||||||
|
3790 PRINT "OX WANDERS OFF--SPEND TIME LOOKING FOR IT"
|
||||||
|
3800 totalMileageWholeTrip=totalMileageWholeTrip-17
|
||||||
|
3810 GOTO 4710
|
||||||
|
3820 PRINT "YOUR SON GETS LOST---SPEND HALF THE DAY LOOKING FOR HIM"
|
||||||
|
3830 totalMileageWholeTrip=totalMileageWholeTrip-10
|
||||||
|
3840 GOTO 4710
|
||||||
|
3850 PRINT "UNSAFE WATER--LOSE TIME LOOKING FOR CLEAN SPRING"
|
||||||
|
3860 LET totalMileageWholeTrip=totalMileageWholeTrip-10*RND(-1)-2
|
||||||
|
3870 GOTO 4710
|
||||||
|
3880 IF totalMileageWholeTrip>950 THEN 4490
|
||||||
|
3890 PRINT "HEAVY RAINS---TIME AND SUPPLIES LOST"
|
||||||
|
3910 amountSpentOnFood=amountSpentOnFood-10
|
||||||
|
3920 amountSpentOnAmmunition=amountSpentOnAmmunition-500
|
||||||
|
3930 amountSpentOnMiscellaneousSupplies=amountSpentOnMiscellaneousSupplies-15
|
||||||
|
3940 totalMileageWholeTrip=totalMileageWholeTrip-10*RND(-1)-5
|
||||||
|
3950 GOTO 4710
|
||||||
|
3960 PRINT "BANDITS ATTACK"
|
||||||
|
3970 GOSUB 6140
|
||||||
|
3980 amountSpentOnAmmunition=amountSpentOnAmmunition-20*actualResponseTimeForBang
|
||||||
|
3990 IF amountSpentOnAmmunition >= 0 THEN 4030
|
||||||
|
4000 PRINT "YOU RAN OUT OF BULLETS---THEY GET LOTS OF CASH"
|
||||||
|
4010 cashLeftAfterInitialPurchases =cashLeftAfterInitialPurchases /3
|
||||||
|
4020 GOTO 4040
|
||||||
|
4030 IF actualResponseTimeForBang <= 1 THEN 4100
|
||||||
|
4040 PRINT "YOU GOT SHOT IN THE LEG AND THEY TOOK ONE OF YOUR OXEN"
|
||||||
|
4050 injuryFlag=1
|
||||||
|
4060 PRINT "BETTER HAVE A DOC LOOK AT YOUR WOUND"
|
||||||
|
4070 amountSpentOnMiscellaneousSupplies=amountSpentOnMiscellaneousSupplies-5
|
||||||
|
4080 amountSpentOnAnimals=amountSpentOnAnimals-20
|
||||||
|
4090 GOTO 4710
|
||||||
|
4100 PRINT "QUICKEST DRAW OUTSIDE OF DODGE CITY!!!"
|
||||||
|
4110 PRINT "YOU GOT 'EM!"
|
||||||
|
4120 GOTO 4710
|
||||||
|
4130 PRINT "THERE WAS A FIRE IN YOUR WAGON--FOOD AND SUPPLIES DAMAGE!"
|
||||||
|
4140 amountSpentOnFood=amountSpentOnFood-40
|
||||||
|
4150 amountSpentOnAmmunition=amountSpentOnAmmunition-400
|
||||||
|
4160 LET amountSpentOnMiscellaneousSupplies=amountSpentOnMiscellaneousSupplies-RND(-1)*8-3
|
||||||
|
4170 totalMileageWholeTrip=totalMileageWholeTrip-15
|
||||||
|
4180 GOTO 4710
|
||||||
|
4190 PRINT "LOSE YOUR WAY IN HEAVY FOG---TIME IS LOST"
|
||||||
|
4200 totalMileageWholeTrip=totalMileageWholeTrip-10-5*RND(-1)
|
||||||
|
4210 GOTO 4710
|
||||||
|
4220 PRINT "YOU KILLED A POISONOUS SNAKE AFTER IT BIT YOU"
|
||||||
|
4230 amountSpentOnAmmunition=amountSpentOnAmmunition-10
|
||||||
|
4240 amountSpentOnMiscellaneousSupplies=amountSpentOnMiscellaneousSupplies-5
|
||||||
|
4250 IF amountSpentOnMiscellaneousSupplies >= 0 THEN 4280
|
||||||
|
4260 PRINT "YOU DIE OF SNAKEBITE SINCE YOU HAVE NO MEDICINE"
|
||||||
|
4270 GOTO 5170
|
||||||
|
4280 GOTO 4710
|
||||||
|
4290 PRINT "WAGON GETSE SWAMPED FORDING RIVER--LOSE FOOD AND CLOTHES"
|
||||||
|
4300 amountSpentOnFood=amountSpentOnFood-30
|
||||||
|
4310 amountSpentOnClothing=amountSpentOnClothing-20
|
||||||
|
4320 totalMileageWholeTrip=totalMileageWholeTrip-20-20*RND(-1)
|
||||||
|
4330 GOTO 4710
|
||||||
|
4340 PRINT "WILD ANIMALS ATTACK!"
|
||||||
|
4350 GOSUB 6140
|
||||||
|
4360 IF amountSpentOnAmmunition>39 THEN 4410
|
||||||
|
4370 PRINT "YOU WERE TOO LOW ON BULLETS--"
|
||||||
|
4380 PRINT "THE WOLVES OVERPOWERED YOU"
|
||||||
|
4390 injuryFlag=1
|
||||||
|
4400 GOTO 5120
|
||||||
|
4410 IF actualResponseTimeForBang>2 THEN 4440
|
||||||
|
4420 PRINT "NICE SHOOTIN' PARDNER---THEY DIDN'T GET MUCH"
|
||||||
|
4430 GOTO 4450
|
||||||
|
4440 PRINT "SLOW ON THE DRAW---THEY GOT AT YOUR FOOD AND CLOTHES"
|
||||||
|
4450 amountSpentOnAmmunition=amountSpentOnAmmunition-20*actualResponseTimeForBang
|
||||||
|
4460 amountSpentOnClothing=amountSpentOnClothing-actualResponseTimeForBang*4
|
||||||
|
4470 amountSpentOnFood=amountSpentOnFood-actualResponseTimeForBang*8
|
||||||
|
4480 GOTO 4710
|
||||||
|
4490 PRINT "COLD WEATHER---BRRRRRRR!---YOU ";
|
||||||
|
4500 IF amountSpentOnClothing>22+4*RND(-1) THEN 4530
|
||||||
|
4510 PRINT "DON'T ";
|
||||||
|
4520 insufficientClothingFlag=1
|
||||||
|
4530 PRINT "HAVE ENOUGH CLOTHING TO KEEP YOU WARM"
|
||||||
|
4540 IF insufficientClothingFlag=0 THEN 4710
|
||||||
|
4550 GOTO 6300
|
||||||
|
4560 PRINT "HAIL STORM---SUPPLIES DAMAGED"
|
||||||
|
4570 totalMileageWholeTrip=totalMileageWholeTrip-5-RND(-1)*10
|
||||||
|
4580 amountSpentOnAmmunition=amountSpentOnAmmunition-200
|
||||||
|
4590 amountSpentOnMiscellaneousSupplies=amountSpentOnMiscellaneousSupplies-4-RND(-1)*3
|
||||||
|
4600 GOTO 4710
|
||||||
|
4610 IF eatingChoice=1 THEN 6300
|
||||||
|
4620 IF eatingChoice=3 THEN 4650
|
||||||
|
4630 IF RND(-1)>.25 THEN 6300
|
||||||
|
4640 GOTO 4710
|
||||||
|
4650 IF RND(-1)<.5 THEN 6300
|
||||||
|
4660 GOTO 4710
|
||||||
|
4670 PRINT "HELPFUL INDIANS SHOW YOU WERE TO FIND MORE FOOD"
|
||||||
|
4680 amountSpentOnFood=amountSpentOnFood+I4
|
||||||
|
4690 GOTO 4710
|
||||||
|
|
||||||
|
4700 REM ***MOUNTAINS***
|
||||||
|
4710 IF H <= 950 THEN 1230
|
||||||
|
4720 IF RND(-1)*10>9-((totalMileageWholeTrip/100-15)^2+72)/((totalMileageWholeTrip/100-15)^2+12) THEN 4860
|
||||||
|
4730 PRINT "RUGGED MOUNTAINS"
|
||||||
|
4740 IF RND(-1)>.1 THEN 4780
|
||||||
|
4750 PRINT "YOU GOT LOST---LOSE VALUABLE TIME TRYING TO FIND TRAIL!"
|
||||||
|
4760 totalMileageWholeTrip=totalMileageWholeTrip-60
|
||||||
|
4770 GOTO 4860
|
||||||
|
4780 IF RND(-1)>.11 THEN 4840
|
||||||
|
4790 PRINT "WAGON DAMAGED!—LOSE TIME AND SUPPLIES"
|
||||||
|
4800 amountSpentOnMiscellaneousSupplies=amountSpentOnMiscellaneousSupplies-5
|
||||||
|
4810 amountSpentOnAmmunition=amountSpentOnAmmunition-200
|
||||||
|
4820 totalMileageWholeTrip=totalMileageWholeTrip-20-30*RND(-1)
|
||||||
|
4830 GOTO 4860
|
||||||
|
4840 PRINT "THE GOING GETS SLOW"
|
||||||
|
4850 totalMileageWholeTrip=totalMileageWholeTrip-45-RND(-1)/.02
|
||||||
|
4860 IF clearSouthPassFlag=1 THEN 4900
|
||||||
|
4870 clearSouthPassFlag=1
|
||||||
|
4880 IF RND(-1)<.8 THEN 4970
|
||||||
|
4890 PRINT "YOU MADE IT SAFELY THROUGH SOUTH PASS--NO SNOW"
|
||||||
|
4900 IF totalMileageWholeTrip<1700 THEN 4940
|
||||||
|
4910 IF clearBlueMountainsFlag=1 THEN 4940
|
||||||
|
4920 clearBlueMountainsFlag=1
|
||||||
|
4930 IF RND(-1)<.7 THEN 4970
|
||||||
|
4940 IF totalMileageWholeTrip>950 THEN 1230
|
||||||
|
4950 clearSouthPassMileageFlag =1
|
||||||
|
4960 GOTO 1230
|
||||||
|
4970 PRINT "BLIZZARD IN MOUNTAIN PASS--TIME AND SUPPLIES LOST"
|
||||||
|
4980 blizzardFlag=1
|
||||||
|
4990 amountSpentOnFood=amountSpentOnFood-25
|
||||||
|
5000 amountSpentOnMiscellaneousSupplies=amountSpentOnMiscellaneousSupplies-10
|
||||||
|
5010 amountSpentOnAmmunition=amountSpentOnAmmunition-300
|
||||||
|
5020 totalMileageWholeTrip=totalMileageWholeTrip-30-40*RND(-1)
|
||||||
|
5030 IF amountSpentOnClothing<18+2*RND(-1) THEN 6300
|
||||||
|
5040 GOTO 4940
|
||||||
|
|
||||||
|
5050 REM ***DYING***
|
||||||
|
5060 PRINT "YOU RAN OUT OF FOOD AND STARVED TO DEATH"
|
||||||
|
5070 GOTO 5170
|
||||||
|
5080 LET cashLeftAfterInitialPurchases =0
|
||||||
|
5090 PRINT "YOU CAN'T AFFORD A DOCTOR"
|
||||||
|
5100 GOTO 5120
|
||||||
|
5110 PRINT "YOU RAN OUT OF MEDICAL SUPPLIES"
|
||||||
|
5120 PRINT "YOU DIED OF ";
|
||||||
|
5130 IF injuryFlag=1 THEN 5160
|
||||||
|
5140 PRINT "PNEUMONIA"
|
||||||
|
5150 GOTO 5170
|
||||||
|
5160 PRINT "INJURIES"
|
||||||
|
5170 PRINT
|
||||||
|
5180 PRINT "DUE TO YOUR UNFORTUNATE SITUATION, THERE ARE A FEW"
|
||||||
|
5190 PRINT "FORMALITIES WE MUST GO THROUGH"
|
||||||
|
5200 PRINT
|
||||||
|
5210 PRINT "WOULD YOU LIKE A MINISTER?"
|
||||||
|
5220 INPUT yesNoResponseToQuestions
|
||||||
|
5230 PRINT "WOULD YOU LIKE A FANCY FUNERAL?"
|
||||||
|
5240 INPUT yesNoResponseToQuestions
|
||||||
|
5250 PRINT "WOULD YOU LIKE US TO INFORM YOUR NEXT OF KIN?"
|
||||||
|
5260 INPUT yesNoResponseToQuestions
|
||||||
|
5270 IF yesNoResponseToQuestions="YES" THEN GOTO 5310
|
||||||
|
5280 PRINT "BUT YOUR AUNT SADIE IN ST. LOUIS IS REALLY WORRIED ABOUT YOU"
|
||||||
|
8290 PRINT
|
||||||
|
8300 GOTO 5330
|
||||||
|
5310 PRINT "THAT WILL BE $4.50 FOR THE TELEGRAPH CHARGE."
|
||||||
|
5320 PRINT
|
||||||
|
5330 PRINT "WE THANK YOU FOR THIS INFORMATION AND WE ARE SORRY YOU"
|
||||||
|
5340 PRINT "DIDN'T MAKE IT TO THE GREAT TERRITORY OF OREGON"
|
||||||
|
5350 PRINT "BETTER LUCK NEXT TIME"
|
||||||
|
5360 PRINT
|
||||||
|
5370 PRINT
|
||||||
|
5380 PRINT TAB(30);"SINCERELY"
|
||||||
|
5390 PRINT
|
||||||
|
5400 PRINT TAB(17);"THE OREGON CITY CHAMBER OF COMMERCE"
|
||||||
|
5410 STOP
|
||||||
|
|
||||||
|
5420 REM ***FINAL TURN***
|
||||||
|
5430 fractionOfTwoWeeksTraveledOnFinalTurn=(2040-totalMileageUpThroughPreviousTurn)/(totalMileageWholeTrip-totalMileageUpThroughPreviousTurn)
|
||||||
|
5440 amountSpentOnFood=amountSpentOnFood+(1-fractionOfTwoWeeksTraveledOnFinalTurn)*(8*5*eatingChoice)
|
||||||
|
5450 PRINT
|
||||||
|
|
||||||
|
5460 REM **BELLS IN LINES 5470, 5480**
|
||||||
|
5470 PRINT "YOU FINALLY ARRIVED AT OREGON CITY"
|
||||||
|
5480 PRINT "AFTER 2040 LONG MILES---HOORAY !!!!!"
|
||||||
|
5490 PRINT "A REAL PIONEER!"
|
||||||
|
5500 PRINT
|
||||||
|
5510 fractionOfTwoWeeksTraveledOnFinalTurn=INT(fractionOfTwoWeeksTraveledOnFinalTurn*14)
|
||||||
|
5520 turnNumberForSettingDate=turnNumberForSettingDate*I4+fractionOfTwoWeeksTraveledOnFinalTurn
|
||||||
|
5530 fractionOfTwoWeeksTraveledOnFinalTurn=fractionOfTwoWeeksTraveledOnFinalTurn+1
|
||||||
|
5540 IF fractionOfTwoWeeksTraveledOnFinalTurn<8 THEN 5560
|
||||||
|
5550 fractionOfTwoWeeksTraveledOnFinalTurn=fractionOfTwoWeeksTraveledOnFinalTurn-7
|
||||||
|
5560 ON fractionOfTwoWeeksTraveledOnFinalTurn GOTO 5570,5590,5630,5650,5670,5690
|
||||||
|
5570 PRINT "MONDAY ";
|
||||||
|
5580 GOTO 5700
|
||||||
|
5590 PRINT "TUESDAY ";
|
||||||
|
5600 GOTO 5700
|
||||||
|
5610 PRINT "WEDNESDAY ";
|
||||||
|
5620 GOTO 5700
|
||||||
|
5630 PRINT "THURSDAY ";
|
||||||
|
5640 GOTO 5700
|
||||||
|
5650 PRINT "FRIDAY ";
|
||||||
|
5660 GOTO 5700
|
||||||
|
5670 PRINT "SATURDAY ";
|
||||||
|
5680 GOTO 5700
|
||||||
|
5690 PRINT "SUNDAY ";
|
||||||
|
5700 IF turnNumberForSettingDate>124 THEN 5740
|
||||||
|
5710 turnNumberForSettingDate=turnNumberForSettingDate-93
|
||||||
|
5720 PRINT "JULY ";turnNumberForSettingDate;" 1847"
|
||||||
|
5730 GOTO 5920
|
||||||
|
5740 IF turnNumberForSettingDate>155 THEN 5780
|
||||||
|
5750 turnNumberForSettingDate=turnNumberForSettingDate-124
|
||||||
|
5760 PRINT "AUGUST ";turnNumberForSettingDate;" 1847"
|
||||||
|
5770 GOTO 5920
|
||||||
|
5780 IF turnNumberForSettingDate>155 THEN 5820
|
||||||
|
5790 turnNumberForSettingDate=turnNumberForSettingDate-155
|
||||||
|
5800 PRINT "SEPTEMBER ";turnNumberForSettingDate;" 1847"
|
||||||
|
5810 GOTO 5920
|
||||||
|
5820 IF turnNumberForSettingDate>216 THEN 5860
|
||||||
|
5830 turnNumberForSettingDate=turnNumberForSettingDate-155
|
||||||
|
5840 PRINT "OCTOBER ";turnNumberForSettingDate;" 1847"
|
||||||
|
5850 GOTO 5920
|
||||||
|
5860 IF turnNumberForSettingDate>246 THEN 5900
|
||||||
|
5870 turnNumberForSettingDate=turnNumberForSettingDate-246
|
||||||
|
5880 PRINT "NOVEMBER ";turnNumberForSettingDate;" 1847"
|
||||||
|
5890 GOTO 5920
|
||||||
|
5900 turnNumberForSettingDate=turnNumberForSettingDate-246
|
||||||
|
5910 PRINT "DECEMBER ";turnNumberForSettingDate;" 1847"
|
||||||
|
5920 PRINT
|
||||||
|
5930 PRINT "FOOD","BULLETS","CLOTHING","MISC. SUPP.","CASH"
|
||||||
|
5940 IF amountSpentOnAmmunition>0 THEN 5960
|
||||||
|
5950 LET amountSpentOnAmmunition=0
|
||||||
|
5960 IF amountSpentOnClothing>0 THEN 5980
|
||||||
|
5970 LET amountSpentOnClothing=0
|
||||||
|
5980 IF amountSpentOnMiscellaneousSupplies>0 THEN 6000
|
||||||
|
5990 LET amountSpentOnMiscellaneousSupplies=0
|
||||||
|
6000 IF cashLeftAfterInitialPurchases >0 THEN 6020
|
||||||
|
6010 LET cashLeftAfterInitialPurchases =0
|
||||||
|
6020 IF amountSpentOnFood>0 THEN 6040
|
||||||
|
6030 LET amountSpentOnFood=0
|
||||||
|
6040 PRINT INT(amountSpentOnFood),INT(amountSpentOnAmmunition),INT(amountSpentOnClothing),INT(amountSpentOnMiscellaneousSupplies),INT(cashLeftAfterInitialPurchases )
|
||||||
|
6050 PRINT
|
||||||
|
6060 PRINT TAB(11); "PRESIDENT JAMES K. POLK SENDS YOU HIS"
|
||||||
|
6070 PRINT TAB(17); "HEARTIEST CONGRATULATIONS"
|
||||||
|
6080 PRINT
|
||||||
|
6090 PRINT TAB(11);"AND WISHES YOU A PROSPEROUS LIFE AHEAD"
|
||||||
|
6100 PRINT
|
||||||
|
6110 PRINT TAB(22);"AT YOUR NEW HOME"
|
||||||
|
6120 STOP
|
||||||
|
|
||||||
|
6130 REM ***SHOOTING SUB-ROUTINE***
|
||||||
|
6131 REM THE METHOD OF TIMING THE SHOOTING
|
||||||
|
6132 REM WILL VARY FROM SYSTEM TO SYSTEM.
|
||||||
|
6133 REM USERS WILL PROBABLY PREFER TO USE
|
||||||
|
6134 REM IF TIMING ON THE USER'S SYSTEM IS HIGHLY SUSCEPTIBLE
|
||||||
|
6135 REM TO SYSTEM RESPONSE TIME, THE FORMULA IN LINE 6240 CAN
|
||||||
|
6136 REM BE TAILORED TO ACCOMODATE THIS BY EITHER INCREASING
|
||||||
|
6137 REM OR DECREASING THE 'SHOOTING' TIME RECORDED BY THE SYSTEM.
|
||||||
|
6140 DIM shootingWordVariations (5) AS STRING
|
||||||
|
6150 shootingWordVariations (1)="BANG"
|
||||||
|
6160 shootingWordVariations (2)="BLAM"
|
||||||
|
6170 shootingWordVariations (3)="P0W"
|
||||||
|
6180 shootingWordVariations (4)="WHAM"
|
||||||
|
6190 shootingWordSelector=INT(RND(-1)*4+1)
|
||||||
|
6200 PRINT "TYPE "; shootingWordVariations (shootingWordSelector)
|
||||||
|
'6210 clockTimeAtStartOfBang = CLK(0)
|
||||||
|
6220 INPUT yesNoResponseToQuestions
|
||||||
|
'6230 actualResponseTimeForBang = CLK(0)
|
||||||
|
6240 actualResponseTimeForBang=((actualResponseTimeForBang-clockTimeAtStartOfBang)*3600)-(shootingExpertiseLevelChoice-1)
|
||||||
|
6250 PRINT
|
||||||
|
6255 IF actualResponseTimeForBang>0 THEN 6260
|
||||||
|
6257 actualResponseTimeForBang=0
|
||||||
|
6260 IF yesNoResponseToQuestions=shootingWordVariations (shootingWordSelector) THEN GOTO 6280
|
||||||
|
6270 actualResponseTimeForBang=9
|
||||||
|
6280 RETURN
|
||||||
|
|
||||||
|
6290 REM ***ILLNESS SUB-ROUTINE***
|
||||||
|
6300 IF 100*RND(-1)<10+35*(eatingChoice-1) THEN GOTO 6370
|
||||||
|
6310 IF 100*RND(-1)<100-(40/4^(eatingChoice-1)) THEN GOTO 6410
|
||||||
|
6320 PRINT "SERIOUS ILLNESS"
|
||||||
|
6330 PRINT "YOU MUST STOP FOR MEDICAL ATTENTION"
|
||||||
|
6340 amountSpentOnMiscellaneousSupplies=amountSpentOnMiscellaneousSupplies-10
|
||||||
|
6350 illnessFlag=1
|
||||||
|
6360 GOTO 6440
|
||||||
|
6370 PRINT "MILD ILLNESS---MEDICINE USED"
|
||||||
|
6380 totalMileageWholeTrip=totalMileageWholeTrip-5
|
||||||
|
6390 amountSpentOnMiscellaneousSupplies=amountSpentOnMiscellaneousSupplies-2
|
||||||
|
6400 GOTO 6440
|
||||||
|
6410 PRINT "BAD ILLNESS---MEDICINE USED"
|
||||||
|
6420 totalMileageWholeTrip=totalMileageWholeTrip-5
|
||||||
|
6430 amountSpentOnMiscellaneousSupplies=amountSpentOnMiscellaneousSupplies-5
|
||||||
|
6440 IF amountSpentOnMiscellaneousSupplies<0 THEN 5110
|
||||||
|
6450 IF blizzardFlag=1 THEN 4940
|
||||||
|
6460 GOTO 4710
|
||||||
|
|
||||||
|
6470 REM ***IDENDIFICATION OF VARIABLES IN THE PROGRAM***
|
||||||
|
6480 REM amountSpentOnAnimals = AMOUNT SPENT ON ANIMALS
|
||||||
|
6490 REM amountSpentOnAmmunition = AMOUNT SPENT ON AMMUNITION
|
||||||
|
6500 REM actualResponseTimeForBang = ACTUAL RESPONSE TIME FOR INPUTTING "BANG"
|
||||||
|
6510 REM clockTimeAtStartOfBang = CLOCK TIME AT START OF INPUTTING "BANG"
|
||||||
|
6520 REM amountSpentOnClothing = AMOUNT SPENT ON CLOTHING
|
||||||
|
6530 REM insufficientClothingFlag = FLAG FOR INSUFFICIENT CLOTHING IN COLD WEATHER
|
||||||
|
6540 REM yesNoResponseToQuestions = YES/NO RESPONSE TO QUESTIONS
|
||||||
|
6550 REM eventCounter = COUNTER IN GENERATING EVENTS
|
||||||
|
6560 REM turnNumberForSettingDate = TURN NUMBER FOR SETTING DATE
|
||||||
|
6570 REM currentDate = CURRENT DATE
|
||||||
|
6580 REM shootingExpertiseLevelChoice = CHOICE OF SHOOTING EXPERTISE LEVEL
|
||||||
|
6590 REM eatingChoice = CHOICE OF EATING
|
||||||
|
6600 REM amountSpentOnFood = AMOUNT SPENT ON FOOD
|
||||||
|
6610 REM clearSouthPassFlag = FLAG FOR CLEARING SOUTH PASS
|
||||||
|
6620 REM clearBlueMountainsFlag = FLAG FOR CLEARING BLUE MOUNTAINS
|
||||||
|
6630 REM fractionOfTwoWeeksTraveledOnFinalTurn = FRACTION OF 2 WEEKS TRAVELED ON FINAL TURN
|
||||||
|
6640 REM injuryFlag = FLAG FOR INJURY
|
||||||
|
6650 REM blizzardFlag = FLAG FOR BLIZZARD
|
||||||
|
6660 REM totalMileageWholeTrip =TOTAL MILEAGE WHOLE TRIP
|
||||||
|
6670 REM amountSpentOnMiscellaneousSupplies = AMOUNT SPENT ON MISCELLANEOUS SUPPLIES
|
||||||
|
6680 REM totalMileageUpThroughPreviousTurn = TOTAL MILEAGE UP THROUGH PREVIOUS TURN
|
||||||
|
6690 REM clearSouthPassMileageFlag = FLAG FOR CLEARING SOUTH PASS IN SETTING MILEAGE
|
||||||
|
6700 REM amountSpentOnItemsAtFort = AMOUNT SPENT ON ITEMS AT FORT
|
||||||
|
6710 REM randomEventNumber = RANDOM NUMBER IN CHOOSING EVENTS
|
||||||
|
6720 REM illnessFlag = FLAG FOR ILLNESS
|
||||||
|
6730 REM hostilityOfRidersFactor = ""HOSTILITY OF RIDERS"" FACTOR
|
||||||
|
6740 REM shootingWordSelector = SHOOTING WORD SELECTOR
|
||||||
|
6750 REM shootingWordVariations = VARIATIONS OF SHOOTING WORD
|
||||||
|
6760 REM cashLeftAfterInitialPurchases = CASH LEFT OVER AFTER INITIAL PURCHASES
|
||||||
|
6770 REM tacticsChoiceWhenAttacked = CHOICE OF TACTICS WHEN ATTACKED
|
||||||
|
6780 REM actionChoiceForEachTurn = CHOICE OF ACTION FOR EACH TURN
|
||||||
|
6790 REM fortOptionFlag = FLAG FOR FORT OPTION
|
||||||
|
END
|
|
@ -0,0 +1,126 @@
|
||||||
|
import GameState from "./gameState";
|
||||||
|
|
||||||
|
class GameEvents {
|
||||||
|
private events: OregonEvent[];
|
||||||
|
private totalThreshold: number;
|
||||||
|
constructor() {
|
||||||
|
// Initialize the events and their thresholds.
|
||||||
|
this.events = [
|
||||||
|
{
|
||||||
|
name: "Wagon Breakdown",
|
||||||
|
threshold: 10, // Probability weight
|
||||||
|
action: (gameState) => {
|
||||||
|
gameState.totalMileageWholeTrip -= 15;
|
||||||
|
gameState.amountSpentOnMiscellaneousSupplies -= 8;
|
||||||
|
return "Wagon breaks down. Lose time and supplies fixing it.";
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Ox Injures Leg",
|
||||||
|
threshold: 15,
|
||||||
|
action: (gameState) => {
|
||||||
|
gameState.totalMileageWholeTrip -= 25;
|
||||||
|
gameState.amountSpentOnAnimals -= 20;
|
||||||
|
return "Ox injures leg. Slows you down rest of the trip.";
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Daughter Breaks Arm",
|
||||||
|
threshold: 20,
|
||||||
|
action: (gameState) => {
|
||||||
|
gameState.totalMileageWholeTrip -= 5 + Math.floor(Math.random() * 4);
|
||||||
|
gameState.amountSpentOnMiscellaneousSupplies -= 2 + Math.floor(Math.random() * 3);
|
||||||
|
return "Bad luck--your daughter broke her arm. You had to stop and use supplies to make a sling.";
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Ox Wanders Off",
|
||||||
|
threshold: 25,
|
||||||
|
action: (gameState) => {
|
||||||
|
gameState.totalMileageWholeTrip -= 17;
|
||||||
|
return "Ox wanders off--spend time looking for it.";
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Son Gets Lost",
|
||||||
|
threshold: 30,
|
||||||
|
action: (gameState) => {
|
||||||
|
gameState.totalMileageWholeTrip -= 10;
|
||||||
|
return "Your son gets lost---spend half the day looking for him.";
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Unsafe Water",
|
||||||
|
threshold: 35,
|
||||||
|
action: (gameState) => {
|
||||||
|
gameState.totalMileageWholeTrip -= Math.floor(Math.random() * 10) + 2;
|
||||||
|
return "Unsafe water--lose time looking for clean spring.";
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Heavy Rains",
|
||||||
|
threshold: 40,
|
||||||
|
action: (gameState) => {
|
||||||
|
gameState.amountSpentOnFood -= 10;
|
||||||
|
gameState.amountSpentOnMiscellaneousSupplies -= 15;
|
||||||
|
gameState.totalMileageWholeTrip -= Math.floor(Math.random() * 10) + 5;
|
||||||
|
return "Heavy rains---time and supplies lost.";
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Fire in Your Wagon",
|
||||||
|
threshold: 45,
|
||||||
|
action: (gameState) => {
|
||||||
|
gameState.amountSpentOnFood -= 40;
|
||||||
|
gameState.amountSpentOnAmmunition -= 400;
|
||||||
|
gameState.amountSpentOnMiscellaneousSupplies -= Math.floor(Math.random() * 8) + 3;
|
||||||
|
gameState.totalMileageWholeTrip -= 15;
|
||||||
|
return "There was a fire in your wagon—food and supplies damaged!";
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Lose Your Way in Heavy Fog",
|
||||||
|
threshold: 50,
|
||||||
|
action: (gameState) => {
|
||||||
|
gameState.totalMileageWholeTrip -= 10 + Math.floor(Math.random() * 5);
|
||||||
|
return "Lose your way in heavy fog—time is lost.";
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Wagon Swamped Fording River",
|
||||||
|
threshold: 55,
|
||||||
|
action: (gameState) => {
|
||||||
|
gameState.amountSpentOnFood -= 30;
|
||||||
|
gameState.amountSpentOnClothing -= 20;
|
||||||
|
gameState.totalMileageWholeTrip -= 20 + Math.floor(Math.random() * 20);
|
||||||
|
return "Wagon gets swamped fording river—lose food and clothes.";
|
||||||
|
},
|
||||||
|
}
|
||||||
|
// Add more events here...
|
||||||
|
];
|
||||||
|
|
||||||
|
this.totalThreshold = this.events.reduce((acc, event) => acc + event.threshold, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
generateEvent(gameState: GameState): string {
|
||||||
|
const randomEventNumber = Math.random() * this.totalThreshold;
|
||||||
|
let cumulativeThreshold = 0;
|
||||||
|
|
||||||
|
for (let event of this.events) {
|
||||||
|
cumulativeThreshold += event.threshold;
|
||||||
|
if (randomEventNumber < cumulativeThreshold) {
|
||||||
|
console.log(`Event triggered: ${event.name}`);
|
||||||
|
return event.action(gameState);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default GameEvents;
|
||||||
|
|
||||||
|
interface OregonEvent {
|
||||||
|
name: string,
|
||||||
|
threshold: number,
|
||||||
|
action: (gameState: GameState) => string
|
||||||
|
}
|
|
@ -31,6 +31,7 @@ class GameState {
|
||||||
tacticsChoiceWhenAttacked: number = 0;
|
tacticsChoiceWhenAttacked: number = 0;
|
||||||
actionChoiceForEachTurn: number = 0;
|
actionChoiceForEachTurn: number = 0;
|
||||||
fortOptionFlag: boolean = false;
|
fortOptionFlag: boolean = false;
|
||||||
|
death: boolean = false;
|
||||||
|
|
||||||
constructor(authorId: string) {
|
constructor(authorId: string) {
|
||||||
// Load existing session for authorId or create default values
|
// Load existing session for authorId or create default values
|
||||||
|
|
Loading…
Reference in New Issue