forked from topherPedersen/OregonTrail1978
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathoregon_bas
More file actions
1402 lines (1302 loc) · 44.2 KB
/
Copy pathoregon_bas
File metadata and controls
1402 lines (1302 loc) · 44.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Print #2,"Loading: Oregon Trail"
1 REM ***********************************************
2 REM This is a adaptation of the original program to
3 REM be run in SuperBasic for Sinclair QL
5 REM by Alvaro Alea (2024, MAY 6)
6 REM by the way, I translate it to Spanish
7 REM ***********************************************
8 REM
10 REM PROGRAM NAME - OREGON 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
81 REM ========================================================
82 REM NOTE 1 = MODIFIED BY CHRISTOPHER PEDERSEN (AUG 10, 2018)
83 REM FOR COMPATIBILITY WITH THE CHIPMUNK BASIC INTERPRETER
84 REM CHIPMUNK BASIC: http://www.nicholson.com/rhn/basic/
85 REM ========================================================
90 REM ***IDENTIFICATION OF VARIABLES IN THE PROGRAM***
91 LET A% =0 : rem as Integer : REM = AMOUNT SPENT ON ANIMALS
92 LET B% =0 : rem as Integer : REM = AMOUNT SPENT ON AMMUNITION
93 REM LET B1 as Float : REM = ACTUAL RESPONSE TIME FOR INPUTTING "BANG"
94 REM LET B2 as Float : REM = CLOCK TIME AT END OF INPUTTING "BANG"
95 REM LET B3 as Float : REM = CLOCK TIME AT START OF INPUTTING "BANG"
96 LET C% =0 : rem as Integer : REM = AMOUNT SPENT ON CLOTHING
97 LET C1% =0: rem as uByte : REM = FLAG FOR INSUFFICIENT CLOTHING IN COLD WEATHER
98 REM Z$ = YES/N0 RESPONSE TO QUESTIONS
99 LET D1% =0: rem as uByte : REM = COUNTER IN GENERATING EVENTS
100 LET D3% =0: rem as uByte : REM = TURN NUMBER FOR SETTING DATE
101 REM D4 = CURRENT DATE
102 LET D9% =0: rem as uByte : REM = CHOICE OF SHOOTING EXPERTISE LEVEL
103 LET E% =0: rem as uByte : REM = CHOICE OF EATING
104 LET F% =0 : rem as Integer : REM = AMOUNT SPENT ON FOOD
105 LET F1% =0: rem as uByte : REM = FLAG FOR CLEARING SOUTH PASS
106 LET F2% =0: rem as uByte : REM = FLAG FOR CLEARING BLUE MOUNTAINS
107 REM LET F9 as Float : REM = FRACTION OF 2 WEEKS TRAVELED ON FINAL TURN
108 LET K8% =0: rem as uByte : REM = FLAG FOR INJURY
109 LET L1% =0: rem as uByte : REM = FLAG FOR BLIZZARD
110 LET M% =0: rem as uInteger : REM = TOTAL MILEAGE WHOLE TRIP
111 LET M1% =0 : rem as Integer : REM = AMOUNT SPENT ON MISCELLANEOUS SUPPLIES
112 LET M2% =0 : rem as Integer : REM = TOTAL MILEAGE UP THROUGH PREVIOUS TURN
113 REM LET M9% =0: rem as uByte : REM = FLAG FOR CLEARING SOUTH PASS IN SETTING MILEAGE
114 LET P% =0 : rem as integer : REM = AMOUNT SPENT ON ITEMS AT FORT
115 REM LET R1 as float : REM = RANDOM NUMBER IN CHOOSING EVENTS
116 LET S4% =0: rem as uByte : REM = FLAG FOR ILLNESS
117 LET S5% =0 : rem as Integer : REM = ""HOSTILITY OF RIDERS"" FACTOR
118 LET S6% =0: rem as uByte : REM = SHOOTING WORD SELECTOR
119 REM S$ = VARIATIONS OF SHOOTING WORD
120 LET T% =0 : rem as Integer : REM = CASH LEFT OVER AFTER INITIAL PURCHASES
121 LET T1% =0: rem as uByte : REM = CHOICE OF TACTICS WHEN ATTACKED
122 LET X% =0: rem as uByte : REM = CHOICE OF ACTION FOR EACH TURN
123 LET X1% =0: rem as uByte : REM = FLAG FOR FORT OPTION155 REM
125 REM LET mes$ as String
126 REM LET temp1 as Float
127 REM LET temp2 as Float
130 mode 8
131 OPEN #1,con_512x256a0x0
132 rem WINDOW #1,256,256,0,0
150 INK 4: PAPER 0: CLS: pause 1 : cls
155 gosub 9000 : REMark Language Selection
160 PRINT S_NEED_INST$ ;
170 REM DIM C$(5)
180 REM RANDOMIZE REMOVED
190 INPUT Z$
200 IF (Z$="N") THEN GOTO 690
205 IF (Z$="n") THEN GOTO 690
210 PRINT
220 PRINT
230 REM ***INSTRUCTIONS********************
240 PRINT S_I_001$
245 PRINT S_I_002$
250 PRINT S_I_003$
252 PRINT S_I_004$
255 PRINT S_I_005$
260 PRINT S_I_006$
265 PRINT S_I_007$
270 PRINT S_I_008$
275 PRINT S_I_009$
280 PRINT
290 PRINT S_I_010$
300 PRINT S_I_011$
305 GOSUB 7000
310 PRINT S_I_012$
315 PRINT S_I_013$
320 PRINT S_I_014$
340 PRINT S_I_015$
345 PRINT S_I_016$
350 PRINT S_I_017$
360 PRINT S_I_018$
365 PRINT S_I_019$
380 PRINT S_I_020$
385 PRINT S_I_021$
390 PRINT S_I_022$
410 PRINT S_I_023$
415 PRINT S_I_024$
420 PRINT S_I_025$
425 PRINT S_I_026$
430 PRINT S_I_027$
450 PRINT S_I_028$
455 PRINT S_I_029$
460 PRINT S_I_030$
462 PRINT S_I_031$
465 PRINT S_I_032$
467 GOSUB 7000
490 PRINT S_I_033$
495 PRINT S_I_034$
500 PRINT S_I_035$
502 PRINT S_I_036$
505 PRINT S_I_037$
530 PRINT
540 PRINT S_I_038$
545 PRINT S_I_039$
550 PRINT S_I_040$
555 PRINT S_I_041$
560 PRINT S_I_042$
565 PRINT S_I_043$
570 PRINT S_I_044$
575 PRINT S_I_045$
580 PRINT S_I_046$
582 PRINT
585 GOSUB 7000
590 PRINT S_I_047$
595 PRINT S_I_048$
600 PRINT S_I_049$
605 PRINT S_I_050$
610 PRINT S_I_051$
615 PRINT S_I_052$
620 PRINT S_I_053$
625 PRINT S_I_054$
630 PRINT
635 GOSUB 7000
640 PRINT S_I_055$
640 PRINT S_I_056$
650 PRINT S_I_057$
660 PRINT S_I_058$
665 PRINT S_I_059$
670 PRINT
680 PRINT S_I_060$
685 GOSUB 7000
690 CLS
700 PRINT
710 PRINT S_ACE_01$
712 PRINT S_ACE_02$
715 PRINT
720 PRINT S_ACE_03$
722 PRINT S_ACE_04$
725 PRINT S_ACE_05$
730 PRINT S_ACE_06$
732 PRINT S_ACE_07$
735 PRINT
740 PRINT S_ACE_08$
745 PRINT S_ACE_09$
750 PRINT S_ACE_10$
755 PRINT S_ACE_11$
760 INPUT D9
770 IF D9>5 THEN GOTO 790
775 if D9<=1 then d9=1
780 GOTO 810
785 REM I think that is 5 not 0
790 D9=5
800 REM ***INITIAL PURCHASES***
810 X1=-1
820 REM LINES 820-829 NOTE 1
823 D3=0
824 M9=0
825 M=0
826 F2=0
827 F1=0
828 S4=0
829 K8=0
830 CLS
850 PRINT S_HOW_MUCH_OX$
860 INPUT A
870 IF A >= 200 THEN GOTO 900
880 PRINT S_NOT_ENOUGHT$
890 GOTO 850
900 IF A <= 300 THEN GOTO 930
910 PRINT S_TOO_MUCH$
920 GOTO 850
930 PRINT S_HOW_MUCH_FOOD$
940 INPUT F
950 IF F >= 0 THEN GOTO 980
960 PRINT S_IMPOSSIBLE$
970 GOTO 930
980 PRINT S_HOW_MUCH_BULLET$
990 INPUT B
1000 IF B >= 0 THEN GOTO 1030
1010 PRINT S_IMPOSSIBLE$
1020 GOTO 980
1030 PRINT S_HOW_MUCH_CLOTHES$
1040 INPUT C
1050 IF C >= 0 THEN GOTO 1080
1060 PRINT S_IMPOSSIBLE$
1070 GOTO 1030
1080 PRINT S_HOW_MUCH_OTHERS$
1090 INPUT M1
1100 IF M1 >= 0 THEN GOTO 1130
1110 PRINT S_IMPOSSIBLE$
1120 GOTO 1080
1130 T=700-A-F-B-C-M1
1140 IF T >= 0 THEN GOTO 1170
1150 PRINT S_SPEND_MUCH_1$
1152 PRINT S_SPEND_MUCH_2$
1155 PRINT S_SPEND_MUCH_3$
1157 GOSUB 7000
1160 GOTO 830
1170 B=50*B
1180 PRINT S_AFTER_BUY_1$
1182 PRINT S_AFTER_BUY_2$ ; T ;
1185 PRINT S_AFTER_BUY_3$
1187 GOSUB 7000
1190 PRINT
1200 PRINT S_FIRST_DATE$
1210 PRINT
1220 GOTO 1750
1230 IF M >= 2040 THEN GOTO 5430:end if
1240 REM ***SETTING DATE***
1250 D3=D3+1
1260 PRINT
1270 PRINT S_MONDAY$ ;
1280 REM IF D3>10 THEN GOTO 1300
1290 rem ON D3-1 GOTO 1310, 1330, 1350, 1370, 1390, 1410, 1430, 1450, 1470, 1490, 1510, 1530, 1550, 1570, 1590, 1610, 1630, 1650, 1670, 1690
1300 REM ON D3-10 GOTO 1510, 1530, 1550, 1570, 1590, 1610, 1630, 1650, 1670, 1690
1310 if D3=1 then PRINT S_04_12$ ; : goto 1720
1330 if D3=2 then PRINT S_04_26$ ; : GOTO 1720
1350 if D3=3 then PRINT S_05_10$ ; : GOTO 1720
1370 if D3=4 then PRINT S_05_24$ ; : GOTO 1720
1390 if D3=5 then PRINT S_06_07$ ; : GOTO 1720
1410 if D3=6 then PRINT S_06_21$ ; : GOTO 1720
1430 if D3=7 then PRINT S_07_05$ ; : GOTO 1720
1450 if D3=8 then PRINT S_07_19$ ; : GOTO 1720
1470 if D3=9 then PRINT S_08_02$ ; : GOTO 1720
1490 if D3=10 then PRINT S_08_16$ ; : GOTO 1720
1510 if D3=11 then PRINT S_08_31$ ; : GOTO 1720
1530 if D3=12 then PRINT S_09_13$ ; : GOTO 1720
1550 if D3=13 then PRINT S_09_27$ ; : GOTO 1720
1570 if D3=14 then PRINT S_10_11$ ; : GOTO 1720
1590 if D3=15 then PRINT S_10_25$ ; : GOTO 1720
1610 if D3=16 then PRINT S_11_08$ ; : GOTO 1720
1630 if D3=17 then PRINT S_11_22$ ; : GOTO 1720
1650 if D3=18 then PRINT S_12_06$ ; : GOTO 1720
1670 if D3=19 then PRINT S_12_20$ ; : GOTO 1720
1690 PRINT S_TRAIL_TOO_LONG$
1700 PRINT S_FAMILY_DIES$
1710 GOTO 5170
1720 PRINT S_YEAR$
1730 PRINT
1740 REM ***BEGINNING EACH TURN***
1750 IF F >= 0 THEN GOTO 1770
1760 F=0
1770 IF B >= 0 THEN GOTO 1790
1780 B=0
1790 IF C >= 0 THEN GOTO 1810
1800 C=0
1810 IF M1 >= 0 THEN GOTO 1830
1820 M1=0
1830 IF F >= 13 THEN GOTO 1850
1840 PRINT S_FOOD_LOW$
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 GOTO 1950
1930 IF K8=1 THEN GOTO 1950
1940 GOTO 1990
1950 T=T-20
1960 IF T<0 THEN GOTO 5080
1970 PRINT S_BILL_DOCTOR$
1980 LET S4=0 : LET K8=S4
1990 IF M9=1 THEN GOTO 2020
2000 PRINT S_TOTAL_MILEAGE$ ;M
2010 GOTO 2040
2020 PRINT S_TOTAL_MILEAGE$ ; "950"
2030 M9=0
2040 REM LINES 2040-2050 NOTE 1
2041 PRINT S_FOOD$ ;F
2042 PRINT S_BULLETS$ ;B
2043 PRINT S_CLOTHING$ ;C
2044 PRINT S_MISC_SUPPLIES$ ;M1
2050 PRINT S_CASH$ ;T
2055 PRINT
2060 IF X1=-1 THEN GOTO 2160
2070 X1=X1*(-1)
2080 PRINT S_CHOOSE_12$ ;
2090 PRINT S_CHOOSE_3$
2100 INPUT X
2110 IF X>=3 THEN X=3 : GOTO 2270
2120 IF X<=1 THEN X=1 : GOTO 2270
2130 X=2 : GOTO 2230
2160 X1=X1*(-1)
2170 PRINT S_CHOOSE_23$
2180 INPUT X
2190 if X>=2 then x=3 : goto 2270
2220 X=2
2230 IF B>39 THEN GOTO 2270
2240 PRINT S_EJEM_BULLETS$
2250 X = 3
2270 rem CLS: REM ON X GOTO 2280,2530,2720
2271 SELECT ON X
2272 ON X=1
2273 GOTO 2280
2274 ON X=2
2275 GOTO 2530
2276 ON X=3
2277 GOTO 2720
2278 END SELECT
2280 PRINT S_AT_FORT$
2290 PRINT S_ENTER_HOW_MUCH$
2300 PRINT S_FOOD$ ;
2310 GOSUB 2330
2320 GOTO 2410
2330 INPUT P
2340 IF P<0 THEN GOTO 2400
2350 T=T-P
2360 IF T >= 0 THEN GOTO 2400
2370 PRINT S_DONT_HAVE_SUCH$
2380 T=T+P
2390 P=0
2400 RETURN
2410 F=F+2/3*P
2420 PRINT S_AMMUNITION$ ;
2430 GOSUB 2330
2440 LET B=INT(B+2/3*P*50)
2450 PRINT S_CLOTHING$ ;
2460 GOSUB 2330
2470 C=C+2/3*P
2480 PRINT S_MISC_SUPPLIES$ ;
2490 GOSUB 2330
2500 M1=M1+2/3*P
2510 M=M-45
2520 GOTO 2715
2530 PRINT
2535 PRINT S_HUNTING$
2540 IF B>39 THEN GOTO 2570
2550 PRINT S_EJEM_BULLETS$
2560 GOTO 2080
2570 M=M-45
2580 GOSUB 6140
2590 IF B1 <= 1 THEN GOTO 2660
2595 REM FIXME: The next RND not seen to be good
2600 IF 100*RND<10*B1 THEN GOTO 2715: end if
2610 F=F+48-2*B1
2620 PRINT S_HUNT_1$
2630 B=B-10-3*B1
2640 GOTO 2715
2650 REM **BELLS IN LINE 2660**
2660 PRINT S_HUNT_2$
2670 PRINT S_HUNT_3$
2680 F=F+52+RND*6
2690 B=B-10-RND*4
2700 GOTO 2715
2710 PRINT S_HUNT_4$
2715 gosub 7000
2720 IF F >= 13 THEN GOTO 2740
2730 GOTO 5060
2740 PRINT
2745 PRINT S_EAT1$
2750 PRINT S_EAT2$
2752 PRINT S_EAT3$
2755 PRINT S_EAT4$
2760 PRINT S_EAT5$
2770 INPUT E
2780 IF E>3 THEN GOTO 2750
2790 IF E<1 THEN GOTO 2750
2800 LET E=INT(E)
2810 LET F=F-8-5*E
2820 IF F >= 0 THEN GOTO 2860
2830 F=F+8+5*E
2840 PRINT S_EAT_MUCH$
2850 GOTO 2750
2860 LET M=M+200+(A-220)/5+10*RND
2870 REM LINES 2870-2872 NOTE 1
2871 C1=0
2872 L1=C1
2880 REM ***RIDERS ATTACK***
2889 REM LINE 2890 NOTE 1
2890 temp1=RND*10
2892 temp2= (((M/100)-4)^2+72) / (((M/100)-4)^2+12) -1
2895 IF temp1>temp2 THEN GOTO 3550
2900 PRINT S_RIDERS_01$ ;
2910 S5=0
2919 REM ALL RND(-1) FUNCTION CALLS HAVE BEEN CHANGED TO RND(1) BY C.D.P.
2920 IF RND<0.8 THEN GOTO 2950
2930 PRINT S_RIDERS_02$ ;
2940 S5=1
2950 PRINT S_RIDERS_03$
2960 PRINT S_RIDERS_04$
2970 PRINT S_RIDERS_05$
2980 IF RND>0.2 THEN GOTO 3000
2990 S5=1-S5
3000 INPUT T1
3010 IF T1<1 THEN GOTO 2970
3020 IF T1>4 THEN GOTO 2970
3030 T1=INT(T1)
3040 IF S5=1 THEN GOTO 3330
3050 IF T1>1 THEN GOTO 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 GOTO 3240
3120 GOSUB 6140
3130 B=B-B1*40-80
3140 IF B1>1 THEN GOTO 3170
3150 PRINT S_RIDERS_11$
3160 GOTO 3470
3170 IF B1 <= 4 THEN GOTO 3220
3180 PRINT S_RIDERS_12$
3190 K8=1
3200 PRINT S_RIDERS_13$
3210 GOTO 3470
3220 PRINT S_RIDERS_14$
3230 GOTO 3470
3240 IF T1>3 THEN GOTO 3290
3250 IF RND>0.8 THEN GOTO 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 GOTO 3370
3340 M=M+15
3350 A=A-10
3360 GOTO 3470
3370 IF T1>2 THEN GOTO 3410
3380 M=M-5
3390 B=B-100
3400 GOTO 3470
3410 IF T1>3 THEN GOTO 3430
3420 GOTO 3470
3430 M=M-20
3440 GOTO 3470
3450 PRINT S_RIDERS_21$
3460 GOTO 3550
3470 IF S5=0 THEN GOTO 3500
3480 PRINT S_RIDERS_22$
3490 GOTO 3550
3500 PRINT S_RIDERS_23$
3510 IF B >= 0 THEN GOTO 3550
3520 PRINT S_RIDERS_24$
3530 GOTO 5170
3540 REM ***SELECTION OF EVENTS***
3550 LET D1=0
3560 RESTORE
3570 R1=100*RND
3580 LET D1=D1+1
3590 IF D1=16 THEN GOTO 4670
3600 READ D
3610 IF R1>D THEN GOTO 3580
3620 DATA 6,11,13,15,17,22,32,35,37,42,44,54,64,69,95
3625 PRINT S_EVENT$
3630 REM IF D1>10 THEN GOTO 3650
3640 REM ON D1-1 GOTO 3660,3700,3740,3790,3820,3850,3880,3960,4130,4190
3641 if D1=0 then goto 3660
3642 if D1<=1 then goto 3700
3643 if D1<=2 then goto 3740
3644 if D1<=3 then goto 3790
3645 if D1<=4 then goto 3820
3646 if D1<=5 then goto 3850
3647 if D1<=6 then goto 3960
3648 if D1<=7 then goto 4130
3649 if D1<=8 then goto 4190
3650 REM ON D1-11 GOTO 4220,4290,4340,4560,4610,4670
3654 if D1<=9 then goto 4220
3655 if D1<=10 then goto 4290
3656 if D1<=11 then goto 4340
3657 if D1<=12 then goto 4560
3658 if D1<=13 then goto 4610
3659 goto 4670
3660 PRINT S_WAGON_BREAK$
3670 LET M=M-15-5*RND
3680 LET M1=M1-8
3690 GOTO 4710
3700 PRINT S_OX_INJURED$
3710 LET M=M-25
3720 LET A=A-20
3730 GOTO 4710
3740 PRINT S_BROKE_ARM$
3750 PRINT S_MAKE_SLING$
3760 M=M-5-4*RND
3770 M1=M1-2-3*RND
3780 GOTO 4710
3790 PRINT S_OX_WANDER$
3800 M=M-17
3810 GOTO 4710
3820 PRINT S_SON_LOST$
3830 M=M-10
3840 GOTO 4710
3850 PRINT S_UNSAFE_WATER$
3860 LET M=M-10*RND-2
3870 GOTO 4710
3880 IF M>950 THEN GOTO 4490
3890 PRINT S_HEAVY_RAINS$
3910 F=F-10
3920 B=B-500
3930 M1=M1-15
3940 M=M-10*RND-5
3950 GOTO 4710
3960 PRINT S_BANDITS_ATTACK$
3970 GOSUB 6140
3980 B=B-20*B1
3990 IF B >= 0 THEN GOTO 4030
4000 PRINT S_OUT_BULLETS$
4010 T=T/3
4020 GOTO 4040
4030 IF B1 <= 1 THEN GOTO 4100
4040 PRINT S_SHOT_LEG$
4050 K8=1
4060 PRINT S_BETTER_SEE_DOC$
4070 M1=M1-5
4080 A=A-20
4090 GOTO 4710
4100 PRINT S_QUICKY$
4110 PRINT S_GOT_EM$
4120 GOTO 4710
4130 PRINT S_WAGON_FIRE$
4140 F=F-40
4150 B=B-400
4160 LET M1=M1-RND*8-3
4170 M=M-15
4180 GOTO 4710
4190 PRINT S_LOSE_FOG$
4200 M=M-10-5*RND
4210 GOTO 4710
4220 PRINT S_KILL_SNAKE$
4230 B=B-10
4240 M1=M1-5
4250 IF M1 >= 0 THEN GOTO 4280
4260 PRINT S_SNAKE_KILL$
4270 GOTO 5170
4280 GOTO 4710
4290 PRINT S_WAGON_SWAMPED$
4300 F=F-30
4310 C=C-20
4320 M=M-20-20*RND
4330 GOTO 4710
4340 PRINT S_WILD_ANIMALS$
4350 GOSUB 6140
4360 IF B>39 THEN GOTO 4410
4370 PRINT S_LOW_BULLETS$
4380 PRINT S_WOLVE_OVER$
4390 K8=1
4400 GOTO 5120
4410 IF B1>2 THEN GOTO 4440
4420 PRINT S_NICE_SHOT$
4430 GOTO 4450
4440 PRINT S_SLOW_DRAW$
4450 B=B-20*B1
4460 C=C-B1*4
4470 F=F-B1*8
4480 GOTO 4710
4490 PRINT S_COLD_WEATHER$ ;
4500 IF C>22+4*RND THEN GOTO 4530
4510 PRINT S_DONT$ ;
4520 C1=1
4530 PRINT S_NO_CLOTHS$
4540 IF C1=0 THEN GOTO 4710
4550 GOTO 6300
4560 PRINT S_HAIL_STORM$
4570 M=M-5-RND*10
4580 B=B-200
4590 M1=M1-4-RND*3
4600 GOTO 4710
4610 IF E=1 THEN GOTO 6300
4620 IF E=3 THEN GOTO 4650
4630 IF RND>0.25 THEN GOTO 6300
4640 GOTO 4710
4650 IF RND<0.5 THEN GOTO 6300
4660 GOTO 4710
4670 PRINT S_HELPFUL_INDIANS$
4680 F=F+14
4690 GOTO 4710
4700 REM ***MOUNTAINS***
4710 GOSUB 7000
4712 IF M <= 950 THEN GOTO 1230
4719 REM LINE 4720 NOTE 1
4720 IF RND*10>9-((M/100-15)^2+72)/((M/100-15)^2+12) THEN GOTO 4860
4730 PRINT S_RUGGED_M$
4740 IF RND>0.1 THEN GOTO 4780
4750 PRINT S_LOST_TRAIL$
4760 M=M-60
4770 GOTO 4860
4780 IF RND>0.11 THEN GOTO 4840
4790 PRINT S_WAGON_DAMAGED$
4800 M1=M1-5
4810 B=B-200
4820 M=M-20-30*RND
4830 GOTO 4860
4840 PRINT S_GOING_SLOW$
4850 M=M-45-RND/0.02
4860 IF F1=1 THEN GOTO 4900
4870 F1=1
4880 IF RND<0.8 THEN GOTO 4970
4890 PRINT S_YOU_MADE$
4900 IF M<1700 THEN GOTO 4940
4910 IF F2=1 THEN GOTO 4940
4920 F2=1
4930 IF RND<0.7 THEN GOTO 4970
4940 IF M>950 THEN GOTO 1230
4950 M9=1
4960 GOTO 1230
4970 PRINT S_BLIZZARD$
4980 L1=1
4990 F=F-25
5000 M1=M1-10
5010 B=B-300
5020 M=M-30-40*RND
5030 IF C<18+2*RND THEN GOTO 6300
5040 GOTO 4940
5050 REM ***DYING***
5060 PRINT S_DIE_NO_FOOD$
5070 GOTO 5170
5080 LET T=0
5090 PRINT S_DIE_NO_DOCTOR$
5100 GOTO 5120
5110 PRINT S_DIE_NO_MEDICAL$
5120 PRINT S_DIE_YOU$ ;
5130 IF K8=1 THEN GOTO 5160
5140 PRINT S_DIE_ILL1$
5150 GOTO 5170
5160 PRINT S_DIE_INJURIES$
5170 PRINT
5175 GOSUB 7000
5180 PRINT S_DIE_01$
5190 PRINT S_DIE_02$
5200 PRINT
5210 PRINT S_DIE_03$
5220 INPUT Z$
5230 PRINT S_DIE_04$
5240 INPUT Z$
5250 PRINT S_DIE_05$
5260 INPUT Z$
5270 IF (Z$<>"no" AND Z$<>"NO" and z$<>"n" and z$<>"N") THEN GOTO 5310
5280 PRINT S_DIE_06$
5290 PRINT
5300 GOTO 5330
5310 PRINT S_DIE_07$
5320 GOSUB 7000
5330 PRINT S_DIE_08$
5340 PRINT S_DIE_09$
5350 PRINT S_DIE_10$
5360 PRINT
5370 PRINT
5380 PRINT S_DIE_11$
5390 PRINT
5400 PRINT S_DIE_12$
5409 REM 'STOP' COMMAND BELOW CHANGED TO 'END' BY C.D.P.
5410 GOTO 7100
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 S_END1$
5480 PRINT S_END2$
5490 PRINT S_END3$
5500 PRINT
5510 F9=INT(F9*14)
5520 D3=D3*14+F9
5530 F9=F9+1
5540 IF F9<8 THEN GOTO 5560
5550 F9=F9-7
5560 ON F9 GOTO 5570,5590,5610,5630,5650,5670,5690
5570 PRINT S_CMONDAY$ ;
5580 GOTO 5700
5590 PRINT S_CTUESDAY$;
5600 GOTO 5700
5610 PRINT S_CWEDNESDAY$;
5620 GOTO 5700
5630 PRINT S_CTHRUSDAY$;
5640 GOTO 5700
5650 PRINT S_CFRIDAY$;
5660 GOTO 5700
5670 PRINT S_CSATURDAY$ ;
5680 GOTO 5700
5690 PRINT S_CSUNDAY$ ;
5700 IF D3>124 THEN GOTO 5740
5710 D3=D3-93
5720 LET mes$= S_CJULY$
5730 GOTO 5920
5740 IF D3>155 THEN GOTO 5780
5750 D3=D3-124
5760 LET mes$= S_CAUGUST$
5770 GOTO 5920
5780 IF D3>185 THEN GOTO 5820
5790 D3=D3-155
5800 LET mes$= S_CSEPTEMBER$
5810 GOTO 5920
5820 IF D3>216 THEN GOTO 5860
5830 D3=D3-185
5840 LET mes$= S_COCTOBER$
5850 GOTO 5920
5860 IF D3>246 THEN GOTO 5900
5870 D3=D3-216
5880 LET mes$= S_CNOVEMBER$
5890 GOTO 5920
5900 D3=D3-246
5910 LET mes$=S_CDECEMBER$
5920
5921 PRINT mes$; D3; S_YEAR$: REM English
5922 PRINT D3; mes$; S_YEAR$: REM Spanish
5925 PRINT
5930 REM LINE 5930 NOTE 1
5940 IF B>0 THEN GOTO 5960
5950 LET B=0
5960 IF C>0 THEN GOTO 5980
5970 LET C=0
5980 IF M1>0 THEN GOTO 6000
5990 LET M1=0
6000 IF T>0 THEN GOTO 6020
6010 LET T=0
6020 IF F>0 THEN GOTO 6040
6030 LET F=0
6040 REM LINES 6040-6045 NOTE 1
6041 PRINT S_FOOD$ ;F
6042 PRINT S_BULLETS$ ;B
6043 PRINT S_CLOTHING$ ;C
6044 PRINT S_MISC_SUPPLIES$ ;M1
6045 PRINT S_CASH$ ;T
6050 GOSUB 7000
6060 PRINT S_END_01$
6062 PRINT
6064 PRINT S_END_02$
6066 PRINT
6068 PRINT S_END_03$
6070 PRINT S_END_04$
6080 PRINT
6090 PRINT S_END_05$
6095 PRINT S_END_06$
6100 PRINT
6110 PRINT S_END_07$
6120 GOTO 7100
6130 REM ***SHOOTING SUB-ROUTINE***
6131 REM THE METHOD OF TIMING THE SHOOTING (LINES 6210-6240)
6132 REM WILL VARY FROM SYSTEM TO SYSTEM. FOR EXAMPLE, H-P
6133 REM USERS WILL PROBABLY PREFER TO USE THE 'ENTER' STATEMENT.
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 ACCOMMODATE THIS BY EITHER INCREASING
6137 REM OR DECREASING THE 'SHOOTING' TIME RECORDED BY THE SYSTEM
6140 DIM S$(4,4)
6150 S$(1)="bang"
6160 S$(2)="blam"
6170 S$(3)="pow"
6180 S$(4)="wham"
6182 B3 = date
6185 for a=1 to 4
6187 S6=INT(RND*4+0.5)
6188 if S6=0 then goto 6187
6190 PRINT S_TYPE$ ; S$(S6)
6192 INPUT Z$
6195 IF Z$<>S$(S6) THEN b3=b3-9
6197 next a
6200 B2 = date
6210 B1 = B2 - B3
6241 REM /50 - (D9-1)
6242 rem PRINT "B3=";B3
6243 rem PRINT "B2=";B2
6244 rem PRINT "Seconds=";B1
6245 rem PRINT "DIFICULT=";D9
6246 B1= int (B1 - (D9*2))
6247 rem PRINT "Result=";B1
6248 rem GOSUB 7000
6250 PRINT
6255 IF B1>0 THEN GOTO 6260
6257 B1=0
6260 if B1>9 then B1=9
6280 RETURN
6282 REM so B1 = 0 => to fast
6285 REM B1 = 9 => not correct
6287 REM 1 <= B1 <= 8 diferent quality.
6290 REM ***ILLNESS SUB-ROUTINE***
6300 IF 100*RND<10+35*(E-1) THEN GOTO 6370
6309 REM LINE 6310 NOTE 1
6310 IF 100*RND<100-(40/4^(E-1)) THEN GOTO 6410
6320 PRINT S_ILL_SERIOUS$
6330 PRINT S_ILL_MEDICAL$
6340 M1=M1-10
6350 S4=1
6360 GOTO 6440
6370 PRINT S_ILL_WILD$
6380 M=M-5
6390 M1=M1-2
6400 GOTO 6440
6410 PRINT S_ILL_BAD$
6420 M=M-5
6430 M1=M1-5
6440 IF M1<0 THEN GOTO 5110
6450 IF L1=1 THEN GOTO 4940
6460 GOTO 4710
6800 END
6900 REM Routines by Alea not in original
7000 PRINT
7010 PRINT S_PRESS_KEY$
7020 REPEAT wait
7021 IF INKEY$<>"" THEN EXIT wait
7022 REM WAIT Until the key isn't pressed any more.
7025 end rep wait
7030 PAUSE 0 : PAUSE 0
7040 CLS
7060 RETURN
7100 PRINT
7110 PRINT S_OTHER_PLAY$
7120 INPUT Z$
7130 if Z$<>"N" AND Z$<>"n" THEN GOTO 10
7140 NEW
9000 REM Language Selection
9010 print "Pulsa 1 para idioma Espanol"
9020 print "Press 2 for English Language"
9030 repeat x
9040 a$=inkey$
9050 if a$="1" then gosub 11000 : exit x
9060 if a$="2" then gosub 10000 : exit x
9070 end repeat x
9080 CLS
9090 return
10000 REM English Definitions.
10001 LET S_NEED_INST$ ="DO YO NEED INSTRUCTIONS(Y/N)"
10002 LET S_PRESS_KEY$ ="PRESS ANY KEY"
10003 LET S_I_001$ ="THIS PROGRAM SIMULATES A TRIP "
10004 LET S_I_002$ ="OVER THE OREGON TRAIL FROM"
10005 LET S_I_003$ ="INDEPENDENCE, MISSOURI TO"
10006 LET S_I_004$ ="OREGON CITY, OREGON IN"
10007 LET S_I_005$ ="1847."
10008 LET S_I_006$ ="YOUR FAMILY OF FIVE WILL COVER"
10009 LET S_I_007$ ="THE 2040 MILE OREGON TRAIL"
10010 LET S_I_008$ ="IN 5-6 MONTHS --- IF YOU MAKE"
10011 LET S_I_009$ ="IT ALIVE."
10012 LET S_I_010$ ="YOU HAD SAVED $900 TO SPEND FOR THE"
10013 LET S_I_011$ ="TRIP, AND YOU'VE JUST PAID $200 FOR A WAGON."
10014 LET S_I_012$ ="YOU WILL NEED TO SPEND THE REST"
10015 LET S_I_013$ ="OF YOUR MONEY ON THE FOLLOWING"
10016 LET S_I_014$ ="ITEMS:"
10017 LET S_I_015$ ="OXEN - YOU CAN SPEND $200-$300"
10018 LET S_I_016$ =" ON YOUR TEAM, THE MORE YOU"
10019 LET S_I_017$ =" SPEND,THE FASTER YOU'LL GO"
10020 LET S_I_018$ =" BECAUSE YOU'LL HAVE BETTER"
10021 LET S_I_019$ =" ANIMALS"
10022 LET S_I_020$ ="FOOD - THE MORE YOU HAVE, THE "
10023 LET S_I_021$ =" LESS CHANCE THERE IS OF"
10024 LET S_I_022$ =" GETTING SICK"
10025 LET S_I_023$ ="AMMUNITION - $1 BUYS A BELT OF"
10026 LET S_I_024$ =" 50 BULLETS, YOU WILL NEED"
10027 LET S_I_025$ =" BULLETS FOR ATTACKS BY"
10028 LET S_I_026$ =" ANIMALS AND BANDITS, AND"
10029 LET S_I_027$ =" FOR HUNTING FOOD"
10030 LET S_I_028$ ="CLOTHING - THIS IS ESPECIALLY"
10031 LET S_I_029$ =" IMPORTANT FOR THE COLD"
10032 LET S_I_030$ =" WEATHER YOU WILL ENCOUNTER"
10033 LET S_I_031$ =" WHEN CROSSING THE"
10034 LET S_I_032$ =" MOUNTAINS"
10035 LET S_I_033$ ="MISCELLANEOUS SUPPLIES - THIS"
10036 LET S_I_034$ =" INCLUDES MEDICINE AND"
10037 LET S_I_035$ =" OTHER THINGS YOU WILL NEED"
10038 LET S_I_036$ =" FOR SICKNESS AND EMERGENCY"
10039 LET S_I_037$ =" REPAIRS"
10040 LET S_I_038$ ="YOU CAN SPEND ALL YOUR MONEY"
10041 LET S_I_039$ =" BEFORE YOU START YOUR TRIP -"
10042 LET S_I_040$ ="OR YOU CAN SAVE SOME OF YOUR"
10043 LET S_I_041$ =" CASH TO SPEND AT FORTS ALONG"
10044 LET S_I_042$ ="THE WAY WHEN YOU RUN LOW. "
10045 LET S_I_043$ ="HOWEVER, ITEMS COST MORE AT"
10046 LET S_I_044$ ="THE FORTS. YOU CAN ALSO GO"
10047 LET S_I_045$ =" HUNTING ALONG THE WAY TO GET"
10048 LET S_I_046$ ="MORE FOOD."
10049 LET S_I_047$ ="WHENEVER YOU HAVE TO USE YOUR"
10050 LET S_I_048$ ="TRUSTY RIFLE ALONG THE WAY,"
10051 LET S_I_049$ ="YOU WILL BE TOLD TO TYPE IN "
10052 LET S_I_050$ ="FOUR WORDS (THAT SOUNDS LIKE A "
10053 LET S_I_051$ ="GUN SHOT). THE FASTER YOU "
10054 LET S_I_052$ ="TYPE IN THE WORD AND HIT THE"
10055 LET S_I_053$ ="'RETURN' KEY, THE BETTER "
10056 LET S_I_054$ ="LUCK YOU'LL HAVE WITH YOUR GUN."
10057 LET S_I_055$ ="AT EACH TURN, ALL ITEMS ARE "
10058 LET S_I_056$ ="SHOWN IN DOLLAR AMOUNTS"
10059 LET S_I_057$ ="EXCEPT BULLETS"
10060 LET S_I_058$ ="WHEN ASKED TO ENTER MONEY "
10061 LET S_I_059$ ="AMOUNTS, DON'T USE A ''$."
10062 LET S_I_060$ ="GOOD LUCK!!!"
10063 LET S_ACE_01$ ="HOW GOOD A SHOT ARE YOU WITH "
10064 LET S_ACE_02$ ="YOUR RIFLE?"
10065 LET S_ACE_03$ =" (1) ACE MARKSMAN"
10066 LET S_ACE_04$ =" (2) GOOD SHOT"
10067 LET S_ACE_05$ =" (3) FAIR TO MIDDLIN'"
10068 LET S_ACE_06$ =" (4) NEED MORE PRACTICE"
10069 LET S_ACE_07$ =" (5) SHAKY KNEES"
10070 LET S_ACE_08$ ="ENTER ONE OF THE ABOVE -- THE"
10071 LET S_ACE_09$ ="BETTER YOU CLAIM YOU ARE, THE"
10072 LET S_ACE_10$ ="FASTER YOU'LL HAVE TO BE WITH"
10073 LET S_ACE_11$ ="YOUR GUN TO BE SUCCESSFUL."
10074 LET S_HOW_MUCH_OX$ ="HOW MUCH DO YOU WANT TO SPEND ON YOUR OXEN TEAM"
10075 LET S_HOW_MUCH_FOOD$ ="HOW MUCH DO YOU WANT TO SPEND ON FOOD"
10076 LET S_HOW_MUCH_BULLET$ ="HOW MUCH DO YOU WANT TO SPEND ON AMMUNITION"
10077 LET S_HOW_MUCH_CLOTHES$ ="HOW MUCH DO YOU WANT TO SPEND ON CLOTHING"
10078 LET S_HOW_MUCH_OTHERS$ ="HOW MUCH DO YOU WANT TO SPEND ON MISCELLANEOUS SUPPLIES"
10079 LET S_NOT_ENOUGHT$ ="NOT ENOUGH"
10080 LET S_TOO_MUCH$ ="TOO MUCH"
10081 LET S_SPEND_MUCH_1$ ="YOU OVERSPENT--YOU "
10082 LET S_SPEND_MUCH_2$ ="ONLY HAD $700 TO SPEND."
10083 LET S_SPEND_MUCH_3$ ="BUY AGAIN"
10084 LET S_AFTER_BUY_1$ ="AFTER BUY"
10085 LET S_AFTER_BUY_2$ ="YOU NOW HAVE "
10086 LET S_AFTER_BUY_3$ =" DOLLARS LEFT"
10087 LET S_IMPOSSIBLE="IMPOSSIBLE"
10088 LET S_FOOD$ ="FOOD: "
10089 LET S_BULLETS$ ="BULLETS: "
10090 LET S_AMMUNITION$ ="AMMUNITION: "
10091 LET S_CLOTHING$ ="CLOTHING: "
10092 LET S_MISC_SUPPLIES$ ="MISC. SUPPLIES: "
10093 LET S_CASH$ ="CASH: $"
10094 LET S_TOTAL_MILEAGE$ ="TOTAL MILEAGE: "
10095 LET S_FOOD_LOW$ ="YOU'D BETTER DO SOME HUNTING OR BUY FOOD AND SOON!!!!"
10096 LET S_BILL_DOCTOR$ ="DOCTOR'S BILL IS $20"
10097 LET S_EAT1$ ="***EATING***"
10098 LET S_EAT2$ ="DO YOU WANT TO EAT:"
10099 LET S_EAT3$ ="(1) POORLY"
10100 LET S_EAT4$ ="(2) MODERATELY"
10101 LET S_EAT5$ ="(3) WELL"
10102 LET S_EAT_MUCH$ ="YOU CAN'T EAT THAT WELL"
10103 LET S_CHOOSE_23$ ="DO YOU WANT TO (1) HUNT, OR (2) CONTINUE"
10104 LET S_CHOOSE_12$ ="DO YOU WANT TO (1) STOP AT THE NEXT FORT, (2) HUNT, "
10105 LET S_CHOOSE_3$ ="OR (3) CONTINUE"
10106 LET S_TYPE$ ="TYPE "
10107 LET S_EJEM_BULLETS$ ="TOUGH --- YOU NEED MORE BULLETS TO GO HUNTING"
10108 LET S_AT_FORT$ ="***STOPPING AT FORT***"
10109 LET S_ENTER_HOW_MUCH$ ="ENTER WHAT YOU WISH TO SPEND ON THE FOLLOWING"
10110 LET S_DONT_HAVE_SUCH$ ="YOU DON'T HAVE THAT MUCH -- KEEP YOUR SPENDING DOWN"
10111 LET S_HUNTING$ ="***HUNTING***"
10112 LET S_HUNT_1$ ="NICE SHOT -- RIGHT ON TARGET--GOOD EATIN' TONIGHT!!"
10113 LET S_HUNT_2$ ="RIGHT BETWEEN THE EYES --- YOU GOT A BIG ONE!!!!"
10114 LET S_HUNT_3$ ="FULL BELLIES TONIGHT!"
10115 LET S_HUNT_4$ ="YOU MISSED --- AND YOUR DINNER GOT AWAY....."