X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=src%2Fspecial.inf;fp=src%2Fspecial.inf;h=1d22b5cc33ba1c6247f225a20b8d3235d2015d73;hb=8cf6c360a875867b3cb9b78b9e73a0e72d527d17;hp=0000000000000000000000000000000000000000;hpb=eabbe6652d6c382ba6fe25cba07074f73020b4d0;p=spiritwrak.git diff --git a/src/special.inf b/src/special.inf new file mode 100644 index 0000000..1d22b5c --- /dev/null +++ b/src/special.inf @@ -0,0 +1,1736 @@ +! ********************************************************************* +! SPECIAL.INF -- Add-on for SPIRITWRAK +! Contains: 'specials' that I wanted to keep separate from +! the other 'city-based' .INF files (Atrii, NPC homes) +! ********************************************************************* + +! ----------------- (Frobar's home) ------------------------- + +Object FROBAR_Foyer "Entrance Foyer" + with description "You are in the Entrance Foyer of a \ +small but tasteful home. The exit is to the southwest. \ +The general area is tastefully done in maroon carpeting \ +and brass fixtures. Another room lies to the north.", + name "maroon" "carpeting" "brass" "fixtures", + sw_to FROBAR_Ent, + out_to FROBAR_Ent, + n_to FROBAR_Parlor, + has light; + +Object FROBAR_Parlor "Parlor" + with description "You are in a very decorative parlor. \ +Various furnishings of high quality are arranged around \ +an enormous rug with intricate golden symbols in the weave \ +design. Open doorways lead south, north, east and west.", + name "rug" "doorways" "furnishings" "symbols", + s_to FROBAR_Foyer, + n_to FROBAR_Bedroom, + e_to FROBAR_Study, + w_to FROBAR_Lounge, + has light; + +Object frobar_plant "large potted plant" FROBAR_Parlor + with name "plant" "large" "potted", + initial "A large potted plant sits in one corner.", + description "A well-tended house-plant.", + before [; + Cast: + if (the_spell_was == throck_spell) { + "The plant seems even healthier now."; +! if (Frobar in FROBAR_Bedroom) +! (couldn't think of a proper reaction...:) + } + ], + has static; + +Object FROBAR_Lounge "Lounge" + with description "A large room here apparently serves as a lounge \ +for entertaining. The walls and furniture all have interesting \ +design work that gives an impression of dignified age. A doorway \ +heads east.", + name "furniture" "doorway", + e_to FROBAR_Parlor, + has light; + +Object FROBAR_Study "Study" + with description "This is a study room with fancy wood paneling and \ +plush carpeting. There is an exit to the west.", + name "wood" "paneling" "carpeting", + w_to FROBAR_Parlor, + has light; + +Nearby FROBAR_shelves "large bookshelf" + with name "shelves" "shelf" "bookshelf", + initial "A large bookshelf takes up most of the north wall.", + description "It's filled with odds and ends, mostly uninteresting.", + capacity 30, + has static supporter; + +Object FROBAR_Journal "plain journal" FROBAR_shelves + with name "journal" "plain", + ! weight 15, + size 15, + description "This is a short journal of notes that \ +Frobar was keeping. The contents are quite dull, mostly \ +consisting of entries like ~Remember to water plant~ and \ +so forth. In fact, the only non-trivial entry follows:^^\ +~Perhaps today I will go visit Barsap's latest creation. \ +Then again, maybe I won't. This so-called 'Gambit' of his \ +is supposed to be some silly diversion where people can \ +hop around floating platforms trying to reach the southeast \ +corner \ +platform on the bottom level, just so they can get \ +teleported back to the top, and start all over again! \ +Can this be a monetarily beneficial thing? I doubt it.~"; + +! (twisted -- four ancient ones) +Object p5 "twisted parchment" FROBAR_shelves + class parchment_class, + with name "twisted", +description "~...understand. I, like many of the Order, \ +have understood that the greatest Saints of our Order were \ +the Three, those Three that we know as the Ancient Ones. \ +Why then, do I find in ancient cairns, in hidden temples, \ +and in versions of the Scriptures found in unsettled lands, \ +that _four_ beings that called themselves the Ancient Ones \ +did do battle with evil and were defeated? This surely is \ +not to be believed, but I...~"; + +Object FROBAR_Desk "large wood desk" FROBAR_Study + with name "desk", + description "A massive wood desk carved from a single block of wood.", + capacity 20, + has static supporter; + +Object FROBAR_Bedroom "Bedroom" + with description "A nice cozy bedroom. The exit is south.", + s_to FROBAR_Parlor, + has light; + +Object FROBAR_bed "large bed" FROBAR_Bedroom + with name "bed", + description "A large comfortable-looking bed.", + before [; + LookUnder: "Sorry, no monsters here."; + ], + has static enterable supporter; + +!Object FROBAR_Painting "large painting" FROBAR_Bedroom +! with name "painting", +! initial "There is a large painting hanging on the wall.", +! description [; +! if (self hasnt general) +! "It appears to be an oil painting of a \ +! scroll on a table. A small note on the frame says, \ +! ~Still-life with Scroll, -FF, 791~"; +! else +! "It appears to be an oil painting of a \ +! table. A small note on the frame says, \ +! ~Still-life, -FF, 791~"; +! ], +! before [; +! Touch, Rub, Push: +! if (self hasnt general) { +! give self general; +! move painted_scroll to player; +! Achieved(23); +! print "As you touch the painting, your hands \ +!run across the scroll, and the oil takes on a three-dimensional \ +!quality! You ignore the strange sensations as you reach \ +!into the painting, and withdraw the scroll"; +! if (Frobar in FROBAR_Bedroom) +! "! Frobar watches the events over your \ +!shoulder, and seems puzzled. ~Now, why didn't I ever think to try \ +!that,~ he muses."; +! else "!"; +! } +! else +! "The painting seems to be nothing more than \ +!an oil painting now."; +! ], +! has static; + +! ----------------- (Thief's home) ------------------------- + +Object THIEF_Bottom_of_staircase "Wondrous Stairway" + with description "An enormous spiral staircase seems to wind miles \ +above your head in this curious column-like chamber. Strange \ +points of light brighten the chamber from above. \ +To the west is a small exit.", + name "points" "light" "staircase" "stairway" "stairs", +! TODO -- fix this weirdness... + u_to THIEF_Ent, + w_to "You can't go that way.", ! but later... + before [; + Go: + if (noun == u_obj) + print "^You begin the long trek upwards. Strangely, \ + the stair seems to twist and move as you step on it, \ + turning like a corkscrew, until you are \ + graciously deposited at the top, far above your \ + previous location.^"; + ], + has light; + + +Object THIEF_Ent "Fancy Hall" + with description "This must be an apartment or penthouse in the \ +skyscraper. You are in a very high hall, with black slate stone \ +walls that seem to reflect shadows everywhere. There is a room \ +to the north. The southern edge of this room drops off into the \ +darkness, followed by a long spiral staircase. The ceiling overhead \ +seems to have tiny points of light like a night sky.", + name "slate" "shadows" "staircase" "points" "light", + d_to THIEF_Bottom_of_staircase, + n_to THIEF_Foyer, + has light; + +Object THIEF_Foyer "Magnificent Foyer" + with description "This is an exceptionally grand entrance foyer, \ +with sweeping arched ceilings and sparkling chandeliers. The \ +room is dimly lit. Open hallways lead south and west.", + name "chandeliers", + s_to THIEF_Ent, + w_to THIEF_Lounge, + has light; + +Object THIEF_Lounge "Fancy Lounge" + with description "A tastefully overdone lounge with tapestries \ +and gold enamel finished walls. The room is dimly lit, although \ +you see no windows or other sources of light. Open hallways lead \ +east and west.", + name "tapestries" "enamel", + e_to THIEF_Foyer, + w_to THIEF_Storeroom, + has light; + +Object THIEF_Journal "short journal" THIEF_Lounge + with name "journal", + initial "There's an open journal sitting here.", + ! weight 15, + size 15, + description "This appears to be a short collection of notes:^^\ + ~TIPS ON CRACKING THE NEW FROBOZZCO 3-DIAL COMBO LOCKS: ^\ + Remember, there's a slight flaw in the design. For every \ + correct number in the correct dial, pressing the opening button \ + with cause a small click. Dials with the correct number in the \ + wrong dial place will cause a small thunk. The lock mechanism \ + scans for correct numbers in correct places first, and then \ + for correct numbers in the wrong place in the 'remaining dials'. \ + Simple! But don't forget, closing the locks will automatically \ + lock and reset the dials!^^\ + NEW FLATHEAD PAINTING: ^\ + I've completed making the copy of the new Leonardo Flathead painting, \ + received courtesy of the Royal Museum. Glad to say my skills in \ + art forgery are undiminished -- I can barely tell the difference \ + between the two myself! I'll soon replace the original with the \ + copy, and no one will be the wiser!~"; + + +Object THIEF_Storeroom "Workroom" + with description [; + print "A sight to inspire even the most avaricious, this \ + storeroom is filled with all sorts of rare and precious treasures. \ + A hallway leads east"; + if (self hasnt general) + print ". You notice that the west wall appears to be made of \ +solid granite"; + "."; + ], + name "hallway", + e_to THIEF_Lounge, + before [; + Examine: + if ((noun == w_obj) && (self hasnt general)) + "The west wall is a solid piece of granite, which \ +seems very odd, considering the other walls are clearly made of \ +slate."; + Cast: + if ((the_spell_was==ledak_spell) && (Painting_FAKE in self)) { + if (Painting_REAL in self) + print "One of the paintings"; + else print "The painting"; + remove Painting_FAKE; + " is surrounded by a yellow glow! It crumbles into \ +dust!"; + } + ], + has light; + +Nearby THIEF_treasure "precious treasures" + with name "treasure" "jewels" "gemstones" "artifacts", + description "Piles of rare gemstones, precious jewelry, \ + priceless artifacts, and other treasures line the walls \ + here.", + before [; + Take: + "Fortunately, your high moral standing allows you \ + the benefit of having no need for such materials of excess."; + ], + has scenery; + +Object pasta "pile of fettucini carbonari" + with name "pile" "fettucini" "carbonari" "pasta", + description "A large pile of fettucini dripping in \ +carbonari sauce.", + before [; + Eat: + if (self hasnt general) { + give self general; + "You manage to stuff yourself with pasta, \ +but there's still quite a lot left."; + } + else + "You've already had enough of this stuff \ +to last a lifetime. Just the thought of eating more is enough to \ +make you queasy."; + ], + size 16, + has edible; + +Object c50 "coin" class coin_class; + +Object Painting_FAKE "priceless painting" THIEF_Storeroom + with name "painting", + plural "priceless paintings", + short_name "priceless painting", + description "It's a beautiful oil painting of a dark stormy \ +scene. On the horizon, you can see the edges of mountaintops. Near \ +the top of the painting, two winged figures are carrying a lone \ +individual towards a break in the clouds, where a bright white light \ +seems to emanate.", + ! weight 25, + size 25, + before [; + Drop: + if (location == Museum_north) { ! player returned fake painting to museum! + remove self; + "A museum curator appears and takes the \ +painting. With an expert eye, he looks closely at it. ~This is \ +a fake! I warn you sir, art forgery is a dangerous game.~ He \ +leaves, much disgusted."; + } + Take: + if (Painting_REAL in parent(self)) + "They both look so genuine! You can't decide!"; + Cast: + if (the_spell_was == ledak_spell) { + remove self; + "One of the paintings is surrounded by a bright \ +yellow glow, and disintegrates!"; + } + Search: + if (Painting_REAL in parent(self)) + "Search which one? Goodness, you can't decide!"; + ], + ; + + +! -------------ETHEREAL PLANE OF ATRII ------------ + +Object ATRII_1 "Ethereal Plane of Atrii" + with description "Standing on a featureless gray plane that \ + stretches to the infinite horizon against a gray sky, you \ + can only conclude one thing -- you're on the Ethereal Plane \ + of Atrii. Well, at least it fits the description Brother \ + Palemon gave you. It seems like you could go in any \ + direction from here.", + cant_go "An invisible force blocks your way!", + name "plane" "horizon" "sky", + sw_to ATRII_2, + se_to ATRII_3, + has light; + +Object ATRII_2 "Ethereal Plane of Atrii" + with description "Flat, featureless gray is in every direction \ + you look. Stranger still is the upright rectangular hole in the \ + fabric of space that stands in the center of this area. \ + Otherwise, you could wander this gray dimension in any direction, \ + it seems.", + cant_go "An invisible force blocks your way!", + ne_to ATRII_1, + sw_to ATRII_4, + e_to ATRII_3, + s_to ATRII_6, + has light; + +Nearby ATRII_2_hole "rectangular hole" + with name "hole" "rectangle" "opening", + description "Surely you are in a place where the very laws of \ + nature and the Gods work by different rules! Here stands a \ + rectangular hole, seemingly torn out of the very space you \ + stand in. You see some curious metal chamber through the \ + opening, but there is nothing behind the opening.", + before [; + Enter: + print "^You step through and feel your stomach twist. \ + You stumble past a set of open metal doors into...^"; + in_atrii = 0; + PlayerTo(Skyscraper); + return 2; ! allow, but print nothing... + ], + has scenery enterable; + +Object ATRII_3 "Ethereal Plane of Atrii" + with description "Flat, featureless gray is in every direction \ + you look. Stranger still is the flat, glass-like square in the \ + center of the 'floor' of this area. \ + Otherwise, you could wander this gray dimension in any direction, \ + it seems.", + cant_go "An invisible force blocks your way!", + nw_to ATRII_1, + w_to ATRII_2, + se_to ATRII_5, + s_to ATRII_7, + has light; + +Nearby ATRII_3_ice "square of ice" + with name "square" "ice" "glass-like", + description "It looks and feels like a perfect square of ice, \ + flush with the featureless gray surface you stand on.", + before [; + Enter: + print "You step onto the square, and before you know it, your \ +surroundings shift and start to fade! You feel a \ +sudden chilling wind. The ice seems to lengthen and stretch. The \ +gray plane slowly turns white and bumpy.^"; + in_atrii = 0; + PlayerTo(Frozen_river2); + return 2; + ], + has scenery enterable; + +Object ATRII_4 "Ethereal Plane of Atrii" + with description "Flat, featureless gray is in every direction \ +you look. Stranger still is the large black hole to the south. \ +Otherwise, you could wander this gray dimension in any direction, \ +it seems.", + cant_go "An invisible force blocks your way!", + ne_to ATRII_2, + se_to ATRII_6, + s_to [; <>; ], + has light; + +Nearby ATRII_4_hole "black hole" + with name "hole" "black", + description "It looks like a large hole, probably twice your \ + height. It's completely black and featureless.", + before [; + Enter: + print "^You step into the black hole. You stumble \ + forward, surrounded by blacker-than-night darkness.^"; + in_atrii = 0; + PlayerTo(Subway_Tunnel); + return 2; + ], + has scenery enterable; + +! (secret subway tunnel) +Object Subway_Tunnel "Dark Tunnel" + with description "You're in a large dark tunnel that seems \ + to run north and south. To the south you see light. There \ + seem to be two metal tracks running along the ground.", + s_to GURTH_GUSPlatform, + n_to "You walk north, and run into a invisible force!", + before [; + Go: + if (noun==s_obj) { + Achieved(25); + print "^You step out into an underground chamber. \ + A burly uniformed figure sees you exit the tunnel and yells, \ + ~Hey, no playing in the tunnels, pal!~^"; + } + ], + each_turn [ i ; + i = random(40); + if (i > 35) + "^You hear a rumbling noise echoed from somewhere, and \ + the entire tunnel seems to shake! Then, all is quiet."; + if (i == 17 or 18) { + deadflag = 1; + "^Suddenly, without warning, a huge train car appears \ + heading south! It plows straight into you!"; + } + if (i==6 or 7) + "^Suddenly, a huge train car appears heading north! \ + You barely avoid getting pulverized! Strangely, \ + you watch as the train continues north, and \ + seems disappear into blackness nearby. It's as \ + though the train was simply removed from the tunnel \ + somehow."; + ], +; + +Nearby ST_tracks "tracks" + with name "tracks" "tracks" "metal", + description "Two long metal tracks, running north and south. \ + There's something oddly familiar about them.", + has scenery; + +Object ATRII_5 "Ethereal Plane of Atrii" + with description "Flat, featureless gray is in every direction \ + you look. It seems like you could go in any \ + direction from here.", + cant_go "An invisible force blocks your way!", + nw_to ATRII_3, + sw_to ATRII_7 + has light; + +Object p9 "ripped parchment" ATRII_5 + class parchment_class, + with name "ripped", +description "~...now know that the Rod we believe is \ +the Rod of the Ancients, sequestered in our Monastery, is \ +an artifact of evil! Imprisoned inside, \ +true to the scriptures (at least this much is, what \ +isn't, I can nowadays say is much) we know, is Anabais. \ +What is worse, is that this very Rod is an artifact of \ +evil power created by Anabais, in the image of the True \ +Rod of the Ancients, which he planned to use to aid \ +him in his evil gains! \ +Were that evil one free again, and had about him both \ +his brothers and his Rod of Evil, we would witness a \ +reckoning \ +greater than Quendor has ever known! I take relief in \ +the knowledge that he will never be freed, and he will \ +never regain his implement of evil; only an innocent \ +being can break the false rod and \ +free him from his prison, and subsequently, \ +the false rod cannot be regained by Anabais through his \ +own will, or another evil being. \ +In fact, only a being of good again can gather \ +the resulting pieces, and only through this being \ +can Anabais regain his evil artifact, for...~"; + + +Object ATRII_6 "Ethereal Plane of Atrii" + with description "Flat, featureless gray is in every direction \ + you look. It seems like you could go in any \ + direction from here.", + cant_go "An invisible force blocks your way!", + nw_to ATRII_4, + e_to ATRII_7, + n_to ATRII_2, + se_to ATRII_8, + has light; + +Object ATRII_7 "Ethereal Plane of Atrii" + with description "Flat, featureless gray is in every direction \ + you look. Stranger still is the odd-shaped depression in the gray \ + plane here. \ + Otherwise, you could wander this gray dimension in any direction, \ + it seems.", + cant_go "An invisible force blocks your way!", + ne_to ATRII_5, + w_to ATRII_6, + sw_to ATRII_8, + n_to ATRII_3, + has light; + +Nearby ATRII_7_depression "depression" + with name "depression" "cavity", + description "It's a large elongated depression in the gray 'floor'. \ + The cavity has a flat bottom, and somewhat cigar-like shape.", + before [; + Enter: + print "^You step into the depression. Your very \ + surroundings start to fade, replaced by sunlight that \ + makes you squint! The gray plane undulates and \ + buckles and turns into a great body of water \ + before your very eyes.^"; + in_atrii = 0; + PlayerTo(sailboat); ! useful if the player 'lost' the boat at sea. + return 2; + ], + has scenery enterable; + +Object ATRII_8 "Ethereal Plane of Atrii" + with description "Flat, featureless gray is in every direction \ + you look. Directly overhead, you notice odd streaks of \ + light. From here, you could wander this gray dimension in any direction, \ + it seems.", + name "streaks", + cant_go "An invisible force blocks your way!", + nw_to ATRII_6, + ne_to ATRII_7, + has light; + +! ----------- Special Implementor's Residence ----------- + +Object Imp_Liv "Strange Room" + with description [; + print "You "; + if (player in Imp_Curtains) + "can't see much behind these curtains."; + else "feel a great sense of dread! Surely, given the way \ +you got here, this must be the domicile of a dreaded Implementor! \ +The entire place feels strange and \ +alien and, well, ~modern~. There's some sort of kitchen to the \ +east. Long curtains cover what must be a window to the south."; + ], + number 1, + e_to Imp_Kitchen, + w_to Imp_door, + s_to [; <>; ], + each_turn [ ; + if (Imp in Imp_Bedroom) { + if (Imp_Liv.number == 3) { + StartDaemon(Imp); + Imp_Liv.number = 4; + } + else "^You hear some faint noises to the west."; + } + ! create some noises if player in curtains + if (player in Imp_Curtains) { + if (Imp in Imp_Liv) + "^You hear some faint noises nearby."; + if (Imp in Imp_Kitchen) + "^You hear some faint noises to the east."; + } + ], + time_left 0, + time_out [; + ! if player hasn't 'listened' twice to start Imp, + ! start him anyway (otherwise, in truth, player + ! would be permanently stuck in (my) apartment. + if (Imp_Liv.number < 4) { + StartDaemon(Imp); + Imp_Liv.number = 4; + } + ], + before [; + ! if player actually listens, better noises... + Listen: + if (Imp in Imp_Bedroom) { + if (Imp hasnt general) { ! i.e. -- awake + if (Imp_Liv.number == 1) { + Imp_Liv.number = 2; + "It sounds like someone is talking to himself to \ +the west. You hear: ~Now, wait just a second here, the player object \ +is gone! How did that happen?~"; + } + if (Imp_Liv.number == 2) { + Imp_Liv.number = 3; + "It sounds like someone is talking to himself to \ +the west. You hear: ~That can't be right. I must be getting tired. \ +Think I'll make myself a nice hot cup of coffee.~"; +! on next turn via Imp_Liv.each_turn, Imp daemon will be started... + } + ! otherwise, Imp has already made his rounds and + ! returned to bedroom, _not_ falling asleep + "You hear someone whistling a merry tune to the west."; + } + else + "You hear someone snoring loudly to the west."; + } + if (Imp in Imp_Liv) { + if (Imp.number == 1) + "You hear someone walking nearby. The footsteps \ +soon fade to the east."; + if (Imp.number == 4) + "You hear someone walking nearby. The footsteps \ +soon fade to the west."; + } + if (Imp in Imp_Kitchen) { + ! This assumes the daemon will run before the player turn. + if (Imp.number == 2) { + switch (Imp.weight) { + 118: print "You hear an irritated voice say, \ +~What happened to my coffee maker?~ Slightly softer, you \ +hear ~Well, I guess I'll have that iced tea.~"; + 119, 122: print "You hear a voice to the east say, \ +~Looks like I've got coffee, thank goodness.~"; + 121: print "You hear a voice to the east say, \ +~Great, I'm all out of coffee. Good thing I still have some \ +iced tea.~"; + } + " Shortly after this, you hear sounds of someone to \ +the east starting some kitchen activity."; + } + else "You hear some brief busy noises from the west, \ +followed by what sounds like someone drinking something. Shortly \ +thereafter, you hear the sounds of someone walking into the area \ +from the east."; + } + ], + has light; + +Nearby Imp_Curtains "set of curtains" + with name "curtain" "curtains", + description "Some heavy-cloth curtains along the south wall.", + before [; + Open: "You draw back the curtains and see a sight that \ +beggars the mind! Through the windows, the night sky falls across \ +some unknown landscape, dotted with strange bright points of light. \ +Tall buildings seem to be everywhere. Whatever world you've stumbled \ +onto, it certainly is not your own! You hastily close \ +the curtains."; + Enter: print "In an attempt to hide, you part the curtains. "; + ], + has static enterable; + +Object Imp_Kitchen "Strange Kitchen" + with description "A room that could be a kitchen, \ +if it didn't seem completely strange. Harsh bright lights seem to \ +be coming from some unknown source. Strange-looking white countertops and \ +cabinets fill the area, along with a curious white closet-like object. \ +A room lies to the west.", + name "cabinet" "cabinets" "closet" "refrigerator" "countertops", + w_to Imp_Liv, + has light; + +Object Coffee_maker "curious machine" Imp_Kitchen + with name "machine" "curious", + description "A white plastic device that seems to \ +encase a glass pitcher or kettle of some sort. Most odd.", + ! weight 15, + size 15, +; + +Object regular_coffee_can "can of regular coffee" Imp_Kitchen + with name "can" "coffee" "regular", + description [; + "The can reads: ~Brand-X coffee crystals~^^\ + ~Rich, mountain-grown flavor.~"; + ], + before [; + Open: + "You'd need a good can-opener for that."; + ], + ! weight 15, + size 15, +; + + +Object Imp_Bedroom "Strange Bedroom" + with description "A very curious small bedroom. \ + A white desk sits here amongst other odd furnishings.", + name "furnishings" "bed" "chair", + e_to Imp_door, + has light; + +!Nearby Imp_Bed "furnishings" +! with name "furnishings" "bed" "chair", +! description "Some weird bedroom furniture.", +! has scenery; + +Object Imp_Desk "desk" Imp_Bedroom + with name "desk", + description "A white desk, with a strange, modern look.", + capacity 6, + has scenery supporter; + +Object Imp_Computer "strange machine" Imp_Desk + with name "machine" "computer", + description + [ ; + print "It's a strange metal box. On top, perhaps connected in some \ +way, is another metal box with a glass plate on the front. Strange wires \ +seem to be attached to the boxes somehow. \ +In front of the boxes is an odd plastic \ +flat object with rows and rows of plastic buttons labeled every letter in \ +the alphabet"; + if (self hasnt general) { + give self general; + print ".^^Looking closer, you notice curious glowing \ +letters on the glass plate. You read the letters, and \ +feel drawn to respond...^^\ +SPIRITWRAK DEVELOPMENT SYSTEM:^\ +(AUTOMATIC OBJECT GARBAGE-COLLECTION)^\ +REMOVE OBJECT IMPENETRABLE_STEEL_WALL? (Y/N) "; +if (YesOrNo() == 0) "You press a button labeled ~N~. The strange box \ +emits a tiny beep, and the glass plate is covered with fantastic colorful \ +designs."; +else { + ! set-up the secret room + remove steel_wall; + give cave_intersection general; + Achieved(18); +"You press a button labeled ~Y~. The strange box \ +emits a tiny beep, and the glass plate is covered with fantastic colorful \ +designs."; + } + } + else ". The glass plate currently has strange glowing colorful \ +patterns displayed on it."; + ], + has static; + +[ ImpSendBack ; + print "~I'm afraid you'll have to go back.~ The Implementor \ +snaps his fingers, and suddenly, you're back in...^"; + spell_block = 0; + StopDaemon(Imp); + StopTimer(Imp_Liv); + PlayerTo(ATRII_8); +]; + +Nearby Imp_door "door" + with name "door", + when_closed [; + if (self in Imp_Liv) { + if (player notin Imp_Curtains) + "There's a closed door to the west."; + else rtrue; + } + else "There's a closed door to the east."; + ], + when_open [; + if (self in Imp_Liv) { + if (player notin Imp_Curtains) + "There's an open door to the west."; + else rtrue; + } + else "There's an open door to the east."; + ], + description "A plain-looking door. A note \ +attached to it says ~DO NOT DISTURB, IMPLEMENTOR AT WORK~.", + door_dir [; + if (self in Imp_Liv) return w_to; + else return e_to; + ], + door_to [; + if (self in Imp_Liv) return Imp_Bedroom; + else return Imp_Liv; + ], + found_in Imp_Liv Imp_Bedroom, + before [; + Open: + if ((Imp in Imp_Bedroom) && (Imp hasnt general)) { + print "You open the door, revealing a small room with \ +what must be an Implementor sitting behind a desk. The Implementor looks \ +up, startled. ~You're here?~ he says, observantly. "; + ImpSendBack(); + return 1; + } + ], + has static door openable; + + +! *************** And, for my final trick, the endgame ************** + +Object Mystical_Cave "Mystical Cave" + with description "You've entered a wondrous natural cave, lit \ +everywhere by reflected light from some sort of purple crystalline substance \ +in the walls. A tunnel exits to the northwest.", + name "reflected" "crystal" "crystalline" "substance", + number 0, + nw_to [; + if (Mystical_Cave.number ~= 4) + "The purple light in the chamber seems to pulse with energy, \ +and find your way blocked by an invisible force!"; + else { + spell_block = 0; + ! fill with things, if necc. + print "As you leave, a sudden tremor shakes the \ +cave! You just narrowly avoid a sudden cave-in behind you!^"; + give cave_intersection ~general; + return cave_intersection; + } + ], + has light; + +Nearby purple_sphere "purple sphere" + with name "sphere" "purple", + initial "There's a purple crystal sphere partially embedded \ +in the rock floor here.", + description "A large purple sphere that seems to pulse with \ +strange energy.", + before [; + Push, Touch, Rub: + ! various endgame trickery... + if (silver_rod_piece in player) { + while (child(player)~=0) { + give child(player) ~worn; + move child(player) to Mystical_Cave; + } + move silver_rod_piece to player; + spell_block = 1; + print "The sphere pulses with angry energy! It seems to \ +be fighting the silver rod piece you hold! With a sudden burst, you \ +feel your mind reel and your very surroundings change!^"; + give stone_marker general; +! give snowy_intersection general ~visited; + give snowy_intersection general; + StartTimer(White_Dragon,3); + PlayerTo(Dragon_Cave); + rtrue; + } + if (green_rod_piece in player) { + while (child(player)~=0) { + give child(player) ~worn; + move child(player) to Mystical_Cave; + } + move green_rod_piece to player; + spell_block = 1; + print "The sphere pulses with angry energy! It seems to \ +be fighting the green rod piece you hold! With a sudden burst, you \ +feel your mind reel and your very surroundings change!^"; + StartTimer(captain,3); + PlayerTo(On_Boat); + rtrue; + } + if (red_rod_piece in player) { + while (child(player)~=0) { + give child(player) ~worn; + move child(player) to Mystical_Cave; + } + move red_rod_piece to player; + spell_block = 1; + print "The sphere pulses with angry energy! It seems to \ +be fighting the red rod piece you hold! With a sudden burst, you \ +feel your mind reel and your very surroundings change!^"; +! give Stadium_entrance general ~visited; +! remove stadium_sign; +! remove stadium_statue; +! move statue_base to Stadium_entrance; + StartTimer(statue_base,2); + PlayerTo(Stadium_entrance2); + rtrue; + } + if (brown_rod_piece in player) { + while (child(player)~=0) { + give child(player) ~worn; + move child(player) to Mystical_Cave; + } + move brown_rod_piece to player; + spell_block = 1; + print "The sphere pulses with angry energy! It seems to \ +be fighting the brown rod piece you hold! With a sudden burst, you \ +feel your mind reel and your very surroundings change!^"; +! give GURTH_House general ~visited; +! move bad_brick to GURTH_House; + StartTimer(bad_brick,7); + PlayerTo(GURTH_House2); + rtrue; + } + ! default... + "A purple blast of force throws you back!"; + ], + has static; + +Object skeleton "skeleton" Mystical_Cave + with name "skeleton" "bones", + initial "Lying in one corner of the room is a skeleton.", + description "Just some bones, not much else, is all.", + before [; + Pull, Push, Turn, ThrownAt, Touch, Attack, Rub, +Cut, Shake, Squeeze, Kiss: + remove self; + "The skeleton crumbles into dust, as though \ +many years of time had suddenly caught up with it in one \ +moment."; + ], +has static; + +! (black -- final parchment of Palemon's final words) +Object p8 "blackened parchment" Mystical_Cave + class parchment_class, + with name "blackened", +description "~I write these final words not in the hope \ +that others will find and heed them, for this is too great \ +a hope in my moment of death, but rather, to try and maintain my mind and soul \ +in the face of the terror I now know is the truth.^^\ +For how can a man survive, knowing that his entire life, \ +his entire belief, has been a ruse, a dupe, from the \ +early beginning? That he has merely been a pawn in a \ +working of evil that cannot be stopped?^^\ +I have fought all manner of terrors, and recovered that which \ +I know is the _true_ Rod of the Ancients, broken and scattered \ +eons ago in the face of great evil. I sought also those \ +ancient spheres that the Four Ancients never had the chance to \ +use against the evil four elemental demons, but alas, I could \ +not find them all, and sequestered those which I did with \ +good people that the elemental evil could not touch.^^\ +Alas, my quest has ended here. I lie trapped here, \ +with the pieces of the true Rod in hand, unable to go forward, trapped by the \ +elemental mystic locks on the rod that prevent it from leaving this \ +very room, yet unable to go back, to leave the rod here and \ +deny the very real danger of the defeat of the Ancients, of \ +the power that the evil elementals hold.^^\ +What is a faith destroyed? Who can help me to believe, in my moment \ +of disbelief?^^\ +--P--~"; + + + + +Object Dragon_Cave "Giant Cavern" + with description "You find yourself in a huge cavern. To the west \ +is a large exit that looks out into a void of snow-covered mountains.", + name "mountains", + w_to "You hesitate. The cave seems to just \ +exit off the side of a mountain, and all you can see below is whiteness. \ +It could be a long way down.", + d_to [; <>; ], + out_to [; <>; ], + before [; + Jump: + print "You close your eyes and leap out of the cave! \ +You plummet through silent white winds. \ +Moments later, you fall right into an enormous snowbank, and \ +roll downwards, into...^"; + PlayerTo(snowy_intersection2); + rtrue; + ], + has light; + +Object On_Boat "On strange boat" + with description "You are on a long open boat, riding the waves of \ +some great sea. The boat seems to be filled with sailors from \ +some militia.", + name "waves" "sea" "mast" "floorboards" "ship" "boat", + before [; + Drop: + if (captain has general) { + if (noun==green_rod_piece) { + remove green_rod_piece; ! it'll be back + give shipwreck general; + Mystical_Cave.number = Mystical_Cave.number + 1; + StopTimer(captain); + StopTimer(militia); + print "You drop the green rod and watch it roll near \ +a mast and get stuck in the floorboards.^^\ +There's a load crack! The ship is breaking apart! Sailors \ +scramble in vain for safety! You hang onto the side of the \ +boat, but the vessel rocks wildly, and you fall into the waters. \ +^^As you sink, you notice the waters seem to change to a purplish \ +hue, and you find yourself back in...^"; + PlayerTo(Mystical_Cave); + rtrue; + } + } + else + "The sailors are holding you fast, so you \ +can't do this at the moment."; + ], + has light; + +Nearby militia "sailors" + with name "sailors" "militia" "navy", + description "A bunch of dour-looking navy sailors.", + time_left 0, + time_out [; + deadflag = 1; + "The ship breaks asunder! Sailors scramble madly \ +and fall into the violent waves! You hear \ +the captain scream ~Blast! I can't swim!~ before the \ +waters cover you completely."; + ], + has scenery; + +Object ENDGAME_ROOM "Nothingness" + with description "Nothingness surrounds you. Yet, you feel like \ +your conscious being extends into worlds and dimensions never \ +imagined. You float in a void of total being.", + number 0, ! number of elementals banished + each_turn [; + switch (ENDGAME_timer.number) { + 0: ENDGAME_timer.number = 1; + if (black_elemental in ENDGAME_ROOM) + "^Echoing in your mind, you hear a voice, that you \ +somehow know is from the black sphere. ~Give me the rod priest, \ +and you shall be immortalized as a symbol to an entire civilization!~"; + 1: ENDGAME_timer.number = 2; + if (smoke_elemental in ENDGAME_ROOM) + "^Echoing in your mind, you hear a voice, that you \ +somehow know is from the smoke-colored sphere. ~Give me the rod priest, \ +and I shall let you be witness to a feat of great magic, never \ +before witnessed!~"; + 2: ENDGAME_timer.number = 3; + if (gray_elemental in ENDGAME_ROOM) + "^Echoing in your mind, you hear a voice, that you \ +somehow know is from the gray-colored sphere. ~Give me the rod priest, \ +and I will grant you power over all who surround you!~"; + 3: ENDGAME_timer.number = 4; + if (white_elemental in ENDGAME_ROOM) + "^Echoing in your mind, you hear a voice, that you \ +somehow know is from the white sphere. ~Give me the rod priest, \ +and you will gain the attention of one of the more powerful \ +figures of your time!~"; + } + ], +has light; + +Object ENDGAME_timer "void" ENDGAME_ROOM + with name "void" "nothingness", + description "The absence of anything. Yet, at the same \ +time, the sense that everything possible is near.", + number 0, + time_left 0, + time_out [; + deadflag = 1; + if (ENDGAME_ROOM.number < 3) + print "The spheres nearby suddenly converge"; + else print "The sphere nearby suddenly converges"; + " towards you! In your mind, you hear \ +~Hesitation, foolish priest, was the downfall of the Ancient \ +Ones~ before you feel the full force of the void."; + ], + has scenery; + +! *** fake room/encounter for bad ending #x +Object badend1 "On Giant Cube" + with description "You stand on a single giant floating white \ +cube, in the middle of some dimly lit cavern. \ +^^A small newt floats nearby, concentrating on something.^^\ +The newt suddenly opens its eyes! ~What?~ it croaks in \ +surprise. ~Who are you? You've broken my concentration on \ +the spell, you fool!~ the newt croaks. You feel the cube \ +shift, then stop floating! You plummet into the lava you \ +feared was below..." + has light; + +Object badend2 "Top of Pyramid" + with description "You are on top of a pyramid in some \ +ancient city. You see dense jungle to the horizon. \ +An ancient civilization spreads before you, in all its \ +mysterious glory.^^Several robed figures surround you.^^\ +Suddenly, you realize you are tightly bound! One of the \ +figures points towards the horizon and makes a complicated \ +gesture. In a language you do not understand, he seems \ +to make a prayer to some nameless god! Fearing the \ +inevitable, you struggle mightily, but to no avail. \ +In moments, the group of robed figures hurls you off the \ +pyramid to your death!" + has light; + +! ************* +! Creatures +! ************* + +Object Imp "Implementor" Imp_Bedroom + with name "Implementor", + article "an", + description [; + print "Some Implementor. Looks more like a oddly-dressed \ +young man badly in need of a haircut"; + if (self has general) + ". He's also sound asleep!"; + else "."; + ], + describe [; + print "^Someone you assume must be an Implementor \ +is here"; + if (self has general) + ", sound asleep."; + else "."; + ], + number 0, + weight 120, ! about right + life [; + ! if asleep, which is usually the case + if (self has general) { + if (action==##WakeOther or ##Attack) { + print "You manage to rouse the Implementor from his \ +slumber. He stares at you, bewildered. ~What are you doing here?~ \ +he asks. "; +ImpSendBack(); rtrue; + } + else + "He appears to be sound asleep right now, and isn't very \ +responsive."; + } +! else { +! (I suppose this is unnecessary. -- i.e. the player shouldn't be able to +! interact with the implementor unless the implementor is asleep) +! print "Well, that got his attention. The Implementor \ +!looks completely startled. ~What are you doing here?~ he says. "; +!ImpSendBack(); rtrue; +! } + ], + daemon [; + ! ASSUMPTION -- daemon started by start event + StopTimer(Imp_Liv); + if (Imp.number == 0) { + give Imp_door open; + if ((player in Imp_Liv) && (player notin Imp_Curtains)) { + print "^The door to the west suddenly flies open! \ +A somewhat bedraggled Implementor steps out! He spots you and his \ +jaw drops. ~You, here?~ he says. "; +ImpSendBack(); rtrue; + } + else + print "^You hear a door open to the west.^"; + Imp.number = 1; + move Imp to Imp_Liv; + } + else { + ! first a little 'lazy' clause that kicks the player + ! out if the Imp is moving around and the player isn't + ! in the curtains + if ((Imp.number < 5) && (player notin Imp_Curtains)) { + if (Imp in location) print "^The Implementor "; + else print "^From nearby, an Implementor rushes up and \ +"; + print " grabs you by the shoulder! \ +~What are you doing here?~ he \ +says. "; ImpSendBack(); return 1; + } + ! now, otherwise, we move the Imp and set his + ! number accordingly. Room descs and 'Listen' + ! traps in Imp_Liv will need to use this info + switch (Imp.number) { + ! [step 1, moving to Kitchen] + 1: move Imp to Imp_Kitchen; + Imp.number = 2; + if (Coffee_maker notin Imp_Kitchen) Imp.weight = 118; + else { + if (regular_coffee_can in Imp_Kitchen) { + Imp.weight = 119; + remove regular_coffee_can; + } + else { + if (decaf_coffee_can in Imp_Kitchen) { + Imp.weight = 122; + remove decaf_coffee_can; + } + else { + ! no coffee, gosh darn it + Imp.weight = 121; + } + } + } + return 0; + ! [step 2, making/drinking the beverage] + 2: Imp.number = 3; + ! [step 3, leaving kitchen, back to living room] + 3: Imp.number = 4; + move Imp to Imp_Liv; + ! [step 4, goes back into bedroom] + 4: Imp.number = 5; + give Imp_door ~open; + if (player in Imp_Curtains) + print "^You hear a door close to the west.^"; + move Imp to Imp_Bedroom; +! move coffee_cup to Imp_Bedroom; + if (Imp.weight == 122) + give Imp general; ! asleep + StopDaemon(Imp); + } + } + ], +has animate; + +!Object coffee_cup "large cup" +! with name "cup" "large", +! description "A large mug, with the residue of some brown liquid \ +!left in it.", + ! weight 5, +! size 4, +! has container open; + +! MOVEPRINTNPC routine, from Gareth Rees' 'THIEF.INF' +! (TODO -- you really don't need this, since only Frobar moves in this fashion) +[ MovePrintNPC n dest dir; + if (n in location) { + print "^", (The) n, " walks off"; + if (dir ~= in_obj or out_obj or u_obj && dir ~= d_obj) + print " to the ", (DirectionName) dir.door_dir; + print ".^"; + } + if (dest == 0) remove n; ! This seems odd - if dest bogus, 'unlink' NPC? + else move n to dest; + if (n in location) + print "^", (The) n, " walks in.^"; +]; + +Object White_Dragon "White Dragon" Dragon_Cave + with name "dragon" "white" "giant", + describe [; + print "There is a gigantic white dragon here"; + if (self has general) + " sleeping peacefully."; + "!"; + ], + description "A giant white dragon, the size of a small house.", + time_left 0, + time_out [; + give self ~general; + if (location == Dragon_Cave) { + deadflag = 1; + "^The dragon suddenly snorts and wakes! It sees you \ +and attacks! In moments, you are no more..."; + } + else { + remove self; + give stone_marker ~general; + move stone_marker_top to snowy_intersection2; + "^You hear a roar from the east! From out of the \ +sky, a giant white dragon descends! It draws near, spots you, \ +and bellows in rage! You shrink back, and pray for a quick but \ +painless end.^^There is a loud crack! The dragon, in trying to \ +land, almost impales itself on the obelisk marker! Part of the \ +marker breaks off, and the dragon flies off, whimpering in pain!"; + } + ], + life [; + Attack, ThrowAt, WakeOther: +deadflag = 1; +"You disturb the sleeping dragon, who promptly makes you wish \ +you hadn't."; + default: "Best not to disturb the dragon, I'd guess."; + ], + has animate; + +Object captain "sea captain" On_Boat + with name "captain", + description "A rough-looking navy captain.", + number 0, + each_turn [; + if (self hasnt general) { + if (captain.number == 0) { + captain.number = 1; + "^You suddenly realize that you are being \ +held fast by two navy sailors! The captain walks forward and \ +points his cutlass near your ear.^^\ +~What we have here, lads, is a stowaway!~ Some sailor cries out \ +~Overboard with the stowaway!~ The captain smiles. \ +~Now, we was planning on feeding you to the groupers, \ +but we could use a scullion in the hold. One things for sure, \ +ye ain't finding passage on this ship if ye ain't aligned with \ +the Antharian Navy cause!~ Some sailor cries out \ +(unnecessarily) ~The Antharian Navy cause!~. ~So, tell us lad, \ +are ye with us? If ye are true, you'll tell me the Antharian \ +Navy patron saint! So speak quickly, lad, if ye wish to stay \ +dry!~"; + } + else "^~Speak up fellow! We havn't got all day!~"; + } + ], + time_left 0, + time_out [; + deadflag = 1; + "The captain sighs. ~Into the water with ye, then,~ \ +he says, and the two sailors push you roughly overboard. \ +You land in the sea with a splash, and struggle to stay afloat. \ +The ship sails off, but oddly, moments later, it seems to \ +stall and start to sink! Before you get a chance to reflect on \ +this, a large grouper swallows you whole."; + ], + life [; + if (self has general) + "The captain's a bit too busy trying to save \ +a sinking ship."; + Answer: + if (noun=='minirva') { + give self general; + StopTimer(self); + StartTimer(militia,2); + "~Aye, that's right. Escort the new scullion \ +down to the hold where --~^^\ +The captain's orders are cut short by a sudden grinding noise, \ +and the boat rocks violently! ~Reef, captain!~ you hear someone \ +cry. ~Blast!~ the captain says, ~quickly men, we've got to --~ \ +But it's too late. The boat starts to tip and sway, and \ +the two sailors release you and hastily try to help raise the \ +rigging!"; + } + else { + if (noun=='duncanthrax') { + deadflag = 1; + "The sailors suddenly pale at the mention of \ +Lord Duncanthrax. ~A traitor in our midst, eh?~ the captain \ +shouts and beheads you with one stroke."; + } + if (noun=='ulysses' or 'odysseus') + "~Nay lad, me thinks that \ +was a sailor.~"; + else "~Nay lad, that doesn't sound right.~"; + } + Attack, ThrowAt, Kiss, Show, Give: + "Given that you are in the grips of several \ +strong navy sailors, this is impossible."; + ], + has animate; + +! ***** THE EVIL ELEMENTALS +Object black_elemental "black sphere" ENDGAME_ROOM + with name "anabais" "black" "sphere" "earth", + description "A black sphere of energy.", + life [; + ThrowAt: + if (noun==brown_sphere) { + remove self; remove brown_sphere; + ENDGAME_ROOM.number = ENDGAME_ROOM.number + 1; + if (ENDGAME_ROOM.number == 4) { + GameWinner(); rtrue; } + "The black sphere howls in rage and is no more!"; + } + Give: + if (noun==TRUEROD) { + remove TRUEROD; + print "You feel a strange foreboding feeling as \ +the black sphere seems to engulf the rod, then you! Your \ +surroundings change once again!^"; + deadflag = 1; + PlayerTo(badend2); + rtrue; + } + default: "The black sphere is unresponsive."; + ], + has animate; + +Object smoke_elemental "smoke-colored sphere" ENDGAME_ROOM + with name "smoke" "sphere" "fire", ! TODO new name... + description "A smoke-filled sphere of energy.", + life [; + ThrowAt: + if (noun==red_sphere) { + remove self; remove red_sphere; + ENDGAME_ROOM.number = ENDGAME_ROOM.number + 1; + if (ENDGAME_ROOM.number == 4) { + GameWinner(); rtrue; } + "The smoke-filled sphere howls in rage and is no more!"; + } + Give: + if (noun==TRUEROD) { + remove TRUEROD; + print "You feel a strange foreboding feeling as \ +the smoke-filled sphere seems to engulf the rod, then you! Your \ +surroundings change once again!^"; + deadflag = 1; + PlayerTo(badend1); + rtrue; + } + default: "The smoke-filled sphere is unresponsive."; + ], + has animate; + +Object gray_elemental "gray sphere" ENDGAME_ROOM + with name "gray" "sphere" "water", ! TODO new name + description "A gray sphere of energy.", + life [; + ThrowAt: + if (noun==green_sphere) { + remove self; remove green_sphere; + ENDGAME_ROOM.number = ENDGAME_ROOM.number + 1; + if (ENDGAME_ROOM.number == 4) { + GameWinner(); rtrue; } + "The gray sphere howls in rage and is no more!"; + } + Give: + if (noun==TRUEROD) { + remove TRUEROD; + print "You feel a strange foreboding feeling as \ +the gray sphere seems to engulf the rod, then you! Your \ +surroundings change once again!^"; + PlayerTo(FUBLIO_Cave); + StartTimer(mad_hermit,3); + rtrue; + } + default: "The gray sphere is unresponsive."; + ], + has animate; + +Object white_elemental "white sphere" ENDGAME_ROOM + with name "white" "sphere" "air", ! TODO new name + description "A white sphere of energy.", + life [; + ThrowAt: + if (noun==silver_sphere) { + remove self; remove silver_sphere; + ENDGAME_ROOM.number = ENDGAME_ROOM.number + 1; + if (ENDGAME_ROOM.number == 4) { + GameWinner(); rtrue; } + "The white sphere howls in rage and is no more!"; + } + Give: + if (noun==TRUEROD) { + remove TRUEROD; + print "You feel a strange foreboding feeling as \ +the white sphere seems to engulf the rod, then you! Your \ +surroundings change once again!^"; + PlayerTo(TROPHY_SECRET); + rtrue; + } + default: "The white sphere is unresponsive."; + ], + has animate; + + +! ****************** +! scrolls/spells +! ****************** + +Object fancy_scroll "fancy scroll" + class scroll_class, + with name "fancy", +; + +Object wigro_spell "turn undead" fancy_scroll + class spell_class, + with name "wigro", + magic [; + "You speak the chant. Nothing seems to happen."; + ], +; + +Object briefcase "briefcase" Subway_Tunnel + with name "briefcase" "case", + description "A somewhat battered brown-leather briefcase.", + capacity 5, + ! weight 20, + size 15, + has container openable; + +Object red_scroll "red scroll" briefcase + class scroll_class, + with name "red", +; + +Object luncho_spell "send object to lower plane" red_scroll + class spell_class, + with name "luncho", + magic [; + if (second == 0) +"You see a brief flash of smoke, but nothing happens."; + if (second has animate) + "You feel a slight rumbling beneath your feet, but nothing else \ +happens."; + else { + if ((second hasnt static) && (second hasnt scenery)) { + if (second has clothing) give second ~worn; + if (in_atrii == 1) { + move second to MON_Chapel2; + } + else + move second to Hades_5; + print "There is a sudden puff of smoke, and "; DefArt(second); + " suddenly vanishes!"; + } + "Your chant goes unanswered."; + } + ], +; + +! ****************** +! special obs +! ****************** + +Object Atrii_gate "strange contraption" GUE_Labs_SECRET + with name "contraption" "plate" "disc" "strange", + description "It looks like a large, slightly convex round disc \ + made of some silvery material.", + before [; + Enter: + print "As you step onto the silvery disc, you feel a \ + strange jolt run through your body. A bright white \ + flash blinds you momentarily!^^You blink, trying to \ + register your surroundings.^"; + in_atrii = 1; + PlayerTo(ATRII_1); + return 2; + Receive: + move noun to ATRII_1; + CDefArt(noun); " suddenly disappears in a bright \ + flash of light as you place it on the silver disc!"; + Push, Pull, Touch, Take: + "As you reach for the strange contraption, you notice \ + white sparks of something arc from the silver surface \ + to your fingers! You hastily draw back."; + ], + has static supporter enterable; + +! *** the true rod pieces, and the golden rod (after joined) +Object silver_rod_piece "silver rod piece" Mystical_Cave + class rod_class, + with name "silver", + description "A strange short section of rod colored \ +silver.", + before [; + Join: + if (location ~= Mystical_Cave) { + if (second == TRUEROD) + <>; + if ((second == brown_rod_piece) || + (second == red_rod_piece) || + (second == green_rod_piece)) { + if (TRUEROD.number == 0) { + TRUEROD.number = 1; + move TRUEROD to parent(self); + remove self; remove second; + "There is a dazzling golden light as \ +you join the two rod pieces! What remains is a new, strange \ +rod piece!"; + } + else "There is a dazzling burst of \ +golden light. However, the pieces will not join, and seem \ +to be seeking out something else..."; + } + } + else "Some strange purple flash of force \ +blocks your efforts."; + ], +; +Object red_rod_piece "red rod piece" Mystical_Cave + class rod_class, + with name "red", + description "A strange short section of rod colored \ +red.", + before [; + Join: + if (location ~= Mystical_Cave) { + if (second == TRUEROD) + <>; + if ((second == silver_rod_piece) || + (second == brown_rod_piece) || + (second == green_rod_piece)) { + if (TRUEROD.number == 0) { + TRUEROD.number = 1; + move TRUEROD to parent(self); + remove self; remove second; + "There is a dazzling golden light as \ +you join the two rod pieces! What remains is a new, strange \ +rod piece!"; + } + else "There is a dazzling burst of \ +golden light. However, the pieces will not join, and seem \ +to be seeking out something else..."; + } + } + else "Some strange purple flash of force \ +blocks your efforts."; + ], +; +Object green_rod_piece "green rod piece" Mystical_Cave + class rod_class, + with name "green", + description "A strange short section of rod colored \ +green.", + before [; + Join: + if (location ~= Mystical_Cave) { + if (second == TRUEROD) + <>; + if ((second == silver_rod_piece) || + (second == red_rod_piece) || + (second == brown_rod_piece)) { + if (TRUEROD.number == 0) { + TRUEROD.number = 1; + move TRUEROD to parent(self); + remove self; remove second; + "There is a dazzling golden light as \ +you join the two rod pieces! What remains is a new, strange \ +rod piece!"; + } + else "There is a dazzling burst of \ +golden light. However, the pieces will not join, and seem \ +to be seeking out something else..."; + } + } + else "Some strange purple flash of force \ +blocks your efforts."; + ], +; +Object brown_rod_piece "brown rod piece" Mystical_Cave + class rod_class, + with name "brown", + description "A strange short section of rod colored \ +brown.", + before [; + Join: + if (location ~= Mystical_Cave) { + if (second == TRUEROD) + <>; + if ((second == silver_rod_piece) || + (second == red_rod_piece) || + (second == green_rod_piece)) { + if (TRUEROD.number == 0) { + TRUEROD.number = 1; + move TRUEROD to parent(self); + remove self; remove second; + "There is a dazzling golden light as \ +you join the two rod pieces! What remains is a new, strange \ +rod piece!"; + } + else "There is a dazzling burst of \ +golden light. However, the pieces will not join, and seem \ +to be seeking out something else..."; + } + } + else "Some strange purple flash of force \ +blocks your efforts."; + ], +; +Object TRUEROD "golden rod" + class rod_class, + with name "golden", + number 0, + description [; + print "A wondrous, shimmering golden rod"; + if (TRUEROD.number < 3) + " that seems slightly short."; + else "."; + ], + before [; + Wave: + if (TRUEROD.number == 3) { + deadflag = 1; +! TODO -- this is essentially another 'win', but not a good one + "You wave the rod, and feel a sudden blast of force! \ +The spheres howl in terror and \ +suddenly explode! The jolt of power from the rod sends you \ +hurtling through space, and you are lost in an endless \ +tumble through the void..."; + } + Join: + if ((second == silver_rod_piece) || + (second == red_rod_piece) || + (second == green_rod_piece) || + (second == brown_rod_piece)) { + remove second; + TRUEROD.number = TRUEROD.number + 1; + print "You feel a strange surge of \ +mystic energy as you join the rod pieces. ", (The) second, " \ +joins with the golden rod"; + if (TRUEROD.number == 3) { + Achieved(19); + print "!^^Time and space seem to grind to \ +a halt.^^\ +Your surroundings and the very ground you stand on shatter like \ +planes of glass, revealing a strange, new dimension...^"; + spell_block = 1; + PlayerTo(ENDGAME_ROOM); + StartTimer(ENDGAME_timer,12); + rtrue; + } + else "!"; + } + ], +; + +! *** The results of winning the game *** +[ GameWinner ; + Achieved(26); + print "The last sphere howls in rage and disappears!"; + deadflag = 2; + " You scream in agony as the void that surrounds you \ +seems to implode! You feel yourself dissipating into the \ +surrounding nothingness. ~Is this my reward?~ you scream, \ +~Is this, then, the end?~^^\ +A white light makes you open your eyes.^^\ +You are lying on a beach. The Great Sea laps at your \ +tattered garments. Slowly, you rise to your knees.^^\ +The sun, like a bloated, radiant bird, is sinking below the \ +wave on the horizon. Another day is coming to an end.^^\ +A voice startles you. ~Tis a fine spot for watching \ +sunsets.~ You turn to see Morgan the Ranger, Frobar and \ +the Thief nearby. The Thief helps you to your feet, and Frobar \ +glances your way. ~I sensed a great upheaval in the \ +fabric of time and space not long ago. I gather you \ +have quite a story to tell,~ he says. ~We \ +probably can relate to much of what you have seen, \ +although your unwavering faith is something we \ +desire to understand.~ Morgan explains, ~Belief in the \ +face of the unbelievable is an enviable strength.~ \ +The Thief chuckles quietly. \ +~Perhaps you will join us at Delbins, where we will \ +partake in a belief of fine cuisine while you tell all?~ he says. \ +He notices your weary expression and \ +adds with surprising seriousness, ~Not that I \ +prepose to offer advice from one as myself, \ +but humbly, I admit, that many a time, a belief in myself \ +was often sufficient.~ He pauses. \ +~Gods or no, now, you make your own destiny.~"; +];