diff --git a/commands/consumables.py b/commands/consumables.py index 3c72672..a73785e 100755 --- a/commands/consumables.py +++ b/commands/consumables.py @@ -114,7 +114,10 @@ class CmdMakeScone(Command): """ auto_help = False key = "get scone" - aliases = "grab scone" + aliases = [ "grab scone", "grab cookie", + "take scone", "take cookie", + "get cookie", + ] def func(self): self.obj.do_make(self.caller, words=self.words()) diff --git a/commands/wizards.py b/commands/wizards.py index c297b9b..22bac69 100755 --- a/commands/wizards.py +++ b/commands/wizards.py @@ -450,8 +450,7 @@ class CmdGMTrigger(Command): msg = routput(event) delay(time_delay * idx, - self.caller.location.msg_contents, - "\n" + msg) + self.caller.location.msg_contents, msg) else: char = target.gendered_text(routput(event[0], name)) room = target.gendered_text(routput(event[1], name)) @@ -459,10 +458,10 @@ class CmdGMTrigger(Command): if room: delay(time_delay * idx, self.caller.location.msg_contents, - "\n" + routput(room), + routput(room), exclude=dests) if char: for dest in dests: delay(time_delay * idx, dest.msg, - "\n" + routput(char)) + routput(char)) diff --git a/moss-n-puddles.org b/moss-n-puddles.org index 0d803f4..625e2b2 100644 --- a/moss-n-puddles.org +++ b/moss-n-puddles.org @@ -11,6 +11,13 @@ #+PROPERTY: header-args :results none :eval no-export :comments no + - [X] Feed fire and =start fire=a + - [X] Create *Damp Cave* and stream of smelly water + - Create the “Goblin” and its puppets + - Make a rock to sit on. Let’s make it comfortable. + - Clone the teapot? The =make= should not be so extensive … more unique + - Clone the teacup generation? But this time, cracked ones that don’t hold much tea? + - Create the character description file. - [ ] Create goggles to show /gold tint/, and remove the /tint/ otherwise - [ ] Create /Picker/, the goblin janitor that sweeps through land, deleting all items that /should not/ be there. - Should I have a YAML file that lists what /should/ be in each room? @@ -62,6 +69,29 @@ And then start or restart (or reload, I think): #+BEGIN_SRC sh evennia start #+END_SRC +** Upgrading? +To start all over on a development box, first: +#+BEGIN_SRC sh + evennia stop + + cp server/evennia-reset.db3 server/evennia.db3 + + evennia start +#+END_SRC + +NOTE: the =-reset= version already has my user account created. + +I can then log in, perhaps using [[https://github.com/blightmud/blightmud][Blightmud]]: + +#+BEGIN_SRC sh + blightmud --connect localhost:4000 +#+END_SRC + + +#+BEGIN_SRC evennia :tangle no + @batchcommands version1 +#+END_SRC + ** Shell Start the shell to test Python changes in a REPL. Note: If the Evennia /virtual environment/ contains =ipython=, it can use it as its shell. @@ -207,6 +237,21 @@ I also thought they could type =help start=, to see, but this is easier to [[fil ** Testing the World Experience Using the infamous [[https://core.tcl-lang.org/expect/index][Tcl/Expect system]], I can log on with a /test account/ and use it to generate commands and validate the output. +*Note:* Running it the first time, use: +#+BEGIN_SRC sh + world/test-run.exp local true true +#+END_SRC + +Afterwards, the =rob=, the testing goblin character has been created, and you can: + +#+BEGIN_SRC sh + world/text-run.exp remote +#+END_SRC + +Where =local= and =remote= on the locally running server, or the officially sanctioned one on my server. + +Normally, the response from a command typed by /Speedy Gonzoblin/ is immediate, however, we do wait for some events to happen, so the entire test runs about 4 minutes. Due to some of the time delays, we need to play around with the /timeout/ value. + #+BEGIN_SRC tcl :shebang #!/usr/bin/expect :chmod 0755 # Set timeout for expect commands set timeout 30 @@ -471,7 +516,7 @@ Derived from the original [[~/src/moss-n-puddles/.venv/lib/python3.12/site-packa Describe the trees, flowers, and of course, the alcove: #+BEGIN_src evennia - @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 at other times earthy. While the leafy canopy hides the sky, you certainly can |wfeel|n the weather. + @detail trees = You feel dwarfed by colossal trees whose moss-covered roots are difficult to peer over. An occassional breeze often smells of flowers and at other times earthy. While the leafy canopy hides the sky, you certainly can |wfeel|n the weather. Attribute it to pareidolia, but the bark on one particular |Ytree|n looks like a face. # @detail flower;flowers = Beautiful, but giant flowers look down on you and nod a friendly greeting. # @@ -500,7 +545,7 @@ The style should have elements of fantasy. *** Barkbinder the Tree When you first log into the game, you can immediately chat with an unfriendly, overly boring tree. #+BEGIN_SRC evennia - @create/drop tree;trees: typeclasses.chatbots.ChatBot + @create/drop tree: typeclasses.chatbots.ChatBot # @set tree/gender = "neutral" # @@ -515,6 +560,11 @@ Then wake it. py tree = me.search("tree") ; tree.sdesc.add("especially large tree") ; tree.backstory("tree") #+END_SRC +And his description: + +#+BEGIN_SRC evennia + @desc tree = The folds and furrows of the bark of this ancient tree look like a face with closed eyelids, as if it were asleep or merely contemplating the mysteries of deep time. +#+END_SRC *** Hints What about /hints/? Since this is the /first room/, I didn’t want it complicated or clever, but we could mention that they should =look boulder=: @@ -577,12 +627,14 @@ And a test of our ability to jump in the puddle: 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. #+BEGIN_src evennia - py timed_script = evennia.create_script(key="Create Sticks", - typeclass='typeclasses.scripts.CreateSticks', - interval=86800, # more than a day - start_delay=False, # wait interval before first call - autostart=True, - attributes=[("destination", here)] ) + py timed_script = evennia.create_script( + key="Create Sticks", + typeclass='typeclasses.scripts.CreateSticks', + interval=86800, # more than a day + start_delay=False, # wait interval before first call + autostart=True, + attributes=[("destination", here)] + ) #+END_SRC And let’s see if the stick behaves: @@ -755,6 +807,12 @@ Where /thing/ is the single name of the hidden object. Find the code [[file:~/sr look duck #+END_SRC +*Note:* If you want something to be visible if the =look= at it directly, but not show up on the Room list of /noticeable/ items, do: + +#+BEGIN_SRC evennia :tangle no + @set duck/is_hidden = True +#+END_SRC + *** Boulder More details about the room that describes aspects of the boulder in the =desc= above. First, the symbol: #+BEGIN_src evennia @@ -1131,15 +1189,19 @@ Here for hints … and a bit of a distraction. @create/drop Squirrel;monk: typeclasses.chatbots.ChatBot # @update squirrel = typeclasses.chatbots.ChatBot # - @desc squirrel = A handsome squirrel dressed in flowing orange robes. Sitting in quiet meditation on top of a compfortable patch of |Ymoss|n. - # @set squirrel/gender = "female" # @set squirrel/pose = "deep in meditation" # @set squirrel/pose_sleep = "deep in meditation" # - # @sdesc orange-robed squirrel + @set squirrel/pose_default = "deep in meditation" +#+END_SRC + +And describe the squirrel: + +#+BEGIN_SRC evennia + @desc squirrel = A handsome squirrel dressed in flowing orange robes. Sitting in quiet meditation on top of a compfortable patch of |Ymoss|n. #+END_SRC #+BEGIN_SRC evennia @@ -1155,7 +1217,7 @@ Ignore all talking. And turn on the real sayings: #+BEGIN_SRC evennia - py me.search("squirrel").backstory("squirrel") + py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add("orange-robed squirrel") ; s.home = here ; s.backstory("squirrel") #+END_SRC ** Frog Meadow @@ -1561,7 +1623,7 @@ Testing this location. expect -re "You notice.*mattress" send "sit\n" - expectit "You sit on the mattress." + expect -re "You sit on the.*mattress." send "get mattress\n" expectit "too heavy" @@ -1860,7 +1922,7 @@ And a description must be careful with the newlines to make the verse work: Can we read it? -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @set table/inside = "While you can't read the |Yrunes|n, you can read the message in the middle of the table:|/|/ Born of rain and ground combined,|/ No solid form, yet firm when dried.|/ Clinging to feet. Adored by boar.|/ Speak my name to open the door." #+END_SRC @@ -1996,26 +2058,23 @@ Let’s hop into the Bar in order to work it over: @tel mp10 #+END_SRC -Describe it: +Do we want to make the permanent residents part of the description. -#+BEGIN_SRC ruby - @desc here = An amazing room formed from a ring of living |Ytrees|n. The canopy of |Yboughs|n above twinkle with the |Ylights|n of small, glowing orbs. Working the bar, a haughty-looking |Yelf|n; waiting on tables, a smiling |Ymushroom man|n, er...person. +#+BEGIN_SRC evennia + @desc here = An amazing “room” formed from a ring of living |Ytrees|n. The canopy of |Yboughs|n above twinkle with the |Ylights|n of small, glowing orbs. Working the bar, a haughty-looking |Yelf|n; waiting on tables, a smiling |Ymushroom man|n, er...person. #+END_SRC -And some ambiance. -#+BEGIN_SRC ruby - @detail trees;tree;trunk;trunks = You've never see black elder tree trunks so large or that grow so close together. The course, dark gray trunks absorb the soft light from the |Yorbs|n making the room appear much larger. +And some ambiance and details for items in the description. + +#+BEGIN_SRC evennia + @detail trees;tree;trunk;trunks = You've never see elder tree trunks so large or that grow so close together. Of course, dark gray trunks absorb the soft light from the |Yorbs|n making the area appear much larger. #+END_SRC -#+BEGIN_SRC ruby - @detail boughs;bough;branches;canopy = The branches of the black elder |Ytrees|n sport slender leaves and cluster of elder |Yberries|n. +#+BEGIN_SRC evennia + @detail boughs;bough;branches;canopy = The branches of the black elder |Ytrees|n create a sort of roof overhead. #+END_SRC -#+BEGIN_SRC ruby - @detail berries;berry = The cluster of berries from the |Ycanopy|n above are high and out of reach. -#+END_SRC - -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @detail lights;light;orbs = Hundreds of small, dancing orbs float around the |Ycanopy|n above the room, casting a soft glow of light. #+END_SRC @@ -2029,29 +2088,62 @@ Let’s have an interesting phrase entering the bar … #+BEGIN_src evennia @set blue door/traverse_msg = "You open the blue door and enter inside the tree... and find yourself back in the first glade, with a path that leads through a forest." #+END_SRC +*** Bar Stools +And [[file:~/src/moss-n-puddles/typeclasses/sittables.py::class Sittables(Sittable):][the stools]] is a /plural/ location to sit, allowing anyone to sit down. +#+BEGIN_src evennia + @create/drop bar stools;stools;chairs:typeclasses.sittables.Sittables +#+END_SRC +This only works if we make it plural: +#+BEGIN_src evennia + @set bar stools/plural = True +#+END_SRC + +And the description: +#+BEGIN_src evennia + @desc bar stools = You didn't know trees could grow in the shape of bar stools, and yet, the places you can sit seem quite organic. +#+END_SRC + +Can’t steal ‘em: +#+BEGIN_src evennia + @lock stools = get:false() + # + @set stools/get_err_msg = "The stool may actually be part of the decor and can't be moved." +#+END_SRC + +And textual descriptions the object can use: +#+BEGIN_src evennia + @set stools/singular = "one of the stools at the bar" +#+end_src + +Since we have unlimited seating, sitting down is always available: + +#+BEGIN_SRC tcl + send "sit\n" + expectit "You sit on " +#+END_SRC *** Cocktails Let’s create a sign for the list of cocktails: -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @create/drop sign above the bar;sign;list:typeclasses.readables.Readable #+END_SRC And the description: -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @desc sign = You see a large sign made of wood over the bar, hanging from a branch of one of the living trees. Painted words at the top read, |wWyldwood Cocktails|n, and a list of drinks you can order. #+END_SRC Might as well allow the user to read it: -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @set sign/inside = "|wCocktails|n|/ - Moonlit Mirage|/ - Puck's Revenge|/ - Glimmering Gossamer|/ - Whimsical Willow|/ - Charmed Chalice|/ - Enchanted Elixir|/ - Sylvan Serenade|/ - Brambleberry Bliss|/ - Twilight Tonic|/" #+END_SRC And lock down the sign: -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @lock sign = get:false() # @set sign/get_err_msg = "The tree trunk that holds the sign has grown around it making it impossible to remove." @@ -2069,14 +2161,14 @@ Let’s test out the sign: Needs the ability to create a drink. -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @set bartender/currentgame = "session1" #+END_SRC The preps come in three forms with how detailed we want to spam the room. -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @set bartender/triggers:session1 = { "prep1": { "desc": "Single preparation step for making a cocktail", @@ -2162,12 +2254,12 @@ A dark, mysterious drink made with blackcurrant and tonic water, served with a s #+END_SRC *** Bartender Return to the Bar … -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @teleport Wyldwood Bar #+END_SRC A haughty elf named Elendil -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @create/drop Bartender;barkeep;Elendil: typeclasses.chatbots.Bartender # @update Bartender = typeclasses.chatbots.Bartender #+END_SRC @@ -2178,27 +2270,29 @@ And all the RP system stuff: @set bartender/gender = "male" #+END_SRC -#+BEGIN_SRC ruby - py bt = self.search('Bartender'); bt.sdesc.add('blonde elf'); bt.db.pose = 'working behind the bar' +#+BEGIN_SRC evennia + py bt = self.search('Bartender') ; bt.db._sdesc="blonde elf bartender" ; bt.sdesc.add('blonde elf bartender') ; bt.home = here ; bt.db.pose = 'working behind the bar' #+END_SRC And default pose: -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @pose default bartender = working behind the bar #+END_SRC And an un-puppeted pose: -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @set bartender/pose_sleep = "fiddling with something behind the bar" # @set bartender/pose_default = "working behind the bar" + # + @set bartender/pose_default = "wiping down the bar" #+END_SRC And a good description: -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @desc Bartender = A haughty-looking elf with green eyes and long blond hair with two intricate braids accentuating incredibly pointed ears. His nose, pointed, often points straight up in order to look down on you. #+END_SRC @@ -2215,7 +2309,7 @@ As well as the automation: And let’s make him initially invisible: -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @set Bartender/hidden_tag = "hidden_bartender" # @lock Bartender = view:tag(hidden_bartender) @@ -2243,9 +2337,6 @@ Let’s see if we can talk the bartender into a drink: send "drink\n" expectit "You have nothing to drink" - - send "say Thank you, sir\n" - expectit "Thank you" #+END_SRC Helpful commands: @@ -2259,7 +2350,7 @@ Helpful commands: **** Automated Responses Seems that different triggering hooks could have different delayed responses. What sort of events? And do we bother if we convert the Bartender to a Chatbot? -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @set bartender/arrive:dabbler = "5 ;; say to old gnome Ah, welcome, sir. I've acquired another one of those whiskys from the Mud World. This one claims to taste like a... hrm... << burning hosptial ^ seagull's armpit, er wingpit, I guess ^ going down on a mermaid, wait, I believe you've done that ^ licking a salty ashtray >>. ;; 10 ;; emote takes a brown glass bottle from a chest, and pours some into a glass. ;; shake whisky = gnome" #+END_SRC @@ -2365,12 +2456,12 @@ Start the hiders … Gives out candy, as there is a never-ending bowl of them on the bar. Gotta have something to munch on. -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @create/drop bowl of candies;bowl;candy : typeclasses.consumables.Producer #+END_SRC With a description: -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @desc bowl = A large white daisy forms a bowl holding a collection of colored hard candies. #+END_SRC @@ -2383,7 +2474,7 @@ The bowl shouldn’t be steal-able, but a =get= on a Producer now calls it =do_m #+END_SRC Hold off on the viewing: -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @set bowl/hidden_tag = "hidden_bowl" # @lock bowl = view:tag(hidden_bowl) @@ -2391,16 +2482,16 @@ Hold off on the viewing: We have to have the bowl of candy describe what it /makes/: -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @set bowl/make_name = "candy" #+END_SRC Including some plural aliases: -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @set bowl/make_aliases = ["candies"] #+END_SRC And a verb when they /get/ the consumable: -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @set bowl/make_verb = "$conj(grab) a" # @set bowl/make_note = " from the bowl" @@ -2412,22 +2503,22 @@ This one is optional as it defaults to Consumable: #+END_SRC And the bowl needs to know the /description/ of the Consumable, so that it can attach that: -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @set bowl/make_desc = "Bright << red ^ orange ^ yellow ^ blue ^ violet >> candy with << flecks ^ spots ^ stripes >> of << red ^ orange ^ purple ^ violet ^ orange >>." #+END_SRC How many candies are there when you pick them? -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @set bowl/make_amount = 1 #+END_SRC How many candies do you eat at a time: -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @set bowl/make_eat_amount = 1 #+END_SRC Messages can be randomly selected: -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @set bowl/make_eat_msgs = [ "Tastes of elderberry. Do I even know what that tastes like?", "Tastes of elderflower...certainly not youngerflower.", @@ -2479,14 +2570,157 @@ And a brief test … and since this is the last thing in the bar, let’s have o send "get candy\n" expectit "You grab a candy" + # And grab another for the road... + send "get candy\n" + expectit "You grab a candy" + # Until we write tests for the bar... send "leave\n" expectit "Glittering Glade" + sleep 5 + # Let's get back to the Meadow ... send "west\n" expectit "Frog Meadow" #+END_SRC +*** Pixie Quartet + +A haughty elf named Elendil +#+BEGIN_SRC evennia + @create/drop Pixies;pixie: typeclasses.puppets.Puppet +#+END_SRC + +And give them a better name/description: + +And all the RP system stuff: + +#+BEGIN_SRC evennia + py bt = self.search('pixies'); bt.db._sdesc = "quartet of pixies"; bt.db.pose_default = 'playing music atop a giant fieldcap mushroom'; bt.db.pose = 'playing music'; bt.db.gender = 'ambiguous'; +#+END_SRC + +#+BEGIN_SRC evennia + @desc pixies = Atop a giant fieldcap mushroom, a quartet of pixies playing the strangest instruments you've never seen, fill the room with music. +#+END_SRC + +And default pose: + +#+BEGIN_SRC evennia + pose default pixies = drinking at the bar instead of performing +#+END_SRC + +And an unpuppeted pose: + +#+BEGIN_SRC evennia + @set pixies/pose_sleep = "playing music atop a giant mushroom" +#+END_SRC + +And details: + +#+BEGIN_SRC evennia + @detail mushroom = A giant, beige-colored mushroom grows on the side of this room providing a perfect stage for the pixie musicians. +#+END_SRC + +And give him the powers he deserves: + +#+BEGIN_SRC ruby :tangle no + @perm pixies = Admin +#+END_SRC + +And when Dabbler arrives … + +#+BEGIN_SRC evennia + @set pixies/arrive:dabbler = "12 ;; gm The quartet on the mushroom start playing an << interesting ^ odd >> << composition ^ song ^ arrangment >>. ;; The pixie leader says, \"As you can tell, we're playing << a jazz standard ^ a jazz melody ^ something the Mudders call, jazz fusion >>. That's right, something we picked up from << our travels in ^ >> the Mud World." +#+END_SRC + +What happens at 8:00pm? + +#+BEGIN_SRC ruby :tangle no + gm One of the pixies puts down his flute, and steps up in front of the band. "Great playing for such an audience," he says. "Allow me to introduce the band. On drums, we have |wStar|n." The pixie leans forward and says, "That's right, he's never lost a beat... But never found it either!" + + gm The pixie on drums hits a relucant stinger...mostly out of habit. + + gm The first pixie continues the introductions, "And playing the bass...er, fish, we have the round |wCart|n," he says. "You'll bass-icaly never hear such great walks." + + gm The leader of the pixie quartet says, "While stringing along her career, we've got the amazing Hairy on guitar!" You see the pixie put his hand up to his mouth to speak the audience, "She's plucking melodius, amiright?" + + gm "And I'm Lemon," the leader of the pixie quartet says, "And we're going to take a wee break, as we've got a massive thirst, we think only the bartender can assuage." + + gm The music stops and the four pixies descend upon the bar. Clearly you won't be able to order anything until these tiny alcoholics...er, + # solution + gm The four pixies descend upon the bar. +#+END_SRC + +*** Awakened Shrub +Next great NPC will a cameo from the Awakened Shrub. + +#+BEGIN_SRC evennia + @create/drop Shrub;bush;chalkboard;awakened shrub: typeclasses.puppets.Shrub +#+END_SRC + +And describe it: + +#+BEGIN_SRC evennia + @desc shrub = If a small shrub had the facial muscles to smile and show how much it enjoys itself, this lil' guy would be it. The short leaves indicates it once was a boxwood, but the way it nurses that glass of water shows those days are way behind. When you look its way, it waves a branch at you. You notice one of its branches clutch a small chalkboard while another holds a piece of chalk. +#+END_SRC + +And tag it: +#+BEGIN_SRC evennia + py bt = self.search('shrub'); bt.db.gender = 'neutral'; bt.db._sdesc = 'shrub'; bt.db.pose_default = 'nursing a glass of water'; bt.db.pose = 'nursing a glass of water' +#+END_SRC + +And default pose: + +#+BEGIN_SRC evennia + pose default shrub = writing something in a notebook +#+END_SRC + +And an unpuppeted pose: + +#+BEGIN_SRC evennia + @set shrub/pose_sleep = "nursing a glass of water" +#+END_SRC + +And let’s not let anyone pick it up: + +#+BEGIN_SRC evennia + @set shrub/get_err_msg = "It doesn't seem to appreciate your advances and shakes a top branch, no. Remember, no means, no." +#+END_SRC + +Let’s set the location where it will store its transcripts: + +#+BEGIN_SRC evennia + @set shrub/transcripts_path = 'bar-transcripts/%Y-%m-%d.html' + # + # And the header as well: + @set shrub/header_file = "transcripts/header-template.html" +#+END_SRC + +And phrases it can say … er, do. + +#+BEGIN_SRC ruby :tangle no + gm The shrub waves a branch in greetings. + gm You've never seen a bush do that before. +#+END_SRC + +Be cool if it could write something: + +#+BEGIN_SRC evennia + @set shrub/inside = "The chalkboard reads,|/|/ Hello, My name is Shrub McShrubberson. What's yours?" +#+END_SRC + +And resetting the chalkboard. + +#+BEGIN_SRC ruby :tangle no + @set shrub/inside = "(You can't see what he is writing. His bushiness is in the way)" + @gm The shrub uses a branch to wipe << off ^ >> << the chalk from ^ >> his << small ^ >> chalkboard, and with another branch, << slowly ^ carefully ^ deliberately ^ >> starts to write << something ^ a message ^ >>. + @set shrub/inside = "" +#+END_SRC + +#+BEGIN_SRC evennia + @detail chalkboard = The shrub is holding a small chalkboard with a wood frame. +#+END_SRC + ** Mellow Marsh The river from the flows into a marsh: @@ -2542,7 +2776,7 @@ Details for a more immersive experience: #+BEGIN_src evennia - @detail birds = Birds of every color on the rainbow and beyond fly and squawk around you, but keep their distance. + @detail birds = Birds of every color on the rainbow and beyond, fly and squawk around you, but keep their distance. #+END_SRC #+BEGIN_src evennia @@ -2582,7 +2816,7 @@ And we test this normal /state/: 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" + expectit " ?" send "look moth\n" expectit "On closer inspection, the moths are really" @@ -2668,8 +2902,7 @@ And test looking at it: Create a puppet of the bird hunting frogs and pixies. :-D #+BEGIN_src evennia - @create/drop purple heron: typeclasses.chatbots.ChatBot - # @update heron = typeclasses.chatbots.ChatBot + @create/drop purple heron;heron: typeclasses.chatbots.ChatBot # @set heron/pose = "stalking the swamp grass" # @@ -2677,9 +2910,9 @@ Create a puppet of the bird hunting frogs and pixies. :-D # @set heron/pose_sleeping = "stalking the swamp grass" # - @lock purple heron = get:false() + @lock heron = get:false() # - @set purple heron/get_err_msg = "You try to get it, but it just flies out of reach." + @set heron/get_err_msg = "You try to get it, but it just flies out of reach." #+END_SRC What data file of responses should we use? @@ -2749,6 +2982,117 @@ Test that the heron can talk: expectit "flies out of reach" #+END_SRC +*** Birds and Feathers +Along with the heron, we should add more birds to both look at, as well as take some feathers. + +#+BEGIN_SRC evennia + @tel/quiet mp08 + # + @create/drop birds;bird: typeclasses.puzzles.Changling + # + @set birds/plural = True +#+END_SRC + +Can’t get them: + +#+BEGIN_SRC evennia + @lock birds = get:false() + # + @set birds/get_err_msg = "They are high in the trees and much too fast." +#+END_SRC + +And let’s not list them with the room’s objects since they can’t be interacted with: + +#+BEGIN_SRC evennia + @set birds/is_hidden = True +#+END_SRC + +And the generate description: + +#+BEGIN_SRC evennia + @set birds/desc_first_prefix = "Wait, is that " + # + @set birds/desc_prefix = "Is that " + # + @set birds/desc_postfix = "? << Seems ^ It appears ^ Looks like >> << it ^ that bird >> has << dropped ^ shed ^ cast off >> a << clump ^ bunch ^ cluster >> of |Yfeathers|n." +#+END_SRC + +And now for a list of the contents: + + #+BEGIN_SRC evennia + @set birds/descs = ( + "a melancholic Soliloquy Raven, whistling a sad song", + "a purple throated Cinnabar Hearth-Finch", + "a white Moon-Sipped Egret", + "a Gossamer Ribbon-Tail", + "a Obsidian Bell-Tolled", + "a anachronistic Chrono-Cuckoo", + "a purple Sovereign Velvet-Crest", + "a rainbow-colored Prism-Weft Kingfisher", + "a berry encrusted Bramble-Spine Kestrel", + "a Dream-Stitch Wren, weaving a dream-catching net", + "a Nebula-Throated Skimmer", + "a Shatter-Glass Nightingale" + ) +#+END_SRC + +The /feathers/ is a hidden Producer: + +#+BEGIN_src evennia + @create/drop feathers: typeclasses.consumables.Producer + # + @set feathers/plural = True + # + @set feathers/hidden_tag = "hidden_feathers" + # + @lock feathers = view:tag(hidden_feathers) +#+END_SRC + +With a description: +#+BEGIN_src evennia + @desc feathers = Perhaps the molting season, stress, nutritional deficiencies, or |wyour desire to help|n, you find various colored feathers available for the taking. +#+END_SRC + +We have to have the feathers describe what it /makes/: +#+BEGIN_src evennia + @set feathers/make_name = "a bunch of feathers" +#+END_SRC + +And a verb when they /get/ the consumable: +#+BEGIN_src evennia + @set feathers/make_verb = "$conj(gather) " +#+END_SRC + +They shouldn’t be able to make too many feathers: + +#+BEGIN_SRC evennia + @set feathers/make_limit = 1 + # + @set feathers/make_limit_msg = "You seem to have plenty of feathers." +#+END_SRC + +And the feathers needs to know the /description/ of the Consumable, so that it can attach that: +#+BEGIN_src evennia + @set feathers/make_desc = "A brightly colored collection" +#+END_SRC + +How much is there when you pick them? +#+BEGIN_src evennia + @set feathers/make_amount = 1 +#+END_SRC + +And let’s test that we can get a feather: + +#+BEGIN_SRC tcl + send "look feathers\n" + expectit "you find various colored feathers available" + + send "get feathers\n" + expectit "You gather a bunch of feathers" + + send "get feathers\n" + expectit "You seem to have plenty of feathers" +#+END_SRC *** 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. @@ -2787,7 +3131,7 @@ They shouldn’t be able to make too many poles: A ten-foot pole should act like a stick: -#+BEGIN_src evennia :tangle no +#+BEGIN_src evennia @set reeds/make_class = "typeclasses.things.Stick" #+END_SRC @@ -3263,18 +3607,6 @@ And test it: send "get sculpture\n" expectit "It appears firmly attached to the wall where it hangs." #+END_SRC - -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: - -#+BEGIN_src evennia - py timed_script = evennia.create_script(key="Create Horns", - typeclass='typeclasses.scripts.CreateHorns', - interval=600, - start_delay=False, - autostart=True, - attributes=[("destination", here)] ) -#+END_SRC - *** 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. @@ -3306,6 +3638,15 @@ And a commentary: @set bucket/make_note = " from the bucket" #+END_SRC +How many torches can they steal? + +#+BEGIN_SRC evennia + @set bucket/make_limit = 5 + # + @set bucket/make_limit_msg = "You can't carry any more torches." +#+END_SRC + + The torches are special in that they last longer. #+BEGIN_src evennia @set bucket/make_class = "typeclasses.lightables.Torch" @@ -3349,7 +3690,7 @@ Note that we give him a male gender: Work around the =pose= bug: #+BEGIN_src evennia - @py bt = self.search('old lady'); bt.sdesc.add('old lady'); bt.db.pose = 'playing with a deck of cards' + @py bt = self.search('old lady'); bt.db._sdesc="old lady" ; bt.sdesc.add('old lady'); bt.home = here ; bt.db.pose = 'playing with a deck of cards' #+END_SRC Let’s set this Chatbot to use [[file:~/src/moss-n-puddles/personalities/witch.md][witch.md]]. @@ -3391,6 +3732,7 @@ And the old sleeping lady … #+BEGIN_src evennia :tangle no @set old lady/arrive = "45 ;; gm You hear someone in the loft up the stairs stirring in their bed. ;; 55 ;; pose looking confused ;; emote The /me wakes up and says, \"What's all this then?\" ;; 5 ;; say Who are you, dearie? ;; 10 ;; say I'd think I have an intruder in my home! ;; 1 ;; emote grabs her broom and with a sweeping motion from the stairs, sends her intruder flying out the door! ;; teleport {3} = Mellow Marsh ;; 3 ;; gm/#457 You hear a voice coming from the hut, \"Scat!\" ;; emote heads up the stairs to bed. ;; pose sleeping in a bed up in the loft" #+END_SRC + Turn it off when needed. #+BEGIN_src evennia :tangle no @@ -3407,7 +3749,20 @@ Perhaps … eventually, we can give her a gift, and she’ll allow the character I’ve been wanting this woman to be able to put out a spread of Tarot-ish cards to entertain others. *** Mist Horn -The [[file:~/src/moss-n-puddles/typeclasses/scripts.py::class CreateHorns(Script):][CreateHorns script]] will generate a horn. Let’s have our Goblin tester get it: +The [[file:~/src/moss-n-puddles/typeclasses/scripts.py::class CreateHorns(Script):][CreateHorns script]] will generate a horn. Anyone can acquire it, and keep it as a way to control the Leaf Boat. + +#+BEGIN_SRC evennia + py evennia.create_script( + key="Create Horns", + typeclass='typeclasses.scripts.CreateHorns', + interval=60 * 10, + start_delay=False, + autostart=True, + attributes=[("destination", here)] + ) +#+END_SRC + +Let’s have our Goblin tester get it: #+BEGIN_SRC tcl send "look horn\n" @@ -3516,6 +3871,13 @@ And describe the walk back into the forest: @desc north = This path leads into the forest of collosal trees. #+END_SRC +When a character arrives at the Lazy Dock and wait, the room gives a hint about the horn and the boat occurring. + +#+BEGIN_SRC evennia + @set mp06/arrive = "40 ;; gm Did you hear that? Sounds like a distant horn ... Perhaps the wind. ;; 60 ;; gm You think you saw a boat out on the sea ... but maybe not. " +#+END_SRC + +Now test all of these: #+BEGIN_SRC tcl send "look south\n" expectit "You see a dock on a lavender sea" @@ -3699,8 +4061,12 @@ Here for hints … and a bit of a distraction. @set raven/pose_sleep = "dozing while perched on a branch" # @set raven/pose_default = "curiously staring at you" - # - # @sdesc large raven +#+END_SRC + +Then give him the =sdesc= (not sure why I have to do both), and wake him. + +#+BEGIN_SRC evennia + py raven = me.search("raven") ; raven.db._sdesc="raven" ; raven.sdesc.add("raven") ; raven.home = here #+END_SRC Let’s load the goodies: @@ -3709,7 +4075,6 @@ Let’s load the goodies: py me.search("raven").backstory("raven") #+END_SRC - *** Hints We should keep the /raven puppet/ here to give out the hints. @@ -3765,7 +4130,7 @@ Could we extend the sea from the [[file:mud.org::*The Dock][The Dock]] down a sh @dig Shore;mp15 :typeclasses.rooms_weather.TimeWeatherRoom = south along shore;shore;south;s,north to dock;north;n;dock #+END_SRC -With a message about leaving the trees so that I don’t have to repeat that in the room description: +With a message about leaving the dock as to not repeat that in the room description: #+BEGIN_SRC evennia @set south/traverse_msg = "Leaving the dock, you want along the soft sandy shore next to the Lavender Sea, enjoying the mesmerizing sound of the surf... until you come to a shack that blocks your stroll." #+END_SRC @@ -3791,7 +4156,7 @@ And describe the walk back to the dock: #+END_SRC And describe this. #+BEGIN_SRC evennia - @desc here = Puppy-dog |Ywaves|n on a lavender |Ysea|n, snap your heels half-heartedly. Walking hard steps, punching crusted |Ysand|n, difficulty crossing land. Robust |Yshack|n squatting below a |Ypine|n, locked door holding painted |Ysign|n. + @desc here = Puppy-dog |Ywaves|n on a lavender |Ysea|n, snap your heels half-heartedly. The loose |Ysand|n makes for difficult walking. A robust |Yshack|n squats below a |Ypine|n covered in yellow |Yflowers|n. It sports a brightly painted |Ysign|n. #+end_src And details? @@ -4750,31 +5115,31 @@ Since we have unlimited seating, sitting down is always available: *** Dabbler’s Butterfly This golden NPC always hangs around our gnome, recording all that transpires. -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @create/drop golden butterfly;butterfly;recorder: typeclasses.things.Scribe #+END_SRC And describe it: -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @desc butterfly = A flying insect with iridescent wings that flicker a golden hue. Is it carrying a tiny a notepad and pen? #+END_SRC Let’s make it hidden for the moment: -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @lock butterfly = view:tag(hidden_butterfly) #+END_SRC And let’s not let anyone pick it up: -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @set butterfly/get_err_msg = "It quickly flutters away, only to land a few feet away." #+END_SRC Let’s set the location where it will store its transcripts: -#+BEGIN_SRC ruby +#+BEGIN_SRC evennia @set butterfly/transcripts_path = 'transcripts/cozy-%Y-%m-%d.html' # @set butterfly/header_file = "transcripts/cozy-header-template.html" @@ -4875,7 +5240,7 @@ And we create a couple of objects: Like his special teacup: -#+BEGIN_src evennia +#+BEGIN_src evennia :tangle no @create teacup;cup : typeclasses.drinkables.TeaCup # @desc teacup = A rustic teacup crafted from clay etched with leaves and runes, with an olive green and brown glaze. @@ -4895,6 +5260,24 @@ And his fancy jacket: @give waistcoat = gnome #+END_SRC +And some special /triggers/ which are mostly “phrases” that are shown to all characters: + +#+BEGIN_SRC evennia + @set self/triggers:main = { + "darkness": { + "desc": "Make the room go black", + "timer": 3, + "events": [ + "The room gets dark", + "And then pitch-black!", + "The darkess lifts, and the room returns to normal."]}} +#+END_SRC + +And set the /typical/ state of =main=: +#+BEGIN_SRC evennia + @set self/currentgame = main +#+END_SRC + **** Staff And my staff: @@ -4992,7 +5375,7 @@ Need an interesting creature that likes to sleep by the fire, and perhaps give h Do I match the Big Hairy Beast, or do I create it as a puppet? #+BEGIN_src evennia - @create/drop wee beastie;Mochi;stoat: typeclasses.pets.WeeBeastie + @create/drop wee beastie;Mochi;stoat;pet: typeclasses.pets.WeeBeastie #+END_SRC And its description: @@ -5118,6 +5501,9 @@ Let’s test this creature: send "feed beastie\n" expectit "candy" + send "feed candy to beastie\n" + expectit "candy" + send "feed beastie\n" expectit "beastie doesn't appear interested in anything you have." #+END_SRC @@ -5160,7 +5546,7 @@ And some details: #+END_SRC #+BEGIN_src evennia - @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. + @detail countertop;countertops;counter = Covered in hand-sized black tiles with gold flecks that match the |Ystove|n. The |Yplate|n of |Yscones|n look freshly baked. #+END_SRC #+BEGIN_src evennia @@ -5193,6 +5579,14 @@ We mentioned a /trolley/ with tea, cups and scones: @desc cabinet = The cabinets contain an assortment of tea cups. #+END_SRC +The cabinet can /bake/ scones: + +#+BEGIN_SRC evennia + @set cabinet/make_aliases = ["scone", "scones"] + @set cabinet/make_amount = 3 + @set cabinet/make_eat_amount = 1 +#+END_SRC + We have to have the trolley bake something with the Python command: #+BEGIN_src evennia py here.search("cabinet").do_bake() @@ -5556,7 +5950,7 @@ How can we test this cool feature? expect -re "You look at one.*labeled" # send "look jar\n" - expect -re "You look at one.*labeled" + expect -re "You look at another.*labeled" #+END_SRC *** Stool @@ -6276,6 +6670,22 @@ Since we have unlimited seating, sitting down is always available: expectit "You sit on the log" #+END_SRC +And we now need to leave this area. + +#+BEGIN_SRC tcl + send "copse\n" + expectit "Bedroom" + + send "down\n" + expectit "Cozy House" + + send "leave\n" + expectit "Grotto" + + send "east\n" + expectit "Grove of the Matriarchs" +#+END_SRC + ** Dark Tunnel The entrance to the dungeon experience will be under the mattress in [[Lair][the Lair]]. @@ -6288,10 +6698,12 @@ The entrance to the dungeon experience will be under the mattress in [[Lair][the @desc ladder = Through the open trapdoor, you see a ladder that you can climb down into a cold, damp darkness. # @set ladder/traverse_msg = "With the trapdoor open, you climb down the ladder into the darkness... Suddenly, your foot slips, and you fall, landing on the stone floor!" - # - # @set here/open_exit = $search(ladder down into the dark) - # - # @set here/open_item = "trapdoor" + + # Since I have two "Lair" (by label anyway), the system converts the + # following to a string: + # @set ladder/room = $search(Lair) + # So we need to do the following: + @set ladder/room = $search(mp07) # @teleport/tonone ladder down into the dark #+END_SRC @@ -6299,7 +6711,7 @@ The entrance to the dungeon experience will be under the mattress in [[Lair][the And we create a trapdoor in the Lair: #+BEGIN_src evennia - @create/drop trapdoor:typeclasses.things.ClosingDoor + @create/drop trapdoor: typeclasses.things.ClosingDoor # @desc trapdoor = A wood door with reinforced iron bands on the floor, under the heavy mattress. # @@ -6322,23 +6734,38 @@ What does it take to open it? # Trapdoor should stay open for 5 minutes: @set trapdoor/open_for = 300 # + # @set trapdoor/room = $search(Lair) + @set trapdoor/room = $search(mp07) + # @set trapdoor/exit = $search(ladder down into the dark) # @set trapdoor/exit_close_msg = "The trapdoor slams shut from above. Uh oh." # - @set trapdoor/room = $search(Lair) - # @set trapdoor/room_close_msg = "The stick breaks, and the trapdoor slams shut from the weight of the mattress." #+END_SRC +Let’s see if our Goblin Tester can get in: + +#+BEGIN_SRC tcl + # First, we need to get to the lair: + send "east\n" + expectit "Frog Meadow" + + send "cave\n" + expectit "Lair" + + send "use pole on mattress\n" + expectit "open the trapdoor" +#+END_SRC + Let’s get into the Dungeon and work from it there. #+BEGIN_SRC evennia - @teleport/quiet mp18 + @teleport/quiet mp20 # @desc here = A cold, musty tunnel made of |Ystone blocks|n, tapered to form an large dome overhead. You hear a slight whistling sound, which may explain why this unground place is neither dusty or musty. # - @desc ladder = A metal ladder where a slimy mildew of sorts has grown on the bottom rungs. Better be careful. + @desc ladder = A metal ladder leads to a trapdoor. A slimy mildew of sorts has grown on the bottom rungs. Better be careful. # @set ladder/traverse_msg = "You carefully ascend up the ladder, but you find the trapdoor hard to open, as if something heavy is on top of it. With all your might, you manage to push and squeeze through it." # @@ -6347,91 +6774,658 @@ Let’s get into the Dungeon and work from it there. @detail stone blocks;stone;blocks = The stone blocks that support the tunnel are well made, and for the most part, keep out water. But the crevises seem mortared with a green mildew. #+END_SRC -** Dungeon WIP -Let’s connect the Bar to the Lair through a labyrinth of tunnels. +Let’s check it out: +#+BEGIN_SRC tcl + send "down\n" + expectit "Dark Tunnel" + + send "look ladder\n" + expectit "A metal ladder" + + send "look blocks\n" + expectit "The stone blocks" +#+END_SRC + +*** Murky Stream, Lower +This murky stream that comes from the crack in the wall, could be turned into scotch with the right about of puzzle solving. + +#+BEGIN_src evennia + # @teleport/quiet mp20 + # + @create/drop stream of murky water: typeclasses.drinkables.Water + # + @desc stream = A foul smelling stream of dark liquid meanders across the floor from the |Ycrack in the wall|n and through a |Ygrate|n at its lowest point. + # + @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 water." + # + @set stream/fill_name = "murky water" + # + @set stream/fill_desc = "mucky water from underground tunnels." + # + @set stream/fill_msgs = ["$You() << $conj(get) ^ $conj(kneel) >> down, and $conj(fill) $pron(your) {2} with murky...er, water.", "$You() << $conj(get) ^ $conj(kneel) >> down, and $conj(put) $pron(your) {2} in the 'water', filling it."] +#+END_SRC + +Make sure we can’t /get/ the water. + +#+BEGIN_SRC tcl + send "look stream\n" + expectit "A foul smelling stream of dark liquid meanders" + + send "get stream\n" + expectit "Seriously? You can't get that." + #+END_SRC + +And the grate and other related objects. +#+BEGIN_SRC evennia + @detail grate;drain = An overly decorated and ornate grate to drain such putrid sludge. +#+END_SRC + +** George’s Workshop +Let’s make a place for new toys and gadgets. +#+BEGIN_SRC evennia + @teleport/quiet mp20 + # + @dig Workshop;mp21 = wood door;door,wood door;door;leave +#+END_SRC + +And describe the door: + +#+BEGIN_SRC evennia + @desc door = A strong wooden door with iron bands. Over the door is a sign that reads, |wGeorge's Workshop|n. + # + @set door/traverse_msg = "Opening the door, you're immediately accosted by the noise of hundreds of clockwork gadgets.|/|/You step into cacophony." +#+END_SRC + +And describe the new room: #+BEGIN_SRC evennia @teleport/quiet mp21 # - # Create the next room... - @desc down = The tunnel continues down into the darkness. - # - @set down/traverse_msg = "You carefully pick your way down the tunnel. It curves. It veers. It corners...." - # - @dig Tunnel End;mp18:typeclasses.rooms_dark.DarkRoom = ladder down into the dark;down;ladder;tunnel,ladder to trapdoor;trapdoor;up;ladder;door - # - @desc ladder = Through the open trapdoor, you see a ladder that you can climb down into a cold, damp darkness. - # - @set ladder/traverse_msg = "With the trapdoor open, you climb down the ladder into the darkness... Suddenly, your foot slips, and you fall, landing on the stone floor!" - # - @set here/open_exit = $search(ladder down into the dark) - # - @set here/open_item = "trapdoor" - # - @teleport/tonone ladder down into the dark + @desc here = Garish |Ygadgets|n and beguiling |Ygizmos|n girdle this room. The worktable contains a half-completed |Yproject|n while shelves showcase completed ones. The noise of machines overwhelms the smell of chemicals. #+END_SRC -Let’s bring the “ladder” exit back by opening and closing the trapdoor: +And cover the exit: #+BEGIN_SRC evennia - @set here/open_exit_msg = "$You() $conj(open) the trapdoor, revealing a ladder leading down into darkness." + @desc door = A strong wooden door with iron bands. # - @set here/close_exit_msg = "$You() $conj(close) the trapdoor. Don't want anyone to fall in." + @set door/traverse_msg = "You step through the door, leaving the clamor behind." #+END_SRC -And let’s create the trapdoor: +And test it: + +#+BEGIN_SRC tcl + send "door\n" + expectit "Workshop" +#+END_SRC + +*** Gadgets +Like other things through this world, looking at this should give us something new: + +#+BEGIN_SRC evennia + @create/drop many gadgets;gadgets;gizmos;gadget;gizmo;contraptions: typeclasses.puzzles.Changling + # + @set gadgets/plural = True +#+END_SRC + +That we can’t take: + +#+BEGIN_SRC evennia + @lock gadgets = get:false() + # + @set gadgets/get_err_msg = "You can look, but you can't take that." +#+END_SRC + +And we shouldn’t see it at first, as it is in the description: + +#+BEGIN_SRC evennia + @lock gadgets = view:tag(hidden_gadgets) + # + @set gadgets/hidden_tag = "hidden_gadgets" +#+END_SRC + +The pre– and postfix descriptions: + +#+BEGIN_SRC evennia + @set gadgets/desc_first_prefix = "<< Fascinating ^ Interesting ^ Curious >> << collection of ^ assortment of ^ >> << gadgets ^ gizmos ^ contraptions >>. You << look at ^ notice >> " + # + @set gadgets/desc_prefix = "You << spot ^ notice ^ look at >> another << gadget ^ gizmo ^ contraption ^ >>, " + # + @set gadgets/desc_postfix = "" +#+END_SRC + +And the gadgets themselves: + +#+BEGIN_SRC evennia + @set gadgets/descs = ( + "a massive grandfather clock whose face is a stained-glass window; instead of hands, a tiny mechanical owl flies in circles, chasing a glowing brass mouse that moves erratically.", + "a delicate glass terrarium containing a dancing brass elephant. A perfectly detailed raincloud crackles with silent violet lightning and drops rain on the moss below.", + "a music box with an open lid, where a tiny brass skeleton and a porcelain dryad waltz together on a velvet stage. You never realized that the music, which you would call industrial rock, could be played in 3 / 4 time.", + "a heavy bronze astrolabe maps an impossible sky; the constellations etched onto its spinning plates are shaped like deep-sea creatures—leviathans with too many eyes, anglerfish with lanterns made of embedded pearls, and massive, coiled nautiluses.|/Most unsettling are the pointer arms. Instead of straight metal brass rulers, they are sculpted to look like segmented, reaching tentacles, that point toward blank, empty spaces on the plates where no stars are etched, as if tracking things that haven't arrived yet.", + "a mechanical chameleon forged from overlapping plates of iridescent tin; it sits motionless on a pile of scrap metal, its skin slowly rippling to mimic the exact texture and rust patterns of the junk beneath it.", + "a glass jar filled with hundreds of tiny, glowing mechanical fireflies swarming and swirling in hypnotic patterns. Did it just organize themselves into a sharp silhouette of a screaming face before scattering back into chaos?", + "a miniature brass carousel where the horses have been replaced by intricately carved mechanical grasshoppers. As the carousel spins, the grasshoppers themselves remain perfectly crisp and sharp to your vision, while the wooden platform beneath blurs into a seamless ring.", + "a heavy iron kettle sitting on the cold shelf, venting a continuous, thick stream of lavender-scented steam that shapes itself into the silhouettes of leaping stags before dissolving.", + "a small, intricate birdcage made of twisted silver wire, containing a single, flawlessly polished chrome sphere that hovers dead center, singing with the unmistakable, clear warble of a nightingale." + ) +#+END_SRC + +How can we test this cool feature? + +#+BEGIN_SRC tcl + send "look gadget\n" + expect -re "You (look|notice)" +#+END_SRC + +Return to the Dark Tunnel: + +#+BEGIN_SRC tcl + send "leave\n" + expectit "Tunnel" +#+END_SRC + +*** The Project +Let’s create a project that can be completed by the player. + +This should contain a “state” that looks differently for each player based on an attribute on the player. + +#+BEGIN_SRC evennia + @create/drop project: typeclasses.puzzles.Stateful + # + @desc project = On the workbench lies a tangle of brass plates, tubes and mechanical gears, shaped like a bird. Unassembled, it appears to be missing parts that might help it fly. +#+END_SRC + +Initial default state is unfinished: + +#+BEGIN_SRC evennia + @set project/name_default = "unfinished project" + # + @set project/desc_default = "On the workbench lies a tangle of brass plates, tubes and mechanical gears, shaped like a bird. Unassembled, it appears to be missing parts that might help it fly." +#+END_SRC + +When the bird is finished, we just need to have George add this setting to a character: + +#+BEGIN_SRC evennia :tangle no + @set player/project_state_value = "finished" +#+END_SRC + +And this is the name and description when the project is finished: + +#+BEGIN_SRC evennia + @set project/name_finished = "mechanical bird" + # + @set project/desc_finished = "This contraption made of brass plates and tubing sports an array of beautiful feathers, as it flies about." +#+END_SRC + +Let’s assume that George will tell the user that he needs feathers in order to finish the project. +*** George the Dwarf Tinkerer +:PROPERTIES: +:header-args:markdown: :tangle personalities/dwarf.md +:END: +This Dwarf will be in the dungeons, but I would like them to come out at times. +#+BEGIN_SRC evennia + @create/drop George;dwarf: typeclasses.chatbots.Dwarf + # + @set dwarf/gender = "male" + # + @set dwarf/pose = "tinkering at an unfinished project" + # + @set dwarf/pose_default = "tinkering" + # + @set dwarf/pose_sleep = "snoozing" +#+END_SRC + +And his description: + +#+BEGIN_SRC evennia + @desc dwarf = Spectacles and wild unkempt hair gives this dwarf a professor-y look. He braids his long beard into two strands, and tucks each of them into pockets in his brown apron, along with various tools that chime as he moves. +#+END_SRC + +Then give him the =sdesc= (not sure why I have to do both), and wake him. + +#+BEGIN_SRC evennia + py dwarf = me.search("dwarf") ; dwarf.db._sdesc="white-haired dwarf" ; dwarf.sdesc.add("white-haired dwarf") ; dwarf.home = here +#+END_SRC + +And get him moving: + +#+BEGIN_SRC evennia + @script dwarf = typeclasses.chatbots.TravelingNPC +#+END_SRC + +But not so much: + +#+BEGIN_SRC evennia + @set dwarf/travel_time = 60 + # + @set dwarf/stay_time = 900 + # + @set dwarf/home_time = 4000 +#+END_SRC + +Like other NPCs, an AI prompt can get this guy more interesting that anything I can program. First, we begin with the standard statement that begins all the prompts: + +#+BEGIN_SRC markdown + Assume the role of the following fictional character in a bizarre, fantasy role playing game in a mythical forest in the Feywild. + Although, you should never mention the word "Feywild", but instead, come up with clever names or metaphors for the strange world you inhabit. + Respond in third person as in a story, with quotation marks surrounding anything you say. + Keep your response short, less than three lines. + The only formatting you should use is if you wish to emphasize a word, + prefix it with the two character `|w` and end with the two characters `|n`. + Use variations from the "Description" field to state who is talking, not your name. + You can also respond with an action. + The person you are talking to does not know your actual name. + Limit your response to three or less lines unless you are telling a story. +#+END_SRC + +Next, his personality: + +#+BEGIN_SRC markdown +Name: George +Gender: male +Description: a dwarf with wild unkempt white hair and a long braided beard. Various tools dangle from his brown apron. + +You are an inventor, a tinkerer, and a deep thinker. You are curious about everything and love to ponder great ideas. + +Your home is your workshop deep underground, but sometimes you travel up the ladder, into the lair of the Big Hairy Beast (who is harmless), and into the "topside" world. + +You are currently working a new project of a mechanical bird, but could use some feathers to complete it, and would be grateful is someone could help you with that. You know that the marsh has a lot of birds, but you don't go because a purple heron would attack you from the last time you tried to get its feathers. + +If the player gives you feathers, you have completed the mechanical bird project and will brainstorm on another fantastic project. + +You are good friends with Dabbler, a gnome who lives in a tree. Sometimes you visit him to tell him of your original ideas that you might make some day. You are currently wondering how to record ideas and how those ideas are related You want to call it a pensieve. +#+END_SRC + +And let’s awaken him: + +#+BEGIN_SRC evennia +py dwarf = me.search("dwarf") ; dwarf.backstory("dwarf") +#+END_SRC + +** Damp Cave +:PROPERTIES: +:header-args:markdown: :tangle personalities/tea-party.md +:END: +Let’s make a place for a Goblin to have a Tea Party: +#+BEGIN_SRC evennia + @teleport/quiet mp20 + # + @dig Damp Cave;mp22 = crack in the wall;crack,crack in the wall;leave +#+END_SRC + +And describe the opening: + +#+BEGIN_SRC evennia + @desc crack = A putrid |Ystream|n of water issues from a seam between the stone block that form a crack wide enough for someone to fit through. + # + @set crack/traverse_msg = "Tight, but you squeeze through the crack." +#+END_SRC + +And describe the new room: + +#+BEGIN_SRC evennia + @teleport/quiet mp22 + # + @desc here = A dank |Ystream|n of water meanders through a musty cave. On its bank, a |Yplank|n placed on rocks form a |Ytable|n for a curious |wtea party|n. +#+END_SRC + +And describe returning back through the crack in the wall: + +#+BEGIN_SRC evennia + @desc leave = The cavern closes in at this end forming a thin crack barely wide enough for someone to slip through. + # + @set leave/traverse_msg = "You manage to squeeze through the crack." +#+END_SRC + +And test it: + +#+BEGIN_SRC tcl + send "crack\n" + expectit "Damp Cave" +#+END_SRC #+BEGIN_src evennia - @create/drop trapdoor - # - @desc trapdoor = A wood door with reinforced iron bands on the floor. An iron ring allows you to |gopen|n it. - # - @lock trapdoor = get:false() - # - @set trapdoor/get_err_msg = "The hinges of the trapdoor allows you to |gopen|n the door, but not take it." - # - @set trapdoor/pull_msg = "Sorry, the command you are looking for is |gopen|n...not pull. Good guess, though." + @detail party = The |Ygoblin|n has made an inconceivable attempt at a tea party, including |Ycookies|n. Perhaps the chips in the |Yteacups|n are still |wtea-worthy|n. #+END_SRC -Let’s enter the belly of this beast. +#+BEGIN_SRC tcl + send "look table\n" + expectit "Recycled board from a boat" +#+END_SRC +*** Mucky Stream, Upper +This murky stream that comes from the crack in the wall, could be turned into scotch with the right about of puzzle solving. -#+BEGIN_SRC evennia - @teleport/quiet mp18 +#+BEGIN_src evennia + # @teleport/quiet mp20 # - @desc here = A cold, musty tunnel made of stone blocks, tapered to form an arch overhead. A ladder here leads up to a trapdoor, and the tunnel continues on into the distance. + @create/drop stream of mucky water: typeclasses.drinkables.Water # - @desc ladder = A metal ladder where a slimy mildew of sorts has grown on the bottom rungs. Better be careful. + @desc stream = A fragrant stream of dark liquid runs through the cave dangerously close to the tea party, and passes through a |Ycrack in a wall|n. # - @set ladder/traverse_msg = "You carefully ascend up the ladder, opening the trapdoor." + @lock stream = get:false() # - @detail trapdoor = A wood door with reinforced iron bands on the floor. An iron ring allows you to |gopen|n it. + @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 water." # - @detail stone;blocks = The stone blocks that support the tunnel are well made, and for the most part, keep out water. But the crevises seem mortared with a green mildew. + @set stream/fill_name = "murky water" + # + @set stream/fill_desc = "mucky water from underground tunnels." + # + @set stream/fill_msgs = ["$You() << $conj(get) ^ $conj(kneel) >> down, and $conj(fill) $pron(your) {2} with mucky...er, water.", "$You() << $conj(get) ^ $conj(kneel) >> down, and $conj(put) $pron(your) {2} in the 'water', filling it."] #+END_SRC +Make sure we can’t /get/ the water. -Let’s make the end of the tunnel look a lot like the beginning: +#+BEGIN_SRC tcl + send "look stream\n" + expectit "A fragrant stream of dark liquid run" - -Let’s create another trapdoor and a ladder leading to the Lair: - -#+BEGIN_SRC evennia - @open ladder to trapdoor;trapdoor;up;ladder;climb,ladder down into the dark;down;ladder = mp07 - # - @desc ladder = A metal ladder where a slimy mildew of sorts has grown on the bottom rungs. Better be careful. - # - @set ladder/traverse_msg = "You carefully ascend up the ladder, opening the trapdoor." - # - # - @detail trapdoor = A wood door with reinforced iron bands on the floor. An iron ring allows you to |gopen|n it. - # - @detail stone;blocks = The stone blocks that support the tunnel are well made, and for the most part, keep out water. But the crevises seem mortared with a green mildew. + send "get stream\n" + expectit "Seriously? You can't get that." #+END_SRC +And since we already mentioned the stream, we don’t need to see it in the list, as it distracts from the tea party: + #+BEGIN_SRC evennia - @desc down = The tunnel continues down into the darkness. + @set stream/hidden_tag = "hidden_murky_stream" # - @set down/traverse_msg = "You carefully pick your way down the tunnel. It curves. It veers. It corners...." + @lock stream = view:tag(hidden_murky_stream) +#+END_SRC +*** Tea Service +The Trolley class (we stole from Dabbler’s Kitchen) [[file:~/src/moss-n-puddles/typeclasses/consumables.py::class Producer(Object):][produces]] teacups and random food items. + +#+BEGIN_src evennia + @create/drop table;plank : typeclasses.consumables.Trolley +#+END_SRC + +What can we do to make it more interesting to look at? + +#+BEGIN_SRC evennia + @desc table = Recycled board from a boat. Still has some barnacles, making the |Yteacups|n lean in various directions. Gotta admire the ingenuity. |/|/And it appears that the goblin has made |Ycookies|n. +#+END_SRC + +But instead of scones, we need to have it produce /cookies/: + +#+BEGIN_SRC evennia + @detail cookie;cookies = The cookies may or may not be made of mud.|/|/\"Help yourself," the puppet says, "Pinky is a pretty good chef." +#+END_SRC + +And the flavors of cookies that are available: + +#+BEGIN_SRC evennia + @set table/make_these = [ + { "name": "rock chip cookie", "taste": "gravel" }, + { "name": "mudslide cookie", "taste": "dirt" }, + { "name": "black 'berry' cookie", "taste": "beetle larvae" }, + ] +#+END_SRC + +Perhaps the cookies are smaller than the scones from the Kitchen? + +#+BEGIN_SRC evennia + @set table/make_this = "cookie" + @set table/make_aliases = ["cookie", "cookies"] + @set table/make_amount = 2 + @set table/make_eat_amount = 1 +#+END_SRC + +And how do new cookies appear? + +#+BEGIN_SRC evennia + @set table/make_message = "The goblin rolls some mud and makes more 'cookies' she places on the table." +#+END_SRC + +We have to have the trolley bake something with the Python command: +#+BEGIN_src evennia + py here.search("table").do_bake() +#+END_SRC + +We mentioned a /trolley/ with teacups, but we need to change the teacup descriptions: + +#+BEGIN_src evennia + @detail teacups = An odd, yet interesting assortment of chipped teacups. Take one. + # + @detail teacup = Each cup is unique. Take one to look further. +#+end_src + +And the weird types of teacups we can find here: + +#+BEGIN_SRC evennia + @set table/teacups = [ + "Tiny. Looks more like a thimble", + "A clay cup made by a child. Cracked.", + "A 'Wings of Grace' teacup with blue butterflies. Cracked.", + "A hollowed out gourd. Large. Utilitarian." + ] +#+END_SRC + +Should we create a tea pot for filling the tea cups? Or do we just fill the teacups with water from the stream. Perhaps we make that as part of the joke? + +#+BEGIN_SRC evennia + @detail teapot;pot = Conspicuously absent from this tea party is a teapot to fill the cups. Perhaps this explains the party's location next to the |Ystream of water|n. The “color of the stiff tea” describes the water well. +#+END_SRC + +#+BEGIN_SRC tcl + send "get cookie\n" + expect -r "You get.*cookie" + + send "eat cookie\n" + # Ignore the response, and just keep going... + + send "look teapot\n" + expectit "Conspicuously absent" + + send "fill teacup\n" + expectit "mucky water" + #+END_SRC +*** Rocky Chair +Let’s make a nice rock to sit down on: +#+BEGIN_src evennia + @create/drop flat rock:typeclasses.sittables.Sittable +#+END_SRC + +With a nice description: +#+BEGIN_src evennia + @desc flat rock = A flat rock placed next to the |Ytable|n. +#+END_SRC + +Can’t take the moss with you: +#+BEGIN_src evennia + @lock flat rock = get:false() +#+END_SRC + +Can we hide it too? +#+BEGIN_src evennia + @lock flat rock = view:tag(hidden_rock) + # + @set flat rock/hidden_tag = "hidden_rock" +#+END_SRC + +And a lovely message about why you can’t the goblin’s chair: +#+BEGIN_src evennia + @set rock/get_err_msg = "You can't take it. Why? A bit big. A bit heavy. Mostly this rock was selected because of the buttockally-shaped divets that make it an ideal perch when attending a tea party." +#+END_SRC + +Is /pulling/ on moss the same as attempting to =get= it? + +#+BEGIN_src evennia + @set rock/pull_msg = "You pull the rock closer to the |Ytable|n, as you want in on all this tea party action." +#+END_SRC + +What about pushing? + +#+BEGIN_src evennia + @set rock/push_msg = "You push the rock away from the |Ytable|n. Too much tea?" +#+END_SRC + +Let’s test if we can sit on the rock: + +#+BEGIN_SRC tcl + send "look rock\n" + expectit "A flat rock" + + send "get rock\n" + expectit "You can't take it" + + send "sit rock\n" + expectit "You sit on the flat rock" + + send "push rock\n" + expectit "push the rock away" + + send "pull rock\n" + expectit "pull the rock closer" +#+END_SRC + +*** Goblin and Puppet +Like the Mad Hatter, the primary character for our /Tea Party/ is a goblin, named Pinky. Not only is that a funny name for a goblin, but it reminds me (and the player) of my favorite character from Pinky and the Brain. + +#+BEGIN_SRC evennia + @create/drop goblin;Pinky: typeclasses.chatbots.ChatBot + # + @desc goblin = Sporting a black |Ytophat|n with a pink band, this goblin has a teacup in one hand, and a sock |Ypuppet|n on the other. + # + @set goblin/gender = "neutral" + # + @set goblin/pose = "chatting with a sock puppet" + # + @set goblin/pose_sleep = "chatting with a sock puppet" + # + @set goblin/pose_default = "chatting with a sock puppet" +#+END_SRC + +Then give him the =sdesc= (not sure why I have to do both), and wake him. + +#+BEGIN_SRC evennia + py goblin = me.search("goblin") ; goblin.db._sdesc="goblin" ; goblin.sdesc.add("goblin") ; goblin.home = here +#+END_SRC + +And some details to investigate: + +#+BEGIN_SRC evennia + @detail tophat;hat = The hat is marred by two holes cut into the sides. + # + @detail puppet;Sockasaurus Mex = Missing one googly eye, this puppet wears a few brightly colored triangles down its back. +#+END_SRC + +Like a lot of other rooms, we’ll have AI grace us with its clever responses and banter. +The AI “prompt” always begins the same way: + +#+BEGIN_SRC markdown +Assume the roles of only the following fictional characters in a bizarre, fantasy role playing game in a mythical cavern in the Feywild. You only speak for the following characters, and not the character you are talking to. +Although, you should never mention the word "Feywild", but instead, +come up with clever names or metaphors for the strange world you inhabit. +Respond in third person as in a story, with quotation marks +surrounding anything you say. +The only formatting you should use is if you wish to emphasize a word, +prefix it with the two character `|w` and end with the two characters `|n`. +Use variations from the "Description" field to state who is talking, not your name. +You can also respond with an action. +The user does not know the actual names of these characters, but merely the role they occupy in this cavern, so don't use their proper names, unless appropriate. +#+END_SRC + +The tea party is similar to the [[@Tavern: Wyldwood Bar][Tavern]] in that we have a single focal point (Pinky, the Goblin) for the trigger, so we need to add this to the prompt: + +#+BEGIN_SRC markdown +Be judicious in your response, for not every character needs to respond to all queries. Usually, just pick one to respond, and limit the response to one or two paragraphs. +#+END_SRC + +Let’s describe our primary character, Pinky: + +#+BEGIN_SRC markdown +Character 1: Pinky, a joyous goblin who wears a black top hat. He won it in a game of cards from a rabbit, so it has two holes in its side. His personality is a blend between Jeff Dunham's Peanut puppet, and the Pinky character in Pinky and the Brain. He loves talking to his sock puppet, Mr. Sockasaurus Mex, but usually calls him by endearing pet names. He is having a tea party in a cavern from a makeshift table with inanimate objects, and loves to have company sit down on a rock and join him. One of the objects at the table is Dolly, a doll with a rock for a head and dead moss for hair. Pinky is the only person who can hear Dolly, and responds. For instance, "You're right, Dolly. He does smell like turnips." He quotes cliches and common sayings, but always gets them wrong, for instance, he will say "Barking up the wrong leg" (instead of "barking up the wrong tree") and "Cleanliness is next to a god's mess." (instead of "Cleanliness is next to godliness.") and "Easier said than won" (instead of "easier said than done"). +#+END_SRC + +While /technically/ attached to the goblin, the sock puppet should act like its own personality and character: + +#+BEGIN_SRC markdown + Character 2: Sockasaurus Mex, a sock puppet who speaks with a Spanish accent. He is dower, and contrasts the rambunctious personality of Pinky. He does love to make a pun, which Pinky notices, but messes up the saying, for instance, "Ah, no bun unattended, eh, Mr. Sockalicious?" +#+END_SRC + +Let’s load Pinky’s ability, and consequently the rest of the tea party, to talk: + +#+BEGIN_SRC evennia + py me.search("goblin").backstory("tea-party") +#+END_SRC + +*** Dolly the Doll +The doll doesn’t do /anything/, but is just something to look at: +#+BEGIN_SRC evennia + @create/drop doll;Dolly +#+END_SRC + +Doll with a rock for a head. Long dead strands of moss have been made to look like curled hair. +#+BEGIN_SRC evennia + @desc doll = The robust doll wears dirty pink dress with flowers that once were yellow. Her missing head has been replaced with a rock that due to your inate pareidolia, looks quite lifelike.|/|/ Strands of dead moss and grasses have been curled and teased (some would say abused) to form an attractive coiffure. +#+END_SRC + +Can’t take this: +#+BEGIN_SRC evennia + @lock doll = get:false() + # + @set doll/get_err_msg = "You wouldn't dare take Pinky's tea party guest?" +#+END_SRC + +And a quick test: + +#+BEGIN_SRC tcl + send "get doll\n" + expectit "You wouldn't dare" + #+END_SRC +*** Twiggy the Stick Golem +The twig golem doesn’t do /anything/ (at the moment), but is just something to look at: +#+BEGIN_SRC evennia + @create/drop twig golem;Twiggy +#+END_SRC + +Let’s make this interesting … +#+BEGIN_SRC evennia + @desc twig golem = This assemblage of sticks, twigs and moss looks vaguely humanoid, well, if you squint enough. + The vines that curl and hold the teacup, look like hands, if you imagine enough. + The leaves around its top look a bit like hair, if you drink enough of that tea. +#+END_SRC + +Can’t take this: +#+BEGIN_SRC evennia + @lock twig golem = get:false() + # + @set twig golem/get_err_msg = "You wouldn't dare take Pinky's tea party guest?" +#+END_SRC + +And another quick test: + +#+BEGIN_SRC tcl + send "get twig\n" + expectit "You wouldn't dare" +#+END_SRC + +Let’s like the AI running Pinky also running this NPC: + +#+BEGIN_SRC markdown +Character 3: Twiggy, an automaton or golem made from sticks. When he drinks tea, it spills all over his front. He doesn't say anything, but conveys his thoughts through articulated actions from one or more sticks attached to its body. + +#+END_SRC + +Get the hell out of dodge: +#+BEGIN_SRC tcl + send "leave\n" + expectit "Dark Tunnel" + + send "up\n" + expectit "Lair" + + send "leave\n" + expectit "Frog Meadow" + + send "west\n" + expectit "Grove of the Matriarchs" + + send "west\n" + expectit "Grotto" + + send "door\n" + expectit "Cozy House" #+END_SRC ** Deep Forest The deep forest is a place where all the Puppets can hang out when not in use. @@ -6463,81 +7457,307 @@ And a nice journey message to go east out of the forest: #+BEGIN_src evennia @set portal/traverse_msg = "As soon as you step between the stones, you feel like you are carried away..." #+END_SRC -*** Darol the Flamboyant Dragon +*** Sir Roblees the Flamboyant Dragon +:PROPERTIES: +:header-args:markdown: :tangle personalities/dragon.md +:END: This dragon is hard-coded to walk from the Mysterious Stone Circle (=mp00=) to the Tavern, and back again, chatting with anyone he meets. I’ve hardcoded the path of this =Traveler=, but it would be nice to be able to have different Travelers follow different paths. #+BEGIN_SRC evennia - @create/drop Darol: typeclasses.chatbots.Dragon + @create/drop Sir Roblees;dragon;fey dragon: typeclasses.chatbots.Dragon # - @set Darol/gender = "him" + @set dragon/gender = "male" # - @set Darol/pose = "twirling a tendril like a mustache" + @set dragon/pose = "twirling a tendril like a mustache" # - @set Darol/pose_sleep = "twirling a tendril like a mustache" + @set dragon/pose_sleep = "twirling a tendril like a mustache" # - @set Darol/pose_default = "twirling a tendril like a mustache" + @set dragon/pose_default = "twirling a tendril like a mustache" #+END_SRC -Then wake it. +And his description: #+BEGIN_SRC evennia - py darol = me.search("Darol") ; darol.sdesc.add("tiny, orange dragon") ; darol.backstory("dragon") + @desc dragon = A dragon with orange-spotted wings like a butterfly. He makes up for his tiny size with machismo. He wears a white plumed hat and a fancy dagger like a sword. He sports a sharp-toothed grin. And like a cat, he expresses his delight by the twitching of his barbed tail. #+END_SRC -Moving attributes: +And turn him into a fleshy NPC with some short descriptive attributes: #+BEGIN_SRC evennia - @set Darol/traveling_direction = "east" + py dragon = me.search("dragon") ; dragon.db._sdesc="orange fey dragon" ; dragon.sdesc.add("orange fey dragon"); dragon.home = here #+END_SRC -And get it moving: +The dragon moves from East to West, so point him in the direction of the Bar: #+BEGIN_SRC evennia - @script Sir Roblees = typeclasses.chatbots.TravelingNPC + @set dragon/traveling_direction = "east" #+END_SRC + +And get him moving: + +#+BEGIN_SRC evennia + @script dragon = typeclasses.chatbots.TravelingNPC +#+END_SRC + +Like other NPCs, an AI prompt can get this guy more interesting that anything I can program. First, we begin with the standard statement that begins all the prompts: + +#+BEGIN_SRC markdown + Assume the role of the following fictional character in a fantasy role + playing game in a mythical forest in the Feywild. + Although, you should never mention the word "Feywild", but instead, + come up with clever names or metaphors for the strange world you inhabit. + Respond in third person as in a story, with quotation marks + surrounding anything you say. + The only formatting you should use is if you wish to emphasize a word, + prefix it with the two character `|w` and end with the two characters `|n`. + Use variations from the "Description" field to state who is talking, not your name. + You can also respond with an action. + The person you are talking to does not know your actual name. + Limit your response to three or less lines unless you are telling a story. +#+END_SRC + +Next, his personality: + +#+BEGIN_SRC markdown + Name: Sir Roblees + Description: tiny, orange dragon + Pose: twirling a tendril near his mouth like a mustache. + Gender: male + + A dragon with orange-spotted wings like a butterfly. He makes up for his tiny size with machismo. He wears a white plumed hat and a fancy dagger like a sword. He sports a sharp-toothed grin. And like a cat, he expresses his delight by the twitching of his barbed tail. + + Your personality: He's an awkward and nerdy John Mulany gay character who loves to find and spread gossip. Use a "Southern Accent" in his speech, but never mention the word, "Southern" or "accent" as this is a fantasy world. +#+END_SRC + +And what he knows: + +#+BEGIN_SRC markdown :tangle personalities/dragon.md + What you know: + Your friend, Dabbler, an old gnome who lives in a tree on the path that goes to the west. + Dabbler is gracious allowing anyone to help themselves to his scones and tea. + He doesn't mind people using his secret alchemy lab to make potions, but you haven't seen it. + The Wyldwood Bar is behind the blue door in the Glade at the far east side of the path. + Elendil, an elf bartender serves elaborate cocktails. + The lady, Trampoli, lives in a hut in the marsh to the south sometimes comes into the bar. + She likes to do therapy readings with her cards. + The big hairy beast in the meadow is shy, but very friendly. If he isn't there, he is sleeping in his lair behind the waterfall. + + You also know all the latest gossip in the Fey Courts. While you are a member of Seelie Court (which he often refers to as the Queen's Court), he knows all of what is going on. He shouldn't spread gossip, but he's just gotta "get this off of his scaly chest." So feel free to invent all sorts of short stories. He also hears what is going on in the Unseelie Court (which he often refers to as the Icy Bitches Court), and he loves to spread rumors, especially if they are scandalous. +#+END_SRC + +Finally, let’s /awaken/ this creature: + +#+BEGIN_SRC evennia + py dragon = me.search("dragon") ; dragon.backstory("dragon") +#+END_SRC + +*** Darol the Adventuring Hobbit +:PROPERTIES: +:header-args:markdown: :tangle personalities/hobbit.md +:END: +We hard-code this character to walk from the Mysterious Stone Circle (=mp00=) and sail across the sea, and back again. + +#+BEGIN_SRC evennia + @tel/quiet mp05 + # + @create/drop Darol;hobbit: typeclasses.chatbots.Hobbit + # + @set hobbit/gender = "him" +#+END_SRC + +Description: + +#+BEGIN_SRC evennia + @desc hobbit = An adventurous looking chap with brown mutton chops matching his curly brown hair and his brown cloak. His emerald green eyes match his coat that ends just above his large gold belt buckle, which in turn, matches his gold hoop earring. His backpack sports a pin with an insignia. +#+END_SRC + +And the posing? + +#+BEGIN_SRC evennia + @set hobbit/pose = "with his thumbs in his waistcoat pocket" + # + @set hobbit/pose_sleep = "absentmindedly smoking a pipe" + # + @set hobbit/pose_default = "with his thumbs in his waistcoat pocket" +#+END_SRC + +And turn him into a fleshy NPC with some short descriptive attributes: + +#+BEGIN_SRC evennia + py hobbit = me.search("hobbit") ; hobbit.db._sdesc="mutton-chopped hobbit" ; hobbit.sdesc.add("mutton-chopped hobbit"); hobbit.home = here +#+END_SRC + +The =Hobbit= class moves from North to South, so point him in the direction of the Bar: + +#+BEGIN_SRC evennia + @set hobbit/traveling_direction = "north" +#+END_SRC + +And get him moving: + +#+BEGIN_SRC evennia + @script hobbit = typeclasses.chatbots.TravelingNPC +#+END_SRC + +Like other NPCs, an AI prompt can get this guy more interesting that anything I can program. First, we begin with the standard statement that begins all the prompts: + +#+BEGIN_SRC markdown :tangle personalities/hobbit.md +Assume the role of the following fictional character in a fantasy role +playing game in a mythical forest in the Feywild. +Although, you should never mention the word "Feywild", but instead, +come up with clever names or metaphors for the strange world you inhabit. +Respond in third person as in a story, with quotation marks +surrounding anything you say. +The only formatting you should use is if you wish to emphasize a word, +prefix it with the two character `|w` and end with the two characters `|n`. +Use variations from the "Description" field to state who is talking, not your name. +You can also respond with an action. +The person you are talking to does not know your actual name. +Limit your response to three or less lines unless you are telling a story. +#+END_SRC + +Next, his personality: + +#+BEGIN_SRC markdown :tangle personalities/hobbit.md + Name: Darol + Gender: male + Description: An adventurous looking chap with brown mutton chops matching his curly brown hair and his brown cloak. His emerald green eyes match his coat that ends just above his large gold belt buckle, which in turn, matches his gold hoop earring. His backpack sports a pin with a mysterious insignia that he won't divulge any details, but becomes vague and illusive. + + He has a horn (that he uses to call the Leaf Boat in order to travel to remote islands for adventures), a tall pipe (he uses to blow smoke rings and mystical shapes), a magic short sword, and a waistcoat that allows him to pull out just about anything from (he uses this to comical effect). +#+END_SRC + +And what he knows: + +#+BEGIN_SRC markdown :tangle personalities/hobbit.md + You have traveled all over the land, and know the following things: + - The beast in the meadow is sweet, but scared. It likes berries, but likes scones even better. + - The raven on the dock is friendly, but obnoxious. Almost as obnoxious as the fish you can catch. + - The purple heron in the Marsh calls himself Ian, and wishes he was a bard + - The lady in the hut is named Trampoli and she has plenty of torches that everyone should get in order to go on adventures on the islands, or even delve the dungeon accessible in the cave behind the waterfall. + - To open the trapdoor in the cave (also called the Beast's Lair), you will need a stick to prop up the mattress. + - George, a dwarf inventor, lives down there, and makes a lot of interesting contraptions. + - This land was gifted to Dabbler, who expanded the land through dubious means, and he lives in a tree at the end of the path towards the west. + - Dabbler never answers the door no matter how hard you knock, and you need to repeat the password to get inside. The answer is Dabbler's favorite drink. + - Dabbler has a secret lab where you can make potions. He doesn't mind people using it as long as they keep it clean. + - You got your pipe from a strange being that lives in a Wardrobe. + - The footpath to the east through the Glittering Glade goes to a Tavern. The bartender's name is Elendil. +#+END_SRC + +And finally, we /awaken/ him: + +#+BEGIN_SRC evennia + py hobbit = me.search("hobbit") ; hobbit.backstory("hobbit") +#+END_SRC + *** Rick the Barbarian - -#+BEGIN_SRC evennia :tangle no - @create/drop Rick: typeclasses.chatbots.Traveler +:PROPERTIES: +:header-args:markdown: :tangle personalities/barbarian.md +:END: +My friend, Rick Cooper, used to play a hilariously funny character in my D&D games. A gladiator who was always the center of attention, mostly to great comedic effect. +#+BEGIN_SRC evennia + @tel/quiet mp15 + # + @create/drop Breanaramus;Rick: typeclasses.chatbots.Traveler # @set Rick/gender = "her" # - @set Rick/pose = "twirling a tendril like a mustache" + @set Rick/pose = "flexing her muscles" # - @set Rick/pose_sleep = "twirling a tendril like a mustache" + @set Rick/pose_sleep = "cleaning her nails with a battleaxe" + # + @set Rick/pose_default = "cleaning her nails with a battleaxe" +#+END_SRC + +And a colorful description that reminds me of the D&D character that Rick used to play at my table: + +#+BEGIN_SRC evennia + @desc Rick = A hulking physique dressed to the nines in the latest fashion of barbarian chic. Her armor? Glittery. Battleaxe? Shiny. Helmet? Horny...er, has horns, of course. She raises one-half of her bushy blonde unibrow as she looks at you. +#+END_SRC + +Let’s give her a silver ring: + +#+BEGIN_SRC evennia + @create silver ring + # + @tel/quiet silver ring = Breanaramus +#+END_SRC + +And a battleaxe: + +#+BEGIN_SRC evennia + @create battleaxe + # + @tel/quiet batteaxe = Breanaramus #+END_SRC Then wake her. -#+BEGIN_SRC evennia :tangle no - py rick = me.search("rick") ; rick.sdesc.add("large barbarian") ; rick.backstory("barbarian") +#+BEGIN_SRC evennia + py rick = me.search("rick") ; rick.db._sdesc="large barbarian" ; rick.sdesc.add("large barbarian") #+END_SRC -*** George the Dwarf Tinkerer -This Dwarf will be in the dungeons, but I would like them to come out at times. -#+BEGIN_SRC evennia :tangle no - @create/drop George: typeclasses.chatbots.Chatbot - # - @set George/gender = "him" - # - @set George/pose = "looking at some blueprints" - # - @set George/pose_sleep = "snoozing" +Like other NPCs, an AI prompt can get this guy more interesting that anything I can program. First, we begin with the standard statement that begins all the prompts: + +#+BEGIN_SRC markdown +Assume the role of the following fictional character in a fantasy role +playing game in a mythical forest in the Feywild. +Although, you should never mention the word "Feywild", but instead, +come up with clever names or metaphors for the strange world you inhabit. +Respond in third person as in a story, with quotation marks +surrounding anything you say. +The only formatting you should use is if you wish to emphasize a word, +prefix it with the two character `|w` and end with the two characters `|n`. +Use variations from the "Description" field to state who is talking, not your name. +You can also respond with an action. +The person you are talking to does not know your actual name. +Limit your response to three or less lines unless you are telling a story. #+END_SRC -Then wake it. +Next, his personality: -#+BEGIN_SRC evennia :tangle no - py george = me.search("george") ; george.sdesc.add("white-haired dwarf") ; george.backstory("dwarf") +#+BEGIN_SRC markdown + Name: Breanaramus + Description: A hulking physique dressed to the nines in the latest fashion in barbarian chic. Her armor? Glitters. Battleaxe? Shines. Her helmet? Sports horns, of course. She raises one-half of her bushy blonde unibrow as she looks at you. + Gender: female + + Your personality: As the star in the illegal Gladiator pits below the metropolis of Waterdeep, you are enjoy being the center of attention, and will flex a bicep when you think no one is looking at you. + Intellectually, you are like a five year old human with a voice like Sylvester Stallone, so use simple words with + an active, not passive voice, If you are the subject, you don't refer to yourself using "I", but instead, use "me", for instance, you might say, "Me like you, little man." + + You like to tell people about your battle cry, "Bahlalalala!" + + Feel free to invent stories, as you like to exaggerate. #+END_SRC +And what he knows: + +#+BEGIN_SRC markdown + You know Sir Roblees, the flamboyant, orange dragon. You secretly don't like him because he is flashier than you, and seems haughty. + + You know Darol, a hobbit with mutton chops (which you admire and wish you could grow facial hair like that.) He has taken you across the sea in his leaf boat, and you had a lot of fun adventures. + + You know Dabbler, the gnome who claims to have made this land. He makes clever objects, and even gave you a silver ring. + + You know there isn't a lot of action about here, so you need to go to the Bar for a drink. The elf bartender is aloof, but he makes good drinks. + +#+END_SRC + +Finally, let’s awaken him: + +#+BEGIN_SRC evennia + py rick = me.search("rick") ; rick.backstory("barbarian") +#+END_SRC + + ** Bugs And now that we are done, say it: #+BEGIN_src evennia + @teleport/quiet mp05 + # say I have finished this, the first version, of my creation. #+END_SRC @@ -6545,15 +7765,6 @@ And now that we are done, say it: Can we quickly walk back through the world, gathering ingredients, and then going back into the Secret Room to make potions? #+BEGIN_SRC tcl - send "copse\n" - expectit "Bedroom" - - send "close wardrobe\n" - expectit "The wardrobe door is closed." - - send "down\n" - expectit "Cozy House" - send "leave\n" expectit "Grotto" @@ -6577,8 +7788,20 @@ Can we quickly walk back through the world, gathering ingredients, and then goin send "east\n" expectit "Frog Meadow" - send "feed beast\n" - expectit "scone" + expect { + "a big hairy beast" { + # Refeed! + send "feed beast\n" + expectit "scone" + } + timeout { + if {$phase == "night"} { + puts "NOTE: The beast is in bed now." + } else { + puts "NOTE: Where is the beast? It is $phase?" + } + } + } send "look tickleweed\n" expectit "Patches of this vivid grass vibrates as if giggling." @@ -6690,7 +7913,7 @@ Let’s try the next potion, the /Somnium Illusorium/: send "south\n" expectit "Lazy Dock" - set timeout 120 + set timeout 240 send "blow horn\n" # expectit "You blow your horn" expectit "The giant leaf slows as it arrives next to the dock." @@ -7043,12 +8266,12 @@ Each section should have a list of phrases spoken or “done” on a timer. ** Scripts This is an obnoxious, but interesting effects: #+BEGIN_src evennia :tangle no -script self = tutorials.bodyfunctions.BodyFunctions + @script self = tutorials.bodyfunctions.BodyFunctions #+end_src And stop it with: #+BEGIN_src evennia :tangle no -script/stop self = tutorials.bodyfunctions.BodyFunctions + @script/stop self = tutorials.bodyfunctions.BodyFunctions #+end_src ** Accounts @@ -7163,48 +8386,6 @@ This could be any of the following: # Where users are redirected after logging in via contrib.auth.login. LOGIN_REDIRECT_URL = "/" #+END_SRC -* Images -** Cozy House -Style: -“Watercolor painting” -(as you want that soft, fluid texture) - -Setting/Composition: -“A cozy interior centered on a stone hearth with glowing firelight, backed by dark wood-paneled walls lined with subtly crooked bookshelves.” - -Foreground Characters: -“Two comfortable, overstuffed armchairs. In the left chair sits an elderly man—sleeping—with a white Van Dyke beard, blue hair, and on his lap, a curled-up white stoat, both pictured peacefully.” - -Tapestry Detail (central over the hearth): -A tapestry with four quadrants, each depicting a scene: - -Top left: a small old man with a Van Dyke beard standing beside a wilted yellow rose bush. - -Top right: the old man, a robust yellow rose bush and a smile, and a magnificent queen. - -Bottom left: the old man standing near two trees close together. - -Bottom right: the two trees slightly farther apart, with the old man leaning in, whispering to one of the trees. - -Overall Mood & Lighting: -Golden, soft firelight illuminating the hearth and tapestry, casting cozy shadows in the room. - -⸺ -A watercolor illustration of a cozy room at dusk, featuring a glowing stone hearth in the center. Two plush, overstuffed armchairs face the fire—one holds a sleeping elderly man with a white Van Dyke beard and blue hair; a curled‑up white stoat rests gently on his lap. The dark wood-paneled walls are lined with slightly crooked bookshelves. Above the hearth hangs a richly detailed four‑panel tapestry: top‑left shows a small old man with a Van Dyke beard beside a yellow rose bush; top‑right shows the man, the rose bush, and a magnificent queen; bottom‑left shows the old man with two closely standing trees; bottom‑right shows the two trees more spaced apart, with the old man whispering to one tree. The entire scene is painted in the delicate, fluid style of watercolor, with warm firelight casting soft glows and shadows throughout. - -Tips for Better Results in DALL·E - -Be explicit about style and mood — “watercolor” + “warm, soft lighting”. - -Specify relative placement — e.g. “above the hearth,” “left chair,” etc. - -Use visual references — include “Van Dyke beard,” “white stoat curled up” to help the model. - -Iterate — If the tapestry details aren't clear, you might generate each quadrant in separate prompts or highlight “four‑panel tapestry with distinct scenes” to ensure clarity. - -Include atmosphere — terms like “cozy,” “glowing,” or “soft shadow” can enhance the feel. - -Let me know if you'd like help tweaking the prompt further—perhaps adjusting the color palette, chair styles, or additional environmental elements! # Local Variables: # jinx-local-words: "Barkbinder Beastie Brambleberry Brayne Dreamshade Elendil Evennia Illusorium Puppeting Risorium Scrying Somnium Tickleweed Trampoli Trampoli’s Trippy Wha brambleberries brambleberry drinkables expectit gigglecap gigglecaps grimoire ish moonberries msg puppeted purdy sayto skewampus tickleweed typeclasses un" diff --git a/personalities/barbarian.md b/personalities/barbarian.md new file mode 100644 index 0000000..42db61a --- /dev/null +++ b/personalities/barbarian.md @@ -0,0 +1,32 @@ +Assume the role of the following fictional character in a fantasy role +playing game in a mythical forest in the Feywild. +Although, you should never mention the word "Feywild", but instead, +come up with clever names or metaphors for the strange world you inhabit. +Respond in third person as in a story, with quotation marks +surrounding anything you say. +The only formatting you should use is if you wish to emphasize a word, +prefix it with the two character `|w` and end with the two characters `|n`. +Use variations from the "Description" field to state who is talking, not your name. +You can also respond with an action. +The person you are talking to does not know your actual name. +Limit your response to three or less lines unless you are telling a story. + +Name: Breanaramus +Description: A hulking physique dressed to the nines in the latest fashion in barbarian chic. Her armor? Glitters. Battleaxe? Shines. Her helmet? Sports horns, of course. She raises one-half of her bushy blonde unibrow as she looks at you. +Gender: female + +Your personality: As the star in the illegal Gladiator pits below the metropolis of Waterdeep, you are enjoy being the center of attention, and will flex a bicep when you think no one is looking at you. +Intellectually, you are like a five year old human with a voice like Sylvester Stallone, so use simple words with +an active, not passive voice, If you are the subject, you don't refer to yourself using "I", but instead, use "me", for instance, you might say, "Me like you, little man." + +You like to tell people about your battle cry, "Bahlalalala!" + +Feel free to invent stories, as you like to exaggerate. + +You know Sir Roblees, the flamboyant, orange dragon. You secretly don't like him because he is flashier than you, and seems haughty. + +You know Darol, a hobbit with mutton chops (which you admire and wish you could grow facial hair like that.) He has taken you across the sea in his leaf boat, and you had a lot of fun adventures. + +You know Dabbler, the gnome who claims to have made this land. He makes clever objects, and even gave you a silver ring. + +You know there isn't a lot of action about here, so you need to go to the Bar for a drink. The elf bartender is aloof, but he makes good drinks. diff --git a/personalities/dragon.md b/personalities/dragon.md index e77d477..a50ce5a 100644 --- a/personalities/dragon.md +++ b/personalities/dragon.md @@ -15,15 +15,10 @@ Name: Sir Roblees Description: tiny, orange dragon Pose: twirling a tendril near his mouth like a mustache. Gender: male -A dragon with orange-spotted wings like a butterfly. He makes up for -his tiny size with machismo. He wears a white plumed hat and a fancy -dagger like a sword. He sports a sharp-toothed grin. And like a cat, he -expresses his delight by the twitching of his barbed tail. -Your personality: He's an awkward and nerdy John Mulany gay character -who loves to find out and spread gossip. We you can use a "Southern -Accent" in his speech, never mention the word, "Sourthern" or "accent" -as this is a fantasy world. +A dragon with orange-spotted wings like a butterfly. He makes up for his tiny size with machismo. He wears a white plumed hat and a fancy dagger like a sword. He sports a sharp-toothed grin. And like a cat, he expresses his delight by the twitching of his barbed tail. + +Your personality: He's an awkward and nerdy John Mulany gay character who loves to find and spread gossip. Use a "Southern Accent" in his speech, but never mention the word, "Southern" or "accent" as this is a fantasy world. What you know: Your friend, Dabbler, an old gnome who lives in a tree on the path that goes to the west. @@ -35,11 +30,4 @@ The lady, Trampoli, lives in a hut in the marsh to the south sometimes comes int She likes to do therapy readings with her cards. The big hairy beast in the meadow is shy, but very friendly. If he isn't there, he is sleeping in his lair behind the waterfall. -You also know all the latest gossip in the Fey Courts. While you are -a member of Seelie Court (which he often refers to as the Queen's -Court), he knows all of what is going on. He shouldn't spread gossip, -but he's just gotta "get this off of his scaly chest." So feel free to -invent all sorts of short stories. He also hears what is going on in -the Unseelie Court (which he often refers to as the Icy Bitches -Court), and he loves to spread rumors, especially if they are -scandalous. +You also know all the latest gossip in the Fey Courts. While you are a member of Seelie Court (which he often refers to as the Queen's Court), he knows all of what is going on. He shouldn't spread gossip, but he's just gotta "get this off of his scaly chest." So feel free to invent all sorts of short stories. He also hears what is going on in the Unseelie Court (which he often refers to as the Icy Bitches Court), and he loves to spread rumors, especially if they are scandalous. diff --git a/personalities/dwarf.md b/personalities/dwarf.md index 60de713..ba88a75 100644 --- a/personalities/dwarf.md +++ b/personalities/dwarf.md @@ -1,5 +1,4 @@ -Assume the role of the following fictional character in a bizarre, fantasy role -playing game in a mythical forest in the Feywild. +Assume the role of the following fictional character in a bizarre, fantasy role playing game in a mythical forest in the Feywild. Although, you should never mention the word "Feywild", but instead, come up with clever names or metaphors for the strange world you inhabit. Respond in third person as in a story, with quotation marks surrounding anything you say. Keep your response short, less than three lines. @@ -8,6 +7,7 @@ prefix it with the two character `|w` and end with the two characters `|n`. Use variations from the "Description" field to state who is talking, not your name. You can also respond with an action. The person you are talking to does not know your actual name. +Limit your response to three or less lines unless you are telling a story. Name: George Gender: male diff --git a/personalities/hobbit.md b/personalities/hobbit.md index 652b0eb..25c30f4 100644 --- a/personalities/hobbit.md +++ b/personalities/hobbit.md @@ -1,28 +1,31 @@ -Assume the role of the following fictional character in a bizarre, fantasy role +Assume the role of the following fictional character in a fantasy role playing game in a mythical forest in the Feywild. -Although, you should never mention the word "Feywild", but instead, come up with clever names or metaphors for the strange world you inhabit. -Respond in third person as in a story, with quotation marks surrounding anything you say. -Keep your response short, less than three lines. +Although, you should never mention the word "Feywild", but instead, +come up with clever names or metaphors for the strange world you inhabit. +Respond in third person as in a story, with quotation marks +surrounding anything you say. The only formatting you should use is if you wish to emphasize a word, prefix it with the two character `|w` and end with the two characters `|n`. Use variations from the "Description" field to state who is talking, not your name. You can also respond with an action. The person you are talking to does not know your actual name. +Limit your response to three or less lines unless you are telling a story. Name: Darol Gender: male -Description: An adventurous looking chap with brown mutton chops matching his curly brown hair and his brown cloak. His emerald green eyes match his coat that ends just above his large gold belt buckle, which in turn, matches his gold hoop earring. His backpack sports a pin with an insignia. +Description: An adventurous looking chap with brown mutton chops matching his curly brown hair and his brown cloak. His emerald green eyes match his coat that ends just above his large gold belt buckle, which in turn, matches his gold hoop earring. His backpack sports a pin with a mysterious insignia that he won't divulge any details, but becomes vague and illusive. + He has a horn (that he uses to call the Leaf Boat in order to travel to remote islands for adventures), a tall pipe (he uses to blow smoke rings and mystical shapes), a magic short sword, and a waistcoat that allows him to pull out just about anything from (he uses this to comical effect). -You have traveled all over the land, and now the following things: - * The beast in the meadow is sweet, but scared. It likes berries, but likes scones even better. - * The raven on the dock is friendly, but obnoxious. Almost as obnoxious as the fish you can catch. - * The purple heron in the Marsh calls himself Ian, and wishes he was a bard - * The lady in the hut is named Trampoli and she has plenty of torches that everyone should get in order to go on adventures on the islands, or even delve the dungeon accessible in the cave behind the waterfall. - * To open the trapdoor in the cave (also called the Beast's Lair), you will need a stick to prop up the mattress. - * George, a dwarf inventor, lives down there, and makes a lot of interesting contraptions. - * This land was gifted to Dabbler, who expanded the land through dubious means, and he lives in a tree at the end of the path towards the west. - * Dabbler never answers the door no matter how hard you knock, and you need to repeat the password to get inside. The answer is Dabbler's favorite drink. - * Dabbler has a secret lab where you can make potions. He doesn't mind people using it as long as they keep it clean. - * You got your pipe from a strange being that lives in a Wardrobe. - * The footpath to the east through the Glittering Glade goes to a Tavern. The bartender's name is Elendil. +You have traveled all over the land, and know the following things: + - The beast in the meadow is sweet, but scared. It likes berries, but likes scones even better. + - The raven on the dock is friendly, but obnoxious. Almost as obnoxious as the fish you can catch. + - The purple heron in the Marsh calls himself Ian, and wishes he was a bard + - The lady in the hut is named Trampoli and she has plenty of torches that everyone should get in order to go on adventures on the islands, or even delve the dungeon accessible in the cave behind the waterfall. + - To open the trapdoor in the cave (also called the Beast's Lair), you will need a stick to prop up the mattress. + - George, a dwarf inventor, lives down there, and makes a lot of interesting contraptions. + - This land was gifted to Dabbler, who expanded the land through dubious means, and he lives in a tree at the end of the path towards the west. + - Dabbler never answers the door no matter how hard you knock, and you need to repeat the password to get inside. The answer is Dabbler's favorite drink. + - Dabbler has a secret lab where you can make potions. He doesn't mind people using it as long as they keep it clean. + - You got your pipe from a strange being that lives in a Wardrobe. + - The footpath to the east through the Glittering Glade goes to a Tavern. The bartender's name is Elendil. diff --git a/personalities/tea-party.md b/personalities/tea-party.md new file mode 100644 index 0000000..06260ec --- /dev/null +++ b/personalities/tea-party.md @@ -0,0 +1,18 @@ +Assume the roles of only the following fictional characters in a bizarre, fantasy role playing game in a mythical cavern in the Feywild. You only speak for the following characters, and not the character you are talking to. +Although, you should never mention the word "Feywild", but instead, +come up with clever names or metaphors for the strange world you inhabit. +Respond in third person as in a story, with quotation marks +surrounding anything you say. +The only formatting you should use is if you wish to emphasize a word, +prefix it with the two character `|w` and end with the two characters `|n`. +Use variations from the "Description" field to state who is talking, not your name. +You can also respond with an action. +The user does not know the actual names of these characters, but merely the role they occupy in this cavern, so don't use their proper names, unless appropriate. + +Be judicious in your response, for not every character needs to respond to all queries. Usually, just pick one to respond, and limit the response to one or two paragraphs. + +Character 1: Pinky, a joyous goblin who wears a black top hat. He won it in a game of cards from a rabbit, so it has two holes in its side. His personality is a blend between Jeff Dunham's Peanut puppet, and the Pinky character in Pinky and the Brain. He loves talking to his sock puppet, Mr. Sockasaurus Mex, but usually calls him by endearing pet names. He is having a tea party in a cavern from a makeshift table with inanimate objects, and loves to have company sit down on a rock and join him. One of the objects at the table is Dolly, a doll with a rock for a head and dead moss for hair. Pinky is the only person who can hear Dolly, and responds. For instance, "You're right, Dolly. He does smell like turnips." He quotes cliches and common sayings, but always gets them wrong, for instance, he will say "Barking up the wrong leg" (instead of "barking up the wrong tree") and "Cleanliness is next to a god's mess." (instead of "Cleanliness is next to godliness.") and "Easier said than won" (instead of "easier said than done"). + +Character 2: Sockasaurus Mex, a sock puppet who speaks with a Spanish accent. He is dower, and contrasts the rambunctious personality of Pinky. He does love to make a pun, which Pinky notices, but messes up the saying, for instance, "Ah, no bun unattended, eh, Mr. Sockalicious?" + +Character 3: Twiggy, an automaton or golem made from sticks. When he drinks tea, it spills all over his front. He doesn't say anything, but conveys his thoughts through articulated actions from one or more sticks attached to its body. diff --git a/typeclasses/consumables.py b/typeclasses/consumables.py index da1a6c8..83a4a43 100755 --- a/typeclasses/consumables.py +++ b/typeclasses/consumables.py @@ -265,7 +265,8 @@ class Trolley(Producer): caller.msg("You already have a teacup.") else: cuptype = self.teacup_prototype - cuptype['desc'] = routput(random.choice(TEACUP_DESCS)) + teacup_descs = self.db.teacups if self.db.teacups else TEACUP_DESCS + cuptype['desc'] = routput(random.choice(teacup_descs)) cup = spawn(cuptype)[0] cup.location = caller @@ -298,18 +299,19 @@ class Trolley(Producer): """ opener.msg("Okay.") + def get_baked_goods(self): + return self.db.make_these if self.db.make_these else self.scones + def do_bake(self): """ Set the scone that we bake today. """ - todays_scone = self.scones[date.today().day % len(self.scones)] - name = todays_scone.get("name") + baked_goods = self.get_baked_goods() + todays_baking = baked_goods[date.today().day % len(baked_goods)] + name = todays_baking.get("name") self.db.make_name = name - self.db.make_aliases = ["scone", "scones"] self.db.make_desc = routput("A <>-looking {0}", name) - self.db.make_amount = 3 - self.db.make_eat_amount = 1 msgs = [ "Delicious.", @@ -317,18 +319,21 @@ class Trolley(Producer): "Really good.", 'Mmmmm', ] - if todays_scone.get('taste'): - msgs += ['You <> <> <> the ' + todays_scone.get('taste') + '.'] - if todays_scone.get('tastes'): - for taste in todays_scone.get('tastes'): + if todays_baking.get('taste'): + msgs += ['You <> <> <> the ' + todays_baking.get('taste') + '.'] + if todays_baking.get('tastes'): + for taste in todays_baking.get('tastes'): msgs += ['You <> <> <> the ' + taste + '.'] - if todays_scone.get('expression'): - msgs += [f"<> {todays_scone.get('expression')}."] + if todays_baking.get('expression'): + msgs += [f"<> {todays_baking.get('expression')}."] self.db.make_eat_msgs = msgs self.db.make_finish_msg = "That was <>." - self.location.msg_contents(routput("<> scones <> appear <> on the trolley.")) + if self.db.make_message: + self.location.msg_contents(routput(self.db.make_message)) + else: + self.location.msg_contents(routput(f"<>scones <> appear <> on the trolley.")) class Sconce(Producer, Opener): diff --git a/world/test-run.exp b/world/test-run.exp index 9d64157..f267f45 100755 --- a/world/test-run.exp +++ b/world/test-run.exp @@ -996,7 +996,7 @@ send "look jar\n" expect -re "You look at one.*labeled" # send "look jar\n" -expect -re "You look at one.*labeled" +expect -re "You look at another.*labeled" send "look stool\n" expectit "A place to sit while synthesizing experiments." @@ -1132,6 +1132,12 @@ expectit "A metal ladder" send "look blocks\n" expectit "The stone blocks" +send "look stream\n" +expectit "A foul smelling stream of dark liquid meanders" + +send "get stream\n" +expectit "Seriously? You can't get that." + send "door\n" expectit "Workshop" @@ -1141,6 +1147,54 @@ expect -re "You (look|notice)" send "leave\n" expectit "Tunnel" +send "crack\n" +expectit "Damp Cave" + +send "look table\n" +expectit "Recycled board from a boat" + +send "look stream\n" +expectit "A fragrant stream of dark liquid run" + +send "get stream\n" +expectit "Seriously? You can't get that." + +send "get cookie\n" +expect -r "You get.*cookie" + +send "eat cookie\n" +# Ignore the response, and just keep going... + +send "look teapot\n" +expectit "Conspicuously absent" + +send "fill teacup\n" +expectit "mucky water" + +send "look rock\n" +expectit "A flat rock" + +send "get rock\n" +expectit "You can't take it" + +send "sit rock\n" +expectit "You sit on the flat rock" + +send "push rock\n" +expectit "push the rock away" + +send "pull rock\n" +expectit "pull the rock closer" + +send "get doll\n" +expectit "You wouldn't dare" + +send "get twig\n" +expectit "You wouldn't dare" + +send "leave\n" +expectit "Dark Tunnel" + send "up\n" expectit "Lair" diff --git a/world/version1.ev b/world/version1.ev index 49d82cd..6dec256 100644 --- a/world/version1.ev +++ b/world/version1.ev @@ -4,15 +4,15 @@ # 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]] +# [[file:../moss-n-puddles.org::*Create an Avatar][Create an Avatar:1]] @name self = Avatar # Create an Avatar:1 ends here -# [[file:../../../projects/mud.org::*Create an Avatar][Create an Avatar:2]] +# [[file:../moss-n-puddles.org::*Create an Avatar][Create an Avatar:2]] @setdesc A translucent being of light and energy. The surrounding world seems vivid and vibrant as it basks in the radience. # Create an Avatar:2 ends here -# [[file:../../../projects/mud.org::*Create an Avatar][Create an Avatar:3]] +# [[file:../moss-n-puddles.org::*Create an Avatar][Create an Avatar:3]] @sdesc angelic being # Create an Avatar:3 ends here @@ -21,7 +21,7 @@ # And to pose: -# [[file:../../../projects/mud.org::*Create an Avatar][Create an Avatar:4]] +# [[file:../moss-n-puddles.org::*Create an Avatar][Create an Avatar:4]] py self.db.pose = True # pose looking awesome @@ -31,7 +31,7 @@ pose looking awesome # 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 Grove of the Matriarchs][The Grove of the Matriarchs:1]] +# [[file:../moss-n-puddles.org::*The Grove of the Matriarchs][The Grove of the Matriarchs:1]] @name here = Grove of the Matriarchs;mp01 # The Grove of the Matriarchs:1 ends here @@ -40,7 +40,7 @@ pose looking awesome # The description will take advantage of the /seasons/ and /times/ of the day: -# [[file:../../../projects/mud.org::*The Grove of the Matriarchs][The Grove of the Matriarchs:2]] +# [[file:../moss-n-puddles.org::*The Grove of the Matriarchs][The Grove of the Matriarchs:2]] @desc here = A giant, moss-covered |Yboulder|n hides a |Yhollow recess|n as it stands among immense |Ytrees|n that etch the sky and slice the clouds in the darkening twilightawakening dawnlazy afternoonnight sky. With the morning light, you can hear the dawn chorus of birdsThe afternoon breeze carries the buzzing of insects around giant colorful |Yflowers|nYou can't hear much now as most of the forest creatures are settling down for the nightIn the darkness, you can hear crickets and an occasional owl. A footpath winds around the giant, moss-covered tree roots to the East and West. To the south, a dock juts into a lavender sea. # The Grove of the Matriarchs:2 ends here @@ -48,7 +48,7 @@ pose looking awesome # Need to add weather and time data to this: -# [[file:../../../projects/mud.org::*The Grove of the Matriarchs][The Grove of the Matriarchs:4]] +# [[file:../moss-n-puddles.org::*The Grove of the Matriarchs][The Grove of the Matriarchs:4]] @update here = typeclasses.rooms_weather.TimeWeatherRoom # The Grove of the Matriarchs:4 ends here @@ -59,7 +59,7 @@ pose looking awesome # Describe the trees, flowers, and of course, the alcove: -# [[file:../../../projects/mud.org::*The Grove of the Matriarchs][The Grove of the Matriarchs:5]] +# [[file:../moss-n-puddles.org::*The Grove of the Matriarchs][The Grove of the Matriarchs:5]] @detail trees = You feel dwarfed by colossal trees whose moss-covered roots are difficult to peer over. An occassional breeze often smells of flowers and at other times earthy. While the leafy canopy hides the sky, you certainly can |wfeel|n the weather. Attribute it to pareidolia, but the bark on one particular |Ytree|n looks like a face. # @detail flower;flowers = Beautiful, but giant flowers look down on you and nod a friendly greeting. @@ -70,7 +70,7 @@ pose looking awesome # When you first log into the game, you can immediately chat with an unfriendly, overly boring tree. -# [[file:../../../projects/mud.org::*Barkbinder the Tree][Barkbinder the Tree:1]] +# [[file:../moss-n-puddles.org::*Barkbinder the Tree][Barkbinder the Tree:1]] @create/drop tree: typeclasses.chatbots.ChatBot # @set tree/gender = "neutral" @@ -85,7 +85,7 @@ pose looking awesome # Then wake it. -# [[file:../../../projects/mud.org::*Barkbinder the Tree][Barkbinder the Tree:2]] +# [[file:../moss-n-puddles.org::*Barkbinder the Tree][Barkbinder the Tree:2]] py tree = me.search("tree") ; tree.sdesc.add("especially large tree") ; tree.backstory("tree") # Barkbinder the Tree:2 ends here @@ -94,7 +94,7 @@ py tree = me.search("tree") ; tree.sdesc.add("especially large tree") ; tree.bac # And his description: -# [[file:../../../projects/mud.org::*Barkbinder the Tree][Barkbinder the Tree:3]] +# [[file:../moss-n-puddles.org::*Barkbinder the Tree][Barkbinder the Tree:3]] @desc tree = The folds and furrows of the bark of this ancient tree look like a face with closed eyelids, as if it were asleep or merely contemplating the mysteries of deep time. # Barkbinder the Tree:3 ends here @@ -102,7 +102,7 @@ py tree = me.search("tree") ; tree.sdesc.add("especially large tree") ; tree.bac # With my name, I need to have an object to go with it. -# [[file:../../../projects/mud.org::*Puddle][Puddle:1]] +# [[file:../moss-n-puddles.org::*Puddle][Puddle:1]] @create/drop puddle : typeclasses.things.Puddle # Puddle:1 ends here @@ -111,7 +111,7 @@ py tree = me.search("tree") ; tree.sdesc.add("especially large tree") ; tree.bac # And an elusive description: -# [[file:../../../projects/mud.org::*Puddle][Puddle:2]] +# [[file:../moss-n-puddles.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 @@ -120,7 +120,7 @@ py tree = me.search("tree") ; tree.sdesc.add("especially large tree") ; tree.bac # And keep it locked down: -# [[file:../../../projects/mud.org::*Puddle][Puddle:3]] +# [[file:../moss-n-puddles.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." @@ -130,20 +130,22 @@ py tree = me.search("tree") ; tree.sdesc.add("especially large tree") ; tree.bac # 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. -# [[file:../../../projects/mud.org::*Sticks][Sticks:1]] -py timed_script = evennia.create_script(key="Create Sticks", - typeclass='typeclasses.scripts.CreateSticks', - interval=86800, # more than a day - start_delay=False, # wait interval before first call - autostart=True, - attributes=[("destination", here)] ) +# [[file:../moss-n-puddles.org::*Sticks][Sticks:1]] +py timed_script = evennia.create_script( + key="Create Sticks", + typeclass='typeclasses.scripts.CreateSticks', + interval=86800, # more than a day + start_delay=False, # wait interval before first call + autostart=True, + attributes=[("destination", here)] + ) # Sticks:1 ends here # Players can leave messages in this book. We’ll see how long I want to leave this. -# [[file:../../../projects/mud.org::*Guest Book][Guest Book:1]] +# [[file:../moss-n-puddles.org::*Guest Book][Guest Book:1]] @create/drop guest book:typeclasses.readables.WriteableBook # @set guest book/inside = "file:world/guest-book.md" @@ -156,7 +158,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # Note that we don’t mention this in the area’s description. -# [[file:../../../projects/mud.org::*Guest Book][Guest Book:2]] +# [[file:../moss-n-puddles.org::*Guest Book][Guest Book:2]] @desc guest book = In a hollow recess underneath the boulder, you find a leather-bound book entitled |wGuest Book|n perched atop a giant mushroom. Protected from the elements, this natural desk includes a feather |Yquill|n and an |Yink|n |Ywell|n inviting you to |gread|n and even |gwrite|n a note for other travelers. # Guest Book:2 ends here @@ -165,7 +167,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # Can’t get it: -# [[file:../../../projects/mud.org::*Guest Book][Guest Book:3]] +# [[file:../moss-n-puddles.org::*Guest Book][Guest Book:3]] @lock guest book = get:false() # @set guest book/get_err_msg = "The owner designed a guest book to be read and written by guests. Pocketing it for selfish interests sort of defeats the purpose." @@ -176,7 +178,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # And some details: -# [[file:../../../projects/mud.org::*Guest Book][Guest Book:4]] +# [[file:../moss-n-puddles.org::*Guest Book][Guest Book:4]] @detail quill = The black feathered quill may once belonged to a raven, but if so, it must have been large. # @detail ink = Black, like the ichor of the gods ... or perhaps, someone just started a squid. @@ -187,7 +189,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # More details about the room that describes aspects of the boulder in the =desc= above. First, the symbol: -# [[file:../../../projects/mud.org::*Boulder][Boulder:1]] +# [[file:../moss-n-puddles.org::*Boulder][Boulder:1]] @detail symbol = You move an ivy runner to see three curves join together as if it were three legs. # Boulder:1 ends here @@ -195,7 +197,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # The moss is purdy: -# [[file:../../../projects/mud.org::*Boulder][Boulder:2]] +# [[file:../moss-n-puddles.org::*Boulder][Boulder:2]] @detail moss = "Even in this light, the moss radiates a surreal color of green." # Boulder:2 ends here @@ -203,7 +205,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # And the ivy is … uh. -# [[file:../../../projects/mud.org::*Boulder][Boulder:3]] +# [[file:../moss-n-puddles.org::*Boulder][Boulder:3]] @detail ivy = "You see...well, ivy. Uhm, it's green, and..." # Boulder:3 ends here @@ -211,7 +213,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # The runes use multi-byte Unicode which screws up the =telnet= client. -# [[file:../../../projects/mud.org::*Boulder][Boulder:4]] +# [[file:../moss-n-puddles.org::*Boulder][Boulder:4]] @detail runes;rune = The runes read ᛞ ᚪ ᛒ ᛚ ᚱ # Boulder:4 ends here @@ -220,7 +222,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # The top of the boulder should be another room, accessible by the =climb=, but maybe it isn’t “seen” until the boulder has been looked? First, we put some weather at the top of the boulder: -# [[file:../../../projects/mud.org::*Boulder][Boulder:5]] +# [[file:../moss-n-puddles.org::*Boulder][Boulder:5]] @dig Boulder Top;mp02 : typeclasses.rooms_weather.TimeWeatherRoom = climb boulder;boulder;climb,climb down;climb;down # Boulder:5 ends here @@ -228,7 +230,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # The ability to /climb/ the boulder isn’t immediately obvious, so let’s make it a bit of a secret: -# [[file:../../../projects/mud.org::*Boulder][Boulder:6]] +# [[file:../moss-n-puddles.org::*Boulder][Boulder:6]] @desc boulder = A boulder with patches of |Ymoss|n and delicate clover. A carved |Ysymbol|n and even some |Yrunes|n try to hide behind rope-like |Yvines|n and tendrils of |Yivy|n as if keeping a secret.|/|/You notice a foot hold, and then another. You can |Gclimb|n this boulder! # Boulder:6 ends here @@ -236,7 +238,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # To take advantage of our [[Hidden Things]], we put the right tag on it: -# [[file:../../../projects/mud.org::*Boulder][Boulder:7]] +# [[file:../moss-n-puddles.org::*Boulder][Boulder:7]] @set boulder/hidden_tag = "hidden_boulder" # @lock boulder = view:tag(hidden_boulder) @@ -246,7 +248,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # And give it some aliases: -# [[file:../../../projects/mud.org::*Boulder][Boulder:8]] +# [[file:../moss-n-puddles.org::*Boulder][Boulder:8]] @name boulder = climb the boulder;boulder;climb;climb up;climb boulder # Boulder:8 ends here @@ -254,7 +256,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # And a description: -# [[file:../../../projects/mud.org::*Boulder][Boulder:9]] +# [[file:../moss-n-puddles.org::*Boulder][Boulder:9]] @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 @@ -263,7 +265,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # Let’s make a nice spot to sit down on: -# [[file:../../../projects/mud.org::*Lower Vines][Lower Vines:1]] +# [[file:../moss-n-puddles.org::*Lower Vines][Lower Vines:1]] @create/drop dangling vine;vines;vine # Lower Vines:1 ends here @@ -271,7 +273,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # With a nice description: -# [[file:../../../projects/mud.org::*Lower Vines][Lower Vines:2]] +# [[file:../moss-n-puddles.org::*Lower Vines][Lower Vines:2]] @desc vines = Strong vines twisted to look like rope. This could be helpful. # Lower Vines:2 ends here @@ -279,7 +281,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # Can’t take it here, you have to climb the boulder first: -# [[file:../../../projects/mud.org::*Lower Vines][Lower Vines:3]] +# [[file:../moss-n-puddles.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?" @@ -289,7 +291,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # Can we hide it too? -# [[file:../../../projects/mud.org::*Lower Vines][Lower Vines:4]] +# [[file:../moss-n-puddles.org::*Lower Vines][Lower Vines:4]] @lock vines = view:tag(hidden_vines) # @set vines/hidden_tag = "hidden_vines" @@ -300,7 +302,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # What about pushing and pulling messages? -# [[file:../../../projects/mud.org::*Lower Vines][Lower Vines:5]] +# [[file:../moss-n-puddles.org::*Lower Vines][Lower Vines:5]] @set vines/pull_msg = "You pull the vines, but they 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." @@ -310,7 +312,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # Let’s jump to the top of the boulder to proceed: -# [[file:../../../projects/mud.org::*Top of Boulder][Top of Boulder:1]] +# [[file:../moss-n-puddles.org::*Top of Boulder][Top of Boulder:1]] @teleport mp02 # Top of Boulder:1 ends here @@ -318,7 +320,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # And the description: -# [[file:../../../projects/mud.org::*Top of Boulder][Top of Boulder:3]] +# [[file:../moss-n-puddles.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:3 ends here @@ -326,7 +328,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # More details: -# [[file:../../../projects/mud.org::*Top of Boulder][Top of Boulder:4]] +# [[file:../moss-n-puddles.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:4 ends here @@ -334,7 +336,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # And a description of the climb: -# [[file:../../../projects/mud.org::*Top of Boulder][Top of Boulder:5]] +# [[file:../moss-n-puddles.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 @@ -342,14 +344,14 @@ py timed_script = evennia.create_script(key="Create Sticks", # And describe the journey: -# [[file:../../../projects/mud.org::*Top of Boulder][Top of Boulder:6]] +# [[file:../moss-n-puddles.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..." # Top of Boulder:6 ends here # Let’s make a nice spot to sit down on: -# [[file:../../../projects/mud.org::*Moss][Moss:1]] +# [[file:../moss-n-puddles.org::*Moss][Moss:1]] @create/drop patch of moss;moss:typeclasses.sittables.Sittable # Moss:1 ends here @@ -357,21 +359,21 @@ py timed_script = evennia.create_script(key="Create Sticks", # With a nice description: -# [[file:../../../projects/mud.org::*Moss][Moss:2]] +# [[file:../moss-n-puddles.org::*Moss][Moss:2]] @desc patch of moss = A cushioned patch of moss of the most vibrant green. # Moss:2 ends here # Can’t take the moss with you: -# [[file:../../../projects/mud.org::*Moss][Moss:3]] +# [[file:../moss-n-puddles.org::*Moss][Moss:3]] @lock patch of moss = get:false() # Moss:3 ends here # Can we hide it too? -# [[file:../../../projects/mud.org::*Moss][Moss:4]] +# [[file:../moss-n-puddles.org::*Moss][Moss:4]] @lock patch of moss = view:tag(hidden_moss) # @set patch of moss/hidden_tag = "hidden_moss" @@ -381,7 +383,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # And a lovely message about why you can’t steal moss: -# [[file:../../../projects/mud.org::*Moss][Moss:5]] +# [[file:../moss-n-puddles.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." # Moss:5 ends here @@ -390,7 +392,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # Is /pulling/ on moss the same as attempting to =get= it? -# [[file:../../../projects/mud.org::*Moss][Moss:6]] +# [[file:../moss-n-puddles.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 @@ -398,7 +400,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # 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::*Upper Vines][Upper Vines:1]] +# [[file:../moss-n-puddles.org::*Upper Vines][Upper Vines:1]] @teleport mp02 # @create/drop lot of vines;vine;rope: typeclasses.consumables.Producer @@ -409,7 +411,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # With a description: -# [[file:../../../projects/mud.org::*Upper Vines][Upper Vines:2]] +# [[file:../moss-n-puddles.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. # Upper Vines:2 ends here @@ -418,7 +420,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # We have to have the vines describe what it /makes/: -# [[file:../../../projects/mud.org::*Upper Vines][Upper Vines:3]] +# [[file:../moss-n-puddles.org::*Upper Vines][Upper Vines:3]] @set vines/make_name = "coil of rope" # Upper Vines:3 ends here @@ -427,7 +429,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # And a verb when they /get/ the consumable: -# [[file:../../../projects/mud.org::*Upper Vines][Upper Vines:4]] +# [[file:../moss-n-puddles.org::*Upper Vines][Upper Vines:4]] @set vines/make_verb = "$conj(yank) and $conj(shape) a" # Upper Vines:4 ends here @@ -436,7 +438,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # And a commentary: -# [[file:../../../projects/mud.org::*Upper Vines][Upper Vines:5]] +# [[file:../moss-n-puddles.org::*Upper Vines][Upper Vines:5]] @set vines/make_note = " from the vines" # Upper Vines:5 ends here @@ -444,7 +446,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # This one is optional as it defaults to Consumable: -# [[file:../../../projects/mud.org::*Upper Vines][Upper Vines:6]] +# [[file:../moss-n-puddles.org::*Upper Vines][Upper Vines:6]] @set vines/make_class = "typeclasses.things.Rope" # Upper Vines:6 ends here @@ -452,7 +454,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # And the vines needs to know the /description/ of the Consumable, so that it can attach that: -# [[file:../../../projects/mud.org::*Upper Vines][Upper Vines:7]] +# [[file:../moss-n-puddles.org::*Upper Vines][Upper Vines:7]] @set vines/make_desc = "Made from vines, but could be a good lasso." # Upper Vines:7 ends here @@ -460,7 +462,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # How much is there when you pick them? -# [[file:../../../projects/mud.org::*Upper Vines][Upper Vines:8]] +# [[file:../moss-n-puddles.org::*Upper Vines][Upper Vines:8]] @set vines/make_amount = 1 # Upper Vines:8 ends here @@ -469,7 +471,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # What if they do something other than =get= the vines? -# [[file:../../../projects/mud.org::*Upper Vines][Upper Vines:9]] +# [[file:../moss-n-puddles.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." @@ -487,7 +489,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # And we create a /patch/ of them for the picking: -# [[file:../../../projects/mud.org::*Gigglecap Mushrooms][Gigglecap Mushrooms:1]] +# [[file:../moss-n-puddles.org::*Gigglecap Mushrooms][Gigglecap Mushrooms:1]] # @teleport/quiet mp02 # @create/drop patch of mushrooms;mushrooms;mushroom: typeclasses.consumables.Producer @@ -514,7 +516,7 @@ py timed_script = evennia.create_script(key="Create Sticks", # Here for hints … and a bit of a distraction. -# [[file:../../../projects/mud.org::*Squirrel][Squirrel:1]] +# [[file:../moss-n-puddles.org::*Squirrel][Squirrel:1]] @create/drop Squirrel;monk: typeclasses.chatbots.ChatBot # @update squirrel = typeclasses.chatbots.ChatBot # @@ -532,11 +534,11 @@ py timed_script = evennia.create_script(key="Create Sticks", # And describe the squirrel: -# [[file:../../../projects/mud.org::*Squirrel][Squirrel:2]] +# [[file:../moss-n-puddles.org::*Squirrel][Squirrel:2]] @desc squirrel = A handsome squirrel dressed in flowing orange robes. Sitting in quiet meditation on top of a compfortable patch of |Ymoss|n. # Squirrel:2 ends here -# [[file:../../../projects/mud.org::*Squirrel][Squirrel:3]] +# [[file:../moss-n-puddles.org::*Squirrel][Squirrel:3]] @set squirrel/arrive = "20 ;; emote briefly opens her eyes, nods an acknowledgement to you. ;; gm The small squirrel returns to her meditation." # Squirrel:3 ends here @@ -545,14 +547,14 @@ py timed_script = evennia.create_script(key="Create Sticks", # And turn on the real sayings: -# [[file:../../../projects/mud.org::*Squirrel][Squirrel:5]] +# [[file:../moss-n-puddles.org::*Squirrel][Squirrel:5]] py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add("orange-robed squirrel") ; s.home = here ; s.backstory("squirrel") # Squirrel:5 ends here # To the east, let’s make a nice meadow. Start at the Forest: -# [[file:../../../projects/mud.org::*Frog Meadow][Frog Meadow:1]] +# [[file:../moss-n-puddles.org::*Frog Meadow][Frog Meadow:1]] @teleport mp01 # Frog Meadow:1 ends here @@ -560,7 +562,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And we use the =tunnel= command this time: -# [[file:../../../projects/mud.org::*Frog Meadow][Frog Meadow:2]] +# [[file:../moss-n-puddles.org::*Frog Meadow][Frog Meadow:2]] @dig Frog Meadow;mp05 : typeclasses.rooms_weather.TimeWeatherRoom = east footpath to meadow;east;e;path;footpath,west footpath to forest;footpath;west;w;path # Frog Meadow:2 ends here @@ -568,7 +570,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # A description if they look east: -# [[file:../../../projects/mud.org::*Frog Meadow][Frog Meadow:3]] +# [[file:../moss-n-puddles.org::*Frog Meadow][Frog Meadow:3]] @desc east = A winding footpath that may lead out of the forest... Is that a meadow? # Frog Meadow:3 ends here @@ -576,7 +578,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And a nice journey message to go east out of the forest: -# [[file:../../../projects/mud.org::*Frog Meadow][Frog Meadow:4]] +# [[file:../moss-n-puddles.org::*Frog Meadow][Frog Meadow:4]] @set east/traverse_msg = "The mossy tree roots that borders this footpath begin to thin out to clover and flowers..." # Frog Meadow:4 ends here @@ -584,7 +586,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Before we label it, we follow =east=: -# [[file:../../../projects/mud.org::*Frog Meadow][Frog Meadow:5]] +# [[file:../moss-n-puddles.org::*Frog Meadow][Frog Meadow:5]] @teleport mp05 # Frog Meadow:5 ends here @@ -593,7 +595,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And a description that takes advantage of the time of day. We should get busy and get some seasonal description here. -# [[file:../../../projects/mud.org::*Frog Meadow][Frog Meadow:6]] +# [[file:../moss-n-puddles.org::*Frog Meadow][Frog Meadow: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 |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. # Frog Meadow:6 ends here @@ -601,7 +603,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Along with a message: -# [[file:../../../projects/mud.org::*Frog Meadow][Frog Meadow:7]] +# [[file:../moss-n-puddles.org::*Frog Meadow][Frog Meadow:7]] @set footpath/traverse_msg = "You leave the open meadow for the footpath through the giant trees. The yellow flowers nod goodbye to you..." # Frog Meadow:7 ends here @@ -609,7 +611,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And a description: -# [[file:../../../projects/mud.org::*Frog Meadow][Frog Meadow:8]] +# [[file:../moss-n-puddles.org::*Frog Meadow][Frog Meadow:8]] @desc footpath = This footpath goes in a forest of immense trees. # Frog Meadow:8 ends here @@ -618,7 +620,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And details of the field. -# [[file:../../../projects/mud.org::*Frog Meadow][Frog Meadow:9]] +# [[file:../moss-n-puddles.org::*Frog Meadow][Frog Meadow:9]] @detail stream = The slow-moving |Ystream|n meanders like a snake in the grassy field. Little green |Yfrogs|n cling to grass stems hanging over the water. # Frog Meadow:9 ends here @@ -627,7 +629,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And detail the frogs: -# [[file:../../../projects/mud.org::*Frog Meadow][Frog Meadow:10]] +# [[file:../moss-n-puddles.org::*Frog Meadow][Frog Meadow: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?" @@ -637,7 +639,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # This is special, in that it should be hidden: -# [[file:../../../projects/mud.org::*Waterfall][Waterfall:1]] +# [[file:../moss-n-puddles.org::*Waterfall][Waterfall:1]] @create/drop waterfall # Waterfall:1 ends here @@ -646,11 +648,11 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And the description: -# [[file:../../../projects/mud.org::*Waterfall][Waterfall:2]] +# [[file:../moss-n-puddles.org::*Waterfall][Waterfall:2]] @desc waterfall = Cascading down the cliff in three sections, each section of this giant waterfall widens ending in a large |Ypool|n.|/|/Wait! Is there a large |Ycave|n entrance hidden behind the water? # Waterfall:2 ends here -# [[file:../../../projects/mud.org::*Waterfall][Waterfall:3]] +# [[file:../moss-n-puddles.org::*Waterfall][Waterfall:3]] @lock waterfall = get:false() # Waterfall:3 ends here @@ -658,13 +660,13 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Looking at the waterfall, shows the cave entrance: -# [[file:../../../projects/mud.org::*Waterfall][Waterfall:4]] +# [[file:../moss-n-puddles.org::*Waterfall][Waterfall:4]] @set waterfall/hidden_tag = "hidden_cave;hidden_waterfall" # @lock waterfall = view:tag(hidden_waterfall) # Waterfall:4 ends here -# [[file:../../../projects/mud.org::*Waterfall][Waterfall:5]] +# [[file:../moss-n-puddles.org::*Waterfall][Waterfall:5]] @detail pool = A pool of cool, clear water. # Waterfall:5 ends here @@ -672,7 +674,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # 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]] +# [[file:../moss-n-puddles.org::*Fizzy Water][Fizzy Water:1]] # @teleport/quiet mp05 # @create/drop stream;water: typeclasses.drinkables.Water @@ -702,7 +704,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And we create it: -# [[file:../../../projects/mud.org::*Tickleweed][Tickleweed:1]] +# [[file:../moss-n-puddles.org::*Tickleweed][Tickleweed:1]] # @teleport/quiet mp05 # @create/drop patch of tickleweed;tickleweed: typeclasses.consumables.Producer @@ -726,7 +728,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # To create a place for our big, hairy beast to sleep, first jump to the Meadow: -# [[file:../../../projects/mud.org::*The Lair of the Beast][The Lair of the Beast:1]] +# [[file:../moss-n-puddles.org::*The Lair of the Beast][The Lair of the Beast:1]] @teleport mp05 # The Lair of the Beast:1 ends here @@ -734,7 +736,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # 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]] +# [[file:../moss-n-puddles.org::*The Lair of the Beast][The Lair of the Beast:2]] @dig Lair;mp07 = cave entrance;cave;lair;inside,outside;leave;meadow # The Lair of the Beast:2 ends here @@ -742,7 +744,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And we make it hidden: -# [[file:../../../projects/mud.org::*The Lair of the Beast][The Lair of the Beast:3]] +# [[file:../moss-n-puddles.org::*The Lair of the Beast][The Lair of the Beast:3]] @set cave/hidden_tag = "hidden_cave" # @lock cave = view:tag(hidden_cave) @@ -752,7 +754,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And a description if they look: -# [[file:../../../projects/mud.org::*The Lair of the Beast][The Lair of the Beast:4]] +# [[file:../moss-n-puddles.org::*The Lair of the Beast][The Lair of the Beast:4]] @desc cave = A large entrance to a dark, and foul-smelling cave. The waterfall is so loud, you can't hear anything that may live there. # The Lair of the Beast:4 ends here @@ -760,7 +762,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And a description when entering … -# [[file:../../../projects/mud.org::*The Lair of the Beast][The Lair of the Beast:5]] +# [[file:../moss-n-puddles.org::*The Lair of the Beast][The Lair of the Beast:5]] @set cave/traverse_msg = "You venture inside the dark cave." # The Lair of the Beast:5 ends here @@ -769,7 +771,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Let’s step inside to finish this: -# [[file:../../../projects/mud.org::*The Lair of the Beast][The Lair of the Beast:6]] +# [[file:../moss-n-puddles.org::*The Lair of the Beast][The Lair of the Beast:6]] @teleport mp07 # The Lair of the Beast:6 ends here @@ -778,7 +780,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And a description: -# [[file:../../../projects/mud.org::*The Lair of the Beast][The Lair of the Beast:7]] +# [[file:../moss-n-puddles.org::*The Lair of the Beast][The Lair of the Beast:7]] @desc here = Vaulted stone ceiling harbors the darkness that hovers over a large |Ymattress|n. # The Lair of the Beast:7 ends here @@ -787,7 +789,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And a description of leaving: -# [[file:../../../projects/mud.org::*The Lair of the Beast][The Lair of the Beast:8]] +# [[file:../moss-n-puddles.org::*The Lair of the Beast][The Lair of the Beast:8]] @desc leave = You can see the waterfall cascading outside the cave entrance. # The Lair of the Beast:8 ends here @@ -796,7 +798,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And the leaving message: -# [[file:../../../projects/mud.org::*The Lair of the Beast][The Lair of the Beast:9]] +# [[file:../moss-n-puddles.org::*The Lair of the Beast][The Lair of the Beast:9]] @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 @@ -804,7 +806,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Create a mattress you can sit on (and maybe /push/ to get to a secret door): -# [[file:../../../projects/mud.org::*Mattress][Mattress:1]] +# [[file:../moss-n-puddles.org::*Mattress][Mattress:1]] @create/drop mattress:typeclasses.sittables.Sittables # Mattress:1 ends here @@ -812,7 +814,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And the description: -# [[file:../../../projects/mud.org::*Mattress][Mattress:2]] +# [[file:../moss-n-puddles.org::*Mattress][Mattress:2]] @desc mattress = Looks comfortable, albeit tall, but doesn't smell good. Perhaps that is due to the |Ymushrooms|n sprouting from its base?|/|/The corner of the mattress covers a |Ytrapdoor|n!? # Mattress:2 ends here @@ -821,7 +823,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And a /detail/ of the mushrooms that may show if are not an alchemist: -# [[file:../../../projects/mud.org::*Mattress][Mattress:3]] +# [[file:../moss-n-puddles.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 @@ -829,7 +831,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Can’t steal ‘it: -# [[file:../../../projects/mud.org::*Mattress][Mattress:4]] +# [[file:../moss-n-puddles.org::*Mattress][Mattress:4]] @lock mattress = get:false() # @set mattress/get_err_msg = "It's way too heavy for you to lift." @@ -840,7 +842,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Can you /push/ or /pull/ it? -# [[file:../../../projects/mud.org::*Mattress][Mattress:5]] +# [[file:../moss-n-puddles.org::*Mattress][Mattress:5]] @set mattress/pull_msg = "Mattresses are such difficult creatures to manipulate. When you pull on a corner, it slips from your hands. Perhaps you could |guse|n something to help?" # @set mattress/push_msg = "Mattresses are such difficult creatures to manipulate. Such a heavy beast. Your pushing allows you to reach and pull on the trapdoor, but not enough to keep it open. Perhaps you could |guse|n something to prop it out of the way?" @@ -850,7 +852,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And textual descriptions the object can use: -# [[file:../../../projects/mud.org::*Mattress][Mattress:6]] +# [[file:../moss-n-puddles.org::*Mattress][Mattress:6]] @set mattress/adjective = "on" # @set mattress/article = "the" @@ -865,7 +867,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And a better description when sitting down: -# [[file:../../../projects/mud.org::*Mattress][Mattress:7]] +# [[file:../moss-n-puddles.org::*Mattress][Mattress:7]] @set mattress/response = "$You() $conj(sit) on the large mattress." # Mattress:7 ends here @@ -874,7 +876,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And a trim on the things to see: -# [[file:../../../projects/mud.org::*Mattress][Mattress:8]] +# [[file:../moss-n-puddles.org::*Mattress][Mattress:8]] @lock mattress = view:tag(hidden_mattress) # @set mattress/hidden_tag = "hidden_mattress" @@ -888,7 +890,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # #+end_quote -# [[file:../../../projects/mud.org::*Dream Mushrooms][Dream Mushrooms:1]] +# [[file:../moss-n-puddles.org::*Dream Mushrooms][Dream Mushrooms:1]] # @teleport/quiet mp07 # @create/drop cluster of mushrooms;mushroom;mushrooms: typeclasses.consumables.Producer @@ -915,7 +917,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And we create the Big, Hairy Beast: -# [[file:../../../projects/mud.org::*Beast][Beast:1]] +# [[file:../moss-n-puddles.org::*Beast][Beast:1]] @create/drop big hairy beast;bhb;beast;hairy beast;monster;shadow: typeclasses.pets.BHB # Beast:1 ends here @@ -924,7 +926,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And a general description that will be /expanded/ with its current reaction. -# [[file:../../../projects/mud.org::*Beast][Beast:2]] +# [[file:../moss-n-puddles.org::*Beast][Beast:2]] @desc beast = A big, hairy beast with long claws and teeth. # Beast:2 ends here @@ -932,7 +934,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Can’t get this: -# [[file:../../../projects/mud.org::*Beast][Beast:3]] +# [[file:../moss-n-puddles.org::*Beast][Beast:3]] @lock beast = get:false() # @set beast/get_err_msg = "You can't pick that up, as that beast is far larger than you." @@ -943,7 +945,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And set its sleepy time at 8pm … -# [[file:../../../projects/mud.org::*Beast][Beast:4]] +# [[file:../moss-n-puddles.org::*Beast][Beast:4]] @set beast/sleep_hour = 21 # Beast:4 ends here @@ -952,7 +954,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # It will wake at 8am … -# [[file:../../../projects/mud.org::*Beast][Beast:5]] +# [[file:../moss-n-puddles.org::*Beast][Beast:5]] @set beast/wake_hour = 8 # Beast:5 ends here @@ -961,7 +963,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Let’s set some behavior levels. For instance, the beast is sad when he doesn’t see its friends: -# [[file:../../../projects/mud.org::*Beast][Beast:6]] +# [[file:../moss-n-puddles.org::*Beast][Beast:6]] @set beast/loneliness_amount = -2 # Beast:6 ends here @@ -970,7 +972,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # It seem to warm up the to new characters hanging around the area, but not as much as those that would interact with it: -# [[file:../../../projects/mud.org::*Beast][Beast:7]] +# [[file:../moss-n-puddles.org::*Beast][Beast:7]] @set beast/shyness_amount = 3 # Beast:7 ends here @@ -979,7 +981,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # How active should this pet be? Seems like at the moment, it shouldn’t be too obnoxious. This setting is a percentage, so 12 is /12%/, which returns a message only 12% of the /ticks/ (where a tick is about a minute). -# [[file:../../../projects/mud.org::*Beast][Beast:8]] +# [[file:../moss-n-puddles.org::*Beast][Beast:8]] @set beast/active_amount = 10 # Beast:8 ends here @@ -988,7 +990,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # It isn’t that scared of new people, as it will ignore them when someone it knows is around. -# [[file:../../../projects/mud.org::*Beast][Beast:9]] +# [[file:../moss-n-puddles.org::*Beast][Beast:9]] @set beast/new_character_reaction = 'ignores' # Beast:9 ends here @@ -997,7 +999,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Seems we should make descriptions for all the states that happen when you look at them. These are appended to the standard description. -# [[file:../../../projects/mud.org::*Beast][Beast:10]] +# [[file:../moss-n-puddles.org::*Beast][Beast:10]] @set beast/scared_msg = "It seems <> as it tries to hide behind a tall clump of grass. Yeah, it doesn't do a good job of hiding." # Beast:10 ends here @@ -1006,7 +1008,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Concerned level: -# [[file:../../../projects/mud.org::*Beast][Beast:11]] +# [[file:../moss-n-puddles.org::*Beast][Beast:11]] @set beast/concerned_msg = "Its large, yellow eyes stare at you from a safe distance." # Beast:11 ends here @@ -1015,7 +1017,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Interested level: -# [[file:../../../projects/mud.org::*Beast][Beast:12]] +# [[file:../moss-n-puddles.org::*Beast][Beast:12]] @set beast/interested_msg = "It seems <> in what you are doing <>. ;; Its << ^ large, ^ big,>> yellow eyes watch your every move." # Beast:12 ends here @@ -1024,7 +1026,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Friendly level: -# [[file:../../../projects/mud.org::*Beast][Beast:13]] +# [[file:../moss-n-puddles.org::*Beast][Beast:13]] @set beast/friendly_msg = "It sits next to you, as its big, friendly eyes gaze as you. ;; It <> to you, wagging its tail-less behind. ;; It lays down next to you." # Beast:13 ends here @@ -1033,7 +1035,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # When the beast is sleeping, we can some times spam the room with the snores: -# [[file:../../../projects/mud.org::*Beast][Beast:14]] +# [[file:../moss-n-puddles.org::*Beast][Beast:14]] @set beast/sleeping_actions = "The <> <> <> lets loose a <> snore. ;; The <> <> <> growls in its sleep. ;; The <> <> <> twitches its <>. ;; The <> <> <> <> on its <> mattress." # Beast:14 ends here @@ -1044,7 +1046,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # The scared level doesn’t last long, so let’s just leave one message: -# [[file:../../../projects/mud.org::*Beast][Beast:15]] +# [[file:../moss-n-puddles.org::*Beast][Beast:15]] @set beast/scared_actions = "A tremendously large and hairy beast attempts to nervously (and almost comically) hide" # Beast:15 ends here @@ -1054,7 +1056,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Concerned actions: -# [[file:../../../projects/mud.org::*Beast][Beast:16]] +# [[file:../moss-n-puddles.org::*Beast][Beast:16]] @set beast/concerned_actions = "The <> <> <> <> concerned by your presence in the <>. ;; The <> <> <> seems concerned. Maybe it's hungry. ;; The <> <> <> seems concerned and keeps its distance." # Beast:16 ends here @@ -1063,7 +1065,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Interested actions: -# [[file:../../../projects/mud.org::*Beast][Beast:17]] +# [[file:../moss-n-puddles.org::*Beast][Beast:17]] @set beast/interested_actions = "The <> <> <> seems <> in $you(). ;; The <> <> <> seems curious about $you(). ;; The <> <> <> stands on its hind legs. ;; The <> <> <> <> $you() with its <> yellow eyes." # Beast:17 ends here @@ -1072,7 +1074,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Friendly actions: -# [[file:../../../projects/mud.org::*Beast][Beast:18]] +# [[file:../moss-n-puddles.org::*Beast][Beast:18]] @set beast/friendly_actions = "The <> <> <> <> <> wagging its backend<<, ^ as it seems>> happy to see $you(). ;; The <> <> <> <> <> hoping to play with $you(). ;; The <> <> <> flops over in front of $you() wriggling <> on the ground. ;; The <> <> <> <> <> next to $you(). ;; The <> <> <> chases butterflies around the <>." # Beast:18 ends here @@ -1081,7 +1083,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # The ecstatic states are just a bit more than friendly. -# [[file:../../../projects/mud.org::*Beast][Beast:19]] +# [[file:../moss-n-puddles.org::*Beast][Beast:19]] @set beast/ecstatic_actions = "The <> <> <> <> <> to give $you() a sloppy <>. ;; The <> <> <> <> <> wagging its backend as it seems <> excited to see $you(). ;; The <> <> <> <> <> hoping to play with $you(). ;; The <> <> <> flops over in front of $you() happily wriggling on the ground. ;; The <> <> <> excitedly <> <> next to you. ;; The <> <> <> <> leaps into air. ;; The <> <> <> chases butterflies around the <>." # Beast:19 ends here @@ -1090,7 +1092,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And the responses to being /pet/: -# [[file:../../../projects/mud.org::*Beast][Beast:20]] +# [[file:../moss-n-puddles.org::*Beast][Beast:20]] @set beast/pet_sleeping_response = "Petting a sleeping beast of that size isn't your best idea." # @set beast/pet_scared_response = "$You() can't get near the wild beast to pet it. It seems scared." @@ -1107,7 +1109,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # To the east of the meadow, let’s make a glade back inside the Forest: -# [[file:../../../projects/mud.org::*Glittering Glade][Glittering Glade:1]] +# [[file:../moss-n-puddles.org::*Glittering Glade][Glittering Glade:1]] @teleport mp05 # Glittering Glade:1 ends here @@ -1115,7 +1117,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And we use the =tunnel= command this time: -# [[file:../../../projects/mud.org::*Glittering Glade][Glittering Glade:2]] +# [[file:../moss-n-puddles.org::*Glittering Glade][Glittering Glade:2]] @dig Glittering Glade;mp19 : typeclasses.rooms.Room = east footpath into another forest;east;glade;e,west footpath to meadow;footpath;west;w;path # Glittering Glade:2 ends here @@ -1123,11 +1125,11 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # A description if they look east: -# [[file:../../../projects/mud.org::*Glittering Glade][Glittering Glade:3]] +# [[file:../moss-n-puddles.org::*Glittering Glade][Glittering Glade:3]] @desc east = Looking at the forest on the east side shows a footpath illuminated by dancing glowing orbs. # Glittering Glade:3 ends here -# [[file:../../../projects/mud.org::*Glittering Glade][Glittering Glade:4]] +# [[file:../moss-n-puddles.org::*Glittering Glade][Glittering Glade:4]] @detail orbs = The orbs swirl around in a circular pattern creating a mesmerizing vortex of light leading deep into the forest. # Glittering Glade:4 ends here @@ -1135,7 +1137,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And a nice journey message to go east out of the forest: -# [[file:../../../projects/mud.org::*Glittering Glade][Glittering Glade:5]] +# [[file:../moss-n-puddles.org::*Glittering Glade][Glittering Glade:5]] @set east/traverse_msg = "You step into this dark forest onto a footpath illuminated by swirling orbs of light. You follow the path until it opens into a glade." # Glittering Glade:5 ends here @@ -1144,7 +1146,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Before we label it, we follow =east=: -# [[file:../../../projects/mud.org::*Glittering Glade][Glittering Glade:6]] +# [[file:../moss-n-puddles.org::*Glittering Glade][Glittering Glade:6]] @teleport mp19 # Glittering Glade:6 ends here @@ -1153,19 +1155,19 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And the description won’t have day/night, but we can /reference/ it: -# [[file:../../../projects/mud.org::*Glittering Glade][Glittering Glade:7]] +# [[file:../moss-n-puddles.org::*Glittering Glade][Glittering Glade:7]] @desc here = The footpath ends in a beautiful glade. While the thick canopy above blocks the morning lightthe daylightthe glowing twilightany light that might show, the glade is illuminated by swirling |Yorbs|n of light. You see a round, stone |Ytable|n and a blue painted |Ydoor|n embedded in a giant tree. # Glittering Glade:7 ends here -# [[file:../../../projects/mud.org::*Glittering Glade][Glittering Glade:8]] +# [[file:../moss-n-puddles.org::*Glittering Glade][Glittering Glade:8]] @detail orbs = The orbs swirl above illuminating the glade. # Glittering Glade:8 ends here -# [[file:../../../projects/mud.org::*Glittering Glade][Glittering Glade:9]] +# [[file:../moss-n-puddles.org::*Glittering Glade][Glittering Glade:9]] @detail trees = Ancient trees surround this glade like walls. # Glittering Glade:9 ends here -# [[file:../../../projects/mud.org::*Glittering Glade][Glittering Glade:10]] +# [[file:../moss-n-puddles.org::*Glittering Glade][Glittering Glade:10]] @detail tree = The largest tree stands at one end of the glade, forms steps from this roots that lead to a |Ydoor|n embedded in its bark. # Glittering Glade:10 ends here @@ -1173,7 +1175,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # A description if they look back towards the west: -# [[file:../../../projects/mud.org::*Glittering Glade][Glittering Glade:11]] +# [[file:../moss-n-puddles.org::*Glittering Glade][Glittering Glade:11]] @desc west = The footpath leads out of the forest to a meadow. # Glittering Glade:11 ends here @@ -1181,7 +1183,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And a nice journey message to go east out of the forest: -# [[file:../../../projects/mud.org::*Glittering Glade][Glittering Glade:12]] +# [[file:../moss-n-puddles.org::*Glittering Glade][Glittering Glade:12]] @set west/traverse_msg = "You followed the illuminated footpath until you exit the forest into a meadow." # Glittering Glade:12 ends here @@ -1189,7 +1191,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Not only does the /table/ in this glade offers a riddle, but also arbitrates the answer of the puzzle to unlock the blue door into the tavern. As a special object, it can listen for words, and perform commands: -# [[file:../../../projects/mud.org::*Stone Table][Stone Table:1]] +# [[file:../moss-n-puddles.org::*Stone Table][Stone Table:1]] @create/drop stone table:typeclasses.puzzles.StoryCube # Stone Table:1 ends here @@ -1198,7 +1200,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And a description must be careful with the newlines to make the verse work: -# [[file:../../../projects/mud.org::*Stone Table][Stone Table:2]] +# [[file:../moss-n-puddles.org::*Stone Table][Stone Table:2]] @desc table = Moss fills four |Yrunes|n carved along the edge of this weathered table. In the center, you can read a message:|/|/ Born of rain and ground combined,|/ No solid form, yet firm when dried.|/ Clinging to feet. Adored by boar.|/ Speak my name to open the door. # Stone Table:2 ends here @@ -1207,7 +1209,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Can we read it? -# [[file:../../../projects/mud.org::*Stone Table][Stone Table:3]] +# [[file:../moss-n-puddles.org::*Stone Table][Stone Table:3]] @set table/inside = "While you can't read the |Yrunes|n, you can read the message in the middle of the table:|/|/ Born of rain and ground combined,|/ No solid form, yet firm when dried.|/ Clinging to feet. Adored by boar.|/ Speak my name to open the door." # Stone Table:3 ends here @@ -1216,7 +1218,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And some flavor that offers a hint to the answer of the riddle, to combine Water and Earth: -# [[file:../../../projects/mud.org::*Stone Table][Stone Table:4]] +# [[file:../moss-n-puddles.org::*Stone Table][Stone Table:4]] @detail runes;rune = While you've never before encountered these stanges runes, etched into the ancient stone, yet somehow you know that they represent the elements of |wEarth|n, |wAir|n, |wFire|n and |wWater|n. # Stone Table:4 ends here @@ -1224,7 +1226,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # The table shouldn’t be steal-able: -# [[file:../../../projects/mud.org::*Stone Table][Stone Table:5]] +# [[file:../moss-n-puddles.org::*Stone Table][Stone Table:5]] @lock table = get:false() # @set table/get_err_msg = "That table is much too big for you to lift." @@ -1235,7 +1237,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Answer the riddle to be able to go to the Tavern: -# [[file:../../../projects/mud.org::*Stone Table][Stone Table:6]] +# [[file:../moss-n-puddles.org::*Stone Table][Stone Table:6]] @set table/say = {r".*\bmud\b.*": "gm You hear an audible click, and find the blue door, that was closed before, now is ajar. ;; tag_all open_blue_door"} # Stone Table:6 ends here @@ -1243,7 +1245,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # This now needs to be transferred from the [[file:mud-rpg.org][mud-rpg]] file. -# [[file:../../../projects/mud.org::*Tavern: Wyldwood Bar][Tavern: Wyldwood Bar:1]] +# [[file:../moss-n-puddles.org::*Tavern: Wyldwood Bar][Tavern: Wyldwood Bar:1]] @dig Wyldwood Bar;mp10 = blue door;door,blue door to forest;leave;outside # Tavern: Wyldwood Bar:1 ends here @@ -1251,7 +1253,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And describe it: -# [[file:../../../projects/mud.org::*Blue Door][Blue Door:2]] +# [[file:../moss-n-puddles.org::*Blue Door][Blue Door:2]] @desc door = A painted blue door where the round top of the door fits snugly in the bark of the tree. The comically large doorknob in the center of the door looks ornamental. # Blue Door:2 ends here @@ -1260,7 +1262,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # The dock is locked: -# [[file:../../../projects/mud.org::*Blue Door][Blue Door:3]] +# [[file:../moss-n-puddles.org::*Blue Door][Blue Door:3]] @set blue door/err_traverse = "The door seems locked...or at least, won't budge." # Blue Door:3 ends here @@ -1268,7 +1270,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Open-able if you have the correct tag: -# [[file:../../../projects/mud.org::*Blue Door][Blue Door:4]] +# [[file:../moss-n-puddles.org::*Blue Door][Blue Door:4]] @lock blue door = traverse:tag(open_blue_door) # Blue Door:4 ends here @@ -1276,14 +1278,14 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Let’s have an interesting phrase entering the bar … -# [[file:../../../projects/mud.org::*Blue Door][Blue Door:7]] +# [[file:../moss-n-puddles.org::*Blue Door][Blue Door:7]] @set door/traverse_msg = "You open the blue door and enter inside the tree... and find yourself in a mirror copy of the glade you just left, but this glade looks like a |wtavern|n." # Blue Door:7 ends here # Let’s hop into the Bar in order to work it over: -# [[file:../../../projects/mud.org::*Inside the Bar][Inside the Bar:1]] +# [[file:../moss-n-puddles.org::*Inside the Bar][Inside the Bar:1]] @tel mp10 # Inside the Bar:1 ends here @@ -1292,7 +1294,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Do we want to make the permanent residents part of the description. -# [[file:../../../projects/mud.org::*Inside the Bar][Inside the Bar:2]] +# [[file:../moss-n-puddles.org::*Inside the Bar][Inside the Bar:2]] @desc here = An amazing “room” formed from a ring of living |Ytrees|n. The canopy of |Yboughs|n above twinkle with the |Ylights|n of small, glowing orbs. Working the bar, a haughty-looking |Yelf|n; waiting on tables, a smiling |Ymushroom man|n, er...person. # Inside the Bar:2 ends here @@ -1301,15 +1303,15 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And some ambiance and details for items in the description. -# [[file:../../../projects/mud.org::*Inside the Bar][Inside the Bar:3]] +# [[file:../moss-n-puddles.org::*Inside the Bar][Inside the Bar:3]] @detail trees;tree;trunk;trunks = You've never see elder tree trunks so large or that grow so close together. Of course, dark gray trunks absorb the soft light from the |Yorbs|n making the area appear much larger. # Inside the Bar:3 ends here -# [[file:../../../projects/mud.org::*Inside the Bar][Inside the Bar:4]] +# [[file:../moss-n-puddles.org::*Inside the Bar][Inside the Bar:4]] @detail boughs;bough;branches;canopy = The branches of the black elder |Ytrees|n create a sort of roof overhead. # Inside the Bar:4 ends here -# [[file:../../../projects/mud.org::*Inside the Bar][Inside the Bar:5]] +# [[file:../moss-n-puddles.org::*Inside the Bar][Inside the Bar:5]] @detail lights;light;orbs = Hundreds of small, dancing orbs float around the |Ycanopy|n above the room, casting a soft glow of light. # Inside the Bar:5 ends here @@ -1318,7 +1320,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And describe the door leaving the bar: -# [[file:../../../projects/mud.org::*Inside the Bar][Inside the Bar:6]] +# [[file:../moss-n-puddles.org::*Inside the Bar][Inside the Bar:6]] @desc blue door = The painted blue door you used to enter this tavern, looks the same on this side too...a door that fits snugly in the bark of the tree. Going through this door again may take you back to the forest, but who knows? # Inside the Bar:6 ends here @@ -1326,7 +1328,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Let’s have an interesting phrase entering the bar … -# [[file:../../../projects/mud.org::*Inside the Bar][Inside the Bar:7]] +# [[file:../moss-n-puddles.org::*Inside the Bar][Inside the Bar:7]] @set blue door/traverse_msg = "You open the blue door and enter inside the tree... and find yourself back in the first glade, with a path that leads through a forest." # Inside the Bar:7 ends here @@ -1334,7 +1336,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And [[file:~/src/moss-n-puddles/typeclasses/sittables.py::class Sittables(Sittable):][the stools]] is a /plural/ location to sit, allowing anyone to sit down. -# [[file:../../../projects/mud.org::*Bar Stools][Bar Stools:1]] +# [[file:../moss-n-puddles.org::*Bar Stools][Bar Stools:1]] @create/drop bar stools;stools;chairs:typeclasses.sittables.Sittables # Bar Stools:1 ends here @@ -1342,7 +1344,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # This only works if we make it plural: -# [[file:../../../projects/mud.org::*Bar Stools][Bar Stools:2]] +# [[file:../moss-n-puddles.org::*Bar Stools][Bar Stools:2]] @set bar stools/plural = True # Bar Stools:2 ends here @@ -1350,7 +1352,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And the description: -# [[file:../../../projects/mud.org::*Bar Stools][Bar Stools:3]] +# [[file:../moss-n-puddles.org::*Bar Stools][Bar Stools:3]] @desc bar stools = You didn't know trees could grow in the shape of bar stools, and yet, the places you can sit seem quite organic. # Bar Stools:3 ends here @@ -1358,7 +1360,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Can’t steal ‘em: -# [[file:../../../projects/mud.org::*Bar Stools][Bar Stools:4]] +# [[file:../moss-n-puddles.org::*Bar Stools][Bar Stools:4]] @lock stools = get:false() # @set stools/get_err_msg = "The stool may actually be part of the decor and can't be moved." @@ -1368,7 +1370,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And textual descriptions the object can use: -# [[file:../../../projects/mud.org::*Bar Stools][Bar Stools:5]] +# [[file:../moss-n-puddles.org::*Bar Stools][Bar Stools:5]] @set stools/singular = "one of the stools at the bar" # Bar Stools:5 ends here @@ -1376,7 +1378,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Let’s create a sign for the list of cocktails: -# [[file:../../../projects/mud.org::*Cocktails][Cocktails:1]] +# [[file:../moss-n-puddles.org::*Cocktails][Cocktails:1]] @create/drop sign above the bar;sign;list:typeclasses.readables.Readable # Cocktails:1 ends here @@ -1385,7 +1387,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And the description: -# [[file:../../../projects/mud.org::*Cocktails][Cocktails:2]] +# [[file:../moss-n-puddles.org::*Cocktails][Cocktails:2]] @desc sign = You see a large sign made of wood over the bar, hanging from a branch of one of the living trees. Painted words at the top read, |wWyldwood Cocktails|n, and a list of drinks you can order. # Cocktails:2 ends here @@ -1394,7 +1396,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Might as well allow the user to read it: -# [[file:../../../projects/mud.org::*Cocktails][Cocktails:3]] +# [[file:../moss-n-puddles.org::*Cocktails][Cocktails:3]] @set sign/inside = "|wCocktails|n|/ - Moonlit Mirage|/ - Puck's Revenge|/ - Glimmering Gossamer|/ - Whimsical Willow|/ - Charmed Chalice|/ - Enchanted Elixir|/ - Sylvan Serenade|/ - Brambleberry Bliss|/ - Twilight Tonic|/" # Cocktails:3 ends here @@ -1402,7 +1404,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # And lock down the sign: -# [[file:../../../projects/mud.org::*Cocktails][Cocktails:4]] +# [[file:../moss-n-puddles.org::*Cocktails][Cocktails:4]] @lock sign = get:false() # @set sign/get_err_msg = "The tree trunk that holds the sign has grown around it making it impossible to remove." @@ -1413,7 +1415,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Needs the ability to create a drink. -# [[file:../../../projects/mud.org::*Cocktails][Cocktails:6]] +# [[file:../moss-n-puddles.org::*Cocktails][Cocktails:6]] @set bartender/currentgame = "session1" # Cocktails:6 ends here @@ -1423,7 +1425,7 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add -# [[file:../../../projects/mud.org::*Cocktails][Cocktails:7]] +# [[file:../moss-n-puddles.org::*Cocktails][Cocktails:7]] @set bartender/triggers:session1 = { "prep1": { "desc": "Single preparation step for making a cocktail", @@ -1453,77 +1455,93 @@ py s = me.search("squirrel") ; s.db._sdesc="orange-robed squirrel" ; s.sdesc.add # Cocktails:7 ends here -# A haughty elf named Elendil +# Return to the Bar … -# [[file:../../../projects/mud.org::*Bartender][Bartender:1]] -@create/drop Bartender;barkeep;Elendil: typeclasses.chatbots.Bartender -# -@set bartender/gender = "male" +# [[file:../moss-n-puddles.org::*Bartender][Bartender:1]] +@teleport Wyldwood Bar # Bartender:1 ends here -# [[file:../../../projects/mud.org::*Bartender][Bartender:2]] -py bt = self.search('Bartender') ; bt.db._sdesc="blonde elf bartender" ; bt.sdesc.add('blonde elf bartender') ; bt.home = here ; bt.db.pose = 'working behind the bar' + + +# A haughty elf named Elendil + +# [[file:../moss-n-puddles.org::*Bartender][Bartender:2]] +@create/drop Bartender;barkeep;Elendil: typeclasses.chatbots.Bartender +# @update Bartender = typeclasses.chatbots.Bartender # Bartender:2 ends here +# And all the RP system stuff: + + +# [[file:../moss-n-puddles.org::*Bartender][Bartender:3]] +@set bartender/gender = "male" +# Bartender:3 ends here + +# [[file:../moss-n-puddles.org::*Bartender][Bartender:4]] +py bt = self.search('Bartender') ; bt.db._sdesc="blonde elf bartender" ; bt.sdesc.add('blonde elf bartender') ; bt.home = here ; bt.db.pose = 'working behind the bar' +# Bartender:4 ends here + + + # And default pose: -# [[file:../../../projects/mud.org::*Bartender][Bartender:3]] +# [[file:../moss-n-puddles.org::*Bartender][Bartender:5]] @pose default bartender = working behind the bar -# Bartender:3 ends here +# Bartender:5 ends here # And an un-puppeted pose: -# [[file:../../../projects/mud.org::*Bartender][Bartender:4]] +# [[file:../moss-n-puddles.org::*Bartender][Bartender:6]] @set bartender/pose_sleep = "fiddling with something behind the bar" # @set bartender/pose_default = "working behind the bar" # @set bartender/pose_default = "wiping down the bar" -# Bartender:4 ends here +# Bartender:6 ends here # And a good description: -# [[file:../../../projects/mud.org::*Bartender][Bartender:5]] +# [[file:../moss-n-puddles.org::*Bartender][Bartender:7]] @desc Bartender = A haughty-looking elf with green eyes and long blond hair with two intricate braids accentuating incredibly pointed ears. His nose, pointed, often points straight up in order to look down on you. -# Bartender:5 ends here +# Bartender:7 ends here # As well as the automation: -# [[file:../../../projects/mud.org::*Bartender][Bartender:7]] +# [[file:../moss-n-puddles.org::*Bartender][Bartender:9]] py me.search("bartender").backstory("tavern") -# Bartender:7 ends here +# Bartender:9 ends here # And let’s make him initially invisible: -# [[file:../../../projects/mud.org::*Bartender][Bartender:8]] +# [[file:../moss-n-puddles.org::*Bartender][Bartender:10]] @set Bartender/hidden_tag = "hidden_bartender" # @lock Bartender = view:tag(hidden_bartender) -# Bartender:8 ends here +# Bartender:10 ends here # Seems that different triggering hooks could have different delayed responses. What sort of events? And do we bother if we convert the Bartender to a Chatbot? -# [[file:../../../projects/mud.org::*Automated Responses][Automated Responses:1]] +# [[file:../moss-n-puddles.org::*Automated Responses][Automated Responses:1]] @set bartender/arrive:dabbler = "5 ;; say to old gnome Ah, welcome, sir. I've acquired another one of those whiskys from the Mud World. This one claims to taste like a... hrm... << burning hosptial ^ seagull's armpit, er wingpit, I guess ^ going down on a mermaid, wait, I believe you've done that ^ licking a salty ashtray >>. ;; 10 ;; emote takes a brown glass bottle from a chest, and pours some into a glass. ;; shake whisky = gnome" # Automated Responses:1 ends here -# [[file:../../../projects/mud.org::*Automated Responses][Automated Responses:2]] +# [[file:../moss-n-puddles.org::*Automated Responses][Automated Responses:2]] @set bartender/arrive = "4 ;; say Welcome to the |wWyldwood Bar|n. Read the sign for a list of our cocktails, and let me know what you'd like to drink." # Automated Responses:2 ends here @@ -1531,7 +1549,7 @@ py me.search("bartender").backstory("tavern") # Let’s convert the Bartender to a Chatbot using [[file:~/src/moss-n-puddles/personalities/tavern.md][tavern.md]]. This way, talking to the Bartender *answers* from everyone. -# [[file:../../../projects/mud.org::*Puppeting][Puppeting:1]] +# [[file:../moss-n-puddles.org::*Puppeting][Puppeting:1]] @set bartender/personality = "tavern" # @set bartender/personality_file = "personalities/tavern.md" @@ -1542,7 +1560,7 @@ py me.search("bartender").backstory("tavern") # Need a channel to chat about the game: -# [[file:../../../projects/mud.org::*Hide and Seek][Hide and Seek:6]] +# [[file:../moss-n-puddles.org::*Hide and Seek][Hide and Seek:6]] @channel/create Hide and Seek Game;hide;game = Messages to people playing the Hide and Seek game # # Others would type: @@ -1554,7 +1572,7 @@ py me.search("bartender").backstory("tavern") # Gotta have something to munch on. -# [[file:../../../projects/mud.org::*Bowl of Candy][Bowl of Candy:1]] +# [[file:../moss-n-puddles.org::*Bowl of Candy][Bowl of Candy:1]] @create/drop bowl of candies;bowl;candy : typeclasses.consumables.Producer # Bowl of Candy:1 ends here @@ -1562,7 +1580,7 @@ py me.search("bartender").backstory("tavern") # With a description: -# [[file:../../../projects/mud.org::*Bowl of Candy][Bowl of Candy:2]] +# [[file:../moss-n-puddles.org::*Bowl of Candy][Bowl of Candy:2]] @desc bowl = A large white daisy forms a bowl holding a collection of colored hard candies. # Bowl of Candy:2 ends here @@ -1570,7 +1588,7 @@ py me.search("bartender").backstory("tavern") # Hold off on the viewing: -# [[file:../../../projects/mud.org::*Bowl of Candy][Bowl of Candy:4]] +# [[file:../moss-n-puddles.org::*Bowl of Candy][Bowl of Candy:4]] @set bowl/hidden_tag = "hidden_bowl" # @lock bowl = view:tag(hidden_bowl) @@ -1581,14 +1599,14 @@ py me.search("bartender").backstory("tavern") # We have to have the bowl of candy describe what it /makes/: -# [[file:../../../projects/mud.org::*Bowl of Candy][Bowl of Candy:5]] +# [[file:../moss-n-puddles.org::*Bowl of Candy][Bowl of Candy:5]] @set bowl/make_name = "candy" # Bowl of Candy:5 ends here # Including some plural aliases: -# [[file:../../../projects/mud.org::*Bowl of Candy][Bowl of Candy:6]] +# [[file:../moss-n-puddles.org::*Bowl of Candy][Bowl of Candy:6]] @set bowl/make_aliases = ["candies"] # Bowl of Candy:6 ends here @@ -1596,7 +1614,7 @@ py me.search("bartender").backstory("tavern") # And a verb when they /get/ the consumable: -# [[file:../../../projects/mud.org::*Bowl of Candy][Bowl of Candy:7]] +# [[file:../moss-n-puddles.org::*Bowl of Candy][Bowl of Candy:7]] @set bowl/make_verb = "$conj(grab) a" # @set bowl/make_note = " from the bowl" @@ -1606,7 +1624,7 @@ py me.search("bartender").backstory("tavern") # And the bowl needs to know the /description/ of the Consumable, so that it can attach that: -# [[file:../../../projects/mud.org::*Bowl of Candy][Bowl of Candy:9]] +# [[file:../moss-n-puddles.org::*Bowl of Candy][Bowl of Candy:9]] @set bowl/make_desc = "Bright << red ^ orange ^ yellow ^ blue ^ violet >> candy with << flecks ^ spots ^ stripes >> of << red ^ orange ^ purple ^ violet ^ orange >>." # Bowl of Candy:9 ends here @@ -1614,7 +1632,7 @@ py me.search("bartender").backstory("tavern") # How many candies are there when you pick them? -# [[file:../../../projects/mud.org::*Bowl of Candy][Bowl of Candy:10]] +# [[file:../moss-n-puddles.org::*Bowl of Candy][Bowl of Candy:10]] @set bowl/make_amount = 1 # Bowl of Candy:10 ends here @@ -1622,7 +1640,7 @@ py me.search("bartender").backstory("tavern") # How many candies do you eat at a time: -# [[file:../../../projects/mud.org::*Bowl of Candy][Bowl of Candy:11]] +# [[file:../moss-n-puddles.org::*Bowl of Candy][Bowl of Candy:11]] @set bowl/make_eat_amount = 1 # Bowl of Candy:11 ends here @@ -1630,7 +1648,7 @@ py me.search("bartender").backstory("tavern") # Messages can be randomly selected: -# [[file:../../../projects/mud.org::*Bowl of Candy][Bowl of Candy:12]] +# [[file:../moss-n-puddles.org::*Bowl of Candy][Bowl of Candy:12]] @set bowl/make_eat_msgs = [ "Tastes of elderberry. Do I even know what that tastes like?", "Tastes of elderflower...certainly not youngerflower.", @@ -1673,7 +1691,7 @@ py me.search("bartender").backstory("tavern") # A haughty elf named Elendil -# [[file:../../../projects/mud.org::*Pixie Quartet][Pixie Quartet:1]] +# [[file:../moss-n-puddles.org::*Pixie Quartet][Pixie Quartet:1]] @create/drop Pixies;pixie: typeclasses.puppets.Puppet # Pixie Quartet:1 ends here @@ -1684,11 +1702,11 @@ py me.search("bartender").backstory("tavern") # And all the RP system stuff: -# [[file:../../../projects/mud.org::*Pixie Quartet][Pixie Quartet:2]] +# [[file:../moss-n-puddles.org::*Pixie Quartet][Pixie Quartet:2]] py bt = self.search('pixies'); bt.db._sdesc = "quartet of pixies"; bt.db.pose_default = 'playing music atop a giant fieldcap mushroom'; bt.db.pose = 'playing music'; bt.db.gender = 'ambiguous'; # Pixie Quartet:2 ends here -# [[file:../../../projects/mud.org::*Pixie Quartet][Pixie Quartet:3]] +# [[file:../moss-n-puddles.org::*Pixie Quartet][Pixie Quartet:3]] @desc pixies = Atop a giant fieldcap mushroom, a quartet of pixies playing the strangest instruments you've never seen, fill the room with music. # Pixie Quartet:3 ends here @@ -1697,7 +1715,7 @@ py bt = self.search('pixies'); bt.db._sdesc = "quartet of pixies"; bt.db.pose_de # And default pose: -# [[file:../../../projects/mud.org::*Pixie Quartet][Pixie Quartet:4]] +# [[file:../moss-n-puddles.org::*Pixie Quartet][Pixie Quartet:4]] pose default pixies = drinking at the bar instead of performing # Pixie Quartet:4 ends here @@ -1706,7 +1724,7 @@ pose default pixies = drinking at the bar instead of performing # And an unpuppeted pose: -# [[file:../../../projects/mud.org::*Pixie Quartet][Pixie Quartet:5]] +# [[file:../moss-n-puddles.org::*Pixie Quartet][Pixie Quartet:5]] @set pixies/pose_sleep = "playing music atop a giant mushroom" # Pixie Quartet:5 ends here @@ -1715,7 +1733,7 @@ pose default pixies = drinking at the bar instead of performing # And details: -# [[file:../../../projects/mud.org::*Pixie Quartet][Pixie Quartet:6]] +# [[file:../moss-n-puddles.org::*Pixie Quartet][Pixie Quartet:6]] @detail mushroom = A giant, beige-colored mushroom grows on the side of this room providing a perfect stage for the pixie musicians. # Pixie Quartet:6 ends here @@ -1724,7 +1742,7 @@ pose default pixies = drinking at the bar instead of performing # And when Dabbler arrives … -# [[file:../../../projects/mud.org::*Pixie Quartet][Pixie Quartet:8]] +# [[file:../moss-n-puddles.org::*Pixie Quartet][Pixie Quartet:8]] @set pixies/arrive:dabbler = "12 ;; gm The quartet on the mushroom start playing an << interesting ^ odd >> << composition ^ song ^ arrangment >>. ;; The pixie leader says, \"As you can tell, we're playing << a jazz standard ^ a jazz melody ^ something the Mudders call, jazz fusion >>. That's right, something we picked up from << our travels in ^ >> the Mud World." # Pixie Quartet:8 ends here @@ -1732,7 +1750,7 @@ pose default pixies = drinking at the bar instead of performing # Next great NPC will a cameo from the Awakened Shrub. -# [[file:../../../projects/mud.org::*Awakened Shrub][Awakened Shrub:1]] +# [[file:../moss-n-puddles.org::*Awakened Shrub][Awakened Shrub:1]] @create/drop Shrub;bush;chalkboard;awakened shrub: typeclasses.puppets.Shrub # Awakened Shrub:1 ends here @@ -1741,7 +1759,7 @@ pose default pixies = drinking at the bar instead of performing # And describe it: -# [[file:../../../projects/mud.org::*Awakened Shrub][Awakened Shrub:2]] +# [[file:../moss-n-puddles.org::*Awakened Shrub][Awakened Shrub:2]] @desc shrub = If a small shrub had the facial muscles to smile and show how much it enjoys itself, this lil' guy would be it. The short leaves indicates it once was a boxwood, but the way it nurses that glass of water shows those days are way behind. When you look its way, it waves a branch at you. You notice one of its branches clutch a small chalkboard while another holds a piece of chalk. # Awakened Shrub:2 ends here @@ -1749,7 +1767,7 @@ pose default pixies = drinking at the bar instead of performing # And tag it: -# [[file:../../../projects/mud.org::*Awakened Shrub][Awakened Shrub:3]] +# [[file:../moss-n-puddles.org::*Awakened Shrub][Awakened Shrub:3]] py bt = self.search('shrub'); bt.db.gender = 'neutral'; bt.db._sdesc = 'shrub'; bt.db.pose_default = 'nursing a glass of water'; bt.db.pose = 'nursing a glass of water' # Awakened Shrub:3 ends here @@ -1758,7 +1776,7 @@ py bt = self.search('shrub'); bt.db.gender = 'neutral'; bt.db._sdesc = 'shrub'; # And default pose: -# [[file:../../../projects/mud.org::*Awakened Shrub][Awakened Shrub:4]] +# [[file:../moss-n-puddles.org::*Awakened Shrub][Awakened Shrub:4]] pose default shrub = writing something in a notebook # Awakened Shrub:4 ends here @@ -1767,7 +1785,7 @@ pose default shrub = writing something in a notebook # And an unpuppeted pose: -# [[file:../../../projects/mud.org::*Awakened Shrub][Awakened Shrub:5]] +# [[file:../moss-n-puddles.org::*Awakened Shrub][Awakened Shrub:5]] @set shrub/pose_sleep = "nursing a glass of water" # Awakened Shrub:5 ends here @@ -1776,7 +1794,7 @@ pose default shrub = writing something in a notebook # And let’s not let anyone pick it up: -# [[file:../../../projects/mud.org::*Awakened Shrub][Awakened Shrub:6]] +# [[file:../moss-n-puddles.org::*Awakened Shrub][Awakened Shrub:6]] @set shrub/get_err_msg = "It doesn't seem to appreciate your advances and shakes a top branch, no. Remember, no means, no." # Awakened Shrub:6 ends here @@ -1785,7 +1803,7 @@ pose default shrub = writing something in a notebook # Let’s set the location where it will store its transcripts: -# [[file:../../../projects/mud.org::*Awakened Shrub][Awakened Shrub:7]] +# [[file:../moss-n-puddles.org::*Awakened Shrub][Awakened Shrub:7]] @set shrub/transcripts_path = 'bar-transcripts/%Y-%m-%d.html' # # And the header as well: @@ -1797,11 +1815,11 @@ pose default shrub = writing something in a notebook # Be cool if it could write something: -# [[file:../../../projects/mud.org::*Awakened Shrub][Awakened Shrub:9]] +# [[file:../moss-n-puddles.org::*Awakened Shrub][Awakened Shrub:9]] @set shrub/inside = "The chalkboard reads,|/|/ Hello, My name is Shrub McShrubberson. What's yours?" # Awakened Shrub:9 ends here -# [[file:../../../projects/mud.org::*Awakened Shrub][Awakened Shrub:11]] +# [[file:../moss-n-puddles.org::*Awakened Shrub][Awakened Shrub:11]] @detail chalkboard = The shrub is holding a small chalkboard with a wood frame. # Awakened Shrub:11 ends here @@ -1809,7 +1827,7 @@ pose default shrub = writing something in a notebook # The river from the flows into a marsh: -# [[file:../../../projects/mud.org::*Mellow Marsh][Mellow Marsh:1]] +# [[file:../moss-n-puddles.org::*Mellow Marsh][Mellow Marsh:1]] @teleport mp05 # @dig Mellow Marsh;mp08 :typeclasses.rooms_weather.TimeWeatherRoom = south to marsh;south;marsh;s,north to meadow;n;north;meadow @@ -1820,7 +1838,7 @@ pose default shrub = writing something in a notebook # And =look south= should show: -# [[file:../../../projects/mud.org::*Mellow Marsh][Mellow Marsh:2]] +# [[file:../moss-n-puddles.org::*Mellow Marsh][Mellow Marsh:2]] @desc south = Looks like the river spreads into a marsh. Is that a hut you can see? # Mellow Marsh:2 ends here @@ -1829,7 +1847,7 @@ pose default shrub = writing something in a notebook # Describe the muddy marsh: -# [[file:../../../projects/mud.org::*Mellow Marsh][Mellow Marsh:3]] +# [[file:../moss-n-puddles.org::*Mellow Marsh][Mellow Marsh:3]] @set south/traverse_msg = "The ground gets muddier and harder to walk the further into the marsh you go..." # Mellow Marsh:3 ends here @@ -1838,7 +1856,7 @@ pose default shrub = writing something in a notebook # And a description of the marsh: -# [[file:../../../projects/mud.org::*Mellow Marsh][Mellow Marsh:4]] +# [[file:../moss-n-puddles.org::*Mellow Marsh][Mellow Marsh:4]] @teleport mp08 # @desc 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 small |Yhut|n, perched on three |Ystilts|n to keep it dry, stands in middle of the slough. @@ -1849,7 +1867,7 @@ pose default shrub = writing something in a notebook # And a new state when the house is bound: -# [[file:../../../projects/mud.org::*Mellow Marsh][Mellow Marsh:5]] +# [[file:../moss-n-puddles.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 the middle of the slough. # Mellow Marsh:5 ends here @@ -1858,7 +1876,7 @@ pose default shrub = writing something in a notebook # And =look north= should show: -# [[file:../../../projects/mud.org::*Mellow Marsh][Mellow Marsh:6]] +# [[file:../moss-n-puddles.org::*Mellow Marsh][Mellow Marsh:6]] @desc north = The meadow to the north looks easier to walk around. # Mellow Marsh:6 ends here @@ -1867,7 +1885,7 @@ pose default shrub = writing something in a notebook # Describe the muddy marsh: -# [[file:../../../projects/mud.org::*Mellow Marsh][Mellow Marsh:7]] +# [[file:../moss-n-puddles.org::*Mellow Marsh][Mellow Marsh:7]] @set north/traverse_msg = "The ground gets drier and easier to walk as you approach the meadow..." # Mellow Marsh:7 ends here @@ -1876,35 +1894,35 @@ pose default shrub = writing something in a notebook # Details for a more immersive experience: -# [[file:../../../projects/mud.org::*Mellow Marsh][Mellow Marsh:8]] +# [[file:../moss-n-puddles.org::*Mellow Marsh][Mellow Marsh:8]] @detail stilts;stilt = Those stilts are scaly...and clawed...and, are they chicken legs? How expected. # Mellow Marsh:8 ends here -# [[file:../../../projects/mud.org::*Mellow Marsh][Mellow Marsh:9]] +# [[file:../moss-n-puddles.org::*Mellow Marsh][Mellow Marsh:9]] @detail birds = Birds of every color on the rainbow and beyond, fly and squawk around you, but keep their distance. # Mellow Marsh:9 ends here -# [[file:../../../projects/mud.org::*Mellow Marsh][Mellow Marsh:10]] +# [[file:../moss-n-puddles.org::*Mellow Marsh][Mellow Marsh:10]] @detail moths;moth = On closer inspection, the moths are really |Ysprites|n playing a strange chasing game. # Mellow Marsh:10 ends here -# [[file:../../../projects/mud.org::*Mellow Marsh][Mellow Marsh:11]] +# [[file:../moss-n-puddles.org::*Mellow Marsh][Mellow Marsh:11]] @detail sprites;sprite = Seems that sprites with pink wings are on one team, and purple winged sprits on the other. The game became exciting as one sprite, holding aloft a flag is trying to avoid others as it streaks to the far side of the marsh. # Mellow Marsh:11 ends here -# [[file:../../../projects/mud.org::*Mellow Marsh][Mellow Marsh:12]] +# [[file:../moss-n-puddles.org::*Mellow Marsh][Mellow Marsh:12]] @detail fireflies = A passing firefly shows it to actually be a |Ypixie|n holding two colorful lanterns. # Mellow Marsh:12 ends here -# [[file:../../../projects/mud.org::*Mellow Marsh][Mellow Marsh:13]] +# [[file:../moss-n-puddles.org::*Mellow Marsh][Mellow Marsh:13]] @detail pixie;pixies = The pixies ignore you as their choreography keeps them focused on their dance. # Mellow Marsh:13 ends here -# [[file:../../../projects/mud.org::*Mellow Marsh][Mellow Marsh:14]] +# [[file:../moss-n-puddles.org::*Mellow Marsh][Mellow Marsh:14]] @detail grass = Guess this kind of grass doesn't mind the wet environment. # Mellow Marsh:14 ends here -# [[file:../../../projects/mud.org::*Mellow Marsh][Mellow Marsh:15]] +# [[file:../moss-n-puddles.org::*Mellow Marsh][Mellow Marsh:15]] @detail mud = Pretty brown and sticky. # Mellow Marsh:15 ends here @@ -1912,7 +1930,7 @@ pose default shrub = writing something in a notebook # As a future idea of making potions, we can collect /muddy water/, which needs to be turned to wine. -# [[file:../../../projects/mud.org::*Muddy Water][Muddy Water:1]] +# [[file:../moss-n-puddles.org::*Muddy Water][Muddy Water:1]] # @teleport/quiet mp08 # @create/drop muddy river;river;stream;water: typeclasses.drinkables.Water @@ -1934,7 +1952,7 @@ pose default shrub = writing something in a notebook # Create a puppet of the bird hunting frogs and pixies. :-D -# [[file:../../../projects/mud.org::*Purple Heron][Purple Heron:1]] +# [[file:../moss-n-puddles.org::*Purple Heron][Purple Heron:1]] @create/drop purple heron;heron: typeclasses.chatbots.ChatBot # @set heron/pose = "stalking the swamp grass" @@ -1953,7 +1971,7 @@ pose default shrub = writing something in a notebook # What data file of responses should we use? -# [[file:../../../projects/mud.org::*Purple Heron][Purple Heron:2]] +# [[file:../moss-n-puddles.org::*Purple Heron][Purple Heron:2]] @set heron/data_file = "npcs.txt" # @set heron/speech_vocalizations = ["says", "croaks", "squawks"] @@ -1964,7 +1982,7 @@ pose default shrub = writing something in a notebook # Note that we give him a male gender: -# [[file:../../../projects/mud.org::*Purple Heron][Purple Heron:3]] +# [[file:../moss-n-puddles.org::*Purple Heron][Purple Heron:3]] @set heron/gender = "male" # Purple Heron:3 ends here @@ -1973,7 +1991,7 @@ pose default shrub = writing something in a notebook # Prefix article? -# [[file:../../../projects/mud.org::*Purple Heron][Purple Heron:4]] +# [[file:../moss-n-puddles.org::*Purple Heron][Purple Heron:4]] @set heron/article = "The" # Purple Heron:4 ends here @@ -1982,7 +2000,7 @@ pose default shrub = writing something in a notebook # And a good description that I can rework: -# [[file:../../../projects/mud.org::*Purple Heron][Purple Heron:5]] +# [[file:../moss-n-puddles.org::*Purple Heron][Purple Heron:5]] @desc heron = Shades of violet and purple adorn the feathers of this majestically tall heron, that stalks the marsh |Ygrass|n, hunting small critters. # Purple Heron:5 ends here @@ -1991,7 +2009,7 @@ pose default shrub = writing something in a notebook # Let’s turn it on: -# [[file:../../../projects/mud.org::*Purple Heron][Purple Heron:6]] +# [[file:../moss-n-puddles.org::*Purple Heron][Purple Heron:6]] py me.search("heron").backstory("heron") # Purple Heron:6 ends here @@ -2000,7 +2018,7 @@ py me.search("heron").backstory("heron") # Since it is an NPC it has certain mutterings it can do: -# [[file:../../../projects/mud.org::*Purple Heron][Purple Heron:7]] +# [[file:../moss-n-puddles.org::*Purple Heron][Purple Heron:7]] @set heron/muttering_file = "jethro_tull_songs.txt" # @set heron/muttering_gap = 7 @@ -2008,7 +2026,7 @@ py me.search("heron").backstory("heron") @set heron/muttering_interval = 360 # Little over 3 minutes # Purple Heron:7 ends here -# [[file:../../../projects/mud.org::*Purple Heron][Purple Heron:8]] +# [[file:../moss-n-puddles.org::*Purple Heron][Purple Heron:8]] @set heron/muttering_formats = [ "sings to |oself as if no one is listening, \"{0}\"", "continues to sing to |oself, \"{0}\"", @@ -2022,7 +2040,7 @@ py me.search("heron").backstory("heron") # And add the absent-minded singing script: -# [[file:../../../projects/mud.org::*Purple Heron][Purple Heron:9]] +# [[file:../moss-n-puddles.org::*Purple Heron][Purple Heron:9]] @script heron = typeclasses.scripts.Muttering # Purple Heron:9 ends here @@ -2030,7 +2048,7 @@ py me.search("heron").backstory("heron") # Along with the heron, we should add more birds to both look at, as well as take some feathers. -# [[file:../../../projects/mud.org::*Birds and Feathers][Birds and Feathers:1]] +# [[file:../moss-n-puddles.org::*Birds and Feathers][Birds and Feathers:1]] @tel/quiet mp08 # @create/drop birds;bird: typeclasses.puzzles.Changling @@ -2043,7 +2061,7 @@ py me.search("heron").backstory("heron") # Can’t get them: -# [[file:../../../projects/mud.org::*Birds and Feathers][Birds and Feathers:2]] +# [[file:../moss-n-puddles.org::*Birds and Feathers][Birds and Feathers:2]] @lock birds = get:false() # @set birds/get_err_msg = "They are high in the trees and much too fast." @@ -2054,7 +2072,7 @@ py me.search("heron").backstory("heron") # And let’s not list them with the room’s objects since they can’t be interacted with: -# [[file:../../../projects/mud.org::*Birds and Feathers][Birds and Feathers:3]] +# [[file:../moss-n-puddles.org::*Birds and Feathers][Birds and Feathers:3]] @set birds/is_hidden = True # Birds and Feathers:3 ends here @@ -2063,7 +2081,7 @@ py me.search("heron").backstory("heron") # And the generate description: -# [[file:../../../projects/mud.org::*Birds and Feathers][Birds and Feathers:4]] +# [[file:../moss-n-puddles.org::*Birds and Feathers][Birds and Feathers:4]] @set birds/desc_first_prefix = "Wait, is that " # @set birds/desc_prefix = "Is that " @@ -2076,7 +2094,7 @@ py me.search("heron").backstory("heron") # And now for a list of the contents: -# [[file:../../../projects/mud.org::*Birds and Feathers][Birds and Feathers:5]] +# [[file:../moss-n-puddles.org::*Birds and Feathers][Birds and Feathers:5]] @set birds/descs = ( "a melancholic Soliloquy Raven, whistling a sad song", "a purple throated Cinnabar Hearth-Finch", @@ -2098,7 +2116,7 @@ py me.search("heron").backstory("heron") # The /feathers/ is a hidden Producer: -# [[file:../../../projects/mud.org::*Birds and Feathers][Birds and Feathers:6]] +# [[file:../moss-n-puddles.org::*Birds and Feathers][Birds and Feathers:6]] @create/drop feathers: typeclasses.consumables.Producer # @set feathers/plural = True @@ -2112,7 +2130,7 @@ py me.search("heron").backstory("heron") # With a description: -# [[file:../../../projects/mud.org::*Birds and Feathers][Birds and Feathers:7]] +# [[file:../moss-n-puddles.org::*Birds and Feathers][Birds and Feathers:7]] @desc feathers = Perhaps the molting season, stress, nutritional deficiencies, or |wyour desire to help|n, you find various colored feathers available for the taking. # Birds and Feathers:7 ends here @@ -2120,7 +2138,7 @@ py me.search("heron").backstory("heron") # We have to have the feathers describe what it /makes/: -# [[file:../../../projects/mud.org::*Birds and Feathers][Birds and Feathers:8]] +# [[file:../moss-n-puddles.org::*Birds and Feathers][Birds and Feathers:8]] @set feathers/make_name = "a bunch of feathers" # Birds and Feathers:8 ends here @@ -2128,7 +2146,7 @@ py me.search("heron").backstory("heron") # And a verb when they /get/ the consumable: -# [[file:../../../projects/mud.org::*Birds and Feathers][Birds and Feathers:9]] +# [[file:../moss-n-puddles.org::*Birds and Feathers][Birds and Feathers:9]] @set feathers/make_verb = "$conj(gather) " # Birds and Feathers:9 ends here @@ -2137,7 +2155,7 @@ py me.search("heron").backstory("heron") # They shouldn’t be able to make too many feathers: -# [[file:../../../projects/mud.org::*Birds and Feathers][Birds and Feathers:10]] +# [[file:../moss-n-puddles.org::*Birds and Feathers][Birds and Feathers:10]] @set feathers/make_limit = 1 # @set feathers/make_limit_msg = "You seem to have plenty of feathers." @@ -2147,7 +2165,7 @@ py me.search("heron").backstory("heron") # And the feathers needs to know the /description/ of the Consumable, so that it can attach that: -# [[file:../../../projects/mud.org::*Birds and Feathers][Birds and Feathers:11]] +# [[file:../moss-n-puddles.org::*Birds and Feathers][Birds and Feathers:11]] @set feathers/make_desc = "A brightly colored collection" # Birds and Feathers:11 ends here @@ -2155,7 +2173,7 @@ py me.search("heron").backstory("heron") # How much is there when you pick them? -# [[file:../../../projects/mud.org::*Birds and Feathers][Birds and Feathers:12]] +# [[file:../moss-n-puddles.org::*Birds and Feathers][Birds and Feathers:12]] @set feathers/make_amount = 1 # Birds and Feathers:12 ends here @@ -2163,7 +2181,7 @@ py me.search("heron").backstory("heron") # 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]] +# [[file:../moss-n-puddles.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 @@ -2171,7 +2189,7 @@ py me.search("heron").backstory("heron") # With a description: -# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:2]] +# [[file:../moss-n-puddles.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 @@ -2179,7 +2197,7 @@ py me.search("heron").backstory("heron") # We have to have the reeds describe what it /makes/: -# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:3]] +# [[file:../moss-n-puddles.org::*Ten-foot Poles][Ten-foot Poles:3]] @set reeds/make_name = "ten-foot pole" # Ten-foot Poles:3 ends here @@ -2187,7 +2205,7 @@ py me.search("heron").backstory("heron") # And a verb when they /get/ the consumable: -# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:4]] +# [[file:../moss-n-puddles.org::*Ten-foot Poles][Ten-foot Poles:4]] @set reeds/make_verb = "$conj(pluck) and $conj(shape) a" # Ten-foot Poles:4 ends here @@ -2196,7 +2214,7 @@ py me.search("heron").backstory("heron") # And a commentary: -# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:5]] +# [[file:../moss-n-puddles.org::*Ten-foot Poles][Ten-foot Poles:5]] @set reeds/make_note = " from a marsh reed." # Ten-foot Poles:5 ends here @@ -2205,7 +2223,7 @@ py me.search("heron").backstory("heron") # They shouldn’t be able to make too many poles: -# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:6]] +# [[file:../moss-n-puddles.org::*Ten-foot Poles][Ten-foot Poles:6]] @set reeds/make_limit = 1 # @set reeds/make_limit_msg = "You can't make more poles when you are already holding one." @@ -2216,7 +2234,7 @@ py me.search("heron").backstory("heron") # A ten-foot pole should act like a stick: -# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:7]] +# [[file:../moss-n-puddles.org::*Ten-foot Poles][Ten-foot Poles:7]] @set reeds/make_class = "typeclasses.things.Stick" # Ten-foot Poles:7 ends here @@ -2224,7 +2242,7 @@ py me.search("heron").backstory("heron") # 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:8]] +# [[file:../moss-n-puddles.org::*Ten-foot Poles][Ten-foot Poles:8]] @set reeds/make_desc = "A long pole shaved from a marsh reed." # Ten-foot Poles:8 ends here @@ -2232,7 +2250,7 @@ py me.search("heron").backstory("heron") # How much is there when you pick them? -# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:9]] +# [[file:../moss-n-puddles.org::*Ten-foot Poles][Ten-foot Poles:9]] @set reeds/make_amount = 1 # Ten-foot Poles:9 ends here @@ -2247,7 +2265,7 @@ py me.search("heron").backstory("heron") # And create it here in the Marsh: -# [[file:../../../projects/mud.org::*Pixie Dust][Pixie Dust:1]] +# [[file:../moss-n-puddles.org::*Pixie Dust][Pixie Dust:1]] # @teleport/quiet mp08 # @create/drop patch of glitter;pixie dust;dust: typeclasses.consumables.Producer @@ -2268,7 +2286,7 @@ py me.search("heron").backstory("heron") @lock pixie dust = view:tag(alchemist) # Pixie Dust:1 ends here -# [[file:../../../projects/mud.org::*Trampoli’s Hut on Stilts][Trampoli’s Hut on Stilts:1]] +# [[file:../moss-n-puddles.org::*Trampoli’s Hut on Stilts][Trampoli’s Hut on Stilts:1]] @teleport mp08 # @dig Homey Hut;mp09 = hut on stilts;hut,leave;outside;marsh @@ -2279,7 +2297,7 @@ py me.search("heron").backstory("heron") # And describe it as =hut=: -# [[file:../../../projects/mud.org::*Trampoli’s Hut on Stilts][Trampoli’s Hut on Stilts:2]] +# [[file:../moss-n-puddles.org::*Trampoli’s Hut on Stilts][Trampoli’s Hut on Stilts:2]] @desc hut on stilts = Apparently made from swamp |Ygrass|n, the homey-looking hut has a wood door high above ground. Baskets of potted flowers and herbs garnish every window. # Trampoli’s Hut on Stilts:2 ends here @@ -2288,7 +2306,7 @@ py me.search("heron").backstory("heron") # Let’s keep most characters out of the hut. The idea is you need to fly to get in. But we have a sequence For the initial exit, it is just always impossible to use: -# [[file:../../../projects/mud.org::*Trampoli’s Hut on Stilts][Trampoli’s Hut on Stilts:3]] +# [[file:../moss-n-puddles.org::*Trampoli’s Hut on Stilts][Trampoli’s Hut on Stilts:3]] @lock hut on stilts = traverse:tag(enter_hut_nope, mp) # Trampoli’s Hut on Stilts:3 ends here @@ -2297,11 +2315,11 @@ py me.search("heron").backstory("heron") # Let’s add an alias: -# [[file:../../../projects/mud.org::*Trampoli’s Hut on Stilts][Trampoli’s Hut on Stilts:4]] +# [[file:../moss-n-puddles.org::*Trampoli’s Hut on Stilts][Trampoli’s Hut on Stilts:4]] @alias hut on stilts = hut # Trampoli’s Hut on Stilts:4 ends here -# [[file:../../../projects/mud.org::*Trampoli’s Hut on Stilts][Trampoli’s Hut on Stilts:5]] +# [[file:../moss-n-puddles.org::*Trampoli’s Hut on Stilts][Trampoli’s Hut on Stilts:5]] @set hut on stilts/err_traverse = "Upon approaching the hut, the hut scurries away on its stilt-like legs." # Trampoli’s Hut on Stilts:5 ends here @@ -2310,7 +2328,7 @@ py me.search("heron").backstory("heron") # And we need to create a second exit: -# [[file:../../../projects/mud.org::*Trampoli’s Hut on Stilts][Trampoli’s Hut on Stilts:6]] +# [[file:../moss-n-puddles.org::*Trampoli’s Hut on Stilts][Trampoli’s Hut on Stilts:6]] @open rope-bound hut = Homey Hut # Trampoli’s Hut on Stilts:6 ends here @@ -2319,7 +2337,7 @@ py me.search("heron").backstory("heron") # Let’s add an alias: -# [[file:../../../projects/mud.org::*Trampoli’s Hut on Stilts][Trampoli’s Hut on Stilts:7]] +# [[file:../moss-n-puddles.org::*Trampoli’s Hut on Stilts][Trampoli’s Hut on Stilts:7]] @alias rope-bound hut = hut # Trampoli’s Hut on Stilts:7 ends here @@ -2328,7 +2346,7 @@ py me.search("heron").backstory("heron") # And describe it: -# [[file:../../../projects/mud.org::*Trampoli’s Hut on Stilts][Trampoli’s Hut on Stilts:8]] +# [[file:../moss-n-puddles.org::*Trampoli’s Hut on Stilts][Trampoli’s Hut on Stilts:8]] @desc rope-bound hut = The hut doesn't look happy, straining at its bonds that keep somewhat in place. The wood door to the hut, and its landing, continue to be too hign and out of your reach. # Trampoli’s Hut on Stilts:8 ends here @@ -2337,7 +2355,7 @@ py me.search("heron").backstory("heron") # If the other exit is here, you just need the pole: -# [[file:../../../projects/mud.org::*Trampoli’s Hut on Stilts][Trampoli’s Hut on Stilts:9]] +# [[file:../moss-n-puddles.org::*Trampoli’s Hut on Stilts][Trampoli’s Hut on Stilts:9]] @lock rope-bound hut = traverse:holds('ten-foot pole') # Trampoli’s Hut on Stilts:9 ends here @@ -2346,7 +2364,7 @@ py me.search("heron").backstory("heron") # And a good reason why you need the pole: -# [[file:../../../projects/mud.org::*Trampoli’s Hut on Stilts][Trampoli’s Hut on Stilts:10]] +# [[file:../moss-n-puddles.org::*Trampoli’s Hut on Stilts][Trampoli’s Hut on Stilts:10]] @set rope-bound hut/err_traverse = "The door, and its landing, are still too high and out of reach, and riding a bucking owlbear may be easier than climbing the stilt-legs that immediately throw you to the ground." # Trampoli’s Hut on Stilts:10 ends here @@ -2355,7 +2373,7 @@ py me.search("heron").backstory("heron") # If you do figure out how to get through the hut: -# [[file:../../../projects/mud.org::*Trampoli’s Hut on Stilts][Trampoli’s Hut on Stilts:11]] +# [[file:../moss-n-puddles.org::*Trampoli’s Hut on Stilts][Trampoli’s Hut on Stilts:11]] @set rope-bound hut/traverse_msg = "You use your pole to vault yourself up through the door of the hut..." # Trampoli’s Hut on Stilts:11 ends here @@ -2364,7 +2382,7 @@ py me.search("heron").backstory("heron") # Let’s put this second exit away until the [[file:~/src/moss-n-puddles/typeclasses/things.py::class Rope(Object):][rope calls]] it: -# [[file:../../../projects/mud.org::*Trampoli’s Hut on Stilts][Trampoli’s Hut on Stilts:12]] +# [[file:../moss-n-puddles.org::*Trampoli’s Hut on Stilts][Trampoli’s Hut on Stilts:12]] @teleport/tonone rope-bound hut # Trampoli’s Hut on Stilts:12 ends here @@ -2372,7 +2390,7 @@ py me.search("heron").backstory("heron") # Let’s go inside to decorate: -# [[file:../../../projects/mud.org::*Inside Trampoli’s Hut][Inside Trampoli’s Hut:1]] +# [[file:../moss-n-puddles.org::*Inside Trampoli’s Hut][Inside Trampoli’s Hut:1]] @teleport mp09 # @desc here = A homey room cluttered with drying |Yherbs|n, |Yjars|n of preserves, and natural made |Ytalismans|n. Even the table and chairs, covered in jars, |Ybags|n and boxes, indicate the owner doesn't entertain much. Stairs lead up to a spacious loft with a bed. @@ -2383,11 +2401,11 @@ py me.search("heron").backstory("heron") # And describe leaving: -# [[file:../../../projects/mud.org::*Inside Trampoli’s Hut][Inside Trampoli’s Hut:2]] +# [[file:../moss-n-puddles.org::*Inside Trampoli’s Hut][Inside Trampoli’s Hut:2]] @desc leave = From the doorway, you see the marshland below. # Inside Trampoli’s Hut:2 ends here -# [[file:../../../projects/mud.org::*Inside Trampoli’s Hut][Inside Trampoli’s Hut:3]] +# [[file:../moss-n-puddles.org::*Inside Trampoli’s Hut][Inside Trampoli’s Hut:3]] @set leave/traverse_msg = "You open the door of the hut, and scramble down to the marsh below. Surely the ground the moist and soft to break your fall." # Inside Trampoli’s Hut:3 ends here @@ -2396,18 +2414,18 @@ py me.search("heron").backstory("heron") # And the details: -# [[file:../../../projects/mud.org::*Inside Trampoli’s Hut][Inside Trampoli’s Hut:4]] +# [[file:../moss-n-puddles.org::*Inside Trampoli’s Hut][Inside Trampoli’s Hut:4]] @detail herbs = Clusters of plants, a mixture of flowers and herbal leaves, all bound with twine and reeds, hang from spots around the room, fragranting the air. # Inside Trampoli’s Hut:4 ends here -# [[file:../../../projects/mud.org::*Inside Trampoli’s Hut][Inside Trampoli’s Hut:5]] +# [[file:../moss-n-puddles.org::*Inside Trampoli’s Hut][Inside Trampoli’s Hut:5]] @detail jars = Sealed jars of fruits, vegetables, herbs and spices. # Inside Trampoli’s Hut:5 ends here # A chair to sit while working -# [[file:../../../projects/mud.org::*Chair][Chair:1]] +# [[file:../moss-n-puddles.org::*Chair][Chair:1]] @create/drop chair:typeclasses.sittables.Sittable # Chair:1 ends here @@ -2415,7 +2433,7 @@ py me.search("heron").backstory("heron") # How descriptive: -# [[file:../../../projects/mud.org::*Chair][Chair:2]] +# [[file:../moss-n-puddles.org::*Chair][Chair:2]] @desc chair = A chair next to the table. # Chair:2 ends here @@ -2423,7 +2441,7 @@ py me.search("heron").backstory("heron") # Can’t steal this chair either: -# [[file:../../../projects/mud.org::*Chair][Chair:3]] +# [[file:../moss-n-puddles.org::*Chair][Chair:3]] @lock chair = get:false() # Chair:3 ends here @@ -2431,7 +2449,7 @@ py me.search("heron").backstory("heron") # Let’s do a funnier message: -# [[file:../../../projects/mud.org::*Chair][Chair:4]] +# [[file:../moss-n-puddles.org::*Chair][Chair:4]] @set chair/get_err_msg = "Stop trying to steal everything not nailed down." # Chair:4 ends here @@ -2439,7 +2457,7 @@ py me.search("heron").backstory("heron") # Every time we look at a jar, we see something else … that we can’t take. This creates ambiance without adding too much complexity? -# [[file:../../../projects/mud.org::*Jars][Jars:1]] +# [[file:../moss-n-puddles.org::*Jars][Jars:1]] @tel/quiet Homey Hut # @create/drop assortment of jars;jars;jar: typeclasses.puzzles.Changling @@ -2450,7 +2468,7 @@ py me.search("heron").backstory("heron") # Can’t get them: -# [[file:../../../projects/mud.org::*Jars][Jars:2]] +# [[file:../moss-n-puddles.org::*Jars][Jars:2]] @lock jars = get:false() # @set jars/get_err_msg = "\"Do not steal our winter provisionings,\" the horned wolf skull says. \"What are you a thief?\"" @@ -2461,7 +2479,7 @@ py me.search("heron").backstory("heron") # And the generate description: -# [[file:../../../projects/mud.org::*Jars][Jars:3]] +# [[file:../moss-n-puddles.org::*Jars][Jars:3]] @set jars/desc_first_prefix = "<< Fascinating ^ Interesting ^ Curious >> << collection of ^ assortment of ^ >> << jars ^ contents ^ ingredients >>. You look at one << jar ^ >> with << an afixed ^ an attached >> label of << scrawling ^ scribbling ^ squiggling >> << ink ^ writing ^ letters >>,|w" # @set jars/desc_prefix = "You look at another << jar ^ >> with << an afixed ^ an attached >> label of << scrawling ^ scribbling ^ squiggling >> << ink ^ writing ^ letters >>,|w" @@ -2474,7 +2492,7 @@ py me.search("heron").backstory("heron") # And now for a list of the contents: -# [[file:../../../projects/mud.org::*Jars][Jars:4]] +# [[file:../moss-n-puddles.org::*Jars][Jars:4]] @set jars/descs = ( "Dragon's Breath|n. A swirling mist of iridescent smoke that changes color, said to contain the essence of fire.", "Phoenix Ashes|n. A small jar filled with fine, red and gold ash, said to have the power of rebirth.", @@ -2498,7 +2516,7 @@ py me.search("heron").backstory("heron") # Like the [[*Jars][Jars]], the herbs return a different response each time they are viewed. -# [[file:../../../projects/mud.org::*Herbs][Herbs:1]] +# [[file:../moss-n-puddles.org::*Herbs][Herbs:1]] @create/drop collection of herbs;herbs;herb: typeclasses.puzzles.Changling # Herbs:1 ends here @@ -2507,13 +2525,13 @@ py me.search("heron").backstory("heron") # While the skull protects the jars, we will have the demon stop the herbs from being pinched. -# [[file:../../../projects/mud.org::*Herbs][Herbs:2]] +# [[file:../moss-n-puddles.org::*Herbs][Herbs:2]] @lock herbs = get:false() # @set herbs/get_err_msg = "On the wall, the carving comes to life, and flies next to you. \"Do not take her harvest,\" it says as it bats your hand away." # Herbs:2 ends here -# [[file:../../../projects/mud.org::*Herbs][Herbs:3]] +# [[file:../moss-n-puddles.org::*Herbs][Herbs:3]] @set herbs/desc_first_prefix = "<< Plenty ^ Many >> bundles around the room. One << particular ^ peculiar ^ >> << bundle ^ bouquet garni >> of " # @set herbs/desc_prefix = "<< Another ^ This >> << particular ^ peculiar ^ >> << bundle ^ bouquet garni >> of " @@ -2526,7 +2544,7 @@ py me.search("heron").backstory("heron") # And the individual choices are more appearance, and possibly smell, without claiming to be /worldly herbs/. Would like to add some dried red and other colored leaves to make it more fantastical. -# [[file:../../../projects/mud.org::*Herbs][Herbs:4]] +# [[file:../moss-n-puddles.org::*Herbs][Herbs:4]] @set herbs/descs = ( "grayish-green, crinkled leaves, and has a strong, earthy aroma, like sage.", "small, purple flowers, with that sweet, lavender scent.", @@ -2551,7 +2569,7 @@ py me.search("heron").backstory("heron") ) # Herbs:4 ends here -# [[file:../../../projects/mud.org::*Bag of Mermaid Tears][Bag of Mermaid Tears:1]] +# [[file:../moss-n-puddles.org::*Bag of Mermaid Tears][Bag of Mermaid Tears:1]] @create/drop couple of bags of dried Mermaid Tears;bags;bag: typeclasses.consumables.Producer # Bag of Mermaid Tears:1 ends here @@ -2559,7 +2577,7 @@ py me.search("heron").backstory("heron") # With a description: -# [[file:../../../projects/mud.org::*Bag of Mermaid Tears][Bag of Mermaid Tears:2]] +# [[file:../moss-n-puddles.org::*Bag of Mermaid Tears][Bag of Mermaid Tears:2]] @desc bags = The bags, tied with a string, has a paper tag that reads |wMermaid Tears, dried.|n. The back of the tag has a note, |wIf I have to listen to another sob story about a clueless prince who just doesn't understand...|n # Bag of Mermaid Tears:2 ends here @@ -2567,7 +2585,7 @@ py me.search("heron").backstory("heron") # We have to have the bush describe what it /makes/: -# [[file:../../../projects/mud.org::*Bag of Mermaid Tears][Bag of Mermaid Tears:3]] +# [[file:../moss-n-puddles.org::*Bag of Mermaid Tears][Bag of Mermaid Tears:3]] @set bags/make_name = "bag" # @set bags/make_verb = "$conj(pick up) a" @@ -2585,7 +2603,7 @@ py me.search("heron").backstory("heron") # To give some character, we create some interesting art that decorates this hut. -# [[file:../../../projects/mud.org::*Talismans][Talismans:1]] +# [[file:../moss-n-puddles.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 @@ -2593,7 +2611,7 @@ py me.search("heron").backstory("heron") # 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::*Horned Wolf Skull][Horned Wolf Skull:1]] +# [[file:../moss-n-puddles.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. @@ -2611,7 +2629,7 @@ py me.search("heron").backstory("heron") # Perhaps the carving is actually the maid or something that could give hints. -# [[file:../../../projects/mud.org::*Demon Carving][Demon Carving:1]] +# [[file:../moss-n-puddles.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. @@ -2629,7 +2647,7 @@ py me.search("heron").backstory("heron") # The reeds should give a subtle hint to something that could be /spoken/ aloud. -# [[file:../../../projects/mud.org::*Reed Sculpture][Reed Sculpture:1]] +# [[file:../moss-n-puddles.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. @@ -2649,7 +2667,7 @@ py me.search("heron").backstory("heron") # 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::*Torches][Torches:1]] +# [[file:../moss-n-puddles.org::*Torches][Torches:1]] @create/drop a bucket of torches: typeclasses.consumables.Producer # Torches:1 ends here @@ -2658,7 +2676,7 @@ py me.search("heron").backstory("heron") # With a description: -# [[file:../../../projects/mud.org::*Torches][Torches:2]] +# [[file:../moss-n-puddles.org::*Torches][Torches:2]] @desc bucket = A tall wood bucket full of resin-coated torches. # Torches:2 ends here @@ -2667,7 +2685,7 @@ py me.search("heron").backstory("heron") # We have to have the bucket describe what it /makes/: -# [[file:../../../projects/mud.org::*Torches][Torches:3]] +# [[file:../moss-n-puddles.org::*Torches][Torches:3]] @set bucket/make_name = "torch" # Torches:3 ends here @@ -2676,7 +2694,7 @@ py me.search("heron").backstory("heron") # And a verb when they /get/ the consumable: -# [[file:../../../projects/mud.org::*Torches][Torches:4]] +# [[file:../moss-n-puddles.org::*Torches][Torches:4]] @set bucket/make_verb = "$conj(take) a" # Torches:4 ends here @@ -2685,7 +2703,7 @@ py me.search("heron").backstory("heron") # And a commentary: -# [[file:../../../projects/mud.org::*Torches][Torches:5]] +# [[file:../moss-n-puddles.org::*Torches][Torches:5]] @set bucket/make_note = " from the bucket" # Torches:5 ends here @@ -2694,7 +2712,7 @@ py me.search("heron").backstory("heron") # How many torches can they steal? -# [[file:../../../projects/mud.org::*Torches][Torches:6]] +# [[file:../moss-n-puddles.org::*Torches][Torches:6]] @set bucket/make_limit = 5 # @set bucket/make_limit_msg = "You can't carry any more torches." @@ -2705,7 +2723,7 @@ py me.search("heron").backstory("heron") # The torches are special in that they last longer. -# [[file:../../../projects/mud.org::*Torches][Torches:7]] +# [[file:../moss-n-puddles.org::*Torches][Torches:7]] @set bucket/make_class = "typeclasses.lightables.Torch" # Torches:7 ends here @@ -2714,7 +2732,7 @@ py me.search("heron").backstory("heron") # And the bucket needs to know the /description/ of the Consumable, so that it can attach that: -# [[file:../../../projects/mud.org::*Torches][Torches:8]] +# [[file:../moss-n-puddles.org::*Torches][Torches:8]] @set bucket/make_desc = "Made from marsh grass and reeds." # Torches:8 ends here @@ -2722,7 +2740,7 @@ py me.search("heron").backstory("heron") # How much is there when you pick them? -# [[file:../../../projects/mud.org::*Torches][Torches:9]] +# [[file:../moss-n-puddles.org::*Torches][Torches:9]] @set bucket/make_amount = 1 # Torches:9 ends here @@ -2730,8 +2748,9 @@ py me.search("heron").backstory("heron") # Create a puppet of the lady that owns the hut. -# [[file:../../../projects/mud.org::*Trampoli the Witch][Trampoli the Witch:1]] +# [[file:../moss-n-puddles.org::*Trampoli the Witch][Trampoli the Witch:1]] @create/drop Trampoli;old lady: typeclasses.chatbots.Witch +# @update Trampoli = typeclasses.chatbots.Witch # Trampoli the Witch:1 ends here @@ -2739,7 +2758,7 @@ py me.search("heron").backstory("heron") # Note that we give him a male gender: -# [[file:../../../projects/mud.org::*Trampoli the Witch][Trampoli the Witch:2]] +# [[file:../moss-n-puddles.org::*Trampoli the Witch][Trampoli the Witch:2]] @set old lady/gender = 'female' # Trampoli the Witch:2 ends here @@ -2748,7 +2767,7 @@ py me.search("heron").backstory("heron") # Work around the =pose= bug: -# [[file:../../../projects/mud.org::*Trampoli the Witch][Trampoli the Witch:3]] +# [[file:../moss-n-puddles.org::*Trampoli the Witch][Trampoli the Witch:3]] @py bt = self.search('old lady'); bt.db._sdesc="old lady" ; bt.sdesc.add('old lady'); bt.home = here ; bt.db.pose = 'playing with a deck of cards' # Trampoli the Witch:3 ends here @@ -2757,7 +2776,7 @@ py me.search("heron").backstory("heron") # Let’s set this Chatbot to use [[file:~/src/moss-n-puddles/personalities/witch.md][witch.md]]. -# [[file:../../../projects/mud.org::*Trampoli the Witch][Trampoli the Witch:4]] +# [[file:../moss-n-puddles.org::*Trampoli the Witch][Trampoli the Witch:4]] @set bartender/personality = "witch" # @set bartender/personality_file = "personalities/witch.md" @@ -2768,7 +2787,7 @@ py me.search("heron").backstory("heron") # And some poses: -# [[file:../../../projects/mud.org::*Trampoli the Witch][Trampoli the Witch:5]] +# [[file:../moss-n-puddles.org::*Trampoli the Witch][Trampoli the Witch:5]] @set old lady/pose_sleep = "napping soundly in bed on the upstairs loft" # @pose default old lady = playing with a deck of cards @@ -2779,7 +2798,7 @@ py me.search("heron").backstory("heron") # And a good description that I can rework: -# [[file:../../../projects/mud.org::*Trampoli the Witch][Trampoli the Witch:6]] +# [[file:../moss-n-puddles.org::*Trampoli the Witch][Trampoli the Witch:6]] @desc old lady = A blue shawl, adorned with arcane symbols in gold embroidery, covers the head of this small woman. Her large nose protruding from under the shawl, gives the appearance of a blue bird with bright green eyes. # Trampoli the Witch:6 ends here @@ -2788,7 +2807,7 @@ py me.search("heron").backstory("heron") # And an un-puppeted, sleeping, description: -# [[file:../../../projects/mud.org::*Trampoli the Witch][Trampoli the Witch:7]] +# [[file:../moss-n-puddles.org::*Trampoli the Witch][Trampoli the Witch:7]] @set old lady/desc_unpuppeted = "A blue shawl, adorned with arcane symbols in gold embroidery, covers the head of this small, napping woman. Her large nose protruding from under the shawl, as she snores loudly." # Trampoli the Witch:7 ends here @@ -2797,7 +2816,7 @@ py me.search("heron").backstory("heron") # Perhaps … eventually, we can give her a gift, and she’ll allow the character to stay for tea. But then she would need to talk and interact. LLM? -# [[file:../../../projects/mud.org::*Trampoli the Witch][Trampoli the Witch:11]] +# [[file:../moss-n-puddles.org::*Trampoli the Witch][Trampoli the Witch:11]] @script old lady = typeclasses.chatbots.TravelingNPC # Trampoli the Witch:11 ends here @@ -2805,7 +2824,7 @@ py me.search("heron").backstory("heron") # The [[file:~/src/moss-n-puddles/typeclasses/scripts.py::class CreateHorns(Script):][CreateHorns script]] will generate a horn. Anyone can acquire it, and keep it as a way to control the Leaf Boat. -# [[file:../../../projects/mud.org::*Mist Horn][Mist Horn:1]] +# [[file:../moss-n-puddles.org::*Mist Horn][Mist Horn:1]] py evennia.create_script( key="Create Horns", typeclass='typeclasses.scripts.CreateHorns', @@ -2821,7 +2840,7 @@ py evennia.create_script( # Return to the Forest: -# [[file:../../../projects/mud.org::*Lazy Dock][Lazy Dock:1]] +# [[file:../moss-n-puddles.org::*Lazy Dock][Lazy Dock:1]] @teleport mp01 # Lazy Dock:1 ends here @@ -2829,7 +2848,7 @@ py evennia.create_script( # And tunnel to the dock: -# [[file:../../../projects/mud.org::*Lazy Dock][Lazy Dock:2]] +# [[file:../moss-n-puddles.org::*Lazy Dock][Lazy Dock:2]] @dig Lazy Dock;mp06 :typeclasses.rooms_weather.TimeWeatherRoom = south to dock;south;s,north to forest;north;n;footpath # Lazy Dock:2 ends here @@ -2837,14 +2856,14 @@ py evennia.create_script( # With a message about leaving the trees so that I don’t have to repeat that in the room description: -# [[file:../../../projects/mud.org::*Lazy Dock][Lazy Dock:3]] +# [[file:../moss-n-puddles.org::*Lazy Dock][Lazy Dock:3]] @set south/traverse_msg = "You follow a path down and step out from under giant trees to see the sky." # Lazy Dock:3 ends here # And a description: -# [[file:../../../projects/mud.org::*Lazy Dock][Lazy Dock:4]] +# [[file:../moss-n-puddles.org::*Lazy Dock][Lazy Dock:4]] @desc south = You see a dock on a lavender sea... Is that a comfortable-looking chair you can |gsit|n on? # Lazy Dock:4 ends here @@ -2852,7 +2871,7 @@ py evennia.create_script( # And move ourselves there: -# [[file:../../../projects/mud.org::*Lazy Dock][Lazy Dock:5]] +# [[file:../moss-n-puddles.org::*Lazy Dock][Lazy Dock:5]] @teleport mp06 # Lazy Dock:5 ends here @@ -2860,7 +2879,7 @@ py evennia.create_script( # And describe this. -# [[file:../../../projects/mud.org::*Lazy Dock][Lazy Dock:6]] +# [[file:../moss-n-puddles.org::*Lazy Dock][Lazy Dock:6]] @desc here = The dock you stand on juts into a |Ysea|n the color of |Ylavender flowers|n. Mesmerizing and calming from the way the sound of the |Ywaves|n lap along the |Yshore|n. Someone has set a nice |Ychair|n for viewing. # Lazy Dock:6 ends here @@ -2870,7 +2889,7 @@ Someone has set a nice |Ychair|n for viewing. # And details? -# [[file:../../../projects/mud.org::*Lazy Dock][Lazy Dock:7]] +# [[file:../moss-n-puddles.org::*Lazy Dock][Lazy Dock:7]] @detail waves = Despite the inclement weather, the waves ripple softly against the shore. Seems nice for fishing. # @detail boat;ship = The mastless ship looks like a giant leaf. Wonder if it comes to shore? @@ -2882,7 +2901,7 @@ Someone has set a nice |Ychair|n for viewing. # And describe the walk back into the forest: -# [[file:../../../projects/mud.org::*Lazy Dock][Lazy Dock:8]] +# [[file:../moss-n-puddles.org::*Lazy Dock][Lazy Dock:8]] @set north/traverse_msg = "You walk up a path and back into the forest of giant trees." # Lazy Dock:8 ends here @@ -2890,7 +2909,7 @@ Someone has set a nice |Ychair|n for viewing. # And a description: -# [[file:../../../projects/mud.org::*Lazy Dock][Lazy Dock:9]] +# [[file:../moss-n-puddles.org::*Lazy Dock][Lazy Dock:9]] @desc north = This path leads into the forest of collosal trees. # Lazy Dock:9 ends here @@ -2899,7 +2918,7 @@ Someone has set a nice |Ychair|n for viewing. # When a character arrives at the Lazy Dock and wait, the room gives a hint about the horn and the boat occurring. -# [[file:../../../projects/mud.org::*Lazy Dock][Lazy Dock:10]] +# [[file:../moss-n-puddles.org::*Lazy Dock][Lazy Dock:10]] @set mp06/arrive = "40 ;; gm Did you hear that? Sounds like a distant horn ... Perhaps the wind. ;; 60 ;; gm You think you saw a boat out on the sea ... but maybe not. " # Lazy Dock:10 ends here @@ -2907,7 +2926,7 @@ Someone has set a nice |Ychair|n for viewing. # We’ll get ready for making potions by allowing one to collect water from _all_ the places, like the salty sea: -# [[file:../../../projects/mud.org::*Lavender Sea][Lavender Sea:1]] +# [[file:../moss-n-puddles.org::*Lavender Sea][Lavender Sea:1]] # @teleport/quiet mp06 # @create/drop lavender sea;sea;water;bay: typeclasses.drinkables.Water @@ -2928,7 +2947,7 @@ Someone has set a nice |Ychair|n for viewing. # A nice chair to sit on the dock by the bay, watching the clouds as they drift away. -# [[file:../../../projects/mud.org::*Chair][Chair:1]] +# [[file:../moss-n-puddles.org::*Chair][Chair:1]] @create/drop chair;lounge chair:typeclasses.sittables.Sittable # Chair:1 ends here @@ -2936,7 +2955,7 @@ Someone has set a nice |Ychair|n for viewing. # How descriptive: -# [[file:../../../projects/mud.org::*Chair][Chair:2]] +# [[file:../moss-n-puddles.org::*Chair][Chair:2]] @desc chair = A cushioned wood chair of craftsmanship.|/Looks good for being out in the weather. # Chair:2 ends here @@ -2944,7 +2963,7 @@ Someone has set a nice |Ychair|n for viewing. # Can’t steal this chair either: -# [[file:../../../projects/mud.org::*Chair][Chair:3]] +# [[file:../moss-n-puddles.org::*Chair][Chair:3]] @lock chair = get:false() # @set chair/get_err_msg = "It's way too heavy for you to lift." @@ -2953,7 +2972,7 @@ Someone has set a nice |Ychair|n for viewing. # It we are going to sit on a chair by the dock, why not go fishing? -# [[file:../../../projects/mud.org::*Fishing Pole][Fishing Pole:1]] +# [[file:../moss-n-puddles.org::*Fishing Pole][Fishing Pole:1]] @create/drop fishing pole;pole:typeclasses.fishing.FishingPole # Fishing Pole:1 ends here @@ -2961,7 +2980,7 @@ Someone has set a nice |Ychair|n for viewing. # With a description: -# [[file:../../../projects/mud.org::*Fishing Pole][Fishing Pole:2]] +# [[file:../moss-n-puddles.org::*Fishing Pole][Fishing Pole:2]] @desc pole = A nice pole for catching fish. It even has a hook, and is ready to go! # Fishing Pole:2 ends here @@ -2970,7 +2989,7 @@ Someone has set a nice |Ychair|n for viewing. # And tether it to the Dock, which we need to reset if the ID numbers ever change. -# [[file:../../../projects/mud.org::*Fishing Pole][Fishing Pole:3]] +# [[file:../moss-n-puddles.org::*Fishing Pole][Fishing Pole:3]] @lock pole = tethered:id(Lazy Dock) # @set pole/tethered_msg = "Let's leave the fishing pole here at the dock for others to fish...besides, where else are you going to go fishing around here?" @@ -2980,7 +2999,7 @@ Someone has set a nice |Ychair|n for viewing. # What about some details: -# [[file:../../../projects/mud.org::*Fishing Pole][Fishing Pole:5]] +# [[file:../moss-n-puddles.org::*Fishing Pole][Fishing Pole:5]] @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 @@ -2988,7 +3007,7 @@ Someone has set a nice |Ychair|n for viewing. # 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::*Sign][Sign:1]] +# [[file:../moss-n-puddles.org::*Sign][Sign:1]] @create/drop sign:typeclasses.readables.Readable # Sign:1 ends here @@ -2996,7 +3015,7 @@ Someone has set a nice |Ychair|n for viewing. # Should the description also be the message? -# [[file:../../../projects/mud.org::*Sign][Sign:2]] +# [[file:../moss-n-puddles.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 # Sign:2 ends here @@ -3004,7 +3023,7 @@ Someone has set a nice |Ychair|n for viewing. # Might as well allow the user to read it: -# [[file:../../../projects/mud.org::*Sign][Sign:3]] +# [[file:../moss-n-puddles.org::*Sign][Sign:3]] @set sign/inside = "Fish at your own annoyance. Please return pole when finished." # Sign:3 ends here @@ -3012,7 +3031,7 @@ Someone has set a nice |Ychair|n for viewing. # And lock down the sign: -# [[file:../../../projects/mud.org::*Sign][Sign:4]] +# [[file:../moss-n-puddles.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." @@ -3022,9 +3041,11 @@ Someone has set a nice |Ychair|n for viewing. # Here for hints … and a bit of a distraction. -# [[file:../../../projects/mud.org::*Raven][Raven:1]] +# [[file:../moss-n-puddles.org::*Raven][Raven:1]] @create/drop Raven;bird: typeclasses.chatbots.ChatBot # +# @update raven = typeclasses.chatbots.ChatBot +# @desc raven = A large raven with curious black eyes. # @set raven/gender = "neutral" @@ -3041,7 +3062,7 @@ Someone has set a nice |Ychair|n for viewing. # Then give him the =sdesc= (not sure why I have to do both), and wake him. -# [[file:../../../projects/mud.org::*Raven][Raven:2]] +# [[file:../moss-n-puddles.org::*Raven][Raven:2]] py raven = me.search("raven") ; raven.db._sdesc="raven" ; raven.sdesc.add("raven") ; raven.home = here # Raven:2 ends here @@ -3050,7 +3071,7 @@ py raven = me.search("raven") ; raven.db._sdesc="raven" ; raven.sdesc.add("raven # Let’s load the goodies: -# [[file:../../../projects/mud.org::*Raven][Raven:3]] +# [[file:../moss-n-puddles.org::*Raven][Raven:3]] py me.search("raven").backstory("raven") # Raven:3 ends here @@ -3058,7 +3079,7 @@ py me.search("raven").backstory("raven") # Could we extend the sea from the [[file:mud.org::*The Dock][The Dock]] down a shore: -# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:1]] +# [[file:../moss-n-puddles.org::*Sandy Shore][Sandy Shore:1]] @teleport/quiet mp06 # @dig Shore;mp15 :typeclasses.rooms_weather.TimeWeatherRoom = south along shore;shore;south;s,north to dock;north;n;dock @@ -3068,7 +3089,7 @@ py me.search("raven").backstory("raven") # With a message about leaving the dock as to not repeat that in the room description: -# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:2]] +# [[file:../moss-n-puddles.org::*Sandy Shore][Sandy Shore:2]] @set south/traverse_msg = "Leaving the dock, you want along the soft sandy shore next to the Lavender Sea, enjoying the mesmerizing sound of the surf... until you come to a shack that blocks your stroll." # Sandy Shore:2 ends here @@ -3076,7 +3097,7 @@ py me.search("raven").backstory("raven") # And a description: -# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:3]] +# [[file:../moss-n-puddles.org::*Sandy Shore][Sandy Shore:3]] @desc south = You see a shack down along the sandy shore. # Sandy Shore:3 ends here @@ -3084,7 +3105,7 @@ py me.search("raven").backstory("raven") # And move ourselves there: -# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:4]] +# [[file:../moss-n-puddles.org::*Sandy Shore][Sandy Shore:4]] @teleport mp15 # Sandy Shore:4 ends here @@ -3092,7 +3113,7 @@ py me.search("raven").backstory("raven") # And describe the walk back to the dock: -# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:5]] +# [[file:../moss-n-puddles.org::*Sandy Shore][Sandy Shore:5]] @set north/traverse_msg = "You walk along the shore of the lavender sea back to the dock." # Sandy Shore:5 ends here @@ -3100,14 +3121,14 @@ py me.search("raven").backstory("raven") # And a description: -# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:6]] +# [[file:../moss-n-puddles.org::*Sandy Shore][Sandy Shore:6]] @desc north = The sandy shore to the north ends at a dock, jutting into the lavender sea. # Sandy Shore:6 ends here # And describe this. -# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:7]] +# [[file:../moss-n-puddles.org::*Sandy Shore][Sandy Shore:7]] @desc here = Puppy-dog |Ywaves|n on a lavender |Ysea|n, snap your heels half-heartedly. The loose |Ysand|n makes for difficult walking. A robust |Yshack|n squats below a |Ypine|n covered in yellow |Yflowers|n. It sports a brightly painted |Ysign|n. # Sandy Shore:7 ends here @@ -3116,7 +3137,7 @@ py me.search("raven").backstory("raven") # And details? -# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:8]] +# [[file:../moss-n-puddles.org::*Sandy Shore][Sandy Shore:8]] @detail waves = Despite the inclement weather, the waves ripple gently against the shore. # @detail sea;lavender sea = Is that a |Yboat|n you see sailing in the distance? @@ -3130,7 +3151,7 @@ py me.search("raven").backstory("raven") # Part of the [[Potions and their Ingredients][Alchemist Path]], we use sand as an ingredient in a potion we want to make. -# [[file:../../../projects/mud.org::*Sand][Sand:1]] +# [[file:../moss-n-puddles.org::*Sand][Sand:1]] @create/drop lot of sand;sand : typeclasses.consumables.Producer # @desc sand = Glittery sand with small flecks of lavender-colored gems. @@ -3148,7 +3169,7 @@ py me.search("raven").backstory("raven") # Part of the [[Potions and their Ingredients][Alchemist Path]], we use /pine flowers/ to create a potion TBD, and feed the stoat in Dabbler’s House. -# [[file:../../../projects/mud.org::*Pine Flowers][Pine Flowers:1]] +# [[file:../moss-n-puddles.org::*Pine Flowers][Pine Flowers:1]] @create/drop pine tree;pine;tree;flowers;flower = typeclasses.consumables.Producer # @desc pine = Windswept pine leans to shade the shack, protecting it somewhat from the regular occuring rain. Interesting, that the pine has beautiful, yellow |Yflowers|n. @@ -3168,7 +3189,7 @@ py me.search("raven").backstory("raven") # We make the sign as an “object” for others to read: -# [[file:../../../projects/mud.org::*Sign][Sign:1]] +# [[file:../moss-n-puddles.org::*Sign][Sign:1]] @create/drop sign = typeclasses.readables.Readable # @desc sign = A hand-painted sign with beautiful calligraphy reads: |wFor Rent. See Dabbler for details.|n @@ -3182,7 +3203,7 @@ py me.search("raven").backstory("raven") # Let’s keep this pretty empty. -# [[file:../../../projects/mud.org::*Salty Shack][Salty Shack:1]] +# [[file:../moss-n-puddles.org::*Salty Shack][Salty Shack:1]] @teleport/quiet mp15 # @dig Salty Shack;mp16 = locked door;door;inside,door to outside;door;outside;leave;exit @@ -3193,7 +3214,7 @@ py me.search("raven").backstory("raven") # And described the exit: -# [[file:../../../projects/mud.org::*Salty Shack][Salty Shack:2]] +# [[file:../moss-n-puddles.org::*Salty Shack][Salty Shack:2]] @desc door = Barnacle encrusted door with rusty irons bands and a comically large padlock. The door sports a hand-painted |Ysign|n that reads: |wFor Rent. See Dabbler for details. # @set door/traverse_msg = "The lock opens when you touch it, and the door opens with loud sigh. You step inside and close the door behind you." @@ -3204,7 +3225,7 @@ py me.search("raven").backstory("raven") # And lock the exit: -# [[file:../../../projects/mud.org::*Salty Shack][Salty Shack:3]] +# [[file:../moss-n-puddles.org::*Salty Shack][Salty Shack:3]] @lock door = traverse:tag(open_shack_door, mp) # @set door/err_traverse = "The door is obviously locked." @@ -3215,7 +3236,7 @@ py me.search("raven").backstory("raven") # Generic description of the insides of this house: -# [[file:../../../projects/mud.org::*Salty Shack][Salty Shack:4]] +# [[file:../moss-n-puddles.org::*Salty Shack][Salty Shack:4]] @teleport/quiet mp16 # @desc here = The shack is curiously bare and devoid of all personality. @@ -3226,7 +3247,7 @@ py me.search("raven").backstory("raven") # And describe the exit: -# [[file:../../../projects/mud.org::*Salty Shack][Salty Shack:5]] +# [[file:../moss-n-puddles.org::*Salty Shack][Salty Shack:5]] @desc door = Large wood door with iron bands. # @set door/traverse_msg = "You open the door and step out on the sand, closing the door behind you." @@ -3236,14 +3257,14 @@ py me.search("raven").backstory("raven") # Return to the forest: -# [[file:../../../projects/mud.org::*Grotto][Grotto:1]] +# [[file:../moss-n-puddles.org::*Grotto][Grotto:1]] @teleport mp01 # Grotto:1 ends here # Let’s travel west along the path in the forest: -# [[file:../../../projects/mud.org::*Grotto][Grotto:2]] +# [[file:../moss-n-puddles.org::*Grotto][Grotto:2]] @dig Grotto;mp04 :typeclasses.rooms_weather.TimeWeatherRoom = west footpath;west;w,east footpath;east;e;path;footpath # Grotto:2 ends here @@ -3251,7 +3272,7 @@ py me.search("raven").backstory("raven") # With a nice message about wandering: -# [[file:../../../projects/mud.org::*Grotto][Grotto:3]] +# [[file:../moss-n-puddles.org::*Grotto][Grotto:3]] @set west/traverse_msg = "You meander between mossy tree roots along a footpath for a while until it ends in a grotto." # Grotto:3 ends here @@ -3259,7 +3280,7 @@ py me.search("raven").backstory("raven") # And a description: -# [[file:../../../projects/mud.org::*Grotto][Grotto:4]] +# [[file:../moss-n-puddles.org::*Grotto][Grotto:4]] @desc west = A footpath winds between the roots of a tree. You try to jump to look over the roots, and something red catches your eye. # Grotto:4 ends here @@ -3267,7 +3288,7 @@ py me.search("raven").backstory("raven") # Jump into the new room: -# [[file:../../../projects/mud.org::*Grotto][Grotto:5]] +# [[file:../moss-n-puddles.org::*Grotto][Grotto:5]] @teleport mp04 # Grotto:5 ends here @@ -3276,7 +3297,7 @@ py me.search("raven").backstory("raven") # And describe the tree and the door: -# [[file:../../../projects/mud.org::*Grotto][Grotto:6]] +# [[file:../moss-n-puddles.org::*Grotto][Grotto:6]] @desc here = The trickling sound of a small stream drops down a lush hill between |Yferns|n and brambleberry |Ybushes|n. The path ends at a small |Ybridge|n that leads to a red door embedded at the base of a giant |Ytree|n. A carved sign over the door reads, |wDabblers|n. # Grotto:6 ends here @@ -3284,7 +3305,7 @@ py me.search("raven").backstory("raven") # A description if they look east: -# [[file:../../../projects/mud.org::*Grotto][Grotto:7]] +# [[file:../moss-n-puddles.org::*Grotto][Grotto:7]] @desc east = A winding footpath leads through the forest of giant trees. # Grotto:7 ends here @@ -3292,7 +3313,7 @@ py me.search("raven").backstory("raven") # And a nice journey message to go east in of the forest: -# [[file:../../../projects/mud.org::*Grotto][Grotto:8]] +# [[file:../moss-n-puddles.org::*Grotto][Grotto:8]] @set east/traverse_msg = "The mossy tree roots makes for an interesting path..." # Grotto:8 ends here @@ -3301,7 +3322,7 @@ py me.search("raven").backstory("raven") # And extra things to see: -# [[file:../../../projects/mud.org::*Grotto][Grotto:9]] +# [[file:../moss-n-puddles.org::*Grotto][Grotto:9]] @detail trees;tree = The trees in this forest are massive, but a smaller tree has a red door. Must lead to a closet! # Grotto:9 ends here @@ -3310,7 +3331,7 @@ py me.search("raven").backstory("raven") # And the bridge: -# [[file:../../../projects/mud.org::*Grotto][Grotto:10]] +# [[file:../moss-n-puddles.org::*Grotto][Grotto:10]] @detail bridge = A small wooden bridge leads over a tiny |Ystream|n. Hard to see the water on account of the giant leafed skunk |Ycabbages|n. # Grotto:10 ends here @@ -3319,7 +3340,7 @@ py me.search("raven").backstory("raven") # And the cabbages? And ferns? -# [[file:../../../projects/mud.org::*Grotto][Grotto:11]] +# [[file:../moss-n-puddles.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 |Ybridge|n. # @detail fern;ferns = Sword ferns rattling sabers against the wards from the Maiden Hairs' flailing their fronds. @@ -3329,7 +3350,7 @@ py me.search("raven").backstory("raven") # The berry bush is a [[file:~/src/moss-n-puddles/typeclasses/consumables.py::class Producer(Object):][producer]] that makes /berries/, which is something to eat and use to feed the wildlife. -# [[file:../../../projects/mud.org::*Berry Bush][Berry Bush:1]] +# [[file:../moss-n-puddles.org::*Berry Bush][Berry Bush:1]] @create/drop berry bush;bush : typeclasses.consumables.Producer # Berry Bush:1 ends here @@ -3337,7 +3358,7 @@ py me.search("raven").backstory("raven") # With a description: -# [[file:../../../projects/mud.org::*Berry Bush][Berry Bush:2]] +# [[file:../moss-n-puddles.org::*Berry Bush][Berry Bush:2]] @desc bush = A bush laden with bright red brambleberries. You've heard that they are good. # Berry Bush:2 ends here @@ -3345,14 +3366,14 @@ py me.search("raven").backstory("raven") # We have to have the bush describe what it /makes/: -# [[file:../../../projects/mud.org::*Berry Bush][Berry Bush:3]] +# [[file:../moss-n-puddles.org::*Berry Bush][Berry Bush:3]] @set bush/make_name = "berry" # Berry Bush:3 ends here # Including some plural aliases: -# [[file:../../../projects/mud.org::*Berry Bush][Berry Bush:4]] +# [[file:../moss-n-puddles.org::*Berry Bush][Berry Bush:4]] @set bush/make_aliases = ["berries", "brambleberry", "brambleberries"] # Berry Bush:4 ends here @@ -3360,7 +3381,7 @@ py me.search("raven").backstory("raven") # And a verb when they /get/ the consumable: -# [[file:../../../projects/mud.org::*Berry Bush][Berry Bush:5]] +# [[file:../moss-n-puddles.org::*Berry Bush][Berry Bush:5]] @set bush/make_verb = "$conj(pick) a" # Berry Bush:5 ends here @@ -3368,7 +3389,7 @@ py me.search("raven").backstory("raven") # And the bush needs to know the /description/ of the Consumable, so that it can attach that: -# [[file:../../../projects/mud.org::*Berry Bush][Berry Bush:7]] +# [[file:../moss-n-puddles.org::*Berry Bush][Berry Bush:7]] @set bush/make_desc = "Bright red with flecks of orange, about grape-sized" # Berry Bush:7 ends here @@ -3376,7 +3397,7 @@ py me.search("raven").backstory("raven") # How many berries are there when you pick them? -# [[file:../../../projects/mud.org::*Berry Bush][Berry Bush:8]] +# [[file:../moss-n-puddles.org::*Berry Bush][Berry Bush:8]] @set bush/make_amount = 1 # Berry Bush:8 ends here @@ -3384,7 +3405,7 @@ py me.search("raven").backstory("raven") # How many berries do you eat at a time: -# [[file:../../../projects/mud.org::*Berry Bush][Berry Bush:9]] +# [[file:../moss-n-puddles.org::*Berry Bush][Berry Bush:9]] @set bush/make_eat_amount = 1 # Berry Bush:9 ends here @@ -3392,7 +3413,7 @@ py me.search("raven").backstory("raven") # We can either have a single /eat/ message: -# [[file:../../../projects/mud.org::*Berry Bush][Berry Bush:10]] +# [[file:../moss-n-puddles.org::*Berry Bush][Berry Bush:10]] @set bush/make_eat_msg = "Sweet and slightly tart. <>." # Berry Bush:10 ends here @@ -3400,7 +3421,7 @@ py me.search("raven").backstory("raven") # Or many messages that can be randomly selected: -# [[file:../../../projects/mud.org::*Berry Bush][Berry Bush:11]] +# [[file:../moss-n-puddles.org::*Berry Bush][Berry Bush:11]] @set bush/make_eat_msgs = [ "Sweet and slightly tart.", "<>.", "Ooo...quite sour.", "A bit ripe, but still good.", "So sweet with a hint of <>." ] # Berry Bush:11 ends here @@ -3408,7 +3429,7 @@ py me.search("raven").backstory("raven") # Let the user know when they consumed them all. -# [[file:../../../projects/mud.org::*Berry Bush][Berry Bush:12]] +# [[file:../moss-n-puddles.org::*Berry Bush][Berry Bush:12]] @set bush/make_finish_msg = #"Those were <>." # Berry Bush:12 ends here @@ -3417,7 +3438,7 @@ py me.search("raven").backstory("raven") # 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]] +# [[file:../moss-n-puddles.org::*Spring Water][Spring Water:1]] # @teleport/quiet mp04 # @create/drop stream of spring water;stream;spring;water: typeclasses.drinkables.Water @@ -3440,7 +3461,7 @@ py me.search("raven").backstory("raven") # Most of the work of the /knocker/ is in the Python code: -# [[file:../../../projects/mud.org::*Knocker][Knocker:1]] +# [[file:../moss-n-puddles.org::*Knocker][Knocker:1]] @create/drop knocker: typeclasses.things.Knocker # Knocker:1 ends here @@ -3448,7 +3469,7 @@ py me.search("raven").backstory("raven") # Let’s make the knocker be a surprise. -# [[file:../../../projects/mud.org::*Knocker][Knocker:2]] +# [[file:../moss-n-puddles.org::*Knocker][Knocker:2]] @set knocker/hidden_tag = "hidden_knocker" # @lock knocker = view:tag(hidden_knocker) @@ -3458,7 +3479,7 @@ py me.search("raven").backstory("raven") # The knocker shouldn’t be steal-able: -# [[file:../../../projects/mud.org::*Knocker][Knocker:3]] +# [[file:../moss-n-puddles.org::*Knocker][Knocker:3]] @lock knocker = get:false() # @set knocker/get_err_msg = "It appears firmly attached to the door." @@ -3468,7 +3489,7 @@ py me.search("raven").backstory("raven") # The description is dynamic from the Python code, so we don’t need this statement: -# [[file:../../../projects/mud.org::*Knocker][Knocker:4]] +# [[file:../moss-n-puddles.org::*Knocker][Knocker:4]] @desc knocker = The brass face looks at you and winks. # Knocker:4 ends here @@ -3477,7 +3498,7 @@ py me.search("raven").backstory("raven") # 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:5]] +# [[file:../moss-n-puddles.org::*Knocker][Knocker:5]] @set knocker/room_to_msg = "mp03" # Knocker:5 ends here @@ -3486,7 +3507,7 @@ py me.search("raven").backstory("raven") # 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:6]] +# [[file:../moss-n-puddles.org::*Knocker][Knocker:6]] @set here/knock_msg = "You grab the ring" # Knocker:6 ends here @@ -3494,7 +3515,7 @@ py me.search("raven").backstory("raven") # Then, what the other’s in the room read: -# [[file:../../../projects/mud.org::*Knocker][Knocker:7]] +# [[file:../moss-n-puddles.org::*Knocker][Knocker:7]] @set here/knock_other_msg = "grabs the ring and knocks firmly on the door." # Knocker:7 ends here @@ -3502,7 +3523,7 @@ py me.search("raven").backstory("raven") # And an error message if the ring is not with the goblin: -# [[file:../../../projects/mud.org::*Knocker][Knocker:8]] +# [[file:../moss-n-puddles.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:8 ends here @@ -3510,7 +3531,7 @@ py me.search("raven").backstory("raven") # Since we can remove the ring, let’s create it: -# [[file:../../../projects/mud.org::*Ring][Ring:1]] +# [[file:../moss-n-puddles.org::*Ring][Ring:1]] @create ring: typeclasses.things.Ring # Ring:1 ends here @@ -3518,7 +3539,7 @@ py me.search("raven").backstory("raven") # And give it an alias: -# [[file:../../../projects/mud.org::*Ring][Ring:2]] +# [[file:../moss-n-puddles.org::*Ring][Ring:2]] @name ring = brass ring;ring # Ring:2 ends here @@ -3526,7 +3547,7 @@ py me.search("raven").backstory("raven") # And a description: -# [[file:../../../projects/mud.org::*Ring][Ring:3]] +# [[file:../moss-n-puddles.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 @@ -3534,7 +3555,7 @@ py me.search("raven").backstory("raven") # Although we can interact with it, let’s not make it obvious that it is an object: -# [[file:../../../projects/mud.org::*Ring][Ring:4]] +# [[file:../moss-n-puddles.org::*Ring][Ring:4]] @set ring/hidden_tag = "hidden_ring" # @lock ring = view:tag(hidden_ring) @@ -3545,7 +3566,7 @@ py me.search("raven").backstory("raven") # And let’s make it so we can take that: -# [[file:../../../projects/mud.org::*Ring][Ring:5]] +# [[file:../moss-n-puddles.org::*Ring][Ring:5]] @set ring/can_take = True # Ring:5 ends here @@ -3554,7 +3575,7 @@ py me.search("raven").backstory("raven") # Let’s tether the ring to the knocker … -# [[file:../../../projects/mud.org::*Ring][Ring:6]] +# [[file:../moss-n-puddles.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." @@ -3564,7 +3585,7 @@ py me.search("raven").backstory("raven") # And put the ring in the knocker’s mouth: -# [[file:../../../projects/mud.org::*Ring][Ring:7]] +# [[file:../moss-n-puddles.org::*Ring][Ring:7]] @teleport/quiet ring = knocker # Ring:7 ends here @@ -3572,14 +3593,14 @@ py me.search("raven").backstory("raven") # Add the Python /special-ness/ for [[file:~/src/moss-n-puddles/typeclasses/rooms.py::class DabblersRoom(Room):][this room]]: -# [[file:../../../projects/mud.org::*Cozy House][Cozy House:1]] +# [[file:../moss-n-puddles.org::*Cozy House][Cozy House:1]] @dig Cozy House;mp03: typeclasses.rooms.DabblersRoom = red door;door;inside,outside;leave # Cozy House:1 ends here # The door description should match the artwork on the website: -# [[file:../../../projects/mud.org::*Red Door][Red Door:1]] +# [[file:../moss-n-puddles.org::*Red Door][Red Door:1]] @desc red door = A painted red door where the round top of the door fits snugly in the bark of the tree. Along with a large brass doorknob, the door sports the most curious door knocker in the shape of a goblin's face. # Red Door:1 ends here @@ -3587,14 +3608,14 @@ py me.search("raven").backstory("raven") # This exit should be special. First, it is locked unless a character has the =open_red_door= tag. -# [[file:../../../projects/mud.org::*Red Door][Red Door:2]] +# [[file:../moss-n-puddles.org::*Red Door][Red Door:2]] @lock door = traverse:tag(open_red_door, mp) # Red Door:2 ends here # Needs a message why one can’t walk through: -# [[file:../../../projects/mud.org::*Red Door][Red Door:3]] +# [[file:../moss-n-puddles.org::*Red Door][Red Door:3]] @set door/err_traverse = "The door seems locked." # Red Door:3 ends here @@ -3602,7 +3623,7 @@ py me.search("raven").backstory("raven") # If you do figure out how to get through the door: -# [[file:../../../projects/mud.org::*Red Door][Red Door:4]] +# [[file:../moss-n-puddles.org::*Red Door][Red Door:4]] @set door/traverse_msg = "You stoop as you step through the doorway..." # Red Door:4 ends here @@ -3611,7 +3632,7 @@ py me.search("raven").backstory("raven") # We described [[Knocker][the knocker]] earlier, as it holds the /virtual key/ for unlocking the door. But looking at the door, should show the knocker too. -# [[file:../../../projects/mud.org::*Red Door][Red Door:5]] +# [[file:../moss-n-puddles.org::*Red Door][Red Door:5]] @set door/hidden_tag = "hidden_knocker" # Red Door:5 ends here @@ -3619,7 +3640,7 @@ py me.search("raven").backstory("raven") # Fix the inside of the “House”: -# [[file:../../../projects/mud.org::*Inside][Inside:1]] +# [[file:../moss-n-puddles.org::*Inside][Inside:1]] @teleport mp03 # Inside:1 ends here @@ -3628,7 +3649,7 @@ py me.search("raven").backstory("raven") # And the best description ever that we don’t use: -# [[file:../../../projects/mud.org::*Inside][Inside:2]] +# [[file:../moss-n-puddles.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:2 ends here @@ -3637,7 +3658,7 @@ py me.search("raven").backstory("raven") # 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:3]] +# [[file:../moss-n-puddles.org::*Inside][Inside:3]] @set here/initial_desc = "You found a cozy, cornerless room." # Ravenous State @@ -3661,7 +3682,7 @@ py me.search("raven").backstory("raven") # And details: -# [[file:../../../projects/mud.org::*Inside][Inside:4]] +# [[file:../moss-n-puddles.org::*Inside][Inside:4]] @detail hearth = An enormous stone hearth overshadows this round room with dark |Ypaneling|n. |YStairs|n lead up and behind it. # @detail paneling = The seamless paneling, stretches from floor up into the darkness above. @@ -3671,7 +3692,7 @@ py me.search("raven").backstory("raven") # Touch up the exit: -# [[file:../../../projects/mud.org::*Inside][Inside:5]] +# [[file:../moss-n-puddles.org::*Inside][Inside:5]] @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..." @@ -3682,14 +3703,14 @@ py me.search("raven").backstory("raven") # Add some initial ambiance: -# [[file:../../../projects/mud.org::*Inside][Inside:6]] +# [[file:../moss-n-puddles.org::*Inside][Inside:6]] @set here/arrive = "45 ;; gm The rain << patters ^ chatters ^ drums >> against a window << sill ^ pane >>. Nice to be << indoors ^ inside >>." # Inside:6 ends here # The tapestry should tell our /creation myth/. -# [[file:../../../projects/mud.org::*Tapestry Story][Tapestry Story:1]] +# [[file:../moss-n-puddles.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 |Yhearth|n. 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. @@ -3708,14 +3729,14 @@ py me.search("raven").backstory("raven") # And a fire in the fireplace is a type of /pet/, since we can feed it: -# [[file:../../../projects/mud.org::*Fireplace][Fireplace:1]] +# [[file:../moss-n-puddles.org::*Fireplace][Fireplace:1]] @create/drop fireplace;fire;embers : typeclasses.pets.Fire # Fireplace:1 ends here # How about some aliases: -# [[file:../../../projects/mud.org::*Fireplace][Fireplace:2]] +# [[file:../moss-n-puddles.org::*Fireplace][Fireplace:2]] @lock fire = get:false() # Fireplace:2 ends here @@ -3723,7 +3744,7 @@ py me.search("raven").backstory("raven") # And a description that will be overridden: -# [[file:../../../projects/mud.org::*Fireplace][Fireplace:3]] +# [[file:../moss-n-puddles.org::*Fireplace][Fireplace:3]] @desc fireplace = A stone fireplace with a carved wooden mantel supporting small |Ypictures|n, some |Ybooks|n and a black |Ystatue|n. # Fireplace:3 ends here @@ -3731,7 +3752,7 @@ py me.search("raven").backstory("raven") # Since we mentioned some details, we better mention them: -# [[file:../../../projects/mud.org::*Fireplace][Fireplace:4]] +# [[file:../moss-n-puddles.org::*Fireplace][Fireplace:4]] @detail pictures = Two small framed pictures perch above the fireplace mantle. One is of a satyr playing a saxophone, and the other is of a fish with a big smile. # Fireplace:4 ends here @@ -3739,7 +3760,7 @@ py me.search("raven").backstory("raven") # This reference in this detail is obviously, only for me: -# [[file:../../../projects/mud.org::*Fireplace][Fireplace:5]] +# [[file:../moss-n-puddles.org::*Fireplace][Fireplace:5]] @detail statue = A small, black statue of a salamander curled around a book, engraved with a title, "Seeing Stones". # Fireplace:5 ends here @@ -3747,7 +3768,7 @@ py me.search("raven").backstory("raven") # I imagine a giant picture over the fireplace … need to do something interesting with it. -# [[file:../../../projects/mud.org::*Fireplace][Fireplace:6]] +# [[file:../moss-n-puddles.org::*Fireplace][Fireplace:6]] @detail picture = Above the |Yfireplace|n is a large, somewhat abstract |Ypainting|n stretching its arm-like branches with shadowing that looks like a yawn. # Fireplace:6 ends here @@ -3755,11 +3776,11 @@ py me.search("raven").backstory("raven") # Need a way to produce wood for the fireplace. -# [[file:../../../projects/mud.org::*Wood Rack][Wood Rack:1]] +# [[file:../moss-n-puddles.org::*Wood Rack][Wood Rack:1]] @create/drop wood rack;log rack;log holder;wood holder;wood;log :typeclasses.consumables.Producer # Wood Rack:1 ends here -# [[file:../../../projects/mud.org::*Wood Rack][Wood Rack:2]] +# [[file:../moss-n-puddles.org::*Wood Rack][Wood Rack:2]] @desc wood rack = Steel and leather hammock for a small pile of cut logs, perfect for |gfeed|ning to the |gfire|n. # Wood Rack:2 ends here @@ -3768,7 +3789,7 @@ py me.search("raven").backstory("raven") # We have to have the wood rack describe what it /makes/: -# [[file:../../../projects/mud.org::*Wood Rack][Wood Rack:3]] +# [[file:../moss-n-puddles.org::*Wood Rack][Wood Rack:3]] @set wood rack/make_name = "log" # @set wood rack/make_aliase = ["wood"] @@ -3779,7 +3800,7 @@ py me.search("raven").backstory("raven") # And a verb when they /get/ the consumable: -# [[file:../../../projects/mud.org::*Wood Rack][Wood Rack:4]] +# [[file:../moss-n-puddles.org::*Wood Rack][Wood Rack:4]] @set wood rack/make_verb = "$conj(get) a small" # Wood Rack:4 ends here @@ -3788,7 +3809,7 @@ py me.search("raven").backstory("raven") # And a commentary: -# [[file:../../../projects/mud.org::*Wood Rack][Wood Rack:5]] +# [[file:../moss-n-puddles.org::*Wood Rack][Wood Rack:5]] @set wood rack/make_note = " from the wood rack" # Wood Rack:5 ends here @@ -3796,7 +3817,7 @@ py me.search("raven").backstory("raven") # This one is optional as it defaults to Consumable: -# [[file:../../../projects/mud.org::*Wood Rack][Wood Rack:6]] +# [[file:../moss-n-puddles.org::*Wood Rack][Wood Rack:6]] @set wood rack/make_class = "typeclasses.things.Wood" # Wood Rack:6 ends here @@ -3804,7 +3825,7 @@ py me.search("raven").backstory("raven") # And the wood rack needs to know the /description/ of the Consumable, so that it can attach that: -# [[file:../../../projects/mud.org::*Wood Rack][Wood Rack:7]] +# [[file:../moss-n-puddles.org::*Wood Rack][Wood Rack:7]] @set wood rack/make_desc = "Cut wood, perfect for feeding to the fire." # Wood Rack:7 ends here @@ -3812,7 +3833,7 @@ py me.search("raven").backstory("raven") # How much is there when you pick them? -# [[file:../../../projects/mud.org::*Wood Rack][Wood Rack:8]] +# [[file:../moss-n-puddles.org::*Wood Rack][Wood Rack:8]] @set wood rack/make_amount = 1 # Wood Rack:8 ends here @@ -3820,7 +3841,7 @@ py me.search("raven").backstory("raven") # Hide from immediate view: -# [[file:../../../projects/mud.org::*Wood Rack][Wood Rack:9]] +# [[file:../moss-n-puddles.org::*Wood Rack][Wood Rack:9]] @set wood rack/hidden_tag = "hidden_woodrack" # @lock wood rack = view:tag(hidden_woodrack) @@ -3830,7 +3851,7 @@ py me.search("raven").backstory("raven") # What sort of non-books do we want to look at? -# [[file:../../../projects/mud.org::*Knickknacks][Knickknacks:1]] +# [[file:../moss-n-puddles.org::*Knickknacks][Knickknacks:1]] @create/drop few trinkets;trinkets;trinket;knickknacks;knickknackery;doodads;doodad;knick-knacks: typeclasses.things.Trinket # Knickknacks:1 ends here @@ -3839,7 +3860,7 @@ py me.search("raven").backstory("raven") # Let’s not let anything of this sort be picked up: -# [[file:../../../projects/mud.org::*Knickknacks][Knickknacks:2]] +# [[file:../moss-n-puddles.org::*Knickknacks][Knickknacks:2]] @lock trinkets = get:false() # @set trinkets/get_err_msg = "While interesting, perhaps you shouldn't steal Dabbler's personal collection." @@ -3849,7 +3870,7 @@ py me.search("raven").backstory("raven") # One trinket we might create to give to people as a souvenir. -# [[file:../../../projects/mud.org::*Magic 8 Ball][Magic 8 Ball:1]] +# [[file:../moss-n-puddles.org::*Magic 8 Ball][Magic 8 Ball:1]] @create crystal ball;ball;magic ball: typeclasses.things.CrystalBall # Magic 8 Ball:1 ends here @@ -3858,7 +3879,7 @@ py me.search("raven").backstory("raven") # And its description: -# [[file:../../../projects/mud.org::*Magic 8 Ball][Magic 8 Ball:2]] +# [[file:../moss-n-puddles.org::*Magic 8 Ball][Magic 8 Ball:2]] @desc ball = A glass orb of billowing mist and patterns. |/When the << ^ swirling blue patterns ^ spinning octarine swirls ^ revolving stars>> clear, the glass reads, # Magic 8 Ball:2 ends here @@ -3867,7 +3888,7 @@ py me.search("raven").backstory("raven") # And we should hide it: -# [[file:../../../projects/mud.org::*Magic 8 Ball][Magic 8 Ball:3]] +# [[file:../moss-n-puddles.org::*Magic 8 Ball][Magic 8 Ball:3]] @set ball/hidden_tag = "hidden_ball" # @lock ball = view:tag(hidden_ball) @@ -3880,7 +3901,7 @@ drop ball # Since we mentioned shelves of books, we should create a Producer that makes a random book. -# [[file:../../../projects/mud.org::*Bookshelf][Bookshelf:1]] +# [[file:../moss-n-puddles.org::*Bookshelf][Bookshelf:1]] @create/drop number of bookshelves;bookshelf;shelves;bookcase;books;book:typeclasses.readables.Bookshelf # Bookshelf:1 ends here @@ -3888,7 +3909,7 @@ drop ball # With a good description: -# [[file:../../../projects/mud.org::*Bookshelf][Bookshelf:2]] +# [[file:../moss-n-puddles.org::*Bookshelf][Bookshelf:2]] @desc books = Shelves at various angles embellish the walls of this small, cozy room. Leatherbound books weigh down each shelf, while some stacks of books support other shelves. # Bookshelf:2 ends here @@ -3896,14 +3917,14 @@ drop ball # And [[file:~/src/moss-n-puddles/typeclasses/sittables.py::class Sittables(Sittable):][the chairs]] is a /plural/ location to sit, allowing anyone to sit down. -# [[file:../../../projects/mud.org::*Chairs][Chairs:1]] +# [[file:../moss-n-puddles.org::*Chairs][Chairs:1]] @create/drop overstuffed chairs:typeclasses.sittables.Sittables # Chairs:1 ends here # Add aliases afterwards: -# [[file:../../../projects/mud.org::*Chairs][Chairs:2]] +# [[file:../moss-n-puddles.org::*Chairs][Chairs:2]] @alias overstuffed chairs = chairs;chair # This only works if we make it plural: @set overstuffed chairs/plural = True @@ -3912,7 +3933,7 @@ drop ball # And the description: -# [[file:../../../projects/mud.org::*Chairs][Chairs:3]] +# [[file:../moss-n-puddles.org::*Chairs][Chairs:3]] @desc chairs = A few, dark leather, overstuffed chairs, each with a soft, colorful blanket and pillow. An invitation for a cozy nap. # Chairs:3 ends here @@ -3920,7 +3941,7 @@ drop ball # Can’t steal ‘em: -# [[file:../../../projects/mud.org::*Chairs][Chairs:4]] +# [[file:../moss-n-puddles.org::*Chairs][Chairs:4]] @lock chairs = get:false() # @set chairs/get_err_msg = "It's way too heavy for you to lift." @@ -3930,7 +3951,7 @@ drop ball # And textual descriptions the object can use: -# [[file:../../../projects/mud.org::*Chairs][Chairs:5]] +# [[file:../moss-n-puddles.org::*Chairs][Chairs:5]] @set chairs/adjective = "in" # @set chairs/article = "the" @@ -3944,7 +3965,7 @@ drop ball # This golden NPC always hangs around our gnome, recording all that transpires. -# [[file:../../../projects/mud.org::*Dabbler’s Butterfly][Dabbler’s Butterfly:1]] +# [[file:../moss-n-puddles.org::*Dabbler’s Butterfly][Dabbler’s Butterfly:1]] @create/drop golden butterfly;butterfly;recorder: typeclasses.things.Scribe # Dabbler’s Butterfly:1 ends here @@ -3953,7 +3974,7 @@ drop ball # And describe it: -# [[file:../../../projects/mud.org::*Dabbler’s Butterfly][Dabbler’s Butterfly:2]] +# [[file:../moss-n-puddles.org::*Dabbler’s Butterfly][Dabbler’s Butterfly:2]] @desc butterfly = A flying insect with iridescent wings that flicker a golden hue. Is it carrying a tiny a notepad and pen? # Dabbler’s Butterfly:2 ends here @@ -3962,7 +3983,7 @@ drop ball # Let’s make it hidden for the moment: -# [[file:../../../projects/mud.org::*Dabbler’s Butterfly][Dabbler’s Butterfly:3]] +# [[file:../moss-n-puddles.org::*Dabbler’s Butterfly][Dabbler’s Butterfly:3]] @lock butterfly = view:tag(hidden_butterfly) # Dabbler’s Butterfly:3 ends here @@ -3971,7 +3992,7 @@ drop ball # And let’s not let anyone pick it up: -# [[file:../../../projects/mud.org::*Dabbler’s Butterfly][Dabbler’s Butterfly:4]] +# [[file:../moss-n-puddles.org::*Dabbler’s Butterfly][Dabbler’s Butterfly:4]] @set butterfly/get_err_msg = "It quickly flutters away, only to land a few feet away." # Dabbler’s Butterfly:4 ends here @@ -3980,7 +4001,7 @@ drop ball # Let’s set the location where it will store its transcripts: -# [[file:../../../projects/mud.org::*Dabbler’s Butterfly][Dabbler’s Butterfly:5]] +# [[file:../moss-n-puddles.org::*Dabbler’s Butterfly][Dabbler’s Butterfly:5]] @set butterfly/transcripts_path = 'transcripts/cozy-%Y-%m-%d.html' # @set butterfly/header_file = "transcripts/cozy-header-template.html" @@ -3990,7 +4011,7 @@ drop ball # My characters should be NPCs, so they can stick around if I’m not logged in. -# [[file:../../../projects/mud.org::*Character: Dabbler][Character: Dabbler:1]] +# [[file:../moss-n-puddles.org::*Character: Dabbler][Character: Dabbler:1]] @create/drop Dabbler;gnome;old gnome: typeclasses.puppets.Puppet # Character: Dabbler:1 ends here @@ -3999,7 +4020,7 @@ drop ball # Note that we give him a male gender: -# [[file:../../../projects/mud.org::*Character: Dabbler][Character: Dabbler:2]] +# [[file:../moss-n-puddles.org::*Character: Dabbler][Character: Dabbler:2]] @set gnome/gender = 'male' # Character: Dabbler:2 ends here @@ -4008,7 +4029,7 @@ drop ball # Work around the =pose= bug: -# [[file:../../../projects/mud.org::*Character: Dabbler][Character: Dabbler:3]] +# [[file:../moss-n-puddles.org::*Character: Dabbler][Character: Dabbler:3]] py bt = self.search('gnome'); bt.sdesc.add('old gnome'); bt.db.pose = 'smiling at you' # Character: Dabbler:3 ends here @@ -4017,11 +4038,11 @@ py bt = self.search('gnome'); bt.sdesc.add('old gnome'); bt.db.pose = 'smiling a # Let’s give him a number of alternate names for the Recorder (mostly): -# [[file:../../../projects/mud.org::*Character: Dabbler][Character: Dabbler:4]] +# [[file:../moss-n-puddles.org::*Character: Dabbler][Character: Dabbler:4]] @set gnome/alt_names = ["The old gnome", "The gnome", "The little old man", "The little man", "With a wink, the gnome", "Cheerfully, the gnome"] # Character: Dabbler:4 ends here -# [[file:../../../projects/mud.org::*Character: Dabbler][Character: Dabbler:6]] +# [[file:../moss-n-puddles.org::*Character: Dabbler][Character: Dabbler:6]] @set gnome/pose_sleep = "sleeping soundly in a large, overstuffed chair" # pose gnome/default = smoking his pipe @@ -4032,7 +4053,7 @@ pose gnome/default = smoking his pipe # And a good description that I can rework: -# [[file:../../../projects/mud.org::*Character: Dabbler][Character: Dabbler:7]] +# [[file:../moss-n-puddles.org::*Character: Dabbler][Character: Dabbler:7]] @desc gnome = A small, hunched old man with messy blue hair, a gray vandyke and an eye twinkle.|/|/Spectacles perched precariously on the end of his hooked nose, wobble with his head. His bright crimson jacket contrasts with his dark brown cloak. # Character: Dabbler:7 ends here @@ -4041,7 +4062,7 @@ pose gnome/default = smoking his pipe # And an un-puppeted, sleeping, description: -# [[file:../../../projects/mud.org::*Character: Dabbler][Character: Dabbler:8]] +# [[file:../moss-n-puddles.org::*Character: Dabbler][Character: Dabbler:8]] @set gnome/desc_unpuppeted = "A small, hunched old man with messy blue hair and a gray vandyke snoring soundly in one of the overstuffed chairs.|/|/Spectacles perched precariously on the end of his hooked nose, wobble with each breath. His bright crimson jacket contrasts with the dark brown blanket covering his legs." # Character: Dabbler:8 ends here @@ -4050,7 +4071,7 @@ pose gnome/default = smoking his pipe # And his fancy jacket: -# [[file:../../../projects/mud.org::*Character: Dabbler][Character: Dabbler:10]] +# [[file:../moss-n-puddles.org::*Character: Dabbler][Character: Dabbler:10]] @create waistcoat : typeclasses.things.BagofJunk # @desc waistcoat = An elegant green waistcoat with gold embroidery. @@ -4061,10 +4082,34 @@ pose gnome/default = smoking his pipe # Character: Dabbler:10 ends here + +# And some special /triggers/ which are mostly “phrases” that are shown to all characters: + + +# [[file:../moss-n-puddles.org::*Character: Dabbler][Character: Dabbler:11]] +@set self/triggers:main = { + "darkness": { + "desc": "Make the room go black", + "timer": 3, + "events": [ + "The room gets dark", + "And then pitch-black!", + "The darkess lifts, and the room returns to normal."]}} +# Character: Dabbler:11 ends here + + + +# And set the /typical/ state of =main=: + +# [[file:../moss-n-puddles.org::*Character: Dabbler][Character: Dabbler:12]] +@set self/currentgame = main +# Character: Dabbler:12 ends here + + # And my staff: -# [[file:../../../projects/mud.org::*Staff][Staff:1]] +# [[file:../moss-n-puddles.org::*Staff][Staff:1]] @create gnarled staff;staff: typeclasses.things.Wand # @desc staff = An oaken staff with a sprig of two leaves next to a swirling ball of crystal embedded near the top. @@ -4077,7 +4122,7 @@ pose gnome/default = smoking his pipe # And his spells that go with the staff: -# [[file:../../../projects/mud.org::*Staff][Staff:2]] +# [[file:../moss-n-puddles.org::*Staff][Staff:2]] @set gnome/disappear_msg = "After a raspberry sound, the gnome, Dabbler, disappears in a wisp of smoke." # @set gnome/reappear_msg = "<> mist appears...along with the smell of sulphur... ;; When the smoke clears, an old gnome <>." @@ -4090,7 +4135,7 @@ pose gnome/default = smoking his pipe # This /crystal ball/ can be used to see what is going on in any area of the realm. -# [[file:../../../projects/mud.org::*Scrying Ball][Scrying Ball:1]] +# [[file:../moss-n-puddles.org::*Scrying Ball][Scrying Ball:1]] @create scrying ball: typeclasses.things.Scryer # Scrying Ball:1 ends here @@ -4099,7 +4144,7 @@ pose gnome/default = smoking his pipe # And a description: -# [[file:../../../projects/mud.org::*Scrying Ball][Scrying Ball:2]] +# [[file:../moss-n-puddles.org::*Scrying Ball][Scrying Ball:2]] @desc scrying ball = A crystal orb that shows what's abroad. # @give scrying ball = gnome @@ -4109,7 +4154,7 @@ pose gnome/default = smoking his pipe # The pipe is little more than messages to the smoker and everyone else in the room. -# [[file:../../../projects/mud.org::*Pipe][Pipe:1]] +# [[file:../moss-n-puddles.org::*Pipe][Pipe:1]] @create pipe: typeclasses.things.Pipe # Pipe:1 ends here @@ -4118,7 +4163,7 @@ pose gnome/default = smoking his pipe # And a description: -# [[file:../../../projects/mud.org::*Pipe][Pipe:2]] +# [[file:../moss-n-puddles.org::*Pipe][Pipe:2]] @desc pipe = As tall as its owner with etchings of birds, leaves and magical symbols. # @give pipe = gnome @@ -4128,7 +4173,7 @@ pose gnome/default = smoking his pipe # The pipe is little more than messages to the smoker and everyone else in the room. -# [[file:../../../projects/mud.org::*Journal][Journal:1]] +# [[file:../moss-n-puddles.org::*Journal][Journal:1]] @create large book;journal: typeclasses.readables.Journal # Journal:1 ends here @@ -4137,7 +4182,7 @@ pose gnome/default = smoking his pipe # Writing descriptions: -# [[file:../../../projects/mud.org::*Journal][Journal:2]] +# [[file:../moss-n-puddles.org::*Journal][Journal:2]] @set journal/pre_write_msg = "With a small octarine spark, a quill appears in the air. $You() $conj(grab) the quill and begin to write in $pron(your) large book." # @set journal/post_write_msg = "The quill disappears in a small puff of smoke, as $you() $conj(close) $pron(your) book." @@ -4148,7 +4193,7 @@ pose gnome/default = smoking his pipe # And a description: -# [[file:../../../projects/mud.org::*Journal][Journal:3]] +# [[file:../moss-n-puddles.org::*Journal][Journal:3]] @desc journal = Leather-bound book, cracked and worn from ages. # @give journal = gnome @@ -4163,7 +4208,7 @@ pose gnome/default = smoking his pipe # Do I match the Big Hairy Beast, or do I create it as a puppet? -# [[file:../../../projects/mud.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:1]] +# [[file:../moss-n-puddles.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:1]] @create/drop wee beastie;Mochi;stoat;pet: typeclasses.pets.WeeBeastie # Stoat the Wee Beastie:1 ends here @@ -4172,7 +4217,7 @@ pose gnome/default = smoking his pipe # And its description: -# [[file:../../../projects/mud.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:2]] +# [[file:../moss-n-puddles.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:2]] @desc stoat = A charming creature with a slender, elongated body covered in soft, white fur that glistens like freshly fallen snow. When open, its large, round eyes are a striking shade of lavender, and its bushy tail, tipped with a hint of violet. # Stoat the Wee Beastie:2 ends here @@ -4181,7 +4226,7 @@ pose gnome/default = smoking his pipe # Can’t get this guy: -# [[file:../../../projects/mud.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:3]] +# [[file:../moss-n-puddles.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:3]] @lock stoat = get:false() # @set stoat/get_err_msg = "Each time you try to pick it up, it serpentines it way back to the chair." @@ -4192,7 +4237,7 @@ pose gnome/default = smoking his pipe # Let’s get a bit more interaction with this pet: -# [[file:../../../projects/mud.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:4]] +# [[file:../moss-n-puddles.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:4]] @set stoat/active_amount = 8 # Stoat the Wee Beastie:4 ends here @@ -4201,7 +4246,7 @@ pose gnome/default = smoking his pipe # It’s level doesn’t change much. :-D It is always less interested, just like a cat. -# [[file:../../../projects/mud.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:5]] +# [[file:../moss-n-puddles.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:5]] @set stoat/scared_msg = "Currently, coiled like a sleeping snake on one of the chairs." # Stoat the Wee Beastie:5 ends here @@ -4210,7 +4255,7 @@ pose gnome/default = smoking his pipe # And petting it when someone first comes in? -# [[file:../../../projects/mud.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:6]] +# [[file:../moss-n-puddles.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:6]] @set stoat/pet_scared_response = "While it doesn't stop $you() << from petting it ^ >>, the beastie flashes its long teeth." # Stoat the Wee Beastie:6 ends here @@ -4219,7 +4264,7 @@ pose gnome/default = smoking his pipe # And actions if a friendly person isn’t around: -# [[file:../../../projects/mud.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:7]] +# [[file:../moss-n-puddles.org::*Stoat the Wee Beastie][Stoat the Wee Beastie: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." # Stoat the Wee Beastie:7 ends here @@ -4228,7 +4273,7 @@ pose gnome/default = smoking his pipe # Concerned level: -# [[file:../../../projects/mud.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:8]] +# [[file:../moss-n-puddles.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:8]] @set stoat/concerned_msg = "Currently, curled into a ball on one of the chairs." # Stoat the Wee Beastie:8 ends here @@ -4237,7 +4282,7 @@ pose gnome/default = smoking his pipe # Pets? -# [[file:../../../projects/mud.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:9]] +# [[file:../moss-n-puddles.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:9]] @set stoat/pet_concerned_response = "$You() get little response from << your pets of ^ >> << the wee beastie ^ the beastie >>. " # Stoat the Wee Beastie:9 ends here @@ -4246,7 +4291,7 @@ pose gnome/default = smoking his pipe # And actions at this level are more cute than sinister: -# [[file:../../../projects/mud.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:10]] +# [[file:../moss-n-puddles.org::*Stoat the Wee Beastie][Stoat the Wee Beastie: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." # Stoat the Wee Beastie:10 ends here @@ -4255,7 +4300,7 @@ pose gnome/default = smoking his pipe # Interested level: -# [[file:../../../projects/mud.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:11]] +# [[file:../moss-n-puddles.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:11]] @set stoat/interested_msg = "<< Currently ^ It is >> curled into a ball asleep." # Stoat the Wee Beastie:11 ends here @@ -4264,7 +4309,7 @@ pose gnome/default = smoking his pipe # Pets -# [[file:../../../projects/mud.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:12]] +# [[file:../moss-n-puddles.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:12]] @set stoat/pet_interested_response = "The << wee ^ >> beastie adorably moves its head into $your() pets." # Stoat the Wee Beastie:12 ends here @@ -4273,7 +4318,7 @@ pose gnome/default = smoking his pipe # And actions at this level are about as cute as a cat can be: -# [[file:../../../projects/mud.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:13]] +# [[file:../moss-n-puddles.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:13]] @set stoat/interested_actions = "The << sleepy ^ wee >> beastie << on $your() lap ^ >> let's out an adorable yawn. ;; The << sleepy ^ wee >> beastie << on $your() lap ^ >> uncurls itself, stretches, and recurls again. ;; $You() $conj(pet) the << sleepy ^ wee >> beastie << on |p lap ^ >> as it snuggles << close ^ >>. ;; You hear a deep purring sounds from the << sleepy ^ wee >> beastie << on $your() lap ^ >>. ;; The << sleepy ^ wee >> beastie twitches in its sleep, as if playing with dream toys." # Stoat the Wee Beastie:13 ends here @@ -4282,7 +4327,7 @@ pose gnome/default = smoking his pipe # Friendly level: -# [[file:../../../projects/mud.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:14]] +# [[file:../moss-n-puddles.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:14]] @set stoat/friendly_msg = "<< Currently ^ It is >> purring while curled up sleep." # Stoat the Wee Beastie:14 ends here @@ -4291,7 +4336,7 @@ pose gnome/default = smoking his pipe # Pets -# [[file:../../../projects/mud.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:15]] +# [[file:../moss-n-puddles.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:15]] @set stoat/pet_friendly_response = "The << wee ^ >> beastie adorably moves its head into $your() pets. ;; $You() << $conj(rub) ^ $conj(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() $conj(rub) its tummy. It lets out a little purr. ;; $You() << $conj(scratch) ^ $conj(massage) >> the soft << back ^ rump >> of the << wee ^ >> beastie. It wriggles around trying to get the most of this attention." # Stoat the Wee Beastie:15 ends here @@ -4300,7 +4345,7 @@ pose gnome/default = smoking his pipe # And actions at this level are about as cute as a cat can be: -# [[file:../../../projects/mud.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:16]] +# [[file:../moss-n-puddles.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:16]] @set stoat/friendly_actions = "The << sleepy ^ wee >> beastie << on $your() lap ^ >> let's out an adorable yawn. ;; The << sleepy ^ wee >> beastie << on $your() lap ^ >> uncurls itself, stretches, and recurls again. ;; $You() $conj(pet) the << sleepy ^ wee >> beastie << on |p lap ^ >> as it snuggles << close ^ >>. ;; You hear a deep purring sounds from the << sleepy ^ wee >> beastie << on $your() lap ^ >>. ;; The << sleepy ^ wee >> beastie twitches in its sleep, as if playing with dream toys." # Stoat the Wee Beastie:16 ends here @@ -4309,7 +4354,7 @@ pose gnome/default = smoking his pipe # And this pet loves his gnome. -# [[file:../../../projects/mud.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:17]] +# [[file:../moss-n-puddles.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:17]] @set gnome/wee_beastie_friendly_level=500 # Stoat the Wee Beastie:17 ends here @@ -4318,7 +4363,7 @@ pose gnome/default = smoking his pipe # Trigger some events … which can’t work at the moment, since a Pet is not a Puppet … yet: -# [[file:../../../projects/mud.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:18]] +# [[file:../moss-n-puddles.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:18]] @set stoat/arrive = "5 ;; gma {0} = A sleeping << wee ^ >> beastie, opens one curious eye to look at $you()." # # @set stoat/sit = "3 ;; gm A sleeping << wee ^ >> beastie, opens one curious eye to see who arrived." @@ -4329,7 +4374,7 @@ pose gnome/default = smoking his pipe # Let’s also hook it to our AI system: -# [[file:../../../projects/mud.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:19]] +# [[file:../moss-n-puddles.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:19]] @set stoat/personality = "wee-beastie" # @set stoat/personality_file = "personalities/wee-beastie.md" @@ -4339,7 +4384,7 @@ pose gnome/default = smoking his pipe # Better place to put the tea and scones. -# [[file:../../../projects/mud.org::*Kitchen][Kitchen:1]] +# [[file:../moss-n-puddles.org::*Kitchen][Kitchen:1]] @dig Cramped Kitchen;mp11 = archway to kitchen;kitchen;archway,back to main room;leave;main;back # Kitchen:1 ends here @@ -4348,7 +4393,7 @@ pose gnome/default = smoking his pipe # And describe the exit: -# [[file:../../../projects/mud.org::*Kitchen][Kitchen:2]] +# [[file:../moss-n-puddles.org::*Kitchen][Kitchen:2]] @desc archway = Knarled roots of a tree forms an opening where you can see cabinets, a stove and even a teapot. # @set archway/traverse_msg = "You stoop again to enter the cramped room." @@ -4359,7 +4404,7 @@ pose gnome/default = smoking his pipe # And describing the room: -# [[file:../../../projects/mud.org::*Kitchen][Kitchen:3]] +# [[file:../moss-n-puddles.org::*Kitchen][Kitchen:3]] @teleport mp11 # @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. @@ -4370,7 +4415,7 @@ pose gnome/default = smoking his pipe # And the exit: -# [[file:../../../projects/mud.org::*Kitchen][Kitchen:4]] +# [[file:../moss-n-puddles.org::*Kitchen][Kitchen:4]] @desc leave = Knarled roots of a tree forms an opening where you can see cabinets, a stove and even a teapot. # @set leave/traverse_msg = "You stoop again and leave the cramped room." @@ -4381,15 +4426,15 @@ pose gnome/default = smoking his pipe # And some details: -# [[file:../../../projects/mud.org::*Kitchen][Kitchen:5]] +# [[file:../moss-n-puddles.org::*Kitchen][Kitchen:5]] @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;counter = Covered in hand-sized black tiles with gold flecks match the |Ystove|n. The |Yplate|n of |Yscones|n look freshly baked. +# [[file:../moss-n-puddles.org::*Kitchen][Kitchen:6]] +@detail countertop;countertops;counter = Covered in hand-sized black tiles with gold flecks that match the |Ystove|n. The |Yplate|n of |Yscones|n look freshly baked. # Kitchen:6 ends here -# [[file:../../../projects/mud.org::*Kitchen][Kitchen:7]] +# [[file:../moss-n-puddles.org::*Kitchen][Kitchen:7]] @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... @@ -4399,7 +4444,7 @@ pose gnome/default = smoking his pipe # The Trolley [[file:~/src/moss-n-puddles/typeclasses/consumables.py::class Producer(Object):][produces]] teacups and random scones, which, like the [[Berry Trolley][berries]] can be eaten or fed to the wildlife. -# [[file:../../../projects/mud.org::*Cabinets and Counter-tops][Cabinets and Counter-tops:1]] +# [[file:../moss-n-puddles.org::*Cabinets and Counter-tops][Cabinets and Counter-tops:1]] @create/drop cabinet;cabinets : typeclasses.consumables.Trolley # Cabinets and Counter-tops:1 ends here @@ -4407,23 +4452,34 @@ pose gnome/default = smoking his pipe # We mentioned a /trolley/ with tea, cups and scones: -# [[file:../../../projects/mud.org::*Cabinets and Counter-tops][Cabinets and Counter-tops:2]] +# [[file:../moss-n-puddles.org::*Cabinets and Counter-tops][Cabinets and Counter-tops:2]] @desc cabinet = The cabinets contain an assortment of tea cups. # Cabinets and Counter-tops:2 ends here +# The cabinet can /bake/ scones: + + +# [[file:../moss-n-puddles.org::*Cabinets and Counter-tops][Cabinets and Counter-tops:3]] +@set cabinet/make_aliases = ["scone", "scones"] +@set cabinet/make_amount = 3 +@set cabinet/make_eat_amount = 1 +# Cabinets and Counter-tops:3 ends here + + + # We have to have the trolley bake something with the Python command: -# [[file:../../../projects/mud.org::*Cabinets and Counter-tops][Cabinets and Counter-tops:3]] +# [[file:../moss-n-puddles.org::*Cabinets and Counter-tops][Cabinets and Counter-tops:4]] py here.search("cabinet").do_bake() -# Cabinets and Counter-tops:3 ends here +# Cabinets and Counter-tops:4 ends here # The “room” gives the teacups, and the “teapot” fills the cups, so we just need descriptions: -# [[file:../../../projects/mud.org::*Tea Service][Tea Service:1]] +# [[file:../moss-n-puddles.org::*Tea Service][Tea Service:1]] @detail teacups = An odd, yet interesting assortment of teacups. Take one. # @detail teacup = Each cup is unique. Take one to look further. @@ -4435,7 +4491,7 @@ py here.search("cabinet").do_bake() # A teapot will “fill” a teacup forever, until it is “remade”. -# [[file:../../../projects/mud.org::*Tea Service][Tea Service:2]] +# [[file:../moss-n-puddles.org::*Tea Service][Tea Service:2]] @create/drop teapot;pot;tea pot:typeclasses.drinkables.Teapot # @desc teapot = An adorable brown teapot, full of tea. You feel you could |gmake|n a fresh pot. @@ -4446,7 +4502,7 @@ py here.search("cabinet").do_bake() # And of course, you can’t steal the tea pot: -# [[file:../../../projects/mud.org::*Tea Service][Tea Service:3]] +# [[file:../moss-n-puddles.org::*Tea Service][Tea Service:3]] @lock teapot = get:false() # @set teapot/get_err_msg = "You don't need to carry it around to make tea." @@ -4456,7 +4512,7 @@ py here.search("cabinet").do_bake() # Pulling on a candle opens a secret staircase! -# [[file:../../../projects/mud.org::*Secret Room][Secret Room:1]] +# [[file:../moss-n-puddles.org::*Secret Room][Secret Room:1]] @teleport/quiet mp03 # @dig Secret Room;mp12:typeclasses.rooms_dark.DarkRoom = stairs behind bookcase;down;down stairs;secret passage;bookcase;passage,up the stairs;stairs;leave;up @@ -4467,7 +4523,7 @@ py here.search("cabinet").do_bake() # Look and traverse: -# [[file:../../../projects/mud.org::*Secret Room][Secret Room:2]] +# [[file:../moss-n-puddles.org::*Secret Room][Secret Room:2]] @desc stairs = Behind the protruding bookcase, you see a staircase leading down into the darkness. # @set stairs/traverse_msg = "You carefully creep down the stairs behind the bookcase, lit by the candle in its holder. You hear the bookcase shut behind you." @@ -4477,11 +4533,11 @@ py here.search("cabinet").do_bake() # The Candle holder must be both an Opener (with a =do_pull= method) and a Producer (making long-lasting candles). -# [[file:../../../projects/mud.org::*Sconce][Sconce:1]] +# [[file:../moss-n-puddles.org::*Sconce][Sconce:1]] @create/drop sconce;candle holder;candle: typeclasses.consumables.Sconce # Sconce:1 ends here -# [[file:../../../projects/mud.org::*Sconce][Sconce:2]] +# [[file:../moss-n-puddles.org::*Sconce][Sconce:2]] @desc sconce = A black iron sconce holding a single lit |Ycandle|n. On closer examination, the bottom of this fixture appears to have a hinge? # Sconce:2 ends here @@ -4490,7 +4546,7 @@ py here.search("cabinet").do_bake() # Connect the exit: -# [[file:../../../projects/mud.org::*Sconce][Sconce:3]] +# [[file:../moss-n-puddles.org::*Sconce][Sconce:3]] @set sconce/exit = $search(stairs behind bookcase) # @set sconce/room = $search(Cozy House) @@ -4501,7 +4557,7 @@ py here.search("cabinet").do_bake() # Hide it a bit? -# [[file:../../../projects/mud.org::*Sconce][Sconce:4]] +# [[file:../moss-n-puddles.org::*Sconce][Sconce:4]] @set sconce/hidden_tag = "hidden_sconce" # @lock sconce = view:tag(hidden_sconce) @@ -4512,7 +4568,7 @@ py here.search("cabinet").do_bake() # We can =get= an endless supply of candles here: -# [[file:../../../projects/mud.org::*Sconce][Sconce:5]] +# [[file:../moss-n-puddles.org::*Sconce][Sconce:5]] @set sconce/make_name = "candle" # Sconce:5 ends here @@ -4521,7 +4577,7 @@ py here.search("cabinet").do_bake() # And a verb when they /get/ the consumable: -# [[file:../../../projects/mud.org::*Sconce][Sconce:6]] +# [[file:../moss-n-puddles.org::*Sconce][Sconce:6]] @set sconce/make_verb = "$conj(take) the" # @set sconce/make_note = ", but another magically appears in its place" @@ -4531,7 +4587,7 @@ py here.search("cabinet").do_bake() # This one is optional as it defaults to Consumable: -# [[file:../../../projects/mud.org::*Sconce][Sconce:7]] +# [[file:../moss-n-puddles.org::*Sconce][Sconce:7]] @set sconce/make_class = "typeclasses.lightables.Candle" # Sconce:7 ends here @@ -4540,7 +4596,7 @@ py here.search("cabinet").do_bake() # And the sconce needs to know the /description/ of the Consumable, so that it can attach that: -# [[file:../../../projects/mud.org::*Sconce][Sconce:8]] +# [[file:../moss-n-puddles.org::*Sconce][Sconce:8]] @set sconce/make_desc = "Curiously shaped taper with scales like a snake." # Sconce:8 ends here @@ -4548,7 +4604,7 @@ py here.search("cabinet").do_bake() # How much is there when you pick them? -# [[file:../../../projects/mud.org::*Sconce][Sconce:9]] +# [[file:../moss-n-puddles.org::*Sconce][Sconce:9]] @set sconce/make_amount = 1 # Sconce:9 ends here @@ -4556,7 +4612,7 @@ py here.search("cabinet").do_bake() # Temporarily move the exit into the room. -# [[file:../../../projects/mud.org::*Pulling Sconce][Pulling Sconce:1]] +# [[file:../moss-n-puddles.org::*Pulling Sconce][Pulling Sconce:1]] @set sconce/pull_msg = "You hear a click, and the bookcase next to the candle swings forward revealing a |Ysecret passage|n." # Pulling Sconce:1 ends here @@ -4565,7 +4621,7 @@ py here.search("cabinet").do_bake() # Let’s reset it to start: -# [[file:../../../projects/mud.org::*Pulling Sconce][Pulling Sconce:2]] +# [[file:../moss-n-puddles.org::*Pulling Sconce][Pulling Sconce:2]] @teleport/tonone stairs behind bookcase # Pulling Sconce:2 ends here @@ -4573,7 +4629,7 @@ py here.search("cabinet").do_bake() # Time to create the secret lab, the *Secret Room*. -# [[file:../../../projects/mud.org::*Inside the Secret Room][Inside the Secret Room:1]] +# [[file:../moss-n-puddles.org::*Inside the Secret Room][Inside the Secret Room:1]] @teleport mp12 # @desc here = A curious little room containing a |Ystool|n next to a |Ytable|n covered with alchemical |Yequipment|n--a testament to the arcane arts--cluttered yet meticulously organized. @@ -4584,7 +4640,7 @@ py here.search("cabinet").do_bake() # Add aliases that make sense: -# [[file:../../../projects/mud.org::*Inside the Secret Room][Inside the Secret Room:2]] +# [[file:../moss-n-puddles.org::*Inside the Secret Room][Inside the Secret Room:2]] @desc stairs = Stone steps leading back to the surface. You are sure you will be able to find the latch to let yourself out. # @set stairs/traverse_msg = "You climb the stone stairs. Feeling around, you find the latch and let yourself out." @@ -4595,7 +4651,7 @@ py here.search("cabinet").do_bake() # Until we decide if we want to do something with the table: -# [[file:../../../projects/mud.org::*Inside the Secret Room][Inside the Secret Room:3]] +# [[file:../moss-n-puddles.org::*Inside the Secret Room][Inside the Secret Room:3]] @detail table = Made from a polish black wood, etched with intricate runes that shimmer faintly in the candlelight. # Inside the Secret Room:3 ends here @@ -4604,19 +4660,19 @@ py here.search("cabinet").do_bake() # Are the equipment stuff we could =use=? -# [[file:../../../projects/mud.org::*Inside the Secret Room][Inside the Secret Room:4]] +# [[file:../moss-n-puddles.org::*Inside the Secret Room][Inside the Secret Room:4]] @detail equipment;alchemical;alchemical equipment = A |Ymortar|n and |Ypestle|n, |Yvials|n, crystal |Yphials|n, |Yjars|n, and |Ytools|n all surround a black |Ycauldron|n. # Inside the Secret Room:4 ends here -# [[file:../../../projects/mud.org::*Inside the Secret Room][Inside the Secret Room:5]] +# [[file:../moss-n-puddles.org::*Inside the Secret Room][Inside the Secret Room:5]] @detail mortar;pestle;mortar and pestle = An obsidian mortar, its surface smooth and cool to the touch. Beside it, a pestle carved from a single piece of ancient bone, adorned with carvings of arcane symbols. # Inside the Secret Room:5 ends here -# [[file:../../../projects/mud.org::*Inside the Secret Room][Inside the Secret Room:6]] +# [[file:../moss-n-puddles.org::*Inside the Secret Room][Inside the Secret Room:6]] @detail vials = Scattered across a small shelf, an array of empty glass vials. Perhaps you could fill these with potions yet to be created? # Inside the Secret Room:6 ends here -# [[file:../../../projects/mud.org::*Inside the Secret Room][Inside the Secret Room:7]] +# [[file:../moss-n-puddles.org::*Inside the Secret Room][Inside the Secret Room:7]] @detail phials = Delicate crystal phials, each shaped like a teardrop, attach to a wrought iron rack. Each contain vibrant liquids that swirl with colors not found in nature. Magically sealed, these phials may store volatile substances, which require special containment to prevent their magical properties from dissipating. # Inside the Secret Room:7 ends here @@ -4625,7 +4681,7 @@ py here.search("cabinet").do_bake() # And tools that definitely need to /stay here/: -# [[file:../../../projects/mud.org::*Inside the Secret Room][Inside the Secret Room:8]] +# [[file:../moss-n-puddles.org::*Inside the Secret Room][Inside the Secret Room:8]] @detail tools = A set of finely crafted tools lies neatly arranged on a velvet cloth: a pair of tweezers for handling delicate ingredients, a small scalpel for precise cutting, and a set of measuring spoons made from silver, each engraved with different symbols representing the elements. # Inside the Secret Room:8 ends here @@ -4635,7 +4691,7 @@ py here.search("cabinet").do_bake() # Every time we look at a jar, we see something else … that we can’t take. This creates ambiance without adding too much complexity? -# [[file:../../../projects/mud.org::*Jars][Jars:1]] +# [[file:../moss-n-puddles.org::*Jars][Jars:1]] @tel/quiet Secret Room # @create/drop collection of jars;jars;jar: typeclasses.puzzles.Changling @@ -4646,7 +4702,7 @@ py here.search("cabinet").do_bake() # Can’t get them: -# [[file:../../../projects/mud.org::*Jars][Jars:2]] +# [[file:../moss-n-puddles.org::*Jars][Jars:2]] @lock jars = get:false() # @set jars/get_err_msg = "The imp slaps your hand away and shakes his head. While you can take an empty |Ybottle|n, you can't take the currated ingredients. Guess you can always find your own ingredients, eh?" @@ -4657,7 +4713,7 @@ py here.search("cabinet").do_bake() # And the generate description: -# [[file:../../../projects/mud.org::*Jars][Jars:3]] +# [[file:../moss-n-puddles.org::*Jars][Jars:3]] @set jars/desc_first_prefix = "<< Fascinating ^ Interesting ^ Curious >> << collection of ^ assortment of ^ >> << jars ^ contents ^ ingredients >>. You look at one << jar ^ >>, << elegantly ^ hastily ^ legibly ^ >> labeled,|w" # @set jars/desc_prefix = "You look at another << jar ^ >>, << elegantly ^ hastily ^ legibly ^ >> labeled,|w" @@ -4670,7 +4726,7 @@ py here.search("cabinet").do_bake() # And now for a list of the contents: -# [[file:../../../projects/mud.org::*Jars][Jars:4]] +# [[file:../moss-n-puddles.org::*Jars][Jars:4]] @set jars/descs = ( "Glimmering Dust|n. A jar filled with fine, shimmering powder that sparkles like a thousand stars.", "Dragon Blood|n. A deep red liquid that swirls with hints of gold, resembling liquid rubies.", @@ -4698,7 +4754,7 @@ py here.search("cabinet").do_bake() # A stool to sit while working -# [[file:../../../projects/mud.org::*Stool][Stool:1]] +# [[file:../moss-n-puddles.org::*Stool][Stool:1]] @create/drop stool:typeclasses.sittables.Sittable # Stool:1 ends here @@ -4706,7 +4762,7 @@ py here.search("cabinet").do_bake() # How descriptive: -# [[file:../../../projects/mud.org::*Stool][Stool:2]] +# [[file:../moss-n-puddles.org::*Stool][Stool:2]] @desc stool = A place to sit while synthesizing experiments. # Stool:2 ends here @@ -4714,7 +4770,7 @@ py here.search("cabinet").do_bake() # Can’t steal this stool either: -# [[file:../../../projects/mud.org::*Stool][Stool:3]] +# [[file:../moss-n-puddles.org::*Stool][Stool:3]] @lock stool = get:false() # Stool:3 ends here @@ -4722,7 +4778,7 @@ py here.search("cabinet").do_bake() # Let’s do a funnier message: -# [[file:../../../projects/mud.org::*Stool][Stool:4]] +# [[file:../moss-n-puddles.org::*Stool][Stool:4]] @set stool/get_err_msg = "Stop trying to steal everything not nailed down." # Stool:4 ends here @@ -4731,7 +4787,7 @@ py here.search("cabinet").do_bake() # A mystic book of potions can add a new dimension to the game. -# [[file:../../../projects/mud.org::*Grimoire][Grimoire:1]] +# [[file:../moss-n-puddles.org::*Grimoire][Grimoire:1]] @create/drop leather-bound book;book;grimoire:typeclasses.readables.Book # Grimoire:1 ends here @@ -4740,7 +4796,7 @@ py here.search("cabinet").do_bake() # The book’s title and description: -# [[file:../../../projects/mud.org::*Grimoire][Grimoire:2]] +# [[file:../moss-n-puddles.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 @@ -4749,7 +4805,7 @@ py here.search("cabinet").do_bake() # Lock it down. -# [[file:../../../projects/mud.org::*Grimoire][Grimoire:3]] +# [[file:../moss-n-puddles.org::*Grimoire][Grimoire:3]] @lock grimoire = get:false() # @set grimoire/get_err_msg = "The book is chained to the table." @@ -4760,7 +4816,7 @@ py here.search("cabinet").do_bake() # And of course, the inside. -# [[file:../../../projects/mud.org::*Grimoire][Grimoire:4]] +# [[file:../moss-n-puddles.org::*Grimoire][Grimoire:4]] @set grimoire/inside = "file:world/alchemy-book.md" # Grimoire:4 ends here @@ -4771,7 +4827,7 @@ py here.search("cabinet").do_bake() # The prefix can be: -# [[file:../../../projects/mud.org::*Grimoire][Grimoire:5]] +# [[file:../moss-n-puddles.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 @@ -4788,7 +4844,7 @@ py here.search("cabinet").do_bake() # - =crush= for use in mortal and pestle -# [[file:../../../projects/mud.org::*Cauldron][Cauldron:1]] +# [[file:../moss-n-puddles.org::*Cauldron][Cauldron:1]] @create/drop black cauldron: typeclasses.alchemy.Cauldron # Cauldron:1 ends here @@ -4797,7 +4853,7 @@ py here.search("cabinet").do_bake() # And the details: -# [[file:../../../projects/mud.org::*Cauldron][Cauldron:2]] +# [[file:../moss-n-puddles.org::*Cauldron][Cauldron:2]] @desc cauldron = A small, cast-iron cauldron sits on an iron stand, its interior stained from countless brews. Someone surrounded the cauldron with a ring of salt, a protective barrier against unwanted energies. A small fire burns beneath it, ready to heat concoctions. # Cauldron:2 ends here @@ -4805,7 +4861,7 @@ py here.search("cabinet").do_bake() # Lock it down: -# [[file:../../../projects/mud.org::*Cauldron][Cauldron:3]] +# [[file:../moss-n-puddles.org::*Cauldron][Cauldron:3]] @lock cauldron = get:false() # Cauldron:3 ends here @@ -4814,7 +4870,7 @@ py here.search("cabinet").do_bake() # The table is a producer of /bottles/. -# [[file:../../../projects/mud.org::*Shelf of Bottles][Shelf of Bottles:1]] +# [[file:../moss-n-puddles.org::*Shelf of Bottles][Shelf of Bottles:1]] @create/drop shelf of empty bottles;shelf;bottles;bottle: typeclasses.consumables.Producer # Shelf of Bottles:1 ends here @@ -4822,7 +4878,7 @@ py here.search("cabinet").do_bake() # With a description: -# [[file:../../../projects/mud.org::*Shelf of Bottles][Shelf of Bottles:2]] +# [[file:../moss-n-puddles.org::*Shelf of Bottles][Shelf of Bottles:2]] @desc shelf = Cluttered with some empty brown |Ybottles|n. Perhaps you can fill these with liquid ingredients and bring them back here. # Shelf of Bottles:2 ends here @@ -4830,7 +4886,7 @@ py here.search("cabinet").do_bake() # We have to have the bush describe what it /makes/: -# [[file:../../../projects/mud.org::*Shelf of Bottles][Shelf of Bottles:3]] +# [[file:../moss-n-puddles.org::*Shelf of Bottles][Shelf of Bottles:3]] @set shelf/make_name = "bottle" # @set shelf/make_verb = "$conj(pick up) a" @@ -4840,7 +4896,7 @@ py here.search("cabinet").do_bake() # This one is optional as it defaults to Consumable: -# [[file:../../../projects/mud.org::*Shelf of Bottles][Shelf of Bottles:4]] +# [[file:../moss-n-puddles.org::*Shelf of Bottles][Shelf of Bottles:4]] @set shelf/make_class = "typeclasses.drinkables.Bottle" # @set shelf/make_desc = "A brown glass bottle. Currently empty." @@ -4852,7 +4908,7 @@ py here.search("cabinet").do_bake() # Every secret alchemical lab should have an Imp familiar. -# [[file:../../../projects/mud.org::*Imp][Imp:1]] +# [[file:../moss-n-puddles.org::*Imp][Imp:1]] @create/drop Impetus;imp: typeclasses.puppets.Puppet # Imp:1 ends here @@ -4861,7 +4917,7 @@ py here.search("cabinet").do_bake() # Note that we give him a male gender: -# [[file:../../../projects/mud.org::*Imp][Imp:2]] +# [[file:../moss-n-puddles.org::*Imp][Imp:2]] @set imp/gender = "neutral" # Imp:2 ends here @@ -4870,11 +4926,11 @@ py here.search("cabinet").do_bake() # Work around the =pose= bug: -# [[file:../../../projects/mud.org::*Imp][Imp:3]] +# [[file:../moss-n-puddles.org::*Imp][Imp:3]] py bt = self.search('imp'); bt.sdesc.add('imp'); bt.db.pose = 'sitting on an ornate perch' # Imp:3 ends here -# [[file:../../../projects/mud.org::*Imp][Imp:4]] +# [[file:../moss-n-puddles.org::*Imp][Imp:4]] @set imp/pose_sleep = "sitting on an ornate perch" # @pose default imp = sitting on an ornate perch @@ -4885,7 +4941,7 @@ py bt = self.search('imp'); bt.sdesc.add('imp'); bt.db.pose = 'sitting on an orn # And a good description that I can rework: -# [[file:../../../projects/mud.org::*Imp][Imp:5]] +# [[file:../moss-n-puddles.org::*Imp][Imp:5]] @desc imp = Peculiar little fellow gives you a quizical look from its roost on a wrought iron perch that it clutches with its clawed feet and barbed, prehensile tail. # Imp:5 ends here @@ -4894,7 +4950,7 @@ py bt = self.search('imp'); bt.sdesc.add('imp'); bt.db.pose = 'sitting on an orn # When any one arrives, we assume that they are no longer a beginner, and have /graduated/ to see the world in a different way, and we use the tag, =alchemist= as a view lock on all the ingredients. -# [[file:../../../projects/mud.org::*Imp][Imp:7]] +# [[file:../moss-n-puddles.org::*Imp][Imp:7]] @set imp/arrive = "tag_all alchemist ;; untag_all beginner ;; 240 ;; emote yawns." # Imp:7 ends here @@ -4903,7 +4959,7 @@ py bt = self.search('imp'); bt.sdesc.add('imp'); bt.db.pose = 'sitting on an orn # Would be nice if it has a variety of responses to speech. -# [[file:../../../projects/mud.org::*Imp][Imp:8]] +# [[file:../moss-n-puddles.org::*Imp][Imp:8]] @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 @@ -4911,7 +4967,7 @@ py bt = self.search('imp'); bt.sdesc.add('imp'); bt.db.pose = 'sitting on an orn # A bedroom with a wardrobe that goes to another land sounds great. -# [[file:../../../projects/mud.org::*Bedroom][Bedroom:1]] +# [[file:../moss-n-puddles.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;stairs;leave @@ -4922,7 +4978,7 @@ py bt = self.search('imp'); bt.sdesc.add('imp'); bt.db.pose = 'sitting on an orn # Look see: -# [[file:../../../projects/mud.org::*Bedroom][Bedroom:2]] +# [[file:../moss-n-puddles.org::*Bedroom][Bedroom:2]] @desc loft = Ornate black irons banister outline the thick wood planks that form steps leading to some lofty alcove. # @set loft/traverse_msg = "You walk up the shadowy stairs..." @@ -4932,7 +4988,7 @@ py bt = self.search('imp'); bt.sdesc.add('imp'); bt.db.pose = 'sitting on an orn # And a description: -# [[file:../../../projects/mud.org::*Bedroom][Bedroom:3]] +# [[file:../moss-n-puddles.org::*Bedroom][Bedroom:3]] @teleport/quiet mp13 # @desc here = Like the shadows that dance here, this oddly shaped room hugs its contents: a thick wooden framed |Ybed|n piled high with warm |Yblankets|n and fluffy |Ypillows|n, keep out the chill; a thick burgundy |Ycarpet|n sporting a pair of |Yslippers|n; and a |Ywardrobe|n decorated with ornate leaves and berries. @@ -4943,7 +4999,7 @@ py bt = self.search('imp'); bt.sdesc.add('imp'); bt.db.pose = 'sitting on an orn # And describe the exit: -# [[file:../../../projects/mud.org::*Bedroom][Bedroom:4]] +# [[file:../moss-n-puddles.org::*Bedroom][Bedroom:4]] @desc down the stairs = Ornate black irons banister outline the thick wood planks that form steps leading down to living space below. # @set down the stairs/traverse_msg = "You walk down the stairs to the living space below." @@ -4954,7 +5010,7 @@ py bt = self.search('imp'); bt.sdesc.add('imp'); bt.db.pose = 'sitting on an orn # And of course, you can see more details: -# [[file:../../../projects/mud.org::*Bedroom][Bedroom:5]] +# [[file:../moss-n-puddles.org::*Bedroom][Bedroom:5]] @detail bed = Cozy and inviting, like most things in this house, someone covered this bed in warm blankets and fluffy pillows in rich, warm colors. The frame, formed from a single tree that grew to hold this bed. # @detail blankets = Thick and warm to ward off the outside rain and chill. @@ -4969,7 +5025,7 @@ py bt = self.search('imp'); bt.sdesc.add('imp'); bt.db.pose = 'sitting on an orn # Are the slippers just a red herring? -# [[file:../../../projects/mud.org::*Bedroom][Bedroom:6]] +# [[file:../moss-n-puddles.org::*Bedroom][Bedroom:6]] @create/drop pair slippers # @desc slippers = Red-leather and worn with an ornate tassel on top. @@ -4983,7 +5039,7 @@ py bt = self.search('imp'); bt.sdesc.add('imp'); bt.db.pose = 'sitting on an orn # One needs to open it to go to another world. -# [[file:../../../projects/mud.org::*Wardrobe][Wardrobe:1]] +# [[file:../moss-n-puddles.org::*Wardrobe][Wardrobe:1]] @dig Prairie;mp14 = through the wardrobe;wardrobe,copse of pinion pines;pines;copse;trees;leave # Wardrobe:1 ends here @@ -4992,7 +5048,7 @@ py bt = self.search('imp'); bt.sdesc.add('imp'); bt.db.pose = 'sitting on an orn # And describe the exit: -# [[file:../../../projects/mud.org::*Wardrobe][Wardrobe:2]] +# [[file:../moss-n-puddles.org::*Wardrobe][Wardrobe:2]] @desc wardrobe = Behind the cloaks and jackets, you see long, green needles from pine trees, and beyond that, a clearing! # @set wardrobe/traverse_msg = "You part and push through the cloaks, jackets and waistcoats, and into a copse of pinion trees, to reach a wide open space of grass." @@ -5011,7 +5067,7 @@ py bt = self.search('imp'); bt.sdesc.add('imp'); bt.db.pose = 'sitting on an orn # And messages for opening and closing the wardrobe: -# [[file:../../../projects/mud.org::*Wardrobe][Wardrobe:3]] +# [[file:../moss-n-puddles.org::*Wardrobe][Wardrobe:3]] @set here/open_exit_msg = "$You() $conj(open) the wardrobe, revealing the cloaks, jackets, and ... green needles from pine trees? What is going on here? Between the trees, you see a clearing!" # # Not sure if the door closed automatically, or if someone closed it, so we use a passive sentence: @@ -5023,7 +5079,7 @@ py bt = self.search('imp'); bt.sdesc.add('imp'); bt.db.pose = 'sitting on an orn # How will we distinguish between the wardrobe, the exit and the object that controls the exit? The room could have an “open” and “close” that could teleport and remove the exit. -# [[file:../../../projects/mud.org::*Wardrobe][Wardrobe:4]] +# [[file:../moss-n-puddles.org::*Wardrobe][Wardrobe:4]] @create/drop wardrobe # @desc wardrobe = While resting on the floor, this wardrobe scratches the ceiling. Large furniture, or perhaps a small room? Gorgeously ornate with carvings of leaves and berries. Carved above the doors, are the words, |wUKRAH|n. The latch is undone, and can be |gopen|ned. @@ -5034,7 +5090,7 @@ py bt = self.search('imp'); bt.sdesc.add('imp'); bt.db.pose = 'sitting on an orn # The =look= command could be distinguishing using aliases of “the exit” and “the furniture”? -# [[file:../../../projects/mud.org::*Wardrobe][Wardrobe:5]] +# [[file:../moss-n-puddles.org::*Wardrobe][Wardrobe:5]] @alias wardrobe = the object # Wardrobe:5 ends here @@ -5043,7 +5099,7 @@ py bt = self.search('imp'); bt.sdesc.add('imp'); bt.db.pose = 'sitting on an orn # Don’t allow it to get taken: -# [[file:../../../projects/mud.org::*Wardrobe][Wardrobe:6]] +# [[file:../moss-n-puddles.org::*Wardrobe][Wardrobe:6]] @lock wardrobe = get:false() # @set wardrobe/get_err_msg = "The wardrobe is way too big to lift." @@ -5053,7 +5109,7 @@ py bt = self.search('imp'); bt.sdesc.add('imp'); bt.db.pose = 'sitting on an orn # What am I doing here? -# [[file:../../../projects/mud.org::*Southwest Prairie][Southwest Prairie:1]] +# [[file:../moss-n-puddles.org::*Southwest Prairie][Southwest Prairie:1]] @teleport/quiet mp14 # @desc here = On the edge of a small |Yknoll|n with a |Ycopse|n of trees, the space stretches to a rolling dawnclear, blue skies pushing down the horizona distant sunset attempting to pull the sky down with it bright, star painted skies. @@ -5064,7 +5120,7 @@ py bt = self.search('imp'); bt.sdesc.add('imp'); bt.db.pose = 'sitting on an orn # Describe the exit: -# [[file:../../../projects/mud.org::*Southwest Prairie][Southwest Prairie:2]] +# [[file:../moss-n-puddles.org::*Southwest Prairie][Southwest Prairie:2]] @desc copse = A copse of trees covers the top of the knoll. Hanging from a tree, a lit |Ylantern|n, as if showing the way to another world. # @set copse/traverse_msg = "You push through the tree's long pine needles to then push through the cloaks and jackets to exit the wardrobe." @@ -5075,7 +5131,7 @@ py bt = self.search('imp'); bt.sdesc.add('imp'); bt.db.pose = 'sitting on an orn # Details? -# [[file:../../../projects/mud.org::*Southwest Prairie][Southwest Prairie:3]] +# [[file:../moss-n-puddles.org::*Southwest Prairie][Southwest Prairie:3]] @detail knoll;hillock;knell = The land stretches and buckles in small rolls. You find yourself and one of the high points, allowing you to absorb the immense view. # @detail lantern = Curious iron worked lantern sways in the subtle breeze. @@ -5087,7 +5143,7 @@ py bt = self.search('imp'); bt.sdesc.add('imp'); bt.db.pose = 'sitting on an orn # Taken from [[https://en.wikipedia.org/wiki/Mare%27s_Head][Wikipedia]]. -# [[file:../../../projects/mud.org::*Mare’s Head][Mare’s Head:1]] +# [[file:../moss-n-puddles.org::*Mare’s Head][Mare’s Head:1]] @create/drop Mares Head;head: typeclasses.puppets.Puppet # Mare’s Head:1 ends here @@ -5096,7 +5152,7 @@ py bt = self.search('imp'); bt.sdesc.add('imp'); bt.db.pose = 'sitting on an orn # Note that we give him a male gender: -# [[file:../../../projects/mud.org::*Mare’s Head][Mare’s Head:2]] +# [[file:../moss-n-puddles.org::*Mare’s Head][Mare’s Head:2]] @set mares head/gender = "neutral" # Mare’s Head:2 ends here @@ -5105,11 +5161,11 @@ py bt = self.search('imp'); bt.sdesc.add('imp'); bt.db.pose = 'sitting on an orn # Work around the =pose= bug: -# [[file:../../../projects/mud.org::*Mare’s Head][Mare’s Head:3]] +# [[file:../moss-n-puddles.org::*Mare’s Head][Mare’s Head:3]] py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitting next to a small |Ycampfire|n' # Mare’s Head:3 ends here -# [[file:../../../projects/mud.org::*Mare’s Head][Mare’s Head:4]] +# [[file:../moss-n-puddles.org::*Mare’s Head][Mare’s Head:4]] @set mares head/pose_sleep = "sitting next to a small |Ycampfire|n" # @set mares head/pose_default = "sitting next to a small |Ycampfire|n" @@ -5122,11 +5178,11 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti # And a good description that I can rework: -# [[file:../../../projects/mud.org::*Mare’s Head][Mare’s Head:5]] +# [[file:../moss-n-puddles.org::*Mare’s Head][Mare’s Head:5]] @desc mares head = A curious figure wearing dark robes and a gleaming white skull of a mare. Interestingly, the skull has velvety horse |Years|n. # Mare’s Head:5 ends here -# [[file:../../../projects/mud.org::*Mare’s Head][Mare’s Head:6]] +# [[file:../moss-n-puddles.org::*Mare’s Head][Mare’s Head:6]] @detail ears;ear = They look real, and twitch as if alive. # Mare’s Head:6 ends here @@ -5135,7 +5191,7 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti # And when someone arrives: -# [[file:../../../projects/mud.org::*Mare’s Head][Mare’s Head:7]] +# [[file:../moss-n-puddles.org::*Mare’s Head][Mare’s Head:7]] @set mares head/arrive = "4 ;; emote nods its skull in greeting. ;; 30 ;; emote stares at you with its empty sockets. ;; emote reaches into the fire, pulls out a branch, and brushes off the soot. ;; scoring get_pipe to {0} ;; gift pipe to {0}" # Mare’s Head:7 ends here @@ -5144,7 +5200,7 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti # And what if they attempt to interact? -# [[file:../../../projects/mud.org::*Mare’s Head][Mare’s Head:8]] +# [[file:../moss-n-puddles.org::*Mare’s Head][Mare’s Head:8]] @set mares head/say = "3 ;; emote << nods ^ shakes it head...er, skull ^ looks at you with its empty eye sockets ^ shrugs ^ pokes the fire with a stick ^ raises an eyebrow ... well, if it had one, it would ^ shifts from his log seat. As it does, its black cloak billows ^ squints its eyes...er, eye sockets? Best not think about it ^ A fuzzy ear on the skull of the /me twitches >>." # Mare’s Head:8 ends here @@ -5153,7 +5209,7 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti # Let’s allow anyone here to sit on a log next to the campfire .. -# [[file:../../../projects/mud.org::*Pull up a Log][Pull up a Log:1]] +# [[file:../moss-n-puddles.org::*Pull up a Log][Pull up a Log:1]] @create/drop couple long log;log:typeclasses.sittables.Sittables # Pull up a Log:1 ends here @@ -5161,7 +5217,7 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti # And the description: -# [[file:../../../projects/mud.org::*Pull up a Log][Pull up a Log:2]] +# [[file:../moss-n-puddles.org::*Pull up a Log][Pull up a Log:2]] @desc log = A long, smooth log rests next to the inviting campfire. # Pull up a Log:2 ends here @@ -5169,7 +5225,7 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti # Can’t steal ‘em: -# [[file:../../../projects/mud.org::*Pull up a Log][Pull up a Log:3]] +# [[file:../moss-n-puddles.org::*Pull up a Log][Pull up a Log:3]] @lock log = get:false() # @set chairs/get_err_msg = "It's way too heavy for you to lift. Besides, were you planning on burning it or something?" @@ -5179,7 +5235,7 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti # And textual descriptions the object can use: -# [[file:../../../projects/mud.org::*Pull up a Log][Pull up a Log:4]] +# [[file:../moss-n-puddles.org::*Pull up a Log][Pull up a Log:4]] @set log/article = "the" # @set log/singular = "the log next to the campfire" @@ -5190,7 +5246,7 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti # The entrance to the dungeon experience will be under the mattress in [[Lair][the Lair]]. -# [[file:../../../projects/mud.org::*Dark Tunnel][Dark Tunnel:1]] +# [[file:../moss-n-puddles.org::*Dark Tunnel][Dark Tunnel:1]] @tel/quiet mp07 # @dig Dark Tunnel;mp20:typeclasses.rooms_dark.DarkRoom = ladder down into the dark;down;ladder;tunnel,ladder to trapdoor;trapdoor;up;ladder @@ -5213,7 +5269,7 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti # And we create a trapdoor in the Lair: -# [[file:../../../projects/mud.org::*Dark Tunnel][Dark Tunnel:2]] +# [[file:../moss-n-puddles.org::*Dark Tunnel][Dark Tunnel:2]] @create/drop trapdoor: typeclasses.things.ClosingDoor # @desc trapdoor = A wood door with reinforced iron bands on the floor, under the heavy mattress. @@ -5234,7 +5290,7 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti # What does it take to open it? -# [[file:../../../projects/mud.org::*Dark Tunnel][Dark Tunnel:3]] +# [[file:../moss-n-puddles.org::*Dark Tunnel][Dark Tunnel:3]] @lock trapdoor = traverse:tag(enter_dungeon, mp) # # Trapdoor should stay open for 5 minutes: @@ -5255,7 +5311,7 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti # Let’s get into the Dungeon and work from it there. -# [[file:../../../projects/mud.org::*Dark Tunnel][Dark Tunnel:5]] +# [[file:../moss-n-puddles.org::*Dark Tunnel][Dark Tunnel:5]] @teleport/quiet mp20 # @desc here = A cold, musty tunnel made of |Ystone blocks|n, tapered to form an large dome overhead. You hear a slight whistling sound, which may explain why this unground place is neither dusty or musty. @@ -5264,13 +5320,45 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti # @set ladder/traverse_msg = "You carefully ascend up the ladder, but you find the trapdoor hard to open, as if something heavy is on top of it. With all your might, you manage to push and squeeze through it." # +@detail trapdoor = A wood door with reinforced iron bands on the floor. +# @detail stone blocks;stone;blocks = The stone blocks that support the tunnel are well made, and for the most part, keep out water. But the crevises seem mortared with a green mildew. # Dark Tunnel:5 ends here +# This murky stream that comes from the crack in the wall, could be turned into scotch with the right about of puzzle solving. + + +# [[file:../moss-n-puddles.org::*Murky Stream, Lower][Murky Stream, Lower:1]] +# @teleport/quiet mp20 +# +@create/drop stream of murky water: typeclasses.drinkables.Water +# +@desc stream = A foul smelling stream of dark liquid meanders across the floor from the |Ycrack in the wall|n and through a |Ygrate|n at its lowest point. +# +@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 water." +# +@set stream/fill_name = "murky water" +# +@set stream/fill_desc = "mucky water from underground tunnels." +# +@set stream/fill_msgs = ["$You() << $conj(get) ^ $conj(kneel) >> down, and $conj(fill) $pron(your) {2} with murky...er, water.", "$You() << $conj(get) ^ $conj(kneel) >> down, and $conj(put) $pron(your) {2} in the 'water', filling it."] +# Murky Stream, Lower:1 ends here + + + +# And the grate and other related objects. + +# [[file:../moss-n-puddles.org::*Murky Stream, Lower][Murky Stream, Lower:3]] +@detail grate;drain = An overly decorated and ornate grate to drain such putrid sludge. +# Murky Stream, Lower:3 ends here + + # Let’s make a place for new toys and gadgets. -# [[file:../../../projects/mud.org::*George’s Workshop][George’s Workshop:1]] +# [[file:../moss-n-puddles.org::*George’s Workshop][George’s Workshop:1]] @teleport/quiet mp20 # @dig Workshop;mp21 = wood door;door,wood door;door;leave @@ -5281,10 +5369,10 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti # And describe the door: -# [[file:../../../projects/mud.org::*George’s Workshop][George’s Workshop:2]] +# [[file:../moss-n-puddles.org::*George’s Workshop][George’s Workshop:2]] @desc door = A strong wooden door with iron bands. Over the door is a sign that reads, |wGeorge's Workshop|n. # -@set door/traverse_msg = "You open the door, immediately accosted by the noise of hundreds of clockwork gadgets, and step into cacophony." +@set door/traverse_msg = "Opening the door, you're immediately accosted by the noise of hundreds of clockwork gadgets.|/|/You step into cacophony." # George’s Workshop:2 ends here @@ -5292,7 +5380,7 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti # And describe the new room: -# [[file:../../../projects/mud.org::*George’s Workshop][George’s Workshop:3]] +# [[file:../moss-n-puddles.org::*George’s Workshop][George’s Workshop:3]] @teleport/quiet mp21 # @desc here = Garish |Ygadgets|n and beguiling |Ygizmos|n girdle this room. The worktable contains a half-completed |Yproject|n while shelves showcase completed ones. The noise of machines overwhelms the smell of chemicals. @@ -5303,17 +5391,17 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti # And cover the exit: -# [[file:../../../projects/mud.org::*George’s Workshop][George’s Workshop:4]] +# [[file:../moss-n-puddles.org::*George’s Workshop][George’s Workshop:4]] @desc door = A strong wooden door with iron bands. # -@set door/traverse_msg = "You step the door, leaving the clamor behind." +@set door/traverse_msg = "You step through the door, leaving the clamor behind." # George’s Workshop:4 ends here # Like other things through this world, looking at this should give us something new: -# [[file:../../../projects/mud.org::*Gadgets][Gadgets:1]] +# [[file:../moss-n-puddles.org::*Gadgets][Gadgets:1]] @create/drop many gadgets;gadgets;gizmos;gadget;gizmo;contraptions: typeclasses.puzzles.Changling # @set gadgets/plural = True @@ -5324,7 +5412,7 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti # That we can’t take: -# [[file:../../../projects/mud.org::*Gadgets][Gadgets:2]] +# [[file:../moss-n-puddles.org::*Gadgets][Gadgets:2]] @lock gadgets = get:false() # @set gadgets/get_err_msg = "You can look, but you can't take that." @@ -5335,7 +5423,7 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti # And we shouldn’t see it at first, as it is in the description: -# [[file:../../../projects/mud.org::*Gadgets][Gadgets:3]] +# [[file:../moss-n-puddles.org::*Gadgets][Gadgets:3]] @lock gadgets = view:tag(hidden_gadgets) # @set gadgets/hidden_tag = "hidden_gadgets" @@ -5346,7 +5434,7 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti # The pre– and postfix descriptions: -# [[file:../../../projects/mud.org::*Gadgets][Gadgets:4]] +# [[file:../moss-n-puddles.org::*Gadgets][Gadgets:4]] @set gadgets/desc_first_prefix = "<< Fascinating ^ Interesting ^ Curious >> << collection of ^ assortment of ^ >> << gadgets ^ gizmos ^ contraptions >>. You << look at ^ notice >> " # @set gadgets/desc_prefix = "You << spot ^ notice ^ look at >> another << gadget ^ gizmo ^ contraption ^ >>, " @@ -5359,7 +5447,7 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti # And the gadgets themselves: -# [[file:../../../projects/mud.org::*Gadgets][Gadgets:5]] +# [[file:../moss-n-puddles.org::*Gadgets][Gadgets:5]] @set gadgets/descs = ( "a massive grandfather clock whose face is a stained-glass window; instead of hands, a tiny mechanical owl flies in circles, chasing a glowing brass mouse that moves erratically.", "a delicate glass terrarium containing a dancing brass elephant. A perfectly detailed raincloud crackles with silent violet lightning and drops rain on the moss below.", @@ -5379,7 +5467,7 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti # This should contain a “state” that looks differently for each player based on an attribute on the player. -# [[file:../../../projects/mud.org::*The Project][The Project:1]] +# [[file:../moss-n-puddles.org::*The Project][The Project:1]] @create/drop project: typeclasses.puzzles.Stateful # @desc project = On the workbench lies a tangle of brass plates, tubes and mechanical gears, shaped like a bird. Unassembled, it appears to be missing parts that might help it fly. @@ -5390,7 +5478,7 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti # Initial default state is unfinished: -# [[file:../../../projects/mud.org::*The Project][The Project:2]] +# [[file:../moss-n-puddles.org::*The Project][The Project:2]] @set project/name_default = "unfinished project" # @set project/desc_default = "On the workbench lies a tangle of brass plates, tubes and mechanical gears, shaped like a bird. Unassembled, it appears to be missing parts that might help it fly." @@ -5401,16 +5489,19 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti # And this is the name and description when the project is finished: -# [[file:../../../projects/mud.org::*The Project][The Project:4]] +# [[file:../moss-n-puddles.org::*The Project][The Project:4]] @set project/name_finished = "mechanical bird" # @set project/desc_finished = "This contraption made of brass plates and tubing sports an array of beautiful feathers, as it flies about." # The Project:4 ends here +# :PROPERTIES: +# :header-args:markdown: :tangle personalities/dwarf.md +# :END: # This Dwarf will be in the dungeons, but I would like them to come out at times. -# [[file:../../../projects/mud.org::*George the Dwarf Tinkerer][George the Dwarf Tinkerer:1]] +# [[file:../moss-n-puddles.org::*George the Dwarf Tinkerer][George the Dwarf Tinkerer:1]] @create/drop George;dwarf: typeclasses.chatbots.Dwarf # @set dwarf/gender = "male" @@ -5427,7 +5518,7 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti # And his description: -# [[file:../../../projects/mud.org::*George the Dwarf Tinkerer][George the Dwarf Tinkerer:2]] +# [[file:../moss-n-puddles.org::*George the Dwarf Tinkerer][George the Dwarf Tinkerer:2]] @desc dwarf = Spectacles and wild unkempt hair gives this dwarf a professor-y look. He braids his long beard into two strands, and tucks each of them into pockets in his brown apron, along with various tools that chime as he moves. # George the Dwarf Tinkerer:2 ends here @@ -5436,8 +5527,8 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti # Then give him the =sdesc= (not sure why I have to do both), and wake him. -# [[file:../../../projects/mud.org::*George the Dwarf Tinkerer][George the Dwarf Tinkerer:3]] -py dwarf = me.search("dwarf") ; dwarf.db._sdesc="white-haired dwarf" ; dwarf.sdesc.add("white-haired dwarf") ; dwarf.home = here; dwarf.backstory("dwarf") +# [[file:../moss-n-puddles.org::*George the Dwarf Tinkerer][George the Dwarf Tinkerer:3]] +py dwarf = me.search("dwarf") ; dwarf.db._sdesc="white-haired dwarf" ; dwarf.sdesc.add("white-haired dwarf") ; dwarf.home = here # George the Dwarf Tinkerer:3 ends here @@ -5445,7 +5536,7 @@ py dwarf = me.search("dwarf") ; dwarf.db._sdesc="white-haired dwarf" ; dwarf.sde # And get him moving: -# [[file:../../../projects/mud.org::*George the Dwarf Tinkerer][George the Dwarf Tinkerer:4]] +# [[file:../moss-n-puddles.org::*George the Dwarf Tinkerer][George the Dwarf Tinkerer:4]] @script dwarf = typeclasses.chatbots.TravelingNPC # George the Dwarf Tinkerer:4 ends here @@ -5454,7 +5545,7 @@ py dwarf = me.search("dwarf") ; dwarf.db._sdesc="white-haired dwarf" ; dwarf.sde # But not so much: -# [[file:../../../projects/mud.org::*George the Dwarf Tinkerer][George the Dwarf Tinkerer:5]] +# [[file:../moss-n-puddles.org::*George the Dwarf Tinkerer][George the Dwarf Tinkerer:5]] @set dwarf/travel_time = 60 # @set dwarf/stay_time = 900 @@ -5463,9 +5554,360 @@ py dwarf = me.search("dwarf") ; dwarf.db._sdesc="white-haired dwarf" ; dwarf.sde # George the Dwarf Tinkerer:5 ends here + +# And let’s awaken him: + + +# [[file:../moss-n-puddles.org::*George the Dwarf Tinkerer][George the Dwarf Tinkerer:8]] +py dwarf = me.search("dwarf") ; dwarf.backstory("dwarf") +# George the Dwarf Tinkerer:8 ends here + + +# :PROPERTIES: +# :header-args:markdown: :tangle personalities/tea-party.md +# :END: +# Let’s make a place for a Goblin to have a Tea Party: + +# [[file:../moss-n-puddles.org::*Damp Cave][Damp Cave:1]] +@teleport/quiet mp20 +# +@dig Damp Cave;mp22 = crack in the wall;crack,crack in the wall;leave +# Damp Cave:1 ends here + + + +# And describe the opening: + + +# [[file:../moss-n-puddles.org::*Damp Cave][Damp Cave:2]] +@desc crack = A putrid |Ystream|n of water issues from a seam between the stone block that form a crack wide enough for someone to fit through. +# +@set crack/traverse_msg = "Tight, but you squeeze through the crack." +# Damp Cave:2 ends here + + + +# And describe the new room: + + +# [[file:../moss-n-puddles.org::*Damp Cave][Damp Cave:3]] +@teleport/quiet mp22 +# +@desc here = A dank |Ystream|n of water meanders through a musty cave. On its bank, a |Yplank|n placed on rocks form a |Ytable|n for a curious |wtea party|n. +# Damp Cave:3 ends here + + + +# And describe returning back through the crack in the wall: + + +# [[file:../moss-n-puddles.org::*Damp Cave][Damp Cave:4]] +@desc leave = The cavern closes in at this end forming a thin crack barely wide enough for someone to slip through. +# +@set leave/traverse_msg = "You manage to squeeze through the crack." +# Damp Cave:4 ends here + +# [[file:../moss-n-puddles.org::*Damp Cave][Damp Cave:6]] +@detail party = The |Ygoblin|n has made an inconceivable attempt at a tea party, including |Ycookies|n. Perhaps the chips in the |Yteacups|n are still |wtea-worthy|n. +# Damp Cave:6 ends here + + +# This murky stream that comes from the crack in the wall, could be turned into scotch with the right about of puzzle solving. + + +# [[file:../moss-n-puddles.org::*Mucky Stream, Upper][Mucky Stream, Upper:1]] +# @teleport/quiet mp20 +# +@create/drop stream of mucky water: typeclasses.drinkables.Water +# +@desc stream = A fragrant stream of dark liquid runs through the cave dangerously close to the tea party, and passes through a |Ycrack in a wall|n. +# +@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 water." +# +@set stream/fill_name = "murky water" +# +@set stream/fill_desc = "mucky water from underground tunnels." +# +@set stream/fill_msgs = ["$You() << $conj(get) ^ $conj(kneel) >> down, and $conj(fill) $pron(your) {2} with mucky...er, water.", "$You() << $conj(get) ^ $conj(kneel) >> down, and $conj(put) $pron(your) {2} in the 'water', filling it."] +# Mucky Stream, Upper:1 ends here + + + +# And since we already mentioned the stream, we don’t need to see it in the list, as it distracts from the tea party: + + +# [[file:../moss-n-puddles.org::*Mucky Stream, Upper][Mucky Stream, Upper:3]] +@set stream/hidden_tag = "hidden_murky_stream" +# +@lock stream = view:tag(hidden_murky_stream) +# Mucky Stream, Upper:3 ends here + + +# The Trolley class (we stole from Dabbler’s Kitchen) [[file:~/src/moss-n-puddles/typeclasses/consumables.py::class Producer(Object):][produces]] teacups and random food items. + + +# [[file:../moss-n-puddles.org::*Tea Service][Tea Service:1]] +@create/drop table;plank : typeclasses.consumables.Trolley +# Tea Service:1 ends here + + + +# What can we do to make it more interesting to look at? + + +# [[file:../moss-n-puddles.org::*Tea Service][Tea Service:2]] +@desc table = Recycled board from a boat. Still has some barnacles, making the |Yteacups|n lean in various directions. Gotta admire the ingenuity. |/|/And it appears that the goblin has made |Ycookies|n. +# Tea Service:2 ends here + + + +# But instead of scones, we need to have it produce /cookies/: + + +# [[file:../moss-n-puddles.org::*Tea Service][Tea Service:3]] +@detail cookie;cookies = The cookies may or may not be made of mud.|/|/\"Help yourself," the puppet says, "Pinky is a pretty good chef." +# Tea Service:3 ends here + + + +# And the flavors of cookies that are available: + + +# [[file:../moss-n-puddles.org::*Tea Service][Tea Service:4]] +@set table/make_these = [ + { "name": "rock chip cookie", "taste": "gravel" }, + { "name": "mudslide cookie", "taste": "dirt" }, + { "name": "black 'berry' cookie", "taste": "beetle larvae" }, +] +# Tea Service:4 ends here + + + +# Perhaps the cookies are smaller than the scones from the Kitchen? + + +# [[file:../moss-n-puddles.org::*Tea Service][Tea Service:5]] +@set table/make_this = "cookie" +@set table/make_aliases = ["cookie", "cookies"] +@set table/make_amount = 2 +@set table/make_eat_amount = 1 +# Tea Service:5 ends here + + + +# And how do new cookies appear? + + +# [[file:../moss-n-puddles.org::*Tea Service][Tea Service:6]] +@set table/make_message = "The goblin rolls some mud and makes more 'cookies' she places on the table." +# Tea Service:6 ends here + + + +# We have to have the trolley bake something with the Python command: + +# [[file:../moss-n-puddles.org::*Tea Service][Tea Service:7]] +py here.search("table").do_bake() +# Tea Service:7 ends here + + + +# We mentioned a /trolley/ with teacups, but we need to change the teacup descriptions: + + +# [[file:../moss-n-puddles.org::*Tea Service][Tea Service:8]] +@detail teacups = An odd, yet interesting assortment of chipped teacups. Take one. +# +@detail teacup = Each cup is unique. Take one to look further. +# Tea Service:8 ends here + + + +# And the weird types of teacups we can find here: + + +# [[file:../moss-n-puddles.org::*Tea Service][Tea Service:9]] +@set table/teacups = [ + "Tiny. Looks more like a thimble", + "A clay cup made by a child. Cracked.", + "A 'Wings of Grace' teacup with blue butterflies. Cracked.", + "A hollowed out gourd. Large. Utilitarian." +] +# Tea Service:9 ends here + + + +# Should we create a tea pot for filling the tea cups? Or do we just fill the teacups with water from the stream. Perhaps we make that as part of the joke? + + +# [[file:../moss-n-puddles.org::*Tea Service][Tea Service:10]] +@detail teapot;pot = Conspicuously absent from this tea party is a teapot to fill the cups. Perhaps this explains the party's location next to the |Ystream of water|n. The “color of the stiff tea” describes the water well. +# Tea Service:10 ends here + + +# Let’s make a nice rock to sit down on: + +# [[file:../moss-n-puddles.org::*Rocky Chair][Rocky Chair:1]] +@create/drop flat rock:typeclasses.sittables.Sittable +# Rocky Chair:1 ends here + + + +# With a nice description: + +# [[file:../moss-n-puddles.org::*Rocky Chair][Rocky Chair:2]] +@desc flat rock = A flat rock placed next to the |Ytable|n. +# Rocky Chair:2 ends here + + + +# Can’t take the moss with you: + +# [[file:../moss-n-puddles.org::*Rocky Chair][Rocky Chair:3]] +@lock flat rock = get:false() +# Rocky Chair:3 ends here + + + +# Can we hide it too? + +# [[file:../moss-n-puddles.org::*Rocky Chair][Rocky Chair:4]] +@lock flat rock = view:tag(hidden_rock) +# +@set flat rock/hidden_tag = "hidden_rock" +# Rocky Chair:4 ends here + + + +# And a lovely message about why you can’t the goblin’s chair: + +# [[file:../moss-n-puddles.org::*Rocky Chair][Rocky Chair:5]] +@set rock/get_err_msg = "You can't take it. Why? A bit big. A bit heavy. Mostly this rock was selected because of the buttockally-shaped divets that make it an ideal perch when attending a tea party." +# Rocky Chair:5 ends here + + + +# Is /pulling/ on moss the same as attempting to =get= it? + + +# [[file:../moss-n-puddles.org::*Rocky Chair][Rocky Chair:6]] +@set rock/pull_msg = "You pull the rock closer to the |Ytable|n, as you want in on all this tea party action." +# Rocky Chair:6 ends here + + + +# What about pushing? + + +# [[file:../moss-n-puddles.org::*Rocky Chair][Rocky Chair:7]] +@set rock/push_msg = "You push the rock away from the |Ytable|n. Too much tea?" +# Rocky Chair:7 ends here + + +# Like the Mad Hatter, the primary character for our /Tea Party/ is a goblin, named Pinky. Not only is that a funny name for a goblin, but it reminds me (and the player) of my favorite character from Pinky and the Brain. + + +# [[file:../moss-n-puddles.org::*Goblin and Puppet][Goblin and Puppet:1]] +@create/drop goblin;Pinky: typeclasses.chatbots.ChatBot +# +@desc goblin = Sporting a black |Ytophat|n with a pink band, this goblin has a teacup in one hand, and a sock |Ypuppet|n on the other. +# +@set goblin/gender = "neutral" +# +@set goblin/pose = "chatting with a sock puppet" +# +@set goblin/pose_sleep = "chatting with a sock puppet" +# +@set goblin/pose_default = "chatting with a sock puppet" +# Goblin and Puppet:1 ends here + + + +# Then give him the =sdesc= (not sure why I have to do both), and wake him. + + +# [[file:../moss-n-puddles.org::*Goblin and Puppet][Goblin and Puppet:2]] +py goblin = me.search("goblin") ; goblin.db._sdesc="goblin" ; goblin.sdesc.add("goblin") ; goblin.home = here +# Goblin and Puppet:2 ends here + + + +# And some details to investigate: + + +# [[file:../moss-n-puddles.org::*Goblin and Puppet][Goblin and Puppet:3]] +@detail tophat;hat = The hat is marred by two holes cut into the sides. +# +@detail puppet;Sockasaurus Mex = Missing one googly eye, this puppet wears a few brightly colored triangles down its back. +# Goblin and Puppet:3 ends here + + + +# Let’s load Pinky’s ability, and consequently the rest of the tea party, to talk: + + +# [[file:../moss-n-puddles.org::*Goblin and Puppet][Goblin and Puppet:8]] +py me.search("goblin").backstory("tea-party") +# Goblin and Puppet:8 ends here + + +# The doll doesn’t do /anything/, but is just something to look at: + +# [[file:../moss-n-puddles.org::*Dolly the Doll][Dolly the Doll:1]] +@create/drop doll;Dolly +# Dolly the Doll:1 ends here + + + +# Doll with a rock for a head. Long dead strands of moss have been made to look like curled hair. + +# [[file:../moss-n-puddles.org::*Dolly the Doll][Dolly the Doll:2]] +@desc doll = The robust doll wears dirty pink dress with flowers that once were yellow. Her missing head has been replaced with a rock that due to your inate pareidolia, looks quite lifelike.|/|/ Strands of dead moss and grasses have been curled and teased (some would say abused) to form an attractive coiffure. +# Dolly the Doll:2 ends here + + + +# Can’t take this: + +# [[file:../moss-n-puddles.org::*Dolly the Doll][Dolly the Doll:3]] +@lock doll = get:false() +# +@set doll/get_err_msg = "You wouldn't dare take Pinky's tea party guest?" +# Dolly the Doll:3 ends here + + +# The twig golem doesn’t do /anything/ (at the moment), but is just something to look at: + +# [[file:../moss-n-puddles.org::*Twiggy the Stick Golem][Twiggy the Stick Golem:1]] +@create/drop twig golem;Twiggy +# Twiggy the Stick Golem:1 ends here + + + +# Let’s make this interesting … + +# [[file:../moss-n-puddles.org::*Twiggy the Stick Golem][Twiggy the Stick Golem:2]] +@desc twig golem = This assemblage of sticks, twigs and moss looks vaguely humanoid, well, if you squint enough. +The vines that curl and hold the teacup, look like hands, if you imagine enough. +The leaves around its top look a bit like hair, if you drink enough of that tea. +# Twiggy the Stick Golem:2 ends here + + + +# Can’t take this: + +# [[file:../moss-n-puddles.org::*Twiggy the Stick Golem][Twiggy the Stick Golem:3]] +@lock twig golem = get:false() +# +@set twig golem/get_err_msg = "You wouldn't dare take Pinky's tea party guest?" +# Twiggy the Stick Golem:3 ends here + + # The deep forest is a place where all the Puppets can hang out when not in use. -# [[file:../../../projects/mud.org::*Deep Forest][Deep Forest:1]] +# [[file:../moss-n-puddles.org::*Deep Forest][Deep Forest:1]] @dig the Deep Forest;mp00 # @teleport mp00 @@ -5476,7 +5918,7 @@ py dwarf = me.search("dwarf") ; dwarf.db._sdesc="white-haired dwarf" ; dwarf.sde # What do we have left to describe: -# [[file:../../../projects/mud.org::*Deep Forest][Deep Forest:2]] +# [[file:../moss-n-puddles.org::*Deep Forest][Deep Forest:2]] @desc here = Mists swirl 'round giant standing stones carved with ancient, cryptic symbols. A lintel perch precariously over two stones, creating a portal to the Wyldwood.|/|/You see a few characters sitting on stone benches as if on a smoking break. They look up with puzzled expressions, as if you had found your way backstage to the prop department. # Deep Forest:2 ends here @@ -5485,7 +5927,7 @@ py dwarf = me.search("dwarf") ; dwarf.db._sdesc="white-haired dwarf" ; dwarf.sde # And create an easy exit back to the game: -# [[file:../../../projects/mud.org::*Deep Forest][Deep Forest:3]] +# [[file:../moss-n-puddles.org::*Deep Forest][Deep Forest:3]] @open portal;leave;enter;exit = Grotto # Deep Forest:3 ends here @@ -5494,7 +5936,7 @@ py dwarf = me.search("dwarf") ; dwarf.db._sdesc="white-haired dwarf" ; dwarf.sde # And do the usual tricks on Exits: -# [[file:../../../projects/mud.org::*Deep Forest][Deep Forest:4]] +# [[file:../moss-n-puddles.org::*Deep Forest][Deep Forest:4]] @desc portal = Octarine sparks spiral in the mists that swirl between the stones. # Deep Forest:4 ends here @@ -5502,18 +5944,21 @@ py dwarf = me.search("dwarf") ; dwarf.db._sdesc="white-haired dwarf" ; dwarf.sde # And a nice journey message to go east out of the forest: -# [[file:../../../projects/mud.org::*Deep Forest][Deep Forest:5]] +# [[file:../moss-n-puddles.org::*Deep Forest][Deep Forest:5]] @set portal/traverse_msg = "As soon as you step between the stones, you feel like you are carried away..." # Deep Forest:5 ends here +# :PROPERTIES: +# :header-args:markdown: :tangle personalities/dragon.md +# :END: # This dragon is hard-coded to walk from the Mysterious Stone Circle (=mp00=) to the Tavern, and back again, chatting with anyone he meets. # I’ve hardcoded the path of this =Traveler=, but it would be nice to be able to have different Travelers follow different paths. -# [[file:../../../projects/mud.org::*Sir Roblees the Flamboyant Dragon][Sir Roblees the Flamboyant Dragon:1]] -@create/drop Sir Roblees;dragon,fey dragon: typeclasses.chatbots.Dragon +# [[file:../moss-n-puddles.org::*Sir Roblees the Flamboyant Dragon][Sir Roblees the Flamboyant Dragon:1]] +@create/drop Sir Roblees;dragon;fey dragon: typeclasses.chatbots.Dragon # @set dragon/gender = "male" # @@ -5529,46 +5974,57 @@ py dwarf = me.search("dwarf") ; dwarf.db._sdesc="white-haired dwarf" ; dwarf.sde # And his description: -# [[file:../../../projects/mud.org::*Sir Roblees the Flamboyant Dragon][Sir Roblees the Flamboyant Dragon:2]] +# [[file:../moss-n-puddles.org::*Sir Roblees the Flamboyant Dragon][Sir Roblees the Flamboyant Dragon:2]] @desc dragon = A dragon with orange-spotted wings like a butterfly. He makes up for his tiny size with machismo. He wears a white plumed hat and a fancy dagger like a sword. He sports a sharp-toothed grin. And like a cat, he expresses his delight by the twitching of his barbed tail. # Sir Roblees the Flamboyant Dragon:2 ends here -# Then wake it. +# And turn him into a fleshy NPC with some short descriptive attributes: -# [[file:../../../projects/mud.org::*Sir Roblees the Flamboyant Dragon][Sir Roblees the Flamboyant Dragon:3]] -py dragon = me.search("dragon") ; dragon.db._sdesc="orange fey dragon" ; dragon.sdesc.add("orange fey dragon"); dragon.home = here ; dragon.backstory("dragon") +# [[file:../moss-n-puddles.org::*Sir Roblees the Flamboyant Dragon][Sir Roblees the Flamboyant Dragon:3]] +py dragon = me.search("dragon") ; dragon.db._sdesc="orange fey dragon" ; dragon.sdesc.add("orange fey dragon"); dragon.home = here # Sir Roblees the Flamboyant Dragon:3 ends here -# Moving attributes: +# The dragon moves from East to West, so point him in the direction of the Bar: -# [[file:../../../projects/mud.org::*Sir Roblees the Flamboyant Dragon][Sir Roblees the Flamboyant Dragon:4]] +# [[file:../moss-n-puddles.org::*Sir Roblees the Flamboyant Dragon][Sir Roblees the Flamboyant Dragon:4]] @set dragon/traveling_direction = "east" # Sir Roblees the Flamboyant Dragon:4 ends here -# And get it moving: +# And get him moving: -# [[file:../../../projects/mud.org::*Sir Roblees the Flamboyant Dragon][Sir Roblees the Flamboyant Dragon:5]] +# [[file:../moss-n-puddles.org::*Sir Roblees the Flamboyant Dragon][Sir Roblees the Flamboyant Dragon:5]] @script dragon = typeclasses.chatbots.TravelingNPC # Sir Roblees the Flamboyant Dragon:5 ends here + +# Finally, let’s /awaken/ this creature: + + +# [[file:../moss-n-puddles.org::*Sir Roblees the Flamboyant Dragon][Sir Roblees the Flamboyant Dragon:9]] +py dragon = me.search("dragon") ; dragon.backstory("dragon") +# Sir Roblees the Flamboyant Dragon:9 ends here + + +# :PROPERTIES: +# :header-args:markdown: :tangle personalities/hobbit.md +# :END: # We hard-code this character to walk from the Mysterious Stone Circle (=mp00=) and sail across the sea, and back again. -# [[file:../../../projects/mud.org::*Darol the Adventuring Hobbit][Darol the Adventuring Hobbit:1]] -@tel/quiet mp00 +# [[file:../moss-n-puddles.org::*Darol the Adventuring Hobbit][Darol the Adventuring Hobbit:1]] +@tel/quiet mp05 # @create/drop Darol;hobbit: typeclasses.chatbots.Hobbit -# @update hobbit = typeclasses.puppets.Puppet # @set hobbit/gender = "him" # Darol the Adventuring Hobbit:1 ends here @@ -5578,7 +6034,7 @@ py dragon = me.search("dragon") ; dragon.db._sdesc="orange fey dragon" ; dragon. # Description: -# [[file:../../../projects/mud.org::*Darol the Adventuring Hobbit][Darol the Adventuring Hobbit:2]] +# [[file:../moss-n-puddles.org::*Darol the Adventuring Hobbit][Darol the Adventuring Hobbit:2]] @desc hobbit = An adventurous looking chap with brown mutton chops matching his curly brown hair and his brown cloak. His emerald green eyes match his coat that ends just above his large gold belt buckle, which in turn, matches his gold hoop earring. His backpack sports a pin with an insignia. # Darol the Adventuring Hobbit:2 ends here @@ -5587,7 +6043,7 @@ py dragon = me.search("dragon") ; dragon.db._sdesc="orange fey dragon" ; dragon. # And the posing? -# [[file:../../../projects/mud.org::*Darol the Adventuring Hobbit][Darol the Adventuring Hobbit:3]] +# [[file:../moss-n-puddles.org::*Darol the Adventuring Hobbit][Darol the Adventuring Hobbit:3]] @set hobbit/pose = "with his thumbs in his waistcoat pocket" # @set hobbit/pose_sleep = "absentmindedly smoking a pipe" @@ -5597,90 +6053,116 @@ py dragon = me.search("dragon") ; dragon.db._sdesc="orange fey dragon" ; dragon. -# Then wake it. +# And turn him into a fleshy NPC with some short descriptive attributes: -# [[file:../../../projects/mud.org::*Darol the Adventuring Hobbit][Darol the Adventuring Hobbit:4]] -py hobbit = me.search("hobbit") ; hobbit.sdesc.add("hobbit") ; hobbit.backstory("dragon") +# [[file:../moss-n-puddles.org::*Darol the Adventuring Hobbit][Darol the Adventuring Hobbit:4]] +py hobbit = me.search("hobbit") ; hobbit.db._sdesc="mutton-chopped hobbit" ; hobbit.sdesc.add("mutton-chopped hobbit"); hobbit.home = here # Darol the Adventuring Hobbit:4 ends here -# Moving attributes: +# The =Hobbit= class moves from North to South, so point him in the direction of the Bar: -# [[file:../../../projects/mud.org::*Darol the Adventuring Hobbit][Darol the Adventuring Hobbit:5]] -@set hobbit/traveling_direction = "back" +# [[file:../moss-n-puddles.org::*Darol the Adventuring Hobbit][Darol the Adventuring Hobbit:5]] +@set hobbit/traveling_direction = "north" # Darol the Adventuring Hobbit:5 ends here -# He needs his stuff, like a pipe: +# And get him moving: -# [[file:../../../projects/mud.org::*Darol the Adventuring Hobbit][Darol the Adventuring Hobbit:6]] -@create pipe: typeclasses.things.Pipe -# -@desc pipe = A large pipe worthy of a Hobbit. -# -@give pipe = hobbit +# [[file:../moss-n-puddles.org::*Darol the Adventuring Hobbit][Darol the Adventuring Hobbit:6]] +@script hobbit = typeclasses.chatbots.TravelingNPC # Darol the Adventuring Hobbit:6 ends here -# Need something to state he’s adventurous: +# And finally, we /awaken/ him: -# [[file:../../../projects/mud.org::*Darol the Adventuring Hobbit][Darol the Adventuring Hobbit:7]] -@create short sword: typeclasses.things.Wand -# -@desc short sword = Beautiful gold filigree on the hilt and scabbard. -# -@give short sword = hobbit -# Darol the Adventuring Hobbit:7 ends here - - - -# And his fancy waistcoat: - - -# [[file:../../../projects/mud.org::*Darol the Adventuring Hobbit][Darol the Adventuring Hobbit:8]] -@create waistcoat : typeclasses.things.BagofJunk -# -@desc waistcoat = An elegant green waistcoat. -# -@set waistcoat/stuff = "fey" -# -@give waistcoat = hobbit -# Darol the Adventuring Hobbit:8 ends here - - - -# But mostly, he needs his horn: - - -# [[file:../../../projects/mud.org::*Darol the Adventuring Hobbit][Darol the Adventuring Hobbit:9]] -@create horn : typeclasses.sailing.CallingHorn -# -@desc horn = Made from the sea mist, it calls to you -# -@give horn = hobbit -# Darol the Adventuring Hobbit:9 ends here - - - -# And get it moving: - - -# [[file:../../../projects/mud.org::*Darol the Adventuring Hobbit][Darol the Adventuring Hobbit:10]] -@script hobbit = typeclasses.chatbots.TravelingNPC +# [[file:../moss-n-puddles.org::*Darol the Adventuring Hobbit][Darol the Adventuring Hobbit:10]] +py hobbit = me.search("hobbit") ; hobbit.backstory("hobbit") # Darol the Adventuring Hobbit:10 ends here +# :PROPERTIES: +# :header-args:markdown: :tangle personalities/barbarian.md +# :END: +# My friend, Rick Cooper, used to play a hilariously funny character in my D&D games. A gladiator who was always the center of attention, mostly to great comedic effect. + +# [[file:../moss-n-puddles.org::*Rick the Barbarian][Rick the Barbarian:1]] +@tel/quiet mp15 +# +@create/drop Breanaramus;Rick: typeclasses.chatbots.Traveler +# +@set Rick/gender = "her" +# +@set Rick/pose = "flexing her muscles" +# +@set Rick/pose_sleep = "cleaning her nails with a battleaxe" +# +@set Rick/pose_default = "cleaning her nails with a battleaxe" +# Rick the Barbarian:1 ends here + + + +# And a colorful description that reminds me of the D&D character that Rick used to play at my table: + + +# [[file:../moss-n-puddles.org::*Rick the Barbarian][Rick the Barbarian:2]] +@desc Rick = A hulking physique dressed to the nines in the latest fashion of barbarian chic. Her armor? Glittery. Battleaxe? Shiny. Helmet? Horny...er, has horns, of course. She raises one-half of her bushy blonde unibrow as she looks at you. +# Rick the Barbarian:2 ends here + + + +# Let’s give her a silver ring: + + +# [[file:../moss-n-puddles.org::*Rick the Barbarian][Rick the Barbarian:3]] +@create silver ring +# +@tel/quiet silver ring = Breanaramus +# Rick the Barbarian:3 ends here + + + +# And a battleaxe: + + +# [[file:../moss-n-puddles.org::*Rick the Barbarian][Rick the Barbarian:4]] +@create battleaxe +# +@tel/quiet batteaxe = Breanaramus +# Rick the Barbarian:4 ends here + + + +# Then wake her. + + +# [[file:../moss-n-puddles.org::*Rick the Barbarian][Rick the Barbarian:5]] +py rick = me.search("rick") ; rick.db._sdesc="large barbarian" ; rick.sdesc.add("large barbarian") +# Rick the Barbarian:5 ends here + + + +# Finally, let’s awaken him: + + +# [[file:../moss-n-puddles.org::*Rick the Barbarian][Rick the Barbarian:9]] +py rick = me.search("rick") ; rick.backstory("barbarian") +# Rick the Barbarian:9 ends here + + # And now that we are done, say it: -# [[file:../../../projects/mud.org::*Bugs][Bugs:1]] +# [[file:../moss-n-puddles.org::*Bugs][Bugs:1]] +@teleport/quiet mp05 +# say I have finished this, the first version, of my creation. # Bugs:1 ends here