-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathAdventR.inf
More file actions
3673 lines (3205 loc) · 186 KB
/
Copy pathAdventR.inf
File metadata and controls
3673 lines (3205 loc) · 186 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
! ----------------------------------------------------------------------------
! Advent 030904 Демонстрационная игра для системы Информ
!
!
! Adapted to Inform 5: 17.5.94 to 24.5.94
! Modernised to Inform 5.5 and library 5/12 or later: 20.12.95
! Modernised to Inform 6 and library 6/1 or later: 11.11.96
! A few bugs removed and companion text rewritten: 9.12.96
! Русская версия: 20.10.03
! ----------------------------------------------------------------------------
Constant Story "ПРИКЛЮЧЕНИЕ (сентябрь 2004)";
Constant Headline
"^Интерактивное начало начал^
Оригинал:^
Уилл Краутер (Will Crowther, 1973) и Дон Вудз (Don Woods, 1977)^
Реконструкция:^
Дональд Экман (Donald Ekman), Дэвид Бэджетт (David M. Baggett, 1993)
и Грэхем Нельсон (Graham Nelson, 1994)^
[Посвящается памяти Стивена Бишопа (1820?--1857): GN]^
^
Русская версия: Денис Гаев (2003)^
^
[Если Вы играете в первый раз, введите ~помощь~.]^";
Release 3;
Constant MAX_CARRIED = 7;
Constant MAX_SCORE = 350;
Constant MAX_TREASURES = 15;
Constant AMUSING_PROVIDED;
Include "Parser";
Include "VerbLib";
Constant CANTGO_SHOWROOMS;
Constant CANTGO_EXITS;
Include "SmartCantGo";
Attribute nodwarf;
Attribute treasure_found;
Attribute multitude;
Global caves_closed;
Global canyon_from;
Global treasures_found;
Global deaths;
Global dark_warning;
Global feefie_count;
! ----------------------------------------------------------------------------
! Общий суперкласс для всех "кладов" игры
! ----------------------------------------------------------------------------
Class Treasure
with depositpoints 10,
after
[; Take: if (location==Inside_Building)
score=score-self.depositpoints;
score=score+5;
if (noun hasnt treasure_found)
{ give noun treasure_found; treasures_found++;
score=score+2;
}
"Вы это взяли.";
Drop: score=score-5;
if (location==Inside_Building)
{ score=score+self.depositpoints;
"Вы положили это в надежное место.";
}
];
! ----------------------------------------------------------------------------
! На открытом воздухе...
! ----------------------------------------------------------------------------
Class AboveGround
has light nodwarf;
AboveGround At_End_Of_Road "У конца дороги"
with description
"Вы находитесь у самого конца дороги недалеко от небольшого кирпичного строения.
Со всех сторон Вас окружает густой лес.
Небольшой ручей, вытекающий из строения, продолжает свой путь вниз по оврагу.",
w_to At_Hill_In_Road, u_to At_Hill_In_Road, e_to Inside_Building,
d_to In_A_Valley, s_to In_A_Valley, n_to In_Forest_1,
in_to Inside_Building;
Object "кирпичн/ый дом/"
with name 'кирпичн' 'дом' 'домик' 'строен' 'исток' 'источник' 'колодец',
description "Просто небольшой кирпичный домик.
Исток ручья находится где-то внутри него.",
found_in At_End_Of_Road At_Hill_In_Road Inside_Building
has scenery male;
Object Stream "бурн/ый руч/е//й"
with name 'руче' 'ручь' 'речк' 'поток' 'вод',
found_in At_End_Of_Road In_A_Valley At_Slit_In_Streambed In_Pit
In_Cavern_With_Waterfall At_Reservoir Inside_Building,
description "Холодный бурный ручей струится вниз по каменистому руслу.",
casegen [ beg end csID;
return ICVowel (csID, beg, end, 'е', 'ь');
],
before
[; Drink:
"Вы сделали несколько глотков из ручья.
Вода имеет сильный привкус минералов, но это ее не портит.
Правда, она очень холодная.";
Take: if (bottle notin player) "Вам не в чем нести воду!";
<<Fill bottle>>;
Insert: if (second == bottle) <<Fill bottle>>;
"В это нельзя налить воду.";
Receive: if (noun == ming_vase) {
remove ming_vase; move shards to location; score=score-5;
"Внезапное охлаждение мгновенно превратило бесценную вазу в горсть осколков.";
}
if (noun == bottle) <<Fill bottle>>;
remove noun;
if (noun ofclass Treasure) score=score-5;
print_ret (cNom) noun, " унесен", (SAEnd) noun, " ручьем вниз по течению!";
],
has scenery male;
Object "грязн/ая дорог/а"
with name 'дорог' 'путь' 'улиц' 'троп',
description "Вместо желтых кирпичей, дорога покрыта камнями и грязью.",
found_in At_End_Of_Road At_Hill_In_Road In_Forest_2
has scenery female;
Object "густ/ой лес/"
with name 'густ' 'лес' 'дерев' 'лист' 'куст' 'ростк' 'росток',
description
"По преимуществу, лес состоит из дубов и кленов,
однако сосны и ели также встречаются нередко. Березовые и ясеневые ростки,
и кустарник самых разнообразных видов образуют густой подлесок.
В это время года обильная листва сильно ограничивает видимость,
однако идти растительность не слишком мешает.",
found_in At_End_Of_Road At_Hill_In_Road In_A_Valley In_Forest_1 In_Forest_2
has scenery multitude male;
AboveGround At_Hill_In_Road "На холме у дороги"
with description
"Вы поднялись на самую вершину холма, но не вышли из леса.
Дорога продолжается по ту сторону холма.
Невдалеке виднеется белый кирпичный домик.",
e_to At_End_Of_Road,
n_to At_End_Of_Road,
d_to At_End_Of_Road,
s_to In_Forest_1;
Object -> "просто холм/"
with name 'холм' 'пригорок' 'подъем' 'склон',
description "Ничем не примечательный холм.",
has scenery male;
Object -> "друг/ой склон/ холма"
with name 'склон' 'сторон',
description "Кто мешает изучить его самому?",
has scenery male;
AboveGround Inside_Building "Внутри строения"
with description "Вы внутри белого дома, из которого вытекает ручей.",
cant_go "Ручей вытекает через пару труб футового диаметра.
Единственный выход из дома находится в западной стене.",
before
[; Enter: if (noun==Spring or SewerPipes)
"Трубы, через которые вытекает ручей, диаметром всего в один фут.
Лучше попробуйте выйти через дверь.";
Xyzzy: if (In_Debris_Room hasnt visited) rfalse;
PlayerTo(In_Debris_Room); rtrue;
Plugh: if (At_Y2 hasnt visited) rfalse;
PlayerTo(At_Y2); rtrue;
],
w_to At_End_Of_Road,
out_to At_End_Of_Road,
in_to "Эти трубы определенно узковаты для Вас.";
Object -> Spring "исток/ ручья"
with name 'исток' 'руче' 'ручь',
description "Ручей вытекает наружу через пару труб футового диаметра."
has scenery male;
Object -> SewerPipes "пар/а сточных труб диаметром в один фут"
with name 'пар' 'футов' 'сточн' 'труб',
description "Они слишком узкие. Единственный выход наружу к западу отсюда."
has scenery female;
Object -> set_of_keys "набор/ ключей"
with name 'ключ' 'набор' 'связк',
description "Всего лишь набор различных ключей.",
initial "Прямо на полу лежит связка ключей.",
before
[; Count: "Их дюжина, или около того."; ]
has male;
Object -> tasty_food "вкусн/ая ед/а"
with name 'вкусн' 'ед' 'пищ' 'паек' 'пайк' 'рацион',
description "Выглядит вполне аппетитно!",
initial "Здесь имеется и кое-какая еда.",
after
[; Eat: "Довольно вкусно!"; ],
has edible female;
Object -> brass_lantern "латунн/ая ламп/а"
with name 'латунн' 'ламп' 'фонар' 'светильник',
when_on "Ваша лампа поблизости испускает яркий свет.",
when_off "Рядом тускло поблескивает лампа из латуни.",
power_remaining 330,
replace_batteries
[; if (fresh_batteries in player or location)
{ remove fresh_batteries; give fresh_batteries general;
move old_batteries to location;
self.power_remaining = 2500;
"Батарейки успешно заменены.";
}
],
daemon
[ t; if (self hasnt on) { StopDaemon(self); rtrue; }
t = --(self.power_remaining);
if (t==0) give self ~on ~light;
if (self in player || self in location)
{ if (t==0)
{
print "Энергия батареек совсем иссякла!";
if (fresh_batteries notin player && location hasnt light)
{ deadflag=3;
" Без лампы исследование пещеры невозможно.
Так что игра -- увы -- проиграна.";
}
else self.replace_batteries();
new_line; rtrue;
}
if (t==30)
{ print "Свет вашей лампы заметно тускнеет.";
if (fresh_batteries has general)
" А запасных батареек у Вас нет.
Кажется, Вам пора закругляться.";
if (fresh_batteries in VendingMachine
&& Dead_End_14 has visited)
" Или поищите свежие батарейки.
Кажется, где-то в лабиринте попадался торговый автомат?
Только не забудьте прихватить и денежки!";
if (fresh_batteries notin VendingMachine or player or location)
" За батарейками Вам придется вернуться в лабиринт.";
new_line; rtrue;
}
}
],
before
[; Examine: print "Тускло поблескивающая лампа из латуни";
if (self hasnt on)
". Она не горит.";
", испускающая ", (string) IIF (self.power_remaining < 30, "тусклый", "яркий"),
" свет.";
Burn: <<SwitchOn self>>;
Rub: "Лампа электрическая, а Вы не Аладдин. Ничего интересного не произошло.";
SwitchOn: if (self.power_remaining <= 0)
"Похоже, что батарейкам настал конец.";
Receive:
if (noun == old_batteries)
"От уже использованных батареек пользы будет немного!";
if (noun == fresh_batteries)
{ self.replace_batteries(); rtrue; }
"Кроме пары свежих батареек, вставлять в лампу что-либо другое нет смысла.";
],
after
[; SwitchOn: give self light; StartDaemon(self);
SwitchOff: give self ~light;
],
has switchable female;
Object -> bottle "маленьк/ая бутылк/а"
with name 'бутылк' 'бутыл' 'фляг' 'фляжк',
initial "Здесь лежит пустая бутылка.",
before
[; LetGo:
if (noun in bottle)
"У Вас (в бутылке) это уже имеется.";
Receive:
if (noun == stream or Oil) <<Fill self>>;
else "В бутылке можно держать только жидкости.";
Fill:
if (child(bottle) ~= nothing)
"Бутылка уже чем-то заполнена.";
if (stream in location || Spring in location)
{ move water_in_the_bottle to bottle;
"Вы наполнили бутылку водой.";
}
if (Oil in location)
{ move oil_in_the_bottle to bottle;
"Вы наполнили бутылку маслом.";
}
"Ну, и чем же здесь можно наполнить бутылку?";
Empty: if (child(bottle) == nothing) "Бутылка уже пуста!";
print "Вы вылили ", (cAcc) (child(bottle)), " из бутылки.";
remove child(bottle);
],
has container open female;
Object water_in_the_bottle "вод/а (в бутылке)"
with name 'вод' 'водичк' 'водиц' 'H2O',
before
[; Drink: remove water_in_the_bottle; <<Drink Stream>>;
],
description "Немного самой обычной холодной воды."
has female;
Object oil_in_the_bottle "масл/о (в бутылке)"
with name 'масл' 'смазк',
before
[; Drink: <<Drink Oil>>;
],
description "Обыкновенное жидкое масло."
has neuter;
AboveGround In_Forest_1 "В лесу"
with description "Вы на опушке леса, рядом с глубоким оврагом.",
e_to In_A_Valley,
d_to In_A_Valley,
n_to In_Forest_1,
w_to In_Forest_1,
s_to In_Forest_1,
initial [; if (random(2)==1) PlayerTo(In_Forest_2,1); ];
AboveGround In_Forest_2 "В лесу"
with description "Вы на опушке леса. Овраг и дорога находятся где-то рядом.",
n_to At_End_Of_Road,
e_to In_A_Valley,
w_to In_A_Valley,
d_to In_A_Valley,
s_to In_Forest_1;
AboveGround In_A_Valley "В глубоком овраге"
with description
"Вы находитесь в глубоком лесном овраге, поблизости от ручья,
быстро текущего куда-то вниз по каменистому руслу.",
n_to At_End_Of_Road,
e_to In_Forest_1,
w_to In_Forest_1,
u_to In_Forest_1,
s_to At_Slit_In_Streambed,
d_to At_Slit_In_Streambed;
Object -> "русл/о ручья"
with name 'русл' 'лож' 'камн'
has scenery neuter;
AboveGround At_Slit_In_Streambed "У конца ручья"
with description
"У ваших ног вода стекает в двухдюймовую щель в скале.
Ниже лежит лишь высохшее каменистое русло.",
n_to In_A_Valley,
e_to In_Forest_1,
w_to In_Forest_1,
s_to Outside_Grate,
d_to "Через щель в два дюйма вы не протиснетесь!",
in_to "Через щель в два дюйма вы не протиснетесь!";
Object -> "щел/ь шириной в 2 дюйма"
with name 'щел' 'узк' 'двухдюймов',
description
"Просто щель двухдюймовой ширины, в которой ручей исчезает без следа.",
before
[; Enter: "Через щель шириной в два дюйма Вы не протиснетесь!"; ],
has scenery female;
AboveGround Outside_Grate "Над стальной решеткой"
with description
"Вы находитесь в двадцатифутовой впадине, покрытой засохшей грязью.
Под слоем грязи можно разглядеть стальную решетку, прочно закрепленную в каменистом дне.
Из впадины вверх ведет русло высохшего ручья.",
e_to In_Forest_1,
w_to In_Forest_1,
s_to In_Forest_1,
n_to At_Slit_In_Streambed,
d_to
[; if (Grate hasnt locked && Grate hasnt open)
{ print "(Сперва открыв решетку...)^"; give Grate open; }
return Grate;
];
Object -> "двадцатифутов/ая впадин/а"
with name 'двадцатифутов' 'впадин' 'углублен' 'ям',
description "Вы в ней находитесь.",
has scenery female;
Object -> Grate "стальн/ая решетк/а"
with name 'прочн' 'стальн' 'решетк',
description "Прочная стальная решетка, глубоко утопленная в каменистое дно.",
with_key set_of_keys,
door_dir
[; if (location==Below_The_Grate) return u_to; return d_to;
],
door_to
[; if (location==Below_The_Grate) return Outside_Grate;
return Below_The_Grate;
],
describe
[; if (self has open) "^Решетка открыта.";
if (self hasnt locked) "^Решетка закрыта, но не заперта.";
rtrue;
],
found_in Below_The_Grate Outside_Grate
has static door openable lockable locked female;
! ----------------------------------------------------------------------------
! Facilis descensus Averno...
! (Легок спуск в Аверн)
! ----------------------------------------------------------------------------
Object Below_The_Grate "Камера под решеткой"
with description
"Вы находитесь в небольшой каморке под стальной решеткой, ведущей на поверхность.
Узкий лаз, покрытый булыжниками, ведет куда-то в глубину к западу отсюда.",
w_to In_Cobble_Crawl,
u_to Grate
has light;
Object "булыжник/и"
with name 'булыжник' 'валун' 'камн' 'куч',
description "Куча ничем особо не примечательных булыжников.",
found_in In_Cobble_Crawl In_Debris_Room Below_The_Grate
has scenery multitude pluralname;
Object In_Cobble_Crawl "Лаз с булыжниками"
with description
"Вы ползете по низкому, покрытому булыжниками проходу.
Откуда-то с восточной стороны пробивается тусклый свет.",
e_to Below_The_Grate,
w_to In_Debris_Room
has light;
Object -> wicker_cage "плетен/ая клетк/а"
with name 'маленьк' 'плетен' 'клетк',
description "Маленькая клетка, сплетенная из тонких древесных прутьев.",
initial "Небольшая плетеная клетка лежит неподалеку.",
after
[; Open: if (little_bird notin self) rfalse;
print "(выпуская птичку на свободу)^";
<<Release little_bird>>;
],
has container open openable transparent female;
Object In_Debris_Room "Замусоренная пещера"
with description
"Вы в пещере, заполненной всякой грязью и мусором, занесенными водой с поверхности.
Низкий широкий проход с булыжниками дальше забит грязью,
но труднопроходимый каньон открывает путь вверх и на запад.^^
Надпись на стене сообщает Вам, что ~Волшебное слово -- XYZZY.~",
e_to In_Cobble_Crawl,
u_to In_Awkward_Sloping_E_W_Canyon,
w_to In_Awkward_Sloping_E_W_Canyon,
before
[; Xyzzy: PlayerTo(Inside_Building); rtrue;
],
has nodwarf;
Object -> "всяк/ий мусор/"
with name 'мусор' 'гряз',
description "Брр.",
has scenery male;
Object -> "надпис/ь на стене"
with name 'надпис' 'стен',
description "Она сообщает, что ~Волшебное слово -- XYZZY~.",
has scenery female;
Object -> black_rod "черн/ый жезл/ со ржавой звездой на конце"
with name 'черн' 'ржав' 'жезл' 'звезд',
initial "Трехфутовый черный жезл, один конец которого украшает
ржавая железная звезда, лежит у Ваших ног.",
description "Черный жезл длиной в три фута, со звездой на конце.",
before
[; Wave:
if (location==West_Side_Of_Fissure or On_East_Bank_Of_Fissure)
{ if (caves_closed) "Странно -- ничего не произошло.";
if (CrystalBridge notin nothing)
{ remove CrystalBridge; give CrystalBridge absent;
West_Side_Of_Fissure.e_to = 0;
On_East_Bank_Of_Fissure.w_to = 0;
"Хрустальный мост исчез без следа!";
}
else
{ move CrystalBridge to location; give CrystalBridge ~absent;
West_Side_Of_Fissure.e_to = CrystalBridge;
On_East_Bank_Of_Fissure.w_to = CrystalBridge;
"Теперь ущелье пересекает хрустальный мост!";
}
}
"Ничего не произошло.";
]
has male;
Object In_Awkward_Sloping_E_W_Canyon "Неудобный восточно-западный каньон"
with description "Вы в труднопроходимом наклонном каньоне, ведущем с востока на запад.",
d_to In_Debris_Room,
e_to In_Debris_Room,
u_to In_Bird_Chamber,
w_to In_Bird_Chamber
has nodwarf;
! ----------------------------------------------------------------------------
! Маленькая веселая птичка в естественной среде обитания
! ----------------------------------------------------------------------------
Object In_Bird_Chamber "Птичья камера"
with description
"Вы находитесь в великолепной камере, стены которой похожи на замерзшие реки
из оранжевого камня, а потолок достигает тридцати футов в высоту.
На восток спускается узкий наклонный каньон, а на запад ведет удобный широкий проход.",
e_to In_Awkward_Sloping_E_W_Canyon,
w_to At_Top_Of_Small_Pit
has nodwarf;
Object -> little_bird "маленьк/ая птичк/а"
with name 'весел' 'грустн' 'маленьк' 'птичк',
initial "Здесь сидит маленькая птичка и весело поет.",
before
[; Examine:
if (self in wicker_cage) "В клетке птичка выглядит не такой веселой.";
"Маленькая веселая птичка сидит и поет.";
Insert: if (second==wicker_cage) <<Catch self>>;
else "Нет никакого смысла сажать птичку в ", (cAcc) second, "!";
Drop, Remove:
if (self in wicker_cage)
{ print "(Выпуская птичку из клетки.)^^";
<<Release self>>;
}
Take, Catch:
if (self in wicker_cage)
"Птичка уже в Ваших руках.
А если достать ее из клетки, она просто улетит.";
if (wicker_cage notin player)
"Поймать птичку не так уж трудно. А удержать?";
if (black_rod in player)
"Поначалу птичка не обращала на Вас внимания.
Но когда вы подошли к ней, она встревожилась,
и не дает себя поймать.";
move self to wicker_cage; give wicker_cage ~open;
"Вы поймали птичку и посадили ее в плетеную клетку.";
Release:
if (self notin wicker_cage) "Сейчас птичка находится не в клетке.";
give wicker_cage open;
move self to location;
if (Snake in location)
{ remove Snake;
"Маленькая птичка в отчаянном порыве набрасывается на змею,
и успешно прогоняет ее прочь!";
}
if (Dragon in location)
{ remove self;
"Маленькая птичка в отчаянном порыве набрасывается на дракона,
и успешно превращается в горсть пепла. Пепел развеивает ветер.";
}
"Маленькая птичка радостно выпорхнула на свободу.";
],
life
[; Give: "Она не выглядит голодной.
И, скорее всего, предпочтет ", cDat (noun), " птичий корм.";
Order, Ask, Answer: "Чирик! Чирик чик-чик!";
Attack:
if (self in wicker_cage) "Почему бы не оставить бедняжку в покое?";
remove self;
"Маленькая птичка мертва. Даже трупа от нее не осталось.";
],
has animate female;
Object At_Top_Of_Small_Pit "Над колодцем"
with description
"Прямо из ваших ног находится колодец, буквально дышащий белым туманом.
В этом месте проход на запад кончается, если не считать очень узкую трещину.^
Грубые каменные ступени дают возможность спуститься вниз.",
e_to In_Bird_Chamber,
w_to "Трещина слишком узка, чтобы в нее протиснуться.",
d_to
[; if (large_gold_nugget in player)
{ deadflag=1;
"Вы достигли дна колодца быстрее, чем сами хотели,
и лежите там со сломанной шеей.";
}
return In_Hall_Of_Mists;
],
before
[; Enter: if (noun==PitCrack) "В такую узкую трещину Вы не протиснитесь!";
],
has nodwarf;
Object -> "туманн/ый колод/е/ц/"
with name 'колодец' 'колодц',
casegen [ beg end csID;
return ICVowel (csID, beg, end, 'е', 0);
],
description "Из колодца поднимаются бесформенные клубы белого тумана.",
has scenery male;
Object -> PitCrack "узк/ая трещин/а"
with name 'маленьк' 'узк' 'трещин' 'щел',
description "Трещина узковата -- во всяком случае, для Вас.",
has scenery female;
Object "бел/ый туман/"
with name 'бел' 'водян' 'туман' 'пар' 'дым',
description
"Туманом называется белый водяной пар, который часто можно встретить в пещерах.
Обычно его присутствие является недвусмысленным признаком того,
что где-то неподалеку имеется вода.",
found_in At_Top_Of_Small_Pit In_Hall_Of_Mists
On_East_Bank_Of_Fissure At_Window_On_Pit_1
At_West_End_Of_Hall_Of_Mists In_Misty_Cavern
In_Mirror_Canyon At_Reservoir At_Window_On_Pit_2
On_Sw_Side_Of_Chasm
has scenery male;
! ----------------------------------------------------------------------------
! Начинаются пещеры: Зал Туманов
! ----------------------------------------------------------------------------
Object In_Hall_Of_Mists "В Зале Туманов"
with initial
[; if (self has general) rfalse;
score=score+25; give self general;
],
description
"Вы находитесь у входа в колоссальный зал,
который простирается на запад далеко за пределы видимости.
Путь открыт вправо и влево. Рядом с Вами широкая каменная лестница ведет куда-то вниз.
Воздух заполнен клочьями белого тумана, плавающими туда-сюда, как живые,
а с лестницы дует поток холодного воздуха. За вашей спиной грубые каменные ступени
в куполообразном потолке ведут вверх.",
s_to In_Nugget_Of_Gold_Room,
w_to On_East_Bank_Of_Fissure,
d_to In_Hall_Of_Mt_King,
n_to In_Hall_Of_Mt_King,
u_to
[; if (large_gold_nugget in player)
"Вы не можете подняться по лестнице с таким грузом!";
return At_Top_Of_Small_Pit;
];
Object -> "широк/ая каменн/ая лестниц/а"
with name 'широк' 'каменн' 'лестниц',
description "Лестница ведет куда-то вниз.",
has scenery female;
Object -> "груб/ые каменн/ые ступен/и"
with name 'груб' 'каменн' 'ступен',
description "Грубые каменные ступени ведут по куполу вверх.",
has scenery multitude pluralname;
Object -> "высок/ий каменн/ый купол/"
with name 'высок' 'каменн' 'купол',
before
[; Examine: if (large_gold_nugget in player)
"С тем грузом, что Вы с собой несете, Вам никак не добраться до верха.";
"Похоже, что по нему можно забраться вверх.";
Climb: MovePlayer(u_obj); rtrue;
],
has scenery male;
Object In_Nugget_Of_Gold_Room "Низкая комната"
with description
"Вы в комнате с очень низким потолком. На стене небрежно нацарапано:^^
~Вы не сможете подняться с ним вверх по лестнице!~",
n_to In_Hall_Of_Mists;
Object -> "надпис/ь"
with name 'надпис',
description "Надпись сообщает: ~Вы не сможете подняться с ним вверх по лестнице!~",
has scenery female;
Treasure -> large_gold_nugget "огромн/ый золот/ой самород/о/к/"
with name 'золот' 'огромн' 'слиток' 'самородок' 'кусок',
description "Массивный кусок самородного золота!",
casegen [ beg end csID;
return ICVowel (csID, beg, end, 'о', 0);
],
initial "На полу поблескивает большой золотой самородок!",
has male;
Class FissureRoom
with before
[;
Jump: if (CrystalBridge hasnt absent)
"Может быть, лучше воспользоваться мостом?";
deadflag=1;
"Отличный прыжок!
До противоположного края Вы не долетели совсем немного...";
],
d_to "Глянув вниз, Вы быстро отказались от этой мысли.";
FissureRoom On_East_Bank_Of_Fissure "Восточный край пропасти"
with description
"Вы находитесь на восточной стороне глубокой пропасти,
рассекающей зал пополам. Здесь воздух очень влажен и насыщен туманом.
Пропасть слишком широка, чтобы ее перепрыгнуть.",
e_to In_Hall_Of_Mists,
w_to "На Вашем пути -- широченная пропасть!";
FissureRoom West_Side_Of_Fissure "Западный край пропасти"
with description "Вы находитесь на западной стороне пропасти в Зале Туманов.",
w_to At_West_End_Of_Hall_Of_Mists,
e_to "На Вашем пути -- широченная пропасть!",
n_to At_West_End_Of_Hall_Of_Mists,
before
[; Go: if (location==West_Side_Of_Fissure && noun==n_obj)
print "Вы проползли узким широким проходом к северу от Зала Туманов
и параллельно ему.^";
];
Treasure -> "бриллиант/ы"
with name 'многокаратов' 'бриллиант' 'алмаз' 'драгоценност',
description "Многокаратовые бриллианты чистейшей воды!",
initial "Прямо на полу сверкает россыпь бриллиантов!",
has multitude pluralname;
Object CrystalBridge "хрустальн/ый мост/"
with name 'волшебн' 'хрустальн' 'мост',
initial "Оба края пропасти теперь соединяет хрустальный мост.",
description "Он позволяет легко пересечь пропасть.",
door_dir
[; if (location==West_Side_Of_Fissure) return e_to; return w_to;
],
door_to
[; if (location==West_Side_Of_Fissure) return On_East_Bank_Of_Fissure;
return West_Side_Of_Fissure;
],
found_in On_East_Bank_Of_Fissure West_Side_Of_Fissure
has static door open absent male;
Object "глубок/ая пропаст/ь"
with name 'широк' 'глубок' 'пропаст',
description "Даже не мечтайте о том, чтобы ее перепрыгнуть!",
found_in On_East_Bank_Of_Fissure West_Side_Of_Fissure
has scenery female;
Object At_West_End_Of_Hall_Of_Mists "Западный конец Зала Туманов"
with description
"Вы находитесь в западном конце Зала Туманов.
Один широкий узкий проход ведет отсюда на запад, другой на север.
К югу имеется небольшой проход в шести футах от пола.",
s_to Alike_Maze_1,
u_to Alike_Maze_1,
e_to West_Side_Of_Fissure,
w_to At_East_End_Of_Long_Hall,
n_to West_Side_Of_Fissure,
before
[; Go: if (noun==n_obj)
print "Вы проползли узким широким проходом к северу от Зала Туманов
и параллельно ему.^";
];
! ----------------------------------------------------------------------------
! Длинный Зал (к востоку от Зала Туманов)
! ----------------------------------------------------------------------------
Object At_East_End_Of_Long_Hall "Восточный конец Длинного Зала"
with description
"Вы находитесь в восточном конце длинного зала без боковых ответвлений.
К востоку низкий широкий проход ведет вверх.
К северу круглый трехфутовый туннель ведет вниз.",
e_to At_West_End_Of_Hall_Of_Mists,
u_to At_West_End_Of_Hall_Of_Mists,
w_to At_West_End_Of_Long_Hall,
n_to Crossover,
d_to Crossover;
Object At_West_End_Of_Long_Hall "Западный конец Длинного Зала"
with description
"Вы находитесь в западном конце длинного, но ничем не примечательного зала.
Здесь он смыкается с узким проходом, ведущим с севера на юг.",
e_to At_East_End_Of_Long_Hall,
s_to Different_Maze_1,
n_to Crossover;
Object Crossover "Перекресток коридоров"
with description
"Вы на перекрестке двух коридоров:
высокого (северно-южного) и низкого (западно-восточного).",
w_to At_East_End_Of_Long_Hall,
n_to Dead_End_7,
e_to In_West_Side_Chamber,
s_to At_West_End_Of_Long_Hall;
Object -> "перекрест/о/к/"
with name 'перекресток' 'перекрестк',
description "Мне о нем известно ровно столько же, сколько и Вам.",
casegen [ beg end csID;
return ICVowel (csID, beg, end, 'о', 0);
],
has scenery male;
! ----------------------------------------------------------------------------
! В лабиринте множество тупиков. Определим для них общий класс:
! ----------------------------------------------------------------------------
Class DeadEndRoom
with short_name "Тупик",
description "Вы в глухом тупике -- дальше путь отсутствует.",
cant_go "Вернуться можно лишь тем путем, каким Вы сюда пришли.";
DeadEndRoom Dead_End_7
with s_to Crossover, out_to Crossover;
! ----------------------------------------------------------------------------
! Зал Горного Короля (и прилегающие боковые пещеры)
! ----------------------------------------------------------------------------
Object In_Hall_Of_Mt_King "Зал Горного Короля"
with description
"Вы находитесь в Зале Горного Короля.
Пути отсюда ведут во всех направлениях.",
cant_go "Ну, может быть, и не совсем во всех...",
u_to In_Hall_Of_Mists,
e_to In_Hall_Of_Mists,
n_to Low_N_S_Passage,
s_to In_South_Side_Chamber,
w_to In_West_Side_Chamber,
sw_to In_Secret_E_W_Canyon,
before
[; Go: if (Snake in self && (noun == n_obj or s_obj or w_obj
|| (noun == sw_obj && random(100) <= 35)))
"Вы не можете прокрасться мимо змеи!";
];
Object -> Snake "зме/я"
with name 'зме' 'змеюк' 'твар' 'гадин',
description "На Вашем месте я бы держался от нее подальше!",
initial "Огромная свирепая зеленая змея преграждает Вам путь!",
life
[;
Order, Ask, Answer: "С-с-сс-СССС!";
ThrowAt: if (noun==axe) <<Attack self>>;
<<Give noun self>>;
Give: if (noun==little_bird)
{ remove little_bird;
"Сожрав птичку, змея облизнулась и посмотрела на Вас
с явной надеждой на продолжение банкета.";
}
"У Вас нет ничего, что она хотела бы сожрать. Разве только Вы сами?";
Attack: "От этого пользы не будет никакой, а вот риск...";
Take: deadflag=1;
"Но получилось наоборот.^Аа-ап! Хруп-хруп!";
],
has animate female;
Object Low_N_S_Passage "Низкий северо-южный проход"
with description
"Вы в низком проходе, ведущем с севера на юг.
Отверстие в полу у Ваших ног ведет вниз, в проход с запада на восток.",
s_to In_Hall_Of_Mt_King,
d_to In_Dirty_Passage,
n_to At_Y2;
Treasure -> "слитк/и серебра"
with name 'серебр' 'слиток' 'слитк',
description "Похоже, что они стоят целое состояние!",
initial "На полу лежит груда серебряных слитков!",
has pluralname;
Object In_South_Side_Chamber "Южная боковая камера"
with description "Вы в комнате к югу от большого зала.",
n_to In_Hall_Of_Mt_King;
Treasure -> "драгоценн/ые камн/и"
with name 'драгоценност' 'драгоценн' 'ценност' 'камн',
description "Похоже, что все они очень ценные!",
initial "На полу россыпь драгоценностей!",
has pluralname;
Object In_West_Side_Chamber "Западная боковая камера"
with description
"Вы в комнате к западу от большого зала.
Пути отсюда ведут на запад и вверх.",
w_to Crossover,
u_to Crossover,
e_to In_Hall_Of_Mt_King;
Treasure -> rare_coins "редк/ие монет/ы"
with name 'редк' 'ценн' 'монет',
description "Любая из них -- настоящая мечта нумизмата!",
initial "На полу рассыпано множество монет!",
has multitude pluralname;
! ----------------------------------------------------------------------------
! Комната "Y2" и ее окрестности
! ----------------------------------------------------------------------------
Object At_Y2 "В комнате ~Y2~"
with description
"Вы в большой комнате. Один проход ведет на юг, другой на запад,
и целая стена из камней преграждает путь на восток.
Символы ~Y2~ начертаны на скале в середине комнаты.",
after
[; Look: if (random(100)<=25) print "^Голос ниоткуда произнес: ~Plugh.~^"; ],
before
[; Plugh: PlayerTo(Inside_Building); rtrue;
Plover: if (In_Plover_Room hasnt visited) rfalse;
if (egg_sized_emerald in player)
{ move egg_sized_emerald to In_Plover_Room;
score = score - 5;
}
PlayerTo(In_Plover_Room); rtrue;
],
s_to Low_N_S_Passage,
e_to Jumble_Of_Rock,
w_to At_Window_On_Pit_1;
Object -> "скал/а со знаком ~Y2~"
with name 'скал' 'знак' 'y2',
description "На скале начертано: ~Y2~. Что бы это значило???",
has scenery supporter female;
Object Jumble_Of_Rock "мешанин/а каменных обломков"
with description
"Вокруг валяется куча обломков скального камня, покрытых трещинами.",
d_to At_Y2,
u_to In_Hall_Of_Mists,
has scenery female;
Object At_Window_On_Pit_1 "У окна над пропастью"
with description
"Вы у низкого окна над глубокой пропастью, уходящей за пределы видимости.
Лишь с большим трудом можно разглядеть дно примерно 50 футами ниже.
Клочья белого тумана скрывают его, сгущаясь справа от Вас.
Пыль вокруг окна покрыта отметками, указывающими на то,
что кто-то был здесь совсем недавно.
По другую сторону провала, в 20 футах отсюда,
можно видеть очень похожее окно, освещенное изнутри.
За окном находится туманная фигура человека, который, похоже,
уставился на Вас.",
before
[; WaveHands: "Туманная фигура помахала Вам в ответ!"; ],
cant_go "Единственный путь отсюда -- назад к ~Y2~.",
e_to At_Y2;
Class PitScenery
with found_in At_Window_On_Pit_1 At_Window_On_Pit_2,
has scenery;
PitScenery "окн/о"
with name 'низк' 'окн',
description "Самое обыкновенное окно.",
has openable neuter;
PitScenery "глубок/ий и высок/ий провал/"
with name 'глубок' 'высок' 'провал',
description
"Он настолько высокий и глубокий, что дно с трудом можно разглядеть
где-то пятьюдесятью футами ниже, а потолок невозможно разглядеть вообще.",
has male;
PitScenery "отметк/и в пыли"
with name 'отметк' 'пыл',
description "Похоже, что Вы не единственный, кто здесь побывал!",
has multitude pluralname;
PitScenery "туманн/ая фигур/а"
with name 'туманн' 'таинственн' 'фигур' 'человек',
description "Кажется, туманная фигура пытается привлечь Ваше внимание!",
has female;
Object In_Dirty_Passage "В грязном неровном проходе"
with description
"Вы в грязном неровном проходе. На восток ведет узкий лаз.
На запад имеется более широкий проход.
Отверстие над Вами ведет еще куда-то.",
e_to On_Brink_Of_Pit,
u_to Low_N_S_Passage,
w_to In_Dusty_Rock_Room;
Object On_Brink_Of_Pit "На краю колодца"
with description
"Вы на краю небольшого чистого колодца, в который можно попробовать спуститься.
Узкий лаз ведет отсюда на запад.",