More bug fixing
This commit is contained in:
parent
b63cb4c74d
commit
be4f92ed6e
12 changed files with 791 additions and 188 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -64,3 +64,5 @@ nosetests.xml
|
||||||
server/ssl.*
|
server/ssl.*
|
||||||
/transcripts/cozy-20*.html
|
/transcripts/cozy-20*.html
|
||||||
personalities/*.json
|
personalities/*.json
|
||||||
|
/.agent-shell/
|
||||||
|
/goblins-run.txt
|
||||||
|
|
|
||||||
13
README.md
13
README.md
|
|
@ -75,7 +75,18 @@ When you first do this, you will need to create a account for the
|
||||||
superuser account, we call **The Avatar**. The question about email is
|
superuser account, we call **The Avatar**. The question about email is
|
||||||
optional.
|
optional.
|
||||||
|
|
||||||
You can stop the server using the command: `evennia stop`
|
To make things a bit quicker, at this point, type:
|
||||||
|
|
||||||
|
cp server/evennia.db3 server/evennia-reset.db3
|
||||||
|
|
||||||
|
If, at any point, you feel you have messed up the world, stop the
|
||||||
|
server using the command:
|
||||||
|
|
||||||
|
evennia stop
|
||||||
|
|
||||||
|
And re-initialize the database with your account, using:
|
||||||
|
|
||||||
|
cp server/evennia-reset.db3 server/evennia.db3
|
||||||
|
|
||||||
### Load the World
|
### Load the World
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,7 @@
|
||||||
evennia
|
evennia
|
||||||
anthropic
|
anthropic
|
||||||
|
cryptography
|
||||||
|
request
|
||||||
|
ipython
|
||||||
|
paramiko
|
||||||
|
service_identity
|
||||||
|
|
|
||||||
|
|
@ -383,6 +383,9 @@ class Character(Object, GenderCharacter, ContribRPCharacter):
|
||||||
thing = None
|
thing = None
|
||||||
if hasattr(victim, 'has') and callable(getattr(victim, 'has')):
|
if hasattr(victim, 'has') and callable(getattr(victim, 'has')):
|
||||||
thing = victim.has(to_take)
|
thing = victim.has(to_take)
|
||||||
|
if isinstance(thing, list):
|
||||||
|
thing = thing[0]
|
||||||
|
|
||||||
if thing and thing.db.can_take:
|
if thing and thing.db.can_take:
|
||||||
self.msg(f"You take {thing.key} from {victim.key}.")
|
self.msg(f"You take {thing.key} from {victim.key}.")
|
||||||
thing.move_to(self, quiet=True, use_destination=True)
|
thing.move_to(self, quiet=True, use_destination=True)
|
||||||
|
|
|
||||||
|
|
@ -79,7 +79,7 @@ class ChatBot(AI, Puppet):
|
||||||
|
|
||||||
def other_sayto(self, speaker, speech):
|
def other_sayto(self, speaker, speech):
|
||||||
logger.info(f"Direct Chatbot hears: '{speech}' from {speaker}.")
|
logger.info(f"Direct Chatbot hears: '{speech}' from {speaker}.")
|
||||||
if speech:
|
if speech and self.location.characters_here():
|
||||||
logger.info("Starting to think of a reply")
|
logger.info("Starting to think of a reply")
|
||||||
reply = self.think(speaker, speech)
|
reply = self.think(speaker, speech)
|
||||||
self.process_thoughts(reply)
|
self.process_thoughts(reply)
|
||||||
|
|
@ -111,14 +111,24 @@ class ChatBot(AI, Puppet):
|
||||||
elif len(chars) > 1:
|
elif len(chars) > 1:
|
||||||
delay(3, self.greet)
|
delay(3, self.greet)
|
||||||
|
|
||||||
|
def elaborate_msg(self, message):
|
||||||
|
"""
|
||||||
|
Uses the Claude interface to expand a simple message.
|
||||||
|
"""
|
||||||
|
if self.location.characters_here():
|
||||||
|
system_prompt = self.setting_and_backstory()
|
||||||
|
messages = [{"role": "user", "content": message}]
|
||||||
|
reply = self._think(system_prompt, messages)
|
||||||
|
self.process_thoughts(reply)
|
||||||
|
|
||||||
|
def greet(self, char=None):
|
||||||
|
"Say hello to a character. Override this."
|
||||||
|
pass
|
||||||
|
|
||||||
def goodbye(self, new_room=None):
|
def goodbye(self, new_room=None):
|
||||||
if self.location.key == "Wyldwood Bar":
|
if self.location.key == "Wyldwood Bar":
|
||||||
self.do_cmd("drop drink")
|
self.do_cmd("drop drink")
|
||||||
if self.location.characters_here():
|
self.elaborate_msg("say goodbye.")
|
||||||
system_prompt = self.setting_and_backstory()
|
|
||||||
messages = [{"role": "user", "content": "Say goodbye."}]
|
|
||||||
reply = self._think(system_prompt, messages)
|
|
||||||
self.process_thoughts(reply)
|
|
||||||
|
|
||||||
|
|
||||||
class Bartender(ChatBot):
|
class Bartender(ChatBot):
|
||||||
|
|
@ -409,7 +419,7 @@ class Dragon(Traveler):
|
||||||
if self.location.key != "Wyldwood Bar":
|
if self.location.key != "Wyldwood Bar":
|
||||||
super().at_post_move(past_location, move_type)
|
super().at_post_move(past_location, move_type)
|
||||||
else:
|
else:
|
||||||
if len(self.characters_here()) > 0:
|
if self.characters_here():
|
||||||
request = choice([
|
request = choice([
|
||||||
"a Moonlit Mirage",
|
"a Moonlit Mirage",
|
||||||
"Puck's Revenge",
|
"Puck's Revenge",
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ from evennia.commands.cmdset import CmdSet
|
||||||
from evennia.commands.command import Command
|
from evennia.commands.command import Command
|
||||||
from evennia.utils import utils
|
from evennia.utils import utils
|
||||||
|
|
||||||
from .objects import ObjectParent
|
from .objects import ObjectParent, Object
|
||||||
from utils.word_list import choices
|
from utils.word_list import choices
|
||||||
|
|
||||||
MOVE_DELAY = {"stroll": 6, "walk": 4, "run": 2, "sprint": 1}
|
MOVE_DELAY = {"stroll": 6, "walk": 4, "run": 2, "sprint": 1}
|
||||||
|
|
@ -79,7 +79,7 @@ class Exit(ObjectParent, DefaultExit):
|
||||||
traveler.ndb.currently_moving = t
|
traveler.ndb.currently_moving = t
|
||||||
|
|
||||||
|
|
||||||
class Opener():
|
class Opener(Object):
|
||||||
"""
|
"""
|
||||||
A mixin that can open or close an exit.
|
A mixin that can open or close an exit.
|
||||||
Done by moving an Exit to/from None and a Room.
|
Done by moving an Exit to/from None and a Room.
|
||||||
|
|
|
||||||
|
|
@ -101,7 +101,7 @@ class ObjectParent:
|
||||||
|
|
||||||
def has(self, item):
|
def has(self, item):
|
||||||
"""
|
"""
|
||||||
Return true if object has an item.
|
Return all matching objects if this has an item.
|
||||||
Where item is probably a string name to match an item's key.
|
Where item is probably a string name to match an item's key.
|
||||||
It can also be a type, for instance:
|
It can also be a type, for instance:
|
||||||
|
|
||||||
|
|
@ -874,7 +874,7 @@ class AI:
|
||||||
|
|
||||||
def at_msg_receive(self, text=None, from_obj=None, **kwargs):
|
def at_msg_receive(self, text=None, from_obj=None, **kwargs):
|
||||||
super().at_msg_receive(text, from_obj=from_obj, **kwargs)
|
super().at_msg_receive(text, from_obj=from_obj, **kwargs)
|
||||||
logger.info(f"at_msg_receive: {text} :: {self.key}")
|
# logger.info(f"at_msg_receive: {text} :: {self.key}")
|
||||||
|
|
||||||
if from_obj != self:
|
if from_obj != self:
|
||||||
msg = text if isinstance(text, str) else text[0]
|
msg = text if isinstance(text, str) else text[0]
|
||||||
|
|
|
||||||
|
|
@ -477,6 +477,7 @@ class WeeBeastie(Friendly, Familiar, Listener, AI):
|
||||||
"""
|
"""
|
||||||
def at_object_creation(self):
|
def at_object_creation(self):
|
||||||
"Called when this pet is first created."
|
"Called when this pet is first created."
|
||||||
|
super().at_object_creation()
|
||||||
self.cmdset.add(CmdSetAntic, persistent=True)
|
self.cmdset.add(CmdSetAntic, persistent=True)
|
||||||
|
|
||||||
def other_say(self, speaker, speech):
|
def other_say(self, speaker, speech):
|
||||||
|
|
@ -520,8 +521,12 @@ class WeeBeastie(Friendly, Familiar, Listener, AI):
|
||||||
"""
|
"""
|
||||||
# Categorize items that can be used to feed the beast:
|
# Categorize items that can be used to feed the beast:
|
||||||
def is_some(item, name):
|
def is_some(item, name):
|
||||||
return (not item and feeder.has(name)) or \
|
if item and item.key == name:
|
||||||
(item and item.key == name)
|
return item
|
||||||
|
if not item:
|
||||||
|
item = feeder.has(name)
|
||||||
|
if item:
|
||||||
|
return item[0]
|
||||||
|
|
||||||
def is_edible(item):
|
def is_edible(item):
|
||||||
return is_some(item, "yellow flower") or \
|
return is_some(item, "yellow flower") or \
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ from commands.misc import (CmdSetPuddle,
|
||||||
CmdSetTransform, CmdSetPeer)
|
CmdSetTransform, CmdSetPeer)
|
||||||
from commands.consumables import CmdSetMakeConsumable
|
from commands.consumables import CmdSetMakeConsumable
|
||||||
from commands.wizards import CmdSetWand, CmdSetScry
|
from commands.wizards import CmdSetWand, CmdSetScry
|
||||||
|
from typeclasses.exits import Opener
|
||||||
from utils.word_list import routput, choices, paragraph
|
from utils.word_list import routput, choices, paragraph
|
||||||
from utils.scoring import Scores
|
from utils.scoring import Scores
|
||||||
from typeclasses.consumables import Litterable
|
from typeclasses.consumables import Litterable
|
||||||
|
|
@ -380,7 +381,7 @@ class Stick(Object):
|
||||||
|
|
||||||
class ClosingDoor(Opener):
|
class ClosingDoor(Opener):
|
||||||
def do_open(self):
|
def do_open(self):
|
||||||
super.do_open()
|
super().do_open()
|
||||||
|
|
||||||
delay_time = self.db.open_for or 60
|
delay_time = self.db.open_for or 60
|
||||||
here = self.db.room
|
here = self.db.room
|
||||||
|
|
|
||||||
|
|
@ -1,29 +1,4 @@
|
||||||
|
|
||||||
|
|
||||||
# The mist horn calls the boat to the character, no matter where they are. We create one regularly in the witch’s hut:
|
|
||||||
|
|
||||||
|
|
||||||
# [[file:../../../projects/mud-adventure.org::*The Mist Horn][The Mist Horn:1]]
|
|
||||||
@teleport/quiet mp09
|
|
||||||
#
|
|
||||||
py timed_script = evennia.create_script(key="Create Horns",
|
|
||||||
typeclass='typeclasses.scripts.CreateHorns',
|
|
||||||
interval=14400, # 4 hours?
|
|
||||||
start_delay=False, # wait interval before first call
|
|
||||||
autostart=True,
|
|
||||||
attributes=[("destination", here)] )
|
|
||||||
# The Mist Horn:1 ends here
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# When a character arrives at the Lazy Dock and wait, the room gives a hint about the horn and the boat occurring.
|
|
||||||
|
|
||||||
|
|
||||||
# [[file:../../../projects/mud-adventure.org::*The Mist Horn][The Mist Horn:2]]
|
|
||||||
@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
|
|
||||||
|
|
||||||
|
|
||||||
# When the boat is docked, we should have a special /state/ to describe it:
|
# When the boat is docked, we should have a special /state/ to describe it:
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -58,6 +33,8 @@ py timed_script = evennia.create_script(key="Create Horns",
|
||||||
|
|
||||||
# [[file:../../../projects/mud-adventure.org::*The Boat][The Boat:4]]
|
# [[file:../../../projects/mud-adventure.org::*The Boat][The Boat:4]]
|
||||||
@script here = typeclasses.sailing.Boat
|
@script here = typeclasses.sailing.Boat
|
||||||
|
#
|
||||||
|
@set/script sailing/sailing_direction = "port"
|
||||||
# The Boat:4 ends here
|
# The Boat:4 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -101,7 +78,7 @@ Only eddies from the subtle wake, intrude on the lavender sea's tranquility, as
|
||||||
|
|
||||||
|
|
||||||
# [[file:../../../projects/mud-adventure.org::*The Boat][The Boat:9]]
|
# [[file:../../../projects/mud-adventure.org::*The Boat][The Boat:9]]
|
||||||
desc dock = A lazy dock with a comfortable-looking chair and a forest of colossal trees behind it on a hill.
|
@desc dock = A lazy dock with a comfortable-looking chair and a forest of colossal trees behind it on a hill.
|
||||||
# The Boat:9 ends here
|
# The Boat:9 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -144,7 +121,7 @@ desc dock = A lazy dock with a comfortable-looking chair and a forest of colossa
|
||||||
|
|
||||||
# The /exit/ to and from the Dock to the *Leaf Boat* comes and goes.
|
# The /exit/ to and from the Dock to the *Leaf Boat* comes and goes.
|
||||||
|
|
||||||
# Send the “exit” to te leaf boat into the void to be picked up later:
|
# Send the “exit” to the leaf boat into the void to be picked up later:
|
||||||
|
|
||||||
|
|
||||||
# [[file:../../../projects/mud-adventure.org::*The Boat][The Boat:14]]
|
# [[file:../../../projects/mud-adventure.org::*The Boat][The Boat:14]]
|
||||||
|
|
@ -157,11 +134,13 @@ desc dock = A lazy dock with a comfortable-looking chair and a forest of colossa
|
||||||
|
|
||||||
|
|
||||||
# [[file:../../../projects/mud-adventure.org::*The Boat][The Boat:15]]
|
# [[file:../../../projects/mud-adventure.org::*The Boat][The Boat:15]]
|
||||||
py timed_script = evennia.create_script(key="boat reset",
|
# py timed_script = evennia.create_script(key="boat-reset",
|
||||||
typeclass='typeclasses.sailing.ResetBoat',
|
# typeclass='typeclasses.sailing.ResetBoat',
|
||||||
interval=14400,
|
# interval=14400,
|
||||||
start_delay=False,
|
# start_delay=False,
|
||||||
autostart=True)
|
# autostart=True)
|
||||||
|
#
|
||||||
|
@script boat-reset:typeclasses.sailing.ResetBoat
|
||||||
# The Boat:15 ends here
|
# The Boat:15 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -241,7 +220,9 @@ $state(boat, A large leaf bobs invitingly in the surf.)
|
||||||
|
|
||||||
|
|
||||||
# [[file:../../../projects/mud-adventure.org::*Throne Island][Throne Island:9]]
|
# [[file:../../../projects/mud-adventure.org::*Throne Island][Throne Island:9]]
|
||||||
@teleport/tonone dock
|
# This is global, really?
|
||||||
|
# @teleport/tonone dock
|
||||||
|
py me.search('dock', location=here).location = None
|
||||||
# Throne Island:9 ends here
|
# Throne Island:9 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -253,6 +234,68 @@ $state(boat, A large leaf bobs invitingly in the surf.)
|
||||||
# Throne Island:10 ends here
|
# Throne Island:10 ends here
|
||||||
|
|
||||||
|
|
||||||
|
# These berries should be created for making [[file:mud.org::*Trippy Potion][a Trippy Potion]].
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud-adventure.org::*Moonberries][Moonberries:1]]
|
||||||
|
@teleport/quiet gr02
|
||||||
|
#
|
||||||
|
@create/drop moonberries;moonberry;berry: typeclasses.consumables.Producer
|
||||||
|
#
|
||||||
|
@desc moonberries = Growing a slender vines that wrap around the trunks of the pine trees. Laden with small, blue berries, each reflecting a white cresent shape.
|
||||||
|
#
|
||||||
|
@set moonberries/make_name = "handful of moonberries"
|
||||||
|
#
|
||||||
|
@set moonberries/make_verb = "$conj(collect) a"
|
||||||
|
#
|
||||||
|
@set moonberries/make_class = "typeclasses.consumables.Edible"
|
||||||
|
#
|
||||||
|
@set moonberries/make_desc = "Blue berries with a white cresent shape."
|
||||||
|
#
|
||||||
|
@set moonberries/make_amount = 1
|
||||||
|
#
|
||||||
|
@set moonberries/make_eat_msg = "Slightly bitter. Not very good."
|
||||||
|
#
|
||||||
|
@set moonberries/make_spell_msgs = "10 ;; $You() $conj(stare) off into space, lost in thought. ;; $You() $conj(study) $pron(your) hands, utterly captivated. ;; 5 ;; $You() $conj(awaken) from a daydream with a start."
|
||||||
|
#
|
||||||
|
# And we can't see them until we are an alchemist:
|
||||||
|
@lock moonberries = view:tag(alchemist)
|
||||||
|
# Moonberries:1 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Part of the [[Potions and their Ingredients][Alchemist Path]], we use /seagrass/ to create a [[file:mud.org::*Water Breathing][Water Breathing potion]].
|
||||||
|
|
||||||
|
# We put this location hint in the Alchemy Tome:
|
||||||
|
# #+begin_quote
|
||||||
|
# This grass, often called seagrass 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-adventure.org::*Seagrass][Seagrass:1]]
|
||||||
|
@teleport/quiet gr02
|
||||||
|
#
|
||||||
|
@create/drop patch of seagrass;seagrass;sea grass;grass: typeclasses.consumables.Producer
|
||||||
|
#
|
||||||
|
@desc seagrass = Patches of this vivid grass vibrates as if giggling.
|
||||||
|
#
|
||||||
|
@set seagrass/make_name = "bunch of seagrass"
|
||||||
|
#
|
||||||
|
@set seagrass/make_verb = "$conj(harvest) a"
|
||||||
|
#
|
||||||
|
@set seagrass/make_class = "typeclasses.consumables.Herb"
|
||||||
|
#
|
||||||
|
@set seagrass/make_desc = "This grass vibrates as if giggling."
|
||||||
|
#
|
||||||
|
@set seagrass/make_amount = 1
|
||||||
|
#
|
||||||
|
# And we can't see them until we are an alchemist:
|
||||||
|
@lock seagrass = view:tag(alchemist)
|
||||||
|
# Seagrass:1 ends here
|
||||||
|
|
||||||
|
|
||||||
# Details on the throne and the statues and maybe moss? What about sitting on the throne?
|
# Details on the throne and the statues and maybe moss? What about sitting on the throne?
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -614,6 +657,24 @@ light torch
|
||||||
# Puzzle Four:14 ends here
|
# Puzzle Four:14 ends here
|
||||||
|
|
||||||
|
|
||||||
|
# Life is better here.
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud-adventure.org::*Under the Sea][Under the Sea:1]]
|
||||||
|
@dig/teleport Lavender Sea;gr05
|
||||||
|
#
|
||||||
|
@desc here = A breathtaking structure of dark violet coral arching and yet swaying in the underwater currents,
|
||||||
|
# Under the Sea:1 ends here
|
||||||
|
|
||||||
|
|
||||||
|
# Located under the sea.
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud-adventure.org::*Violet Veil Citadel][Violet Veil Citadel:1]]
|
||||||
|
@dig/teleport
|
||||||
|
# Violet Veil Citadel:1 ends here
|
||||||
|
|
||||||
|
|
||||||
# Evocative.
|
# Evocative.
|
||||||
|
|
||||||
# [[file:../../../projects/mud-adventure.org::*Stone Island][Stone Island:1]]
|
# [[file:../../../projects/mud-adventure.org::*Stone Island][Stone Island:1]]
|
||||||
|
|
|
||||||
|
|
@ -391,7 +391,7 @@ send "look\n"
|
||||||
expect -re "You notice.*mattress"
|
expect -re "You notice.*mattress"
|
||||||
|
|
||||||
send "sit\n"
|
send "sit\n"
|
||||||
expectit "You sit on the mattress."
|
expect -re "You sit on the.*mattress."
|
||||||
|
|
||||||
send "get mattress\n"
|
send "get mattress\n"
|
||||||
expectit "too heavy"
|
expectit "too heavy"
|
||||||
|
|
@ -448,6 +448,9 @@ sleep 1
|
||||||
send "blue door\n"
|
send "blue door\n"
|
||||||
expectit "Wyldwood Bar"
|
expectit "Wyldwood Bar"
|
||||||
|
|
||||||
|
send "sit\n"
|
||||||
|
expectit "You sit on "
|
||||||
|
|
||||||
send "read sign\n"
|
send "read sign\n"
|
||||||
expectit "Cocktails"
|
expectit "Cocktails"
|
||||||
|
|
||||||
|
|
@ -475,9 +478,6 @@ expectit "You"
|
||||||
send "drink\n"
|
send "drink\n"
|
||||||
expectit "You have nothing to drink"
|
expectit "You have nothing to drink"
|
||||||
|
|
||||||
send "say Thank you, sir\n"
|
|
||||||
expectit "Thank you"
|
|
||||||
|
|
||||||
send "get candy\n"
|
send "get candy\n"
|
||||||
expectit "You grab a candy"
|
expectit "You grab a candy"
|
||||||
|
|
||||||
|
|
@ -488,6 +488,10 @@ expectit "\n"
|
||||||
send "get candy\n"
|
send "get candy\n"
|
||||||
expectit "You grab a candy"
|
expectit "You grab a candy"
|
||||||
|
|
||||||
|
# And grab another for the road...
|
||||||
|
send "get candy\n"
|
||||||
|
expectit "You grab a candy"
|
||||||
|
|
||||||
# Until we write tests for the bar...
|
# Until we write tests for the bar...
|
||||||
send "leave\n"
|
send "leave\n"
|
||||||
expectit "Glittering Glade"
|
expectit "Glittering Glade"
|
||||||
|
|
@ -883,6 +887,9 @@ expectit "beastie"
|
||||||
send "feed beastie\n"
|
send "feed beastie\n"
|
||||||
expectit "candy"
|
expectit "candy"
|
||||||
|
|
||||||
|
send "feed candy to beastie\n"
|
||||||
|
expectit "candy"
|
||||||
|
|
||||||
send "feed beastie\n"
|
send "feed beastie\n"
|
||||||
expectit "beastie doesn't appear interested in anything you have."
|
expectit "beastie doesn't appear interested in anything you have."
|
||||||
|
|
||||||
|
|
@ -1115,8 +1122,20 @@ expectit "Grove of the Matriarchs"
|
||||||
send "east\n"
|
send "east\n"
|
||||||
expectit "Frog Meadow"
|
expectit "Frog Meadow"
|
||||||
|
|
||||||
send "feed beast\n"
|
expect {
|
||||||
expectit "scone"
|
"a big hairy beast" {
|
||||||
|
# Refeed!
|
||||||
|
send "feed beast\n"
|
||||||
|
expectit "scone"
|
||||||
|
}
|
||||||
|
timeout {
|
||||||
|
if {$phase == "night"} {
|
||||||
|
puts "NOTE: The beast is in bed now."
|
||||||
|
} else {
|
||||||
|
puts "NOTE: Where is the beast? It is $phase?"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
send "look tickleweed\n"
|
send "look tickleweed\n"
|
||||||
expectit "Patches of this vivid grass vibrates as if giggling."
|
expectit "Patches of this vivid grass vibrates as if giggling."
|
||||||
|
|
|
||||||
|
|
@ -1188,6 +1188,15 @@ py me.search("squirrel").backstory("squirrel")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Can we read it?
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Stone Table][Stone Table:3]]
|
||||||
|
@set table/inside = "While you can't read the |Yrunes|n, you can read the message in the middle of the table:|/|/ Born of rain and ground combined,|/ No solid form, yet firm when dried.|/ Clinging to feet. Adored by boar.|/ Speak my name to open the door."
|
||||||
|
# Stone Table:3 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# And some flavor that offers a hint to the answer of the riddle, to combine Water and Earth:
|
# And some flavor that offers a hint to the answer of the riddle, to combine Water and Earth:
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1264,38 +1273,246 @@ py me.search("squirrel").backstory("squirrel")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Do we want to make the permanent residents part of the description.
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Inside the Bar][Inside the Bar:2]]
|
||||||
|
@desc here = An amazing “room” formed from a ring of living |Ytrees|n. The canopy of |Yboughs|n above twinkle with the |Ylights|n of small, glowing orbs. Working the bar, a haughty-looking |Yelf|n; waiting on tables, a smiling |Ymushroom man|n, er...person.
|
||||||
|
# Inside the Bar:2 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# And some ambiance and details for items in the description.
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Inside the Bar][Inside the Bar:3]]
|
||||||
|
@detail trees;tree;trunk;trunks = You've never see elder tree trunks so large or that grow so close together. Of course, dark gray trunks absorb the soft light from the |Yorbs|n making the area appear much larger.
|
||||||
|
# Inside the Bar:3 ends here
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Inside the Bar][Inside the Bar:4]]
|
||||||
|
@detail boughs;bough;branches;canopy = The branches of the black elder |Ytrees|n create a sort of roof overhead.
|
||||||
|
# Inside the Bar:4 ends here
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Inside the Bar][Inside the Bar:5]]
|
||||||
|
@detail lights;light;orbs = Hundreds of small, dancing orbs float around the |Ycanopy|n above the room, casting a soft glow of light.
|
||||||
|
# Inside the Bar:5 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# And describe the door leaving the bar:
|
# And describe the door leaving the bar:
|
||||||
|
|
||||||
|
|
||||||
# [[file:../../../projects/mud.org::*Inside the Bar][Inside the Bar:7]]
|
# [[file:../../../projects/mud.org::*Inside the Bar][Inside the Bar:6]]
|
||||||
@desc blue door = The painted blue door you used to enter this tavern, looks the same on this side too...a door that fits snugly in the bark of the tree. Going through this door again may take you back to the forest, but who knows?
|
@desc blue door = The painted blue door you used to enter this tavern, looks the same on this side too...a door that fits snugly in the bark of the tree. Going through this door again may take you back to the forest, but who knows?
|
||||||
# Inside the Bar:7 ends here
|
# Inside the Bar:6 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Let’s have an interesting phrase entering the bar …
|
# Let’s have an interesting phrase entering the bar …
|
||||||
|
|
||||||
# [[file:../../../projects/mud.org::*Inside the Bar][Inside the Bar:8]]
|
# [[file:../../../projects/mud.org::*Inside the Bar][Inside the Bar:7]]
|
||||||
@set blue door/traverse_msg = "You open the blue door and enter inside the tree... and find yourself back in the first glade, with a path that leads through a forest."
|
@set blue door/traverse_msg = "You open the blue door and enter inside the tree... and find yourself back in the first glade, with a path that leads through a forest."
|
||||||
# Inside the Bar:8 ends here
|
# Inside the Bar:7 ends here
|
||||||
|
|
||||||
|
|
||||||
|
# And [[file:~/src/moss-n-puddles/typeclasses/sittables.py::class Sittables(Sittable):][the stools]] is a /plural/ location to sit, allowing anyone to sit down.
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Bar Stools][Bar Stools:1]]
|
||||||
|
@create/drop bar stools;stools;chairs:typeclasses.sittables.Sittables
|
||||||
|
# Bar Stools:1 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# This only works if we make it plural:
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Bar Stools][Bar Stools:2]]
|
||||||
|
@set bar stools/plural = True
|
||||||
|
# Bar Stools:2 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# And the description:
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Bar Stools][Bar Stools:3]]
|
||||||
|
@desc bar stools = You didn't know trees could grow in the shape of bar stools, and yet, the places you can sit seem quite organic.
|
||||||
|
# Bar Stools:3 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Can’t steal ‘em:
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Bar Stools][Bar Stools:4]]
|
||||||
|
@lock stools = get:false()
|
||||||
|
#
|
||||||
|
@set stools/get_err_msg = "The stool may actually be part of the decor and can't be moved."
|
||||||
|
# Bar Stools:4 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# And textual descriptions the object can use:
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Bar Stools][Bar Stools:5]]
|
||||||
|
@set stools/singular = "one of the stools at the bar"
|
||||||
|
# Bar Stools:5 ends here
|
||||||
|
|
||||||
|
|
||||||
|
# Let’s create a sign for the list of cocktails:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Cocktails][Cocktails:1]]
|
||||||
|
@create/drop sign above the bar;sign;list:typeclasses.readables.Readable
|
||||||
|
# Cocktails:1 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# And the description:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Cocktails][Cocktails:2]]
|
||||||
|
@desc sign = You see a large sign made of wood over the bar, hanging from a branch of one of the living trees. Painted words at the top read, |wWyldwood Cocktails|n, and a list of drinks you can order.
|
||||||
|
# Cocktails:2 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Might as well allow the user to read it:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Cocktails][Cocktails:3]]
|
||||||
|
@set sign/inside = "|wCocktails|n|/ - Moonlit Mirage|/ - Puck's Revenge|/ - Glimmering Gossamer|/ - Whimsical Willow|/ - Charmed Chalice|/ - Enchanted Elixir|/ - Sylvan Serenade|/ - Brambleberry Bliss|/ - Twilight Tonic|/"
|
||||||
|
# Cocktails:3 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# And lock down the sign:
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Cocktails][Cocktails:4]]
|
||||||
|
@lock sign = get:false()
|
||||||
|
#
|
||||||
|
@set sign/get_err_msg = "The tree trunk that holds the sign has grown around it making it impossible to remove."
|
||||||
|
# Cocktails:4 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Needs the ability to create a drink.
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Cocktails][Cocktails:6]]
|
||||||
|
@set bartender/currentgame = "session1"
|
||||||
|
# Cocktails:6 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# The preps come in three forms with how detailed we want to spam the room.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Cocktails][Cocktails:7]]
|
||||||
|
@set bartender/triggers:session1 = {
|
||||||
|
"prep1": {
|
||||||
|
"desc": "Single preparation step for making a cocktail",
|
||||||
|
"timer": 1,
|
||||||
|
"events": [
|
||||||
|
"The bartender grabs a << few ^ couple of >> << bottles ^ jars ^ bottles ^ odd containers >> from << the shelf ^ a locked chest ^ a wooden box >>."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"prep2": {
|
||||||
|
"desc": "Preparation steps for making a cocktail",
|
||||||
|
"timer": 5,
|
||||||
|
"events": [
|
||||||
|
"The bartender grabs a << few ^ couple of >> << bottles ^ jars ^ bottles ^ odd containers >> from << the shelf ^ a locked chest ^ a wooden box >>.",
|
||||||
|
"<< He ^ The bartender >> shakes and strains the << drink ^ concoction ^ elixir >> into a cocktail glass."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"prep3": {
|
||||||
|
"desc": "Preparation steps for making a cocktail",
|
||||||
|
"timer": 4,
|
||||||
|
"events": [
|
||||||
|
"The bartender grabs a << few ^ couple of >> << bottles ^ jars ^ bottles ^ odd containers >> from << the shelf ^ a locked chest ^ a wooden box >>.",
|
||||||
|
"<< He ^ The bartender >> then shakes and strains the << drink ^ concoction ^ elixir >> into a cocktail glass.",
|
||||||
|
"He carefully, garnishes the << drink ^ cocktail >>."
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# Cocktails:7 ends here
|
||||||
|
|
||||||
|
|
||||||
|
# A haughty elf named Elendil
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Bartender][Bartender:1]]
|
||||||
|
@create/drop Bartender;barkeep;Elendil: typeclasses.chatbots.Bartender
|
||||||
|
# @update Bartender = typeclasses.chatbots.Bartender
|
||||||
|
# Bartender:1 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# And all the RP system stuff:
|
# And all the RP system stuff:
|
||||||
|
|
||||||
|
|
||||||
# [[file:../../../projects/mud.org::*Bartender][Bartender:3]]
|
# [[file:../../../projects/mud.org::*Bartender][Bartender:2]]
|
||||||
@set bartender/gender = "male"
|
@set bartender/gender = "male"
|
||||||
|
# Bartender:2 ends here
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Bartender][Bartender:3]]
|
||||||
|
py bt = self.search('Bartender'); bt.sdesc.add('blonde elf'); bt.db.pose = 'working behind the bar'
|
||||||
# Bartender:3 ends here
|
# Bartender:3 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# And default pose:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Bartender][Bartender:4]]
|
||||||
|
@pose default bartender = working behind the bar
|
||||||
|
# Bartender:4 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# And an un-puppeted pose:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Bartender][Bartender:5]]
|
||||||
|
@set bartender/pose_sleep = "fiddling with something behind the bar"
|
||||||
|
#
|
||||||
|
@set bartender/pose_default = "working behind the bar"
|
||||||
|
# Bartender:5 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# And a good description:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Bartender][Bartender:6]]
|
||||||
|
@desc Bartender = A haughty-looking elf with green eyes and long blond hair with two intricate braids accentuating incredibly pointed ears. His nose, pointed, often points straight up in order to look down on you.
|
||||||
|
# Bartender:6 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# As well as the automation:
|
# As well as the automation:
|
||||||
|
|
||||||
# [[file:../../../projects/mud.org::*Bartender][Bartender:9]]
|
# [[file:../../../projects/mud.org::*Bartender][Bartender:8]]
|
||||||
py me.search("bartender").backstory("tavern")
|
py me.search("bartender").backstory("tavern")
|
||||||
|
# Bartender:8 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# And let’s make him initially invisible:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Bartender][Bartender:9]]
|
||||||
|
@set Bartender/hidden_tag = "hidden_bartender"
|
||||||
|
#
|
||||||
|
@lock Bartender = view:tag(hidden_bartender)
|
||||||
# Bartender:9 ends here
|
# Bartender:9 ends here
|
||||||
|
|
||||||
|
|
||||||
|
# Seems that different triggering hooks could have different delayed responses. What sort of events? And do we bother if we convert the Bartender to a Chatbot?
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Automated Responses][Automated Responses:1]]
|
||||||
|
@set bartender/arrive:dabbler = "5 ;; say to old gnome Ah, welcome, sir. I've acquired another one of those whiskys from the Mud World. This one claims to taste like a... hrm... << burning hosptial ^ seagull's armpit, er wingpit, I guess ^ going down on a mermaid, wait, I believe you've done that ^ licking a salty ashtray >>. ;; 10 ;; emote takes a brown glass bottle from a chest, and pours some into a glass. ;; shake whisky = gnome"
|
||||||
|
# Automated Responses:1 ends here
|
||||||
|
|
||||||
# [[file:../../../projects/mud.org::*Automated Responses][Automated Responses:2]]
|
# [[file:../../../projects/mud.org::*Automated Responses][Automated Responses:2]]
|
||||||
@set bartender/arrive = "4 ;; say Welcome to the |wWyldwood Bar|n. Read the sign for a list of our cocktails, and let me know what you'd like to drink."
|
@set bartender/arrive = "4 ;; say Welcome to the |wWyldwood Bar|n. Read the sign for a list of our cocktails, and let me know what you'd like to drink."
|
||||||
# Automated Responses:2 ends here
|
# Automated Responses:2 ends here
|
||||||
|
|
@ -1323,6 +1540,262 @@ py me.search("bartender").backstory("tavern")
|
||||||
# Hide and Seek:6 ends here
|
# Hide and Seek:6 ends here
|
||||||
|
|
||||||
|
|
||||||
|
# Gives out candy, as there is a never-ending bowl of them on the bar.
|
||||||
|
# Gotta have something to munch on.
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Bowl of Candy][Bowl of Candy:1]]
|
||||||
|
@create/drop bowl of candies;bowl;candy : typeclasses.consumables.Producer
|
||||||
|
# Bowl of Candy:1 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# With a description:
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Bowl of Candy][Bowl of Candy:2]]
|
||||||
|
@desc bowl = A large white daisy forms a bowl holding a collection of colored hard candies.
|
||||||
|
# Bowl of Candy:2 ends here
|
||||||
|
|
||||||
|
|
||||||
|
# Hold off on the viewing:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Bowl of Candy][Bowl of Candy:4]]
|
||||||
|
@set bowl/hidden_tag = "hidden_bowl"
|
||||||
|
#
|
||||||
|
@lock bowl = view:tag(hidden_bowl)
|
||||||
|
# Bowl of Candy:4 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# We have to have the bowl of candy describe what it /makes/:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Bowl of Candy][Bowl of Candy:5]]
|
||||||
|
@set bowl/make_name = "candy"
|
||||||
|
# Bowl of Candy:5 ends here
|
||||||
|
|
||||||
|
|
||||||
|
# Including some plural aliases:
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Bowl of Candy][Bowl of Candy:6]]
|
||||||
|
@set bowl/make_aliases = ["candies"]
|
||||||
|
# Bowl of Candy:6 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# And a verb when they /get/ the consumable:
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Bowl of Candy][Bowl of Candy:7]]
|
||||||
|
@set bowl/make_verb = "$conj(grab) a"
|
||||||
|
#
|
||||||
|
@set bowl/make_note = " from the bowl"
|
||||||
|
# Bowl of Candy:7 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# And the bowl needs to know the /description/ of the Consumable, so that it can attach that:
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Bowl of Candy][Bowl of Candy:9]]
|
||||||
|
@set bowl/make_desc = "Bright << red ^ orange ^ yellow ^ blue ^ violet >> candy with << flecks ^ spots ^ stripes >> of << red ^ orange ^ purple ^ violet ^ orange >>."
|
||||||
|
# Bowl of Candy:9 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# How many candies are there when you pick them?
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Bowl of Candy][Bowl of Candy:10]]
|
||||||
|
@set bowl/make_amount = 1
|
||||||
|
# Bowl of Candy:10 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# How many candies do you eat at a time:
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Bowl of Candy][Bowl of Candy:11]]
|
||||||
|
@set bowl/make_eat_amount = 1
|
||||||
|
# Bowl of Candy:11 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Messages can be randomly selected:
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Bowl of Candy][Bowl of Candy:12]]
|
||||||
|
@set bowl/make_eat_msgs = [
|
||||||
|
"Tastes of elderberry. Do I even know what that tastes like?",
|
||||||
|
"Tastes of elderflower...certainly not youngerflower.",
|
||||||
|
"Tastes of forest berry. I believe I got lucky with this one.",
|
||||||
|
"Wildflower, as that intense flavor is not tame.",
|
||||||
|
"Tastes of eggnog, with an aftertaste of Cousin Eddie's RV.",
|
||||||
|
"Tastes like pickled cucumber.",
|
||||||
|
"Tastes like maple bacon.",
|
||||||
|
"That burning horseradish is clearing the sinuses!",
|
||||||
|
"Sriracha flavor!? Wow!",
|
||||||
|
"Taste of cotton candy covered bacon. Two flavors distinct flavors for sure.",
|
||||||
|
"Tastes like a bowl of borscht.",
|
||||||
|
"Dill pickle candy!?",
|
||||||
|
"Curry flavored candy!?",
|
||||||
|
"Tastes uniquely of smoked paprika.",
|
||||||
|
"Tastes of blue cheese, without all the calories.",
|
||||||
|
"Tastes like charcoal.",
|
||||||
|
"Tastes like olive oil.",
|
||||||
|
"Tastes like honeycomb... with bits of bee.",
|
||||||
|
"Tastes like cereal milk.",
|
||||||
|
"Tastes like avocado. A very ripe avocado.",
|
||||||
|
"Tastes like dirt...and worm.",
|
||||||
|
"Tastes like fish sauce...anchovy? mackeral? carp?",
|
||||||
|
"Garlic flavored hard candy, a favorite of witches.",
|
||||||
|
"Tastes like fermented soybean. I'm sure this is a delicacy somewhere.",
|
||||||
|
"Tastes like tomato... sauce.",
|
||||||
|
"Tastes like sauerkraut.",
|
||||||
|
"Tastes like honey mustard.",
|
||||||
|
"Tastes like charred pineapple.",
|
||||||
|
"Tastes like smoked salmon.",
|
||||||
|
"Tastes like pumpkin curry, and rice...with a hint of spice.",
|
||||||
|
"Tastes like miso caramel and wasp. Candy-covered insects is an odd choice.",
|
||||||
|
"Tastes like celery.",
|
||||||
|
"Tastes like pumpernickel.",
|
||||||
|
"Tastes like spicy kimchi.",
|
||||||
|
]
|
||||||
|
# Bowl of Candy:12 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# A haughty elf named Elendil
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Pixie Quartet][Pixie Quartet:1]]
|
||||||
|
@create/drop Pixies;pixie: typeclasses.puppets.Puppet
|
||||||
|
# Pixie Quartet:1 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# And give them a better name/description:
|
||||||
|
|
||||||
|
# And all the RP system stuff:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Pixie Quartet][Pixie Quartet:2]]
|
||||||
|
py bt = self.search('pixies'); bt.db._sdesc = "quartet of pixies"; bt.db.pose_default = 'playing music atop a giant fieldcap mushroom'; bt.db.pose = 'playing music'; bt.db.gender = 'ambiguous';
|
||||||
|
# Pixie Quartet:2 ends here
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Pixie Quartet][Pixie Quartet:3]]
|
||||||
|
@desc pixies = Atop a giant fieldcap mushroom, a quartet of pixies playing the strangest instruments you've never seen, fill the room with music.
|
||||||
|
# Pixie Quartet:3 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# And default pose:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Pixie Quartet][Pixie Quartet:4]]
|
||||||
|
pose default pixies = drinking at the bar instead of performing
|
||||||
|
# Pixie Quartet:4 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# And an unpuppeted pose:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Pixie Quartet][Pixie Quartet:5]]
|
||||||
|
@set pixies/pose_sleep = "playing music atop a giant mushroom"
|
||||||
|
# Pixie Quartet:5 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# And details:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Pixie Quartet][Pixie Quartet:6]]
|
||||||
|
@detail mushroom = A giant, beige-colored mushroom grows on the side of this room providing a perfect stage for the pixie musicians.
|
||||||
|
# Pixie Quartet:6 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# And when Dabbler arrives …
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Pixie Quartet][Pixie Quartet:8]]
|
||||||
|
@set pixies/arrive:dabbler = "12 ;; gm The quartet on the mushroom start playing an << interesting ^ odd >> << composition ^ song ^ arrangment >>. ;; The pixie leader says, \"As you can tell, we're playing << a jazz standard ^ a jazz melody ^ something the Mudders call, jazz fusion >>. That's right, something we picked up from << our travels in ^ >> the Mud World."
|
||||||
|
# Pixie Quartet:8 ends here
|
||||||
|
|
||||||
|
|
||||||
|
# Next great NPC will a cameo from the Awakened Shrub.
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Awakened Shrub][Awakened Shrub:1]]
|
||||||
|
@create/drop Shrub;bush;chalkboard;awakened shrub: typeclasses.puppets.Shrub
|
||||||
|
# Awakened Shrub:1 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# And describe it:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Awakened Shrub][Awakened Shrub:2]]
|
||||||
|
@desc shrub = If a small shrub had the facial muscles to smile and show how much it enjoys itself, this lil' guy would be it. The short leaves indicates it once was a boxwood, but the way it nurses that glass of water shows those days are way behind. When you look its way, it waves a branch at you. You notice one of its branches clutch a small chalkboard while another holds a piece of chalk.
|
||||||
|
# Awakened Shrub:2 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# And tag it:
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Awakened Shrub][Awakened Shrub:3]]
|
||||||
|
py bt = self.search('shrub'); bt.db.gender = 'neutral'; bt.db._sdesc = 'shrub'; bt.db.pose_default = 'nursing a glass of water'; bt.db.pose = 'nursing a glass of water'
|
||||||
|
# Awakened Shrub:3 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# And default pose:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Awakened Shrub][Awakened Shrub:4]]
|
||||||
|
pose default shrub = writing something in a notebook
|
||||||
|
# Awakened Shrub:4 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# And an unpuppeted pose:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Awakened Shrub][Awakened Shrub:5]]
|
||||||
|
@set shrub/pose_sleep = "nursing a glass of water"
|
||||||
|
# Awakened Shrub:5 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# And let’s not let anyone pick it up:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Awakened Shrub][Awakened Shrub:6]]
|
||||||
|
@set shrub/get_err_msg = "It doesn't seem to appreciate your advances and shakes a top branch, no. Remember, no means, no."
|
||||||
|
# Awakened Shrub:6 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Let’s set the location where it will store its transcripts:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Awakened Shrub][Awakened Shrub:7]]
|
||||||
|
@set shrub/transcripts_path = 'bar-transcripts/%Y-%m-%d.html'
|
||||||
|
#
|
||||||
|
# And the header as well:
|
||||||
|
@set shrub/header_file = "transcripts/header-template.html"
|
||||||
|
# Awakened Shrub:7 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Be cool if it could write something:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Awakened Shrub][Awakened Shrub:9]]
|
||||||
|
@set shrub/inside = "The chalkboard reads,|/|/ Hello, My name is Shrub McShrubberson. What's yours?"
|
||||||
|
# Awakened Shrub:9 ends here
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Awakened Shrub][Awakened Shrub:11]]
|
||||||
|
@detail chalkboard = The shrub is holding a small chalkboard with a wood frame.
|
||||||
|
# Awakened Shrub:11 ends here
|
||||||
|
|
||||||
|
|
||||||
# The river from the flows into a marsh:
|
# The river from the flows into a marsh:
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -2181,6 +2654,21 @@ py timed_script = evennia.create_script(key="Create Horns",
|
||||||
# Trampoli the Witch:11 ends here
|
# Trampoli the Witch:11 ends here
|
||||||
|
|
||||||
|
|
||||||
|
# The [[file:~/src/moss-n-puddles/typeclasses/scripts.py::class CreateHorns(Script):][CreateHorns script]] will generate a horn.
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Mist Horn][Mist Horn:1]]
|
||||||
|
py timed_script = evennia.create_script(
|
||||||
|
key="Create Horns",
|
||||||
|
typeclass='typeclasses.scripts.CreateHorns',
|
||||||
|
interval=60 * 10,
|
||||||
|
start_delay=True,
|
||||||
|
autostart=True,
|
||||||
|
attributes=[("destination", here)]
|
||||||
|
)
|
||||||
|
# Mist Horn:1 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.
|
# 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:
|
# Return to the Forest:
|
||||||
|
|
@ -2259,6 +2747,15 @@ Someone has set a nice |Ychair|n for viewing.
|
||||||
# Lazy Dock:9 ends here
|
# Lazy Dock:9 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# When a character arrives at the Lazy Dock and wait, the room gives a hint about the horn and the boat occurring.
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Lazy Dock][Lazy Dock:10]]
|
||||||
|
@set mp06/arrive = "40 ;; gm Did you hear that? Sounds like a distant horn ... Perhaps the wind. ;; 60 ;; gm You think you saw a boat out on the sea ... but maybe not. "
|
||||||
|
# Lazy Dock:10 ends here
|
||||||
|
|
||||||
|
|
||||||
# We’ll get ready for making potions by allowing one to collect water from _all_ the places, like the salty sea:
|
# We’ll get ready for making potions by allowing one to collect water from _all_ the places, like the salty sea:
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -2418,55 +2915,55 @@ py me.search("raven").backstory("raven")
|
||||||
|
|
||||||
# With a message about leaving the trees so that I don’t have to repeat that in the room description:
|
# With a message about leaving the trees so that I don’t have to repeat that in the room description:
|
||||||
|
|
||||||
# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:2]]
|
# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:3]]
|
||||||
@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."
|
@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
|
# Sandy Shore:3 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# And a description:
|
# And a description:
|
||||||
|
|
||||||
# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:3]]
|
# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:4]]
|
||||||
@desc south = You see a shack down along the sandy shore.
|
@desc south = You see a shack down along the sandy shore.
|
||||||
# Sandy Shore:3 ends here
|
# Sandy Shore:4 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# And move ourselves there:
|
# And move ourselves there:
|
||||||
|
|
||||||
# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:4]]
|
# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:5]]
|
||||||
@teleport mp15
|
@teleport mp15
|
||||||
# Sandy Shore:4 ends here
|
# Sandy Shore:5 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# And describe the walk back to the dock:
|
# And describe the walk back to the dock:
|
||||||
|
|
||||||
# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:5]]
|
# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:6]]
|
||||||
@set north/traverse_msg = "You walk along the shore of the lavender sea back to the dock."
|
@set north/traverse_msg = "You walk along the shore of the lavender sea back to the dock."
|
||||||
# Sandy Shore:5 ends here
|
# Sandy Shore:6 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# And a description:
|
# And a description:
|
||||||
|
|
||||||
# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:6]]
|
# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:7]]
|
||||||
@desc north = The sandy shore to the north ends at a dock, jutting into the lavender sea.
|
@desc north = The sandy shore to the north ends at a dock, jutting into the lavender sea.
|
||||||
# Sandy Shore:6 ends here
|
# Sandy Shore:7 ends here
|
||||||
|
|
||||||
|
|
||||||
# And describe this.
|
# And describe this.
|
||||||
|
|
||||||
# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:7]]
|
# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:8]]
|
||||||
@desc here = Puppy-dog |Ywaves|n on a lavender |Ysea|n, snap your heels half-heartedly. Walking hard steps, punching crusted |Ysand|n, difficulty crossing land. Robust |Yshack|n squatting below a |Ypine|n, locked door holding painted |Ysign|n.
|
@desc here = Puppy-dog |Ywaves|n on a lavender |Ysea|n, snap your heels half-heartedly. 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
|
# Sandy Shore:8 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# And details?
|
# And details?
|
||||||
|
|
||||||
|
|
||||||
# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:8]]
|
# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:9]]
|
||||||
@detail waves = Despite the inclement weather, the waves ripple gently against the shore.
|
@detail waves = Despite the inclement weather, the waves ripple gently against the shore.
|
||||||
#
|
#
|
||||||
@detail sea;lavender sea = Is that a |Yboat|n you see sailing in the distance?
|
@detail sea;lavender sea = Is that a |Yboat|n you see sailing in the distance?
|
||||||
|
|
@ -2474,7 +2971,7 @@ py me.search("raven").backstory("raven")
|
||||||
@detail boat;ship = The mastless ship looks like a giant leaf. Wonder if it comes to shore?
|
@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.
|
@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
|
# Sandy Shore:9 ends here
|
||||||
|
|
||||||
|
|
||||||
# Part of the [[Potions and their Ingredients][Alchemist Path]], we use sand as an ingredient in a potion we want to make.
|
# Part of the [[Potions and their Ingredients][Alchemist Path]], we use sand as an ingredient in a potion we want to make.
|
||||||
|
|
@ -3291,6 +3788,52 @@ drop ball
|
||||||
# Chairs:5 ends here
|
# Chairs:5 ends here
|
||||||
|
|
||||||
|
|
||||||
|
# This golden NPC always hangs around our gnome, recording all that transpires.
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Dabbler’s Butterfly][Dabbler’s Butterfly:1]]
|
||||||
|
@create/drop golden butterfly;butterfly;recorder: typeclasses.things.Scribe
|
||||||
|
# Dabbler’s Butterfly:1 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# And describe it:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Dabbler’s Butterfly][Dabbler’s Butterfly:2]]
|
||||||
|
@desc butterfly = A flying insect with iridescent wings that flicker a golden hue. Is it carrying a tiny a notepad and pen?
|
||||||
|
# Dabbler’s Butterfly:2 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Let’s make it hidden for the moment:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Dabbler’s Butterfly][Dabbler’s Butterfly:3]]
|
||||||
|
@lock butterfly = view:tag(hidden_butterfly)
|
||||||
|
# Dabbler’s Butterfly:3 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# And let’s not let anyone pick it up:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Dabbler’s Butterfly][Dabbler’s Butterfly:4]]
|
||||||
|
@set butterfly/get_err_msg = "It quickly flutters away, only to land a few feet away."
|
||||||
|
# Dabbler’s Butterfly:4 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Let’s set the location where it will store its transcripts:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Dabbler’s Butterfly][Dabbler’s Butterfly:5]]
|
||||||
|
@set butterfly/transcripts_path = 'transcripts/cozy-%Y-%m-%d.html'
|
||||||
|
#
|
||||||
|
@set butterfly/header_file = "transcripts/cozy-header-template.html"
|
||||||
|
# Dabbler’s Butterfly:5 ends here
|
||||||
|
|
||||||
|
|
||||||
# My characters should be NPCs, so they can stick around if I’m not logged in.
|
# My characters should be NPCs, so they can stick around if I’m not logged in.
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -3483,7 +4026,7 @@ pose gnome/default = smoking his pipe
|
||||||
|
|
||||||
|
|
||||||
# [[file:../../../projects/mud.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:1]]
|
# [[file:../../../projects/mud.org::*Stoat the Wee Beastie][Stoat the Wee Beastie:1]]
|
||||||
@create/drop wee beastie;Mochi;stoat: typeclasses.pets.WeeBeastie
|
@create/drop wee beastie;Mochi;stoat;pet: typeclasses.pets.WeeBeastie
|
||||||
# Stoat the Wee Beastie:1 ends here
|
# Stoat the Wee Beastie:1 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -4531,7 +5074,7 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti
|
||||||
|
|
||||||
|
|
||||||
# [[file:../../../projects/mud.org::*Dark Tunnel][Dark Tunnel:2]]
|
# [[file:../../../projects/mud.org::*Dark Tunnel][Dark Tunnel:2]]
|
||||||
@create/drop trapdoor:typeclasses.things.ClosingDoor
|
@create/drop trapdoor: typeclasses.things.ClosingDoor
|
||||||
#
|
#
|
||||||
@desc trapdoor = A wood door with reinforced iron bands on the floor, under the heavy mattress.
|
@desc trapdoor = A wood door with reinforced iron bands on the floor, under the heavy mattress.
|
||||||
#
|
#
|
||||||
|
|
@ -4572,7 +5115,7 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti
|
||||||
|
|
||||||
|
|
||||||
# [[file:../../../projects/mud.org::*Dark Tunnel][Dark Tunnel:4]]
|
# [[file:../../../projects/mud.org::*Dark Tunnel][Dark Tunnel:4]]
|
||||||
@teleport/quiet mp18
|
@teleport/quiet mp20
|
||||||
#
|
#
|
||||||
@desc here = A cold, musty tunnel made of |Ystone blocks|n, tapered to form an large dome overhead. You hear a slight whistling sound, which may explain why this unground place is neither dusty or musty.
|
@desc here = A cold, musty tunnel made of |Ystone blocks|n, tapered to form an large dome overhead. You hear a slight whistling sound, which may explain why this unground place is neither dusty or musty.
|
||||||
#
|
#
|
||||||
|
|
@ -4586,106 +5129,6 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti
|
||||||
# Dark Tunnel:4 ends here
|
# Dark Tunnel:4 ends here
|
||||||
|
|
||||||
|
|
||||||
# Let’s connect the Bar to the Lair through a labyrinth of tunnels.
|
|
||||||
|
|
||||||
|
|
||||||
# [[file:../../../projects/mud.org::*Dungeon WIP][Dungeon WIP:1]]
|
|
||||||
@teleport/quiet mp21
|
|
||||||
#
|
|
||||||
# Create the next room...
|
|
||||||
@desc down = The tunnel continues down into the darkness.
|
|
||||||
#
|
|
||||||
@set down/traverse_msg = "You carefully pick your way down the tunnel. It curves. It veers. It corners...."
|
|
||||||
#
|
|
||||||
@dig Tunnel End;mp18:typeclasses.rooms_dark.DarkRoom = ladder down into the dark;down;ladder;tunnel,ladder to trapdoor;trapdoor;up;ladder;door
|
|
||||||
#
|
|
||||||
@desc ladder = Through the open trapdoor, you see a ladder that you can climb down into a cold, damp darkness.
|
|
||||||
#
|
|
||||||
@set ladder/traverse_msg = "With the trapdoor open, you climb down the ladder into the darkness... Suddenly, your foot slips, and you fall, landing on the stone floor!"
|
|
||||||
#
|
|
||||||
@set here/open_exit = $search(ladder down into the dark)
|
|
||||||
#
|
|
||||||
@set here/open_item = "trapdoor"
|
|
||||||
#
|
|
||||||
@teleport/tonone ladder down into the dark
|
|
||||||
# Dungeon WIP:1 ends here
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Let’s bring the “ladder” exit back by opening and closing the trapdoor:
|
|
||||||
|
|
||||||
|
|
||||||
# [[file:../../../projects/mud.org::*Dungeon WIP][Dungeon WIP:2]]
|
|
||||||
@set here/open_exit_msg = "$You() $conj(open) the trapdoor, revealing a ladder leading down into darkness."
|
|
||||||
#
|
|
||||||
@set here/close_exit_msg = "$You() $conj(close) the trapdoor. Don't want anyone to fall in."
|
|
||||||
# Dungeon WIP:2 ends here
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# And let’s create the trapdoor:
|
|
||||||
|
|
||||||
|
|
||||||
# [[file:../../../projects/mud.org::*Dungeon WIP][Dungeon WIP:3]]
|
|
||||||
@create/drop trapdoor
|
|
||||||
#
|
|
||||||
@desc trapdoor = A wood door with reinforced iron bands on the floor. An iron ring allows you to |gopen|n it.
|
|
||||||
#
|
|
||||||
@lock trapdoor = get:false()
|
|
||||||
#
|
|
||||||
@set trapdoor/get_err_msg = "The hinges of the trapdoor allows you to |gopen|n the door, but not take it."
|
|
||||||
#
|
|
||||||
@set trapdoor/pull_msg = "Sorry, the command you are looking for is |gopen|n...not pull. Good guess, though."
|
|
||||||
# Dungeon WIP:3 ends here
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Let’s enter the belly of this beast.
|
|
||||||
|
|
||||||
|
|
||||||
# [[file:../../../projects/mud.org::*Dungeon WIP][Dungeon WIP:4]]
|
|
||||||
@teleport/quiet mp18
|
|
||||||
#
|
|
||||||
@desc here = A cold, musty tunnel made of stone blocks, tapered to form an arch overhead. A ladder here leads up to a trapdoor, and the tunnel continues on into the distance.
|
|
||||||
#
|
|
||||||
@desc ladder = A metal ladder where a slimy mildew of sorts has grown on the bottom rungs. Better be careful.
|
|
||||||
#
|
|
||||||
@set ladder/traverse_msg = "You carefully ascend up the ladder, opening the trapdoor."
|
|
||||||
#
|
|
||||||
@detail trapdoor = A wood door with reinforced iron bands on the floor. An iron ring allows you to |gopen|n it.
|
|
||||||
#
|
|
||||||
@detail stone;blocks = The stone blocks that support the tunnel are well made, and for the most part, keep out water. But the crevises seem mortared with a green mildew.
|
|
||||||
# Dungeon WIP:4 ends here
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Let’s make the end of the tunnel look a lot like the beginning:
|
|
||||||
|
|
||||||
|
|
||||||
# Let’s create another trapdoor and a ladder leading to the Lair:
|
|
||||||
|
|
||||||
|
|
||||||
# [[file:../../../projects/mud.org::*Dungeon WIP][Dungeon WIP:5]]
|
|
||||||
@open ladder to trapdoor;trapdoor;up;ladder;climb,ladder down into the dark;down;ladder = mp07
|
|
||||||
#
|
|
||||||
@desc ladder = A metal ladder where a slimy mildew of sorts has grown on the bottom rungs. Better be careful.
|
|
||||||
#
|
|
||||||
@set ladder/traverse_msg = "You carefully ascend up the ladder, opening the trapdoor."
|
|
||||||
#
|
|
||||||
#
|
|
||||||
@detail trapdoor = A wood door with reinforced iron bands on the floor. An iron ring allows you to |gopen|n it.
|
|
||||||
#
|
|
||||||
@detail stone;blocks = The stone blocks that support the tunnel are well made, and for the most part, keep out water. But the crevises seem mortared with a green mildew.
|
|
||||||
# Dungeon WIP:5 ends here
|
|
||||||
|
|
||||||
# [[file:../../../projects/mud.org::*Dungeon WIP][Dungeon WIP:6]]
|
|
||||||
@desc down = The tunnel continues down into the darkness.
|
|
||||||
#
|
|
||||||
@set down/traverse_msg = "You carefully pick your way down the tunnel. It curves. It veers. It corners...."
|
|
||||||
# Dungeon WIP:6 ends here
|
|
||||||
|
|
||||||
|
|
||||||
# The deep forest is a place where all the Puppets can hang out when not in use.
|
# The deep forest is a place where all the Puppets can hang out when not in use.
|
||||||
|
|
||||||
# [[file:../../../projects/mud.org::*Deep Forest][Deep Forest:1]]
|
# [[file:../../../projects/mud.org::*Deep Forest][Deep Forest:1]]
|
||||||
|
|
@ -4735,8 +5178,51 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti
|
||||||
# I’ve hardcoded the path of this =Traveler=, but it would be nice to be able to have different Travelers follow different paths.
|
# I’ve hardcoded the path of this =Traveler=, but it would be nice to be able to have different Travelers follow different paths.
|
||||||
|
|
||||||
|
|
||||||
# [[file:../../../projects/mud.org::*Darol the Flamboyant Dragon][Darol the Flamboyant Dragon:1]]
|
# [[file:../../../projects/mud.org::*Sir Roblees the Flamboyant Dragon][Sir Roblees the Flamboyant Dragon:1]]
|
||||||
@create/drop Darol: typeclasses.chatbots.Dragon
|
@create/drop Sir Roblees: typeclasses.chatbots.Dragon
|
||||||
|
#
|
||||||
|
@set Sir Roblees/gender = "him"
|
||||||
|
#
|
||||||
|
@set Sir Roblees/pose = "twirling a tendril like a mustache"
|
||||||
|
#
|
||||||
|
@set Sir Roblees/pose_sleep = "twirling a tendril like a mustache"
|
||||||
|
#
|
||||||
|
@set Sir Roblees/pose_default = "twirling a tendril like a mustache"
|
||||||
|
# Sir Roblees the Flamboyant Dragon:1 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Then wake it.
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Sir Roblees the Flamboyant Dragon][Sir Roblees the Flamboyant Dragon:2]]
|
||||||
|
py Sir Roblees = me.search("Sir Roblees") ; Sir Roblees.sdesc.add("tiny, orange dragon") ; Sir Roblees.backstory("dragon")
|
||||||
|
# Sir Roblees the Flamboyant Dragon:2 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Moving attributes:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Sir Roblees the Flamboyant Dragon][Sir Roblees the Flamboyant Dragon:3]]
|
||||||
|
@set Sir Roblees/traveling_direction = "east"
|
||||||
|
# Sir Roblees the Flamboyant Dragon:3 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# And get it moving:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Sir Roblees the Flamboyant Dragon][Sir Roblees the Flamboyant Dragon:4]]
|
||||||
|
@script Sir Roblees = typeclasses.chatbots.TravelingNPC
|
||||||
|
# Sir Roblees the Flamboyant Dragon:4 ends here
|
||||||
|
|
||||||
|
|
||||||
|
# We hard-code this character to walk from the Mysterious Stone Circle (=mp00=) and sail across the sea, and back again.
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../../../projects/mud.org::*Darol the Adventuring Hobbit][Darol the Adventuring Hobbit:1]]
|
||||||
|
@create/drop Darol: typeclasses.chatbots.Hobbit
|
||||||
#
|
#
|
||||||
@set Darol/gender = "him"
|
@set Darol/gender = "him"
|
||||||
#
|
#
|
||||||
|
|
@ -4745,34 +5231,34 @@ py bt = self.search('head'); bt.sdesc.add('curious figure'); bt.db.pose = 'sitti
|
||||||
@set Darol/pose_sleep = "twirling a tendril like a mustache"
|
@set Darol/pose_sleep = "twirling a tendril like a mustache"
|
||||||
#
|
#
|
||||||
@set Darol/pose_default = "twirling a tendril like a mustache"
|
@set Darol/pose_default = "twirling a tendril like a mustache"
|
||||||
# Darol the Flamboyant Dragon:1 ends here
|
# Darol the Adventuring Hobbit:1 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Then wake it.
|
# Then wake it.
|
||||||
|
|
||||||
|
|
||||||
# [[file:../../../projects/mud.org::*Darol the Flamboyant Dragon][Darol the Flamboyant Dragon:2]]
|
# [[file:../../../projects/mud.org::*Darol the Adventuring Hobbit][Darol the Adventuring Hobbit:2]]
|
||||||
py darol = me.search("Darol") ; darol.sdesc.add("tiny, orange dragon") ; darol.backstory("dragon")
|
py Darol = me.search("Darol") ; Darol.sdesc.add("tiny, orange dragon") ; Darol.backstory("dragon")
|
||||||
# Darol the Flamboyant Dragon:2 ends here
|
# Darol the Adventuring Hobbit:2 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Moving attributes:
|
# Moving attributes:
|
||||||
|
|
||||||
|
|
||||||
# [[file:../../../projects/mud.org::*Darol the Flamboyant Dragon][Darol the Flamboyant Dragon:3]]
|
# [[file:../../../projects/mud.org::*Darol the Adventuring Hobbit][Darol the Adventuring Hobbit:3]]
|
||||||
@set Darol/traveling_direction = "east"
|
@set Darol/traveling_direction = "east"
|
||||||
# Darol the Flamboyant Dragon:3 ends here
|
# Darol the Adventuring Hobbit:3 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# And get it moving:
|
# And get it moving:
|
||||||
|
|
||||||
|
|
||||||
# [[file:../../../projects/mud.org::*Darol the Flamboyant Dragon][Darol the Flamboyant Dragon:4]]
|
# [[file:../../../projects/mud.org::*Darol the Adventuring Hobbit][Darol the Adventuring Hobbit:4]]
|
||||||
@script Sir Roblees = typeclasses.chatbots.TravelingNPC
|
@script Darol = typeclasses.chatbots.TravelingNPC
|
||||||
# Darol the Flamboyant Dragon:4 ends here
|
# Darol the Adventuring Hobbit:4 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue