NPCs can get points to characters

This commit is contained in:
Howard Abrams 2025-08-26 19:52:42 -07:00
parent 43a1aefb49
commit e62c23d15d
4 changed files with 184 additions and 135 deletions

View file

@ -563,14 +563,14 @@ class Listener:
c.adjust_coins(int(m.group(1)))
return
m = match(r"score_all ([a-z_]+)", cmd)
m = match(r"scoring_all ([a-z_]+)", cmd)
if m:
tick = Scores[m.group(1)]
for c in self.characters_here(puppets=True):
c.score(tick)
return
m = match(r"score ([a-z_]+) *?( to|=)? *([a-z_]+)", cmd)
m = match(r"scoring ([a-z_]+) *?( to|=)? *([a-z_]+)", cmd)
if m:
tick = Scores[m.group(1)]
c = self.search(m.group(3))

View file

@ -1,4 +1,4 @@
# The Mist Horn
# The mist horn calls the boat to the character, no matter where they are. We create one regularly in the witchs hut:
@ -23,7 +23,7 @@ py timed_script = evennia.create_script(key="Create Horns",
@set mp06/arrive = "30 ;; gm Did you hear that? Sounds like a distant horn ... Perhaps the wind. ;; gm You think you saw a boat out on the sea ... but maybe not. "
# The Mist Horn:2 ends here
# The Boat
# When the boat is docked, we should have a special /state/ to describe it:
@ -164,7 +164,7 @@ py timed_script = evennia.create_script(key="boat reset",
autostart=True)
# The Boat:15 ends here
# Throne Island
# The boat should land on a distant island.
# We should come up with a *theme* for the entire island, from the “statue” to the puzzles and answers.
@ -252,7 +252,7 @@ $state(boat, A large leaf bobs invitingly in the surf.)
@roomstate shore
# Throne Island:10 ends here
# First Puzzle
# Details on the throne and the statues and maybe moss? What about sitting on the throne?
@ -361,7 +361,7 @@ $state(boat, A large leaf bobs invitingly in the surf.)
@lock arched opening = view:tag(hidden_archway)
# First Puzzle:12 ends here
# Puzzle Two
# Lets make this a dark room where one has to have two feel around for a splinter to light, or bring a torch.
@ -409,7 +409,7 @@ light torch
@detail dome = Perhaps 30 feet high, but as shadows from the flame dance above you, you find it difficult to tell.
# Puzzle Two:5 ends here
# Puzzle Three
# Each time this is “seen”, the response is different, so we use a [[file:~/src/moss-n-puddles/typeclasses/puzzles.py::class Changling(Object):][Changling]]:
@ -469,10 +469,10 @@ light torch
# [[file:../../../projects/mud-adventure.org::*Puzzle Three][Puzzle Three:6]]
@set obelisk/say = { r".*\b[Ww]ater\b": "gm Upon uttering that phrase, sparks of octarine magic and mist appear on the opening on the obelisk. ;; gm A blue medal materializes in the opening. You inspect it, wondering if this is the great prize you've heard about. ;; gift_all blue ;; gm You also notice a secret door! ;; tag_all hidden_antechamber_door" }
@set obelisk/say = { r".*\b[Ww]ater\b": "gm Upon uttering that phrase, sparks of octarine magic and mist appear on the opening on the obelisk. ;; scoring_all blue_medal ;; gm A blue medal materializes in the opening. You inspect it, wondering if this is the great prize you've heard about. ;; gift_all blue ;; gm You also notice a secret door! ;; tag_all hidden_antechamber_door" }
# Puzzle Three:6 ends here
# Puzzle Four
# Another puzzle, another room:
@ -526,7 +526,7 @@ light torch
# [[file:../../../projects/mud-adventure.org::*Puzzle Four][Puzzle Four:6]]
@set gr04/arrive = "4 ;; gm ... You hear a distant dice roll ... ;; gm With your excellent perception, you notice some gold coins hidden in the floor's dust. ;; gm You don't hesitate to relocate those to your pouch. ;; coin_all 10 "
@set here/arrive = "4 ;; gm ... You hear a distant dice roll ... ;; gmm {0} = With your excellent perception, you notice some gold coins hidden in the floor's dust. ;; gma {0} = $You() $conj(relocate) some gold coins on the floor to $pron(your) pouch. ;; coin 10 to {0}"
# Puzzle Four:6 ends here
@ -612,3 +612,20 @@ light torch
# [[file:../../../projects/mud-adventure.org::*Puzzle Four][Puzzle Four:14]]
@set ornate door/traverse_msg = "You open the door, and see that the door exits next to the statue..."
# Puzzle Four:14 ends here
# Evocative.
# [[file:../../../projects/mud-adventure.org::*Stone Island][Stone Island:1]]
@dig/teleport Stone Island;gr05:typeclasses.rooms_weather.TimeWeatherRoom
# Stone Island:1 ends here
# Make sure that it can have a boat state:
# [[file:../../../projects/mud-adventure.org::*Stone Island][Stone Island:2]]
@desc here = Up from the shore, stands six |Ystones|n arranged in a circle. The fragrant breeze creates eddies of leaves that swirl around the stones...and your feet.
$state(boat, A large leaf bobs invitingly in the surf.)
# Stone Island:2 ends here

View file

@ -969,6 +969,9 @@ set timeout 240
expectit "gives you a pipe"
set timeout 20
send "sit\n"
expectit "You sit on the long log"
send "copse\n"
expectit "Bedroom"
@ -1055,6 +1058,9 @@ expectit "The black cauldron is already empty."
send "up\n"
expectit "Cozy House"
send "score\n"
expectit "Total:"
send "give potion to gnome\n"
expectit "You give a potion"

View file

@ -1,4 +1,4 @@
# Create an Avatar
# The first character is special, as it can really /own/ the server. I dont 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.
@ -27,7 +27,7 @@ py self.db.pose = True
pose looking awesome
# Create an Avatar:4 ends here
# The Forest
# 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.
@ -70,7 +70,7 @@ pose looking awesome
@detail flower;flowers = Beautiful, but giant flowers look down on you and nod a friendly greeting.
# The Forest:6 ends here
# Puddle
# With my name, I need to have an object to go with it.
@ -98,7 +98,7 @@ pose looking awesome
@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
# Sticks
# I will have a script auto generate the sticks on a regular basis, but for now, lets just make one that I can drop.
@ -111,7 +111,7 @@ py timed_script = evennia.create_script(key="Create Sticks",
attributes=[("destination", here)] )
# Sticks:1 ends here
# Guest Book
# Players can leave messages in this book. Well see how long I want to leave this.
@ -156,7 +156,7 @@ py timed_script = evennia.create_script(key="Create Sticks",
@detail well;ink well = The well appears to be little more than a depression on the back of the mushroom's cap.
# Guest Book:4 ends here
# Boulder
# 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]]
@ -230,7 +230,7 @@ py timed_script = evennia.create_script(key="Create Sticks",
@set boulder/traverse_msg = "You grab hold of some the |Yvines|n and ivy and pick your way up the boulder from one hold to another... Hrm, these vines would make a great rope."
# Boulder:9 ends here
# Lower Vines
# In case they attempt to get vines here:
# Lets make a nice spot to sit down on:
@ -278,7 +278,7 @@ py timed_script = evennia.create_script(key="Create Sticks",
@set vines/push_msg = "That doesn't seem to do much."
# Lower Vines:5 ends here
# Top of Boulder
# Lets jump to the top of the boulder to proceed:
@ -318,7 +318,7 @@ py timed_script = evennia.create_script(key="Create Sticks",
@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
# Moss
# Lets make a nice spot to sit down on:
# [[file:../../../projects/mud.org::*Moss][Moss:1]]
@ -366,7 +366,7 @@ py timed_script = evennia.create_script(key="Create Sticks",
@set moss/pull_msg = "The moss is a bryophyte, and as such, has attached itself firmly to boulder by rhizoids. So pulling on it doesn't do much good."
# Moss:6 ends here
# Upper Vines
# Lets 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.
@ -447,7 +447,7 @@ py timed_script = evennia.create_script(key="Create Sticks",
@set vines/push_msg = "You push the vines out of the way showing the rock boulder below. Perhaps you should |gget|n these and make something with them."
# Upper Vines:9 ends here
# Gigglecap Mushrooms
# Part of the [[Potions and their Ingredients][Alchemist Path]], we use /gigglecaps/ to create a [[Laughing Potion]].
@ -476,13 +476,13 @@ py timed_script = evennia.create_script(key="Create Sticks",
#
@set mushrooms/make_amount = 1
#
@set mushrooms/make_spell_msgs = "10 ;; $You() $conj(<< giggle ^ chuckle ^ chortle >>) out loud."
@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
# Field
# To the east, lets make a nice meadow. Start at the Forest:
# [[file:../../../projects/mud.org::*Field][Field:1]]
@ -566,7 +566,7 @@ py timed_script = evennia.create_script(key="Create Sticks",
@detail flowers;yellow flowers = "Aren't daffodils just flowers with big ol' schnozzes?"
# Field:10 ends here
# Waterfall
# This is special, in that it should be hidden:
@ -601,7 +601,7 @@ py timed_script = evennia.create_script(key="Create Sticks",
@detail pool = A pool of cool, clear water.
# Waterfall:5 ends here
# Fizzy Water
# The waterfall causes the water in the stream to be /fizzy/, to be part of the [[Potions and their Ingredients][Alchemist Path]] to create a [[Laughing Potion]].
@ -620,10 +620,10 @@ py timed_script = evennia.create_script(key="Create Sticks",
#
@set stream/fill_desc = "sparkling water from waterfall turbulence."
#
@set stream/fill_msgs = ["$You() $conj(<< get ^ kneel >>) down, and $conj(fill) $pron(your) {2} with sparkling efforvesence.", "$You() $conj(<< get ^ kneel >>) down, and $conj(put) $pron(your) {2} in the cool water, filling it."]
@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
# Tickleweed
# Part of the [[Potions and their Ingredients][Alchemist Path]], we use /tickleweed grass/ to create a [[Laughing Potion]].
@ -656,7 +656,7 @@ py timed_script = evennia.create_script(key="Create Sticks",
@lock tickleweed = view:tag(alchemist)
# Tickleweed:1 ends here
# The Lair of the Beast
# To create a place for our big, hairy beast to sleep, first jump to the Meadow:
# [[file:../../../projects/mud.org::*The Lair of the Beast][The Lair of the Beast:1]]
@ -733,7 +733,7 @@ py timed_script = evennia.create_script(key="Create Sticks",
@set leave/traverse_msg = "You leave the dark cave and pass behind the waterfall for the meadow beyond."
# The Lair of the Beast:9 ends here
# Mattress
# Create a mattress you can sit on (and maybe /push/ to get to a secret door):
@ -793,7 +793,7 @@ py timed_script = evennia.create_script(key="Create Sticks",
@set mattress/hidden_tag = "hidden_mattress"
# Mattress:6 ends here
# Dream Mushrooms
# Part of the [[Potions and their Ingredients][Alchemist Path]], we use /dream mushrooms/ to create a [[Trippy Potion]].
# #+begin_quote
@ -824,7 +824,7 @@ py timed_script = evennia.create_script(key="Create Sticks",
@lock mushrooms = view:tag(alchemist)
# Dream Mushrooms:1 ends here
# Beast
# And we create the Big, Hairy Beast:
@ -1017,7 +1017,7 @@ py timed_script = evennia.create_script(key="Create Sticks",
@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
# Mellow Marsh
# The river from the [[Field]] flows into a marsh:
@ -1120,7 +1120,7 @@ py timed_script = evennia.create_script(key="Create Sticks",
@detail mud = Pretty brown and sticky.
# Mellow Marsh:15 ends here
# Muddy Water
# As a future idea of making potions, we can collect /muddy water/, which needs to be turned to wine.
@ -1139,10 +1139,10 @@ py timed_script = evennia.create_script(key="Create Sticks",
#
@set river/fill_desc = "muddy water from the marsh."
#
@set river/fill_msgs = ["$You() $conj(<< get ^ kneel >>) down, and $conj(fill) $pron(your) {2} with the muddy water."]
@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
# Purple Heron
# Create a puppet of the bird hunting frogs and pixies. :-D
@ -1176,63 +1176,54 @@ py timed_script = evennia.create_script(key="Create Sticks",
# Work around the =pose= bug:
# [[file:../../../projects/mud.org::*Purple Heron][Purple Heron:4]]
@set heron/_sdesc = "purple-feathered heron"
# Purple Heron:4 ends here
# Prefix article?
# [[file:../../../projects/mud.org::*Purple Heron][Purple Heron:5]]
# [[file:../../../projects/mud.org::*Purple Heron][Purple Heron:4]]
@set heron/article = "The"
# Purple Heron:5 ends here
# Purple Heron:4 ends here
# And a good description that I can rework:
# [[file:../../../projects/mud.org::*Purple Heron][Purple Heron:6]]
# [[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:6 ends here
# 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:7]]
# [[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:7 ends here
# Purple Heron:6 ends here
# [[file:../../../projects/mud.org::*Purple Heron][Purple Heron:8]]
# [[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:8 ends here
# Purple Heron:7 ends here
# And add the absent-minded singing script:
# [[file:../../../projects/mud.org::*Purple Heron][Purple Heron:9]]
# [[file:../../../projects/mud.org::*Purple Heron][Purple Heron:8]]
@script heron = typeclasses.scripts.Muttering
# Purple Heron:9 ends here
# Purple Heron:8 ends here
# Ten-foot Poles
# The reed can be a [[file:~/src/moss-n-puddles/typeclasses/consumables.py::class Producer(Object):][producer]] that makes ten foot poles … needed to get into the hut.
@ -1289,7 +1280,7 @@ py timed_script = evennia.create_script(key="Create Sticks",
@set reeds/make_amount = 1
# Ten-foot Poles:8 ends here
# Pixie Dust
# Part of the [[Potions and their Ingredients][Alchemist Path]], we use /pixie dust/ to create a [[Trippy Potion]].
# We put this quote in the book:
@ -1321,9 +1312,6 @@ py timed_script = evennia.create_script(key="Create Sticks",
@lock pixie dust = view:tag(alchemist)
# Pixie Dust:1 ends here
# Trampolis Hut on Stilts
# [[file:../../../projects/mud.org::*Trampolis Hut on Stilts][Trampolis Hut on Stilts:1]]
@teleport mp08
#
@ -1424,7 +1412,7 @@ py timed_script = evennia.create_script(key="Create Sticks",
@teleport/tonone rope-bound hut
# Trampolis Hut on Stilts:12 ends here
# Inside Trampolis Hut
# Lets go inside to decorate:
@ -1460,7 +1448,7 @@ py timed_script = evennia.create_script(key="Create Sticks",
@detail jars = Sealed jars of fruits, vegetables, herbs and spices.
# Inside Trampolis Hut:5 ends here
# Jars
# Every time we look at a jar, we see something else … that we cant take. This creates ambiance without adding too much complexity?
@ -1520,7 +1508,7 @@ py timed_script = evennia.create_script(key="Create Sticks",
)
# Jars:4 ends here
# Herbs
# Like the [[*Jars][Jars]], the herbs return a different response each time they are viewed.
@ -1577,7 +1565,7 @@ py timed_script = evennia.create_script(key="Create Sticks",
)
# Herbs:4 ends here
# Talismans
# To give some character, we create some interesting art that decorates this hut.
@ -1585,7 +1573,7 @@ py timed_script = evennia.create_script(key="Create Sticks",
@detail talismans;talisman = A wood |Ycarving|n, a painted |Yskull|n, and curiously shaped |Ysculpture|n made from bundles of reeds, give the impression of inducing luck while showing a level of respect for the land.
# Talismans:1 ends here
# Horned Wolf Skull
# For each talisman, we could create an object, but it wouldnt be able to be taken, and instead of “cant find skull”, we could give a better error message.
@ -1603,7 +1591,7 @@ py timed_script = evennia.create_script(key="Create Sticks",
@lock skull = view:tag(hidden_wolf_skull)
# Horned Wolf Skull:1 ends here
# Demon Carving
# Perhaps the carving is actually the maid or something that could give hints.
@ -1621,7 +1609,7 @@ py timed_script = evennia.create_script(key="Create Sticks",
@lock carving = view:tag(hidden_demon_carving)
# Demon Carving:1 ends here
# Reed Sculpture
# The reeds should give a subtle hint to something that could be /spoken/ aloud.
@ -1655,7 +1643,7 @@ py timed_script = evennia.create_script(key="Create Horns",
attributes=[("destination", here)] )
# Reed Sculpture:3 ends here
# Torches
# The reed can be a [[file:~/src/moss-n-puddles/typeclasses/consumables.py::class Producer(Object):][producer]] that makes ten foot poles … needed to get into the hut.
@ -1724,7 +1712,7 @@ py timed_script = evennia.create_script(key="Create Horns",
@set bucket/make_amount = 1
# Torches:8 ends here
# Trampoli the Witch
# Create a puppet of the lady that owns the hut.
@ -1747,12 +1735,10 @@ py timed_script = evennia.create_script(key="Create Horns",
# [[file:../../../projects/mud.org::*Trampoli the Witch][Trampoli the Witch:3]]
py bt = self.search('old lady'); bt.db.pose = 'playing with a deck of cards'
@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/_sdesc = "old lady"
#
@set old lady/pose_sleep = "napping soundly in bed on the upstairs loft"
#
@pose default old lady = playing with a deck of cards
@ -1785,7 +1771,7 @@ py bt = self.search('old lady'); bt.db.pose = 'playing with a deck of cards'
@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
# Lazy Dock
# 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:
@ -1863,7 +1849,7 @@ Someone has set a nice |Ychair|n for viewing.
@desc north = This path leads into the forest of collosal trees.
# Lazy Dock:9 ends here
# Lavender Sea
# Well get ready for making potions by allowing one to collect water from _all_ the places, like the salty sea:
@ -1885,7 +1871,7 @@ Someone has set a nice |Ychair|n for viewing.
@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
# Chair
# 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]]
@ -1910,7 +1896,7 @@ Someone has set a nice |Ychair|n for viewing.
@set chair/get_err_msg = "It's way too heavy for you to lift."
# Chair:3 ends here
# Fishing Pole
# 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]]
@ -1944,7 +1930,7 @@ Someone has set a nice |Ychair|n for viewing.
@detail hook;bait = One of those shiny lures, made from gold coins. Curiouser. Seems you don't need to bait this hook.
# Fishing Pole:5 ends here
# Sign
# Need to make the fishing pole “stay” at the Dock. Maybe with a message about sticking around for the next person.
@ -1978,14 +1964,14 @@ Someone has set a nice |Ychair|n for viewing.
@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
# Sandy Shore
# 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;mp14 :typeclasses.rooms_weather.TimeWeatherRoom = south along shore;shore;south;s,north to dock;north;n;dock
@dig Shore;mp15 :typeclasses.rooms_weather.TimeWeatherRoom = south along shore;shore;south;s,north to dock;north;n;dock
# Sandy Shore:1 ends here
@ -2050,7 +2036,7 @@ Someone has set a nice |Ychair|n for viewing.
@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
# Sand
# Part of the [[Potions and their Ingredients][Alchemist Path]], we use sand as an ingredient in a potion we want to make.
@ -2068,7 +2054,7 @@ Someone has set a nice |Ychair|n for viewing.
@lock sand = view:tag(hidden_sand)
# Sand:1 ends here
# Pine Flowers
# Part of the [[Potions and their Ingredients][Alchemist Path]], we use /pine flowers/ to create a potion TBD, and feed the stoat in Dabblers House.
@ -2088,7 +2074,7 @@ Someone has set a nice |Ychair|n for viewing.
@lock pine = view:tag(alchemist) # We want the user to be able to "look pine" as a detail?
# Pine Flowers:1 ends here
# Sign
# We make the sign as an “object” for others to read:
@ -2102,7 +2088,7 @@ Someone has set a nice |Ychair|n for viewing.
@lock sign = get:false()
# Sign:1 ends here
# Salty Shack
# Lets keep this pretty empty.
@ -2156,7 +2142,7 @@ Someone has set a nice |Ychair|n for viewing.
@set door/traverse_msg = "You open the door and step out on the sand, closing the door behind you."
# Salty Shack:5 ends here
# Grotto
# Return to the forest:
@ -2249,7 +2235,7 @@ Someone has set a nice |Ychair|n for viewing.
@detail fern;ferns = Sword ferns rattling sabers against the wards from the Maiden Hairs' flailing their fronds.
# Grotto:11 ends here
# Berry Bush
# 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.
@ -2337,7 +2323,7 @@ Someone has set a nice |Ychair|n for viewing.
#"Those were <<delicious ^ great>>."
# Berry Bush:12 ends here
# Spring Water
# Part of the [[Potions and their Ingredients][Alchemist Path]], we use spring water to create a [[Trippy Potion]].
@ -2356,10 +2342,10 @@ Someone has set a nice |Ychair|n for viewing.
#
@set stream/fill_desc = "fresh spring water."
#
@set stream/fill_msgs = ["$You() $conj(<< get ^ kneel >>) down, and $conj(fill) $pron(your) {2} with the << spring ^ fresh ^ refreshing >> water.", "$You() $conj(<< get ^ kneel >>) down, and $conj(put) $pron(your) {2} in the cool water, filling it."]
@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
# Knocker
# The knocker has the ability to make the door “open” using [[https://www.evennia.com/docs/latest/api/evennia.objects.objects.html][on_traverse]] hooks?
# Most of the work of the /knocker/ is in the Python code:
@ -2430,7 +2416,7 @@ Someone has set a nice |Ychair|n for viewing.
@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
# Ring
# Since we can remove the ring, lets create it:
@ -2492,7 +2478,7 @@ Someone has set a nice |Ychair|n for viewing.
@teleport/quiet ring = knocker
# Ring:7 ends here
# Cozy House
# Add the Python /special-ness/ for [[file:~/src/moss-n-puddles/typeclasses/rooms.py::class DabblersRoom(Room):][this room]]:
@ -2500,7 +2486,7 @@ Someone has set a nice |Ychair|n for viewing.
@dig Cozy House;mp03: typeclasses.rooms.DabblersRoom = red door;door;inside,outside;leave
# Cozy House:1 ends here
# Red Door
# The door description should match the artwork on the website:
# [[file:../../../projects/mud.org::*Red Door][Red Door:1]]
@ -2539,7 +2525,7 @@ Someone has set a nice |Ychair|n for viewing.
@set door/hidden_tag = "hidden_knocker"
# Red Door:5 ends here
# Inside
# Fix the inside of the “House”:
@ -2610,7 +2596,7 @@ Someone has set a nice |Ychair|n for viewing.
@set here/arrive = "45 ;; gm The rain << patters ^ chatters ^ drums >> against a window << sill ^ pane >>. Nice to be << indoors ^ inside >>."
# Inside:6 ends here
# Tapestry Story
# The tapestry should tell our /creation myth/.
# [[file:../../../projects/mud.org::*Tapestry Story][Tapestry Story:1]]
@ -2629,7 +2615,7 @@ Someone has set a nice |Ychair|n for viewing.
@detail whispering = This curious aspect in the |Ytapestry|n seems ... odd.
# Tapestry Story:1 ends here
# Fireplace
# And a fire in the fireplace is a type of /pet/, since we can feed it:
# [[file:../../../projects/mud.org::*Fireplace][Fireplace:1]]
@ -2675,7 +2661,7 @@ Someone has set a nice |Ychair|n for viewing.
@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
# Wood Rack
# Need a way to produce wood for the fireplace.
@ -2750,7 +2736,7 @@ Someone has set a nice |Ychair|n for viewing.
@lock wood rack = view:tag(hidden_woodrack)
# Wood Rack:9 ends here
# Knickknacks
# What sort of non-books do we want to look at?
@ -2769,7 +2755,7 @@ Someone has set a nice |Ychair|n for viewing.
@set trinkets/get_err_msg = "While interesting, perhaps you shouldn't steal Dabbler's personal collection."
# Knickknacks:2 ends here
# Magic 8 Ball
# One trinket we might create to give to people as a souvenir.
@ -2799,7 +2785,7 @@ Someone has set a nice |Ychair|n for viewing.
drop ball
# Magic 8 Ball:3 ends here
# Bookshelf
# Since we mentioned shelves of books, we should create a Producer that makes a random book.
@ -2816,7 +2802,7 @@ drop ball
@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
# Chairs
# 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.
@ -2862,7 +2848,7 @@ drop ball
@set chairs/extra = "This feels << ^ very ^ quite>> <<nice ^ cozy ^ comfortable>>.|n"
# Chairs:5 ends here
# Character: Dabbler
# My characters should be NPCs, so they can stick around if Im not logged in.
@ -2885,12 +2871,10 @@ drop ball
# [[file:../../../projects/mud.org::*Character: Dabbler][Character: Dabbler:3]]
py bt = self.search('gnome'); bt.db.pose = 'smiling at you'
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/_sdesc = "old gnome"
#
@set gnome/pose_sleep = "sleeping soundly in a large, overstuffed chair"
#
pose gnome/default = smoking his pipe
@ -2929,7 +2913,7 @@ pose gnome/default = smoking his pipe
@give teacup = gnome
# Character: Dabbler:8 ends here
# Staff
# And my staff:
@ -2951,10 +2935,10 @@ pose gnome/default = smoking his pipe
#
@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 ^ tap ^ hit ^ 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 >>..."
@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
# Pipe
# The pipe is little more than messages to the smoker and everyone else in the room.
@ -2973,7 +2957,7 @@ pose gnome/default = smoking his pipe
@give pipe = gnome
# Pipe:2 ends here
# Journal
# The pipe is little more than messages to the smoker and everyone else in the room.
@ -3003,7 +2987,7 @@ pose gnome/default = smoking his pipe
@give journal = gnome
# Journal:3 ends here
# Stoat
# Need an interesting creature that likes to sleep by the fire, and perhaps give hints to the workings inside.
# - feed :: ignores all food.
@ -3164,16 +3148,16 @@ pose gnome/default = smoking his pipe
# Trigger some events:
# Trigger some events … which cant work at the moment, since a Pet is not a Puppet … yet:
# [[file:../../../projects/mud.org::*Stoat][Stoat:18]]
@set stoat/arrive = "5 ;; gm A sleeping << wee ^ >> beastie, opens one curious eye to see who arrived."
@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
# Kitchen
# Better place to put the tea and scones.
@ -3233,7 +3217,7 @@ pose gnome/default = smoking his pipe
@detail scone;scones = A scones look tempting. Perhaps no one will miss one...
# Kitchen:7 ends here
# Cabinets and Counter-tops
# 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.
@ -3257,7 +3241,7 @@ pose gnome/default = smoking his pipe
py here.search("cabinet").do_bake()
# Cabinets and Counter-tops:3 ends here
# Tea Service
# The “room” gives the teacups, and the “teapot” fills the cups, so we just need descriptions:
@ -3288,7 +3272,7 @@ py here.search("cabinet").do_bake()
@set teapot/get_err_msg = "You don't need to carry it around to make tea."
# Tea Service:3 ends here
# Secret Room
# Pulling on a candle opens a secret staircase!
@ -3309,7 +3293,7 @@ py here.search("cabinet").do_bake()
@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
# Sconce
# The Candle holder must be both an Opener (with a =do_pull= method) and a Producer (making long-lasting candles).
@ -3388,7 +3372,7 @@ py here.search("cabinet").do_bake()
@set sconce/make_amount = 1
# Sconce:9 ends here
# Pulling Sconce
# Temporarily move the exit into the room.
@ -3405,7 +3389,7 @@ py here.search("cabinet").do_bake()
@teleport/tonone stairs behind bookcase
# Pulling Sconce:2 ends here
# Inside the Secret Room
# Time to create the secret lab, the *Secret Room*.
@ -3465,7 +3449,7 @@ py here.search("cabinet").do_bake()
@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
# Jars
# 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 cant take. This creates ambiance without adding too much complexity?
@ -3532,7 +3516,7 @@ py here.search("cabinet").do_bake()
)
# Jars:4 ends here
# Stool
# A stool to sit while working
# [[file:../../../projects/mud.org::*Stool][Stool:1]]
@ -3563,7 +3547,7 @@ py here.search("cabinet").do_bake()
@set stool/get_err_msg = "Stop trying to steal everything not nailed down."
# Stool:4 ends here
# Grimoire
# A mystic book of potions can add a new dimension to the game.
@ -3612,7 +3596,7 @@ py here.search("cabinet").do_bake()
@set grimoire/prefix = "Undoing the brass clasp that bind the old leather book, you open to page one and begin reading the elegant calligraphy..."
# Grimoire:5 ends here
# Cauldron
# The cauldron should have a special =look= so a character knows what ingredients they added, and the follow commands:
# - =empty= … the imp will empty the contents
@ -3646,7 +3630,7 @@ py here.search("cabinet").do_bake()
@lock cauldron = get:false()
# Cauldron:3 ends here
# Shelf of Bottles
# The table is a producer of /bottles/.
@ -3685,7 +3669,7 @@ py here.search("cabinet").do_bake()
@set shelf/make_amount = 1
# Shelf of Bottles:4 ends here
# Imp
# Every secret alchemical lab should have an Imp familiar.
@ -3708,12 +3692,10 @@ py here.search("cabinet").do_bake()
# [[file:../../../projects/mud.org::*Imp][Imp:3]]
py bt = self.search('imp'); bt.db.pose = 'sitting on an ornate perch'
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/_sdesc = "imp"
#
@set imp/pose_sleep = "sitting on an ornate perch"
#
@pose default imp = sitting on an ornate perch
@ -3741,7 +3723,7 @@ py bt = self.search('imp'); bt.db.pose = 'sitting on an ornate perch'
@set imp/say = "1 ;; emote << nods ^ looks at you quizically ^ stares at you curiously ^ shrugs ^ investigates its fingerclaws ^ winks ^ smirks ^ raises an eyebrow ... well, if it had one, it would ^ stares at you ^ squints its eyes >>."
# Imp:8 ends here
# Bedroom
# A bedroom with a wardrobe that goes to another land sounds great.
@ -3813,7 +3795,7 @@ py bt = self.search('imp'); bt.db.pose = 'sitting on an ornate perch'
@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
# Wardrobe
# One needs to open it to go to another world.
@ -3883,7 +3865,7 @@ py bt = self.search('imp'); bt.db.pose = 'sitting on an ornate perch'
@set wardrobe/get_err_msg = "The wardrobe is way too big to lift."
# Wardrobe:6 ends here
# Southwest Prairie
# What am I doing here?
@ -3917,7 +3899,7 @@ py bt = self.search('imp'); bt.db.pose = 'sitting on an ornate perch'
@detail campfire;fire = Only a thin wisp of smoke escapes to the skies; fragrating the air.
# Southwest Prairie:3 ends here
# Mares Head
# Taken from [[https://en.wikipedia.org/wiki/Mare%27s_Head][Wikipedia]].
@ -3940,12 +3922,10 @@ py bt = self.search('imp'); bt.db.pose = 'sitting on an ornate perch'
# [[file:../../../projects/mud.org::*Mares Head][Mares Head:3]]
py bt = self.search('head'); bt.db.pose = 'sitting next to a small |Ycampfire|n'
py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitting next to a small |Ycampfire|n'
# Mares Head:3 ends here
# [[file:../../../projects/mud.org::*Mares Head][Mares Head:4]]
@set mares head/_sdesc = "curious figure"
#
@set mares head/pose_sleep = "sitting next to a small |Ycampfire|n"
#
@set mares head/pose_default = "sitting next to a small |Ycampfire|n"
@ -3972,10 +3952,56 @@ py bt = self.search('head'); bt.db.pose = 'sitting next to a small |Ycampfire|n'
# [[file:../../../projects/mud.org::*Mares Head][Mares Head:7]]
@set mares head/arrive = "5 ;; 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. ;; gift pipe to {0}"
@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}"
# Mares Head:7 ends here
# Bugs
# And what if they attempt to interact?
# [[file:../../../projects/mud.org::*Mares Head][Mares 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 >>."
# Mares Head:8 ends here
# Lets 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
# Cant 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: