Compare commits

..

4 Commits

Author SHA1 Message Date
j 80a9ec5807 updated game state with death flag to end game 2024-03-25 23:53:42 -04:00
j abcce0985c inital commit of game events 2024-03-25 23:53:22 -04:00
j df6b24fc99 refactored source code with variable names in plaintext 2024-03-25 23:53:05 -04:00
j 6ed6d58174 original basic Source Code 2024-03-25 23:52:46 -04:00
4 changed files with 1561 additions and 0 deletions

717
OREGON.bas 100644
View File

@ -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

717
OREGONRefactor.bas 100644
View File

@ -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

View File

@ -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
}

View File

@ -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