diff --git a/commands/hint.py b/commands/hint.py index 2fc3dea..b2ebb0d 100755 --- a/commands/hint.py +++ b/commands/hint.py @@ -57,15 +57,17 @@ class CmdHint(MuxCommand): return "<< Sorry, the hint system for this area has not been created, yet. >>" narrative = room_hints.get('narrative') - hints = room_hints['hints'] + if narrative: + narrative = sub(r"\n", " ", narrative) + hints = room_hints.get('hints') if not search_string or search_string == "": - hint = hints['default'] + hint = hints.get('default') else: - hint = hints[search_string] + hint = hints.get(search_string) - narrative = sub(r"\n", " ", narrative) - hint = sub(r"\n", " ", hint) + if hint: + hint = sub(r"\n", " ", hint) return self.display_hint(narrative, hint, cleaned) diff --git a/typeclasses/characters.py b/typeclasses/characters.py index 791f0a2..ff45e5e 100644 --- a/typeclasses/characters.py +++ b/typeclasses/characters.py @@ -472,10 +472,10 @@ class Character(Object, GenderCharacter, ContribRPCharacter): Return a list of puppets in the current location. Only used for calling hooks on the animatronic dolls. """ - return [ puppet - for puppet in self.location.contents - if puppet.is_typeclass("typeclasses.puppets.Puppet") - or puppet.is_typeclass("typeclasses.puzzles.StoryCube") + return [puppet + for puppet in self.location.contents + if puppet.is_typeclass("typeclasses.puppets.Puppet") + or puppet.is_typeclass("typeclasses.puzzles.StoryCube") ] def at_post_move(self, past_location, move_type="move", **kwargs): diff --git a/typeclasses/objects.py b/typeclasses/objects.py index fddd417..02a1d93 100755 --- a/typeclasses/objects.py +++ b/typeclasses/objects.py @@ -231,7 +231,10 @@ class Object(ObjectParent, ContribRPObject): """ Search for something globally. """ - return super().search(searchdata, global_search=True) + results = super().search(searchdata, global_search=True, quiet=True) + if isinstance(results, list): + return results[0] + return results def has(self, item): """ diff --git a/typeclasses/readables.py b/typeclasses/readables.py index 0d9881c..5e71ee1 100755 --- a/typeclasses/readables.py +++ b/typeclasses/readables.py @@ -138,10 +138,7 @@ class Letter(Readable): self.cmdset.add_default(CmdSetBook) def at_pre_drop(self, dropper): - if dropper.location.key == "Dabbler's House": - dropper.msg(f"You throw your {self.get_display_name(dropper)} into the fire and burn it.") - else: - dropper.msg(f"You throw your {self.get_display_name(dropper)} away.") + dropper.msg(f"You throw your {self.get_display_name(dropper)} away.") self.delete() @@ -156,8 +153,8 @@ class Book(Readable): reader.announce_action("$You() $conj(read) $pron(your) book.") def at_pre_drop(self, reader): - if reader.location.key == "Dabbler's House": - reader.msg("You drop the book, but it flaps its pages, and flies back to a section on the shelf.") + if reader.location.key == "Cozy House": + reader.msg("You drop the book, but flapping its pages, flies back to its section on a shelf.") self.delete() else: return True diff --git a/world/alchemy-book.md b/world/alchemy-book.md index 9fd7086..78c2636 100644 --- a/world/alchemy-book.md +++ b/world/alchemy-book.md @@ -38,8 +38,6 @@ This fascinating potion can create a dream-like state while awake, including vis The moonberries grow under conifers, and I find I often have to travel to one of the islands on the Lavender Sea to collect these. Dreamshades (Lunara Mycelium) feed on floating dreams, and often congregate where dreamers sleep. -I have found Gigglecaps growing on well drained, rocky soil and even on rocks. Tickleweed loves the frothy, bubbly water that comes from the meadow's waterfall. This place too is where I collect the fizzy water. - I’ve noticed Pixies often dance in the marshlands to the East, but are often invisible except in the evenings. I’ve attempted to discuss a trade for pixie dust, but often luck out as they often pay more attention to their choreography than any trinkets I could produce. |wProcedure|n @@ -49,5 +47,26 @@ Step 2. |gadd|n all ingredients to the cauldron Step 3. |gcreate|n the potion by stirring the potion clockwise for exactly seven rotations Step 4. |gbottle|n the concoction into a vial +# -------------------------------------------------------------------------------- + |bPuck's Revenge|n +# -------------------------------------------------------------------------------- + +A lovely prank, if one can be tempted to down this brown, but sparkly concoction. + +|wIngredients|n + + - Moonlit Whiskers + - Donkeytail Grass + - Whirlwind Leaves + - Starlit Dewdrops + +I call the whimsical grass that the resembles the tail of a donkey and grows in the Feywild prairies, |wDonkeytail|n, . It has a faint, sweet aroma, and provides a playful essence to the potion, enhancing the transformation and giving the drinker a temporary sense of carefree joy. + +The silvery whiskers from the elusive Moonlit Cat, who only appears under certain lunar occurrences. Challenging to acquire without her consent, but necessary for the secrets it imparts. + +The leaves from the Whirlwind tree perpetually dance and twirl as if caught in a breeze. They emit a soft, melodic sound when held. These infuse the potion with a sense of lightness, making the transformation feel like a joyful dance rather than a mere change. + +Collect at dawn, the tiny dewdrops that glimmer like stars, from the petals of the Celestial Blossoms. This water enhances the potion's magical properties, filling it with whimsical adventures. + # End |bNote: This is still a work in progress... What do you think of this idea? You would gather herbs and whatnot, put them in the cauldron and then make potions! Seems intriguing...|n diff --git a/world/help_entries.py b/world/help_entries.py index 74d7aa3..85d808a 100644 --- a/world/help_entries.py +++ b/world/help_entries.py @@ -101,11 +101,7 @@ Keep in mind that some exits may not be available until you |glook|n for them (b "locks": "read:all()", "text": """When you created your account, my game creates a character with the same name. If you want to rename yourself, you create a new character. Follow these steps. -First, delete your introductory letter, using the |gburn|n command: - - |gburn letter|n - -Next, leave your current character by typing: +Leave your current character by typing: |gooc|n diff --git a/world/hints.yaml b/world/hints.yaml index bb43f99..964784f 100644 --- a/world/hints.yaml +++ b/world/hints.yaml @@ -19,34 +19,146 @@ boulder_top: getting them out of my way? They make quite the rope mesh making it hard to find my food. +frog_meadow: + narrative: >- + "<< Psst. ^ Heya. ^ Down here. ^ Ribbit... ^ Hey buddy. >>" + You << stoop ^ look down ^ bend down >> and see + a << tiny ^ small ^ >> << green ^ >> frog + with a << teeny ^ >> << gold ^ >> crown. It says, + "<< I see ya gawking. ^ You look confused. ^ Need some help? >> {0}" + And with that, he hops away. + ;; + A << flock ^ couple >> of crows fly into the meadow. + One of them, hops << next to ^ near >> you. + "<< I see ya gawking. ^ You look confused. ^ Need some help? >> {0}" + ;; + A cricket, sporting a nice top hat and waistcoat, eyes you curiously. + "You seem << confused ^ bewildered ^ befuddled ^ disoriented ^ perplexed >>," + it says. "Perhaps I can help. {0} + Hope that helps. Good-bye << and good luck ^ >>." + And with a mighty jump, hops to the other side of the << meadow ^ field >>. + hints: + default: >- + The |Ybeast|n over there is << actually ^ quite >> friendly, + but scared of everything and everyone. + That's why he doesn't venture in to the forest. + That, and he loves the fizzy water from the |Ystream|n. + beast: >- + The beast doesn't like new people. Sometimes you can |Yfeed|n him + to get 'im to warm up to you. Sometimes takes a bit of food for him + to trust you. + feed: >- + |YBerries|n are good, but he loves Dabbler's |Yscones|n. + Just hard to get into his house. + berries: You'll find a bush of them to the west in the Grotto. + scones: Dabbler lives in a tree to the west, behind a red door. + stream: Yes, the fizzy water is drinkable, so you can |Ycollect|n some. + collect: To collect the water, you will need a |Ybottle|n. + bottle: You want to |gfill bottle|n to collect the water. + +lair: + hints: + default: >- + This is the bedroom for the |wBig Hairy Beast|n, and little + else. Eventually, I will expand this room into something more + interesting, but at the moment, pretend there is a |wPardon our + Dust|n sign or something. + |/|/Of course I will install a secret door here, but not yet. + +mellow_marsh: + narrative: >- + The << purple ^ large ^ >> heron + << gives you a sideways glance ^ raises a feathery eyebrow ^ stops its hunting >>, + and << mentions ^ says >>, "{0}" ;; + "Hrm," says the << purple ^ large ^ >> heron. + "You seem << puzzled ^ confused ^ perplexed >>. {0}" ;; + "You seem << puzzled ^ confused ^ perplexed >>," + says the << purple ^ large ^ >> heron. "{0}" ;; + hints: + default: >- + Perhaps you can |Ylasso|n the legs, er, stilts, so they don't + run off? Then, you can |Yjump|n in. + lasso: If you don't have a rope, perhaps strong greenery, like |Yvines|n? + vines: I flew over a |Yboulder|n once. It was covered in vines. + boulder: >- + I think the boulder was north and west of here, in the forest, + in the Grove of the Matriarchs. + jump: >- + Yeah, your legs are too short, and your featherless arms can't + lift you. Perhaps you should find something to |Ylaunch|n you + higher in the air? + launch: Yeah, launch, as in a |Ypole|n or something. + pole: Those reeds are pretty tall. You could possibly use them. + river: Wizards come her to |Ycollect|n the river water for use in potions. + collect: To collect the water, you will need a |Ybottle|n. + bottle: You want to |gfill bottle|n to collect the water. + +homey_hut: + narrative: >- + A wolf skull << attached to ^ on >> the wall says, "{0}." ;; + A wood carving of a small demon, << attached to ^ on >> the wall says, "{0}." + hints: + default: >- + I can see you might need |Ylight|n in the dark dungeons across + the sea. Of course, to travel there, you need to |Ycall|n for a + boat. But be quick, before the lady of the house wakes up! + light: >- + You can |gget|n a |gtorch|, and when you need it, |glight|n it. + call: >- + Don't worry about stealing, as you can |gget|n the |ghorn|n. + The sea mist will create another. + +lazy_dock: + narrative: >- + The << black ^ large ^ >> raven + << gives you a sideways glance ^ raises a feathery eyebrow ^ + looks curiously at you >>, and + << mentions ^ says ^ croaks >>, "{0}" + hints: + default: >- + Docks are good for |Yfishing|n and traveling by |Yboat|n. + fishing: >- + If you dare catch a |Yfish|n, use repeat the commands |gcast|n + and |greel|n. + fish: You can get rid of obnoxious fish using the |gthrow|n command. + boat: A magical boat appears here, but only if you |Ycall|n it. + call: To call the boat, |gblow|n a |Yhorn|n. + swamp: I think the swamp is called |wMellow Marsh|n. + horn: >- + The mystical south wind gathers the mystical mist from the sea + to create a calling horn. Trampolina's hut in the |Yswamp|n + often is a conduit for the creation of these horns. Good luck + getting in there. + grotto: narrative: >- - A << flock ^ couple >> of sparrows fly into the berrybush. - One of them, hops << next to ^ near >> you. It says, - "<< I see that expression. ^ You look confused. ^ Need some help? >>" - << Turning its head ^ Hopping to a higher branch >>, it says, "{0}" - Soon the flock flee for other bushes. - ;; - A << yellow ^ orange ^ large ^ >> butterfly lands on your shoulder. - "You look like you << could use some ^ need ^ would like some >> help," - it says, "{0}" As it flies away, it says, "Good luck!" - ;; - A <> goblin walks down the footpath, and starts picking berries. - "Hiya," he says. "I see ya << staring ^ gawking >>, so I'll give ya a - bit o' advice. {0}" - When finished, he says, "Hope that helps." - And retreats back down the path with his bucket of berries. + A << flock ^ couple >> of sparrows fly into the berrybush. One of + them, hops << next to ^ near >> you. It says, "<< I see that + expression. ^ You look confused. ^ Need some help? >>" << Turning + its head ^ Hopping to a higher branch >>, it says, "{0}" Soon the + flock flee for other bushes. ;; + A << yellow ^ orange ^ large ^ >> butterfly lands on your + shoulder. "You look like you << could use some ^ need ^ would like + some >> help," it says, "{0}" As it flies away, it says, "Good + luck!" ;; + A <> goblin walks down the footpath, and starts picking + berries. "Hiya," he says. "I see ya << staring ^ gawking >>, so + I'll give ya a bit o' advice. {0}" When finished, he says, "Hope + that helps." And retreats back down the path with his bucket of + berries. hints: default: >- That |Ydoor|n leads to an interesting place, but the |Yknocker|n - won't let you in without knowing the |Ysecret|n. So try to talk to it. + won't let you in without knowing the |Ysecret|n. So try to talk + to it. knocker: >- While not good at listening, he can't talk with that |Yring|n in his mouth. ring: Since it has it, you will want to |gget ring from knocker|n door: That door leads to |wDabbler's House|n. secret: >- - If you say the secret |Ypassword|n, the |Yknocker|n will let you in. + If you say the secret |Ypassword|n, the |Yknocker|n will let you + in. password: >- The |Yknocker|n knows the password, but might give you a |Yhint|n if you ask for one. @@ -96,6 +208,53 @@ cramped_kitchen: Then after you have a |Yteacup|n, you can |gpour|n yourself a cup. teacup: The cabinet is full of cups, so |gget teacup|n. +secret_room: + narrative: >- + The << wee ^ small >> << demon ^ imp ^ helper >> + << perched ^ roosting ^ poised >> on its iron stand looks + << curiously ^ quizically ^ inquisitively >> at you. |/|/ + You << then ^ >> hear a voice in your head. + "<< Wondering I see. ^ Curious? ^ Overwhelmed? >> {0}" + hints: + default: >- + Can't figure out how to use the |Ycauldron|n and the |Ytools|n + in this secret alchemical lab to creation |Ypotions|n? + Here you can learn to bewitch the mind and ensnare the senses, + bottle fame, brew glory and even put a stopper in death. + death: + WHAT DID YOU SAY? + + The small imp squeaks, and attempts to be small. + + REMEMBER WHO HAS THE ULTIMATE SAY AROUND HERE. + + The perched imp nods emphatically. + potions: >- + Find the potions and their |Yingredients|n in the grimoire... er, + large brown |Ybook|n there. I suggest, making the potions |win order|n. + book: >- + While the book stays here, you can |gread|n it to learn the + |Yingredients|n to add to the |Ycauldron|n. Just follow the + |Ysequence|n of commands to make the potion. + cauldron: >- + Place the specific |Yingredients|n listed in the grimoire... er, + large brown |Ybook|n there. + You do know how to |gread|n a |gbook|n, right? + tools: >- + Don't worry about the tools right now. Just the |Ysequence|n of + commands. + ingredients: >- + The alchemical components necessary for transubstantiation and + the creation of potions are located around the area. Once you + have all the ingredients, follow the |Ysequence|n of commands to + make a potion. + sequence: >- + First, |gempty|n the cauldron. |/ + After you have |wgathered|n a component, |gadd|n the component. |/ + With all the ingredients, |gcreate|n the concoction. + I will tell you if it is right. |/ + Finally, |gbottle|n it in the empty vials. + bedroom: hints: default: >- @@ -107,96 +266,6 @@ bedroom: prairie: hints: default: >- - This place should have a sign that reads, |wUnder Construction|n, - as nothing much happens here now ... well, except for the gift you - received as a reward for finding this place. - -frog_meadow: - narrative: >- - "<< Psst. ^ Heya. ^ Down here. ^ Ribbit... ^ Hey buddy. >>" - You << stoop ^ look down ^ bend down >> and see - a << tiny ^ small ^ >> << green ^ >> frog - with a << teeny ^ >> << gold ^ >> crown. It says, - "<< I see ya gawking. ^ You look confused. ^ Need some help? >> {0}" - And with that, he hops away. - ;; - A << flock ^ couple >> of crows fly into the meadow. - One of them, hops << next to ^ near >> you. - "<< I see ya gawking. ^ You look confused. ^ Need some help? >> {0}" - ;; - A cricket, sporting a nice top hat and waistcoat, eyes you curiously. - "You seem << confused ^ bewildered ^ befuddled ^ disoriented ^ perplexed >>," - it says. "Perhaps I can help. {0} - Hope that helps. Good-bye << and good luck ^ >>." - And with a mighty jump, hops to the other side of the << meadow ^ field >>. - hints: - default: >- - The |Ybeast|n over there is << actually ^ quite >> friendly, - but scared of everything and everyone. - That's why he doesn't venture in to the forest. - That, and he loves the fizzy water from the |Ystream|n. - beast: >- - The beast doesn't like new people. Sometimes you can |Yfeed|n him - to get 'im to warm up to you. Sometimes takes a bit of food for him - to trust you. - feed: >- - |YBerries|n are good, but he loves Dabbler's |Yscones|n. - Just hard to get into his house. - berries: You'll find a bush of them to the west in the Grotto. - scones: Dabbler lives in a tree to the west, behind a red door. - stream: Yes, the fizzy water is drinkable, so you can |Ycollect|n some. - collect: To collect the water, you will need a |Ybottle|n. - bottle: You want to |gfill bottle|n to collect the water. - -lair: - hints: - default: >- - This is the bedroom for the |wBig Hairy Beast|n, and little else. - Eventually, I will expand this room into something more interesting, but - at the moment, pretend there is a |wPardon our Dust|n sign or something. - -mellow_marsh: - narrative: >- - The << purple ^ large ^ >> heron - << gives you a sideways glance ^ raises a feathery eyebrow ^ - stops its hunting >>, and - << mentions ^ says >>, "{0}" - hints: - default: >- - Perhaps you can |Ylasso|n the legs, er, stilts, so they don't run off? - Then, you can |Yjump|n in. - lasso: If you don't have a rope, perhaps strong greenery, like |Yvines|n? - vines: I flew over a |Yboulder|n once. It was covered in vines. - boulder: >- - I think the boulder was north and west of here, in the forest, in - the Grove of the Matriarchs. - jump: >- - Yeah, your legs are too short, and your featherless arms can't lift you. - Perhaps you should find something to |Ylaunch|n you higher in the air? - launch: Yeah, launch, as in a |Ypole|n or something. - pole: Those reeds are pretty tall. You could possibly use them. - river: Wizards come her to |Ycollect|n the river water for use in potions. - collect: To collect the water, you will need a |Ybottle|n. - bottle: You want to |gfill bottle|n to collect the water. - -# Add a Raven to the Dock so that it can give hints? -lazy_dock: - narrative: - The << black ^ large ^ >> raven - << gives you a sideways glance ^ raises a feathery eyebrow ^ - looks curiously at you >>, and - << mentions ^ says ^ croaks >>, "{0}" - hints: - default: >- - Docks are good for |Yfishing|n and traveling by |Yboat|n. - fishing: >- - If you dare catch a |Yfish|n, use repeat the commands |gcast|n and |greel|n. - fish: You can get rid of obnoxious fish using the |gthrow|n command. - boat: A magical boat appears here, but only if you |Ycall|n it. - call: To call the boat, |gblow|n a |Yhorn|n. - horn: >- - The mystical south wind gathers the mystical mist from the sea - to create a calling horn. Trampolina's hut in the |Yswamp|n often - is a conduit for the creation of these horns. Good luck getting in - there. - swamp: I think the swamp is called |wMellow Marsh|n. + This place should have a sign that reads, |wUnder + Construction|n, as nothing much happens here now ... well, except + for the gift you received as a reward for finding this place. diff --git a/world/test-run.exp b/world/test-run.exp index 7859a7f..af7812a 100755 --- a/world/test-run.exp +++ b/world/test-run.exp @@ -12,34 +12,101 @@ proc expectit {pattern} { } timeout { puts "Error: Expected response '$pattern' not received." + send "quit\n" exit 1 } eof { puts "Error: Connection closed unexpectedly." + send "quit\n" exit 1 } } } -# Start the SSH session -# spawn ssh -p 4004 user@howardabrams.com -# Handle the password prompt -# expectit "password:" -# send "\r" ; # Send an empty password -# -# or -spawn telnet localhost 4000 +proc dont_expect {trigger pattern} { + send "look\n" + puts "NOTE: At this point, ** $pattern ** should not be here!" +} + +# Get command line parameters +set there [lindex $argv 0] ; # First parameter (boolean) here/there +set tutorial [lindex $argv 1] ; # Second parameter (optional) yes/no +set create [lindex $argv 2] ; # Third parameter (optional) yes/no + +if {$there eq "there"} { + spawn ssh -p 4004 user@howardabrams.com + # Handle the un-used password prompt: + expectit "password:" + send "\r" ; # Send an empty password +} else { + spawn telnet localhost 4000 +} # Handle the prompt after logging in expectit "After you've logged in Enter" -send "connect guest beourguest\n" + +if {$create eq "true"} { + send "create rob backinqa\n" + expectit "Is this what you intended?" + send "y\n" + expectit "You can now log with the command" +} + +send "connect rob backinqa\n" + +if {$create eq "true"} { + expectit "begin creating your character" + send "\n" + + expectit "Let's begin with a two or three word description" + send "spry goblin\n" + + expectit "Specifying the gender" + send "n\n" + + expectit "Enter an initial pose" + send "curiously looking at everything\n" + + expectit "Enter your character's full description" + send "A short, skinny goblin wearing a dirty tunic cinched with an elaborate belt bejeweled with gems and gold filigree. Unclear whether his green ears or nose are longer, but surely it must be the few hairs he combs over on top of his head.\n" + + expectit "Enter a name here to check if it's available." + send "Poach\n" + + expectit "Shall I create your character" + send "y\n" +} + +if {[string match "tutor*" $tutorial]} { + # Handle the game command prompt + expectit "In this story game, you type commands" + send "look\n" + + # Handle the prompt to examine the puddle + expectit "You can now type" + send "look puddle\n" + + # Handle the response about flying + expectit "Yes, I could fly myself" + send "look boulder\n" + + # Handle the prompt about climbing the boulder + expectit "You can climb this boulder!" + send "climb\n" + + # Handle the prompt about typing + expectit "Go ahead, just typing" + send "say Hello there, little birdie.\n" +} else { + expectit "perches on your shoulder" +} # That should be enough of the birdie ... -expectit "perches on your shoulder" send "shoo\n" # Send the time command and handle the response expectit "Have fun, and I'll leave you here" + send "time\n" expect { "in the evening" { @@ -51,9 +118,12 @@ expect { "in the morning" { set phase "morning" } - # What about "at night"? + "in the night" { + set phase "night" + } timeout { puts "Error: Expected time response not received." + send "quit\n" exit 1 } } @@ -71,8 +141,12 @@ switch $phase { "morning" { expect "awakening dawn" } + "night" { + expect "night sky" + } default { puts "Error: Unexpected phase value '$phase'." + send "quit\n" exit 1 } } @@ -80,6 +154,15 @@ switch $phase { send "look trees\n" expectit "You feel dwarfed by colossal trees" +send "hint\n" +expectit "Look at everything" + +send "look puddle\n" +expectit "A large puddle" + +send "get puddle\n" +expectit "As the water slips through your fingers" + send "jump\n" expectit "You jump in the puddle!" @@ -94,15 +177,29 @@ expect { # If stick is found, throw it send "throw stick\n" expect "it comes back to you" + send "drop stick\n" expect "You drop a stick." } timeout { puts "Error: Expected response for 'get stick' not received." + send "quit\n" exit 1 } } +send "look book\n" +expectit "The root from one of the colossal" + +send "look quill\n" +expectit "The black feathered quill may once belonged to a raven" + +send "look ink\n" +expectit "Black, like the ichor of the gods" + +send "look ink well\n" +expectit "The well appears to be little more than a depression" + send "read book\n" # expect -re "You open the leather-bound book, and begin to read\[.\n\r\]*For repayment of a boon, The Summer Queen" expectit "You open the leather-bound book, and begin to read" @@ -111,26 +208,13 @@ expectit "For repayment of a boon, The Summer Queen" expectit "revious" # quit reading the book: send "q\n" +expectit "Exited pager" +sleep 1 -send "look\n" -expect { - -re "Exits:.*" { - # Store the matched line in a variable - set matched_line $expect_out(buffer) +send "get book\n" +expectit "The owner designed a guest book to be read and written by guests" - # Check if the matched line contains "boulder" - if {[string match boulder $matched_line]} { - puts "Error: The line contains 'boulder'." - exit 1 - } else { - puts "The line is valid and does not contain 'boulder'." - } - } - timeout { - puts "Error: Expected line starting with 'Exits:' not received." - exit 1 - } -} +dont_expect "Exits" "boulder" send "look boulder\n" expectit "You notice a foot hold" @@ -138,24 +222,7 @@ expectit "You notice a foot hold" send "look\n" expect -re "Exits:.*climb.*boulder" -expect { - -re "You notice.*" { - # Store the matched line in a variable - set matched_line $expect_out(buffer) - - # Check if the matched line contains "boulder" - if {[string match vines $matched_line]} { - puts "Error: The line contains 'vines'." - exit 1 - } else { - puts "The line is valid and does not contain 'vines'." - } - } - timeout { - puts "Error: Expected line starting with 'Exits:' not received." - exit 1 - } -} +dont_expect "You notice.*" "vines" send "look vines\n" expectit "Strong vines twisted to look like rope" @@ -163,19 +230,476 @@ expectit "Strong vines twisted to look like rope" send "look\n" expect -re "You notice.*vines" +send "get vines\n" +expectit "The vines are too strong to break or cut." + +send "pull vines\n" +expectit "You pull the vines, but don't let go." + +send "push vines\n" +expectit "That doesn't seem to do much." + send "climb boulder\n" expectit "You grab hold of some" -# And once on top... -expectit "Still, a nice view." +# Did we arrive? +expectit "Boulder Top" -send "sit moss" +send "sit moss\n" expectit "You sit on the patch of moss." # We can't get this stuff: -send "get moss" +send "get moss\n" expectit "The moss is a bryophyte" +send "pull vines\n" +expectit "You pull the vines" + +send "get vines\n" +expectit "You yank and shape a coil of rope from the vines" + +send "inv\n" +expectit "Made from vines" + +# Let's get another length of rope to try lassoing the hut twice: +send "get vines\n" +expectit "You yank and shape a coil of rope from the vines" + +# Let's head back to the grove... +send "down\n" +expectit "You stand up first" + +# Wait until we've arrived +expectit "Grove of the Matriarchs" + +dont_expect "You notice" "mushrooms" + +send "e\n" +expectit "Frog Meadow" + +# Until we are an alchemist, we shouldn't see the tickleweeds... +dont_expect "You notice" "tickleweed" + +send "look frogs\n" +expectit "Cute little guys" + +dont_expect "Exits" "cave entrance" + +dont_expect "You notice" "waterfall" + +send "look pool\n" +expectit "A pool of cool, clear water." + +send "look waterfall\n" +expectit "entrance hidden behind the water?" + +# water == waterfall ... eh. +# send "look water\n" +# expectit "Could not find 'water'" + +send "look\n" +expect -re "Exits:.*cave entrance" +expect -re "You notice.*waterfall" + +send "get waterfall\n" +expectit "You can't get that" + +send "look stream\n" +expectit "A slow-moving stream meanders like a snake in the grassy field." + +send "get stream\n" +expectit "Seriously? You can't get that." + +# send "look water\n" +# expectit "A slow-moving stream meanders like a snake in the grassy field." + +# send "get water\n" +# expectit "Seriously? You can't get that." + +dont_expect "You notice" "tickleweed" + +send "hint\n" +expectit "but scared of everything and everyone" +send "hint beast\n" +expectit "The beast doesn't like new people" +send "hint feed\n" +expectit "Just hard to get into his house" +send "hint berries\n" +expectit "You'll find a bush of them to the west in the Grotto" +send "hint scones\n" +expectit "Dabbler lives in a tree to the west, behind a red door" +send "hint stream\n" +expectit "Yes, the fizzy water is drinkable" +send "hint collect\n" +expectit "To collect the water, you will need" +send "hint bottle\n" +expectit "to collect the water." + +send "look cave\n" +expectit "A large entrance to a dark, and foul-smelling cave." + +send "lair\n" +expectit "Lair" + +send "look outside\n" +expectit "You can see the waterfall cascading outside the cave entrance." + +dont_expect "You notice" "mattress" + +send "look mattress\n" +expectit "Looks comfortable" + +send "look\n" +expect -re "You notice.*mattress" + +send "sit\n" +expectit "You sit on the mattress." + +send "get mattress\n" +expectit "too heavy" + +dont_expect "You notice" "mushrooms" + +send "leave\n" +expectit "Frog Meadow" + +expect { + "a big hairy beast" { + send "look beast\n" + expectit "it tries to hide behind a tall clump of grass" + + send "pet bhb\n" + expectit "can't get near the wild beast to pet it" + + send "get hairy beast\n" + expectit "beast is far larger than you." + } + timeout { + if {$phase == "night"} { + puts "The beast is in bed now." + } else { + puts "Where is the beast? It is $phase?" + } + } +} + +send "look south\n" +expectit "Looks like the river spreads into a marsh." + +send "south\n" +expectit "perched on three stilts" + +send "look north\n" +expectit "The meadow to the north looks easier to walk around." + +send "look birds\n" +expectit "Birds of every color on the rainbow and beyond fly and squawk around you" + +send "look moth\n" +expectit "On closer inspection, the moths are really" + +send "look sprite\n" +expectit "Seems that sprites with pink wings are on one team" + +send "look fireflies\n" +expectit "A passing firefly shows it to actually be" + +send "look pixies\n" +expectit "The pixies ignore you as their coreography keeps them focused on their dance." + +send "look grass\n" +expectit "Guess this kind of grass doesn't mind the wet environment." + +send "look mud\n" +expectit "Pretty brown and sticky." + +send "hut\n" +expectit "the hut scurries away" + +send "use 1-rope\n" +expectit "Something tells you that the rope won't last for long." + +send "look\n" +expectit "A pissed-off looking" + +send "look hut\n" +expectit "straining at its bonds" + +send "hut\n" +expectit "The door, and its landing, are still too high and out of reach" + +# Let's wait to make sure that the hut eventually breaks free ... +puts "Waiting for the hut to break free of its bonds..." +set timeout 90 +expectit "The hut, straining against its bounds, finally breaks free" +set timeout 30 + +send "say Hello there, big bird.\n" +expectit "heron" + +send "get heron\n" +expectit "flies out of reach" + +send "look reeds\n" +expectit "Extremely tall, white reeds tipped with white gooey clumps." + +send "get reeds\n" +expectit "You pluck and shape a ten-foot pole from a marsh reed" + +# send "look\n" +# dont_expect "You notice" "pixie dust" + +send "use rope on hut\n" +expectit "Something tells you that the rope won't last for long." + +send "hut\n" +expectit "Homey Hut" + +dont_expect "You notice" "skull" + +send "look skull\n" +expectit "Painted with arcane symbols, a wolf skull sports" + +send "look\n" +expect -re "You notice.*skull" + +send "get skull\n" +expectit "It appears firmly attached to the wall where it hangs." + +dont_expect "You notice" "carving" + +send "look carving\n" +expectit "the carving shows exquisite craftsmanship and artistry" + +send "look\n" +expect -re "You notice.*carving" + +send "get carving\n" +expectit "As you reach for the carving, it promptly runs away." + +dont_expect "You notice" "reed" + +send "look reed\n" +expectit "twisted and shaped in a six-spoke star" + +send "look\n" +expect -re "You notice.*reed" + +send "get sculpture\n" +expectit "It appears firmly attached to the wall where it hangs." + +send "get torch\n" +expectit "You take a torch from the bucket." + +send "inv\n" +expectit "Made from marsh grass" + +puts "Waiting for Trampolina to sweep us out the door..." +set timeout 240 +# expectit "grabs her broom and with a sweeping motion" +expectit "Mellow Marsh" +set timeout 20 + +send "north\n" +expectit "Frog Meadow" + +send "west\n" +expectit "Grove of the Matriarchs" + +send "south\n" +expectit "Lazy Dock" + +send "look chair\n" +expectit "A cushioned wood chair of craftsmanship" + +send "sit\n" +expectit "You sit on the chair." + +send "stand\n" +expectit "You stand up" + +send "get chair\n" +expectit "way too heavy for you to lift." + +send "get pole\n" +expectit "You pick up a fishing pole." + +send "cast\n" +expectit "You cast" + +send "reel\n" +# Too many messages to expect. + +send "drop fishing pole\n" +expectit "You drop a fishing pole." + +send "look sign\n" +expectit "You see a wood sign tied with a rope around the back of the chair" + +send "read sign\n" +expectit "Fish at your own annoyance. Please return pole when finished." + +send "get sign\n" +expectit "This granny knot" + +send "hint\n" +expectit "Docks are good" +send "hint fishing\n" +expectit "If you dare catch" +send "hint fish\n" +expectit "You can get rid of obnoxious fish" +send "hint boat\n" +expectit "A magical boat appears here" +send "hint call\n" +expectit "To call the boat" +send "hint swamp\n" +expectit "I think the swamp is called" +send "hint horn\n" +expectit "The mystical south wind gathers the mystical mist from the sea" + +send "north\n" +expectit "Grove of the Matriarchs" + +send "look west\n" +expectit "A footpath winds between the roots of a tree." + +send "west\n" +expectit "Grotto" + +send "look east\n" +expectit "A winding footpath leads through the forest of giant trees." + +send "look tree\n" +expectit "The trees in this forest are massive, but a smaller tree has a red door." + +send "look bridge\n" +expectit "bridge leads over a tiny stream" + +send "look cabbage\n" +expectit "Large glossy green leaves with big yellow flowers that looks like cobras in drag" + +send "look ferns\n" +expectit "Mostly sword ferns interrupted by Maiden Hair ferns that sing to the stream." + +send "pick berries\n" +expectit "You pick" + +send "eat berry\n" + +send "get berry\n" +expectit "You pick" + +send "eat berry\n" + +send "knock\n" +expectit "You grab the ring" + +send "get ring\n" +expectit "From whom do you want to get this ring?" + +send "get ring from knocker\n" +expectit "You take brass ring from knocker." + +send "say Give me a hint, please.\n" +expectit "A hint does sound fair." + +send "say Is the answer, whiskey?\n" + +send "give ring to knocker\n" +expectit "You give a brass ring to knocker." + +send "hint\n" +expectit "So try to talk to it." + +send "inside\n" +expectit "Cozy House" + +expectit "Oddly angled shelves with books and knickknackery" + +send "look tapestry\n" +expectit "The muted colors of the tapestry" + +send "look man\n" +expectit "The old man in the" + +send "look rose\n" +expectit "The rose in both scenes" + +send "look queen\n" +expectit "The beautiful queen shown in the second scene" + +send "look paper\n" +expectit "The paper with a gold seal" + +send "look trees\n" +expectit "The trees shown in the third and fourth scenes" + +send "look whispering\n" +expectit "This curious aspect" + +send "look trinkets\n" + +send "look books\n" +expectit "Books of different sizes and colors." + +send "look book\n" +expect -re "You see.*book" + +send "get book\n" +expectit "You pick up the book." + +send "read book\n" +expect -re "You.*open your book" + +send "drop book\n" +expectit "flies" + +send "sit\n" +expectit "You sit in the few overstuffed chairs." + +send "hint\n" +expectit "You are in a cozy and casual place" + +send "pet beastie\n" +expectit "While it doesn't stop" + +send "kitchen\n" +expectit "Cramped Kitchen" + +send "look scones\n" +expectit "look tempting" + +send "get scone\n" +expect -re "You get.*scone" + +send "eat scone\n" +# Too much variableness here. +# expectit "You" + +send "make green\n" +expectit "You make a teapot" + +send "pour tea\n" +expectit "Command 'pour tea' is not available." + +send "get teacup\n" +expectit "You pick up a teacup." + +send "look teacup\n" +expectit "Teacup" + +send "pour tea\n" +expect -re "You pour some.*cup" + +send "drink tea\n" +expect -re "You.*cup" + +send "pour tea\n" +expect -re "You empty your teacup" + +send "hint\n" +expectit "Grab yourself some breakfast" + # Close the log file log_file diff --git a/world/version1.ev b/world/version1.ev index ff26103..6dbd3bb 100644 --- a/world/version1.ev +++ b/world/version1.ev @@ -1,9 +1,11 @@ # Create an Avatar +# The first character is special, as it can really /own/ the server. I don’t use it except to build the world, otherwise, I will puppet a creation. + # An avatar in the original sense of a housing for a god-like entity. # [[file:../../../projects/mud.org::*Create an Avatar][Create an Avatar:1]] -@name self = The Avatar;avatar +@name self = Avatar # Create an Avatar:1 ends here # [[file:../../../projects/mud.org::*Create an Avatar][Create an Avatar:2]] @@ -11,7 +13,7 @@ # Create an Avatar:2 ends here # [[file:../../../projects/mud.org::*Create an Avatar][Create an Avatar:3]] -@sdesc glowing, angelic being +@sdesc angelic being # Create an Avatar:3 ends here @@ -26,7 +28,7 @@ pose looking awesome # Create an Avatar:4 ends here # The Forest -# Rename the Limbo (or starting place) with the name *Forest*. Note the term =mp01= as a global label that matches my map. +# Rename the Limbo (or starting place) with the name *Grove of the Matriarchs*. Note the term =mp01= as a global label that matches my map. My original term for “forest” is too general, as it sounds like the place should be /named/ with some sort of title. # [[file:../../../projects/mud.org::*The Forest][The Forest:1]] @@ -46,9 +48,9 @@ pose looking awesome # Need to add weather and time data to this: -# [[file:../../../projects/mud.org::*The Forest][The Forest:3]] +# [[file:../../../projects/mud.org::*The Forest][The Forest:4]] @update here = typeclasses.rooms_weather.TimeWeatherRoom -# The Forest:3 ends here +# The Forest:4 ends here @@ -56,45 +58,45 @@ pose looking awesome # Describe the trees: -# [[file:../../../projects/mud.org::*The Forest][The Forest:4]] +# [[file:../../../projects/mud.org::*The Forest][The Forest:5]] @detail tree;trees = You feel dwarfed by colossal trees whose moss-covered roots are difficult to peer over. An occassional breeze often smells of flowers and other times earthy. While the leafy canopy hides the sky, you certainly can |wfeel|n the weather. -# The Forest:4 ends here +# The Forest:5 ends here # And the flowers: -# [[file:../../../projects/mud.org::*The Forest][The Forest:5]] +# [[file:../../../projects/mud.org::*The Forest][The Forest:6]] @detail flower;flowers = Beautiful, but giant flowers look down on you and nod a friendly greeting. -# The Forest:5 ends here +# The Forest:6 ends here -# Puddles +# Puddle # With my name, I need to have an object to go with it. -# [[file:../../../projects/mud.org::*Puddles][Puddles:1]] +# [[file:../../../projects/mud.org::*Puddle][Puddle:1]] @create/drop puddle : typeclasses.things.Puddle -# Puddles:1 ends here +# Puddle:1 ends here # And an elusive description: -# [[file:../../../projects/mud.org::*Puddles][Puddles:2]] -@desc puddle = A large puddle, formed from a recent rain shower, invites you to shed your years and jump in and splash around to reconnect with your youth. -# Puddles:2 ends here +# [[file:../../../projects/mud.org::*Puddle][Puddle:2]] +@desc puddle = A large puddle, formed from a recent rain shower, invites you to shed your years and |gjump|n in and splash around to reconnect with your youth. +# Puddle:2 ends here # And keep it locked down: -# [[file:../../../projects/mud.org::*Puddles][Puddles:3]] +# [[file:../../../projects/mud.org::*Puddle][Puddle:3]] @lock puddle = get:false() # @set puddle/get_err_msg = "As the water slips through your fingers, you realize the apt metaphor of attempting to grasp at your youth." -# Puddles:3 ends here +# Puddle:3 ends here # Sticks # I will have a script auto generate the sticks on a regular basis, but for now, let’s just make one that I can drop. @@ -127,7 +129,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # [[file:../../../projects/mud.org::*Guest Book][Guest Book:2]] -@desc guest book = The root from one of the colossal trees has erupted from the ground, forming a dry alcove that harbors a colony of mushroom caps. Jauntily perched on the largest of these, a leather-bound book, sports the title, |wGuest Book|n. Next to it, a feather quill and an ink well invite you to read the register, and leave a note for other travelers. +@desc guest book = The root from one of the colossal |Ytrees|n has erupted from the ground, forming a dry alcove that harbors a colony of mushroom caps. Jauntily perched on the largest of these, a leather-bound book, sports the title, |wGuest Book|n. Next to it, a feather |Yquill|n and an |Yink|n |Ywell|n invite you to read the register, and |gwrite|n a note for other travelers. # Guest Book:2 ends here @@ -151,7 +153,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # @detail ink = Black, like the ichor of the gods ... or perhaps, someone just started a squid. # -@detail well = The well appears to be little more than a depression on the back of the mushroom's cap. +@detail well;ink well = The well appears to be little more than a depression on the back of the mushroom's cap. # Guest Book:4 ends here # Boulder @@ -191,7 +193,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # [[file:../../../projects/mud.org::*Boulder][Boulder:5]] -@dig Boulder Top;mp02 : typeclasses.rooms_weather.TimeWeatherRoom = boulder;climb,climb down;climb;down +@dig Boulder Top;mp02 : typeclasses.rooms_weather.TimeWeatherRoom = climb boulder;boulder;climb,climb down;climb;down # Boulder:5 ends here @@ -217,7 +219,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # And give it some aliases: # [[file:../../../projects/mud.org::*Boulder][Boulder:8]] -@name boulder = climb the boulder;boulder;climb;climb up +@name boulder = climb the boulder;boulder;climb;climb up;climb boulder # Boulder:8 ends here @@ -228,42 +230,53 @@ py timed_script = evennia.create_script(key="Create Sticks", @set boulder/traverse_msg = "You grab hold of some the |Yvines|n and ivy and pick your way up the boulder from one hold to another... Hrm, these vines would make a great rope." # Boulder:9 ends here - - +# Lower Vines # In case they attempt to get vines here: # Let’s make a nice spot to sit down on: -# [[file:../../../projects/mud.org::*Boulder][Boulder:10]] +# [[file:../../../projects/mud.org::*Lower Vines][Lower Vines:1]] @create/drop dangling vines;vines;vine -# Boulder:10 ends here +# Lower Vines:1 ends here + # With a nice description: -# [[file:../../../projects/mud.org::*Boulder][Boulder:11]] +# [[file:../../../projects/mud.org::*Lower Vines][Lower Vines:2]] @desc vines = Strong vines twisted to look like rope. This could be helpful. -# Boulder:11 ends here +# Lower Vines:2 ends here # Can’t take it here, you have to climb the boulder first: -# [[file:../../../projects/mud.org::*Boulder][Boulder:12]] +# [[file:../../../projects/mud.org::*Lower Vines][Lower Vines:3]] @lock vines = get:false() # @set vines/get_err_msg = "The vines are too strong to break or cut. Perhaps they could be detached from the top of the |Yboulder|n?" -# Boulder:12 ends here +# Lower Vines:3 ends here # Can we hide it too? -# [[file:../../../projects/mud.org::*Boulder][Boulder:13]] +# [[file:../../../projects/mud.org::*Lower Vines][Lower Vines:4]] @lock vines = view:tag(hidden_vines) # @set vines/hidden_tag = "hidden_vines" -# Boulder:13 ends here +# Lower Vines:4 ends here + + + +# What about pushing and pulling messages? + + +# [[file:../../../projects/mud.org::*Lower Vines][Lower Vines:5]] +@set vines/pull_msg = "You pull the vines, but don't let go. Perhaps you could detach them if you were on |wtop|n of the |Yboulder|n?" +# +@set vines/push_msg = "That doesn't seem to do much." +# Lower Vines:5 ends here # Top of Boulder @@ -277,148 +290,205 @@ py timed_script = evennia.create_script(key="Create Sticks", # And the description: -# [[file:../../../projects/mud.org::*Top of Boulder][Top of Boulder:2]] +# [[file:../../../projects/mud.org::*Top of Boulder][Top of Boulder:3]] @desc here = While high, the |Ytrees|n still tower over you. Still, a nice view. Lots of patches of |Ymoss|n to |gsit|n down and relax. -# Top of Boulder:2 ends here +# Top of Boulder:3 ends here # More details: -# [[file:../../../projects/mud.org::*Top of Boulder][Top of Boulder:3]] +# [[file:../../../projects/mud.org::*Top of Boulder][Top of Boulder:4]] @detail tree;trees = You feel dwarfed by colossal trees whose moss-covered roots are difficult to peer over. An occassional breeze often smells of flowers and other times earthy. While the leafy canopy hides the sky, you certainly can |wfeel|n the weather. -# Top of Boulder:3 ends here +# Top of Boulder:4 ends here # Describe the climb down: -# [[file:../../../projects/mud.org::*Top of Boulder][Top of Boulder:4]] +# [[file:../../../projects/mud.org::*Top of Boulder][Top of Boulder:5]] @name climb = climb down;climb;down -# Top of Boulder:4 ends here +# Top of Boulder:5 ends here + # And a description of the climb: -# [[file:../../../projects/mud.org::*Top of Boulder][Top of Boulder:5]] -@desc climb = The climb seemed easy, but you're not sure you can handle the footholds going the other way around. -# Top of Boulder:5 ends here - - -# And describe the journey: - # [[file:../../../projects/mud.org::*Top of Boulder][Top of Boulder:6]] -@set climb/traverse_msg = "You crawl backwards, feeling with your foot for a hold. Got it! Then another one...hoping the vines and the moss' rhizoids hold..." +@desc climb = The climb seemed easy, but you're not sure you can handle the footholds going the other way around. # Top of Boulder:6 ends here -# Let’s make a nice spot to sit down on: +# And describe the journey: # [[file:../../../projects/mud.org::*Top of Boulder][Top of Boulder:7]] -@create/drop patch of moss;moss:typeclasses.sittables.Sittable +@set climb/traverse_msg = "You crawl backwards, feeling with your foot for a hold. Got it! Then another one...hoping the vines and the moss' rhizoids hold..." # Top of Boulder:7 ends here +# Moss +# Let’s make a nice spot to sit down on: + +# [[file:../../../projects/mud.org::*Moss][Moss:1]] +@create/drop patch of moss;moss:typeclasses.sittables.Sittable +# Moss:1 ends here + + # With a nice description: -# [[file:../../../projects/mud.org::*Top of Boulder][Top of Boulder:8]] +# [[file:../../../projects/mud.org::*Moss][Moss:2]] @desc patch of moss = A cushioned patch of moss of the most vibrant green. -# Top of Boulder:8 ends here +# Moss:2 ends here # Can’t take the moss with you: -# [[file:../../../projects/mud.org::*Top of Boulder][Top of Boulder:9]] +# [[file:../../../projects/mud.org::*Moss][Moss:3]] @lock patch of moss = get:false() -# Top of Boulder:9 ends here +# Moss:3 ends here # Can we hide it too? -# [[file:../../../projects/mud.org::*Top of Boulder][Top of Boulder:10]] +# [[file:../../../projects/mud.org::*Moss][Moss:4]] @lock patch of moss = view:tag(hidden_moss) # @set patch of moss/hidden_tag = "hidden_moss" -# Top of Boulder:10 ends here +# Moss:4 ends here # And a lovely message about why you can’t steal moss: -# [[file:../../../projects/mud.org::*Top of Boulder][Top of Boulder:11]] +# [[file:../../../projects/mud.org::*Moss][Moss:5]] @set moss/get_err_msg = "The moss is a bryophyte, and as such, has attached itself to boulder by rhizoids, which are one cell thick root structures. While this helps with water absorption, you didn't think you were going to get a biology lesson, did you? tl;dr You can't get it." -# Top of Boulder:11 ends here +# Moss:5 ends here -# Vines + + +# Is /pulling/ on moss the same as attempting to =get= it? + + +# [[file:../../../projects/mud.org::*Moss][Moss:6]] +@set moss/pull_msg = "The moss is a bryophyte, and as such, has attached itself firmly to boulder by rhizoids. So pulling on it doesn't do much good." +# Moss:6 ends here + +# Upper Vines # Let’s cover top of the boulder with rope-like vines. The vine can be a [[file:~/src/moss-n-puddles/typeclasses/consumables.py::class Producer(Object):][producer]] that makes ropes … needed to get into the hut. -# [[file:../../../projects/mud.org::*Vines][Vines:1]] +# [[file:../../../projects/mud.org::*Upper Vines][Upper Vines:1]] @teleport mp02 # @create/drop lot of vines;vine;rope: typeclasses.consumables.Producer -# Vines:1 ends here +# Upper Vines:1 ends here # With a description: -# [[file:../../../projects/mud.org::*Vines][Vines:2]] +# [[file:../../../projects/mud.org::*Upper Vines][Upper Vines:2]] @desc vines = While difficult to cut, the study and tough vines are easy to pull from this point on the boulder. You could probably make a sturdy rope from them. -# Vines:2 ends here +# Upper Vines:2 ends here # We have to have the vines describe what it /makes/: -# [[file:../../../projects/mud.org::*Vines][Vines:3]] +# [[file:../../../projects/mud.org::*Upper Vines][Upper Vines:3]] @set vines/make_name = "coil of rope" -# Vines:3 ends here +# Upper Vines:3 ends here # And a verb when they /get/ the consumable: -# [[file:../../../projects/mud.org::*Vines][Vines:4]] +# [[file:../../../projects/mud.org::*Upper Vines][Upper Vines:4]] @set vines/make_verb = "$conj(yank) and $conj(shape) a" -# Vines:4 ends here +# Upper Vines:4 ends here # And a commentary: -# [[file:../../../projects/mud.org::*Vines][Vines:5]] +# [[file:../../../projects/mud.org::*Upper Vines][Upper Vines:5]] @set vines/make_note = " from the vines" -# Vines:5 ends here +# Upper Vines:5 ends here # This one is optional as it defaults to Consumable: -# [[file:../../../projects/mud.org::*Vines][Vines:6]] +# [[file:../../../projects/mud.org::*Upper Vines][Upper Vines:6]] @set vines/make_class = "typeclasses.things.Rope" -# Vines:6 ends here +# Upper Vines:6 ends here # And the vines needs to know the /description/ of the Consumable, so that it can attach that: -# [[file:../../../projects/mud.org::*Vines][Vines:7]] +# [[file:../../../projects/mud.org::*Upper Vines][Upper Vines:7]] @set vines/make_desc = "Made from vines, but could be a good lasso." -# Vines:7 ends here +# Upper Vines:7 ends here # How much is there when you pick them? -# [[file:../../../projects/mud.org::*Vines][Vines:8]] +# [[file:../../../projects/mud.org::*Upper Vines][Upper Vines:8]] @set vines/make_amount = 1 -# Vines:8 ends here +# Upper Vines:8 ends here + + + +# What if they do something other than =get= the vines? + + +# [[file:../../../projects/mud.org::*Upper Vines][Upper Vines:9]] +@set vines/pull_msg = "You pull the vines, and notice they detach easily from the rock. Perhaps you should |gget|n these and make something with them." +# +@set vines/push_msg = "You push the vines out of the way showing the rock boulder below. Perhaps you should |gget|n these and make something with them." +# Upper Vines:9 ends here + +# Gigglecap Mushrooms + +# Part of the [[Potions and their Ingredients][Alchemist Path]], we use /gigglecaps/ to create a [[Laughing Potion]]. + +# Note the Alchemist Tome: +# #+begin_quote +# Colorful gigglecaps prefer well drained locations to grow, like on the top of rock terrain. +# #+end_quote + +# And we create a /patch/ of them for the picking: + + +# [[file:../../../projects/mud.org::*Gigglecap Mushrooms][Gigglecap Mushrooms:1]] +# @teleport/quiet mp02 +# +@create/drop patch of mushrooms;mushrooms;mushroom: typeclasses.consumables.Producer +# +@desc mushrooms = A vibrant patch of mushrooms bursts forth like a painter's palette, each cap shimmering with iridescent hues of violet, emerald, and gold. Their delicate stems sway gently in the enchanted breeze...wait, you feel no breeze. They seem to be undulating with unheard laughter. +# +@set mushrooms/make_name = "gigglecap mushroom" +# +@set mushrooms/make_verb = "$conj(harvest) a" +# +@set mushrooms/make_class = "typeclasses.consumables.Edible" +# +@set mushrooms/make_desc = "A whimsical fungi emits a soft, melodic laughter when touched." +# +@set mushrooms/make_amount = 1 +# +@set mushrooms/make_spell_msgs = "10 ;; $You() $conj(<< giggle ^ chuckle ^ chortle >>) out loud." +# +# And we can't see them until we are an alchemist: +@lock mushrooms = view:tag(alchemist) +# Gigglecap Mushrooms:1 ends here # Field # To the east, let’s make a nice meadow. Start at the Forest: @@ -432,7 +502,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # And we use the =tunnel= command this time: # [[file:../../../projects/mud.org::*Field][Field:2]] -@dig Frog Meadow;mp05 : typeclasses.rooms_weather.TimeWeatherRoom = east;e;path;footpath,footpath;west;w;path +@dig Frog Meadow;mp05 : typeclasses.rooms_weather.TimeWeatherRoom = east footpath to meadow;east;e;path;footpath,west footpath to forest;footpath;west;w;path # Field:2 ends here @@ -465,7 +535,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # [[file:../../../projects/mud.org::*Field][Field:6]] -@desc here = A large |Ywaterfall|n cascades on the far side of this meadow creating a |Ystream|n that meanders through the tall grass and large yellow flowers. They nod their sleepy heads to you as you pass by in the darkening twilightawakening dawnlazy afternoondark night. A gap in the trees show how you can return to the footpath in the forest. +@desc here = A large |Ywaterfall|n cascades on the far side of this meadow creating a |Ystream|n that meanders through the tall grass and large yellow |Yflowers|n. They nod their sleepy heads to you as you pass by in the darkening twilightawakening dawnlazy afternoondark night. A gap in the trees show how you can return to the footpath in the forest. # Field:6 ends here @@ -500,6 +570,8 @@ py timed_script = evennia.create_script(key="Create Sticks", # [[file:../../../projects/mud.org::*Field][Field:10]] @detail frog;frogs = Cute little guys with their big black eyes and tiny gold crowns. Too quick to catch. +# +@detail flowers;yellow flowers = "Aren't daffodils just flowers with big ol' schnozzes?" # Field:10 ends here # Waterfall @@ -528,9 +600,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # Looking at the waterfall, shows the cave entrance: # [[file:../../../projects/mud.org::*Waterfall][Waterfall:4]] -@set waterfall/hidden_tag = "hidden_cave" -# -@set waterfall/hidden_tag = "hidden_waterfall" +@set waterfall/hidden_tag = "hidden_cave;hidden_waterfall" # @lock waterfall = view:tag(hidden_waterfall) # Waterfall:4 ends here @@ -539,6 +609,61 @@ py timed_script = evennia.create_script(key="Create Sticks", @detail pool = A pool of cool, clear water. # Waterfall:5 ends here +# Fizzy Water +# The waterfall causes the water in the stream to be /fizzy/, to be part of the [[Potions and their Ingredients][Alchemist Path]] to create a [[Laughing Potion]]. + + +# [[file:../../../projects/mud.org::*Fizzy Water][Fizzy Water:1]] +# @teleport/quiet mp05 +# +@create/drop stream;water: typeclasses.drinkables.Water +# +@desc stream = A slow-moving stream meanders like a snake in the grassy field. The water, fizzy with bubbles from the waterfall torrent, creates an efforvesent aroma. Little green |Yfrogs|n cling to grass stems hanging over the sparkling water. +# +@lock stream = get:false() +# +@set stream/get_err_msg = "Seriously? You can't get that. Perhaps you can |gfill|n a |gbottle|n, or at least a cup, could hold the fizzy water." +# +@set stream/fill_name = "fizzy water" +# +@set stream/fill_desc = "sparkling water from waterfall turbulence." +# +@set stream/fill_msgs = ["$You() $conj(<< get ^ kneel >>) down, and $conj(fill) $pron(your) {2} with sparkling efforvesence.", "$You() $conj(<< get ^ kneel >>) down, and $conj(put) $pron(your) {2} in the cool water, filling it."] +# Fizzy Water:1 ends here + +# Tickleweed + +# Part of the [[Potions and their Ingredients][Alchemist Path]], we use /tickleweed grass/ to create a [[Laughing Potion]]. + +# We put this location hint in the Alchemy Tome: +# #+begin_quote +# A purple grass, often called tickleweed since it vibrates as if laughing. The herb hunter canfind this in fields and meadows throughout the area. +# #+end_quote + +# And we create it: + + +# [[file:../../../projects/mud.org::*Tickleweed][Tickleweed:1]] +# @teleport/quiet mp05 +# +@create/drop patch of tickleweed;tickleweed: typeclasses.consumables.Producer +# +@desc tickleweed = Patches of this vivid grass vibrates as if giggling. +# +@set tickleweed/make_name = "bunch of tickleweed" +# +@set tickleweed/make_verb = "$conj(harvest) a" +# +@set tickleweed/make_class = "typeclasses.consumables.Herb" +# +@set tickleweed/make_desc = "This grass vibrates as if giggling." +# +@set tickleweed/make_amount = 1 +# +# And we can't see them until we are an alchemist: +@lock tickleweed = view:tag(alchemist) +# Tickleweed:1 ends here + # The Lair of the Beast # To create a place for our big, hairy beast to sleep, first jump to the Meadow: @@ -551,7 +676,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # From the Meadow, we create a lair /behind/ the water. # [[file:../../../projects/mud.org::*The Lair of the Beast][The Lair of the Beast:2]] -@dig Lair;mp07 = cave entrance;cave;inside,outside;leave +@dig Lair;mp07 = cave entrance;cave;lair;inside,outside;leave;meadow # The Lair of the Beast:2 ends here @@ -616,38 +741,46 @@ py timed_script = evennia.create_script(key="Create Sticks", @set leave/traverse_msg = "You leave the dark cave and pass behind the waterfall for the meadow beyond." # The Lair of the Beast:9 ends here +# Mattress +# Create a mattress you can sit on (and maybe /push/ to get to a secret door): -# And a description of the mattress you can sit on: - - -# [[file:../../../projects/mud.org::*The Lair of the Beast][The Lair of the Beast:10]] +# [[file:../../../projects/mud.org::*Mattress][Mattress:1]] @create/drop mattress:typeclasses.sittables.Sittables -# The Lair of the Beast:10 ends here +# Mattress:1 ends here # And the description: -# [[file:../../../projects/mud.org::*The Lair of the Beast][The Lair of the Beast:11]] -@desc mattress = Looks comfortable, albeit tall, but it does not smell very good. -# The Lair of the Beast:11 ends here +# [[file:../../../projects/mud.org::*Mattress][Mattress:2]] +@desc mattress = Looks comfortable, albeit tall, but it does not smell very good. Perhaps that is due to the |Ymushrooms|n surrounding its base? +# Mattress:2 ends here + + + +# And a /detail/ of the mushrooms that may show if are not an alchemist: + + +# [[file:../../../projects/mud.org::*Mattress][Mattress:3]] +@detail mushrooms;fungus = Slender blue tendrils of a fungus encircle the base of the mattress. Subtle white dots on the cap suggests caution. +# Mattress:3 ends here # Can’t steal ‘it: -# [[file:../../../projects/mud.org::*The Lair of the Beast][The Lair of the Beast:12]] +# [[file:../../../projects/mud.org::*Mattress][Mattress:4]] @lock mattress = get:false() # @set mattress/get_err_msg = "It's way too heavy for you to lift." -# The Lair of the Beast:12 ends here +# Mattress:4 ends here # And textual descriptions the object can use: -# [[file:../../../projects/mud.org::*The Lair of the Beast][The Lair of the Beast:13]] +# [[file:../../../projects/mud.org::*Mattress][Mattress:5]] @set mattress/adjective = "on" # @set mattress/article = "the" @@ -655,18 +788,49 @@ py timed_script = evennia.create_script(key="Create Sticks", @set mattress/singular = "the mattress" # @set mattress/extra = "This feels << ^ very ^ quite>> <>.|n" -# The Lair of the Beast:13 ends here +# Mattress:5 ends here # And a trim on the things to see: -# [[file:../../../projects/mud.org::*The Lair of the Beast][The Lair of the Beast:14]] +# [[file:../../../projects/mud.org::*Mattress][Mattress:6]] @lock mattress = view:tag(hidden_mattress) # @set mattress/hidden_tag = "hidden_mattress" -# The Lair of the Beast:14 ends here +# Mattress:6 ends here + +# Dream Mushrooms +# Part of the [[Potions and their Ingredients][Alchemist Path]], we use /dream mushrooms/ to create a [[Trippy Potion]]. + +# #+begin_quote +# Dreamshade mushrooms feed on floating dreams, and often congregate where dreamers sleep. +# #+end_quote + + +# [[file:../../../projects/mud.org::*Dream Mushrooms][Dream Mushrooms:1]] +# @teleport/quiet mp07 +# +@create/drop cluster of mushrooms;mushroom;mushrooms: typeclasses.consumables.Producer +# +@desc mushrooms = Slender blue tendrils of a fungus encircle the base of the mattress. You note that these look like the |wDreamshade mushrooms|n mentioned in the |wAlchemy Lab|n. +# +@set mushrooms/make_name = "sack of mushrooms" +# +@set mushrooms/make_verb = "$conj(collect) and $conj(fill) a" +# +@set mushrooms/make_class = "typeclasses.consumables.Edible" +# +@set mushrooms/make_desc = "Small collection of slender, blue mushrooms." +# +@set mushrooms/make_amount = 1 +# +@set mushrooms/make_spell_msgs = "10 ;; $You() $conj(nod) off, as $pron(your) head bobbles and bounces. ;; 5 ;; $You() $conj(awaken) with a start." +# +# And we can't see them "fully" until we are an alchemist: +@lock mushrooms = view:tag(alchemist) +# Dream Mushrooms:1 ends here # Beast # And we create the Big, Hairy Beast: @@ -868,12 +1032,11 @@ py timed_script = evennia.create_script(key="Create Sticks", # [[file:../../../projects/mud.org::*Mellow Marsh][Mellow Marsh:1]] @teleport mp05 # -@dig Mellow Marsh;mp08 :typeclasses.rooms_weather.TimeWeatherRoom = south to marsh;s,north to meadow;n +@dig Mellow Marsh;mp08 :typeclasses.rooms_weather.TimeWeatherRoom = south to marsh;south;marsh;s,north to meadow;n;north;meadow # Mellow Marsh:1 ends here -# Started with #279 # And =look south= should show: @@ -907,7 +1070,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # [[file:../../../projects/mud.org::*Mellow Marsh][Mellow Marsh:5]] -@desc/bound here = The river spreads into a muddy marsh full of |Ygrass|n and tall, white-topped |Yreeds|n. Colorful |Ybirds|n in the sparse tree surrounding the marsh yell out a loud chorus. Purple herons and other marsh |Ybirds|n hunt in the tall swamp grass. Glowing |Yfireflies|n create a synchronized light show over the swamp grass in the deepening dusk. Giant pink and purple |Ymoths|n flutter over the dark flowers.|/|/A pissed-off looking |Yhut|n, with its lasso'd stilt-like legs, struggles against its bounds in middle of the slough. +@desc/bound here = The river spreads into a muddy marsh full of |Ygrass|n and tall, white-topped |Yreeds|n. Colorful |Ybirds|n in the sparse tree surrounding the marsh yell out a loud chorus. Purple herons and other marsh |Ybirds|n hunt in the tall swamp grass. Glowing |Yfireflies|n create a synchronized light show over the swamp grass in the deepening dusk. Giant pink and purple |Ymoths|n flutter over the dark flowers.|/|/A pissed-off looking |Yhut|n, with its lasso'd stilt-like legs, struggles against its bounds in the middle of the slough. # Mellow Marsh:5 ends here @@ -961,63 +1124,6 @@ py timed_script = evennia.create_script(key="Create Sticks", @detail mud = Pretty brown and sticky. # Mellow Marsh:14 ends here -# Ten-foot Poles -# The reed can be a [[file:~/src/moss-n-puddles/typeclasses/consumables.py::class Producer(Object):][producer]] that makes ten foot poles … needed to get into the hut. - - -# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:1]] -@create/drop lot of tall white reeds;reeds: typeclasses.consumables.Producer -# Ten-foot Poles:1 ends here - - - -# With a description: - -# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:2]] -@desc reeds = Extremely tall, white reeds tipped with white gooey clumps. One could hazzard a guess that with a little manipulation, one could make something from them. -# Ten-foot Poles:2 ends here - - - -# We have to have the reeds describe what it /makes/: - -# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:3]] -@set reeds/make_name = "ten-foot pole" -# Ten-foot Poles:3 ends here - - - -# And a verb when they /get/ the consumable: - -# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:4]] -@set reeds/make_verb = "$conj(pluck) and $conj(shape) a" -# Ten-foot Poles:4 ends here - - - -# And a commentary: - - -# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:5]] -@set reeds/make_note = " from a marsh reed." -# Ten-foot Poles:5 ends here - - - -# And the reeds needs to know the /description/ of the Consumable, so that it can attach that: - -# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:7]] -@set reeds/make_desc = "A long pole shaved from a marsh reed." -# Ten-foot Poles:7 ends here - - - -# How much is there when you pick them? - -# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:8]] -@set reeds/make_amount = 1 -# Ten-foot Poles:8 ends here - # Purple Heron # Create a puppet of the bird hunting frogs and pixies. :-D @@ -1108,13 +1214,102 @@ py timed_script = evennia.create_script(key="Create Sticks", @script heron = typeclasses.scripts.Muttering # Purple Heron:9 ends here +# Ten-foot Poles +# The reed can be a [[file:~/src/moss-n-puddles/typeclasses/consumables.py::class Producer(Object):][producer]] that makes ten foot poles … needed to get into the hut. + + +# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:1]] +@create/drop lot of tall reeds;tall reeds;reeds: typeclasses.consumables.Producer +# Ten-foot Poles:1 ends here + + + +# With a description: + +# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:2]] +@desc reeds = Extremely tall, white reeds tipped with white gooey clumps. One could hazzard a guess that with a little manipulation, one could make something from them. +# Ten-foot Poles:2 ends here + + + +# We have to have the reeds describe what it /makes/: + +# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:3]] +@set reeds/make_name = "ten-foot pole" +# Ten-foot Poles:3 ends here + + + +# And a verb when they /get/ the consumable: + +# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:4]] +@set reeds/make_verb = "$conj(pluck) and $conj(shape) a" +# Ten-foot Poles:4 ends here + + + +# And a commentary: + + +# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:5]] +@set reeds/make_note = " from a marsh reed." +# Ten-foot Poles:5 ends here + + + +# And the reeds needs to know the /description/ of the Consumable, so that it can attach that: + +# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:7]] +@set reeds/make_desc = "A long pole shaved from a marsh reed." +# Ten-foot Poles:7 ends here + + + +# How much is there when you pick them? + +# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:8]] +@set reeds/make_amount = 1 +# Ten-foot Poles:8 ends here + +# Pixie Dust +# Part of the [[Potions and their Ingredients][Alchemist Path]], we use /pixie dust/ to create a [[Trippy Potion]]. + +# We put this quote in the book: +# #+begin_quote +# I’ve noticed Pixies often dance in the marshlands to the East, but are often invisible except in the evenings. I’ve attempted to discuss a trade for pixie dust, but often luck out as they often pay more attention to their choreography than any trinkets I could produce. +# #+end_quote + +# And create it here in the Marsh: + + +# [[file:../../../projects/mud.org::*Pixie Dust][Pixie Dust:1]] +# @teleport/quiet mp08 +# +@create/drop patch of glitter;pixie dust;dust: typeclasses.consumables.Producer +# +@desc pixie dust = As you look at reeds and marsh grass, you notice the shiny glitter is actually dander from pixies... pixie dust. With a little effort, you could gather a small sack of it. +# +@set pixie dust/make_name = "sack of pixie dust" +# +@set pixie dust/make_verb = "$conj(collect) and $conj(fill) a" +# +@set pixie dust/make_class = "typeclasses.objects.Object" +# +@set pixie dust/make_desc = "Small bag of the good, shiny stuff." +# +@set pixie dust/make_amount = 1 +# +# And we can't see them until we are an alchemist: +@lock pixie dust = view:tag(alchemist) +# Pixie Dust:1 ends here + # Trampoli’s Hut on Stilts # [[file:../../../projects/mud.org::*Trampoli’s Hut on Stilts][Trampoli’s Hut on Stilts:1]] @teleport mp08 # -@dig Homey Hut;mp09 = hut on stilts,leave;outside;marsh +@dig Homey Hut;mp09 = hut on stilts;hut,leave;outside;marsh # Trampoli’s Hut on Stilts:1 ends here @@ -1247,16 +1442,19 @@ py timed_script = evennia.create_script(key="Create Sticks", @detail jars = Sealed jars of fruits, vegetables, herbs and spices. # Inside Trampoli’s Hut:5 ends here -# [[file:../../../projects/mud.org::*Inside Trampoli’s Hut][Inside Trampoli’s Hut:6]] -@detail talismans = A wood |Ycarving|n, a painted |Yskull|n, and curiously shaped |Ysculpture|n made from bundles of reeds, give the impression of inducing luck while showing a level of respect for the land. -# Inside Trampoli’s Hut:6 ends here +# Talismans +# To give some character, we create some interesting art that decorates this hut. +# [[file:../../../projects/mud.org::*Talismans][Talismans:1]] +@detail talismans;talisman = A wood |Ycarving|n, a painted |Yskull|n, and curiously shaped |Ysculpture|n made from bundles of reeds, give the impression of inducing luck while showing a level of respect for the land. +# Talismans:1 ends here +# Horned Wolf Skull # For each talisman, we could create an object, but it wouldn’t be able to be taken, and instead of “can’t find skull”, we could give a better error message. -# [[file:../../../projects/mud.org::*Inside Trampoli’s Hut][Inside Trampoli’s Hut:7]] +# [[file:../../../projects/mud.org::*Horned Wolf Skull][Horned Wolf Skull:1]] @create/drop painted skull #ve @desc skull = Painted with arcane symbols, a wolf skull sports curving, corrugated goat horns. @@ -1268,14 +1466,13 @@ py timed_script = evennia.create_script(key="Create Sticks", @set skull/hidden_tag = "hidden_skull" # @lock skull = view:tag(hidden_skull) -# Inside Trampoli’s Hut:7 ends here +# Horned Wolf Skull:1 ends here + +# Demon Carving +# Perhaps the carving is actually the maid or something that could give hints. - -# Perhaps the carving is actually the maid. - - -# [[file:../../../projects/mud.org::*Inside Trampoli’s Hut][Inside Trampoli’s Hut:8]] +# [[file:../../../projects/mud.org::*Demon Carving][Demon Carving:1]] @create/drop wood carving;carvings;daemon;imp # @desc carving = While rustic, the carving shows exquisite craftsmanship and artistry in its rendering of an daemon creature, less sinister and more impish. @@ -1289,15 +1486,14 @@ py timed_script = evennia.create_script(key="Create Sticks", @set carving/hidden_tag = "hidden_carving" # @lock carving = view:tag(hidden_carving) -# Inside Trampoli’s Hut:8 ends here - - +# Demon Carving:1 ends here +# Reed Sculpture # The reeds should give a subtle hint to something that could be /spoken/ aloud. -# [[file:../../../projects/mud.org::*Inside Trampoli’s Hut][Inside Trampoli’s Hut:9]] -@create/drop reed sculpture +# [[file:../../../projects/mud.org::*Reed Sculpture][Reed Sculpture:1]] +@create/drop reed sculpture;reed;sculpture # @desc reed = The reed bundle, twisted and shaped in a six-spoke star, sports a blue tie. # @@ -1310,21 +1506,21 @@ py timed_script = evennia.create_script(key="Create Sticks", @set reed/hidden_tag = "hidden_reed" # @lock reed = view:tag(hidden_reed) -# Inside Trampoli’s Hut:9 ends here +# Reed Sculpture:1 ends here # The primary treasure is the horn. Anyone can acquire it, and keep it as a way to control the Leaf Boat. We generate them every 4 hours: -# [[file:../../../projects/mud.org::*Inside Trampoli’s Hut][Inside Trampoli’s Hut:10]] +# [[file:../../../projects/mud.org::*Reed Sculpture][Reed Sculpture:3]] py timed_script = evennia.create_script(key="Create Horns", typeclass='typeclasses.scripts.CreateHorns', interval=14400, start_delay=False, autostart=True, attributes=[("destination", here)] ) -# Inside Trampoli’s Hut:10 ends here +# Reed Sculpture:3 ends here # Torches # The reed can be a [[file:~/src/moss-n-puddles/typeclasses/consumables.py::class Producer(Object):][producer]] that makes ten foot poles … needed to get into the hut. @@ -1470,7 +1666,7 @@ py bt = self.search('old lady'); bt.db.pose = 'playing with a deck of cards' # And tunnel to the dock: # [[file:../../../projects/mud.org::*The Dock][The Dock:2]] -@dig Lazy Dock;mp06 :typeclasses.rooms_weather.TimeWeatherRoom = south;s,north;n;footpath +@dig Lazy Dock;mp06 :typeclasses.rooms_weather.TimeWeatherRoom = south to dock;south;s,north to forest;north;n;footpath # The Dock:2 ends here @@ -1555,11 +1751,9 @@ Someone has set a nice chair for viewing. # [[file:../../../projects/mud.org::*Chair][Chair:3]] @lock chair = get:false() -# Chair:3 ends here - -# [[file:../../../projects/mud.org::*Chair][Chair:4]] +# @set chair/get_err_msg = "It's way too heavy for you to lift." -# Chair:4 ends here +# Chair:3 ends here # Fishing Pole # It we are going to sit on a chair by the dock, why not go fishing? @@ -1595,40 +1789,39 @@ Someone has set a nice chair for viewing. @detail hook;bait = One of those shiny lures, made from gold coins. Curiouser. Seems you don't need to bait this hook. # Fishing Pole:5 ends here - - +# Sign # Need to make the fishing pole “stay” at the Dock. Maybe with a message about sticking around for the next person. -# [[file:../../../projects/mud.org::*Fishing Pole][Fishing Pole:6]] +# [[file:../../../projects/mud.org::*Sign][Sign:1]] @create/drop sign:typeclasses.readables.Readable -# Fishing Pole:6 ends here +# Sign:1 ends here # Should the description also be the message? -# [[file:../../../projects/mud.org::*Fishing Pole][Fishing Pole:7]] +# [[file:../../../projects/mud.org::*Sign][Sign:2]] @desc sign = You see a wood sign tied with a rope around the back of the chair. It reads, |wFish at your own annoyance. Please return pole when finished.|n -# Fishing Pole:7 ends here +# Sign:2 ends here # Might as well allow the user to read it: -# [[file:../../../projects/mud.org::*Fishing Pole][Fishing Pole:8]] +# [[file:../../../projects/mud.org::*Sign][Sign:3]] @set sign/inside = "Fish at your own annoyance. Please return pole when finished." -# Fishing Pole:8 ends here +# Sign:3 ends here # And lock down the sign: -# [[file:../../../projects/mud.org::*Fishing Pole][Fishing Pole:9]] +# [[file:../../../projects/mud.org::*Sign][Sign:4]] @lock sign = get:false() # @set sign/get_err_msg = "This granny knot holding the sign to the chair is serious. You can't take it." -# Fishing Pole:9 ends here +# Sign:4 ends here # Grotto @@ -1642,7 +1835,7 @@ Someone has set a nice chair for viewing. # Let’s travel west along the path in the forest: # [[file:../../../projects/mud.org::*Grotto][Grotto:2]] -@dig Grotto;mp04 :typeclasses.rooms_weather.TimeWeatherRoom = west;w,east;e;path;footpath +@dig Grotto;mp04 :typeclasses.rooms_weather.TimeWeatherRoom = west footpath;west;w,east footpath;east;e;path;footpath # Grotto:2 ends here @@ -1720,7 +1913,7 @@ Someone has set a nice chair for viewing. # [[file:../../../projects/mud.org::*Grotto][Grotto:11]] @detail cabbage;cabbages;skunk cabbage;skunk cabbages = Large glossy green leaves with big yellow flowers that looks like cobras in drag. They hiss as you cross the bridge. # -@detail fern;ferns = Mostly Sword ferns interrupted by Maiden Hair ferns that sing to the stream. +@detail fern;ferns = Mostly sword ferns interrupted by Maiden Hair ferns that sing to the stream. # Grotto:11 ends here # Berry Bush @@ -1811,6 +2004,28 @@ Someone has set a nice chair for viewing. #"Those were <>." # Berry Bush:12 ends here +# Spring Water +# Part of the [[Potions and their Ingredients][Alchemist Path]], we use spring water to create a [[Trippy Potion]]. + + +# [[file:../../../projects/mud.org::*Spring Water][Spring Water:1]] +# @teleport/quiet mp04 +# +@create/drop stream;water: typeclasses.drinkables.Water +# +@lock stream = get:false() +# +@set stream/get_err_msg = "Seriously? You can't get that. Perhaps a bottle, or at least a cup, could hold the fresh water." +# +@desc stream = A small stream, almost hidden behind the ferns and brambleberry bushes, drops down a lush hill, creating a lush, relaxing feeling. The water looks fresh and pure. +# +@set stream/fill_name = "still water" +# +@set stream/fill_desc = "fresh spring water." +# +@set stream/fill_msgs = ["$You() $conj(<< get ^ kneel >>) down, and $conj(fill) $pron(your) {2} with the << spring ^ fresh ^ refreshing >> water.", "$You() $conj(<< get ^ kneel >>) down, and $conj(put) $pron(your) {2} in the cool water, filling it."] +# Spring Water:1 ends here + # Knocker # The knocker has the ability to make the door “open” using [[https://www.evennia.com/docs/latest/api/evennia.objects.objects.html][on_traverse]] hooks? @@ -1842,107 +2057,107 @@ Someone has set a nice chair for viewing. -# Since we can remove the ring, let’s create it: - -# [[file:../../../projects/mud.org::*Knocker][Knocker:4]] -@create ring: typeclasses.things.Ring -# Knocker:4 ends here - - - -# And give it an alias: - -# [[file:../../../projects/mud.org::*Knocker][Knocker:5]] -@name ring = brass ring;ring -# Knocker:5 ends here - - - -# And a description: - -# [[file:../../../projects/mud.org::*Knocker][Knocker:6]] -@desc ring = A brass ring that should be in the door knocker's mouth. How else are you going to knock on a door? -# Knocker:6 ends here - - - -# Although we can interact with it, let’s not make it obvious that it is an object: - -# [[file:../../../projects/mud.org::*Knocker][Knocker:7]] -@set ring/hidden_tag = "hidden_ring" -# -@lock ring = view:tag(hidden_ring) -# Knocker:7 ends here - - - -# And let’s make it so we can take that: - - -# [[file:../../../projects/mud.org::*Knocker][Knocker:8]] -@set ring/can_take = True -# Knocker:8 ends here - - - -# Let’s tether the ring to the knocker … - - -# [[file:../../../projects/mud.org::*Knocker][Knocker:9]] -@lock ring = tethered:id(knocker) -# -@set ring/tethered_msg = "You put the ring back in the knocker's mouth. \"Mmmuufffmm,\" says the door knocker." -# Knocker:9 ends here - - - -# And put the ring in the knocker’s mouth: - -# [[file:../../../projects/mud.org::*Knocker][Knocker:10]] -@teleport/quiet ring = knocker -# Knocker:10 ends here - - - # The description is dynamic from the Python code, so we don’t need this statement: -# [[file:../../../projects/mud.org::*Knocker][Knocker:11]] +# [[file:../../../projects/mud.org::*Knocker][Knocker:4]] @desc knocker = The brass face looks at you and winks. -# Knocker:11 ends here +# Knocker:4 ends here # In order for us to /knock/ on the door, we have to give a =knock= command to the /room/. -# [[file:../../../projects/mud.org::*Knocker][Knocker:12]] +# [[file:../../../projects/mud.org::*Knocker][Knocker:5]] @set knocker/room_to_msg = "mp03" -# Knocker:12 ends here +# Knocker:5 ends here # The python object has all the knowledge about knocking and whatnot, but we should have the descriptions here. First, what the knocker reads: -# [[file:../../../projects/mud.org::*Knocker][Knocker:13]] -@set here/knock_msg = "You grab the ring and knock firmly on the door." -# Knocker:13 ends here +# [[file:../../../projects/mud.org::*Knocker][Knocker:6]] +@set here/knock_msg = "You grab the ring" +# Knocker:6 ends here # Then, what the other’s in the room read: -# [[file:../../../projects/mud.org::*Knocker][Knocker:14]] +# [[file:../../../projects/mud.org::*Knocker][Knocker:7]] @set here/knock_other_msg = "grabs the ring and knocks firmly on the door." -# Knocker:14 ends here +# Knocker:7 ends here # And an error message if the ring is not with the goblin: -# [[file:../../../projects/mud.org::*Knocker][Knocker:15]] +# [[file:../../../projects/mud.org::*Knocker][Knocker:8]] @set here/knock_err_msg = "This door knocker is defective, as it doesn't have a ring to...er, do the knockin'." -# Knocker:15 ends here +# Knocker:8 ends here + +# Ring + +# Since we can remove the ring, let’s create it: + +# [[file:../../../projects/mud.org::*Ring][Ring:1]] +@create ring: typeclasses.things.Ring +# Ring:1 ends here + + + +# And give it an alias: + +# [[file:../../../projects/mud.org::*Ring][Ring:2]] +@name ring = brass ring;ring +# Ring:2 ends here + + + +# And a description: + +# [[file:../../../projects/mud.org::*Ring][Ring:3]] +@desc ring = A brass ring that should be in the door knocker's mouth. How else are you going to knock on a door? +# Ring:3 ends here + + + +# Although we can interact with it, let’s not make it obvious that it is an object: + +# [[file:../../../projects/mud.org::*Ring][Ring:4]] +@set ring/hidden_tag = "hidden_ring" +# +@lock ring = view:tag(hidden_ring) +# Ring:4 ends here + + + +# And let’s make it so we can take that: + + +# [[file:../../../projects/mud.org::*Ring][Ring:5]] +@set ring/can_take = True +# Ring:5 ends here + + + +# Let’s tether the ring to the knocker … + + +# [[file:../../../projects/mud.org::*Ring][Ring:6]] +@lock ring = tethered:id(knocker) +# +@set ring/tethered_msg = "You put the ring back in the knocker's mouth. \"Mmmuufffmm,\" says the door knocker." +# Ring:6 ends here + + + +# And put the ring in the knocker’s mouth: + +# [[file:../../../projects/mud.org::*Ring][Ring:7]] +@teleport/quiet ring = knocker +# Ring:7 ends here # Cozy Tea House @@ -2001,26 +2216,18 @@ Someone has set a nice chair for viewing. -# Might as well stay a while: - -# [[file:../../../projects/mud.org::*Inside][Inside:2]] -@sethome me = here -# Inside:2 ends here - - - # And the best description ever: -# [[file:../../../projects/mud.org::*Inside][Inside:3]] +# [[file:../../../projects/mud.org::*Inside][Inside:2]] @desc here = An enormous stone hearth overshadows this round room with dark paneling. A subtle smell of tea and incense. Large, overstuffed chairs sit invitingly by the fireplace. Oddly angled shelves with books and knickknackery adorn the walls and the smell of fresh-baked scones come from the kitchen. -# Inside:3 ends here +# Inside:2 ends here # Since we want the description to include the state of the fire, we need some /parts/ to assemble. Still not sure how this should be done. -# [[file:../../../projects/mud.org::*Inside][Inside:4]] +# [[file:../../../projects/mud.org::*Inside][Inside:3]] @set here/initial_desc = "You found a cozy, cornerless room." # Ravenous State @@ -2037,55 +2244,36 @@ Someone has set a nice chair for viewing. # And a final description: @set here/final_desc = "Oddly angled shelves with books and knickknackery adorn the walls around a tapestry. The subtle smell of wood smoke, incense and fresh-baked scones from the kitchen." -# Inside:4 ends here - - - -# Granted, none of the dynamic description will work until we create the [[Fire]]. - -# Let’s come up with a lot of descriptions: - -# [[file:../../../projects/mud.org::*Inside][Inside:5]] -@detail tapestry = The muted colors of the tapestry either show its age or its location over the sometimes smokey hearth. It shows a gallant stag surrounded by woodland creatures. A racoon holds aloft a gold box while a wolf has a gnarled staff. A raven perched on the stag's antlers grips a blue ball in its beak. -# Inside:5 ends here - - - -# We should describe all the objects in the tapestry, eh? - -# [[file:../../../projects/mud.org::*Inside][Inside:6]] -@detail raven;ball;blue ball = The raven in the tapestry winks at you, and says, “Nevermore.” Really? It probably didn't. Your eyes must be playing trickster. -# Inside:6 ends here - - - -# And the other animals: - -# [[file:../../../projects/mud.org::*Inside][Inside:7]] -@detail wolf = The gnarled staff the wolf in the tapestry holds looks a lot like the staff the gnome, Dabbler, has. -# -@detail stag;deer = The majestic looking deer in the tapestry with gold fur and antlers that look more like tree branches. -# -@detail raccoon;box;gold box = The box the raccoon in the tapestry is holding seems to be a distraction, for he's pocketing a gold coin with his other paw. -# Inside:7 ends here - - - -# Will this staff get confused at some point? - -# [[file:../../../projects/mud.org::*Inside][Inside:8]] -@detail staff;gnarled staff = The gnarled staff in the tapestry that the wolf is holding seems to be made of oak with a dark petina from age. Three small leaves has sprouted from the side. -# Inside:8 ends here +# Inside:3 ends here # Touch up the exit: -# [[file:../../../projects/mud.org::*Inside][Inside:9]] +# [[file:../../../projects/mud.org::*Inside][Inside:4]] @desc leave = A wood door with a large brass knob leads to the outside. # @set leave/traverse_msg = "You open the door and step outside..." -# Inside:9 ends here +# Inside:4 ends here + +# Tapestry Story +# The tapestry should tell our /creation myth/. + +# [[file:../../../projects/mud.org::*Tapestry Story][Tapestry Story:1]] +@detail tapestry = The muted colors of the tapestry either show its age or its location over the sometimes smokey hearth. It depicts four scenes... |/|/The first scene shows a small, old |Yman|n with blue hair watering a wilted |Yrose|n in a desert landscape. |/|/The second scene shows the man and the rose next to a radiant |Yqueen|n handing the man a |Ypaper|n with a gold seal. |/|/The third scene shows the man standing between two |Ytrees|n, The final scene shows the man |Ywhispering|n to one of the trees, now visually further apart than in the third scene. +# +@detail man = The old man in the |Ytapestry|n is small, sporting a white vandyke-styles beard and blue tipped hair. He wears spectacles and a brown cloak covering his bright red jacket. Looks familiar. +# +@detail rose = The rose in both scenes of the |Ytapestry|n has gold petals, but curiously, not depicted in a pot. +# +@detail queen = The beautiful queen shown in the second scene of the |Ytapestry|n, adorned in a flowing gown of shimmering petals and leaves, has hair cascading like a waterfall of flowers. +# +@detail paper = The paper with a gold seal in the |Ytapestry|n sure looks like a contract. +# +@detail trees = The trees shown in the third and fourth scenes in the |Ytapestry|n are the same, and in one scene, they are named, |wErui|n and |wVedui|n. +# +@detail whispering = This curious aspect in the |Ytapestry|n seems ... odd. +# Tapestry Story:1 ends here # Fireplace # And a fire in the fireplace is a type of /pet/, since we can feed it: @@ -2400,6 +2588,19 @@ pose gnome/default = smoking his pipe @give journal = gnome # Journal:3 ends here +# Stoat +# Need an interesting creature that likes to sleep by the fire, and perhaps give hints to the workings inside. + +# - feed :: ignores all food. +# - pet :: likes all pets + +# Do I match the Big Hairy Beast, or do I create it as a puppet? + + +# [[file:../../../projects/mud.org::*Stoat][Stoat:1]] +@create/drop wee beastie;Mochi;stoat: typeclasses.pets.Friendly +# Stoat:1 ends here + # And its description: @@ -2447,11 +2648,13 @@ pose gnome/default = smoking his pipe @set stoat/pet_scared_response = "While it doesn't stop $you() << from petting it ^ >>, the beastie flashes its long teeth." # Stoat:6 ends here + + +# And actions if a friendly person isn’t around: + + # [[file:../../../projects/mud.org::*Stoat][Stoat:7]] -@set stoat/scared_actions = "The wee beastie << asleep on the chair ^ >> let's out a yawn brandishing its large canines. ;; - The wee beastie << asleep on the chair ^ >> uncoils itself, stretches, and recoils again. ;; - You hear a deep throated rumbling from the wee beastie << asleep on the chair ^ >> . ;; - The wee beastie twitches in its sleep, as if chasing down imaginary prey." +@set stoat/scared_actions = "The wee beastie << asleep on the chair ^ >> let's out a yawn brandishing its large canines. ;; The wee beastie << asleep on the chair ^ >> uncoils itself, stretches, and recoils again. ;; You hear a deep throated rumbling from the wee beastie << asleep on the chair ^ >> . ;; The wee beastie twitches in its sleep, as if chasing down imaginary prey." # Stoat:7 ends here @@ -2478,10 +2681,7 @@ pose gnome/default = smoking his pipe # [[file:../../../projects/mud.org::*Stoat][Stoat:10]] -@set stoat/concerned_actions = "The wee beastie << asleep on the chair ^ >> let's out an adorable yawn. ;; - The wee beastie << asleep on the chair ^ >> uncurls itself, stretches, and recurls again. ;; - You hear a deep purring sounds from the wee beastie << asleep on the chair ^ >>. ;; - The wee beastie twitches in its sleep, as if playing with dream toys." +@set stoat/concerned_actions = "The wee beastie << asleep on the chair ^ >> let's out an adorable yawn. ;; The wee beastie << asleep on the chair ^ >> uncurls itself, stretches, and recurls again. ;; You hear a deep purring sounds from the wee beastie << asleep on the chair ^ >>. ;; The wee beastie twitches in its sleep, as if playing with dream toys." # Stoat:10 ends here @@ -2508,11 +2708,7 @@ pose gnome/default = smoking his pipe # [[file:../../../projects/mud.org::*Stoat][Stoat:13]] -@set stoat/interested_actions = "The << sleepy ^ wee >> beastie << on {1} lap ^ >> let's out an adorable yawn. ;; - The << sleepy ^ wee >> beastie << on {1} lap ^ >> uncurls itself, stretches, and recurls again. ;; - {0} pets the << sleepy ^ wee >> beastie << on |p lap ^ >> as it snuggles << close ^ >>. ;; - You hear a deep purring sounds from the << sleepy ^ wee >> beastie << on {1} lap ^ >>. ;; - The << sleepy ^ wee >> beastie twitches in its sleep, as if playing with dream toys." +@set stoat/interested_actions = "The << sleepy ^ wee >> beastie << on {1} lap ^ >> let's out an adorable yawn. ;; The << sleepy ^ wee >> beastie << on {1} lap ^ >> uncurls itself, stretches, and recurls again. ;; {0} pets the << sleepy ^ wee >> beastie << on |p lap ^ >> as it snuggles << close ^ >>. ;; You hear a deep purring sounds from the << sleepy ^ wee >> beastie << on {1} lap ^ >>. ;; The << sleepy ^ wee >> beastie twitches in its sleep, as if playing with dream toys." # Stoat:13 ends here @@ -2530,10 +2726,7 @@ pose gnome/default = smoking his pipe # [[file:../../../projects/mud.org::*Stoat][Stoat:15]] -@set stoat/pet_friendly_response = "The << wee ^ >> beastie adorably moves its head into $your() pets. ;; - $You() << rub ^ pet >> the stubby but soft ears of the << wee ^ >> beastie, as it lets out a little purr. ;; - The << wee ^ >> beastie rolls onto its back while $you() rub its tummy. It lets out a little purr. ;; - $You() << scratch ^ massage >> the soft << back ^ rump >> of the << wee ^ >> beastie. It wriggles around trying to get the most of this attention." +@set stoat/pet_friendly_response = "The << wee ^ >> beastie adorably moves its head into $your() pets. ;; $You() << rub ^ pet >> the stubby but soft ears of the << wee ^ >> beastie, as it lets out a little purr. ;; The << wee ^ >> beastie rolls onto its back while $you() rub its tummy. It lets out a little purr. ;; $You() << scratch ^ massage >> the soft << back ^ rump >> of the << wee ^ >> beastie. It wriggles around trying to get the most of this attention." # Stoat:15 ends here @@ -2542,11 +2735,7 @@ pose gnome/default = smoking his pipe # [[file:../../../projects/mud.org::*Stoat][Stoat:16]] -@set stoat/friendly_actions = "The << sleepy ^ wee >> beastie << on {1} lap ^ >> let's out an adorable yawn. ;; - The << sleepy ^ wee >> beastie << on {1} lap ^ >> uncurls itself, stretches, and recurls again. ;; - {0} pets the << sleepy ^ wee >> beastie << on |p lap ^ >> as it snuggles << close ^ >>. ;; - You hear a deep purring sounds from the << sleepy ^ wee >> beastie << on {1} lap ^ >>. ;; - The << sleepy ^ wee >> beastie twitches in its sleep, as if playing with dream toys." +@set stoat/friendly_actions = "The << sleepy ^ wee >> beastie << on {1} lap ^ >> let's out an adorable yawn. ;; The << sleepy ^ wee >> beastie << on {1} lap ^ >> uncurls itself, stretches, and recurls again. ;; {0} pets the << sleepy ^ wee >> beastie << on |p lap ^ >> as it snuggles << close ^ >>. ;; You hear a deep purring sounds from the << sleepy ^ wee >> beastie << on {1} lap ^ >>. ;; The << sleepy ^ wee >> beastie twitches in its sleep, as if playing with dream toys." # Stoat:16 ends here @@ -2585,7 +2774,7 @@ pose gnome/default = smoking his pipe # [[file:../../../projects/mud.org::*Kitchen][Kitchen:3]] @teleport mp11 # -@desc here = This small, oddly shaped room contains low cabinets. The teapot on the stove seems warm as if finishing the ritual of brewing tea. A plate of scones on the counter smell inviting. +@desc here = This small, oddly shaped room contains low |Ycabinets|n. The |Yteapot|n on the |Ystove|n seems warm as if finishing the ritual of brewing tea. A |Yplate|n of |Yscones|n on the |Ycountertop|n smell inviting. # Kitchen:3 ends here @@ -2605,15 +2794,15 @@ pose gnome/default = smoking his pipe # [[file:../../../projects/mud.org::*Kitchen][Kitchen:5]] -@detail stove = Black, iron stove with rounded corners trimmed in gold. While cold, the teapot on the stove seems like it just made a tea. And yeah, the scones seem fresh baked as well. +@detail stove = Black, iron stove with rounded corners trimmed in gold. While cold, the |Yteapot|n on the |Ystove|n seems like it just made a tea. And yeah, the |Yscones|n seem fresh baked as well. # Kitchen:5 ends here # [[file:../../../projects/mud.org::*Kitchen][Kitchen:6]] -@detail countertop;countertops = Covered in hand-sized black tiles with gold flecks match the stove. The plate of scones look freshly baked. +@detail countertop;countertops;counter = Covered in hand-sized black tiles with gold flecks match the |Ystove|n. The |Yplate|n of |Yscones|n look freshly baked. # Kitchen:6 ends here # [[file:../../../projects/mud.org::*Kitchen][Kitchen:7]] -@detail plate = On the tiled counter-top, a large plate carries a stack of fresh-baked scones. +@detail plate = On the tiled |Ycountertop|n, a large plate carries a stack of fresh-baked |Yscones|n. # @detail scone;scones = A scones look tempting. Perhaps no one will miss one... # Kitchen:7 ends here @@ -2699,7 +2888,7 @@ py here.search("cabinet").do_bake() # [[file:../../../projects/mud.org::*Sconce][Sconce:1]] -@create/drop sconce;candle holder: typeclasses.consumables.Sconce +@create/drop sconce;candle holder;candle: typeclasses.consumables.Sconce # Sconce:1 ends here # [[file:../../../projects/mud.org::*Sconce][Sconce:2]] @@ -2912,43 +3101,54 @@ py here.search("cabinet").do_bake() @set stool/get_err_msg = "Stop try to steal everything not nailed down." # Stool:4 ends here -# Book +# Grimoire # A mystic book of potions can add a new dimension to the game. -# [[file:../../../projects/mud.org::*Book][Book:1]] -@create/drop leather-bound book:typeclasses.readables.Book -# Book:1 ends here +# [[file:../../../projects/mud.org::*Grimoire][Grimoire:1]] +@create/drop leather-bound book;book;grimoire:typeclasses.readables.Book +# Grimoire:1 ends here # The book’s title and description: -# [[file:../../../projects/mud.org::*Book][Book:2]] -@desc book = An old brown book where even the cover has seen considerable wear with stains and scratches in the leather. The band connect to a gold ring, itself attached to a chain that hooks it to the table. The title reads, |MFavorite Potions|n. Inside, written in beautiful penmanship, the book contains recipes. -# Book:2 ends here +# [[file:../../../projects/mud.org::*Grimoire][Grimoire:2]] +@desc grimoire = An old brown book where even the cover has seen considerable wear with stains and scratches in the leather. The band connect to a gold ring, itself attached to a chain that hooks it to the table. The title reads, |MFavorite Potions|n. Inside, written in beautiful penmanship, the book contains recipes. +# Grimoire:2 ends here # Lock it down. -# [[file:../../../projects/mud.org::*Book][Book:3]] -@lock book = get:false() +# [[file:../../../projects/mud.org::*Grimoire][Grimoire:3]] +@lock grimoire = get:false() # -@set book/get_err_msg = "The book is chained to the table." -# Book:3 ends here +@set grimoire/get_err_msg = "The book is chained to the table." +# Grimoire:3 ends here # And of course, the inside. -# [[file:../../../projects/mud.org::*Book][Book:4]] -@set book/inside = "file:world/alchemy-book.md" -# Book:4 ends here +# [[file:../../../projects/mud.org::*Grimoire][Grimoire:4]] +@set grimoire/inside = "file:world/alchemy-book.md" +# Grimoire:4 ends here + + + +# The contents must be in a file, and we need to add a pager. + +# The prefix can be: + + +# [[file:../../../projects/mud.org::*Grimoire][Grimoire:5]] +@set grimoire/prefix = "Undoing the brass clasp that bind the old leather book, you open to page one and begin reading the elegant calligraphy..." +# Grimoire:5 ends here # Cauldron # The cauldron should have a special =look= so a character knows what ingredients they added, and the follow commands: @@ -3075,7 +3275,7 @@ py bt = self.search('imp'); bt.db.pose = 'sitting on an ornate perch' # Imp:5 ends here # [[file:../../../projects/mud.org::*Imp][Imp:7]] -@set imp/arrive = "5 ;; tag_all alchemist ;; 240 ;; emote yawns."lsy +@set imp/arrive = "5 ;; tag_all alchemist ;; 240 ;; emote yawns." # Imp:7 ends here @@ -3087,168 +3287,20 @@ py bt = self.search('imp'); bt.db.pose = 'sitting on an ornate perch' @set imp/say = "1 ;; emote << nods ^ looks at you quizically ^ stares at you curiously ^ shrugs ^ investigates its fingerclaws ^ winks ^ smirks ^ raises an eyebrow ... well, if it had one, it would ^ stares at you ^ squints its eyes >>." # Imp:8 ends here -# Laughing Potion -# Need a script…. - -# Colorful gigglecaps prefer well drained locations to grow, like on the top of boulders. - - -# [[file:../../../projects/mud.org::*Laughing Potion][Laughing Potion:1]] -@teleport/quiet mp02 -# -@create/drop patch of mushrooms;mushrooms;mushroom: typeclasses.consumables.Producer -# -@desc mushrooms = A vibrant patch of mushrooms bursts forth like a painter's palette, each cap shimmering with iridescent hues of violet, emerald, and gold. Their delicate stems sway gently in the enchanted breeze...wait, you feel no breeze. They seem to be undulating with unheard laughter. -# -@set mushrooms/make_name = "gigglecap mushroom" -# -@set mushrooms/make_verb = "$conj(harvest) a" -# -@set mushrooms/make_class = "typeclasses.consumables.Edible" -# -@set mushrooms/make_desc = "A whimsical fungi emits a soft, melodic laughter when touched." -# -@set mushrooms/make_amount = 1 -# -@set mushrooms/make_spell_msgs = "10 ;; $You() $conj(<< giggle ^ chuckle ^ chortle >>) out loud." -# -# And we can't see them until we are an alchemist: -@lock mushrooms = view:tag(alchemist) -# Laughing Potion:1 ends here - - - -# This purple grass, often called tickleweed since it vibrates as if laughing, can be found in fields and meadows throughout the area. - - -# [[file:../../../projects/mud.org::*Laughing Potion][Laughing Potion:2]] -@teleport/quiet mp05 -# -@create/drop patch of tickleweed;tickleweed: typeclasses.consumables.Producer -# -@desc tickleweed = Patches of this vivid grass vibrates as if giggling. -# -@set tickleweed/make_name = "bunch of tickleweed" -# -@set tickleweed/make_verb = "$conj(harvest) a" -# -@set tickleweed/make_class = "typeclasses.consumables.Herb" -# -@set tickleweed/make_desc = "This grass vibrates as if giggling." -# -@set tickleweed/make_amount = 1 -# -# And we can't see them until we are an alchemist: -@lock tickleweed = view:tag(alchemist) -# Laughing Potion:2 ends here - - - -# And some fizzy water; - - -# [[file:../../../projects/mud.org::*Laughing Potion][Laughing Potion:3]] -@teleport/quiet mp05 -# -@create/drop stream;water: typeclasses.drinkables.Water -# -@desc stream = A slow-moving stream meanders like a snake in the grassy field. The water, fizzy with bubbles from the waterfall torrent, creates an efforvesent aroma. Little green |Yfrogs|n cling to grass stems hanging over the sparkling water. -# -@lock stream = get:false() -# -@set stream/get_err_msg = "Seriously? You can't get that. Perhaps you can |gfill|n a |gbottle|n, or at least a cup, could hold the fizzy water." -# -@set stream/fill_name = "fizzy water" -# -@set stream/fill_desc = "sparkling water from waterfall turbulence." -# -@set stream/fill_msgs = ["$You() $conj(<< get ^ kneel >>) down, and $conj(fill) $pron(your) {2} with sparkling efforvesence.", "$You() $conj(<< get ^ kneel >>) down, and $conj(put) $pron(your) {2} in the cool water, filling it."] -# Laughing Potion:3 ends here - # Trippy Potion # After ingesting this potion, they may see hallucinations and nightmares. It would be nice if these dreams could incorporate the room state. -# I’ve noticed Pixies often dance in the marshlands to the East, but are often invisible except in the evenings. I’ve attempted to discuss a trade for pixie dust, but often luck out as they often pay more attention to their choreography than any trinkets I could produce. - - -# [[file:../../../projects/mud.org::*Trippy Potion][Trippy Potion:1]] -@teleport/quiet mp08 -# -@create/drop patch of glitter;pixie dust;dust: typeclasses.consumables.Producer -# -@desc pixie dust = As you look at reeds and marsh grass, you notice the shiny glitter is actually dander from pixies... pixie dust. With a little effort, you could gather a small sack of it. -# -@set pixie dust/make_name = "sack of pixie dust" -# -@set pixie dust/make_verb = "$conj(collect) and $conj(fill) a" -# -@set pixie dust/make_class = "typeclasses.objects.Object" -# -@set pixie dust/make_desc = "Small bag of the good, shiny stuff." -# -@set pixie dust/make_amount = 1 -# -# And we can't see them until we are an alchemist: -@lock pixie dust = view:tag(alchemist) -# Trippy Potion:1 ends here - - - -# Fresh spring water should be in the Grotto, right? - - -# [[file:../../../projects/mud.org::*Trippy Potion][Trippy Potion:2]] -@teleport/quiet mp04 -# -@create/drop stream;water: typeclasses.drinkables.Water -# -@lock stream = get:false() -# -@set stream/get_err_msg = "Seriously? You can't get that. Perhaps a bottle, or at least a cup, could hold the fresh water." -# -@desc stream = A small stream, almost hidden behind the ferns and brambleberry bushes, drops down a lush hill, creating a lush, relaxing feeling. The water looks fresh and pure. -# -@set stream/fill_name = "still water" -# -@set stream/fill_desc = "fresh spring water." -# -@set stream/fill_msgs = ["$You() $conj(<< get ^ kneel >>) down, and $conj(fill) $pron(your) {2} with the << spring ^ fresh ^ refreshing >> water.", "$You() $conj(<< get ^ kneel >>) down, and $conj(put) $pron(your) {2} in the cool water, filling it."] -# Trippy Potion:2 ends here - - - -# Dreamshade mushrooms feed on floating dreams, and often congregate where dreamers sleep. - - -# [[file:../../../projects/mud.org::*Trippy Potion][Trippy Potion:3]] -@teleport/quiet mp07 -# -@create/drop cluster of mushrooms;mushroom: typeclasses.consumables.Producer -# -@desc mushrooms = Slender blue tendrils of a fungus encircle the base of the mattress. -# -@set mushrooms/make_name = "sack of mushrooms" -# -@set mushrooms/make_verb = "$conj(collect) and $conj(fill) a" -# -@set mushrooms/make_class = "typeclasses.consumables.Edible" -# -@set mushrooms/make_desc = "Small collection of slender, blue mushrooms." -# -@set mushrooms/make_amount = 1 -# -@set mushrooms/make_spell_msgs = "10 ;; $You() $conj(nod) off, as $pron(your) head bobbles and bounces. ;; 5 ;; $You() $conj(awaken) with a start." -# -# And we can't see them until we are an alchemist: -@lock mushrooms = view:tag(alchemist) -# Trippy Potion:3 ends here - +# Ingredients: +# - [[Pixie Dust]] +# - [[Dream Mushrooms]] +# - [[Spring Water ]] +# - [[Moonberries]] # The moonberries grow under conifers, and I find I often have to travel to one of the islands on the Lavender Sea to collect these. -# [[file:../../../projects/mud.org::*Trippy Potion][Trippy Potion:4]] +# [[file:../../../projects/mud.org::*Trippy Potion][Trippy Potion:1]] @teleport/quiet gr02 # @create/drop moonberries;moonberry;berry: typeclasses.consumables.Producer @@ -3271,7 +3323,7 @@ py bt = self.search('imp'); bt.db.pose = 'sitting on an ornate perch' # # And we can't see them until we are an alchemist: @lock moonberries = view:tag(alchemist) -# Trippy Potion:4 ends here +# Trippy Potion:1 ends here # Other # We’ll get ready by allowing one to collect water from _all_ the places, like the salty sea: @@ -3308,7 +3360,7 @@ py bt = self.search('imp'); bt.db.pose = 'sitting on an ornate perch' @lock river = get:false() # @set river/get_err_msg = "Slippery things, those rivers. Seems you would need |gfill|n a |gbottle|n, or at least a cup to hold the muddy water." - +# @desc river = A muddy, almost stagnant river. Smells like a fecund stew of moist dirt and decomposing swamp herbage. # @set river/fill_name = "muddy water" @@ -3325,7 +3377,7 @@ py bt = self.search('imp'); bt.db.pose = 'sitting on an ornate perch' # [[file:../../../projects/mud.org::*Bedroom][Bedroom:1]] @teleport/quiet mp03 # -@dig Bedroom;mp13:typeclasses.rooms.OpenableRoom = stairs up to a loft;up stairs;up;loft;bedroom,down the stairs;down;leave +@dig Bedroom;mp13:typeclasses.rooms.OpenableRoom = stairs up to a loft;up stairs;up;loft;bedroom,down the stairs;down;stairs;leave # Bedroom:1 ends here @@ -3395,7 +3447,7 @@ py bt = self.search('imp'); bt.db.pose = 'sitting on an ornate perch' # [[file:../../../projects/mud.org::*Wardrobe][Wardrobe:1]] -@dig Prairie;mp14 = through the wardrobe,copse of pinion pines;pines;copse;trees +@dig Prairie;mp14 = through the wardrobe;wardrobe,copse of pinion pines;pines;copse;trees;leave # Wardrobe:1 ends here