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