1#game "blackgate"
2
3/*
4 *	Global flags, assuming 1000- are free.
5 */
6enum Isleflags
7	{
8	TALKED_DRCODE = 1000,
9	ASKED_ABOUT_PYRO,
10	ASKED_WHERE_PYRO,
11	ASKED_KNOW_PYRO,
12	LOST_FAQ,			// Talked to Dom about lost FAQ.
13	WILL_FIND_FAQ,
14	RABBIT_TRACKS,
15	CHURCH_CARROTS,
16	RETURNED_FAQ
17	};
18
19/*
20 *	Item flags.  ++++These should be in an 'include' file.
21 */
22const int IN_PARTY = 6;
23const int IF_MET = 28;
24
25/*
26 *	Existing functions in BG.
27 */
28extern var Ask_yesno 0x90a();		// Returns true if 'Yes', false if 'No.
29extern void Add_experience 0x911(var incr);	// Add exper. to each party member.
30
31/*
32 *	NPC #'s:
33 */
34const int AMY = -349;
35// Amy doesn't have her own face so AMY.say would show none
36const int AMYFACE = -221;
37const int AVATAR = -356;
38
39/*
40 *	Egg on island created just E. of Trinsic.
41 */
42
43void new_island_egg0 object#(0x740) ()
44	{
45					// Get random NPC (or Avatar).
46	var party = UI_get_party_list();
47	var party_cnt = UI_get_array_size(party);
48	var npc;
49	if (party_cnt > 1)		// Companions?
50		npc = party[1 + UI_get_random(party_cnt - 1)];
51	else
52		npc = AVATAR;
53	if (npc)
54		{
55		npc.say("Do I detect...~... the smell of Usecode?");
56		npc.hide();
57		}
58	}
59
60/*
61 *	Egg behind church by the carrots.
62 */
63
64void new_island_egg1 object#(0x741) ()
65	{
66	if (!gflags[CHURCH_CARROTS])
67		{
68		AVATAR.say("Mmmm... They do make a tasty snack.");
69		return;
70		}
71	if (!UI_get_item_flag(AMY, IN_PARTY))
72		{
73		AVATAR.say("There's something hidden here, but I cannot find it. If only Amy were here.");
74		return;
75		}
76					// Create book.
77	var faq = UI_create_new_object(0x282);
78	faq->set_item_quality(0x88);	// BOOK OF CIRCLES.  Good enough...
79					// Place on top of egg.
80	UI_update_last_created(get_object_position());
81	remove_item();		// Done with this egg.
82	AMYFACE.say("Look!  There appears to be a book here!");
83	AVATAR.say("Can it be...");
84	AMYFACE.say("Yes!  It is!  The lost FAQ!");
85	AVATAR.hide();
86	AMYFACE.hide();
87	}
88
89void Random_barks 0xC00 (var barks)
90	{
91	if (get_schedule_type() == 14)
92				// Sleeping.
93		item_say("Zzzz...");
94	else
95		{
96		barks = [barks];
97		var n = UI_get_random(UI_get_array_size(barks));
98		item_say(barks[n]);
99		}
100	}
101
102/*
103 *	'DrCode' on island.
104 */
105void DrCode object#(0x564) ()
106	{
107	if (event == 0)
108		{
109		item_say("Someone say 'usecode'??");
110		return;
111		}
112	else if (event != 1)
113		return;
114	var answers;
115	if (gflags[TALKED_DRCODE])
116		{
117		item.say("I knew you would return!");
118		answers = "How??";
119		}
120	else
121		{
122		item.say("Hello!  How may I help you?");
123		gflags[TALKED_DRCODE] = true;
124		answers = ["Name", "Job"];
125		}
126	converse ([answers, "Bye"])
127		{
128		case "Bye":
129			break;
130		case "Name" (remove):
131			say("I'm DrCode");
132		case "Job" (remove):
133			say("I search...");
134			add("Search for what?");
135		case "Search for what?" (remove):
136			say("... for Usecode!!");
137			add("Usecode");
138		case "How??" (remove):
139			say("I felt a great disturbance in the Usecode...");
140			if (gflags[WILL_FIND_FAQ] &&
141			    AMY->get_npc_object() in UI_get_party_list())
142				{
143				AMYFACE.say("Say, Dr. Code...~" +
144				        "You certainly have a lot of papers and books strewn about");
145				item.say("Er, yes, I suppose I do.");
146				AMYFACE.say("Are you sure the FAQ isn't somewhere amongst them?");
147				AMYFACE.hide();
148				item.say("Dr.Code looks away from Amy as he hides his shaking hands in his pockets.");
149				add("FAQ");
150				}
151		case "Usecode" (remove):
152			say("Usecode is a mythical force.~" +
153			    "Some believe it controls the fate of all in our world. " +
154			    "And to control it would give one ultimate power.");
155			add("Power");
156		case "Power":
157			say("It MUST not fall into evil hands.~" +
158			    "I can not let it...~" +
159			    "No!  NO!~NOOooooooo!!");
160						// Put in combat/flee mode.
161			set_attack_mode(7);
162			set_schedule_type(0);
163			break;
164		case "FAQ" (remove):
165			say("I don't know what you are talking about!");
166			AMYFACE.say("Are you sure?");
167			AMYFACE.hide();
168			say("YES!  I can stand the guilt no more!");
169			say("But... I only meant to borrow it.  I, er, hoped that it " +
170			    "would help me with my research into Usecode.");
171			say("Dominik was asleep, and I planned to return it before he awoke");
172			AVATAR.say("May we have it back then?");
173			AVATAR.hide();
174			say("I'm afraid to tell you...~...it's gone!");
175		}
176	item.hide();
177	}
178
179/*
180 *	'Dominik' on island.
181 */
182void Dominik object#(0x565) ()
183	{
184	if (event == 0)
185		{
186		Random_barks(["...xml",
187		              "Damn mouse!",
188		              "...sound font...",
189		              "...data dir"]);
190		return;
191		}
192	if (event != 1)
193		return;
194	item.say("I'm very busy, so please be brisk!");
195	var answers;
196	if (gflags[ASKED_ABOUT_PYRO])
197		answers = ["Name", "Job", "Where is Pyro-X?"];
198	else
199		answers = ["Name", "Job"];
200					// Find "FAQ" in party.
201	var faq = UI_find_object(-357, 0x282, 0x88, -359);
202	if (faq)
203		answers = [answers, "Found the FAQ"];
204	answers = [answers, "Bye"];
205	var faqcnt = 0;
206	converse (answers)
207		{
208		case "Bye":
209			break;
210		case "Name" (remove):
211			say("Dominik");
212		case "Job":
213			faqcnt = faqcnt + 1;
214			if (faqcnt == 1)
215				{
216				say("Please see the FAQ.");
217				add("FAQ");
218				}
219			else if (faqcnt == 2)
220				say("I said:  See the FAQ.");
221			else if (faqcnt >= 3)
222				say("I've told you " + (faqcnt - 1) +
223				    " times already...~SEE THE FAQ!!!");
224		case "FAQ" (remove):
225			say("All of life's answers may be found there.~Though... there are some who think otherwise.");
226			add("Otherwise?");
227			if (!gflags[LOST_FAQ])
228				add("May I see it?");
229			else if (!gflags[WILL_FIND_FAQ])
230				add("Find");
231		case "Otherwise?" (remove):
232			say("There is a crackpot who wanders this island. " +
233			    "He calls himself 'DrCode', and mutters incessantly about something called 'Usecode'");
234			add("Usecode?");
235		case "Usecode?" (remove):
236			say("Don't bother me with that silly prattle! " +
237			    "I must work on the FAQ.~Begone!");
238			break;
239		case "May I see it?" (remove):
240			gflags[LOST_FAQ] = true;
241			say("Yes, of course.");
242			say("You wait while he looks on his desk.");
243			say("You wait a bit more while he hastily pulls out the drawers and peers in each.");
244			say("Finally, he turns back, looking markedly upset.");
245			say("It's gone!!  Where can it be?~He turns to you.");
246			say("Avatar!  It's vital that the FAQ be recovered. Our users will be lost without it!");
247			say("Would you help me recover it?");
248			if (Ask_yesno())
249				{
250				gflags[WILL_FIND_FAQ] = true;
251				say("Thank you, Avatar! All Britannia awaits the recovery of this vital document.");
252				}
253			else
254				say("Woe to us!  Our efforts are doomed.");
255		case "Find" (remove):
256			gflags[WILL_FIND_FAQ] = true;
257			say("I KNEW you would reconsider. Thank you, Avatar!");
258		case "Found the FAQ" (remove):
259			AVATAR.say("Thanks to Amy's sharp eyes, we have found the missing FAQ.");
260			AVATAR.hide();
261			faq->remove_item();
262			item.say("At last, I can rest, assured that our users' questions shall be answered.");
263			Add_experience(20);
264			say("And, Avatar... I believe the presence of the FAQ may even have increased thy knowledge!");
265			AVATAR->set_npc_prop(2, 3);	// Gain 3 intel. pts.
266			gflags[RETURNED_FAQ] = true;
267		case "Where is Pyro-X?" (remove):
268			say("As I wrote in the FAQ, you have to ask Colourless!");
269			add("Who is Colourless?");
270			gflags[ASKED_WHERE_PYRO] = true;
271		case "Who is Colourless?" (remove):
272			say("Read the FAQ!!!");
273		}
274	item.hide();
275	}
276/*
277 *	'Willem' on island.
278 */
279void Willem object#(0x566) ()
280	{
281	if (event == 0)
282		{
283		Random_barks(["...Pentagram",
284		              "...Pagan..",
285		              "another world"]);
286		return;
287		}
288	if (event != 1)
289		return;
290	item.say("Hello Avatar!");
291	converse (["Name", "Job", "Bye"])
292		{
293		case "Bye":
294			break;
295		case "Name" (remove):
296			say("I'm Willem");
297		case "Job":
298			say("I work on Pentagram!");
299			add("What is Pentagram?");
300		case "What is Pentagram?" (remove):
301			say("Pentagram is a magical device that lets you travel to another world. To the world of Pagan!");
302			add("Tell me about Pagan");
303		case "Tell me about Pagan" (remove):
304			say("You will find out soon enough. Believe me!");
305		}
306	item.hide();
307	}
308/*
309 *	'Fingolfin' on island.
310 */
311void Fingolfin object#(0x567) ()
312	{
313	if (event == 0)
314		{
315		Random_barks(["...OSX",
316		              "...Pentagram..",
317		              "SDL"]);
318		return;
319		}
320	if (event != 1)
321		return;
322	item.say("Hello Avatar!");
323	converse (["Name", "Job", "Bye"])
324		{
325		case "Bye":
326			break;
327		case "Name" (remove):
328			say("My name is Fingolfin");
329		case "Job":
330			say("I work on Pentagram!");
331			add("What is Pentagram?");
332		case "What is Pentagram?" (remove):
333			say("You should ask Willem about this");
334		}
335	item.hide();
336	}
337
338/*
339 *	'Amy' on island.
340 */
341void Amy object#(0x568) ()
342	{
343	if (event == 0)
344		{
345		Random_barks(["...Studio",
346		              "...Time warp..",
347		              "Information"]);
348		return;
349		}
350	if (event == 2)			// Looking in bushes by Nadir.
351		{
352		item.say("Avatar!");
353		AVATAR.say("Yes?  What hast thou found?");
354		item.say("There are some strange marks on the ground.");
355		say("Perhaps they were made by a rabbit.");
356		gflags[RABBIT_TRACKS] = true;
357		AVATAR.hide();
358		item.hide();
359		return;
360		}
361	if (event != 1)
362		return;
363	if (!get_item_flag(IF_MET))
364		{			// First time.
365		item.say("You see a young lady with blonde hair.  She looks a bit annoyed.");
366		say("And what are you after?");
367		}
368	else
369		item.say("Hello again Avatar!");
370	var answers = "Name";
371	var party = UI_get_party_list();
372	answers << "Job";
373	if (item in party)
374		answers << "Leave";
375	answers << "Bye";
376	converse (answers)
377		{
378		case "Bye":
379			break;
380		case "Name" (remove):
381			say("I'm Amy.");
382		case "Job" (remove):
383			say("I don't have a job. I'm just hanging out here and ",
384			    "give information about the people on this island");
385			if (item in party)
386				add(["Island?", "Who lives here?"]);
387			else
388				add(["Island?", "Who lives here?", "Are you happy here?"]);
389		case "Island?" (remove):
390			say("It is called SourceForge Island. To remember the smithy who provided us with our tools");
391		case "Are you happy here?" (remove):
392			say("It's okay...~...but I'd rather be more useful");
393			converse (["Join", "Good luck"])
394				{
395				case "Join":
396					if (gflags[WILL_FIND_FAQ])
397						{
398						say("Ah, yes!  I hear you are searching for something precious that was lost.",
399						    "  Perhaps I can prove to my fellow islanders that I'm not just a pretty face.");
400						add_to_party();
401						}
402					else
403						{
404						say("But you have not work for me! All you do is wander aimlessly.");
405						}
406					break;
407				case "Good luck":
408					break;
409				}
410		case "Leave" (remove):
411			remove_from_party();
412			say("Goodbye, for now, Avatar");
413			break;
414		case "Who lives here?" (remove):
415			say("Of whom do you want to speak?");
416			converse (["Dr.Code",
417			           "Willem",
418			           "Colourless",
419			           "Fingolfin",
420			           "Darke",
421			           "Dominus",
422			           "EsBee-Ex",
423			           "Nobody"])
424				{
425				case "Dr.Code" (remove):
426					say("He's the master of this group. Unfortunately he got mad.");
427				case "Willem" (remove):
428					say("Some people refer to him as Arthuris Dragon or wjp. " +
429					    "He's working on some strange magical device.");
430				case "Colourless" (remove):
431					say("He's also a member of that mystical group called The Dragons. " +
432					    "Among other things he works with Willem on this magical device.");
433				case "Fingolfin" (remove):
434					say("If he's not working on other things he helps other members of this group.");
435				case "Darke" (remove):
436					say("Darke thinks he is a dangerous rabbit but he's just a cute bunny. " +
437					    "Unfortunately he is also getting slowly as mad as Dr.Code.");
438				case "Dominus" (remove):
439					say("Don't bother talking to him. " +
440					    "He's always refering to some book called FAQ which no one ever read.");
441				case "EsBee-Ex" (remove):
442					say("EsBee-Ex is a gargoyle. He believes his twin brother is evil.");
443				case "Nobody":
444					break;
445				}
446		}
447	item.hide();
448	}
449
450/*
451 *	'Colourless' on island.
452 */
453void Colourless object#(0x569) ()
454	{
455	if (event == 0)
456		{
457		Random_barks(["...glide",
458		              "Winsockets?",
459		              "Colorless?",
460		              "...hack"]);
461		return;
462		}
463	if (event != 1)
464		return;
465	item.say("You shouldn't be able to see me");
466	add(["Name", "Job"]);
467	if (gflags[ASKED_WHERE_PYRO])
468		add(["Do you know Pyro-X?"]);
469	add("Bye");
470	converse (0)
471		{
472		case "Bye":
473			break;
474		case "Name" (remove):
475			say("I'm Colourless");
476		case "Job":
477			say("I work with Darke, Willem and Fingolfin on Pentagram.");
478			add("Pentagram?");
479		case "Pentagram?" (remove):
480			say("You better ask Willem about this.");
481			add("Willem?");
482		case "Willem?" (remove):
483			say("He's somewhere around here.");
484		case "Do you know Pyro-X?" (remove):
485			say("Yes, I know him. He's responsible for many explosions in Britania. " +
486			    "To hide this he calls himself EsBee-Ex and says all those crimes were " +
487			    "comitted by his so called Evil Twin,");
488			gflags[ASKED_KNOW_PYRO] = true;
489		}
490	item.hide();
491	}
492
493/*
494 *	'Darke' on island.
495 */
496void Darke object#(0x56A) ()
497	{
498	if (event == 0)
499		{
500		Random_barks(["...usecode",
501		              "...xml..",
502		              "bowfluff",
503		              "...fluff"]);
504		return;
505		}
506	if (event != 1)
507		return;
508	item.say("Beware of my sharp teeth!");
509	add(["Sharp teeth?", "Name", "Job"]);
510	if (gflags[WILL_FIND_FAQ])
511		add("FAQ");
512	add("Bye");
513	converse (0)
514		{
515		case "Bye":
516			break;
517		case "Name" (remove):
518			say("I'm Darke");
519		case "Job":
520			say("Annoying dragons, of course. And sometimes I make USECODE");
521			add(["Dragons?", "Usecode?"]);
522		case "Sharp teeth?" (remove):
523			say("I'm a cute bunny with sharp teeth. Don't anger me!");
524		case "FAQ":
525			say("I'm frequently asked that question!");
526			if (gflags[CHURCH_CARROTS])
527				say("I've already told you about the carrots.");
528			else if (gflags[RABBIT_TRACKS] &&
529					AMY->get_item_flag(IN_PARTY))
530				{
531				AMYFACE.say("Were those your tracks over by the shrine?");
532				AMYFACE.hide();
533				item.say("Perhaps....");
534				say("Am I in trouble?");
535				AVATAR.say("Not if you help us.");
536				item.say("I was looking for carrots, but all I found was a discarded book among the bushes.");
537				say("It had lots of information, but nothing about where to find carrots." +
538				    " So I didn't care much for it.");
539				AVATAR.say("Well, where is it now?");
540				item.say("Uh, er, I, er, uh...");
541				AVATAR.hide();
542				item.say("...I don't know! But I did find some nice carrots behind that church.");
543				gflags[CHURCH_CARROTS] = true;
544				}
545		case "Usecode?" (remove):
546			say("Ask that deranged Dr.Code");
547			add("Dr.Code?");
548		case "Dr.Code?" (remove):
549			say("He got mad because he looked at the evil Usecode!" +
550			    "  Don't believe what he says!");
551		case "Dragons?" (remove):
552			say("You know, those big, scaly things with wings. One dragon I tend to annoy in particular.");
553			add(["Big?", "Annoy?"]);
554		case "Big?" (remove):
555			say("Large? Huge? Think that size. Although a number are quite a bit smaller for some reason." +
556			    " Maybe a genetic defect.");
557		case "Annoy?" (remove):
558			say("Annoy? Well I generally harass with buckets of paint more then annoy, per se." +
559			    " The silly thing thinks it's 'Colourless', but everyone knows it's just transparent.");
560			add("Colourless?");
561		case "Colourless?" (remove):
562			say("One of those dragon things. Rather puny in size in comparison to his racial cousins," +
563			    " but generally non-threatening, although he does tend to threaten and bluster a lot." +
564			    " Especially when I paint him in fluro colours.");
565			add("Threaten?");
566		case "Threaten?" (remove):
567			say("More of a bluster and intimidation really. Just general gripes like," +
568			    " 'don't do that' and _continual_ complaints about my colour pallete choices" +
569			    " when I'm decorating him. He's such an incredibly picky dragon.");
570			add("Decorating?");
571		case "Decorating?" (remove):
572			say("Nothing fancy, just adding a few dashes of colour to an otherwise drab" +
573			    " and dreary 'transparent'coloured dragon");
574			add("Drab?");
575		case "Drab?" (remove):
576			say("Well he's just a little dull and monotonous, no real differences in his" +
577			    " colour over his entire body." +
578			    " I think giving him say, yellow wings, green paws, and a red muzzle would look rather cute.");
579			add("Cute?");
580		case "Cute?" (remove):
581			say("Well... really it's more close to 'handsome' then 'cute'." +
582			    " But since he lacks a nice coat of fur, he can't really be handsome," +
583			    " so cute in a pet-iguana-that's-rather-larger-" +
584				" than-an-iguana-and-doesn't-eat-insects" +
585			    " kind of way, he's rather stuck at.");
586			add("Fur?");
587		case "Fur?" (remove):
588			say("Unfortunately I must heed the call of sleep now. Goodnight.");
589			break;
590		}
591	item.hide();
592	}
593/*
594 *	'EsBee_Ex' on island.
595 */
596void EsBee_Ex object#(0x56B) ()
597	{
598	if (event == 0)
599		{
600		Random_barks(["...burn",
601		              "...Rome..",
602		              "boom",
603		              "...Pyro-X"]);
604		return;
605		}
606	if (event != 1)
607		return;
608	if (gflags[ASKED_KNOW_PYRO])
609		{
610		item.say("Ah, did you find my twin?");
611		add("You are Pyro-X!");
612		}
613	else
614		{
615 		item.say("Hello, did you see my evil twin?!");
616		add(["Evil twin?", "Name", "Job", "Bye"]);
617		}
618	converse (0)
619		{
620		case "Bye":
621			break;
622		case "Name" (remove):
623			say("I'm eesbee-eex");
624		case "Job":
625			say("I'm hiding from my evil twin");
626		case "Evil twin?" (remove):
627			say("Yes, my evil twin called Pyro-X.");
628			add("Pyro-X");
629		case "Pyro-X" (remove):
630			say("I've never seen him before, but people blame him for all sorts of explosions " +
631			    "and burnt houses. People say it's me but I say it is my evil twin.");
632			gflags[ASKED_ABOUT_PYRO] = true;
633		case "You are Pyro-X!" (remove):
634			say("I'm NOT him! Go away! Go away! Run! He's coming!");
635			attack_object(find_nearest(704, 20), 704);
636			gflags[ASKED_ABOUT_PYRO] = false;
637			gflags[ASKED_WHERE_PYRO] = false;
638			gflags[ASKED_KNOW_PYRO] = false;
639			break;
640		}
641	item.hide();
642	}
643
644/*
645 *	Nadir.
646 */
647void Nadir object#(0x56C) ()
648	{
649	if (event == 0)
650		{
651		Random_barks(["...free software",
652		              "...free beer",
653		              "...autoconf",
654		              "Follow the GPL!"]);
655		return;
656		}
657	if (event != 1)
658		return;
659	item.say("A guard paces beside a shrine.  He stands at attention as you approach.");
660	say("Hail, traveller!");
661	say("Hast thou come to study and meditate?");
662	var answers = ["Name", "Job", "Study?"];
663	if (gflags[WILL_FIND_FAQ])
664		answers = [answers, "FAQ"];
665	answers = [answers, "Bye"];
666	converse(answers)
667		{
668		case "Bye":
669			break;
670		case "Name" (remove):
671			say("My name is Nadir. Are you a follower of the source?");
672			add("Source?");
673		case "Job" (remove):
674			say("I guard the shrine of Free Software. All who come, rich or poor, may gaze upon the source.");
675			add("Source?");
676		case "Study?" (remove):
677			say("Gaze upon the mirror... The secrets of the universe dwell within!");
678			AVATAR.say("Thanks, but maybe later.");
679			item.say("Suit thyself.");
680			AVATAR.hide();
681		case "Source?" (remove):
682			say("The source controls our fates.");
683			if (gflags[TALKED_DRCODE])
684				{
685				AVATAR.say("But Dr.Code says Usecode does that.");
686				item.say("That is so.");
687				say("...and yet it is not.");
688				say("...actually, it is but partly so.");
689				say("But Dr.Code isn't quite right in the head.");
690				say("He wanders around muttering, occasionally dropping documents amongst the bushes.");
691				AVATAR.hide();
692				if (UI_get_npc_object(AMY) in UI_get_party_list())
693					script AMY
694						{
695						wait 1;		step 6;
696						wait 1;		step 6;
697						wait 1;		frame 11;
698						wait 1;		frame 12;
699						wait 2;		frame 11;
700						wait 1;		frame 0;
701						wait 1;		call Amy;
702						}
703				}
704		case "FAQ" (remove):
705			AVATAR.say("Hast thou happened to have seen the FAQ?");
706			item.say("Others may deal with documentation, but I concern myself only with the source.");
707			AVATAR.hide();
708		}
709	item.hide();
710	}
711/*
712 *	'Kirben' on island.
713 */
714void Kirben object#(0x56D) ()
715	{
716	if (event == 0)
717		{
718		Random_barks(["...speed",
719		              "...thrift..",
720		              "design"]);
721		return;
722		}
723	if (event != 1)
724		return;
725	if (!get_item_flag(IF_MET))
726		{			// First time.
727		item.say("You see a scribe with many different scrolls around him.");
728		say("Welcome to the Open Church of SourceForge Island!");
729		}
730	else
731		item.say("Hello Avatar!");
732	converse (["Name", "Job", "Bye"])
733	{
734	case "Bye":
735			break;
736		case "Name" (remove):
737			say("My name is Kirben.");
738		case "Job" (remove):
739			say("I am the official scribe of the Open Church of SourceForge Island!");
740			add(["SourceForge Island?", "Open Church?", "Scribe?"]);
741		case "SourceForge Island?" (remove):
742			say("Amy knows all about our island and its inhabitants. Ask her for more information.");
743		case "Open Church?" (remove):
744			say("In the Open Church of SourceForge Island everyone " +
745			    "can preach his beliefs as long as he makes them freely available to everyone. ");
746			say("Do you want to know more?");
747			if (Ask_yesno())
748				{
749				say("Our church is based on three principles.");
750				say("At the moment I have no idea what these are." +
751				    " I'm still waiting for someone to put some words in my mouth");
752				}
753			else
754				say("Okay, come back later if you want to know more.");
755		case "Scribe?" (remove):
756			say("People rely on me to write down the changes in the beliefs every other day.");
757			say("You can find the written beliefs of our people in the scrolls in this church.");
758		}
759	item.hide();
760	}
761/*
762 *	'BillyG' on island.
763 */
764void BillyG object#(0x56E) ()
765	{
766	if (event == 0)
767		{
768		Random_barks(["...money",
769		              "...security hole...",
770		              "windows"]);
771		return;
772		}
773	if (event != 1)
774		return;
775	if (!get_item_flag(IF_MET))
776		{			// First time.
777		item.say("You see a pathetic man with huge round glasses in his face.");
778		say("Hello Avatar!");
779		}
780	else
781		item.say("Hello again!");
782	converse (["Name", "Job", "Bye"])
783		{
784		case "Bye":
785			break;
786		case "Name" (remove):
787			say("My name is BillyG.");
788		case "Job" (remove):
789			say("At the moment I'm washing the windows of this island.");
790			say("But soon I will own all these windows and no one may stop me.");
791			say("Especially not that pathetic Open Church of fools.");
792			add(["Windows?", "Open Church"]);
793		case "Windows?" (remove):
794			say("Windows rule the world. Without them we would live in darkness.");
795			say("And soon I will own all the windows there are.");
796			add("How?");
797		case "Open Church" (remove):
798			say("They stand in my way and try to resist me. " +
799			    "They think they can order me around to wash their windows but" +
800			    " soon they will be mine.");
801		case "How?" (remove):
802			say("Pretty simple. I'm going to save my money and " +
803			    " soon I'll have enough to buy every window on this island.");
804		}
805	item.hide();
806	}
807