
# The first character is special, as it can really /own/ the server. I don’t use it except to build the world, otherwise, I will puppet a creation.

# An avatar in the original sense of a housing for a god-like entity.


# [[file:../../../projects/mud.org::*Create an Avatar][Create an Avatar:1]]
@name self = Avatar
# Create an Avatar:1 ends here

# [[file:../../../projects/mud.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]]
@sdesc angelic being
# Create an Avatar:3 ends here



# And to pose:


# [[file:../../../projects/mud.org::*Create an Avatar][Create an Avatar:4]]
py self.db.pose = True
#
pose looking awesome
# Create an Avatar:4 ends here


# Rename the Limbo (or starting place) with the name *Grove of the Matriarchs*. Note the term =mp01= as a global label that matches my map. My original term for “forest” is too general, as it sounds like the place should be /named/ with some sort of title.


# [[file:../../../projects/mud.org::*The Forest][The Forest:1]]
@name here = Grove of the Matriarchs;mp01
# The Forest:1 ends here



# The description will take advantage of the /seasons/ and /times/ of the day:


# [[file:../../../projects/mud.org::*The Forest][The Forest:2]]
@desc here = A giant, moss-covered |Yboulder|n stands among immense |Ytrees|n that etch the sky and slice the clouds in the <evening>darkening twilight</evening><morning>awakening dawn</morning><afternoon>lazy afternoon</afternoon><night>night sky</night>. <morning>With the morning light, you can hear the dawn chorus of birds</morning><afternoon>The afternoon breeze carries the buzzing of insects around giant colorful |Yflowers|n</afternoon><evening>You can't hear much now as most of the forest creatures are settling down for the night</evening><night>In the darkness, you can hear crickets and an occassional owl</night>. 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 Forest:2 ends here



# Need to add weather and time data to this:

# [[file:../../../projects/mud.org::*The Forest][The Forest:4]]
@update here = typeclasses.rooms_weather.TimeWeatherRoom
# The Forest:4 ends here



# Derived from the original [[~/src/moss-n-puddles/.venv/lib/python3.12/site-packages/evennia/contrib/tutorials/tutorial_world/rooms.py][rooms.py]], but now stored in [[file:~/src/moss-n-puddles/typeclasses/rooms_weather.py][rooms_weather.py]].

# Describe the trees:

# [[file:../../../projects/mud.org::*The Forest][The Forest:5]]
@detail tree;trees = You feel dwarfed by colossal trees whose moss-covered roots are difficult to peer over. An occassional breeze often smells of flowers and at other times earthy.  While the leafy canopy hides the sky, you certainly can |wfeel|n the weather.
# The Forest:5 ends here



# And the flowers:

# [[file:../../../projects/mud.org::*The Forest][The Forest:6]]
@detail flower;flowers = Beautiful, but giant flowers look down on you and nod a friendly greeting.
# The Forest:6 ends here


# With my name, I need to have an object to go with it.


# [[file:../../../projects/mud.org::*Puddle][Puddle:1]]
@create/drop puddle : typeclasses.things.Puddle
# Puddle:1 ends here



# And an elusive description:


# [[file:../../../projects/mud.org::*Puddle][Puddle:2]]
@desc puddle = A large puddle, formed from a recent rain shower, invites you to shed your years and |gjump|n in and splash around to reconnect with your youth.
# Puddle:2 ends here



# And keep it locked down:


# [[file:../../../projects/mud.org::*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."
# Puddle:3 ends here


# 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)] )
# 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]]
@create/drop guest book:typeclasses.readables.WriteableBook
#
@set guest book/inside = "file:world/guest-book.md"
#
@set guest book/prefix = "You open the leather-bound book, and begin to read from page one..."
# Guest Book:1 ends here



# Note that we don’t mention this in the area’s description.


# [[file:../../../projects/mud.org::*Guest Book][Guest Book:2]]
@desc guest book = The root from one of the colossal |Ytrees|n has erupted from the ground, forming a dry alcove that harbors a colony of mushroom caps. Jauntily perched on the largest of these, a leather-bound book, sports the title, |wGuest Book|n. Next to it, a feather |Yquill|n and an |Yink|n |Ywell|n invite you to read the register, and |gwrite|n a note for other travelers.
# Guest Book:2 ends here



# Can’t get it:


# [[file:../../../projects/mud.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."
# Guest Book:3 ends here



# And some details:


# [[file:../../../projects/mud.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.
#
@detail well;ink well = The well appears to be little more than a depression on the back of the mushroom's cap.
# Guest Book:4 ends here


# 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]]
@detail symbol = You move an ivy runner to see three curves join together as if it were three legs.
# Boulder:1 ends here



# The moss is purdy:

# [[file:../../../projects/mud.org::*Boulder][Boulder:2]]
@detail moss = "Even in this light, the moss radiates a surreal color of green."
# Boulder:2 ends here



# And the ivy is … uh.

# [[file:../../../projects/mud.org::*Boulder][Boulder:3]]
@detail ivy = "You see...well, ivy. Uhm, it's green, and..."
# Boulder:3 ends here



# The runes use multibyte unicode which screws up the =telnet= client.

# [[file:../../../projects/mud.org::*Boulder][Boulder:4]]
@detail runes;rune = The runes read ᛞ ᚪ ᛒ ᛚ ᚱ
# Boulder:4 ends here



# 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]]
@dig Boulder Top;mp02 : typeclasses.rooms_weather.TimeWeatherRoom = climb boulder;boulder;climb,climb down;climb;down
# Boulder:5 ends here



# 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]]
@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



# To take advantage of our [[Hidden Things]], we put the right tag on it:

# [[file:../../../projects/mud.org::*Boulder][Boulder:7]]
@set boulder/hidden_tag = "hidden_boulder"
#
@lock boulder = view:tag(hidden_boulder)
# Boulder:7 ends here



# And give it some aliases:

# [[file:../../../projects/mud.org::*Boulder][Boulder:8]]
@name boulder = climb the boulder;boulder;climb;climb up;climb boulder
# Boulder:8 ends here



# And a description:

# [[file:../../../projects/mud.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


# In case they attempt to get vines here:

# Let’s make a nice spot to sit down on:

# [[file:../../../projects/mud.org::*Lower Vines][Lower Vines:1]]
@create/drop dangling vine;vines;vine
# Lower Vines:1 ends here



# With a nice description:

# [[file:../../../projects/mud.org::*Lower Vines][Lower Vines:2]]
@desc vines = Strong vines twisted to look like rope. This could be helpful.
# Lower Vines:2 ends here



# Can’t take it here, you have to climb the boulder first:

# [[file:../../../projects/mud.org::*Lower Vines][Lower Vines:3]]
@lock vines = get:false()
#
@set vines/get_err_msg = "The vines are too strong to break or cut. Perhaps they could be detached from the top of the |Yboulder|n?"
# Lower Vines:3 ends here



# Can we hide it too?

# [[file:../../../projects/mud.org::*Lower Vines][Lower Vines:4]]
@lock vines = view:tag(hidden_vines)
#
@set vines/hidden_tag = "hidden_vines"
# Lower Vines:4 ends here



# What about pushing and pulling messages?


# [[file:../../../projects/mud.org::*Lower Vines][Lower Vines:5]]
@set vines/pull_msg = "You pull the vines, but 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."
# Lower Vines:5 ends here



# Let’s jump to the top of the boulder to proceed:

# [[file:../../../projects/mud.org::*Top of Boulder][Top of Boulder:1]]
@teleport mp02
# Top of Boulder:1 ends here



# And the description:

# [[file:../../../projects/mud.org::*Top of Boulder][Top of Boulder:3]]
@desc here = While high, the |Ytrees|n still tower over you. Still, a nice view. Lots of patches of |Ymoss|n to |gsit|n down and relax.
# Top of Boulder:3 ends here



# More details:

# [[file:../../../projects/mud.org::*Top of Boulder][Top of Boulder:4]]
@detail tree;trees = You feel dwarfed by colossal trees whose moss-covered roots are difficult to peer over. An occassional breeze often smells of flowers and other times earthy.  While the leafy canopy hides the sky, you certainly can |wfeel|n the weather.
# Top of Boulder:4 ends here



# And a description of the climb:

# [[file:../../../projects/mud.org::*Top of Boulder][Top of Boulder:5]]
@desc climb = The climb seemed easy, but you're not sure you can handle the footholds going the other way around.
# Top of Boulder:5 ends here



# And describe the journey:

# [[file:../../../projects/mud.org::*Top of Boulder][Top of Boulder:6]]
@set climb/traverse_msg = "You crawl backwards, feeling with your foot for a hold. Got it! Then another one...hoping the vines and the moss' rhizoids hold..."
# Top of Boulder:6 ends here


# Let’s make a nice spot to sit down on:

# [[file:../../../projects/mud.org::*Moss][Moss:1]]
@create/drop patch of moss;moss:typeclasses.sittables.Sittable
# Moss:1 ends here



# With a nice description:

# [[file:../../../projects/mud.org::*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]]
@lock patch of moss = get:false()
# Moss:3 ends here


# Can we hide it too?

# [[file:../../../projects/mud.org::*Moss][Moss:4]]
@lock patch of moss = view:tag(hidden_moss)
#
@set patch of moss/hidden_tag = "hidden_moss"
# Moss:4 ends here



# And a lovely message about why you can’t steal moss:

# [[file:../../../projects/mud.org::*Moss][Moss:5]]
@set moss/get_err_msg = "The moss is a bryophyte, and as such, has attached itself to boulder by rhizoids, which are one cell thick root structures. While this helps with water absorption, you didn't think you were going to get a biology lesson, did you? tl;dr You can't get it."
# Moss:5 ends here



# Is /pulling/ on moss the same as attempting to =get= it?


# [[file:../../../projects/mud.org::*Moss][Moss:6]]
@set moss/pull_msg = "The moss is a bryophyte, and as such, has attached itself firmly to boulder by rhizoids. So pulling on it doesn't do much good."
# Moss:6 ends here


# 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]]
@teleport mp02
#
@create/drop lot of vines;vine;rope: typeclasses.consumables.Producer
# Upper Vines:1 ends here



# With a description:


# [[file:../../../projects/mud.org::*Upper Vines][Upper Vines:2]]
@desc vines = While difficult to cut, the study and tough vines are easy to pull from this point on the boulder. You could probably make a sturdy rope from them.
# Upper Vines:2 ends here



# We have to have the vines describe what it /makes/:


# [[file:../../../projects/mud.org::*Upper Vines][Upper Vines:3]]
@set vines/make_name = "coil of rope"
# Upper Vines:3 ends here



# And a verb when they /get/ the consumable:


# [[file:../../../projects/mud.org::*Upper Vines][Upper Vines:4]]
@set vines/make_verb = "$conj(yank) and $conj(shape) a"
# Upper Vines:4 ends here



# And a commentary:


# [[file:../../../projects/mud.org::*Upper Vines][Upper Vines:5]]
@set vines/make_note = " from the vines"
# Upper Vines:5 ends here



# This one is optional as it defaults to Consumable:

# [[file:../../../projects/mud.org::*Upper Vines][Upper Vines:6]]
@set vines/make_class = "typeclasses.things.Rope"
# Upper Vines:6 ends here



# And the vines needs to know the /description/ of the Consumable, so that it can attach that:

# [[file:../../../projects/mud.org::*Upper Vines][Upper Vines:7]]
@set vines/make_desc = "Made from vines, but could be a good lasso."
# Upper Vines:7 ends here



# How much is there when you pick them?

# [[file:../../../projects/mud.org::*Upper Vines][Upper Vines:8]]
@set vines/make_amount = 1
# Upper Vines:8 ends here



# What if they do something other than =get= the vines?


# [[file:../../../projects/mud.org::*Upper Vines][Upper Vines:9]]
@set vines/pull_msg = "You pull the vines, and notice they detach easily from the rock. Perhaps you should |gget|n these and make something with them."
#
@set vines/push_msg = "You push the vines out of the way showing the rock boulder below. Perhaps you should |gget|n these and make something with them."
# Upper Vines:9 ends here



# Part of the [[Potions and their Ingredients][Alchemist Path]], we use /gigglecaps/ to create a [[Laughing Potion]].

# Note the Alchemist Tome:
# #+begin_quote
# Colorful gigglecaps prefer well drained locations to grow, like on the top of rock terrain.
# #+end_quote

# And we create a /patch/ of them for the picking:


# [[file:../../../projects/mud.org::*Gigglecap Mushrooms][Gigglecap Mushrooms:1]]
# @teleport/quiet mp02
#
@create/drop patch of mushrooms;mushrooms;mushroom: typeclasses.consumables.Producer
#
@desc mushrooms = A vibrant patch of mushrooms bursts forth like a painter's palette, each cap shimmering with iridescent hues of violet, emerald, and gold. Their delicate stems sway gently in the enchanted breeze...wait, you feel no breeze. They seem to be undulating with unheard laughter.
#
@set mushrooms/make_name = "gigglecap mushroom"
#
@set mushrooms/make_verb = "$conj(harvest) a"
#
@set mushrooms/make_class = "typeclasses.consumables.Edible"
#
@set mushrooms/make_desc = "A whimsical fungi emits a soft, melodic laughter when touched."
#
@set mushrooms/make_amount = 1
#
@set mushrooms/make_spell_msgs = "10 ;; $You() << $conj(giggle) ^ $conj(chuckle) ^ $conj(chortle) >> out loud."
#
# And we can't see them until we are an alchemist:
@lock mushrooms = view:tag(alchemist)
# Gigglecap Mushrooms:1 ends here


# To the east, let’s make a nice meadow. Start at the Forest:

# [[file:../../../projects/mud.org::*Field][Field:1]]
@teleport mp01
# Field:1 ends here



# And we use the =tunnel= command this time:

# [[file:../../../projects/mud.org::*Field][Field: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
# Field:2 ends here



# A description if they look east:

# [[file:../../../projects/mud.org::*Field][Field:3]]
@desc east = A winding footpath that may lead out of the forest... Is that a meadow?
# Field:3 ends here



# And a nice journey message to go east out of the forest:

# [[file:../../../projects/mud.org::*Field][Field:4]]
@set east/traverse_msg = "The mossy tree roots that borders this footpath begin to thin out to clover and flowers..."
# Field:4 ends here



# Before we label it, we follow =east=:

# [[file:../../../projects/mud.org::*Field][Field:5]]
@teleport mp05
# Field:5 ends here



# 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::*Field][Field:6]]
@desc here = A large |Ywaterfall|n cascades on the far side of this meadow creating a |Ystream|n that meanders through the tall grass and large yellow |Yflowers|n. They nod their <night>sleepy </night>heads to you as you pass by in the <evening>darkening twilight</evening><morning>awakening dawn</morning><afternoon>lazy afternoon</afternoon><night>dark night</night>. A gap in the trees show how you can return to the footpath in the forest.
# Field:6 ends here



# Along with a mesage:

# [[file:../../../projects/mud.org::*Field][Field:7]]
@set footpath/traverse_msg = "You leave the open meadow for the footpath through the giant trees. The yellow flowers nod goodbye to you..."
# Field:7 ends here



# And a description:

# [[file:../../../projects/mud.org::*Field][Field:8]]
@desc footpath = This footpath goes in a forest of immense trees.
# Field:8 ends here



# Can the waterfall be a detail or an actual object?


# [[file:../../../projects/mud.org::*Field][Field:9]]
@detail field = A slow-moving |Ystream|n meanders like a snake in the grassy field. Little green |Yfrogs|n cling to grass stems hanging over the water.
# Field:9 ends here



# And detail the frogs:


# [[file:../../../projects/mud.org::*Field][Field:10]]
@detail frog;frogs = Cute little guys with their big black eyes and tiny gold crowns. Too quick to catch.
#
@detail flowers;yellow flowers = "Aren't daffodils just flowers with big ol' schnozzes?"
# Field:10 ends here


# This is special, in that it should be hidden:


# [[file:../../../projects/mud.org::*Waterfall][Waterfall:1]]
@create/drop waterfall
# Waterfall:1 ends here



# And the description:


# [[file:../../../projects/mud.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]]
@lock waterfall = get:false()
# Waterfall:3 ends here



# Looking at the waterfall, shows the cave entrance:

# [[file:../../../projects/mud.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]]
@detail pool = A pool of cool, clear water.
# Waterfall:5 ends here


# The waterfall causes the water in the stream to be /fizzy/, to be part of the [[Potions and their Ingredients][Alchemist Path]] to create a [[Laughing Potion]].


# [[file:../../../projects/mud.org::*Fizzy Water][Fizzy Water:1]]
# @teleport/quiet mp05
#
@create/drop stream;water: typeclasses.drinkables.Water
#
@desc stream = A slow-moving stream meanders like a snake in the grassy field. The water, fizzy with bubbles from the waterfall torrent, creates an efforvesent aroma. Little green |Yfrogs|n cling to grass stems hanging over the sparkling water.
#
@lock stream = get:false()
#
@set stream/get_err_msg = "Seriously? You can't get that. Perhaps you can |gfill|n a |gbottle|n, or at least a cup, could hold the fizzy water."
#
@set stream/fill_name = "fizzy water"
#
@set stream/fill_desc = "sparkling water from waterfall turbulence."
#
@set stream/fill_msgs = ["$You() << $conj(get) ^ $conj(kneel) >> down, and $conj(fill) $pron(your) {2} with sparkling efforvesence.", "$You() << $conj(get) ^ $conj(kneel) >> down, and $conj(put) $pron(your) {2} in the cool water, filling it."]
# Fizzy Water:1 ends here



# Part of the [[Potions and their Ingredients][Alchemist Path]], we use /tickleweed grass/ to create a [[Laughing Potion]].

# We put this location hint in the Alchemy Tome:
# #+begin_quote
# A purple grass, often called tickleweed since it vibrates as if laughing. The herb hunter canfind this in fields and meadows throughout the area.
# #+end_quote

# And we create it:


# [[file:../../../projects/mud.org::*Tickleweed][Tickleweed:1]]
# @teleport/quiet mp05
#
@create/drop patch of tickleweed;tickleweed: typeclasses.consumables.Producer
#
@desc tickleweed = Patches of this vivid grass vibrates as if giggling.
#
@set tickleweed/make_name = "bunch of tickleweed"
#
@set tickleweed/make_verb = "$conj(harvest) a"
#
@set tickleweed/make_class = "typeclasses.consumables.Herb"
#
@set tickleweed/make_desc = "This grass vibrates as if giggling."
#
@set tickleweed/make_amount = 1
#
# And we can't see them until we are an alchemist:
@lock tickleweed = view:tag(alchemist)
# Tickleweed:1 ends here


# 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]]
@teleport mp05
# The Lair of the Beast:1 ends here



# From the Meadow, we create a lair /behind/ the water.

# [[file:../../../projects/mud.org::*The Lair of the Beast][The Lair of the Beast:2]]
@dig Lair;mp07 = cave entrance;cave;lair;inside,outside;leave;meadow
# The Lair of the Beast:2 ends here



# And we make it hidden:

# [[file:../../../projects/mud.org::*The Lair of the Beast][The Lair of the Beast:3]]
@set cave/hidden_tag = "hidden_cave"
#
@lock cave = view:tag(hidden_cave)
# The Lair of the Beast:3 ends here



# And a description if they look:

# [[file:../../../projects/mud.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



# And a description when entering …

# [[file:../../../projects/mud.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



# Let’s step inside to finish this:


# [[file:../../../projects/mud.org::*The Lair of the Beast][The Lair of the Beast:6]]
@teleport mp07
# The Lair of the Beast:6 ends here



# And a description:


# [[file:../../../projects/mud.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



# And a description of leaving:


# [[file:../../../projects/mud.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



# And the leaving message:


# [[file:../../../projects/mud.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


# Create a mattress you can sit on (and maybe /push/ to get to a secret door):


# [[file:../../../projects/mud.org::*Mattress][Mattress:1]]
@create/drop mattress:typeclasses.sittables.Sittables
# Mattress:1 ends here



# And the description:

# [[file:../../../projects/mud.org::*Mattress][Mattress:2]]
@desc mattress = Looks comfortable, albeit tall, but it does not smell very good. Perhaps that is due to the |Ymushrooms|n surrounding its base?
# Mattress:2 ends here



# And a /detail/ of the mushrooms that may show if are not an alchemist:


# [[file:../../../projects/mud.org::*Mattress][Mattress:3]]
@detail mushrooms;fungus = Slender blue tendrils of a fungus encircle the base of the mattress. Subtle white dots on the cap suggests caution.
# Mattress:3 ends here



# Can’t steal ‘it:

# [[file:../../../projects/mud.org::*Mattress][Mattress:4]]
@lock mattress = get:false()
#
@set mattress/get_err_msg = "It's way too heavy for you to lift."
# Mattress:4 ends here



# And textual descriptions the object can use:

# [[file:../../../projects/mud.org::*Mattress][Mattress:5]]
@set mattress/adjective = "on"
#
@set mattress/article = "the"
#
@set mattress/singular = "the mattress"
#
@set mattress/extra = "This feels << ^ very ^ quite>> <<nice ^ cozy ^ comfortable>>.|n"
# Mattress:5 ends here



# And a trim on the things to see:


# [[file:../../../projects/mud.org::*Mattress][Mattress:6]]
@lock mattress = view:tag(hidden_mattress)
#
@set mattress/hidden_tag = "hidden_mattress"
# Mattress:6 ends here


# Part of the [[Potions and their Ingredients][Alchemist Path]], we use /dream mushrooms/ to create a [[Trippy Potion]].

# #+begin_quote
# Dreamshade mushrooms feed on floating dreams, and often congregate where dreamers sleep.
# #+end_quote


# [[file:../../../projects/mud.org::*Dream Mushrooms][Dream Mushrooms:1]]
# @teleport/quiet mp07
#
@create/drop cluster of mushrooms;mushroom;mushrooms: typeclasses.consumables.Producer
#
@desc mushrooms = Slender blue tendrils of a fungus encircle the base of the mattress. You note that these look like the |wDreamshade mushrooms|n mentioned in the |wAlchemy Lab|n.
#
@set mushrooms/make_name = "sack of mushrooms"
#
@set mushrooms/make_verb = "$conj(collect) and $conj(fill) a"
#
@set mushrooms/make_class = "typeclasses.consumables.Edible"
#
@set mushrooms/make_desc = "Small collection of slender, blue mushrooms."
#
@set mushrooms/make_amount = 1
#
@set mushrooms/make_spell_msgs = "10 ;; $You() $conj(nod) off, as $pron(your) head bobbles and bounces. ;; 5 ;; $You() $conj(awaken) with a start."
#
# And we can't see them "fully" until we are an alchemist:
@lock mushrooms = view:tag(alchemist)
# Dream Mushrooms:1 ends here


# And we create the Big, Hairy Beast:


# [[file:../../../projects/mud.org::*Beast][Beast:1]]
@create/drop big hairy beast;bhb;beast;hairy beast;monster;shadow: typeclasses.pets.BHB
# Beast:1 ends here



# And a general description that will be /expanded/ with its current reaction.


# [[file:../../../projects/mud.org::*Beast][Beast:2]]
@desc beast = A big, hairy beast with long claws and teeth.
# Beast:2 ends here



# Can’t get this:

# [[file:../../../projects/mud.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."
# Beast:3 ends here



# And set its sleepy time at 8pm …


# [[file:../../../projects/mud.org::*Beast][Beast:4]]
@set beast/sleep_hour = 21
# Beast:4 ends here



# It will wake at 8am …


# [[file:../../../projects/mud.org::*Beast][Beast:5]]
@set beast/wake_hour = 8
# Beast:5 ends here



# 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]]
@set beast/loneliness_amount = -2
# Beast:6 ends here



# 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]]
@set beast/shyness_amount = 3
# Beast:7 ends here



# 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]]
@set beast/active_amount = 10
# Beast:8 ends here



# 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]]
@set beast/new_character_reaction = 'ignores'
# Beast:9 ends here



# 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]]
@set beast/scared_msg = "It seems <<skiddish ^ afraid ^ skiddish and afraid>> 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



# Concerned level:


# [[file:../../../projects/mud.org::*Beast][Beast:11]]
@set beast/concerned_msg = "Its large, yellow eyes stare at you from a safe distance."
# Beast:11 ends here



# Interested level:


# [[file:../../../projects/mud.org::*Beast][Beast:12]]
@set beast/interested_msg = "It seems <<curious ^ interested>> in what you are doing <<here ^ >>. ;; Its << ^ large, ^ big,>> yellow eyes watch your every move."
# Beast:12 ends here



# Friendly level:


# [[file:../../../projects/mud.org::*Beast][Beast:13]]
@set beast/friendly_msg = "It sits next to you, as its big, friendly eyes gaze as you. ;; It <<leaps over ^ runs up ^ bounces up ^ >> to you, wagging its tail-less behind. ;; It lays down next to you."
# Beast:13 ends here



# When the beast is sleeping, we can some times spam the room with the snores:


# [[file:../../../projects/mud.org::*Beast][Beast:14]]
@set beast/sleeping_actions = "The <<big, ^ huge, ^ large, ^ tremendous, ^ >> <<hairy ^ slobbery ^ horned ^ clawed ^ >> <<brute ^ beast ^ monster>> lets loose a <<big, ^ huge, ^ large, ^ tremendous, ^ >> snore. ;; The <<big, ^ huge, ^ large, ^ tremendous, ^ >> <<hairy ^ slobbery ^ horned ^ clawed ^ >> <<brute ^ beast ^ monster>> growls in its sleep. ;; The <<big, ^ huge, ^ large, ^ tremendous, ^ >> <<hairy ^ slobbery ^ horned ^ clawed ^ >> <<brute ^ beast ^ monster>> twitches its <<leg ^ legs ^ paw ^ nose>>. ;; The <<big, ^ huge, ^ large, ^ tremendous, ^ >> <<hairy ^ slobbery ^ horned ^ clawed ^ >> <<brute ^ beast ^ monster>> <<shifts ^ rolls>> on its <<big, ^ huge, ^ large, ^ tremendous, ^ >> mattress."
# Beast:14 ends here



# We base the actions of the beast on the most friendly person in the area.

# The scared level doesn’t last long, so let’s just leave one message:


# [[file:../../../projects/mud.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




# Concerned actions:


# [[file:../../../projects/mud.org::*Beast][Beast:16]]
@set beast/concerned_actions = "The <<big, ^ huge, ^ large, ^ tremendous, ^ >> <<hairy ^ slobbery ^ horned ^ clawed ^ >> <<brute ^ beast ^ monster>> <<is ^ seems>> concerned by your presence in the <<meadow ^ field>>. ;; The <<big, ^ huge, ^ large, ^ tremendous, ^ >> <<hairy ^ slobbery ^ horned ^ clawed ^ >> <<brute ^ beast ^ monster>> seems concerned. Maybe it's hungry. ;; The <<big, ^ huge, ^ large, ^ tremendous, ^ >> <<hairy ^ slobbery ^ horned ^ clawed ^ >> <<brute ^ beast ^ monster>> seems concerned and keeps its distance."
# Beast:16 ends here



# Interested actions:


# [[file:../../../projects/mud.org::*Beast][Beast:17]]
@set beast/interested_actions = "The <<big, ^ huge, ^ large, ^ tremendous, ^ >> <<hairy ^ slobbery ^ horned ^ clawed ^ >> <<brute ^ beast ^ monster>> seems <<curious ^ interested>> in $you(). ;; The <<big, ^ huge, ^ large, ^ tremendous, ^ >> <<hairy ^ slobbery ^ horned ^ clawed ^ >> <<brute ^ beast ^ monster>> seems curious about $you(). ;; The <<big, ^ huge, ^ large, ^ tremendous, ^ >> <<hairy ^ slobbery ^ horned ^ clawed ^ >> <<brute ^ beast ^ monster>> stands on its hind legs. ;; The <<big, ^ huge, ^ large, ^ tremendous, ^ >> <<hairy ^ slobbery ^ horned ^ clawed ^ >> <<brute ^ beast ^ monster>> <<stares at ^ watches ^ follows>> $you() with its <<large, ^ big, ^ >> yellow eyes."
# Beast:17 ends here



# Friendly actions:


# [[file:../../../projects/mud.org::*Beast][Beast:18]]
@set beast/friendly_actions = "The <<big, ^ huge, ^ large, ^ tremendous, ^ >> <<hairy ^ slobbery ^ horned ^ clawed ^ >> <<brute ^ beast ^ monster>> <<thunders ^ stomps ^ tramps ^ clomps ^ rumbles ^ rolls>> <<across the field ^ across the meadow ^ over>> wagging its backend<<, ^ as it seems>> happy to see $you(). ;; The <<big, ^ huge, ^ large, ^ tremendous, ^ >> <<hairy ^ slobbery ^ horned ^ clawed ^ >> <<brute ^ beast ^ monster>> <<thunders ^ stomps ^ tramps ^ clomps ^ rumbles ^ rolls>> <<across the field ^ across the meadow ^ over>> hoping to play with $you(). ;; The <<big, ^ huge, ^ large, ^ tremendous, ^ >> <<hairy ^ slobbery ^ horned ^ clawed ^ >> <<brute ^ beast ^ monster>> flops over in front of $you() wriggling <<its back ^ >> on the ground. ;; The <<big, ^ huge, ^ large, ^ tremendous, ^ >> <<hairy ^ slobbery ^ horned ^ clawed ^ >> <<brute ^ beast ^ monster>> <<thunders ^ stomps ^ tramps ^ clomps ^ rumbles ^ rolls>> <<across the field ^ across the meadow ^ over>> next to $you(). ;; The <<big, ^ huge, ^ large, ^ tremendous, ^ >> <<hairy ^ slobbery ^ horned ^ clawed ^ >> <<brute ^ beast ^ monster>> chases butterflies around the <<field ^ meadow ^ grass ^ flowers>>."
# Beast:18 ends here



# The ecstatic states are just a bit more than friendly.


# [[file:../../../projects/mud.org::*Beast][Beast:19]]
@set beast/ecstatic_actions = "The <<big, ^ huge, ^ large, ^ tremendous, ^ >> <<hairy ^ slobbery ^ horned ^ clawed ^ >> <<brute ^ beast ^ monster>> <<thunders ^ stomps ^ tramps ^ clomps ^ rumbles ^ rolls>> <<across the field ^ across the meadow ^ over>> to give $you() a sloppy <<kiss ^ lick>>. ;; The <<big, ^ huge, ^ large, ^ tremendous, ^ >> <<hairy ^ slobbery ^ horned ^ clawed ^ >> <<brute ^ beast ^ monster>> <<thunders ^ stomps ^ tramps ^ clomps ^ rumbles ^ rolls>> <<across the field ^ across the meadow ^ over>> wagging its backend as it seems <<very ^ >> excited to see $you(). ;; The <<big, ^ huge, ^ large, ^ tremendous, ^ >> <<hairy ^ slobbery ^ horned ^ clawed ^ >> <<brute ^ beast ^ monster>> <<thunders ^ stomps ^ tramps ^ clomps ^ rumbles ^ rolls>> <<across the field ^ across the meadow ^ over>> hoping to play with $you(). ;; The <<big, ^ huge, ^ large, ^ tremendous, ^ >> <<hairy ^ slobbery ^ horned ^ clawed ^ >> <<brute ^ beast ^ monster>> flops over in front of $you() happily wriggling on the ground. ;; The <<big, ^ huge, ^ large, ^ tremendous, ^ >> <<hairy ^ slobbery ^ horned ^ clawed ^ >> <<brute ^ beast ^ monster>> excitedly <<thunders ^ stomps ^ tramps ^ clomps ^ rumbles ^ rolls>> <<across the field ^ across the meadow ^ over>> next to you. ;; The <<big, ^ huge, ^ large, ^ tremendous, ^ >> <<hairy ^ slobbery ^ horned ^ clawed ^ >> <<brute ^ beast ^ monster>> <<happily ^ joyfully>> leaps into air. ;; The <<big, ^ huge, ^ large, ^ tremendous, ^ >> <<hairy ^ slobbery ^ horned ^ clawed ^ >> <<brute ^ beast ^ monster>> chases butterflies around the <<field ^ meadow ^ grass ^ flowers>>."
# Beast:19 ends here



# And the responses to being /pet/:


# [[file:../../../projects/mud.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."
#
@set beast/pet_concerned_response = "$You() can't get near the big, hairy beast to pet it. It seems concerned."
#
@set beast/pet_interested_response = "The big hairy beastie keeps its distance, but seems curious about $you()."
#
@set beast/pet_friendly_response = "The << big, ^ huge, ^ large, ^ tremendous, ^ >> << hairy ^ slobbery ^ horned ^ clawed ^ >> << brute ^ beast ^ monster>> << flops ^ rolls >> over << in the grass ^>> as $you() $conj(give) it belly rubs. ;; The << big, ^ huge, ^ large, ^ tremendous, ^ >> << hairy ^ slobbery ^ horned ^ clawed ^ >> << brute ^ beast ^ monster>> << flops ^ rolls >> over << in the grass ^>> as $you() $conj(rub) its belly. ;; $You() $conj(pet) the << big, ^ huge, ^ large, ^ tremendous, ^ >> << hairy ^ slobbery ^ horned ^ clawed ^ >> << brute ^ beast ^ monster>> . ;; $You() $conj(scratch) the << nose ^ ears >> of the  << big, ^ huge, ^ large, ^ tremendous, ^ >> << hairy ^ slobbery ^ horned ^ clawed ^ >> << brute ^ beast ^ monster>>. ;; The << big, ^ huge, ^ large, ^ tremendous, ^ >> << hairy ^ slobbery ^ horned ^ clawed ^ >> << brute ^ beast ^ monster>> leans forward as $you() $conj(scratch) its nose."
#
@set beast/pet_ecstatic_response = "While << excited ^ ecstatic ^ squirmy >>, the << big, ^ huge, ^ large, ^ tremendous, ^ >> << hairy ^ slobbery ^ horned ^ clawed ^ >> << brute ^ beast ^ monster>> << lays ^ gets >> down so $you() can << pet ^ scratch >> << the top of its head ^ the back of its neck ^ its nose ^ the sides of its face >>. It closes its eyes and purrs. ;; << The squirmy little devil. ^ >> $conj(You) << can ^ >> << barely ^ hardly >> scratch the << nose ^ ears ^ neck ^ top of the head >> of the  << big, ^ huge, ^ large, ^ tremendous, ^ >> << hairy ^ slobbery ^ horned ^ clawed ^ >> << brute ^ beast ^ monster>>  as it << squirms around ^ wriggles it backend >>. It << can hardly ^ can't >> contain its excitement. ;; The << big, ^ huge, ^ large, ^ tremendous, ^ >> << hairy ^ slobbery ^ horned ^ clawed ^ >> << brute ^ beast ^ monster>> wriggles around before << flopping ^ rolling >> over << in the grass ^>> as $you() $conj(give) it belly rubs. ;; The << big, ^ huge, ^ large, ^ tremendous, ^ >> << hairy ^ slobbery ^ horned ^ clawed ^ >> << brute ^ beast ^ monster>> wriggles and squirms excitedly before it << flops ^ rolls >> over << in the grass ^>> as $you() $conj(rub) its belly."
# Beast:20 ends here


# The river from the [[Field]] flows into a marsh:


# [[file:../../../projects/mud.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
# Mellow Marsh:1 ends here



# And =look south= should show:


# [[file:../../../projects/mud.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



# Describe the muddy marsh:


# [[file:../../../projects/mud.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



# And a description of the marsh:


# [[file:../../../projects/mud.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. <morning>Colorful |Ybirds|n in the sparse tree surrounding the marsh yell out a loud chorus.</morning> <afternoon>Purple herons and other marsh |Ybirds|n hunt in the tall swamp grass.</afternoon> <evening>Glowing |Yfireflies|n create a synchronized light show over the swamp grass in the deepening dusk.</evening> <night>Giant pink and purple |Ymoths|n flutter over the dark flowers.</night>|/A small |Yhut|n, perched on three |Ystilts|n to keep it dry, stands in middle of the slough.
# Mellow Marsh:4 ends here



# And a new state when the house is bound:


# [[file:../../../projects/mud.org::*Mellow Marsh][Mellow Marsh:5]]
@desc/bound here = The river spreads into a muddy marsh full of |Ygrass|n and tall, white-topped |Yreeds|n. <morning>Colorful |Ybirds|n in the sparse tree surrounding the marsh yell out a loud chorus.</morning> <afternoon>Purple herons and other marsh |Ybirds|n hunt in the tall swamp grass.</afternoon> <evening>Glowing |Yfireflies|n create a synchronized light show over the swamp grass in the deepening dusk.</evening> <night>Giant pink and purple |Ymoths|n flutter over the dark flowers.</night>|/|/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



# And =look north= should show:


# [[file:../../../projects/mud.org::*Mellow Marsh][Mellow Marsh:6]]
@desc north = The meadow to the north looks easier to walk around.
# Mellow Marsh:6 ends here



# Describe the muddy marsh:


# [[file:../../../projects/mud.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



# Details for a more immersive experience:


# [[file:../../../projects/mud.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]]
@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]]
@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]]
@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]]
@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]]
@detail pixie;pixies = The pixies ignore you as their coreography keeps them focused on their dance.
# Mellow Marsh:13 ends here

# [[file:../../../projects/mud.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]]
@detail mud = Pretty brown and sticky.
# Mellow Marsh:15 ends here


# 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]]
# @teleport/quiet mp08
#
@create/drop muddy river;river;stream;water: typeclasses.drinkables.Water
#
@lock river = get:false()
#
@set river/get_err_msg = "Slippery things, those rivers. Seems you would need |gfill|n a |gbottle|n, or at least a cup to hold the muddy water."
#
@desc river = A muddy, almost stagnant river. Smells like a fecund stew of moist dirt and decomposing swamp herbage.
#
@set river/fill_name = "muddy water"
#
@set river/fill_desc = "muddy water from the marsh."
#
@set river/fill_msgs = ["$You() << $conj(get) ^ $conj(kneel) >> down, and $conj(fill) $pron(your) {2} with the muddy water."]
# Muddy Water:1 ends here


# Create a puppet of the bird hunting frogs and pixies. :-D


# [[file:../../../projects/mud.org::*Purple Heron][Purple Heron:1]]
@create/drop purple heron: typeclasses.npcs.Eliza
#
@lock purple heron = get:false()
#
@set purple heron/get_err_msg = "You try to get it, but it just flies out of reach."
# Purple Heron:1 ends here



# What data file of responses should we use?


# [[file:../../../projects/mud.org::*Purple Heron][Purple Heron:2]]
@set heron/data_file = "npcs.txt"
#
@set heron/speech_vocalizations = ["says", "croaks", "squawks"]
# Purple Heron:2 ends here



# Note that we give him a male gender:


# [[file:../../../projects/mud.org::*Purple Heron][Purple Heron:3]]
@set heron/gender = "neutral"
# Purple Heron:3 ends here



# Prefix article?


# [[file:../../../projects/mud.org::*Purple Heron][Purple Heron:4]]
@set heron/article = "The"
# Purple Heron:4 ends here



# And a good description that I can rework:


# [[file:../../../projects/mud.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



# Since it is an NPC it has certain mutterings it can do:


# [[file:../../../projects/mud.org::*Purple Heron][Purple Heron:6]]
@set heron/muttering_file = "jethro_tull_songs.txt"
#
@set heron/muttering_gap = 7
#
@set heron/muttering_interval = 360  # Little over 3 minutes
# Purple Heron:6 ends here

# [[file:../../../projects/mud.org::*Purple Heron][Purple Heron:7]]
@set heron/muttering_formats = [
      "sings to |oself as if no one is listening, \"{0}\"",
      "continues to sing to |oself, \"{0}\"",
      "croons to |oself, \"{0}\"",
      "finishes |p verse, \"{0}\"|/",
  ]
# Purple Heron:7 ends here



# And add the absent-minded singing script:


# [[file:../../../projects/mud.org::*Purple Heron][Purple Heron:8]]
@script heron = typeclasses.scripts.Muttering
# Purple Heron:8 ends here


# The reed can be a [[file:~/src/moss-n-puddles/typeclasses/consumables.py::class Producer(Object):][producer]] that makes ten foot poles … needed to get into the hut.


# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:1]]
@create/drop lot of tall reeds;tall reeds;reeds: typeclasses.consumables.Producer
# Ten-foot Poles:1 ends here



# With a description:

# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:2]]
@desc reeds = Extremely tall, white reeds tipped with white gooey clumps. One could hazzard a guess that with a little manipulation, one could make something from them.
# Ten-foot Poles:2 ends here



# We have to have the reeds describe what it /makes/:

# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:3]]
@set reeds/make_name = "ten-foot pole"
# Ten-foot Poles:3 ends here



# And a verb when they /get/ the consumable:

# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:4]]
@set reeds/make_verb = "$conj(pluck) and $conj(shape) a"
# Ten-foot Poles:4 ends here



# And a commentary:


# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:5]]
@set reeds/make_note = " from a marsh reed."
# Ten-foot Poles:5 ends here



# And the reeds needs to know the /description/ of the Consumable, so that it can attach that:

# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:7]]
@set reeds/make_desc = "A long pole shaved from a marsh reed."
# Ten-foot Poles:7 ends here



# How much is there when you pick them?

# [[file:../../../projects/mud.org::*Ten-foot Poles][Ten-foot Poles:8]]
@set reeds/make_amount = 1
# Ten-foot Poles:8 ends here


# Part of the [[Potions and their Ingredients][Alchemist Path]], we use /pixie dust/ to create a [[Trippy Potion]].

# We put this quote in the book:
# #+begin_quote
# I’ve noticed Pixies often dance in the marshlands to the East, but are often invisible except in the evenings. I’ve attempted to discuss a trade for pixie dust, but often luck out as they often pay more attention to their choreography than any trinkets I could produce.
# #+end_quote

# And create it here in the Marsh:


# [[file:../../../projects/mud.org::*Pixie Dust][Pixie Dust:1]]
# @teleport/quiet mp08
#
@create/drop patch of glitter;pixie dust;dust: typeclasses.consumables.Producer
#
@desc pixie dust = As you look at reeds and marsh grass, you notice the shiny glitter is actually dander from pixies... pixie dust. With a little effort, you could gather a small sack of it.
#
@set pixie dust/make_name = "sack of pixie dust"
#
@set pixie dust/make_verb = "$conj(collect) and $conj(fill) a"
#
@set pixie dust/make_class = "typeclasses.objects.Object"
#
@set pixie dust/make_desc = "Small bag of the good, shiny stuff."
#
@set pixie dust/make_amount = 1
#
# And we can't see them until we are an alchemist:
@lock pixie dust = view:tag(alchemist)
# Pixie Dust:1 ends here

# [[file:../../../projects/mud.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
# Trampoli’s Hut on Stilts:1 ends here



# And describe it as =hut=:


# [[file:../../../projects/mud.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



# 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]]
@lock hut on stilts = traverse:tag(enter_hut_nope, mp)
# Trampoli’s Hut on Stilts:3 ends here



# Let’s add an alias:


# [[file:../../../projects/mud.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]]
@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



# And we need to create a second exit:


# [[file:../../../projects/mud.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



# Let’s add an alias:


# [[file:../../../projects/mud.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



# And describe it:


# [[file:../../../projects/mud.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



# 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]]
@lock rope-bound hut = traverse:holds('ten-foot pole')
# Trampoli’s Hut on Stilts:9 ends here



# And a good reason why you need the pole:


# [[file:../../../projects/mud.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



# 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]]
@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



# 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]]
@teleport/tonone rope-bound hut
# Trampoli’s Hut on Stilts:12 ends here


# Let’s go inside to decorate:


# [[file:../../../projects/mud.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, bags and boxes, indicate the owner doesn't entertain much. Stairs lead up to a spacious loft with a bed.
# Inside Trampoli’s Hut:1 ends here



# And describe leaving:


# [[file:../../../projects/mud.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]]
@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



# And the details:


# [[file:../../../projects/mud.org::*Inside Trampoli’s Hut][Inside Trampoli’s Hut:4]]
@detail herbs = Clusters 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]]
@detail jars = Sealed jars of fruits, vegetables, herbs and spices.
# Inside Trampoli’s Hut:5 ends here


# 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]]
@tel/quiet Homey Hut
#
@create/drop assortment of jars;jars;jar: typeclasses.puzzles.Changling
# Jars:1 ends here



# Can’t get them:


# [[file:../../../projects/mud.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?\""
# Jars:2 ends here



# And the generate description:


# [[file:../../../projects/mud.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"
#
@set jars/desc_postfix = ""
# Jars:3 ends here



# And now for a list of the contents:


# [[file:../../../projects/mud.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.",
       "Mermaid Tears|n. Clear, crystalline droplets that shimmer with a hint of blue, believed to bring good fortune.",
       "Phoenix Ashes|n. A small jar filled with fine, red and gold ash, said to have the power of rebirth.",
       "Enchanted Rose Petals|n. Dried petals that change color with the phases of the moon, said to attract love.",
       "Eye of Newt|n. Filled with many small eyeballs.",
       "Timekeeper's Sand|n. Fine, golden sand that flows slowly, rumored to have the power to manipulate time.",
       "Cursed Bone Shards|n. Jagged pieces of bone, each one etched with strange symbols and glowing faintly.",
      "Enchanted Honey|n. Thick, golden honey that glimmers with tiny flecks of light, like captured sunlight.",
       "Faerie Wings|n. Delicate, translucent wings that shimmer in various colors, said to grant agility.",
       "Elemental Stones|n. Small, smooth stones representing earth, air, fire, and water, each with a unique glow.",
       "Owlbear Hair|n. Strands of shimmering hair from various magical creatures, said to enhance spells.",
       "Frosted Rose Petals|n. Dried flowers that appear to be covered in frost, said to bring winter's magic.",
       "Toadstool Caps|n. Vibrant mushroom caps of red, orange, and yellow, and adorned with delicate white speckles that catch the light.",
       "Glowcaps|n. Clusters of tiny, bioluminescent mushrooms that emit a soft, greenish glow.",
       "Dream|n. Fluffy, cotton-like wisps gently floating, resembling miniature clouds in the jar.",
       "Mandrake Root|n. A twisted, gnarled root with a faintly green hue, nestled in a jar of dark soil.",
     )
# Jars:4 ends here


# Like the [[*Jars][Jars]], the herbs return a different response each time they are viewed.


# [[file:../../../projects/mud.org::*Herbs][Herbs:1]]
@create/drop collection of herbs;herbs;herb: typeclasses.puzzles.Changling
# Herbs:1 ends here



# While the skull protects the jars, we will have the demon stop the herbs from being pinched.


# [[file:../../../projects/mud.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]]
@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 "
#
@set herbs/desc_postfix = " Tied with << twine ^ string ^ lace >> and << hanging from a rafter ^ hung from a nail ^ dangling from a post of a chair >>."
# Herbs:3 ends here



# And the individiaul 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]]
@set herbs/descs = (
       "grayish-green, crinkled leaves, and has a strong, earthy aroma, like sage.",
       "small, purple flowers, with that sweet, lavender scent.",
       "thin, woody needles, and has a strong, pine-like fragrance, like rosemary.",
       "small, white flowers with yellow centers, resembling tiny daisies.",
       "tiny, greenish-brown leaves, with a robust, herbal scent, like thyme.",
       "dark green leaves with a refreshing, minty aroma.",
       "brown leaves, with a refreshing, minty aroma.",
       "dark green and crinkled leaves, and have a sweet, peppery scent"
       "brown, crinkled leaves, with a sweet, peppery, almost basil-like scent"
       "grayish-green, feathery leaves, with a slightly bitter, mugwort-like aroma.",
       "small, white and yellow flowers that have a feathery appearance, like yarrow.",
       "dark green, almost brown leaves, with a slightly bitter aroma.",
       "dark green leaves, some almost brown, with a coarse texture and earthy scent, like nettle.",
       "feathery fronds, ranging from light green to brown, with a sweet, anise-like scent.",
       "purple flowers (some brown), with a spiky center and a slightly sweet aroma, like echinacea.",
       "bright orange to yellow flowers, with a slightly sweet, herbal scent.",
       "dark green, smooth leaves, and have a strong, aromatic scent, like bay.",
       "grayish-green, feathery leaves with a distinctive, bitter aroma.",
       "brown and woody roots, with a strong, earthy Valerian-like smell.",
       "brown, woody root with a sweet, distinct aroma, like licorice.",
     )
# Herbs:4 ends here


# To give some character, we create some interesting art that decorates this hut.


# [[file:../../../projects/mud.org::*Talismans][Talismans:1]]
@detail talismans;talisman = A wood |Ycarving|n, a painted |Yskull|n, and curiously shaped |Ysculpture|n made from bundles of reeds, give the impression of inducing luck while showing a level of respect for the land.
# Talismans:1 ends here


# 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]]
@create/drop painted skull
#ve
@desc skull = Painted with arcane symbols, a wolf skull sports curving, corrugated goat horns.
#
@lock skull = get:false()
#
@set skull/get_err_msg = "It appears firmly attached to the wall where it hangs."
#
@set skull/hidden_tag = "hidden_wolf_skull"
#
@lock skull = view:tag(hidden_wolf_skull)
# Horned Wolf Skull:1 ends here


# Perhaps the carving is actually the maid or something that could give hints.


# [[file:../../../projects/mud.org::*Demon Carving][Demon Carving:1]]
@create/drop wood carving;carvings;daemon;imp
#
@desc carving = While rustic, the carving shows exquisite craftsmanship and artistry in its rendering of an daemon creature, less sinister and more impish.
#
@lock carving = get:false()
#
@set carving/get_err_msg = "As you reach for the carving, it promptly runs away."
#
@set carving/hidden_tag = "hidden_demon_carving"
#
@lock carving = view:tag(hidden_demon_carving)
# Demon Carving:1 ends here


# The reeds should give a subtle hint to something that could be /spoken/ aloud.


# [[file:../../../projects/mud.org::*Reed Sculpture][Reed Sculpture:1]]
@create/drop reed sculpture;reed;sculpture
#
@desc reed = The reed bundle, twisted and shaped in a six-spoke star, sports a blue tie.
#
@lock reed = get:false()
#
@set reed/get_err_msg = "It appears firmly attached to the wall where it hangs."
#
@detail tie = A blue ribbon with gold embroidery that spells: B U I O
#
@set reed/hidden_tag = "hidden_reed_sculpture"
#
@lock reed = view:tag(hidden_reed_sculpture)
# Reed Sculpture:1 ends here



# The primary treasure is the horn. Anyone can acquire it, and keep it as a way to control the Leaf Boat.  We generate them every 4 hours:


# [[file:../../../projects/mud.org::*Reed Sculpture][Reed Sculpture:3]]
py timed_script = evennia.create_script(key="Create Horns",
                                        typeclass='typeclasses.scripts.CreateHorns',
                                        interval=14400,
                                        start_delay=False,
                                        autostart=True,
                                        attributes=[("destination", here)] )
# Reed Sculpture:3 ends here


# 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]]
@create/drop a bucket of torches: typeclasses.consumables.Producer
# Torches:1 ends here



# With a description:


# [[file:../../../projects/mud.org::*Torches][Torches:2]]
@desc bucket = A tall wood bucket full of resin-coated torches.
# Torches:2 ends here



# We have to have the bucket describe what it /makes/:


# [[file:../../../projects/mud.org::*Torches][Torches:3]]
@set bucket/make_name = "torch"
# Torches:3 ends here



# And a verb when they /get/ the consumable:


# [[file:../../../projects/mud.org::*Torches][Torches:4]]
@set bucket/make_verb = "$conj(take) a"
# Torches:4 ends here



# And a commentary:


# [[file:../../../projects/mud.org::*Torches][Torches:5]]
@set bucket/make_note = " from the bucket"
# Torches:5 ends here



# The torches are special in that they last longer.

# [[file:../../../projects/mud.org::*Torches][Torches:6]]
@set bucket/make_class = "typeclasses.lightables.Torch"
# Torches:6 ends here



# And the bucket needs to know the /description/ of the Consumable, so that it can attach that:


# [[file:../../../projects/mud.org::*Torches][Torches:7]]
@set bucket/make_desc = "Made from marsh grass and reeds."
# Torches:7 ends here



# How much is there when you pick them?

# [[file:../../../projects/mud.org::*Torches][Torches:8]]
@set bucket/make_amount = 1
# Torches:8 ends here


# Create a puppet of the lady that owns the hut.


# [[file:../../../projects/mud.org::*Trampoli the Witch][Trampoli the Witch:1]]
@create/drop Trampoli;old lady: typeclasses.puppets.Puppet
# Trampoli the Witch:1 ends here



# Note that we give him a male gender:


# [[file:../../../projects/mud.org::*Trampoli the Witch][Trampoli the Witch:2]]
@set old lady/gender = 'female'
# Trampoli the Witch:2 ends here



# Work around the =pose= bug:


# [[file:../../../projects/mud.org::*Trampoli the Witch][Trampoli the Witch:3]]
@py bt = self.search('old lady'); bt.sdesc.add('old lady'); bt.db.pose = 'playing with a deck of cards'
# Trampoli the Witch:3 ends here

# [[file:../../../projects/mud.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
# Trampoli the Witch:5 ends here



# And a good description that I can rework:


# [[file:../../../projects/mud.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



# And an unpuppeted, sleeping, description:


# [[file:../../../projects/mud.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



# If I do this, then she can’t really be puppeted.


# [[file:../../../projects/mud.org::*Trampoli the Witch][Trampoli the Witch:8]]
@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"
# Trampoli the Witch:8 ends here


# The dock leads out into a strange sea. The break in the trees lets you see the sky. Looks like a nice place to relax.

# Return to the Forest:

# [[file:../../../projects/mud.org::*Lazy Dock][Lazy Dock:1]]
@teleport mp01
# Lazy Dock:1 ends here



# And tunnel to the dock:

# [[file:../../../projects/mud.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



# With a mesage 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]]
@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]]
@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



# And move ourselves there:

# [[file:../../../projects/mud.org::*Lazy Dock][Lazy Dock:5]]
@teleport mp06
# Lazy Dock:5 ends here



# And describe this.

# [[file:../../../projects/mud.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



# And details?


# [[file:../../../projects/mud.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?
#
@detail lavender;flowers;flower;lavender flowers = The water is the |wcolor|n of lavender, not actually lavender. Hrm. Could it possibly be |wlavender tea|n?
# Lazy Dock:7 ends here



# And describe the walk back into the forest:

# [[file:../../../projects/mud.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



# And a description:

# [[file:../../../projects/mud.org::*Lazy Dock][Lazy Dock:9]]
@desc north = This path leads into the forest of collosal trees.
# Lazy Dock:9 ends here


# 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]]
# @teleport/quiet mp06
#
@create/drop lavender sea;sea;water;bay: typeclasses.drinkables.Water
#
@desc sea = A gently waving sea. Too bad the shore doesn't respond with a greeting of its own.  Is that a |Yboat|n you see sailing in the distance?
#
@lock sea = get:false()
#
@set sea/get_err_msg = "You can only hold the sea in your heart. Perhaps a bottle, or at least a cup, could hold the salty water."
#
@set sea/fill_name = "salt water"
#
@set sea/fill_desc = "salty water with a purple hue."
#
@set sea/fill_msgs = ["$You() $conj(reach) down from the dock, and $conj(fill) $pron(your) {2} with the << salty ^ lavender ^ fragrant >> water."]
# Lavender Sea:1 ends here


# 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]]
@create/drop chair;lounge chair:typeclasses.sittables.Sittable
# Chair:1 ends here



# How descriptive:

# [[file:../../../projects/mud.org::*Chair][Chair:2]]
@desc chair = A cushioned wood chair of craftsmanship.|/Looks good for being out in the weather.
# Chair:2 ends here



# Can’t steal this chair either:

# [[file:../../../projects/mud.org::*Chair][Chair:3]]
@lock chair = get:false()
#
@set chair/get_err_msg = "It's way too heavy for you to lift."
# Chair:3 ends here


# 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]]
@create/drop fishing pole;pole:typeclasses.fishing.FishingPole
# Fishing Pole:1 ends here



# With a description:

# [[file:../../../projects/mud.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



# 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]]
@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?"
# Fishing Pole:3 ends here



# What about some details:

# [[file:../../../projects/mud.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


# 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]]
@create/drop sign:typeclasses.readables.Readable
# Sign:1 ends here



# Should the description also be the message?

# [[file:../../../projects/mud.org::*Sign][Sign:2]]
@desc sign = You see a wood sign tied with a rope around the back of the chair. It reads, |wFish at your own annoyance. Please return pole when finished.|n
# Sign:2 ends here



# Might as well allow the user to read it:

# [[file:../../../projects/mud.org::*Sign][Sign:3]]
@set sign/inside = "Fish at your own annoyance. Please return pole when finished."
# Sign:3 ends here



# And lock down the sign:

# [[file:../../../projects/mud.org::*Sign][Sign:4]]
@lock sign = get:false()
#
@set sign/get_err_msg = "This granny knot holding the sign to the chair is serious. You can't take it."
# Sign:4 ends here


# 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]]
@teleport/quiet mp06
#
@dig Shore;mp15 :typeclasses.rooms_weather.TimeWeatherRoom = south along shore;shore;south;s,north to dock;north;n;dock
# Sandy Shore:1 ends here



# With a mesage about leaving the trees so that I don’t have to repeat that in the room description:

# [[file:../../../projects/mud.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



# And a description:

# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:3]]
@desc south = You see a shack down along the sandy shore.
# Sandy Shore:3 ends here



# And move ourselves there:

# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:4]]
@teleport mp15
# Sandy Shore:4 ends here



# And describe the walk back to the dock:

# [[file:../../../projects/mud.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



# And a description:

# [[file:../../../projects/mud.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]]
@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.
# Sandy Shore:7 ends here



# And details?


# [[file:../../../projects/mud.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 the sea in the distance?
#
@detail boat;ship = The mastless ship looks like a giant leaf. Wonder if it comes to shore?
#
@detail shack = Standing crookedly at the edge of the sandy shore, this shack's weathered planks, bleached by the salty mist, imparts a ghostly appearance. The roof, adorned with seashells and driftwood, appears to be a patchwork of nature's treasures, inviting curious souls to uncover the secrets hidden within.
# Sandy Shore:8 ends here


# 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]]
@create/drop lot of sand;sand : typeclasses.consumables.Producer
#
@desc sand = Glittery sand with small flecks of lavender-colored gems.
#
@set sand/make_name = "bag of sand"
#
@set sand/make_verb = "$conj(fill) a small"
#
@set sand/make_desc = "Small leather pouch of sand with lavender gems."
#
@lock sand = view:tag(hidden_sand)
# Sand:1 ends here


# 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]]
@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.
#
@set pine/make_class = "typeclasses.consumables.Herb"
#
@set pine/make_name = "yellow flower"
#
@set pine/make_verb = "$conj(pick) a small"
#
@set pine/make_desc = "Briny smelling flower with purple spots."
#
@lock pine = view:tag(alchemist)  # We want the user to be able to "look pine" as a detail?
# Pine Flowers:1 ends here


# We make the sign as an “object” for others to read:


# [[file:../../../projects/mud.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
#
@set sign/inside = "For Rent. See Dabbler for details."
#
@lock sign = get:false()
# Sign:1 ends here


# Let’s keep this pretty empty.


# [[file:../../../projects/mud.org::*Salty Shack][Salty Shack:1]]
@teleport/quiet mp15
#
@dig Salty Shack;mp16 = locked door;door;inside,door to outside;door;outside;leave;exit
# Salty Shack:1 ends here



# And described the exit:


# [[file:../../../projects/mud.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."
# Salty Shack:2 ends here



# And lock the exit:


# [[file:../../../projects/mud.org::*Salty Shack][Salty Shack:3]]
@lock door = traverse:tag(open_shack_door, mp)
#
@set door/err_traverse = "The door is obviously locked."
# Salty Shack:3 ends here



# Generic description of the insides of this house:


# [[file:../../../projects/mud.org::*Salty Shack][Salty Shack:4]]
@teleport/quiet mp16
#
@desc here = The shack is curiously bare and devoid of all personality.
# Salty Shack:4 ends here



# And describe the exit:


# [[file:../../../projects/mud.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."
# Salty Shack:5 ends here



# Return to the forest:

# [[file:../../../projects/mud.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]]
@dig Grotto;mp04 :typeclasses.rooms_weather.TimeWeatherRoom = west footpath;west;w,east footpath;east;e;path;footpath
# Grotto:2 ends here



# With a nice message about wandering:

# [[file:../../../projects/mud.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



# And a description:

# [[file:../../../projects/mud.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



# Jump into the new room:

# [[file:../../../projects/mud.org::*Grotto][Grotto:5]]
@teleport mp04
# Grotto:5 ends here



# And describe the tree and the door:


# [[file:../../../projects/mud.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



# A description if they look east:

# [[file:../../../projects/mud.org::*Grotto][Grotto:7]]
@desc east = A winding footpath leads through the forest of giant trees.
# Grotto:7 ends here



# And a nice journey message to go east in of the forest:

# [[file:../../../projects/mud.org::*Grotto][Grotto:8]]
@set east/traverse_msg = "The mossy tree roots makes for an interesting path..."
# Grotto:8 ends here



# And extra things to see:


# [[file:../../../projects/mud.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



# And the bridge:


# [[file:../../../projects/mud.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



# And the cabbages? And ferns?


# [[file:../../../projects/mud.org::*Grotto][Grotto:11]]
@detail cabbage;cabbages;skunk cabbage;skunk cabbages = Large glossy green leaves with big yellow flowers that looks like cobras in drag. They hiss as you cross the |Ybridge|n.
#
@detail fern;ferns = Sword ferns rattling sabers against the wards from the Maiden Hairs' flailing their fronds.
# Grotto:11 ends here


# 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]]
@create/drop berry bush;bush : typeclasses.consumables.Producer
# Berry Bush:1 ends here



# With a description:

# [[file:../../../projects/mud.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



# We have to have the bush describe what it /makes/:

# [[file:../../../projects/mud.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]]
@set bush/make_aliases = ["berries", "brambleberry", "brambleberries"]
# Berry Bush:4 ends here



# And a verb when they /get/ the consumable:

# [[file:../../../projects/mud.org::*Berry Bush][Berry Bush:5]]
@set bush/make_verb = "$conj(pick) a"
# Berry Bush:5 ends here



# 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]]
@set bush/make_desc = "Bright red with flecks of orange, about grape-sized"
# Berry Bush:7 ends here



# How many berries are there when you pick them?

# [[file:../../../projects/mud.org::*Berry Bush][Berry Bush:8]]
@set bush/make_amount = 1
# Berry Bush:8 ends here



# How many berries do you eat at a time:

# [[file:../../../projects/mud.org::*Berry Bush][Berry Bush:9]]
@set bush/make_eat_amount = 1
# Berry Bush:9 ends here



# We can either have a single /eat/ message:

# [[file:../../../projects/mud.org::*Berry Bush][Berry Bush:10]]
@set bush/make_eat_msg = "Sweet and slightly tart. <<Delicious ^ Tangy ^ Mmmm>>."
# Berry Bush:10 ends here



# Or many messages that can be randomly selected:

# [[file:../../../projects/mud.org::*Berry Bush][Berry Bush:11]]
@set bush/make_eat_msgs = [ "Sweet and slightly tart.", "<<Delicious ^ Tangy ^ Mmmm>>.", "Ooo...quite sour.", "A bit ripe, but still good.", "So sweet with a hint of <<orange ^ maple>>." ]
# Berry Bush:11 ends here



# Let the user know when they consumed them all.

# [[file:../../../projects/mud.org::*Berry Bush][Berry Bush:12]]
@set bush/make_finish_msg =
#"Those were <<delicious ^ great>>."
# Berry Bush:12 ends here


# Part of the [[Potions and their Ingredients][Alchemist Path]], we use spring water to create a [[Trippy Potion]].


# [[file:../../../projects/mud.org::*Spring Water][Spring Water:1]]
# @teleport/quiet mp04
#
@create/drop stream of spring water;stream;spring;water: typeclasses.drinkables.Water
#
@lock stream = get:false()
#
@set stream/get_err_msg = "Seriously? You can't get that. Perhaps a bottle, or at least a cup, could hold the fresh water."
#
@desc stream = A small stream, almost hidden behind the ferns and brambleberry bushes, drops down a lush hill, creating a lush, relaxing feeling. The water looks fresh and pure.
#
@set stream/fill_name = "still water"
#
@set stream/fill_desc = "fresh spring water."
#
@set stream/fill_msgs = ["$You() << $conj(get) ^ $conj(kneel) >> down, and $conj(fill) $pron(your) {2} with the << spring ^ fresh ^ refreshing >> water.", "$You() << $conj(get) ^ $conj(kneel) >> down, and $conj(put) $pron(your) {2} in the cool water, filling it."]
# Spring Water:1 ends here


# The knocker has the ability to make the door “open” using [[https://www.evennia.com/docs/latest/api/evennia.objects.objects.html][on_traverse]] hooks?

# Most of the work of the /knocker/ is in the Python code:

# [[file:../../../projects/mud.org::*Knocker][Knocker:1]]
@create/drop knocker: typeclasses.things.Knocker
# Knocker:1 ends here



# Let’s make the knocker be a surprise.

# [[file:../../../projects/mud.org::*Knocker][Knocker:2]]
@set knocker/hidden_tag = "hidden_knocker"
#
@lock knocker = view:tag(hidden_knocker)
# Knocker:2 ends here



# The knocker shouldn’t be stealable:

# [[file:../../../projects/mud.org::*Knocker][Knocker:3]]
@lock knocker = get:false()
#
@set knocker/get_err_msg = "It appears firmly attached to the door."
# Knocker:3 ends here



# The description is dynamic from the Python code, so we don’t need this statement:

# [[file:../../../projects/mud.org::*Knocker][Knocker:4]]
@desc knocker = The brass face looks at you and winks.
# Knocker:4 ends here



# In order for us to /knock/ on the door, we have to give a =knock= command to the /room/.


# [[file:../../../projects/mud.org::*Knocker][Knocker:5]]
@set knocker/room_to_msg = "mp03"
# Knocker:5 ends here



# The python object has all the knowledge about knocking and whatnot, but we should have the descriptions here. First, what the knocker reads:


# [[file:../../../projects/mud.org::*Knocker][Knocker:6]]
@set here/knock_msg = "You grab the ring"
# Knocker:6 ends here



# Then, what the other’s in the room read:

# [[file:../../../projects/mud.org::*Knocker][Knocker:7]]
@set here/knock_other_msg = "grabs the ring and knocks firmly on the door."
# Knocker:7 ends here



# And an error message if the ring is not with the goblin:

# [[file:../../../projects/mud.org::*Knocker][Knocker:8]]
@set here/knock_err_msg = "This door knocker is defective, as it doesn't have a ring to...er, do the knockin'."
# Knocker:8 ends here



# Since we can remove the ring, let’s create it:

# [[file:../../../projects/mud.org::*Ring][Ring:1]]
@create ring: typeclasses.things.Ring
# Ring:1 ends here



# And give it an alias:

# [[file:../../../projects/mud.org::*Ring][Ring:2]]
@name ring = brass ring;ring
# Ring:2 ends here



# And a description:

# [[file:../../../projects/mud.org::*Ring][Ring:3]]
@desc ring = A brass ring that should be in the door knocker's mouth. How else are you going to knock on a door?
# Ring:3 ends here



# Although we can interact with it, let’s not make it obvious that it is an object:

# [[file:../../../projects/mud.org::*Ring][Ring:4]]
@set ring/hidden_tag = "hidden_ring"
#
@lock ring = view:tag(hidden_ring)
# Ring:4 ends here



# And let’s make it so we can take that:


# [[file:../../../projects/mud.org::*Ring][Ring:5]]
@set ring/can_take = True
# Ring:5 ends here



# Let’s tether the ring to the knocker …


# [[file:../../../projects/mud.org::*Ring][Ring:6]]
@lock ring = tethered:id(knocker)
#
@set ring/tethered_msg = "You put the ring back in the knocker's mouth. \"Mmmuufffmm,\" says the door knocker."
# Ring:6 ends here



# And put the ring in the knocker’s mouth:

# [[file:../../../projects/mud.org::*Ring][Ring:7]]
@teleport/quiet ring = knocker
# Ring:7 ends here



# 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]]
@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]]
@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



# 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]]
@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]]
@set door/err_traverse = "The door seems locked."
# Red Door:3 ends here



# If you do figure out how to get through the door:

# [[file:../../../projects/mud.org::*Red Door][Red Door:4]]
@set door/traverse_msg = "You stoop as you step through the doorway..."
# Red Door:4 ends here



# 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]]
@set door/hidden_tag = "hidden_knocker"
# Red Door:5 ends here



# Fix the inside of the “House”:

# [[file:../../../projects/mud.org::*Inside][Inside:1]]
@teleport mp03
# Inside:1 ends here



# And the best description ever that we don’t use:


# [[file:../../../projects/mud.org::*Inside][Inside:2]]
@desc here = An enormous stone hearth overshadows this round room with dark paneling. A subtle smell of tea and incense. Large, overstuffed chairs sit invitingly by the fireplace. Oddly angled shelves with books and knickknackery adorn the walls and the smell of fresh-baked scones come from the kitchen.
# Inside:2 ends here



# Since we want the description to include the state of the fire, we need some /parts/ to assemble. Still not sure how this should be done.


# [[file:../../../projects/mud.org::*Inside][Inside:3]]
@set here/initial_desc = "You found a cozy, cornerless room."

# Ravenous State
@set here/fire_out = "The room is dim, lit by a single |Ycandle|n in a |Ysconce|n attached to the wall. You see large, overstuffed |Ychairs|n placed by a dark |Yfireplace|n in a large stone |Yhearth|n. Perhaps you could light a fire?"

# Hungry State
@set here/fire_dim = "Large, overstuffed |Ychairs|n sit invitingly close to the dimly glowing embers in the |Yfireplace|n of a stone |Yhearth|n."

# Fed State
@set here/fire_on = "Large, overstuffed |Ychairs|n sit invitingly by a |Yfire|n casting shadows that dance on the dark paneling."

# Full State
@set here/fire_full = "Large, overstuffed |Ychairs|n slightly shield you from the bright light of the roaring fire in the |Yfireplace|n of a stone |Yhearth|n."

# And a final description:
@set here/final_desc = "Oddly angled |Yshelves|n with |Ybooks|n and |Yknickknackery|n adorn the walls around a |Ytapestry|n. The subtle smell of wood smoke, incense and fresh-baked scones from the |Ykitchen|n."
# Inside:3 ends here



# And details:


# [[file:../../../projects/mud.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.
# Inside:4 ends here



# Touch up the exit:

# [[file:../../../projects/mud.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..."
# Inside:5 ends here



# Add some initial ambience:


# [[file:../../../projects/mud.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]]
@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.
#
@detail rose = The rose in both scenes of the |Ytapestry|n has gold petals, but curiously, not depicted in a pot.
#
@detail queen = The beautiful queen shown in the second scene of the |Ytapestry|n, adorned in a flowing gown of shimmering petals and leaves, has hair cascading like a waterfall of flowers.
#
@detail paper = The paper with a gold seal in the |Ytapestry|n sure looks like a contract.
#
@detail trees = The trees shown in the third and fourth scenes in the |Ytapestry|n are the same, and in one scene, they are named, |wErui|n and |wVedui|n.
#
@detail whispering = This curious aspect in the |Ytapestry|n seems ... odd.
# Tapestry Story:1 ends here


# And a fire in the fireplace is a type of /pet/, since we can feed it:

# [[file:../../../projects/mud.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]]
@lock fire = get:false()
# Fireplace:2 ends here



# And a description that will be overridden:

# [[file:../../../projects/mud.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



# Since we mentioned some details, we better mention them:

# [[file:../../../projects/mud.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



# This reference in this detail is obviously, only for me:

# [[file:../../../projects/mud.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



# I imagine a giant picture over the fireplace … need to do something interesting with it.

# [[file:../../../projects/mud.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


# Need a way to produce wood for the fireplace.


# [[file:../../../projects/mud.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]]
@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



# We have to have the wood rack describe what it /makes/:


# [[file:../../../projects/mud.org::*Wood Rack][Wood Rack:3]]
@set wood rack/make_name = "log"
#
@set wood rack/make_aliase = ["wood"]
# Wood Rack:3 ends here



# And a verb when they /get/ the consumable:


# [[file:../../../projects/mud.org::*Wood Rack][Wood Rack:4]]
@set wood rack/make_verb = "$conj(get) a small"
# Wood Rack:4 ends here



# And a commentary:


# [[file:../../../projects/mud.org::*Wood Rack][Wood Rack:5]]
@set wood rack/make_note = " from the wood rack"
# Wood Rack:5 ends here



# This one is optional as it defaults to Consumable:

# [[file:../../../projects/mud.org::*Wood Rack][Wood Rack:6]]
@set wood rack/make_class = "typeclasses.things.Wood"
# Wood Rack:6 ends here



# 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]]
@set wood rack/make_desc = "Cut wood, perfect for feeding to the fire."
# Wood Rack:7 ends here



# How much is there when you pick them?

# [[file:../../../projects/mud.org::*Wood Rack][Wood Rack:8]]
@set wood rack/make_amount = 1
# Wood Rack:8 ends here



# Hide from immediate view:

# [[file:../../../projects/mud.org::*Wood Rack][Wood Rack:9]]
@set wood rack/hidden_tag = "hidden_woodrack"
#
@lock wood rack = view:tag(hidden_woodrack)
# Wood Rack:9 ends here


# What sort of non-books do we want to look at?


# [[file:../../../projects/mud.org::*Knickknacks][Knickknacks:1]]
@create/drop few trinkets;trinkets;trinket;knickknacks;knickknackery;doodads;doodad;knick-knacks: typeclasses.things.Trinket
# Knickknacks:1 ends here



# Let’s not let anything of this sort be picked up:


# [[file:../../../projects/mud.org::*Knickknacks][Knickknacks:2]]
@lock trinkets = get:false()
#
@set trinkets/get_err_msg = "While interesting, perhaps you shouldn't steal Dabbler's personal collection."
# Knickknacks:2 ends here


# One trinket we might create to give to people as a souvenir.


# [[file:../../../projects/mud.org::*Magic 8 Ball][Magic 8 Ball:1]]
@create crystal ball;ball;magic ball: typeclasses.things.CrystalBall
# Magic 8 Ball:1 ends here



# And its description:


# [[file:../../../projects/mud.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



# And we should hide it:


# [[file:../../../projects/mud.org::*Magic 8 Ball][Magic 8 Ball:3]]
@set ball/hidden_tag = "hidden_ball"
#
@lock ball = view:tag(hidden_ball)
#
drop ball
# Magic 8 Ball:3 ends here



# Since we mentioned shelves of books, we should create a Producer that makes a random book.


# [[file:../../../projects/mud.org::*Bookshelf][Bookshelf:1]]
@create/drop number of bookshelves;bookshelf;shelves;bookcase;books;book:typeclasses.readables.Bookshelf
# Bookshelf:1 ends here



# With a good description:

# [[file:../../../projects/mud.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


# 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]]
@create/drop couple overstuffed chairs:typeclasses.sittables.Sittables
# Chairs:1 ends here


# Add aliases afterwards:

# [[file:../../../projects/mud.org::*Chairs][Chairs:2]]
@name chairs = few overstuffed chairs;overstuffed chairs;chairs;chair
# Chairs:2 ends here


# And the description:

# [[file:../../../projects/mud.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



# Can’t steal ‘em:

# [[file:../../../projects/mud.org::*Chairs][Chairs:4]]
@lock chairs = get:false()
#
@set chairs/get_err_msg = "It's way too heavy for you to lift."
# Chairs:4 ends here



# And textual descriptions the object can use:

# [[file:../../../projects/mud.org::*Chairs][Chairs:5]]
@set chairs/adjective = "in"
#
@set chairs/article = "the"
#
@set chairs/singular = "an overstuffed chair"
#
@set chairs/extra = "This feels << ^ very ^ quite>> <<nice ^ cozy ^ comfortable>>.|n"
# Chairs:5 ends here


# 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]]
@create/drop Dabbler;gnome;old gnome: typeclasses.puppets.Puppet
# Character: Dabbler:1 ends here



# Note that we give him a male gender:


# [[file:../../../projects/mud.org::*Character: Dabbler][Character: Dabbler:2]]
@set gnome/gender = 'male'
# Character: Dabbler:2 ends here



# Work around the =pose= bug:


# [[file:../../../projects/mud.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

# [[file:../../../projects/mud.org::*Character: Dabbler][Character: Dabbler:5]]
@set gnome/pose_sleep = "sleeping soundly in a large, overstuffed chair"
#
pose gnome/default = smoking his pipe
# Character: Dabbler:5 ends here



# And a good description that I can rework:


# [[file:../../../projects/mud.org::*Character: Dabbler][Character: Dabbler:6]]
@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:6 ends here



# And an unpuppeted, sleeping, description:


# [[file:../../../projects/mud.org::*Character: Dabbler][Character: Dabbler:7]]
@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:7 ends here



# And we create a couple of objects:

# Like his special teacup:


# [[file:../../../projects/mud.org::*Character: Dabbler][Character: Dabbler:8]]
@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.
#
@give teacup = gnome
# Character: Dabbler:8 ends here


# And my staff:


# [[file:../../../projects/mud.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.
#
@give staff = gnome
# Staff:1 ends here



# And his spells that go with the staff:


# [[file:../../../projects/mud.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 = "<<White ^ Light blue ^ Gray>> mist appears...along with the smell of sulphur... ;; When the smoke clears, an old gnome <<emerges ^ materializes ^ shows up, looking a bit confused>>."
#
@set gnome/magic_msg = "$You() << $conj(strike) ^ $conj(tap) ^ $conj(hit) ^ $conj(whack) >> the << floor ^ ground >> with $pron(your) << gnarled ^ old ^ magic ^ >> staff. ;; << Sparks ^ Colored lights ^ Flashes ^ Flares >> of |moctarine|n << appear ^ emerge ^ materialize >> as << the ^ >> magic << coalesces ^ blends >>..."
# Staff:2 ends here


# The pipe is little more than messages to the smoker and everyone else in the room.


# [[file:../../../projects/mud.org::*Pipe][Pipe:1]]
@create pipe: typeclasses.things.Pipe
# Pipe:1 ends here



# And a description:


# [[file:../../../projects/mud.org::*Pipe][Pipe:2]]
@desc pipe = As tall as its owner with etchings of birds, leaves and magical symbols.
#
@give pipe = gnome
# Pipe:2 ends here


# The pipe is little more than messages to the smoker and everyone else in the room.


# [[file:../../../projects/mud.org::*Journal][Journal:1]]
@create large book;journal: typeclasses.readables.Journal
# Journal:1 ends here



# Writing descriptions:


# [[file:../../../projects/mud.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."
# Journal:2 ends here



# And a description:


# [[file:../../../projects/mud.org::*Journal][Journal:3]]
@desc journal = Leather-bound book, cracked and worn from ages.
#
@give journal = gnome
# Journal:3 ends here


# Need an interesting creature that likes to sleep by the fire, and perhaps give hints to the workings inside.

#   - feed :: ignores all food.
#   - pet :: likes all pets

# Do I match the Big Hairy Beast, or do I create it as a puppet?


# [[file:../../../projects/mud.org::*Stoat][Stoat:1]]
@create/drop wee beastie;Mochi;stoat: typeclasses.pets.WeeBeastie
# Stoat:1 ends here



# And its description:


# [[file:../../../projects/mud.org::*Stoat][Stoat: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:2 ends here



# Can’t get this guy:


# [[file:../../../projects/mud.org::*Stoat][Stoat: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."
# Stoat:3 ends here



# Let’s get a bit more interaction with this pet:


# [[file:../../../projects/mud.org::*Stoat][Stoat:4]]
@set stoat/active_amount = 8
# Stoat:4 ends here



# It’s level doesn’t change much. :-D It is always less interested, just like a cat.


# [[file:../../../projects/mud.org::*Stoat][Stoat:5]]
@set stoat/scared_msg = "Currently, coiled like a sleeping snake on one of the chairs."
# Stoat:5 ends here



# And petting it when someone first comes in?


# [[file:../../../projects/mud.org::*Stoat][Stoat:6]]
@set stoat/pet_scared_response = "While it doesn't stop $you() << from petting it ^ >>, the beastie flashes its long teeth."
# Stoat:6 ends here



# And actions if a friendly person isn’t around:


# [[file:../../../projects/mud.org::*Stoat][Stoat:7]]
@set stoat/scared_actions = "The wee beastie << asleep on the chair ^ >> let's out a yawn brandishing its large canines. ;; The wee beastie << asleep on the chair ^ >> uncoils itself, stretches, and recoils again. ;; You hear a deep throated rumbling from the wee beastie << asleep on the chair ^ >> . ;; The wee beastie twitches in its sleep, as if chasing down imaginary prey."
# Stoat:7 ends here



# Concerned level:


# [[file:../../../projects/mud.org::*Stoat][Stoat:8]]
@set stoat/concerned_msg = "Currently, curled into a ball on one of the chairs."
# Stoat:8 ends here



# Pets?


# [[file:../../../projects/mud.org::*Stoat][Stoat:9]]
@set stoat/pet_concerned_response = "$You() get little response from << your pets of ^ >> << the wee beastie ^ the beastie >>. "
# Stoat:9 ends here



# And actions at this level are more cute than sinister:


# [[file:../../../projects/mud.org::*Stoat][Stoat:10]]
@set stoat/concerned_actions = "The wee beastie << asleep on the chair ^ >> let's out an adorable yawn. ;; The wee beastie << asleep on the chair ^ >> uncurls itself, stretches, and recurls again. ;; You hear a deep purring sounds from the wee beastie << asleep on the chair ^ >>. ;; The wee beastie twitches in its sleep, as if playing with dream toys."
# Stoat:10 ends here



# Interested level:


# [[file:../../../projects/mud.org::*Stoat][Stoat:11]]
@set stoat/interested_msg = "<< Currently ^ It is >> curled into a ball asleep."
# Stoat:11 ends here



# Pets


# [[file:../../../projects/mud.org::*Stoat][Stoat:12]]
@set stoat/pet_interested_response = "The << wee ^ >> beastie adorably moves its head into $your() pets."
# Stoat:12 ends here



# And actions at this level are about as cute as a cat can be:


# [[file:../../../projects/mud.org::*Stoat][Stoat: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:13 ends here



# Friendly level:


# [[file:../../../projects/mud.org::*Stoat][Stoat:14]]
@set stoat/friendly_msg = "<< Currently ^ It is >> purring while curled up sleep."
# Stoat:14 ends here



# Pets


# [[file:../../../projects/mud.org::*Stoat][Stoat: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:15 ends here



# And actions at this level are about as cute as a cat can be:


# [[file:../../../projects/mud.org::*Stoat][Stoat: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:16 ends here



# And this pet loves his gnome.


# [[file:../../../projects/mud.org::*Stoat][Stoat:17]]
@set gnome/wee_beastie_friendly_level=500
# Stoat:17 ends here



# Trigger some events … which can’t work at the moment, since a Pet is not a Puppet … yet:


# [[file:../../../projects/mud.org::*Stoat][Stoat: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."
# Stoat:18 ends here


# Better place to put the tea and scones.


# [[file:../../../projects/mud.org::*Kitchen][Kitchen:1]]
@dig Cramped Kitchen;mp11 = archway to kitchen;kitchen;archway,back to main room;leave;main;back
# Kitchen:1 ends here



# And describe the exit:


# [[file:../../../projects/mud.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."
# Kitchen:2 ends here



# And describing the room:


# [[file:../../../projects/mud.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.
# Kitchen:3 ends here



# And the exit:


# [[file:../../../projects/mud.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."
# Kitchen:4 ends here



# And some details:


# [[file:../../../projects/mud.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.
# Kitchen:6 ends here

# [[file:../../../projects/mud.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...
# Kitchen:7 ends here


# 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]]
@create/drop cabinet;cabinets : typeclasses.consumables.Trolley
# Cabinets and Counter-tops:1 ends here



# We mentioned a /trolley/ with tea, cups and scones:

# [[file:../../../projects/mud.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



# 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]]
py here.search("cabinet").do_bake()
# Cabinets and Counter-tops:3 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]]
@detail teacups = An odd, yet interesting assortment of teacups. Take one.
#
@detail teacup = Each cup is unique. Take one to look further.
# Tea Service:1 ends here



# A [[file:~/src/moss-n-puddles/typeclasses/drinkables.py::class Teapot(Object):][teapot]] will contain a type of tea … either given or randomly chosen.
# A teapot will “fill” a teacup forever, until it is “remade”.


# [[file:../../../projects/mud.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.
# Tea Service:2 ends here


# And of course, you can’t steal the tea pot:

# [[file:../../../projects/mud.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."
# Tea Service:3 ends here


# Pulling on a candle opens a secret staircase!


# [[file:../../../projects/mud.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,up the stairs;stairs;leave;up
# Secret Room:1 ends here



# Look and traverse:


# [[file:../../../projects/mud.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."
# Secret Room:2 ends here


# 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]]
@create/drop sconce;candle holder;candle: typeclasses.consumables.Sconce
# Sconce:1 ends here

# [[file:../../../projects/mud.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



# Connect the exit:


# [[file:../../../projects/mud.org::*Sconce][Sconce:3]]
@set sconce/exit = $search(stairs behind bookcase)
#
@set sconce/room = $search(Cozy House)
# Sconce:3 ends here



# Hide it a bit?


# [[file:../../../projects/mud.org::*Sconce][Sconce:4]]
@set sconce/hidden_tag = "hidden_sconce"
#
@lock sconce = view:tag(hidden_sconce)
# Sconce:4 ends here



# We can =get= an endless supply of candles here:


# [[file:../../../projects/mud.org::*Sconce][Sconce:5]]
@set sconce/make_name = "candle"
# Sconce:5 ends here



# And a verb when they /get/ the consumable:


# [[file:../../../projects/mud.org::*Sconce][Sconce:6]]
@set sconce/make_verb = "$conj(take) the"
#
@set sconce/make_note = ", but another magically appears in its place"
# Sconce:6 ends here



# This one is optional as it defaults to Consumable:

# [[file:../../../projects/mud.org::*Sconce][Sconce:7]]
@set sconce/make_class = "typeclasses.lightables.Candle"
# Sconce:7 ends here



# And the sconce needs to know the /description/ of the Consumable, so that it can attach that:


# [[file:../../../projects/mud.org::*Sconce][Sconce:8]]
@set sconce/make_desc = "Curiously shaped taper with scales like a snake."
# Sconce:8 ends here



# How much is there when you pick them?

# [[file:../../../projects/mud.org::*Sconce][Sconce:9]]
@set sconce/make_amount = 1
# Sconce:9 ends here


# Temporarily move the exit into the room.


# [[file:../../../projects/mud.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



# Let’s reset it to start:


# [[file:../../../projects/mud.org::*Pulling Sconce][Pulling Sconce:2]]
@teleport/tonone stairs behind bookcase
# Pulling Sconce:2 ends here


# Time to create the secret lab, the *Secret Room*.


# [[file:../../../projects/mud.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.
# Inside the Secret Room:1 ends here



# Add aliases that make sense:


# [[file:../../../projects/mud.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."
# Inside the Secret Room:2 ends here



# 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]]
@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



# Are the equipment stuff we could =use=?


# [[file:../../../projects/mud.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]]
@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]]
@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]]
@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



# And tools that definitely need to /stay here/:


# [[file:../../../projects/mud.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


# Can jars be a producer that returns a random jar with a “content”?

# 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]]
@tel/quiet Secret Room
#
@create/drop collection of jars;jars;jar: typeclasses.puzzles.Changling
# Jars:1 ends here



# Can’t get them:


# [[file:../../../projects/mud.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?"
# Jars:2 ends here



# And the generate description:


# [[file:../../../projects/mud.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"
#
@set jars/desc_postfix = ""
# Jars:3 ends here



# And now for a list of the contents:


# [[file:../../../projects/mud.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.",
       "Crystalized Stardust|n. Tiny, sparkling crystals that twinkle like stars, believed to hold the essence of the cosmos.",
       "Moonstone Crystals|n. Iridescent stones that glow softly in the dark, casting a gentle light.",
       "Bottled Lightning|n. A swirling blue liquid that crackles with energy, contained within a glass jar.",
       "Dragon Scale Powder|n. A fine, metallic powder that shifts colors with the light, reminiscent of dragon scales.",
       "Mermaid Tears|n. Tiny, glistening droplets that resemble diamonds, each one capturing a moment of sorrow.",
       "Essence of Shadow|n. A dark, swirling liquid that seems to absorb light, creating an eerie atmosphere.",
       "Shadow Essence|n. A dark, swirling liquid that absorbs light, said to grant invisibility.",
       "Starflower Petals|n. Delicate, translucent petals that shimmer like the night sky, layered in a glass jar.",
       "Whispering Seeds|n. Tiny, dark seeds that seem to rustle softly when the jar is moved, as if alive.",
       "Golden Sand|n. A jar filled with fine, shimmering sand that glows warmly, reminiscent of a sunset.",
       "Wisp of Smoke|n. A swirling, grayish substance that drifts lazily within the confines of its jar.",
       "Nightshade Berries|n. Dark, glossy berries that glisten ominously, nestled in a jar of dark liquid.",
       "Phoenix Ashes|n. A fine, gray powder that sparkles faintly, as if containing remnants of a fiery rebirth.",
       "Silver Thread|n. A spool of shimmering thread that glows softly, appearing almost ethereal in nature.",
       "Timekeeper Sand|n. A jar filled with golden sand that flows slowly, as if measuring the passage of time.",
       "Elven Wine|n. A deep green liquid that sparkles with tiny bubbles.",
       "Ghostly Essence|n. A pale, translucent ichor that swirls with a soft glow.",
       "Celestial Oil|n. A shimmering oil that glows with a soft light.",
       "Cat Shadow|n. A swirling, inky blackness that pulses and shifts.",
     )
# Jars:4 ends here


# A stool to sit while working

# [[file:../../../projects/mud.org::*Stool][Stool:1]]
@create/drop stool:typeclasses.sittables.Sittable
# Stool:1 ends here



# How descriptive:

# [[file:../../../projects/mud.org::*Stool][Stool:2]]
@desc stool = A place to sit while synthesizing experiments.
# Stool:2 ends here



# Can’t steal this stool either:

# [[file:../../../projects/mud.org::*Stool][Stool:3]]
@lock stool = get:false()
# Stool:3 ends here



# Let’s do a funnier message:

# [[file:../../../projects/mud.org::*Stool][Stool:4]]
@set stool/get_err_msg = "Stop trying to steal everything not nailed down."
# Stool:4 ends here



# A mystic book of potions can add a new dimension to the game.


# [[file:../../../projects/mud.org::*Grimoire][Grimoire:1]]
@create/drop leather-bound book;book;grimoire:typeclasses.readables.Book
# Grimoire:1 ends here



# The book’s title and description:


# [[file:../../../projects/mud.org::*Grimoire][Grimoire:2]]
@desc grimoire = An old brown book where even the cover has seen considerable wear with stains and scratches in the leather. The band connect to a gold ring, itself attached to a chain that hooks it to the table. The title reads, |MFavorite Potions|n. Inside, written in beautiful penmanship, the book contains recipes.
# Grimoire:2 ends here



# Lock it down.


# [[file:../../../projects/mud.org::*Grimoire][Grimoire:3]]
@lock grimoire = get:false()
#
@set grimoire/get_err_msg = "The book is chained to the table."
# Grimoire:3 ends here



# And of course, the inside.


# [[file:../../../projects/mud.org::*Grimoire][Grimoire:4]]
@set grimoire/inside = "file:world/alchemy-book.md"
# Grimoire:4 ends here



# The contents must be in a file, and we need to add a pager.

# The prefix can be:


# [[file:../../../projects/mud.org::*Grimoire][Grimoire:5]]
@set grimoire/prefix = "Undoing the brass clasp that bind the old leather book, you open to page one and begin reading the elegant calligraphy..."
# Grimoire:5 ends here


# The cauldron should have a special =look= so a character knows what ingredients they added, and the follow commands:

# - =empty= … the imp will empty the contents
# - =add= (or =give=) an item from the inventory.
# - =create=, =cook= or =mix=
# - =bottle= to create a vial

# What about these commands?

#   - =crush= for use in mortal and pestle


# [[file:../../../projects/mud.org::*Cauldron][Cauldron:1]]
@create/drop black cauldron: typeclasses.alchemy.Cauldron
# Cauldron:1 ends here



# And the details:


# [[file:../../../projects/mud.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



# Lock it down:

# [[file:../../../projects/mud.org::*Cauldron][Cauldron:3]]
@lock cauldron = get:false()
# Cauldron:3 ends here



# The table is a producer of /bottles/.


# [[file:../../../projects/mud.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



# With a description:

# [[file:../../../projects/mud.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



# We have to have the bush describe what it /makes/:

# [[file:../../../projects/mud.org::*Shelf of Bottles][Shelf of Bottles:3]]
@set shelf/make_name = "bottle"
#
@set shelf/make_verb = "$conj(pick up) a"
# Shelf of Bottles:3 ends here



# This one is optional as it defaults to Consumable:

# [[file:../../../projects/mud.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."
#
@set shelf/make_amount = 1
# Shelf of Bottles:4 ends here


# Every secret alchemical lab should have an Imp familiar.


# [[file:../../../projects/mud.org::*Imp][Imp:1]]
@create/drop Impetus;imp: typeclasses.puppets.Puppet
# Imp:1 ends here



# Note that we give him a male gender:


# [[file:../../../projects/mud.org::*Imp][Imp:2]]
@set imp/gender = "neutral"
# Imp:2 ends here



# Work around the =pose= bug:


# [[file:../../../projects/mud.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]]
@set imp/pose_sleep = "sitting on an ornate perch"
#
@pose default imp = sitting on an ornate perch
# Imp:4 ends here



# And a good description that I can rework:


# [[file:../../../projects/mud.org::*Imp][Imp:5]]
@desc imp = Peculiar little fellow gives you are 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

# [[file:../../../projects/mud.org::*Imp][Imp:7]]
@set imp/arrive = "5 ;; tag_all alchemist ;; 240 ;; emote yawns."
# Imp:7 ends here



# Would be nice if it has a variety of responses to speech.


# [[file:../../../projects/mud.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


# A bedroom with a wardrobe that goes to another land sounds great.


# [[file:../../../projects/mud.org::*Bedroom][Bedroom:1]]
@teleport/quiet mp03
#
@dig Bedroom;mp13:typeclasses.rooms.OpenableRoom = stairs up to a loft;up stairs;up;loft;bedroom,down the stairs;down;stairs;leave
# Bedroom:1 ends here



# Look see:


# [[file:../../../projects/mud.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..."
# Bedroom:2 ends here



# And a description:

# [[file:../../../projects/mud.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.
# Bedroom:3 ends here



# And describe the exit:


# [[file:../../../projects/mud.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."
# Bedroom:4 ends here



# And of course, you can see more details:


# [[file:../../../projects/mud.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.
#
@detail pillows = While fluffy, these long pillows could certainly make fine posts for a blanket fort.
#
@detail carpet = The dark red rug has a curious whirlpool pattern.
# Bedroom:5 ends here



# Are the slippers just a red herring?


# [[file:../../../projects/mud.org::*Bedroom][Bedroom:6]]
@create/drop pair slippers
#
@desc slippers = Red-leather and worn with an ornate tassel on top.
#
@lock slippers = tethered:id(mp13)
#
@set slippers/tethered_msg = "The slippers are having none of this adventuring outside of this cozy room, and walk back to the side of the bed."
# Bedroom:6 ends here


# One needs to open it to go to another world.


# [[file:../../../projects/mud.org::*Wardrobe][Wardrobe:1]]
@dig Prairie;mp14 = through the wardrobe;wardrobe,copse of pinion pines;pines;copse;trees;leave
# Wardrobe:1 ends here



# And describe the exit:


# [[file:../../../projects/mud.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."
#
@alias through the wardrobe = the exit
#
@alias through the wardrobe = wardrobe
#
@set here/open_exit = $search(through the wardrobe)
#
@teleport/tonone through the wardrobe
# Wardrobe:2 ends here



# And messages for opening and closing the wardrobe:


# [[file:../../../projects/mud.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:
@set here/close_exit_msg = "The wardrobe door is closed."
# Wardrobe:3 ends here



# 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]]
@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.
# Wardrobe:4 ends here



# The =look= command could be distinguishing using aliases of “the exit” and “the furniture”?


# [[file:../../../projects/mud.org::*Wardrobe][Wardrobe:5]]
@alias wardrobe = the object
# Wardrobe:5 ends here



# Don’t allow it to get taken:


# [[file:../../../projects/mud.org::*Wardrobe][Wardrobe:6]]
@lock wardrobe = get:false()
#
@set wardrobe/get_err_msg = "The wardrobe is way too big to lift."
# Wardrobe:6 ends here


# What am I doing here?


# [[file:../../../projects/mud.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 <morning>a rolling dawn</morning><afternoon>clear, blue skies pushing down the horizon</afternoon><evening>a distant sunset attempting to pull the sky down with it</evening><night> bright, star painted skies</night>.
# Southwest Prairie:1 ends here



# Describe the exit:


# [[file:../../../projects/mud.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."
# Southwest Prairie:2 ends here



# Details?


# [[file:../../../projects/mud.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.
#
@detail campfire;fire = Only a thin wisp of smoke escapes to the skies; fragrating the air.
# Southwest Prairie:3 ends here


# Taken from [[https://en.wikipedia.org/wiki/Mare%27s_Head][Wikipedia]].


# [[file:../../../projects/mud.org::*Mare’s Head][Mare’s Head:1]]
@create/drop Mares Head;head: typeclasses.puppets.Puppet
# Mare’s Head:1 ends here



# Note that we give him a male gender:


# [[file:../../../projects/mud.org::*Mare’s Head][Mare’s Head:2]]
@set mares head/gender = "neutral"
# Mare’s Head:2 ends here



# Work around the =pose= bug:


# [[file:../../../projects/mud.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]]
@set mares head/pose_sleep = "sitting next to a small |Ycampfire|n"
#
@set mares head/pose_default = "sitting next to a small |Ycampfire|n"
#
@pose default mares head = sitting next to a small campfire
# Mare’s Head:4 ends here



# And a good description that I can rework:


# [[file:../../../projects/mud.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]]
@detail ears;ear = They look real, and twitch as if alive.
# Mare’s Head:6 ends here



# And when someone arrives:


# [[file:../../../projects/mud.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



# And what if they attempt to interact?


# [[file:../../../projects/mud.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 ^ A fuzzy ear on the skull of the /me twitches >>."
# Mare’s Head:8 ends here



# 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]]
@create/drop couple long log;log:typeclasses.sittables.Sittables
# Pull up a Log:1 ends here



# And the description:

# [[file:../../../projects/mud.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



# Can’t steal ‘em:

# [[file:../../../projects/mud.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?"
# Pull up a Log:3 ends here



# And textual descriptions the object can use:

# [[file:../../../projects/mud.org::*Pull up a Log][Pull up a Log:4]]
@set log/article = "the"
#
@set log/singular = "the log next to the campfire"
# Pull up a Log:4 ends here



# And now that we are done, say it:


# [[file:../../../projects/mud.org::*Bugs][Bugs:1]]
say I have finished this, the first version, of my creation.
# Bugs:1 ends here
