-
Notifications
You must be signed in to change notification settings - Fork 1
/
steampunkffr.c
2775 lines (2278 loc) · 83.6 KB
/
steampunkffr.c
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
/*
* =====================================================================================
*
* Filename: steampunkffr.c
*
* Description: Steampunk FFR - How it started
* A "This-is-youre-Adventure" novel
*
* Version: 0.008
* letzte Beta: 0.000
* Created: 22.05.2011 09:35:00
* Ended: 00.00.0000 00:00:00
* Revision: none
* Compiler: clang
* compile: clang -o steampunkffr steampunkffr.c -lncurses
*
* Author: Sascha K. Biermanns (saschakb), saschakb@gmail.com
* Company:
* License: ISC
*
* Copyright (C) 2011, Sascha K. Biermanns
*
* ====================================================================================
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
* =====================================================================================
*
* Last changes:
* - 22.05.2011 Beginn an der Arbeit des Spiels
* - 22.05.2011 Schusswaffen und Munition implementiert
* - 22.05.2011 Tripodenauftauchen eingebaut
* - 12.06.2011 Changed the engine to the english language
*
* =====================================================================================
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <time.h>
#include <string.h>
#include <ncurses.h>
#include <locale.h>
#define FILENAME ".steampunkffrsicherung.txt"
// Neuer Typ: character_t & npc_t
// Zur Speicherung der Kampfwerte
typedef struct _character {
char name[30];
int dexterity;
int dexterity_start;
int strength;
int strength_start;
int luck;
int luck_start;
} character_t;
// -----------
// Der player
// -----------
static character_t player;
// ----------------------
// Variablen des Spielers
// ----------------------
enum objectsynonyms { nichts, astgabel, bogensilberpfeil, buch, drachenfeuerzauber, dexteritypotion, riffle, luckpotion, goldstuecke, handschuh, helm, holzhammer, holzpflock, holzschild, juwelenauge, kaese, kerze, laterne, lederruestung, lederruestung2, ohrringe, ammunition, pergament, gun, proviant, rucksack, schild, schwert, schwert2, silberkreuz, silbersichel, strengthpotion, taschenlampe, taschenmesser, unsichtbarkeitstrank, verbandskasten, verwuenschterhelm, warndreieck, wunderwasser, zombiegold ,maximumobject };
static int object[maximumobject] = { [laterne] = 1, [lederruestung] = 1, [proviant] = 10, [rucksack] = 1, [schwert] = 1 };
static char *objectname[maximumobject] = { "Nichts", "Astgabel", "Bogen und Silberpfeil", "Buch", "Drachenfeuerzauber", "dexteritypotion", "riffle", "Glückstrank", "Goldstücke", "Handschuh", "Helm", "Holzhammer", "Holzpflock", "Holzschild", "Juwelenauge", "Käse", "blaue Kerze", "Laterne", "Lederrüstung", "Lederrüstung", "Ohrringe", "Patronen", "Pergament", "gun", "Proviant", "Rucksack", "Schild", "Schwert", "Zauberschwert +2", "Silberkreuz", "Silbersichel", "Stärketrank", "Pumptaschenlampe", "Taschenmesser", "Unsichtbarkeitstrank", "Verbandskasten", "Verwuenschter Helm", "Warndreieck", "Wunderwasser", "Zombiegold" };
static int attackbonus = 0;
static int fuenfwahl = 0;
static bool onlysilverhits = false;
static int paralized = 0;
static int price = 0;
static int schluessel = 0;
static bool schluessel9 = false;
static bool schluessel66 = false;
static bool schluessel99 = false;
static bool schluessel111_1 = false;
static bool schluessel111_2 = false;
static bool schluessel125 = false;
static bool schluesselbootshaus = false;
static bool cheating = false;
static bool silverweapon = false;
static bool invisible = false;
static bool tripodgesehen = false;
static int killedpeople = 0;
static int killedfoes = 0;
static bool agartha = false;
static bool verzeichnisgelesen = false;
static bool buchgefunden = false;
static bool kartegefunden = false;
static bool sargverschoben = false;
static bool durchganggeoeffnet = false;
static bool schluesselgefunden = false;
// -------------
// room Variable
// -------------
static int room = 0;
// ----------------
// quitting Variable
// ----------------
bool quitting = false;
// -----------------------------------------
// Spezialmonster (immun außer gegen Silber)
// -----------------------------------------
character_t Schuppiges_scheusal = { "Schuppiges Scheusal", 9, 9, 6, 6 };
// -------------------
// Funktionsprototypen
// -------------------
// Funktion: dice
int dice(unsigned int);
// Funktion: Test your luck
bool tyl(character_t *);
// Funktion: fightround
bool fightround(character_t *, character_t *, void (*)());
// Funktion: fight
bool fight(character_t *, character_t *, int, bool, void (*)());
// Funktion: Momentane Werte
void actual_values(character_t *);
// Funktion: key
char key(void);
// Funktion: textoutput
void textoutput(char *);
// Funktion: go_on
void go_on(void);
// Funktion: choice
void choice(char *, int, void (*)(), void (*)(), void (*)(), void (*)(), void (*)(), void (*)());
// Funktion: tryyourluck
void tryyourluck(void (*)(), void (*)());
// Funktion: tryyourdexterity
void tryyourdexterity(void (*)(), void (*)());
// Funktion: choose
int choose(char*, int);
// Funktion: escape
void escape(void (*funktion1)());
// Funktion: haveameal
void haveameal(void);
// Funktion: dexteritypotion trinken
void drink_dexteritypotion();
// Funktion: Stärketrank trinken
void drink_strengthpotion();
// Funktion: Glückstrank trinken
void drink_luckpotion();
// Funktion: Objkekt ablegen
void drop_object();
// Funktion: Ja-Nein-Frage
bool yesnoquestion(char *);
// Funktion: raisedexterity
void raisedexterity(int, int);
// Funktion: raisestrength
void raisestrength(int, int);
// Funktion: raiseluck
void raiseluck(int, int);
// Funktion: save
int save(void);
// Funktion: load
int load(void);
// Funktion: quit
void quit(void);
// ---------------------------------
// Implementation für das Spielmodul
// ---------------------------------
void vorwort();
void place1();
void place2();
void place3();
void place4();
void place5();
void place6();
void place7();
void place8();
void place9();
void place10();
void place11();
void place12();
void place13();
void place14();
void place15();
void place16();
void place17();
void place18();
void place19();
void place20();
void place21();
void place22();
void place23();
void place24();
void place25();
void place26();
void place27();
void place28();
void place29();
void place30();
void place31();
void place32();
void place33();
void place34();
void place35();
void place36();
void place37();
void place38();
void place39();
void place40();
void place41();
void place42();
void place43();
void place44();
void place45();
void place46();
void place47();
void place48();
void place49();
void place50();
void place51();
void place52();
void place53();
void place54();
void place55();
void place56();
void place57();
void place58();
void place59();
void place60();
void place61();
void place62();
void place63();
void place64();
void place65();
void place66();
void place67();
void place68();
void place69();
void place70();
void place71();
void place72();
void place73();
void place74();
void place75();
void place76();
void place77();
void place78();
void place79();
void place80();
void place81();
void place82();
void place83();
void place84();
void place85();
void place86();
void place87();
void place88();
void place89();
void place90();
void place91();
void place92();
void place93();
void place94();
void place95();
void place96();
void place97();
void place98();
void place99();
void place100();
void place101();
void place102();
void place103();
void place104();
void place105();
void place106();
void place107();
void place108();
void place109();
void place110();
void place111();
void place112();
void place113();
void place114();
void place115();
void place116();
void place117();
void place118();
void place119();
void place120();
void place121();
void place122();
void place123();
void place124();
void place125();
void place126();
void place127();
void place128();
void place129();
void place130();
void place131();
void place132();
void place133();
void place134();
void place135();
void place136();
void place137();
void place138();
void place139();
void place140();
void place141();
void place142();
void place143();
void place144();
void place145();
void place146();
void place147();
void place148();
void place149();
void place150();
void place151();
void place152();
void place153();
void place154();
void place155();
void place156();
void place157();
void place158();
void place159();
void place160();
void place161();
void place162();
void place163();
void place164();
void place165();
void place166();
void place167();
void place168();
void place169();
void place170();
void place171();
void place172();
void place173();
void place174();
void place175();
void place176();
void place177();
void place178();
void place179();
void place180();
void place181();
void place182();
void place183();
void place184();
void place185();
void place186();
void place187();
void place188();
void place189();
void place190();
void place191();
void place192();
void place193();
void place194();
void place195();
void place196();
void place197();
void place198();
void place199();
void place200();
void place201();
void place202();
void place203();
void place204();
void place205();
void place206();
void place207();
void place208();
void place209();
void place210();
void place211();
void place212();
void place213();
void place214();
void place215();
void place216();
void place217();
void place218();
void place219();
void place220();
void place221();
void place222();
void place223();
void place224();
void place225();
void place226();
void place227();
void place228();
void place229();
void place230();
void place231();
void place232();
void place233();
void place234();
void place235();
void place236();
void place237();
void place238();
void place239();
void place240();
void place241();
void place242();
void place243();
void place244();
void place245();
void place246();
void place247();
void place248();
void place249();
void place250();
void place251();
void place252();
void place253();
void place254();
void place255();
void place256();
void place257();
void place258();
void place259();
void place260();
void place261();
void place262();
void place263();
void place264();
void place265();
void place266();
void place267();
void place268();
void place269();
void place270();
void place271();
void place272();
void place273();
void place274();
void place275();
void place276();
void place277();
void place278();
void place279();
void place280();
void place281();
void place282();
void place283();
void place284();
void place285();
void place286();
void place287();
void place288();
void place289();
void place290();
void place291();
void place292();
void place293();
void place294();
void place295();
void place296();
void place297();
void place298();
void place299();
void place300();
void place301();
void place302();
void place303();
void place304();
void place305();
void place306();
void place307();
void place308();
void place309();
void place310();
void place311();
void place312();
void place313();
void place314();
void place315();
void place316();
void place317();
void place318();
void place319();
void place320();
void place321();
void place322();
void place323();
void place324();
void place325();
void place326();
void place327();
void place328();
void place329();
void place330();
void place331();
void place332();
void place333();
void place334();
void place335();
void place336();
void place337();
void place338();
void place339();
void place340();
void place341();
void place342();
void place343();
void place344();
void place345();
void place346();
void place347();
void place348();
void place349();
void place350();
void place351();
void place352();
void place353();
void place354();
void place355();
void place356();
void place357();
void place358();
void place359();
void place360();
void place361();
void place362();
void place363();
void place364();
void place365();
void place366();
void place367();
void place368();
void place369();
void place370();
void place371();
void place372();
void place373();
void place374();
void place375();
void place376();
void place377();
void place378();
void place379();
void place380();
void place381();
void place382();
void place383();
void place384();
void place385();
void place386();
void place387();
void place388();
void place389();
void place390();
void place391();
void place392();
void place393();
void place394();
void place395();
void place396();
void place397();
void place398();
void place399();
void place400();
// --------------------------------
// Zeigerliste aller ort-Funktionen
// --------------------------------
void (*raumptr[401]) (void) = {vorwort, place1, place2, place3, place4, place5, place6, place7, place8, place9, place10, place11, place12, place13, place14, place15, place16, place17, place18, place19, place20, place21, place22, place23, place24, place25, place26, place27, place28, place29, place30, place31, place32, place33, place34, place35, place36, place37, place38, place39, place40, place41, place42, place43, place44, place45, place46, place47, place48, place49, place50, place51, place52, place53, place54, place55, place56, place57, place58, place59, place60, place61, place62, place63, place64, place65, place66, place67, place68, place69, place70, place71, place72, place73, place74, place75, place76, place77, place78, place79, place80, place81, place82, place83, place84, place85, place86, place87, place88, place89, place90, place91, place92, place93, place94, place95, place96, place97, place98, place99, place100, place101, place102, place103, place104, place105, place106, place107, place108, place109, place110, place111, place112, place113, place114, place115, place116, place117, place118, place119, place120, place121, place122, place123, place124, place125, place126, place127, place128, place129, place130, place131, place132, place133, place134, place135, place136, place137, place138, place139, place140, place141, place142, place143, place144, place145, place146, place147, place148, place149, place150, place151, place152, place153, place154, place155, place156, place157, place158, place159, place160, place161, place162, place163, place164, place165, place166, place167, place168, place169, place170, place171, place172, place173, place174, place175, place176, place177, place178, place179, place180, place181, place182, place183, place184, place185, place186, place187, place188, place189, place190, place191, place192, place193, place194, place195, place196, place197, place198, place199, place200, place201, place202, place203, place204, place205, place206, place207, place208, place209, place210, place211, place212, place213, place214, place215, place216, place217, place218, place219, place220, place221, place222, place223, place224, place225, place226, place227, place228, place229, place230, place231, place232, place233, place234, place235, place236, place237, place238, place239, place240, place241, place242, place243, place244, place245, place246, place247, place248, place249, place250, place251, place252, place253, place254, place255, place256, place257, place258, place259, place260, place261, place262, place263, place264, place265, place266, place267, place268, place269, place270, place271, place272, place273, place274, place275, place276, place277, place278, place279, place280, place281, place282, place283, place284, place285, place286, place287, place288, place289, place290, place291, place292, place293, place294, place295, place296, place297, place298, place299, place300, place301, place302, place303, place304, place305, place306, place307, place308, place309, place310, place311, place312, place313, place314, place315, place316, place317, place318, place319, place320, place321, place322, place323, place324, place325, place326, place327, place328, place329, place330, place331, place332, place333, place334, place335, place336, place337, place338, place339, place340, place341, place342, place343, place344, place345, place346, place347, place348, place349, place350, place351, place352, place353, place354, place355, place356, place357, place358, place359, place360, place361, place362, place363, place364, place365, place366, place367, place368, place369, place370, place371, place372, place373, place374, place375, place376, place377, place378, place379, place380, place381, place382, place383, place384, place385, place386, place387, place388, place389, place390, place391, place392, place393, place394, place395, place396, place397, place398, place399, place400 };
// -------------------------
// Das eigentliche Abenteuer
// -------------------------
void intro(void) {
int input = 0;
color_set(0, 0);
textoutput("Hinweis\nIn diesem Roman wird niemand anderes als du selbst die Person sein, die das Abenteuer durchlebt. Von daher würde ich sagen, würdest du dir selber beim Erleben der Spielatmosspähre helfen, wenn du die Spielfigur nach dir benennst, oder ihr einen Namen gibst, der dir gefällt oder den du gerne tragen würdest.\nViel Spaß beim Lesen und Spielen!\nSascha Karl");
color_set(1, 0);
printw("By what name should you be known in the story? ");
getnstr(player.name, 30);
color_set(0, 0);
player.dexterity_start = dice(6) + 6;
player.dexterity = player.dexterity_start;
player.strength_start = dice(6) + dice(6) + 12;
player.strength = player.strength_start;
player.luck_start = dice(6) + 6;
player.luck = player.luck_start;
textoutput("Zu Beginn dieses Abenteuer wirst du nur ein absolutes Minimum an Objekten bei dir führen, als da wären ein Rucksack, ein Multifunktionstaschenmesser, eine Pumptaschenlampe und etwas Proviant. Außerdem ein Engergydrink, den du dir selber auswählen kannst. Welchen der Energydrinks wählst du?\n(1) den dexteritypotion - er stellt die anfängliche Gewandheitspunktzahl wieder her\n(2) den Stärketrank - er stellt die anfängliche Stärkepunktzahl wieder her\n(3) den Glückstrank - er stellt die anfängliche Glückspunktzahl wieder her und verbesser sie zusätzlich um einen Punkt");
while((input < 1) || (input > 3)) {
input = choose("Which energy drink would you choose for yourself? ", 3);
switch(input) {
case 1: object[dexteritypotion] += 2;
break;
case 2: object[strengthpotion] += 2;
break;
case 3: object[luckpotion] += 2;
break;
default: color_set(4, 0);
printw("Fehler! In der Energydrink-choice, in Funktion intro().");
color_set(0, 0);
break;
}
}
}
void vorwort(void) {
textoutput("Vorwort\n\nViele Menschen würden der Wiedervereinigung und der Politik die Schuld geben, das Menschen ins Abseits geraten. Die meisten wissen nicht, was das wirklich bedeutet, du jedoch schon. Seit Jahren bereits kämpfst du um dein Überleben, mit nicht mehr als deiner Kleidung am Körper, einem Ruckscack, einem Zelt, einer Pumptaschenlampe, einem Multifunktionstaschenmesser billigster Machart und einigen wenigen weiteren Kleinigkeiten. Momentan ist das Wetter noch Mild - und so hast du die Nacht in den Überresten einer alten Turmruine verbracht, die unbeachtet im Park des Museums am Münster steht.\nDoch diese Nacht war anders, als jede andere Nacht, die du im Freien verbracht hast. Sie war unheimlich. Du kannst dich erinnern, wie du aus dem Zelt klettertest - aber es war noch dunkel, und pechschwarz. Der ganze Himmel, alles war nur Schwarz, kein einziger Stern war zu sehen, nicht die Silhouette des Mondes, keine Wolken - rein gar nichts! Und dann war da dieses röhrende, metallische Geräusch. Und noch bevor du weißt, wie dir geschieht, wird es langsam hell - und du stehst immer noch da, in der gleichen Position. Bewegungslos. Die Frage ist nur, wie lange schon hast du bewegungslos herumgestanden? Und wieso überhaupt konntest du dich nicht bewegen?\nDa es noch immer recht früh ist, gehst du hinunter zu dem kunstvollen Brunnen des Museums. Der Park gehört in diesen Stunden dir allein. Du nimmst ein kurzes Bad und fühlst dich direkt viel wohler, so sauber, wenn es auch ein klein wenig eiskalt war. Mit einem alten Handtuch reibst du dich notdürftig trocken und ziehst dir saubere Unterwäsche an, bevor der Rest deiner alltäglichen Kleidung folgt. Den Rest deiner Kleidung verstaust du in einem Stoffbeutel und gehst zurück zu deinem Zelt. Mit wenigen Handgriffen baust du es auseinander, dann faltest du es und verstaust es vorsichtig.\nMit deinem ganzen Habseligkeiten bepackt gehst du die Treppen des Münster hinunter. Als Kind hast du dafür immer den schnellen Weg gewählt, mit den glatten Sandahlensohlen seid deine Freunde und ihre einfach immer stehend das Geländer hinuntergerutscht. Kinder kenen keinerlei Angst vor Gefahren. Du überquerst den Platz hinüber in Richtung des ehemaligen Dortin-Hotels und schlägst den Weg, die Hügelstraße hinauf ein. Nahe dem alten Wasserturm am Odenkirchweg versteckst du den Rucksack mit deinem Zelt, der Isoliermatte und all den anderen Dingen, die du nur des Nachts brauchst - und wanderst nur mit deinem \"leichten Gepäck\" die Vitusstraße hinunter. Du wanderst die Lüperzender Straße entlang und gehst schließlich die Brücke am ehemaligen Zentralbad hinauf - um noch kurz den kleine Park zu durchqueren, bevor du in Kürze die Hindenburgstraße nahe des Stadttheaters, oder einem seiner Nachfahren erreichst.");
}
// -----------
// --- 001 ---
// -----------
void place1(void) {
room = 1;
textoutput("Die Innenstadt macht um diese Zeit noch einen gänzlich unbelebten Eindruck - und kein einiges Licht erhellt die Straße. Keine Straßenlaterne, keine Glühbirne hinter einem Fenster, nicht einmal die Werbetafeln leuchten auf. Wenn du so drüber nachdenkst, auf deinem ganzen Weg hierhin hast du bisher keinerlei eingeschaltete Lichtquellen gesehen.\nNun stehst du an der Kreuzung Stepgesstraße Ecke Hindenburgstraße. Ein Stück die große Einkaufsstraße hinauf ist das Bäckereigeschäft, an dem dir jeden Morgen ein guter Geist eine braune Papiertüte mit dampfend warmen Gebäck bereitstellt. Du schaust in die Richtung, doch diesmal steht auf dem Stromkasten neben der Türe nicht der verlockende Beutel, sondern eine Gestalt steht in der Türe und winkt dir zu.");
choice("Wirst du auf die winkende Gestalt zugehen (1) oder ziehst du es vor, dich lieber scheu und mit knurrendem Magen aus dem Staub zu machen?", 2, place2, place3, NULL, NULL, NULL, NULL);
}
void place2(void) {
room = 2;
textoutput("Vorsichtig und etwas nervös näherst du dich der offenstehenden Ladentüre, als ein Regelrechter Platzregen losbricht, dann hört man es auch donnern. now läufst du auf die Türe zu. Eine Frau im weißen Kitel geht hinein und hält sie dir offen. Du gleitest hinein und bleibst neben einem Stehtisch stehen, während sie hinter dir die Türe zumacht und abschließt.\n\"Ist das nicht ein unheimlicher Morgen? Die ganze Stadt ist ohne Strom. Momentan habe ich ein Feuer im alten Backofen gemacht - gleich wird es hier ein paar frische Brötchen geben.\" sagt sie und geht an der Theke vorbei auf eine Tür die nach hinten führt zu. \"Na kommen sie!\" lädt sie dich ein, ihr zu folgen. Du gehst unsicher hinterher. Im Hinterzimmer steht ein Tisch, auf dem eine Thermoskanne und zwei Tassen bereitstehen. \"Ich wollte sie schon längst einmal angesprochen haben. Daß das an einem so schlechten Tag passiert, tut mir leid!\" Sie kommt mit einem Tablet voller dampfender Brötchen aus einem Nebenraum, während du unschlüssig neben dem Tisch stehst.\n\"Bitte setzen sie sich doch! Ich dachte, wir könnten zusammen frühstücken!\" sagt sie und stellt das Tablett auf dem Tisch ab. Dann setzt sie sich hin. \"Ich bin Elke.\" stellt sie sich vor.\nAls du ihr gerade mit deinem Namen antworten willst, geschieht das unfassbare: die Sirenen fangen an zu heulen, mitten in dieser Kackophonie des Gewitters - und das um Fünf Uhr, Morgens in der Frühe.\n\"Was geht da vor sich?\" fragt Elke, während du dir das Sirenensignal genauer anhörst. \"Haben sie ein Radio hier, oder einen Fernsehe?\" fragst du Elke, aber die zuckt nur mit den Schultern.\n\"Kein Batteriebetriebenes, der Strom ist ausgefallen, da tut's der Fernseher nicht.\" Sie deutete mit der Hand neben deinem Ohr entlang hinter dich. Du drehst dich auf der Sitzfläche des Stuhls um und erblickst das Gerät. Die Sirenen heulen now bereits seit mehr als einer Minute.\n\"Das ist keine Übung, das ist eine echte Warnung, aber vor was?\" sagst du laut zu dir. Du sprichst sehr oft mit dir selbst, vermutlich, um nicht vor Einsamkeit den Verstand zu verlieren. Wieder erklingt das Donnern und Grollen.");
choice("Willst du erst einmal in Ruhe Frühstücken (1) oder Elke fragen, ob sie dich rauslassen kann, damit du nachsiehst, was eigentlich los ist (2) oder sie fragen, ob sie über einen weiteren Empfänger verfügt, der nicht ans Stromnetz angeschlossen ist (3)?", 3, place4, place5, place6, NULL, NULL, NULL);
}
void place3(void) {
// Kein Kontakt
room = 3;
textoutput("Du bist ein äußerst mißtrauischer Mensch und vertraust der unbekannten, winkenden Gestalt nicht. Zu deinem Glück fängt es an zu regnen. Es ist ein echter Platzregen. Du rennst ein Stück weit die Hindenburgstraße hinab und biegst in die Lichtpassage ein, wo du dich während des Regens unterstellts. Kaum bist du eine Minute drin, als plötzlich überall die Sirenen anfangen zu heulen. Draußen hörst du ein lautes Donnergrollen. Auch ist es viel dunkler geworden, seit die dichten grauen Wolken sich mit ihrem Regen auf Gladbach ergehen. Plötzlich pfeift ein Schuß an dir vorbei und schlägt in die Fensterscheibe ein Stück vor dir ein. Du hechtest in den nächsten Eingang und siehst zurück. Du bist nicht alleine. Von oben herab kommt eine Gestalt gelaufen. Aus deinem Rucksack holst du dein Taschenmesser heraus und klappst es auf. Es ist fast so, als wärst du unbewaffnet, aber besser als nichts. Dein enemy kommt go_on auf dich zugeeilt.");
place13(); // Zufallsgegner
textoutput("Die gun deines Gegners ist leergeschossen. Du durchsuchst ihn hastig, findest, aber keinerlei Munition bei ihm.");
if(yesnoquestion("Möchtest du die gun einstecken (j/n)?"))
object[gun] += 1;
textoutput("Es war zwar Notwehr, dennoch hockst du now hier neben einer Leiche. Dein Gefühl sagt dir, daß es wohl das beste wäre, dich so schnell wie möglich aus dem Staub zu machen, Unwetter hin oder her.");
choice("Möchtest du den Lichthof nach Norden verlassen in Richtung Kaisterstraße (1), oder nach Süden in Richtung Hindernburgstraße (2)?", 2, place50, place51, NULL, NULL, NULL, NULL);
}
void place4(void) {
// Frühstücken
room = 4;
textoutput("Du setzt dich zu Elke an den Tisch. Das Wetter, den Donner und den fehlenden Strom ignorieren, lernt ihr euch langsam besser kennen, während die Anzahl der Backwaren auf dem Tablett deutlich schrumpfen und der heiße Kaffee aus der Thermoskanne sich wohlig in deinem Inneren verteilt. Der Ort, die Zeit, die Situation, alles könnte man als idyllisch bezeichnen, wenn, ja wenn nicht auf einmal dieses seltsame Geräusch eine absterbenden Sirene gewsen wäre. Es war kein Abschwellen, wie man es kenn, sondern klang eher, wie ein entenartiger Aufschrei.\nUnd dann nimmst du plötzlich war, das mit dem Verstummen dieser Sirene die Masse an Sirenen, die noch klingen, weniger hoch ist, als zuvor. Aber was viel wichtiger ist, einige gehen immer noch. Langsam wirst du dir der Situation bewußt, die da draußen herrscht - und du beschließt, nachsehen zu gehen, was da los ist.");
place5();
}
void place5(void) {
// Raus auf die Straße
room = 5;
textoutput("Du schlägst vor, daß du dich draußen umsiehst und zurückkommst, sobald du weißt, was los ist. Elke begleitet dich zur Ladentüre und läßt dich raus. Der Regen prasselt von oben herab und immer wieder donnert es. Du winkst ihr kurz zu und rennst so gut es geht an den Hauswänden entlang die Hindenburgstraße hinauf, trotzdem bist du nach weniger als einer Minute bis auf die Unterhose durchnäßt. Als du am ehemaligen Heinemann vorbeikommst und durch die kurze Passage läuftst, bemerkst du an der Straßenecke zum Sankt Vith hinunter einen brennenden Polizeiwagen. Ein mulmiges Gefühl geht dir durch den Magen. Eigentlich wolltest du ja in das Haus, das früher deinem Großvater gehört hat - und von dem aus man eine Übersicht über die ganze Stadt hat. Trotzdem ergreift dich gerade die Angst.");
choice("Vielleicht wäre es ja besser, die Straße wieder hinunter zulaufen - und sich im Geschäft bei Elke zu verstecken (1)? Du könntest auch auf den Polizeiwagen zulaufen, vielleicht kannst du jemandem helfen, der im Wagen eingeklemmt ist (2)? Oder du folgst deinem ursprünglichen Plan, das Haus deines Großvaters zu erreichen (3)?", 3, place7, place8, place9, NULL, NULL, NULL);
}
void place6(void) {
// Nach einem Empfänger fragen
room = 6;
textoutput("Elke schüttelt den Kopf, und verneint deine Frage. \"Tut mir leid, so etwas ist nicht hier im Geschäft. Das einzige Radio, das mir einfallen würde, wäre mein Autoradio.\" entgegnet sie, nimmt sich ein warmes Brötchen vom Tablett und kaut daran herum.");
choice("Willst du sie wirklich überreden, mit dir zu ihrem Auto zu gehen (1), oder würdest du now nicht viel lieber frühstücken (2)? Wenn du unbedingt draußen nachsehen willst, was los ist, könntest du Elke auch bitten, dich rauszulassen (3).", 3, place17, place4, place5, NULL, NULL, NULL);
}
void place7(void) {
// Zurück zum Geschäft
room = 7;
textoutput("Vollkommen durchnäßt kommst du wieder am Geschäft an. Drinnen ist alles dunkel. Du klopfst mehrfach, aber nichts rührt sich.");
choice("Willst du es go_on mit klopfen und rufen probieren (1), oder willst du versuchen, ob du die Türe öffnen kannst (2), oder willst du dir einen anderen Weg suchen (3)?", 3, place14, place15, place16, NULL, NULL, NULL);
}
void place8(void) {
// Zum Polizeiwagen
room = 8;
if(object[riffle] > 0) {
textoutput("Du läufst erneut über den Platz um dir den Polizeiwagen noch einmal anzusehen. Das Feuer ist erloschen. Du überlegst dir gerade, ob du eine noch gründlichere Durchsuchung des Wagens vornehmen sollst, als du ein Geräusch aus der Richtung der Kirche hören kannst. Ein Geschoss schlägt in die Karosserie des Wagens ein.");
choice("Willst du dich dem fight stellen (1) oder versuchen zu fliehen (2)?", 2, place10, place11, NULL, NULL, NULL, NULL);
}
else {
textoutput("Der Polizeiwagen raucht eigentlich nur noch. Fahrer- und Beifahrertüre stehen weit offen. Vorsichtig umrundest du den Wagen. Kein Mensch ist darin, aber auch kein Anzeichen der beiden Polizisten, die sich darin hätte befinden müssen. Im offenen Seitenfach der Beifahrertüre ist ein riffle, die Verriegelung der Waffe ist offen. Du könntest sie an dich nehmen. Du durchsuchst den Kofferraum. In diesem befindet sich ein Munitionspäckchen mit 100 Patronen, ein Verbandskasten und ein Warndreieck.");
if(yesnoquestion("Willst du etwas von den Sachen mitnehmen (j/n)?")) {
if(yesnoquestion("Willst du das riffle mitnehmen (j/n)?"))
object[riffle] += 1;
if(yesnoquestion("Willst du die Patronen mitnehmen (j/n)?"))
object[ammunition] += 100;
if(yesnoquestion("Willst du den Verbandskasten mitnehmen (j/n)?"))
object[verbandskasten] += 1;
if(yesnoquestion("Willst du das Warndreieck mitnehmen (j/n)?"))
object[warndreieck] += 1;
}
choice("Willst du now go_on zum Haus deines Großvaters (1) oder zurück zum Geschäft (2)?", 2, place9, place7, NULL, NULL, NULL, NULL);
}
}
void place9(void) {
// Zum Haus deines Großvaters
room = 9;
if(tripodgesehen == true) {
textoutput("Du läufst auf das Haus deines Großvaters zu und in den Eingang zwischen Gaststätte und Kleidungsgeschäft. Für einen Moment mußt du vor der alten Holztüre mit der Glasscheibe halten. Mit Hilfe deines Taschenmessers daudert es nur ein paar Sekunden, dann ist die Türe öffnet und du schlüpfst hinein.");
place21();
}
textoutput("Du läufst an der Häuserwand des Alten Marktes entlang und gelangst schließlich zum Haus deines Großvaters. Du machst dich mit Hilfe deines Taschenmessers kurz am Schloß der alten Holztüre zu schaffen, sie geht fast sofort aus. Den Trick hast du schon als Kind gemacht, wenn du mal wieder deinen Schlüssel zu Hause vergessen hattest - und er klappt immer noch wunderbar. Du hastest die Türe hinauf. Immer noch donnert es draußen, so laut, wie du es schon lange bei keinem Gewitter mehr gehört hast. Auf jeder Etage drückst du den Lichtschalter, aber keiner schaltet das Licht an. Auch hier ist vollkommener Stromausfall. Kurz bevor du die oberste Etage erreichst, hören die Sirenen auf zu heulen, was für dich nur zum Vorteil sein kann, steht doch noch eine alte motorbetriebene E57. Du obersten Treppen sind am kürzesten und am verwinkelsten. Links die Waschküche läßt du liegen, da kannst du nichs sehen. Du stürmst nach rechts, den kurzen Gang entgang und reißt die hintereste Türe auf der rechten Seite auf. Du stürmst auf das Dachfenster an der Südseite zu. Überall siehst du dunkelgraue Wolkenberge sich auftürmen. Statt bis nach Düsseldorf kannst du nicht einmal bis an die Westgrenze Mönchengladbachs sehen. Du wendest den Blick ab und läufst zu einem der Fenster an der Nordseite. Hier bietet sich die ein gleiches Bild. Die Wolken sind so dicht, daß du nicht einmal den Gladbacher Wasserturm in dieser Brühe sehen kannst. Bleiben noch die Fenster an der Südseite. Bereits als du dich ihnen näherst, erkennst du, daß du hier ein weiteres Sichtfeld haben wirst. Du reißt das Fenster auf um besser sehen zu können. Von oben peitschen dicke Regentropen herab, aber das aufgeklappte Fenster schützt dich weitestgehend. Die Wolkenwand ist hier einige Kilometer entfernt. Da plötzlich wird es hell in der Wolkenwand. Wie gebannt starrst du dahin. War das ein Blitz? Da wieder. Wieder ein Blitz. Wieder in der Wolkenwand. Das ist now aber sehr ungewöhnlich. Minutenlang starrst du auf die Wolkenwand - und auch an zwei oder drei anderen Stellen erblickst du immer wieder kurze Blitze - mitten in der Wolkenwand, aber fast auf Bodenhöhe. Ein mulmiges Gefühl breitet sich in deinem Magen aus. Gerade, als du das Fenster schließen willst, kommt etwas aus der Wolke. Etwas riesiges. Ein object, wie ein Turm, aber es bewegt sich, wie ein Stelzenläufer. Und ein Lichtbogen, wie ein Blitz spannt sich von ihm aus, dann brennt etwas zu seinen - Beinen? - während es sich go_on in Richtung der Gladbacher Innenstadt voranschiebt.\n Deine Nackenhärchen haben sich aufgerichtet. Du weißt zwar nicht genau, was das ist, aber es bringt Zerstörung, soviel ist sicher. Hastig schließt du das Fenster. Du rennst aus dem Dachstuhl heraus zurück in den Flur und eilst die Treppen hinab, bis du unten an den der Haustüre ankommst. Was wirst du tun?");
tripodgesehen = true;
choice("Du läufst hinaus und zu dem Polizeiwagen (1), du läufst die Kellertreppe hinab und suchst dort Schutz vor dem was kommt (2) oder du läufst zurück zu Elke, der Frau, die dich täglich mit Backwaren versorgt hat und erzählst ihr, was du gesehen hast (3)?", 3, place8, place20, place7, NULL, NULL, NULL);
}
void place10(void) {
// fight
room = 10;
place13();
textoutput("Du bist nicht stolz darauf, einen anderen Menschen getötet zu haben, aber du warst ja nicht der attacker. Trotzdem fühlst du dich schäbig. Etwas in dir hat sich verändert, das kannst du spüren. Noch immer prasselt der Regen auf dich, so als wäre nichts gewesen. Und hinter den Wolkenbergen, da bist du dir sicher, scheint immer noch die Sonne.");
choice("Willst du now go_on zum Haus deines Großvaters (1) oder zurück zum Geschäft (2)?", 2, place9, place7, NULL, NULL, NULL, NULL);
}
void place11(void) {
// fliehen
room = 11;
tryyourluck(place12, place13);
place10();
}
void place12(void) {
// entkommen
room = 12;
textoutput("Geduckt rennst du an der Häuserwand entlang und dann rechts in die Straße, auf das Kabuff zu, dort rennst du links um die Ecke in Richtung Kapuzinerplatz, läufst dann aber stattdessen um die Kirche herum, ein kurzes Stück über den Parkplatz - und dann die Stepgesstraße hinunter, bis du schließlich wieder die Hindenburgstraße erreichst. Etwas atemlos stellst du dich an die Wand. Mehr als nur einmal bist du beim Laufen geschlittert. Das Wasser läuft in Strömen in die Kanalisation. Du vergewisserst dich, bleibst mehrere Minuten in deiner versteckten Position, bis du dir sicher bist, daß der attacker dir nicht gefolgt ist. Erst now begibst du dich zurück zur Bäckerei.");
place7();
}
void place13(void) {
// Begegnung mit einem Zufallsgegner der "Zivilseite"
int zufallsgegner = dice(6);
bool kampfausgang;
character_t gegner1 = { "verängstigte Frau", 2, 2, 3, 3 };
character_t gegner2 = { "Plünderer", 6, 6, 3, 3 };
character_t gegner3 = { "aggressiver Jugendlicher", 6, 6, 4, 4 };
character_t gegner4 = { "Polizist", 5, 5, 4, 4 };
character_t gegner5 = { "Gutbürger", 6, 6, 5, 5 };
character_t gegner6 = { "Heckenschütze", 8, 8, 4, 4 };
character_t gegner7 = { "wahnsinniger Polizist", 6, 6, 4, 4 };
switch(zufallsgegner) {
case 1: kampfausgang = fight(&player, &gegner1, 1, false, NULL);
break;
case 2: kampfausgang = fight(&player, &gegner2, 1, false, NULL);
break;
case 3: kampfausgang = fight(&player, &gegner3, 1, false, NULL);
break;
case 4: kampfausgang = fight(&player, &gegner4, 1, false, NULL);
break;
case 5: kampfausgang = fight(&player, &gegner5, 1, false, NULL);
break;
case 6: kampfausgang = fight(&player, &gegner6, 1, false, NULL);
break;
default: kampfausgang = fight(&player, &gegner7, 1, false, NULL);
break;
}
if(!kampfausgang) {
textoutput("Das war nicht dein bester fight. Um ehrlich zu sein, das war dein schlechtester fight - und auch dein letzter fight. Dein allerletzter fight, den du nicht überlebt hast. Mit dir ist es zu ENDE gegangen.");
exit(EXIT_SUCCESS);
}
killedpeople += 1;
if(dice(6) >= 4) {
if(object[gun] <= 1)
if(yesnoquestion("Willst du die gun deines Gegners an dich nehmen (j/n)?"))
object[gun] += 1;
}
else {
if(object[riffle] <= 0)
if(yesnoquestion("Willst du das riffle deines Gegners an dich nehmen (j/n)?"))
object[riffle] += 1;
}
object[ammunition] += dice(8);
}
void place14(void) {
// Klopfen und rufen
room = 14;
if(dice(6) >= 4) {
textoutput("Dein Klopfen hat dich unvorsichtig gemacht. Du hast einen unerwarteten Gast angelockt.");
place13();
}
else textoutput("Bisher scheinen deine Bemühungen nicht zu fruchten. Drinnen reagiert Nichts und niemand auf dein Klopfen.");
choice("Willst du es go_on mit klopfen und rufen probieren (1), oder willst du versuchen, ob du die Türe öffnen kannst (2), oder willst du dir einen anderen Weg suchen (3)?", 3, place14, place15, place16, NULL, NULL, NULL);
}
void place15(void) {
// Versuchen, die Türe aufzubekommen
room = 15;
tryyourluck(place18, place19);
}
void place16(void) {
// Versuchen, einen anderen Weg zu finden
room = 16;
}
void place17(void) {
// Auf dem Weg zu Elkes Auto
room = 17;
textoutput("Du schulterst dir deinen Rucksack, während Elke ein paar Papiertüten mit Backwaren füllt. Danach siehst du ihr zu, wie sie ein paar Flaschen aus dem Kühlschrank holt und in eine weitere Tüte stopft. Als sie alles gepackt hat, verschwindet sie kurz im Nebenzimmer und kommt, now einen Mantel tragend, eine Damenhandtusche um die Schulter hängend zurück. Ihr nennt die ganzen Taschen und verlasst das Geschäft. Elke schließt den load hinter sich ab, macht sogar die Bewegung zum Scharfschalten der Alarmanlage, dann sagt sie: \"Komm!\" und geht dir voraus, die Stepgesstraße hinunter.\nMißtrauisch wirfst du einen Blick zum Jugendheim hinüber. Oft genug, haben dir da schon junge Kerle aufgelauert. Diesmal aber bleibt alles ruhig. Elke führt dich ein kurzes Stück go_on und hält vor einer Parkhaustüre. Sie holt einen Schlüssel heraus und schließt auf. Gemeinsam geht ihr in das Innere des Parkhauses. Das Treppenhaus stinkt nicht so muffig und nach Urin, wie es oft der Fall ist, wenn Betrunkene sich eine Stelle für ihre Notdurft suchen. Ihr steigt hinab bis zum dritten Untergeschoß.\nSchließlich erreicht ihr Elkes Auto, einen schon etwas älteren Kombi. Sie entriegelt das Auto per Knopf. Ihr verladet eure Taschen und deinen Rucksack im Kofferraum und setzt euch in das Auto, wobei du auf dem Beifahrersitz Platz nimmst. Das kleine Licht der Mittelkonsole ist im Moment die einzige aktive Lichtquelle im ganzen Parkhaus.\nElke fummelt am Autoradio herum, aber das Digitalradio findet keinen Sender den es darstellen kann. Schließlich gibt sie die Suche auf. \"Hier drinnen haben wir keinen Empfang, ich müßte schon aus dem Parkhaus herausfahren, damit wir etwas hören könnten.\"");
choice("Stimmst du Elke zu - und ihr fahrt mit dem Auto aus dem Parkhaus heraus in den Regen (1) oder hast du ein mulmiges Gefühl und glaubst nicht, daß das eine gute Idee ist (2)?", 2, place100, place101, NULL, NULL, NULL, NULL);
}
void place18(void) {
// Du bekommst die Türe auf
room = 18;
}
void place19(void) {
// Die Türe geht nicht auf
room = 19;
}
void place20(void) {
// Im Keller des Großvaters
room = 20;
textoutput("Du öffnest die eiserne Treppe und gehst die Kellertreppe hinunter. Als du am Fuße der Treppe ankommst, siehst du vor dir die eiserne Doppeltüre, die in den Heizungskeller führt. Nach rechts führt ein weiterer Weg zum Lagerraum, wo deine Großmutter ihre Kartoffeln lagerte. Neben der Treppe führt ein Weg nach hinten, wo die Mieter des Hauses ihre Kellerabteile haben.");
choice("Wenn du zurück nach oben gehen willst (1). Möchtest du in den Heizungskeller (2). Willst du in den Gang, der zum Kartoffellager deiner Großmutter führt (3). Würdest du gerne in den rückwärtigen Bereich gehen (4).", 4, place21, place22, place23, place24, NULL, NULL);
}
void place21(void) {
// Treppenflur
room = 21;
textoutput("Du stehst in einem großen Treppenflur. An der Seite befindet sich der Hängeschrank mit den ganzen Ablesegeräten für Elektrizität und Wasser. Rechts an der Wand für eine Steintreppe hinauf in das erste Stockwerk. Geradeaus ist eine Holztüre, durch die man in den Kellerbereich der Gaststätte kommt, allerdings ist sie dauerhaft abgeschlossen. Rechts neben der Holztüre, unterhalb der Steintreppe, befindet sich eine Eisentüre, hinter der sich der Abstieg in den Keller befindet.");
choice("Willst du die Treppe hinaufsteigen (1), in den Keller hinuntergehen (2), oder das Haus verlassen und zurück auf den Alten Markt (3)?", 3, place25, place20, place26, NULL, NULL, NULL);
}
void place22(void) {
// Heizungskeller
room = 22;
if(agartha == true)
textoutput("Ein großteil der Kohlen liegt auf dem Boden. An der rußgeschwärtzten Wand kannst du das Wort \"Agartha\" lesen. Der Heizungskessel arbeitet derzeit nicht. Sonst befindet sich ncihts im Heizungskeller.");
else {
textoutput(" Als du die Türe öffnest, ist es recht stickig im room. Der Heizkessel ist aus, obwohl in einem großen Verschlag an der Seite sich die Kohlen nur so stapeln. Als du genauer hinguckst, hast du das Gefühl, den geritzen Buchstaben \"A\" an der Wand zu sehen.");
if(yesnoquestion("Willst du soviele der Kohlen zur Seite räumen, um zu sehen, ob das \"A\" vielleicht Teil eines Wortes ist? Eine letzte Nachricht deines Großvaters an dich?")) {
textoutput("Deine Kleidung verdreckt vollständig, während du auf den Kohleberg krabbelst - und Brikett umd Brikett wegräumst. Noch dazu machst du eine Menge Krach.");
if(dice(6) >= 4)
place13();
textoutput("Endlich hast du das Gekritzel an der Wand freigelegt. Was du liest, ist ein Wort: \"Agartha\"");
agartha = true;
}
}
choice("Willst du in in den Gang zum Kartoffelkeller (1), oder willst du zu den rückwärtigen Kellen (2) oder möchtest du zurück nach oben in den Treppenflur (3)?", 3, place23, place24, place21, NULL, NULL, NULL);
}
void place23(void) {
// Gang zum Kartoffelkeller
room = 23;
textoutput("Du gehst durch den nach Moder riechenden Gang. Als du an das ehemalige Kartoffellager deiner Großmutter kommst, mußt du feststellen, das es einfach nur leer und verdreckt ist. Seit ihrem Tod hat es wohl niemand mehr betreten. Die Kartoffeln müssen schon vor Jahren verschimmelt sein. Du wendest den Blick zur Seite. Die Klappe, durch die früher immer die Bierfässer hinabgelassen wurden, befindet sich immer noch am Ende des Ganges. now würde sie allerdings in den Wintergarten der Gaststätte führen. Da du hier nichts go_on finden kannst, beschließt du zurückzugehen.");
place20();
}
void place24(void) {
// Rückwärtige Keller
room = 24;
textoutput("Du gehst an der Kellertreppe vorbei. Hinter ihr macht der Gang einen Knick nach rechts, und nach einem kurzen Durchang stehst du vor einem breiten Gang. Überall sind durch hölzerne Boxen getrennt die Kellerabteile der Mieter dieses Hauses. Der Verschlag, hinter dem deine Sachen gesichert waren, ist leer, bis auf die Erinnerungen daran in deinem Kopf. Du drehst dich um und gehst zurück.");
place20();
}
void place25(void) {
// Die Treppe hinaufsteigen
room = 25;
if(schluesselgefunden) {
textoutput("Die steigst die Treppen hinauf bis zum Dachgeschoss. Hinter der vorletzten Türe auf der rechten Seite, befindet sich das Spielzimmer, daß dein Großvater dir schenkte. Hier hatte er auf einer Spanplatte eine Eisenbahn mit Bergen und Tunneln für dich aufgebaut, auch wenn er es meistens war, der die Züge fahren ließ. Du steckst den Schlüssel, den du im Keller gefunden hast, ins Schloss - und schließt die Türe auf. Du öffnest sie - und vor dir schwingt sie nach innen. Die Eisenbahn ist immer noch fest montiert auf der Spanplatte, die auf dem rötlichen Boden liegt. Du trittst ein - und schließt die TÜre hinter dir, schließt sie sogar ab, um ungestört zu sein. Auf einem Holzstuhl findest du ein Buch. Als du es dir nimmst und umdrehst, ist es der fehlende Band aus der Bibliothek. Groß prangt der Name Agartha darauf. Du setzt dich auf den Stuhl und blätterst es durch. Immer wieder stößt du auf Passagen in dem Buch, die dein Großvater mit Bleistift unterstrichen hat. In den Passagen ist die Rede von einer Stadt, die sich in den Tiefen der Erde befinden soll. Es finden sich Referenzen darauf, das es Eingänge zu dieser Stadt geben soll - und das wenigstens einer dieser Eingänge in Tibet ist. Plötzlich flattert ein Blatt aus dem Buch. Es muß zwischen den Seiten gelegen haben. Du bückst dich und hebst es auf. Mit der krakeligen Schrift deines Großvaters steht darauf notiert: \"Münster Sarg Innenhof Keller Rheydt\"\nDu steckst den Zettel und das Buch in deinen Rucksack.");
buchgefunden = true;
}
}
void place26(void) {
// Der Alte Markt
room = 26;
}
void place27(void) {
}
void place28(void) {
}
void place29(void) {
}
void place30(void) {
room = 30;
}
void place31(void) {
}
void place32(void) {
}
void place33(void) {
}
void place34(void) {
}
void place35(void) {
room = 35;
}
void place36(void) {
room = 36;
}
void place37(void) {
room = 37;
}
void place38(void) {
}
void place39(void) {
}
void place40(void) {
room = 40;
}
void place41(void) {
}
void place42(void) {
room = 42;
}
void place43(void) {
room = 43;
}
void place44(void) {
}
void place45(void) {
}
void place46(void) {
room = 46;
}
void place47(void) {
}
void place48(void) {
room = 48;
}
void place49(void) {
}
void place50(void) {
// Alleine go_on, Richtung Kaiserstraße
room = 50;
}
void place51(void) {