-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch-for-the-lost-ark.inf
4155 lines (3941 loc) · 136 KB
/
search-for-the-lost-ark.inf
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
!% -~S
!% $OMIT_UNUSED_ROUTINES=1
!% $ZCODE_LESS_DICT_DATA=1
!% $MAX_ABBREVS=96
!========================================
! Search for the Lost Ark
! Copyright © 2023 Garry Francis
!========================================
!Constant DEBUG;
Abbreviate "freshly-turned earth";
Abbreviate "Ark of the Covenant";
Abbreviate "Father Alucard";
Abbreviate "ou'll have to ";
Abbreviate "Father Matisse";
Abbreviate "You'll need";
Abbreviate "wooden door";
Abbreviate "diving suit";
Abbreviate "There's no";
Abbreviate " something";
Abbreviate "You can't ";
Abbreviate " through";
Abbreviate " on the ";
Abbreviate "already ";
Abbreviate " in the ";
Abbreviate " to the ";
Abbreviate " of the ";
Abbreviate "vicarage";
Abbreviate "You're ";
Abbreviate " shall ";
Abbreviate "steeple";
Abbreviate " first.";
Abbreviate " have ";
Abbreviate " your ";
Abbreviate " again";
Abbreviate "notice";
Abbreviate " from ";
Abbreviate "church";
Abbreviate "ladder";
Abbreviate "water";
Abbreviate "'And ";
Abbreviate "Moses";
Abbreviate " like";
Abbreviate ", but";
Abbreviate "round";
Abbreviate " the ";
Abbreviate "north";
Abbreviate ". It ";
Abbreviate " with";
Abbreviate "Bible";
Abbreviate " are ";
Abbreviate " you ";
Abbreviate "ould ";
Abbreviate "thing";
Abbreviate " what";
Abbreviate "It's ";
Abbreviate "under";
Abbreviate " can ";
Abbreviate "?^A: ";
Abbreviate ". The";
Abbreviate " that";
Abbreviate " was ";
Abbreviate " and ";
Abbreviate "here";
Abbreviate "ight";
Abbreviate " you";
Abbreviate "ing ";
Abbreviate " to ";
Abbreviate "The ";
Abbreviate "You ";
Abbreviate "his ";
Abbreviate ".^* ";
Abbreviate ", so";
Abbreviate "tion";
Abbreviate " of ";
Abbreviate "n't ";
Abbreviate "side";
Abbreviate " for";
Abbreviate " is ";
Abbreviate "'s ";
Abbreviate "You";
Abbreviate "re ";
Abbreviate "one";
Abbreviate "en ";
Abbreviate "ing";
Abbreviate "and";
Abbreviate " be";
Abbreviate "out";
Abbreviate "God";
Abbreviate "ly ";
Abbreviate "ave";
Abbreviate " in";
Abbreviate "ver";
Abbreviate "ear";
Abbreviate "ent";
Abbreviate ".^^";
Abbreviate "all";
Abbreviate "rea";
Abbreviate "est";
Abbreviate " a ";
Abbreviate " it";
Abbreviate "the";
Abbreviate "ed ";
Abbreviate ", ";
Abbreviate ". ";
Abbreviate "s.";
Constant Story "Search for the Lost Ark";
#Ifv5;
Zcharacter table + '@{A9}'; !Add copyright symbol
Constant Headline "^Copyright @{A9} 2023 Garry Francis^Type ABOUT for further info and credits.^^";
Constant ANDRE "Andr@'e";
Constant RESUME "resum@'e";
Constant SLAEGAN "sl@aegan";
#Ifnot;
Constant Headline "^Copyright (c) 2023 Garry Francis^Type ABOUT for further info and credits.^^";
Constant ANDRE "Andre";
Constant RESUME "resume";
Constant SLAEGAN "slaegan";
#Endif;
Array UUID_ARRAY string "UUID://20c07a3d-6486-4e59-a560-a606edecf9e0//";
#Ifdef UUID_ARRAY;
#Endif;
Release 1;
Serial "230629";
!Inform 6 constants
Constant AMUSING_PROVIDED;
Constant DEATH_MENTION_UNDO;
Constant MAX_CARRIED = 10;
Constant NO_SCORE;
!Puny constants
Constant CUSTOM_ABBREVIATIONS;
Constant OPTIONAL_EXTENDED_METAVERBS;
Constant OPTIONAL_EXTENDED_VERBSET;
Constant OPTIONAL_FULL_DIRECTIONS;
#Ifv5;
Constant OPTIONAL_PROVIDE_UNDO;
#Endif;
Constant RUNTIME_ERRORS 0;!0 for release, 2 for debug
!PunyInform static messages
Constant MSG_ATTACK_DEFAULT "When the Earth was filled with violence, God brought about the great flood. Do not provoke Him or He may flood the Earth again. Save your violence until you really need it.";
Constant MSG_MILD_DEFAULT "When the Lord said, 'Thou shalt swear by his name', this wasn't quite what he meant.";
Constant MSG_PARSER_NO_INPUT "You need to enter a command.";
Constant MSG_PARSER_UNKNOWN_VERB "That's not a verb I recognise.";
Constant MSG_PRAY_DEFAULT "You pray to the Lord in the hope that he will guide you in your quest.";
Constant MSG_SING_DEFAULT "You start to sing a hymn, but realise this isn't going to help you on your quest. Nevertheless, you feel better.";
Constant MSG_SORRY_DEFAULT "Oh, don't apologise.";
Constant MSG_STRONG_DEFAULT "When God said 'Swear unto me', this wasn't what he meant. Wash your mouth out with soap and water.";
Constant MSG_SWIM_DEFAULT "Swimming requires water. Take a look around. Do you see any water here?";
Constant MSG_TAKE_YOURSELF "That would be a clever trick.";
Constant MSG_THINK_DEFAULT "You wonder how you ever got into this predicament. On reflection, you think it must be the Lord's way of making you stronger.";
!PunyInform dynamic messages
Constant MSG_CLOSE_NOT_OPEN 1000;
Constant MSG_LOCK_ALREADY_LOCKED 1001;
Constant MSG_LOCK_CLOSE_FIRST 1002;
Constant MSG_LOCK_KEY_DOESNT_FIT 1003;
Constant MSG_UNLOCK_ALREADY_UNLOCKED 1004;
Constant MSG_UNLOCK_KEY_DOESNT_FIT 1005;
Constant MSG_AUTO_TAKE_NOT_HELD 1006;
Constant MSG_DIG_NO_USE 1007;
Constant MSG_JUMP 1008;
Constant MSG_LISTEN_DEFAULT 1009;
Constant MSG_SMELL_DEFAULT 1010;
Constant MSG_TAKE_SCENERY 1011;
Constant MSG_TAKE_STATIC 1012;
Constant MSG_WEAR_ALREADY_WORN 1013;
Constant MSG_WEAR_DEFAULT 1014;
!Game-specific constants
Constant AN "an";
Constant SOME "some";
Constant THE "the";
Constant TWO "two";
Constant YOUR "your";
Constant ATTACHED_TO_ARK " attached to the Ark.";
Constant CANT_DIG_ANYTHING "You can't dig anything with ";
Constant CHOICE_OF_DIRECTIONS "You have a choice of directions here. Make sure you explore them all.";
Constant CLAMBER_UP_LADDER "You clamber up the ladder.^^";
Constant FOLLOW_PATH "You follow the path as it turns a corner to the ";
Constant FOREST_IS_TOO_DENSE "The forest is too dense in that direction.";
Constant IF_YOU_HAD_A_LADDER "If you had a ladder, you could climb onto the roof from here.";
Constant IF_YOU_WANT_TO_LIGHT_SOMETHING "If you want to light something, just say so and I'll get a match and light it for you.";
Constant IT_SAYS "It says, ";
Constant NEED_LADDER "You would need a ladder to climb up there.";
Constant TOO_FAR_AWAY "It's too far away.";
Constant WOULD_NOT_BE_PROPER "It would not be proper for a seminarian to be seen grovelling in the dirt. Perhaps you should use a tool.";
Constant YOU_SHOULD_READ_IT " Perhaps you should read it.";
!Game-specific variables
Attribute indoors;
Attribute underwater;
Array combination string 5;
Array digits string "123456789";
Array stringArray -> 8;
Array genesis_passage --> "0" "1:9" "6:19" "6:10" "2:10" "47:2" "30:20" "7:10" "21:4";
Array exodus_passage --> "0" "12:49" "31:18" "8:27" "25:34" "0" "20:9" "25:37";
Array leviticus_passage --> "0" "7:7" "16:1" "19:23" "11:20" "0" "0" "4:6";
Array numbers_passage --> "0" "7:16" "10:2" "22:28" "0" "31:8" "35:13" "19:11" "0" "34:13";
Array deuteronomy_passage --> "0" "24:5" "3:8" "19:7" "0" "0" "5:13" "15:1";
!Replaced actions
Replace GoSub;
Replace LockSub;
Replace UnlockSub;
Include "globals.h";
Global genesis;
Global exodus;
Global leviticus;
Global numbers;
Global deuteronomy;
!========================================
! Entry point routines
!========================================
[ Amusing;
"^Have you tried:^* Examining yourself.^* Using FART, JUMP, PRAY, SING, THINK or the magic word XYZZY.^* Reading the notice on the billboard outside the gate.^* Examining the shovel and the sledge hammer.^* Examining the cars or carriages at the end of the road.^* Searching, smelling or taking the body of Father Matisse.^* Taking the coffin.^* Filling in the grave.^* Drinking the holy water in the stoup.^* Reading the notice and the jokes on the noticeboard in the nave.^* Sitting, standing or lying on the pews, the bed and the stump.^* Putting anything other than the Bible on the lectern.^* Going any direction other than down in the steeple or on the vicarage roof.^* Asking Father Alucard about himself, me, accent, Ark, Bible, Canaan, church, commandments, council, cross, crucifix, Jesus, love, God, Matisse, Moses, the five books of Moses, Romania, vicarage, Yahweh and (most importantly) vampires.^* Removing your cassock anywhere other than the pond.^* Removing your underwear at the pond.^* Examining the shore at the pond.^* Drinking the water in the pond before and after diving to the bottom.^* Climbing a tree in the forest, then using HINT.^* Moving the stump using (say) PULL or PUSH.^* Lighting the dynamite while you're holding it.^* Blowing up the stump and not moving away to safety.";
];
[ ChooseObjects obj code;
if (code == 2)
{
! Stage 1: Disambiguation
if (action_to_be == ##Close && obj has open)
return 1; !Appropriate
if (action_to_be == ##Lock && obj hasnt locked)
return 1; !Appropriate
if (action_to_be == ##Open && obj hasnt open)
return 1; !Appropriate
if (action_to_be == ##Unlock && obj has locked)
return 1; !Appropriate
return 0; !Inappropriate
}
! Stage 2: Processing an "all"
if (obj has scenery or concealed or static or animate)
return 2; !Force exclusion
return 0; !Accept parser's decision
];
[ LibraryMessages p_msg p_arg_1 p_arg_2;
switch (p_msg)
{
MSG_CLOSE_NOT_OPEN:
print_ret (CTheyreOrIts)noun, " already closed.";
MSG_LOCK_ALREADY_LOCKED:
print_ret (CTheyreOrIts)noun, " already locked.";
MSG_LOCK_CLOSE_FIRST:
"You'll have to close ", (ItOrThem)noun, " first.";
MSG_LOCK_KEY_DOESNT_FIT:
print_ret (The)second, " ", (DoesntOrDont)second, " fit the lock.";
MSG_UNLOCK_ALREADY_UNLOCKED:
print_ret (CTheyreOrIts)noun, " already unlocked.";
MSG_UNLOCK_KEY_DOESNT_FIT:
print_ret (The)second, " ", (DoesntOrDont)second, " fit the lock.";
MSG_AUTO_TAKE_NOT_HELD:
print_ret "You don't have ", (the)p_arg_1, ".";
MSG_DIG_NO_USE:
if (location has underwater)
"Underwater? Really?";
print "The ";
if (location has indoors)
print "floor";
else
print "ground";
" is too hard to dig here.";
MSG_JUMP:
if (location has underwater)
"Underwater? Really?";
"You try jumping on the spot, but the spot keeps moving out of the way.";
MSG_LISTEN_DEFAULT:
if (suit has worn)
"You can't hear anything through your diving suit.";
if (location has indoors)
"All is quiet.";
"You can hear the rustling of leaves in the forest and the tweeting of birds.";
MSG_SMELL_DEFAULT:
if (suit has worn)
"You can smell the rubber of your diving suit.";
if (location has indoors)
"You can't smell anything in particular.";
"You smell the fresh air of the French countryside.";
MSG_TAKE_SCENERY:
"That would require divine intervention.";
MSG_TAKE_STATIC:
"That would require the strength of Samson.";
MSG_WEAR_ALREADY_WORN:
"You're already wearing ", (ItOrThem)noun, ".";
MSG_WEAR_DEFAULT:
"You're now wearing ", (the)noun, ".";
}
p_arg_1 = p_arg_2;
];
Include "puny.h";
!========================================
! Initialisation
!========================================
[ Initialise;
location = room01;
lookmode = 2;
move cassock to player;
no_implicit_actions = true;
genesis = random(8);
exodus = random(1, 2, 3, 4, 6, 7);
leviticus = random(1, 2, 3, 4, 7);
numbers = random(1, 2, 3, 5, 6, 7, 9);
deuteronomy = random(1, 2, 3, 6, 7);
combination->1 = digits->genesis;
combination->2 = digits->exodus;
combination->3 = digits->leviticus;
combination->4 = digits->numbers;
combination->5 = digits->deuteronomy;
StartDaemon(candle);
player.description = "Your name is Jean Rousseau. You are tall, fair skinned and frail, but God gives you strength. Faith runs in your family. Your parents named you Jean, because it means 'God is gracious'. You are now training to be a priest.";
"The stories about the Ark of the Covenant are well known, but its current location is a mystery. According to French author Louis Charpentier, the Ark was taken to the Chartres Cathedral by the Knights Templar, but no one outside the cathedral has ever seen it. There may be a good reason for this.^^You were raised in a small village about 100 km from Chartres Cathedral. According to local legend, the Ark was secretly transferred from the cathedral to your village's church, where it would be safe from tourists and treasure hunters.^^Prior to World War I, the Ark was hidden in the local forest so that it would be safe from the invading German army and it has remained there until this day.^^The priest that hid the Ark recently passed away, taking the location of the Ark to his grave. The Church Council has decided that it's time to recover the Ark. As you are now a seminarian (or trainee priest), the Church Council has asked you to return to your local village, use your local knowledge to find the Ark and return it to its rightful place on the altar in the local church.^";
];
!========================================
! Classes
!========================================
Class OpenableContainer
with
invent
[;
if (inventory_stage == 2 && (self hasnt open || children(self) == 0))
rtrue;
],
has container openable;
Class OpenContainer
with
invent
[;
if (inventory_stage == 2 && children(self) == 0)
rtrue;
],
has container open;
!========================================
! Inventory
!========================================
!----------------------------------------
! Cassock
!----------------------------------------
Object cassock "cassock"
with
article YOUR,
parse_name
[ i;
while (NextWord() == 'cassock' or 'long' or 'black' or 'ankle-length' or 'ankle' or 'length' or 'cloak' or 'canonical' or 'costume' or 'garment')
i++;
return i;
],
description "It's a long, black, ankle-length garment, buttoned down the front with a clerical collar around the neck. It's part of the canonical costume of the clergy, though not a liturgical vestment.",
before
[;
Disrobe:
if (self hasnt worn)
"You're not wearing it.";
if (location ~= room21)
"A seminarian should not be seen wandering around in his underwear. What would the parishioners think?";
Wear:
if (self has worn)
"You're already wearing it.";
if (suit has worn)
"Your cassock won't fit over the diving suit, so you'll have to remove the diving suit first.";
],
after
[;
Disrobe:
move self to location;
move underwear to player;
"You look around to make sure no one is looking, then remove your cassock and drop it on the ground.";
Wear:
remove underwear;
"You feel much better now that you're wearing your normal attire.";
],
add_to_scope collar,
has clothing worn;
!----------------------------------------
! Clerical collar
!----------------------------------------
Object collar "clerical collar"
with
parse_name
[ i;
while (NextWord() == 'clerical' or 'collar' or 'neck' or 'dog' or 'stiff' or 'white' or 'ring')
i++;
return i;
],
description "The clerical collar is a stiff white ring around the neck of your cassock. Most of it is hidden by the cassock so that only a small section is visible beneath the chin. It's colloquially known as a 'dog collar', but you think that's a disrespectful term.",
before
[;
Disrobe, Take:
"It's attached to your cassock.";
],
has scenery;
!----------------------------------------
! Underwear
!----------------------------------------
Object underwear "underwear"
with
article YOUR,
parse_name
[ i;
while (NextWord() == 'underwear' or 'white' or 'cotton' or 'singlet' or 'underpants//p' or 'baggy' or 'y-fronts//p')
i++;
return i;
],
description "Your underwear consists of a white cotton singlet and baggy Y-fronts.",
before
[;
Disrobe:
"When Adam was naked in the Garden of Eden, he was not ashamed, but you are not Adam, so keep your underwear on.";
],
has clothing worn;
!========================================
! Room 1: Outside Church
!========================================
Object room01 "Outside Church"
with
description "You're outside the church where you've been doing your training to enter the priesthood. The steeple at the west end of the church casts a shadow over the church grounds. There are paths to the north, south and west, or you can enter the church to the east.",
n_to room25,
s_to room05,
e_to room06,
w_to room02,
u_to
[;
if (ladder in self)
"You clamber up the ladder, but it's not high enough to reach the top of the steeple, so you climb back down again. You'll have to find another way to get up there.";
else
print_ret (string)NEED_LADDER;
],
in_to room06,
before
[;
Hint:
if (room08 hasnt visited)
"The steeple looks like it would have a good view over the entire area.";
if (room02 hasnt visited || room05 hasnt visited || room25 hasnt visited)
print_ret (string)CHOICE_OF_DIRECTIONS;
],
has light;
!----------------------------------------
! Church (floating object)
!----------------------------------------
Object church "church"
with
name 'old' 'stone' 'building' 'church',
description "The church is an old stone building, probably hundreds of years old. It's quite small by church standards, but still one of the larger buildings in the village.",
before
[;
Enter:
if (self in room01)
<<Go FAKE_E_OBJ>>;
if (self in room02)
print_ret (string)TOO_FAR_AWAY;
"You're already in the church.";
],
found_in
[;
if (location == room01 or room02 or room06 or room07 or room08 or room09 or room10 or room11 or room12)
rtrue;
],
has scenery;
!----------------------------------------
! Steeple (floating object)
!----------------------------------------
Object "steeple"
with
name 'steeple' 'stone' 'stones//p' 'tower',
description
[;
if (self in room08)
"The steeple is quite high above the ground, so be careful not to fall. On closer inspection you see an engraving in one of the stones.";
else
"The stone steeple towers overhead at the western end of the church. There is no obvious way of climbing it from outside the church.";
],
before
[;
Climb, Enter:
if (self in room08)
"You're already in the steeple.";
if (self in room01)
"You would need an extremely tall ladder to climb the steeple.";
print_ret (string)TOO_FAR_AWAY;
Touch:
if (self in room08)
"The stone is cold to the touch. As you run your fingers over the stone, you feel an engraving.";
print_ret (string)TOO_FAR_AWAY;
],
found_in room01 room02 room08,
has scenery;
!----------------------------------------
! Shadow over church grounds (floating object)
!----------------------------------------
Object "shadow over church grounds"
with
parse_name
[ nw i flag;
nw = NextWord();
while (nw == 'shadow' or 'over' or 'church' or 'ground' or 'grounds//p')
{
i++;
if (nw == 'church' && church in location)
flag++;
nw = NextWord();
}
if (i == flag)
return 0;
return i;
],
description "The church's steeple casts a shadow over the church grounds.",
found_in room01 room02,
has scenery;
!========================================
! Room 2: Path
!========================================
Object room02 "Path"
with
description "You're on a gravel path that runs east to west between the church and the vicarage. You can leave the church grounds through the gate to the south.",
s_to gate,
e_to room01,
w_to room13,
before
[;
Hint:
if (room03 hasnt visited || room13 hasnt visited)
print_ret (string)CHOICE_OF_DIRECTIONS;
],
has light;
!----------------------------------------
! Path
!----------------------------------------
Object "path" room02
with
name 'gravel' 'path' 'paths//p',
description "The main path goes east and west, with a branch going through the gate to the south.",
has scenery;
!----------------------------------------
! Vicarage (floating object)
!----------------------------------------
Object "vicarage"
with
name 'vicarage' 'stone' 'building' 'residence',
description "The vicarage is the residence of the vicar. This particular vicarage is a stone building, but looks to have been built more recently than the church.",
before
[;
Enter:
if (self in room02)
print_ret (string)TOO_FAR_AWAY;
if (self in room15)
<<Go FAKE_E_OBJ>>;
"There's no entry on this side of the building.";
],
found_in
[;
if (location == room02 or room13 or room14 or room15 or room19)
rtrue;
],
has scenery;
!----------------------------------------
! Billboard (floating object)
!----------------------------------------
Object "billboard"
with
name 'billboard' 'bill' 'board',
description
[;
print "It's a wooden billboard located just inside the gate. ";
if (self in room02)
"You can only see the back of it from here. If you want to see the front, you'll have to go outside the gate.";
else
"There's a notice glued to the billboard.";
],
before
[;
Read:
if (self in room03 && billboard_notice hasnt general)
"There's nothing written on the billboard, but there's something written on the notice.";
],
found_in room02 room03,
has static;
!----------------------------------------
! Gate (floating object)
!----------------------------------------
Object gate "gate"
with
name 'small' 'wrought' 'iron' 'gate',
description
[;
"It's a small wrought iron gate that's currently ", (OpenOrClosed)self, ".";
],
door_dir
[;
if (self in room02)
return s_to;
else
return n_to;
],
door_to
[;
if (self in room02)
return room03;
else
return room02;
],
found_in room02 room03,
has door openable scenery;
!========================================
! Room 3: Road
!========================================
Object room03 "Road"
with
description "You're on the road south of the church gate. There are some roadworks underway, but there's no one around at the moment. Everything is in disarray and the workers have left lots of tools and equipment lying around. The road continues east and west through the forest.",
n_to gate,
s_to FOREST_IS_TOO_DENSE,
e_to "That direction leads to the village, but you have no need to visit the village at the moment. You're sure that your goal is somewhere in the church grounds or the surrounding forest.",
w_to room04,
before
[;
Dig:
if (noun == nothing)
<<Dig road_dirt>>;
Hint:
if (shovel in nothing)
"I wonder what's in the trench.";
if (shovel hasnt moved || hammer hasnt moved)
"Any stray tools may come in handy elsewhere.";
if (billboard_notice hasnt general)
"You could try reading the notice on the billboard.";
if (room04 hasnt visited)
print_ret (string)CHOICE_OF_DIRECTIONS;
],
has light;
!----------------------------------------
! Dirt road
!----------------------------------------
Object "dirt road" room03
with
parse_name
[ nw i flag;
nw = NextWord();
while (nw == 'dirt' or 'road')
{
i++;
if (nw == 'dirt')
flag++;
nw = NextWord();
}
if (i == flag)
return 0;
return i;
],
description "This is the dirt road that heads east to the village. There are currently some roadworks going on, but you have no idea what they're for. The workers have started digging a trench, so maybe it has something to do with drainage or some of those new fangled services, like telephone or electricity.",
has scenery;
!----------------------------------------
! Village (floating object)
!----------------------------------------
Object "village"
with
name 'village',
description "The village is at the end of the road to the east, but you can't see it from here because it's obscured by the trees.",
found_in room03 room04,
has scenery;
!----------------------------------------
! Roadworks
!----------------------------------------
Object "roadworks" room03
with
article SOME,
name 'roadwork' 'roadworks//p',
description "They must have only started recently, as there is no sign of anything significant, other than a trench at the side of the road and a pile of dirt.",
has scenery;
!----------------------------------------
! Tools
!----------------------------------------
Object "tools" room03
with
name 'equipment' 'tool' 'tools//p',
description "They're just miscellaneous bits and pieces that are probably useful to a road worker, but of no use to you.",
has pluralname scenery;
!----------------------------------------
! Billboard notice
!----------------------------------------
Object billboard_notice "notice" room03
with
name 'notice',
description
[;
print "It's the last notice that Father Matisse glued to the billboard before he passed away. He used to paste a new one every few weeks.";
if (self hasnt general)
print (string)YOU_SHOULD_READ_IT;
"";
],
before
[;
Read:
give self general;
"The notice says, 'Today's Weather Forecast: God reigns and Son shines'.^^You've got to hand it to Father Matisse. He had a keen sense of humour.";
Take:
"It's glued down, remember.";
],
has scenery;
!----------------------------------------
! Trench
!----------------------------------------
Object trench "trench" room03
class OpenContainer
with
parse_name
[ nw i flag;
nw = NextWord();
while (nw == 'trench' or 'ditch' or 'side' or 'of' or 'road')
{
i++;
if (nw == 'road')
flag++;
nw = NextWord();
}
if (i == flag)
return 0;
return i;
],
description
[;
if (shovel in nothing)
move shovel to self;
print "You assume that it's a newly-started trench, as it's not very deep. ";
<<Search self>>;
],
before
[;
Dig:
if (second == nothing && shovel in player)
{
print "(with the shovel)^";
second = shovel;
}
if (second == nothing)
print_ret (string)WOULD_NOT_BE_PROPER;
if (second ~= shovel)
print_ret (string)CANT_DIG_ANYTHING, (ThatOrThose)second, ".";
"You sincerely doubt that you will find the Ark of the Covenant by digging in the trench.";
],
has container open static;
!----------------------------------------
! Shovel
!----------------------------------------
Object shovel "shovel"
with
name 'shovel' 'spade',
description "It's a well-worn, long-handled shovel that's used for digging holes and shovelling earth. The Lord can move heaven and earth, but this can only move earth.",
has;
!----------------------------------------
! Pile of dirt
!----------------------------------------
Object road_dirt "pile of dirt" room03
with
parse_name
[ i;
while (NextWord() == 'pile' or 'of' or 'dirt' or 'earth' or 'soil')
i++;
return i;
],
description
[;
print "This is the dirt that's been shovelled out of the trench.";
if (self has general)
print " It's been disturbed from where you were digging it earlier.";
"";
],
before
[;
Dig:
if (second == nothing && shovel in player)
{
print "(with the shovel)^";
second = shovel;
}
if (second == nothing)
print_ret (string)WOULD_NOT_BE_PROPER;
if (second ~= shovel)
print_ret (string)CANT_DIG_ANYTHING, (ThatOrThose)second, ".";
if (self has general)
"You've already dug into the pile of dirt. You're not likely to find anything else.";
give self general;
print "You dig into the pile of dirt, but all you find is more dirt.";
if (ark hasnt moved)
print " It's clear that you're not going to find the Ark of the Covenant in there.";
"";
],
has static;
!----------------------------------------
! Sledge hammer
!----------------------------------------
Object hammer "sledge hammer" room03
with
parse_name
[ i;
while (NextWord() == 'sledge' or 'hammer' or 'sledgehammer' or 'heavy' or 'iron' or 'head' or 'long' or 'wooden' or 'handle')
i++;
return i;
],
description
[;
print "The sledge hammer has a heavy iron head and a long wooden handle. This combination makes it good for breaking big rocks into little rocks.";
if (self hasnt general)
{
give self general;
print " Did you know that 'sledge' is derived from the old English '", (string)SLAEGAN, "', which means 'to strike violently'. No? Well, now you do.";
}
"";
],
has;
!========================================
! Room 4: End of Road
!========================================
Object room04 "End of Road"
with
description "You're at the end of the road. The parishioners use this area as a parking lot when they come to church on a Sunday, but there are no cars or carriages here today, as it's not a Sunday. The only way out of here is back east through the forest.",
n_to "If you want to get back into the church grounds, you'll have to use the gate back to the east.",
s_to FOREST_IS_TOO_DENSE,
e_to room03,
w_to FOREST_IS_TOO_DENSE,
before
[;
Hint:
if (ark hasnt moved)
"The Ark isn't likely to be hidden here. Try the church grounds or the forest.";
],
has light;
!----------------------------------------
! End of road
!----------------------------------------
Object "end of the road" room04
with
article THE,
parse_name
[ i;
while (NextWord() == 'end' or 'of' or 'road' or 'parking' or 'lot' or 'bare' or 'earth')
i++;
return i;
],
description "The end of the road is bare earth from where the grass has been churned up by cars and carriages.",
has scenery;
!----------------------------------------
! Cars or carriages
!----------------------------------------
Object "cars or carriages" room04
with
parse_name
[ i;
while (NextWord() == 'automobile' or 'automobiles//p' or 'car' or 'cars//p' or 'carriage' or 'carriages//p' or 'vehicle' or 'vehicles//p')
i++;
return i;
],
description "There are no vehicles here today, as it's not a Sunday.",
before
[;
Take:
"There aren't any and, even if there were, you don't have the strength of Samson, so you wouldn't be able to pick them up.";
],
has pluralname scenery;
!========================================
! Room 5: Graveyard
!========================================
Object room05 "Graveyard"
with
description "You're in the church's graveyard. It's full of very old graves, so it's not exactly the cheeriest place to be. You can leave by going back to the north.",
n_to room01,
before
[;
Dig:
if (noun == nothing && earth in self)
<<Dig earth>>;
Hint:
if (earth in self)
"The earth is freshly turned, so it's probably soft.";
if (coffin hasnt open)
"Take a look in the coffin.";
if (silver_key hasnt moved)
"Why would anyone bury a key in a coffin, unless they were trying to hide it?";
],
has light;
!----------------------------------------
! Graveyard
!----------------------------------------
Object "graveyard" room05
with
name 'graveyard' 'grave' 'graves//p' 'yard',
description "The graveyard is as old as the church. Some of the gravestones are hundreds of years old.",
has scenery;
!----------------------------------------
! Gravestones
!----------------------------------------
Object "gravestones" room05
with
name 'gravestone' 'gravestones//p' 'stone' 'stones//p',
description
[;
print "Most of the gravestones are very old and covered in moss. The one in front of the ";
if (earth in location)
print "freshly-turned earth";
else
print "freshly-dug grave";
" is for Father Matisse.";
],
before
[;
Read:
print "You don't have time to read all the gravestones, but the one in front of the ";
if (earth in location)
print "freshly-turned earth";
else
print "freshly-dug grave";
" says (in French), 'Here lies Father ", (string)ANDRE, " Matisse. 24 Sep 1850 - 18 Apr 1933. Beloved priest of the local parish. He will dwell in the house of the Lord.'";
],
has pluralname static;
!----------------------------------------
! Freshly-turned earth
!----------------------------------------
Object earth "freshly-turned earth" room05
with
article SOME,
parse_name
[ i;
while (NextWord() == 'freshly-turned' or 'freshly' or 'turned' or 'earth' or 'soil' or 'dirt')
i++;
return i;
],
description "Most of the graves are covered in grass, but this one is covered in freshly-turned earth, indicating that it's fairly recent.",
before
[;
Dig:
if (second == nothing && shovel in player)
{
print "(with the shovel)^";
second = shovel;
}
if (second == nothing)
print_ret (string)WOULD_NOT_BE_PROPER;
if (second ~= shovel)
print_ret (string)CANT_DIG_ANYTHING, (ThatOrThose)second, ".";
remove self;
move grave_dirt to location;
move grave to location;
"You dig into the freshly-turned earth until you hit something solid. You tap on it with the shovel and deduce that the hollow echo sounds like a coffin. Well, what else is it likely to be in a graveyard? You continue clearing the dirt until you have a freshly dug grave.";
],
has static;
!----------------------------------------
! Pile of dirt
!----------------------------------------
Object grave_dirt "pile of dirt"
with
parse_name
[ i;
while (NextWord() == 'pile' or 'of' or 'dirt' or 'earth' or 'soil')
i++;
return i;
],