Limit ability to litter with berries, flowers, etc.

Also gave the wee beastie a taste for yellow flowers.
This commit is contained in:
Howard Abrams 2025-08-15 23:15:46 -07:00
parent a73faf0161
commit f293b506b9
7 changed files with 451 additions and 19 deletions

View file

@ -13,7 +13,20 @@ from typeclasses.objects import Object
from utils.word_list import routput # , choices
class Consumable(Object):
class Litterable(Object):
"""
Objects, that if dropped, are deleted instead.
The default thing for a producer.
"""
def at_pre_drop(self, dropper):
"""
Let's keep this world tidy.
"""
dropper.announce_action(f"$You() $conj(drop) the {self.name}.")
self.delete()
class Consumable(Litterable):
"""
Create with a command:
@ -60,7 +73,7 @@ class Consumable(Object):
self.delete()
class Herb(Object):
class Herb(Litterable):
"""
Essentially a marker for something that can go in a cauldron.
"""

View file

@ -459,6 +459,57 @@ class Friendly(Pet):
petter.announce_action(f"$You() $conj(pet) {self.name}.")
class WeeBeastie(Friendly):
"""
The stoat that lives in Dabbler's house, is a finicky eater.
"""
def feed(self, feeder, item=None):
"""
Feeding the beast. If item is None, we choose something
the character has, and go with that...
"""
# Categorize items that can be used to feed the beast:
def is_flower(item):
return (not item and feeder.has("yellow flower")) or \
(item and item.key == 'yellow flower')
# Based on the reaction to the feeder, the adjectives may alter:
noun = "The " + random.choice(["wee", "furry", "white", "adorable"]) + " beastie"
match self.friendly_reaction(feeder):
case Reaction.SCARED:
how_sniff = "carefully"
how_eat = "curiously"
and_then = "nonchalantly walks away"
case Reaction.CONCERNED:
how_sniff = "gently"
how_eat = "gingerly"
and_then = "indifferently returns to its nap"
case Reaction.INTERESTED:
how_sniff = "quickly"
how_eat = "curiously"
and_then = "gingerly sniffs to see what else $you() might have"
case _:
how_sniff = "excitedly"
how_eat = random.choice(["eagerly", "gladly", "vigorously"])
and_then = random.choice([
"gives $pron(you,op) a cute lick as if to say, Thank you",
"purrs in appreciation for the treat",
"rubs its wee widdle head under $pron(you,op) chin in gratitude",
])
if is_flower(item):
msg = f"{noun} {how_sniff} sniffs $your() << hand holding a ^>> flower. It {how_eat} eats it, and {and_then}."
self.adjust_character(feeder, 100)
feeder.has('yellow flower').delete()
else:
msg = f"{noun} doesn't appear interested in anything you have."
if msg:
feeder.announce_action(msg)
class BHB(Friendly):
def return_appearance(self, looker):
if self.db.is_awake:

View file

@ -20,8 +20,9 @@ from commands.misc import (CmdSetPuddle,
from commands.consumables import CmdSetMakeConsumable
from commands.wizards import CmdSetWand
from utils.word_list import routput, choices, paragraph
from .scripts import KnockScript
from .objects import Object
from typeclasses.consumables import Litterable
from typeclasses.objects import Object
from typeclasses.scripts import KnockScript
class Medal(Object):
@ -78,7 +79,7 @@ class CoinPurse(Object):
return self.how_much() >= at_least
class Rope(Object):
class Rope(Litterable):
"""
A rope can be used in particular circumstances.
"""
@ -318,7 +319,7 @@ class Pipe(Object):
The << smoke ^ >> << monster ^ {monster} >> changes << colors ^ to purple ^ to blue ^ to pink>> before << dissipating ^ dispersing >>.""")
self.location.location.msg_contents(msg)
class Wood(Object):
class Wood(Litterable):
"An object to burn."
def at_object_creation(self):
self.db.singular = "a log"
@ -942,7 +943,7 @@ class BagofJunk(Object):
description = f"An interesting item found in a {where}."
item = spawn({
"typeclass": "typeclasses.objects.Object",
"typeclass": "typeclasses.consumables.Litterable",
"key": self.db.latest_item,
"desc": description
})[0]

View file

@ -92,6 +92,11 @@ textarea.inputfield:focus {
color: #19130d;
}
.color-003 {
font-weight: bold;
color: #ffd700;
text-shadow: 2px 2px;
}
.color-015 {
font-weight: bold;
color: black;

View file

@ -37,9 +37,7 @@ HELP_ENTRY_DICTS = [
"key": "start",
"aliases": ["intro"],
"locks": "read:all()",
"text": """Again, welcome to my cozy little game.
To |wplay this game|n, you typically type a |w<verb>|n for an action, or |w<verb> <object>|n combinations. For instance, type |glook|n to look around the area, and |glook tree|n to examine the trees in particular. The more you look, the more you explore.
"text": """To |wplay this game|n, you typically type a |w<verb>|n for an action, or |w<verb> <object>|n combinations. For instance, type |glook|n to look around the area, and |glook tree|n to examine the trees in particular. The more you look, the more you explore.
What verbs are available depends on where you are and what you might be holding. Type |ghelp|n with no other option to get a list of those commands. Then type |ghelp look|n to get details on how to use the |wlook|n verb.
@ -65,8 +63,6 @@ You will also want to |wadd to that description|n with a pose, like:
These two labels will be shown to anyone looking around the area you are in.
What is the goal of this game? Just to escape the chaos of the world and explore an idyllic setting. I call it my |yegg hunt game|n, as the game is full odd stuff to discover. Feel free to find me to chat, but good luck finding me, as I may be hiding.
This is the end of this help section, but I have some related topics to this intro, so you can type |ghelp start/commands|n to get a list of typical commands, or just start playing this game.
Enjoy!
@ -88,6 +84,8 @@ A command is typically a 'verb'. The most common ones in this game are:
Type |ghelp|n and those commands to get more information on its usage.
Or see the online Player's Handbook at https://howardabrams.com/cozy-players-guide/
## Exits
Exits are special commands, and move you to a new location. So typing |gsouth|n will move you to a new location (assuming that exit is available). Some exits can be abbreviated, so typing |gs|n alone is the same as 'south'.
@ -105,17 +103,19 @@ Leave your current character by typing:
|gooc|n
Then delete your old character with:
While you don't have to, you can delete your old character with:
|gchardelete <original-name>|n
This only deletes the character of that name, not your account with that name.
This only deletes the character of that name, not your account.
Next, create a new character by typing:
|gcharcreate Rambler = A frumpy, but spry person with large ears and dark blue cloak.|n
|gcharcreate|n
And now, assume that character by typing:
And follow the step-by-step guide to creating a new character.
Assume a previously created character by typing:
|gic Rambler|n"""
},

View file

@ -768,7 +768,7 @@ send "drop book\n"
expectit "flies"
send "sit\n"
expectit "You sit in the few overstuffed chairs."
expectit "You sit in "
send "hint\n"
expectit "You are in a cozy and casual place"
@ -1050,7 +1050,7 @@ send "up\n"
expectit "Cozy House"
send "give laughing potion to gnome\n"
expectit "You give a laughing potion to Dabbler."
expectit "You give a laughing potion"
# Close the log file
log_file

View file

@ -1460,6 +1460,123 @@ 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?
# [[file:../../../projects/mud.org::*Jars][Jars:1]]
@tel/quiet Homey Hut
#
@create/drop assortment of jars;jars;jar: typeclasses.puzzles.Changling
# Jars:1 ends here
# Cant get them:
# [[file:../../../projects/mud.org::*Jars][Jars:2]]
@lock jars = get:false()
#
@set jars/get_err_msg = "\"Do not steal our winter provisionings,\" the horned wolf skull says. \"What are you a thief?\""
# Jars:2 ends here
# And the generate description:
# [[file:../../../projects/mud.org::*Jars][Jars:3]]
@set jars/desc_first_prefix = "<< Fascinating ^ Interesting ^ Curious >> << collection of ^ assortment of ^ >> << jars ^ contents ^ ingredients >>. You look at one << jar ^ >> with << an afixed ^ an attached >> label of << scrawling ^ scribbling ^ squiggling >> << ink ^ writing ^ letters >>,|w"
#
@set jars/desc_prefix = "You look at another << jar ^ >> with << an afixed ^ an attached >> label of << scrawling ^ scribbling ^ squiggling >> << ink ^ writing ^ letters >>,|w"
#
@set jars/desc_postfix = ""
# Jars:3 ends here
# And now for a list of the contents:
# [[file:../../../projects/mud.org::*Jars][Jars:4]]
@set jars/descs = (
"Dragon's Breath|n. A swirling mist of iridescent smoke that changes color, said to contain the essence of fire.",
"Mermaid Tears|n. Clear, crystalline droplets that shimmer with a hint of blue, believed to bring good fortune.",
"Phoenix Ashes|n. A small jar filled with fine, red and gold ash, said to have the power of rebirth.",
"Enchanted Rose Petals|n. Dried petals that change color with the phases of the moon, said to attract love.",
"Eye of Newt|n. Filled with many small eyeballs.",
"Timekeeper's Sand|n. Fine, golden sand that flows slowly, rumored to have the power to manipulate time.",
"Cursed Bone Shards|n. Jagged pieces of bone, each one etched with strange symbols and glowing faintly.",
"Enchanted Honey|n. Thick, golden honey that glimmers with tiny flecks of light, like captured sunlight.",
"Faerie Wings|n. Delicate, translucent wings that shimmer in various colors, said to grant agility.",
"Elemental Stones|n. Small, smooth stones representing earth, air, fire, and water, each with a unique glow.",
"Owlbear Hair|n. Strands of shimmering hair from various magical creatures, said to enhance spells.",
"Frosted Rose Petals|n. Dried flowers that appear to be covered in frost, said to bring winter's magic.",
"Toadstool Caps|n. Vibrant mushroom caps of red, orange, and yellow, and adorned with delicate white speckles that catch the light.",
"Glowcaps|n. Clusters of tiny, bioluminescent mushrooms that emit a soft, greenish glow.",
"Dream|n. Fluffy, cotton-like wisps gently floating, resembling miniature clouds in the jar.",
"Mandrake Root|n. A twisted, gnarled root with a faintly green hue, nestled in a jar of dark soil.",
)
# Jars:4 ends here
# Herbs
# Like the [[*Jars][Jars]], the herbs return a different response each time they are viewed.
# [[file:../../../projects/mud.org::*Herbs][Herbs:1]]
@create/drop collection of herbs;herbs;herb: typeclasses.puzzles.Changling
# Herbs:1 ends here
# While the skull protects the jars, we will have the demon stop the herbs from being pinched.
# [[file:../../../projects/mud.org::*Herbs][Herbs:2]]
@lock herbs = get:false()
#
@set herbs/get_err_msg = "On the wall, the carving comes to life, and flies next to you. \"Do not take her harvest,\" it says as it bats your hand away."
# Herbs:2 ends here
# [[file:../../../projects/mud.org::*Herbs][Herbs:3]]
@set herbs/desc_first_prefix = "<< Plenty ^ Many >> bundles around the room. One << particular ^ peculiar ^ >> << bundle ^ bouquet garni >> of "
#
@set herbs/desc_prefix = "<< Another ^ This >> << particular ^ peculiar ^ >> << bundle ^ bouquet garni >> of "
#
@set herbs/desc_postfix = " Tied with << twine ^ string ^ lace >> and << hanging from a rafter ^ hung from a nail ^ dangling from a post of a chair >>."
# Herbs:3 ends here
# And the individiaul choices are more appearance, and possibly smell, without claiming to be /worldly herbs/. Would like to add some dried red and other colored leaves to make it more fantastical.
# [[file:../../../projects/mud.org::*Herbs][Herbs:4]]
@set herbs/descs = (
"grayish-green, crinkled leaves, and has a strong, earthy aroma, like sage.",
"small, purple flowers, with that sweet, lavender scent.",
"thin, woody needles, and has a strong, pine-like fragrance, like rosemary.",
"small, white flowers with yellow centers, resembling tiny daisies.",
"tiny, greenish-brown leaves, with a robust, herbal scent, like thyme.",
"dark green leaves with a refreshing, minty aroma.",
"brown leaves, with a refreshing, minty aroma.",
"dark green and crinkled leaves, and have a sweet, peppery scent"
"brown, crinkled leaves, with a sweet, peppery, almost basil-like scent"
"grayish-green, feathery leaves, with a slightly bitter, mugwort-like aroma.",
"small, white and yellow flowers that have a feathery appearance, like yarrow.",
"dark green, almost brown leaves, with a slightly bitter aroma.",
"dark green leaves, some almost brown, with a coarse texture and earthy scent, like nettle.",
"feathery fronds, ranging from light green to brown, with a sweet, anise-like scent.",
"purple flowers (some brown), with a spiky center and a slightly sweet aroma, like echinacea.",
"bright orange to yellow flowers, with a slightly sweet, herbal scent.",
"dark green, smooth leaves, and have a strong, aromatic scent, like bay.",
"grayish-green, feathery leaves with a distinctive, bitter aroma.",
"brown and woody roots, with a strong, earthy Valerian-like smell.",
"brown, woody root with a sweet, distinct aroma, like licorice.",
)
# Herbs:4 ends here
# Talismans
# To give some character, we create some interesting art that decorates this hut.
@ -1861,6 +1978,184 @@ 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
# Sandy Shore:1 ends here
# With a mesage about leaving the trees so that I dont have to repeat that in the room description:
# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:2]]
@set south/traverse_msg = "Leaving the dock, you want along the soft sandy shore next to the Lavender Sea, enjoying the mesmerizing sound of the surf... until you come to a shack that blocks your stroll."
# Sandy Shore:2 ends here
# And a description:
# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:3]]
@desc south = You see a shack down along the sandy shore.
# Sandy Shore:3 ends here
# And move ourselves there:
# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:4]]
@teleport mp15
# Sandy Shore:4 ends here
# And describe the walk back to the dock:
# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:5]]
@set north/traverse_msg = "You walk along the shore of the lavender sea back to the dock."
# Sandy Shore:5 ends here
# And a description:
# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:6]]
@desc north = The sandy shore to the north ends at a dock, jutting into the lavender sea.
# Sandy Shore:6 ends here
# And describe this.
# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:7]]
@desc here = Puppy-dog |Ywaves|n on a lavender |Ysea|n, snap your heels half-heartedly. Walking hard steps, punching crusted |Ysand|n, difficulty crossing land. Robust |Yshack|n squatting below a |Ypine|n, locked door holding painted |Ysign|n.
# Sandy Shore:7 ends here
# And details?
# [[file:../../../projects/mud.org::*Sandy Shore][Sandy Shore:8]]
@detail waves = Despite the inclement weather, the waves ripple gently against the shore.
#
@detail sea;lavender sea = Is that a |Yboat|n you see sailing the sea in the distance?
#
@detail boat;ship = The mastless ship looks like a giant leaf. Wonder if it comes to shore?
#
@detail shack = Standing crookedly at the edge of the sandy shore, this shack's weathered planks, bleached by the salty mist, imparts a ghostly appearance. The roof, adorned with seashells and driftwood, appears to be a patchwork of nature's treasures, inviting curious souls to uncover the secrets hidden within.
# Sandy Shore:8 ends here
# Sand
# Part of the [[Potions and their Ingredients][Alchemist Path]], we use sand as an ingredient in a potion we want to make.
# [[file:../../../projects/mud.org::*Sand][Sand:1]]
@create/drop lot of sand;sand : typeclasses.consumables.Producer
#
@desc sand = Glittery sand with small flecks of lavender-colored gems.
#
@set sand/make_name = "bag of sand"
#
@set sand/make_verb = "$conj(fill) a small"
#
@set sand/make_desc = "Small leather pouch of sand with lavender gems."
#
@lock sand = view:tag(hidden_sand)
# Sand:1 ends here
# 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.
# [[file:../../../projects/mud.org::*Pine Flowers][Pine Flowers:1]]
@create/drop pine tree;pine;tree;flowers;flower = typeclasses.consumables.Producer
#
@desc pine = Windswept pine leans to shade the shack, protecting it somewhat from the regular occuring rain. Interesting, that the pine has beautiful, yellow |Yflowers|n.
#
@set pine/make_class = "typeclasses.consumables.Herb"
#
@set pine/make_name = "yellow flower"
#
@set pine/make_verb = "$conj(pick) a small"
#
@set pine/make_desc = "Briny smelling flower with purple spots."
#
@lock pine = view:tag(alchemist) # We want the user to be able to "look pine" as a detail?
# Pine Flowers:1 ends here
# Sign
# We make the sign as an “object” for others to read:
# [[file:../../../projects/mud.org::*Sign][Sign:1]]
@create/drop sign = typeclasses.readables.Readable
#
@desc sign = A hand-painted sign with beautiful calligraphy reads: |wFor Rent. See Dabbler for details.|n
#
@set sign/inside = "For Rent. See Dabbler for details."
#
@lock sign = get:false()
# Sign:1 ends here
# Salty Shack
# Lets keep this pretty empty.
# [[file:../../../projects/mud.org::*Salty Shack][Salty Shack:1]]
@teleport/quiet mp15
#
@dig Salty Shack;mp16 = locked door;door;inside,door to outside;door;outside;leave;exit
# Salty Shack:1 ends here
# And described the exit:
# [[file:../../../projects/mud.org::*Salty Shack][Salty Shack:2]]
@desc door = Barnacle encrusted door with rusty irons bands and a comically large padlock. The door sports a hand-painted |Ysign|n that reads: |wFor Rent. See Dabbler for details.
#
@set door/traverse_msg = "The lock opens when you touch it, and the door opens with loud sigh. You step inside and close the door behind you."
# Salty Shack:2 ends here
# And lock the exit:
# [[file:../../../projects/mud.org::*Salty Shack][Salty Shack:3]]
@lock door = traverse:tag(open_shack_door, mp)
#
@set door/err_traverse = "The door is obviously locked."
# Salty Shack:3 ends here
# Generic description of the insides of this house:
# [[file:../../../projects/mud.org::*Salty Shack][Salty Shack:4]]
@teleport/quiet mp16
#
@desc here = The shack is curiously bare and devoid of all personality.
# Salty Shack:4 ends here
# And describe the exit:
# [[file:../../../projects/mud.org::*Salty Shack][Salty Shack:5]]
@desc door = Large wood door with iron bands.
#
@set door/traverse_msg = "You open the door and step out on the sand, closing the door behind you."
# Salty Shack:5 ends here
# Grotto
# Return to the forest:
@ -2709,7 +3004,7 @@ pose gnome/default = smoking his pipe
# [[file:../../../projects/mud.org::*Stoat][Stoat:1]]
@create/drop wee beastie;Mochi;stoat: typeclasses.pets.Friendly
@create/drop wee beastie;Mochi;stoat: typeclasses.pets.WeeBeastie
#
# @typeclass/force/reset wee beastie
# Stoat:1 ends here
@ -3152,6 +3447,73 @@ 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?
# [[file:../../../projects/mud.org::*Jars][Jars:1]]
@tel/quiet Secret Room
#
@create/drop collection of jars;jars;jar: typeclasses.puzzles.Changling
# Jars:1 ends here
# Cant get them:
# [[file:../../../projects/mud.org::*Jars][Jars:2]]
@lock jars = get:false()
#
@set jars/get_err_msg = "The imp slaps your hand away and shakes his head. While you can take an empty |Ybottle|n, you can't take the currated ingredients. Guess you can always find your own ingredients, eh?"
# Jars:2 ends here
# And the generate description:
# [[file:../../../projects/mud.org::*Jars][Jars:3]]
@set jars/desc_first_prefix = "<< Fascinating ^ Interesting ^ Curious >> << collection of ^ assortment of ^ >> << jars ^ contents ^ ingredients >>. You look at one << jar ^ >>, << elegantly ^ hastily ^ legibly ^ >> labeled,|w"
#
@set jars/desc_prefix = "You look at another << jar ^ >>, << elegantly ^ hastily ^ legibly ^ >> labeled,|w"
#
@set jars/desc_postfix = ""
# Jars:3 ends here
# And now for a list of the contents:
# [[file:../../../projects/mud.org::*Jars][Jars:4]]
@set jars/descs = (
"Glimmering Dust|n. A jar filled with fine, shimmering powder that sparkles like a thousand stars.",
"Dragon Blood|n. A deep red liquid that swirls with hints of gold, resembling liquid rubies.",
"Crystalized Stardust|n. Tiny, sparkling crystals that twinkle like stars, believed to hold the essence of the cosmos.",
"Moonstone Crystals|n. Iridescent stones that glow softly in the dark, casting a gentle light.",
"Bottled Lightning|n. A swirling blue liquid that crackles with energy, contained within a glass jar.",
"Dragon Scale Powder|n. A fine, metallic powder that shifts colors with the light, reminiscent of dragon scales.",
"Mermaid Tears|n. Tiny, glistening droplets that resemble diamonds, each one capturing a moment of sorrow.",
"Essence of Shadow|n. A dark, swirling liquid that seems to absorb light, creating an eerie atmosphere.",
"Shadow Essence|n. A dark, swirling liquid that absorbs light, said to grant invisibility.",
"Starflower Petals|n. Delicate, translucent petals that shimmer like the night sky, layered in a glass jar.",
"Whispering Seeds|n. Tiny, dark seeds that seem to rustle softly when the jar is moved, as if alive.",
"Golden Sand|n. A jar filled with fine, shimmering sand that glows warmly, reminiscent of a sunset.",
"Wisp of Smoke|n. A swirling, grayish substance that drifts lazily within the confines of its jar.",
"Nightshade Berries|n. Dark, glossy berries that glisten ominously, nestled in a jar of dark liquid.",
"Phoenix Ashes|n. A fine, gray powder that sparkles faintly, as if containing remnants of a fiery rebirth.",
"Silver Thread|n. A spool of shimmering thread that glows softly, appearing almost ethereal in nature.",
"Timekeeper Sand|n. A jar filled with golden sand that flows slowly, as if measuring the passage of time.",
"Elven Wine|n. A deep green liquid that sparkles with tiny bubbles.",
"Ghostly Essence|n. A pale, translucent ichor that swirls with a soft glow.",
"Celestial Oil|n. A shimmering oil that glows with a soft light.",
"Cat Shadow|n. A swirling, inky blackness that pulses and shifts.",
)
# Jars:4 ends here
# Stool
# A stool to sit while working