Get the Goblin Tester to work with new stuff
This commit is contained in:
parent
503dd0301a
commit
c2f707303b
6 changed files with 398 additions and 142 deletions
|
|
@ -1801,7 +1801,7 @@ I want to make sure that when someone new sees the beast, they see it hiding beh
|
||||||
expect {
|
expect {
|
||||||
"a big hairy beast" {
|
"a big hairy beast" {
|
||||||
send "look beast\n"
|
send "look beast\n"
|
||||||
expectit "it tries to hide behind a tall clump of grass"
|
expectit "beast with long claws and teeth"
|
||||||
|
|
||||||
send "pet bhb\n"
|
send "pet bhb\n"
|
||||||
expectit "can't get near"
|
expectit "can't get near"
|
||||||
|
|
@ -2360,11 +2360,11 @@ And:
|
||||||
@set bartender/leave:character
|
@set bartender/leave:character
|
||||||
|
|
||||||
#+BEGIN_SRC ruby :tangle no
|
#+BEGIN_SRC ruby :tangle no
|
||||||
@set bartender/sayto = {r"\bthanks?( you)?": "gm The << bartender ^ barkeep >> << mumbles ^ mutters ^ softly replies >> << back ^ >> to {1}, \"You're << very ^ >> welcome.\""}
|
@set bartender/sayto = {r".*\bthanks?( you)?": "gm The << bartender ^ barkeep >> << mumbles ^ mutters ^ softly replies >> << back ^ >> to {1}, \"You're << very ^ >> welcome.\""}
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
#+BEGIN_SRC ruby :tangle no
|
#+BEGIN_SRC ruby :tangle no
|
||||||
@set bartender/say = {r"\bthanks?( you)?.*bar(tend|keep)": "gm The << bartender ^ barkeep >> << mumbles ^ mutters ^ softly replies >> << back ^ >> to {1}, \"You're << very ^ >> welcome.\""}
|
@set bartender/say = {r".*\bthanks?( you)?.*bar(tend|keep)": "gm The << bartender ^ barkeep >> << mumbles ^ mutters ^ softly replies >> << back ^ >> to {1}, \"You're << very ^ >> welcome.\""}
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
First, split the line into its parts, and if:
|
First, split the line into its parts, and if:
|
||||||
|
|
@ -2382,69 +2382,6 @@ Let’s convert the Bartender to a Chatbot using [[file:~/src/moss-n-puddles/per
|
||||||
@set bartender/personality_file = "personalities/tavern.md"
|
@set bartender/personality_file = "personalities/tavern.md"
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
**** Hide and Seek
|
|
||||||
First create a number of magic rings equal to the number of players, minus one:
|
|
||||||
|
|
||||||
#+BEGIN_SRC evennia :tangle no
|
|
||||||
@create magic ring:typeclasses.things.MagicRing
|
|
||||||
#
|
|
||||||
@desc magic ring = Octarine sparks fly when you don this ring.|/Commands: |gtransform|n and |guntransform|n.
|
|
||||||
#
|
|
||||||
give magic ring to _char_
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
And create a monocle:
|
|
||||||
|
|
||||||
#+BEGIN_SRC evennia :tangle no
|
|
||||||
@create monocle:typeclasses.things.MagicMonocle
|
|
||||||
#
|
|
||||||
@desc monocle = Allows you to see past magical illusions. |/Command: |gpeer <object>|n
|
|
||||||
#
|
|
||||||
give monocle to _char_
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
Reset the game:
|
|
||||||
|
|
||||||
#+BEGIN_SRC evennia :tangle no
|
|
||||||
# Who has the monocle
|
|
||||||
py me.search('monocle', typeclass="typeclasses.things.MagicMonocle", global_search=True).reset_counts()
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
Get the scoreboard:
|
|
||||||
|
|
||||||
#+BEGIN_SRC evennia :tangle no
|
|
||||||
# Who has the monocle
|
|
||||||
py me.search('monocle', typeclass="typeclasses.things.MagicMonocle", global_search=True).report_score()
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
Need a global clock, right?
|
|
||||||
|
|
||||||
#+BEGIN_SRC evennia :tangle no
|
|
||||||
@create clock:typeclasses.things.GlobalAlarmClock
|
|
||||||
#
|
|
||||||
@desc clock = Strange round clock with four hands and twenty symbols.
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
Need a channel to chat about the game:
|
|
||||||
|
|
||||||
#+BEGIN_SRC evennia
|
|
||||||
@channel/create Hide and Seek Game;hide;game = Messages to people playing the Hide and Seek game
|
|
||||||
#
|
|
||||||
# Others would type:
|
|
||||||
# channel/sub game
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
Start the hiders …
|
|
||||||
#+BEGIN_SRC evennia :tangle no
|
|
||||||
say Alright everyone ready to play the game?
|
|
||||||
#
|
|
||||||
py me.search('clock').start_timer(60, "Ready, get set ... and |wgo hide!|n|/Seeker will start the count-down.", "Ready or not, here comes the seeker!")
|
|
||||||
#
|
|
||||||
py me.search('clock').start_timer(300, finish="The round of the game is done! Let's return and see the score.")
|
|
||||||
#
|
|
||||||
@tel <char> = here
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
*** Bowl of Candy
|
*** Bowl of Candy
|
||||||
Gives out candy, as there is a never-ending bowl of them on the bar.
|
Gives out candy, as there is a never-ending bowl of them on the bar.
|
||||||
Gotta have something to munch on.
|
Gotta have something to munch on.
|
||||||
|
|
@ -4942,7 +4879,7 @@ We need to fix it so that =feed fire= just works.
|
||||||
Need a way to produce wood for the fireplace.
|
Need a way to produce wood for the fireplace.
|
||||||
|
|
||||||
#+BEGIN_src evennia
|
#+BEGIN_src evennia
|
||||||
@create/drop wood rack;log rack;log holder;wood holder;wood;log :typeclasses.consumables.Producer
|
@create/drop rack of wood;log rack;log holder;wood holder;wood;log :typeclasses.consumables.Producer
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
#+BEGIN_src evennia
|
#+BEGIN_src evennia
|
||||||
|
|
@ -5251,6 +5188,66 @@ And an un-puppeted, sleeping, description:
|
||||||
@set gnome/desc_unpuppeted = "A small, hunched old man with messy white hair and a gray vandyke snoring soundly in one of the overstuffed chairs.|/|/Spectacles perched precariously on the end of his hooked nose, wobble with each breath. His bright crimson jacket contrasts with the dark brown blanket covering his legs."
|
@set gnome/desc_unpuppeted = "A small, hunched old man with messy white hair and a gray vandyke snoring soundly in one of the overstuffed chairs.|/|/Spectacles perched precariously on the end of his hooked nose, wobble with each breath. His bright crimson jacket contrasts with the dark brown blanket covering his legs."
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
|
**** Nicks
|
||||||
|
:PROPERTIES:
|
||||||
|
:header-args:evennia: :tangle world/my-nicks.ev :comments both
|
||||||
|
:END:
|
||||||
|
While we can’t tangle his /nicks/ and other shortcuts to the Evennia file (as we are currently puppeting the Avatar), we can create these as a separate file, and batch command them later.
|
||||||
|
|
||||||
|
Let’s pretend we are in an IRC:
|
||||||
|
#+BEGIN_SRC evennia
|
||||||
|
@nick /me $1 = emote $1
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
Have the shrub, in the bar, write out a message:
|
||||||
|
#+BEGIN_SRC evennia
|
||||||
|
@nick write $1 = py me.search('shrub').write("$1")
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
Create a note in the cozy transcripts in the house:
|
||||||
|
#+BEGIN_SRC evennia
|
||||||
|
@nick note $1 = py me.search('golden butterfly').note("$1")
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
Special places that I want to quickly move to:
|
||||||
|
#+BEGIN_SRC evennia
|
||||||
|
@nick meadow = fly Frog Meadow
|
||||||
|
#
|
||||||
|
@nick bar = fly Wyldwood Bar
|
||||||
|
#
|
||||||
|
@nick grove = fly Grove of the Matriarchs
|
||||||
|
#
|
||||||
|
@nick grotto = fly Grotto
|
||||||
|
#
|
||||||
|
@nick secret = fly mp12
|
||||||
|
#
|
||||||
|
@nick hut = fly Homey Hut
|
||||||
|
#
|
||||||
|
@nick marsh = fly Mellow Marsh
|
||||||
|
#
|
||||||
|
@nick dock = fly Lazy Dock
|
||||||
|
#
|
||||||
|
@nick lair = fly Lair
|
||||||
|
#
|
||||||
|
@nick myroom = fly Dabbler's House
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
Where is a certain thing or character located:
|
||||||
|
#+BEGIN_SRC evennia
|
||||||
|
@nick where $1 = py me.search("$1", global_search=True).location
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
Tell a particular NPC to come to the house:
|
||||||
|
#+BEGIN_SRC evennia
|
||||||
|
@nick come $1 = py me.search("$1", global_search=True).come()
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
In case I end up in the meadow without a scone, I can make one for the BHB:
|
||||||
|
#+BEGIN_SRC evennia
|
||||||
|
@nick scone = py me.search("cabinet", global_search=True).do_make(me, words=scone")
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
**** His Magic Devices
|
||||||
And we create a couple of objects:
|
And we create a couple of objects:
|
||||||
|
|
||||||
Like his special teacup:
|
Like his special teacup:
|
||||||
|
|
@ -5359,6 +5356,69 @@ Commands:
|
||||||
- light pipe (how should this be different from lighting a candle or a fire in the fireplace)?
|
- light pipe (how should this be different from lighting a candle or a fire in the fireplace)?
|
||||||
- puff (if the pipe is out, perhaps it calls the =do_light= function)?
|
- puff (if the pipe is out, perhaps it calls the =do_light= function)?
|
||||||
- snuff (to put it out). This would require the start.
|
- snuff (to put it out). This would require the start.
|
||||||
|
**** Hide and Seek
|
||||||
|
First create a number of magic rings equal to the number of players, minus one:
|
||||||
|
|
||||||
|
#+BEGIN_SRC evennia
|
||||||
|
@create magic ring:typeclasses.things.MagicRing
|
||||||
|
#
|
||||||
|
@desc magic ring = Octarine sparks fly when you don this ring.|/Commands: |gtransform|n and |guntransform|n.
|
||||||
|
#
|
||||||
|
give magic ring to Dabbler
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
And create a monocle:
|
||||||
|
|
||||||
|
#+BEGIN_SRC evennia
|
||||||
|
@create monocle:typeclasses.things.MagicMonocle
|
||||||
|
#
|
||||||
|
@desc monocle = Allows you to see past magical illusions. |/Command: |gpeer <object>|n
|
||||||
|
#
|
||||||
|
give monocle to Dabbler
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
Reset the game:
|
||||||
|
|
||||||
|
#+BEGIN_SRC evennia :tangle no
|
||||||
|
# Who has the monocle
|
||||||
|
py me.search('monocle', typeclass="typeclasses.things.MagicMonocle", global_search=True).reset_counts()
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
Get the scoreboard:
|
||||||
|
|
||||||
|
#+BEGIN_SRC evennia :tangle no
|
||||||
|
# Who has the monocle
|
||||||
|
py me.search('monocle', typeclass="typeclasses.things.MagicMonocle", global_search=True).report_score()
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
Need a global clock, right?
|
||||||
|
|
||||||
|
#+BEGIN_SRC evennia :tangle no
|
||||||
|
@create clock:typeclasses.things.GlobalAlarmClock
|
||||||
|
#
|
||||||
|
@desc clock = Strange round clock with four hands and twenty symbols.
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
Need a channel to chat about the game:
|
||||||
|
|
||||||
|
#+BEGIN_SRC evennia
|
||||||
|
@channel/create Hide and Seek Game;hide;game = Messages to people playing the Hide and Seek game
|
||||||
|
#
|
||||||
|
# Others would type:
|
||||||
|
# channel/sub game
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
Start the hiders …
|
||||||
|
#+BEGIN_SRC evennia :tangle no
|
||||||
|
say Alright everyone ready to play the game?
|
||||||
|
#
|
||||||
|
py me.search('clock').start_timer(60, "Ready, get set ... and |wgo hide!|n|/Seeker will start the count-down.", "Ready or not, here comes the seeker!")
|
||||||
|
#
|
||||||
|
py me.search('clock').start_timer(300, finish="The round of the game is done! Let's return and see the score.")
|
||||||
|
#
|
||||||
|
@tel <char> = here
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
**** Journal
|
**** Journal
|
||||||
The pipe is little more than messages to the smoker and everyone else in the room.
|
The pipe is little more than messages to the smoker and everyone else in the room.
|
||||||
|
|
||||||
|
|
@ -5485,6 +5545,33 @@ And actions at this level are about as cute as a cat can be:
|
||||||
@set stoat/friendly_actions = "The << sleepy ^ wee >> beastie << on $your() lap ^ >> let's out an adorable yawn. ;; The << sleepy ^ wee >> beastie << on $your() lap ^ >> uncurls itself, stretches, and recurls again. ;; $You() $conj(pet) the << sleepy ^ wee >> beastie << on |p lap ^ >> as it snuggles << close ^ >>. ;; You hear a deep purring sounds from the << sleepy ^ wee >> beastie << on $your() lap ^ >>. ;; The << sleepy ^ wee >> beastie twitches in its sleep, as if playing with dream toys."
|
@set stoat/friendly_actions = "The << sleepy ^ wee >> beastie << on $your() lap ^ >> let's out an adorable yawn. ;; The << sleepy ^ wee >> beastie << on $your() lap ^ >> uncurls itself, stretches, and recurls again. ;; $You() $conj(pet) the << sleepy ^ wee >> beastie << on |p lap ^ >> as it snuggles << close ^ >>. ;; You hear a deep purring sounds from the << sleepy ^ wee >> beastie << on $your() lap ^ >>. ;; The << sleepy ^ wee >> beastie twitches in its sleep, as if playing with dream toys."
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
|
Since the beastie doesn’t go anywhere, we could probably attach the following “room actions” to it?
|
||||||
|
|
||||||
|
- The scent of fresh-baked scones drifts from the kitchen, rich with butter.
|
||||||
|
- A book from the shelf slides out, and flaps it pages like a bird before resting on another shelf.
|
||||||
|
- A swirling portal of magic opens near a bookcase, a devilish head emerges and looks around. It shakes it head and returns into the energy. With a pop of octarine, the portal closes.
|
||||||
|
- The tiny brass dragon on the mantel turns its head to watch you pass.
|
||||||
|
- The brass dragon on the mantel sneezes a puff of harmless sparks.
|
||||||
|
- The smoke from the old man’s pipe curls into tiny dancing gnomes before vanishing in the darkness of the ceiling.
|
||||||
|
- Among the books on the shelf, the clock ticks backward for three beats, then resumes its proper rhythm.
|
||||||
|
- A porcelain frog on the mantel croaks. ;; “Sorry,” says the frog, “I’ll try to be more quiet.”
|
||||||
|
- A silver mouse wind-up toy patrols the bookshelves, stopping to salute every portrait.
|
||||||
|
A china owl blinks awake at midnight and asks if anyone has seen its spectacles.
|
||||||
|
A brass beetle scuttles across the mantel, polishing every trinket it passes with its tiny feet.
|
||||||
|
A painted cat on a teacup flicks its tail whenever the tea is too strong.
|
||||||
|
A little stone gargoyle atop the hearth coughs whenever the fire pops, then pretends it was clearing its throat.
|
||||||
|
|
||||||
|
Many of these require details or knick-knacks to back it up:
|
||||||
|
- brass dragon
|
||||||
|
- clock
|
||||||
|
- porcelain frog
|
||||||
|
- owl
|
||||||
|
- brass beetle
|
||||||
|
- gargoyle
|
||||||
|
- tarot cards
|
||||||
|
|
||||||
|
Fix bug of =get trinket= gives the player “a few tinkets” that are nothing special.
|
||||||
|
|
||||||
And this pet loves his gnome.
|
And this pet loves his gnome.
|
||||||
|
|
||||||
#+BEGIN_src evennia
|
#+BEGIN_src evennia
|
||||||
|
|
@ -5494,7 +5581,7 @@ And this pet loves his gnome.
|
||||||
Trigger some events … which can’t work at the moment, since a Pet is not a Puppet … yet:
|
Trigger some events … which can’t work at the moment, since a Pet is not a Puppet … yet:
|
||||||
|
|
||||||
#+BEGIN_SRC evennia
|
#+BEGIN_SRC evennia
|
||||||
@set stoat/arrive = "5 ;; gma {0} = A sleeping << wee ^ >> beastie, opens one curious eye to look at $you()."
|
@set stoat/arrive = "5 ;; gma {0} = A << sleeping ^ dozing ^ >> << 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."
|
# @set stoat/sit = "3 ;; gm A sleeping << wee ^ >> beastie, opens one curious eye to see who arrived."
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
@ -7285,7 +7372,7 @@ What about pushing?
|
||||||
Let’s test if we can sit on the rock:
|
Let’s test if we can sit on the rock:
|
||||||
|
|
||||||
#+BEGIN_SRC tcl
|
#+BEGIN_SRC tcl
|
||||||
send "look rock\n"
|
send "look flat rock\n"
|
||||||
expectit "A flat rock"
|
expectit "A flat rock"
|
||||||
|
|
||||||
send "get rock\n"
|
send "get rock\n"
|
||||||
|
|
@ -7294,10 +7381,10 @@ Let’s test if we can sit on the rock:
|
||||||
send "sit rock\n"
|
send "sit rock\n"
|
||||||
expectit "You sit on the flat rock"
|
expectit "You sit on the flat rock"
|
||||||
|
|
||||||
send "push rock\n"
|
send "push flat rock\n"
|
||||||
expectit "push the rock away"
|
expectit "push the rock away"
|
||||||
|
|
||||||
send "pull rock\n"
|
send "pull flat rock\n"
|
||||||
expectit "pull the rock closer"
|
expectit "pull the rock closer"
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
|
|
@ -7904,6 +7991,8 @@ Let’s blow our horn and board the boat (we begin from the Grove of Matriarches
|
||||||
|
|
||||||
send "boat\n"
|
send "boat\n"
|
||||||
expectit "The giant leaf gently bobs in the surf of this island, allowing you to disembark."
|
expectit "The giant leaf gently bobs in the surf of this island, allowing you to disembark."
|
||||||
|
|
||||||
|
set timeout 30
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
** Throne Island
|
** Throne Island
|
||||||
The boat should land on a distant island.
|
The boat should land on a distant island.
|
||||||
|
|
@ -8129,7 +8218,7 @@ The plaque contains a /password/ to say aloud. We need another StoryCube to list
|
||||||
The poem in the shield has the /name, and the plague mentions that someone needs to say the name, which if said aloud, we hear:
|
The poem in the shield has the /name, and the plague mentions that someone needs to say the name, which if said aloud, we hear:
|
||||||
|
|
||||||
#+BEGIN_SRC evennia
|
#+BEGIN_SRC evennia
|
||||||
@set gr02ctl/say = { r".*\bthalome.*": "gm Upon uttering that phrase, sparks of octarine magic pop the illusion, revealing an open archway at the base of the giant statue. ;; tag_all hidden_archway" }
|
@set gr02ctl/say = { r".*\bthalome\b.*": "gm Upon uttering that phrase, sparks of octarine magic pop the illusion, revealing an open archway at the base of the giant statue. ;; tag_all hidden_archway" }
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
And we need to get rid of it when any one leaves:
|
And we need to get rid of it when any one leaves:
|
||||||
|
|
@ -8191,28 +8280,6 @@ But we can enter:
|
||||||
#+BEGIN_SRC tcl
|
#+BEGIN_SRC tcl
|
||||||
send "look opening\n"
|
send "look opening\n"
|
||||||
expectit "shaped as a cresent moon"
|
expectit "shaped as a cresent moon"
|
||||||
|
|
||||||
send "arch\n"
|
|
||||||
expect {
|
|
||||||
"The room is completely dark" {
|
|
||||||
send "light torch\n"
|
|
||||||
expectit "The room is lit up"
|
|
||||||
|
|
||||||
send "look\n"
|
|
||||||
expectit "Antechamber"
|
|
||||||
}
|
|
||||||
"Antechamber" {
|
|
||||||
send_user "We still have our torch lit from the last time."
|
|
||||||
}
|
|
||||||
timeout {
|
|
||||||
puts "ERROR: Expected response for 'get stick' not received."
|
|
||||||
send "quit\n"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
*** Puzzle Two: A Dark Place
|
*** Puzzle Two: A Dark Place
|
||||||
Let’s make this a dark room where one has to have two feel around for a splinter to light, or bring a torch.
|
Let’s make this a dark room where one has to have two feel around for a splinter to light, or bring a torch.
|
||||||
|
|
@ -8252,6 +8319,25 @@ Dome?
|
||||||
Let’s look at all the fine details:
|
Let’s look at all the fine details:
|
||||||
|
|
||||||
#+BEGIN_SRC tcl
|
#+BEGIN_SRC tcl
|
||||||
|
send "arch\n"
|
||||||
|
expect {
|
||||||
|
"The room is completely dark" {
|
||||||
|
send "light torch\n"
|
||||||
|
expectit "The room is lit up"
|
||||||
|
|
||||||
|
send "look\n"
|
||||||
|
expectit "Antechamber"
|
||||||
|
}
|
||||||
|
"Antechamber" {
|
||||||
|
send_user "We still have our torch lit from the last time."
|
||||||
|
}
|
||||||
|
timeout {
|
||||||
|
puts "ERROR: Expected response for 'get stick' not received."
|
||||||
|
send "quit\n"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
send "look cavity\n"
|
send "look cavity\n"
|
||||||
expectit "this opening"
|
expectit "this opening"
|
||||||
|
|
||||||
|
|
@ -8305,8 +8391,7 @@ And a list of differences that gives a hint to the password:
|
||||||
If they say the /magic word/, they get the maguffin.
|
If they say the /magic word/, they get the maguffin.
|
||||||
|
|
||||||
#+BEGIN_SRC evennia
|
#+BEGIN_SRC evennia
|
||||||
@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 snatch it, claiming your prize.
|
@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 snatch it, claiming your prize. ;; gift_all blue ;; gm You also notice a secret door! ;; tag_all hidden_antechamber_door" }
|
||||||
;; gift_all blue ;; gm You also notice a secret door! ;; tag_all hidden_antechamber_door" }
|
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
And let’s test this out:
|
And let’s test this out:
|
||||||
|
|
@ -8421,7 +8506,7 @@ We use a =StoryCube= to lock the door until the password is said:
|
||||||
If they say, /Tidal Surge/, the *Locker* unlocks the door, and they can go through.
|
If they say, /Tidal Surge/, the *Locker* unlocks the door, and they can go through.
|
||||||
|
|
||||||
#+BEGIN_SRC evennia
|
#+BEGIN_SRC evennia
|
||||||
@set gr04ctl/say = {r"^tidal ?surge.*": "gm You hear an audible click from the ornate door! ;; tag_all open_ornate_door"}
|
@set gr04ctl/say = { r".*\btidal ?surge\b.*": "tag_all open_ornate_door ;; gm You hear an audible click from the ornate door! " }
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
And the description of passing through:
|
And the description of passing through:
|
||||||
|
|
@ -8443,8 +8528,39 @@ But we’ll have the goblin test this out:
|
||||||
expectit "A door you didn't notice before"
|
expectit "A door you didn't notice before"
|
||||||
|
|
||||||
send "door\n"
|
send "door\n"
|
||||||
expectit "Escape Hallway"
|
expectit "relocate some gold coins"
|
||||||
|
|
||||||
|
send "look plaque\n"
|
||||||
|
expectit "green patina"
|
||||||
|
|
||||||
|
send "look door\n"
|
||||||
|
expectit "grid of letters"
|
||||||
|
|
||||||
|
send "door\n"
|
||||||
|
expectit "The door is locked"
|
||||||
|
|
||||||
|
send "say This is tricky. I think the answer is tidal surge!\n"
|
||||||
|
expectit "You hear an audible click"
|
||||||
|
|
||||||
|
send "door\n"
|
||||||
|
expectit "Lonely Island"
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
|
Let’s test that we can return back to the mainland.
|
||||||
|
|
||||||
|
#+BEGIN_SRC tcl
|
||||||
|
set timeout 240
|
||||||
|
send "boat\n"
|
||||||
|
expectit "docks"
|
||||||
|
set timeout 30
|
||||||
|
|
||||||
|
send "disembark\n"
|
||||||
|
expectit "Lazy Dock"
|
||||||
|
|
||||||
|
send "north\n"
|
||||||
|
expectit "Grove of the Matriarchs"
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
* Scoring
|
* Scoring
|
||||||
I would like a =score= command that gives them a tally based on the activities they have participated in. This will be a hashtable, stored as an attribute. Perhaps it increments a value? Should I simplify the number of items, and then list them all, so they have goals?
|
I would like a =score= command that gives them a tally based on the activities they have participated in. This will be a hashtable, stored as an attribute. Perhaps it increments a value? Should I simplify the number of items, and then list them all, so they have goals?
|
||||||
|
|
||||||
|
|
@ -8522,12 +8638,6 @@ The /janitor/ is a =Script= that moves every thing back to where they should be
|
||||||
Can we quickly walk back through the world, gathering ingredients, and then going back into the Secret Room to make potions?
|
Can we quickly walk back through the world, gathering ingredients, and then going back into the Secret Room to make potions?
|
||||||
|
|
||||||
#+BEGIN_SRC tcl
|
#+BEGIN_SRC tcl
|
||||||
send "leave\n"
|
|
||||||
expectit "Grotto"
|
|
||||||
|
|
||||||
send "east\n"
|
|
||||||
expectit "Grove of the Matriarchs"
|
|
||||||
|
|
||||||
send "climb boulder\n"
|
send "climb boulder\n"
|
||||||
expectit "Boulder Top"
|
expectit "Boulder Top"
|
||||||
|
|
||||||
|
|
@ -8548,6 +8658,9 @@ Can we quickly walk back through the world, gathering ingredients, and then goin
|
||||||
expect {
|
expect {
|
||||||
"a big hairy beast" {
|
"a big hairy beast" {
|
||||||
# Refeed!
|
# Refeed!
|
||||||
|
send "inv\n"
|
||||||
|
expectit "pouch"
|
||||||
|
|
||||||
send "feed beast\n"
|
send "feed beast\n"
|
||||||
expectit "scone"
|
expectit "scone"
|
||||||
}
|
}
|
||||||
|
|
@ -8667,6 +8780,10 @@ Let’s try the next potion, the /Somnium Illusorium/:
|
||||||
send "west\n"
|
send "west\n"
|
||||||
expectit "Grove"
|
expectit "Grove"
|
||||||
|
|
||||||
|
send "south\n"
|
||||||
|
expectit "Lazy Dock"
|
||||||
|
|
||||||
|
# WHAT!?
|
||||||
send "disembark\n"
|
send "disembark\n"
|
||||||
expectit "Lonely Island"
|
expectit "Lonely Island"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -966,7 +966,6 @@ class Recorder(Object):
|
||||||
return f"<blockquote>{text}</blockquote>"
|
return f"<blockquote>{text}</blockquote>"
|
||||||
return f"<p>{text}</p>\n"
|
return f"<p>{text}</p>\n"
|
||||||
|
|
||||||
|
|
||||||
def find_actor(self, text, default=None):
|
def find_actor(self, text, default=None):
|
||||||
"""
|
"""
|
||||||
Extract the character performing the action from the text.
|
Extract the character performing the action from the text.
|
||||||
|
|
@ -994,14 +993,24 @@ class Recorder(Object):
|
||||||
if names:
|
if names:
|
||||||
msg = sub(f"^{actor.sdesc.get()}", choice(names),
|
msg = sub(f"^{actor.sdesc.get()}", choice(names),
|
||||||
msg, flags=IGNORECASE)
|
msg, flags=IGNORECASE)
|
||||||
|
self.record_html(msg, msg_type)
|
||||||
|
|
||||||
actor = self.find_actor(msg, actor)
|
self.followup_actions(msg, msg_type,
|
||||||
|
self.find_actor(msg, actor))
|
||||||
|
|
||||||
|
def record_html(self, msg, msg_type):
|
||||||
|
"""
|
||||||
|
Write msg to HTML based on 'transcripts_path'.
|
||||||
|
If file doesn't exist, prepend 'header_file'.
|
||||||
|
|
||||||
|
Set both with something like:
|
||||||
|
|
||||||
|
@set shrub/transcripts_path = "transcripts/bar-%Y-%m-%d.html"
|
||||||
|
@set shrub/header_file = "transcripts/header-template.html"
|
||||||
|
"""
|
||||||
msg = self.to_html(msg, msg_type)
|
msg = self.to_html(msg, msg_type)
|
||||||
# @set shrub/transcripts_path = "transcripts/bar-%Y-%m-%d.html"
|
|
||||||
filename = datetime.today().strftime(self.db.transcripts_path)
|
filename = datetime.today().strftime(self.db.transcripts_path)
|
||||||
|
|
||||||
# @set shrub/header_file = "transcripts/header-template.html"
|
|
||||||
if not exists(filename):
|
if not exists(filename):
|
||||||
makedirs(dirname(filename), exist_ok=True)
|
makedirs(dirname(filename), exist_ok=True)
|
||||||
copyfile(self.db.header_file, filename)
|
copyfile(self.db.header_file, filename)
|
||||||
|
|
@ -1009,7 +1018,8 @@ class Recorder(Object):
|
||||||
with open(filename, "a") as myfile:
|
with open(filename, "a") as myfile:
|
||||||
myfile.write(msg)
|
myfile.write(msg)
|
||||||
|
|
||||||
|
def followup_actions(self, msg, msg_type, actor):
|
||||||
# Follow-up Actions ...
|
# Follow-up Actions ...
|
||||||
if match(r".* arrives .*", msg) and actor and \
|
if match(r".* arrives .*", msg) and actor and \
|
||||||
msg_type in ('traverse', 'teleport'):
|
msg_type in ('traverse', 'teleport'):
|
||||||
self.execute_cmd(f"look {actor}")
|
self.record_html(actor.db.desc, "look")
|
||||||
|
|
|
||||||
|
|
@ -1221,8 +1221,11 @@ class Scribe(Recorder):
|
||||||
|
|
||||||
Set the following properties:
|
Set the following properties:
|
||||||
|
|
||||||
@set scribe/directory = "transcripts"
|
@set scribe/transcripts_path = "transcripts/bar-%Y-%m-%d.html"
|
||||||
@set scribe/header = "transcripts/header-template.html"
|
@set scribe/header_file = "transcripts/header-template.html"
|
||||||
"""
|
"""
|
||||||
def msg(self, text=None, from_obj=None, session=None, **kwargs):
|
def msg(self, text=None, from_obj=None, session=None, **kwargs):
|
||||||
self.record_msg(text, from_obj)
|
self.record_msg(text, from_obj)
|
||||||
|
|
||||||
|
def note(self, text):
|
||||||
|
self.record_html(text, "note")
|
||||||
|
|
|
||||||
77
world/my-nicks.ev
Normal file
77
world/my-nicks.ev
Normal file
|
|
@ -0,0 +1,77 @@
|
||||||
|
|
||||||
|
# :PROPERTIES:
|
||||||
|
# :header-args:evennia: :tangle world/my-nicks.ev :comments both
|
||||||
|
# :END:
|
||||||
|
# While we can’t tangle his /nicks/ and other shortcuts to the Evennia file (as we are currently puppeting the Avatar), we can create these as a separate file, and batch command them later.
|
||||||
|
|
||||||
|
# Let’s pretend we are in an IRC:
|
||||||
|
|
||||||
|
# [[file:../moss-n-puddles.org::*Nicks][Nicks:1]]
|
||||||
|
@nick /me $1 = emote $1
|
||||||
|
# Nicks:1 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Have the shrub, in the bar, write out a message:
|
||||||
|
|
||||||
|
# [[file:../moss-n-puddles.org::*Nicks][Nicks:2]]
|
||||||
|
@nick write $1 = py me.search('shrub').write("$1")
|
||||||
|
# Nicks:2 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Create a note in the cozy transcripts in the house:
|
||||||
|
|
||||||
|
# [[file:../moss-n-puddles.org::*Nicks][Nicks:3]]
|
||||||
|
@nick note $1 = py me.search('golden butterfly').note("$1")
|
||||||
|
# Nicks:3 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Special places that I want to quickly move to:
|
||||||
|
|
||||||
|
# [[file:../moss-n-puddles.org::*Nicks][Nicks:4]]
|
||||||
|
@nick meadow = fly Frog Meadow
|
||||||
|
#
|
||||||
|
@nick bar = fly Wyldwood Bar
|
||||||
|
#
|
||||||
|
@nick grove = fly Grove of the Matriarchs
|
||||||
|
#
|
||||||
|
@nick grotto = fly Grotto
|
||||||
|
#
|
||||||
|
@nick secret = fly mp12
|
||||||
|
#
|
||||||
|
@nick hut = fly Homey Hut
|
||||||
|
#
|
||||||
|
@nick marsh = fly Mellow Marsh
|
||||||
|
#
|
||||||
|
@nick dock = fly Lazy Dock
|
||||||
|
#
|
||||||
|
@nick lair = fly Lair
|
||||||
|
#
|
||||||
|
@nick myroom = fly Dabbler's House
|
||||||
|
# Nicks:4 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Where is a certain thing or character located:
|
||||||
|
|
||||||
|
# [[file:../moss-n-puddles.org::*Nicks][Nicks:5]]
|
||||||
|
@nick where $1 = py me.search("$1", global_search=True).location
|
||||||
|
# Nicks:5 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Tell a particular NPC to come to the house:
|
||||||
|
|
||||||
|
# [[file:../moss-n-puddles.org::*Nicks][Nicks:6]]
|
||||||
|
@nick come $1 = py me.search("$1", global_search=True).come()
|
||||||
|
# Nicks:6 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# In case I end up in the meadow without a scone, I can make one for the BHB:
|
||||||
|
|
||||||
|
# [[file:../moss-n-puddles.org::*Nicks][Nicks:7]]
|
||||||
|
@nick scone = py me.search("cabinet", global_search=True).do_make(me, words=scone")
|
||||||
|
# Nicks:7 ends here
|
||||||
|
|
@ -404,7 +404,7 @@ expectit "Frog Meadow"
|
||||||
expect {
|
expect {
|
||||||
"a big hairy beast" {
|
"a big hairy beast" {
|
||||||
send "look beast\n"
|
send "look beast\n"
|
||||||
expectit "it tries to hide behind a tall clump of grass"
|
expectit "beast with long claws and teeth"
|
||||||
|
|
||||||
send "pet bhb\n"
|
send "pet bhb\n"
|
||||||
expectit "can't get near"
|
expectit "can't get near"
|
||||||
|
|
@ -1171,7 +1171,7 @@ expectit "Conspicuously absent"
|
||||||
send "fill teacup\n"
|
send "fill teacup\n"
|
||||||
expectit "mucky water"
|
expectit "mucky water"
|
||||||
|
|
||||||
send "look rock\n"
|
send "look flat rock\n"
|
||||||
expectit "A flat rock"
|
expectit "A flat rock"
|
||||||
|
|
||||||
send "get rock\n"
|
send "get rock\n"
|
||||||
|
|
@ -1180,10 +1180,10 @@ expectit "You can't take it"
|
||||||
send "sit rock\n"
|
send "sit rock\n"
|
||||||
expectit "You sit on the flat rock"
|
expectit "You sit on the flat rock"
|
||||||
|
|
||||||
send "push rock\n"
|
send "push flat rock\n"
|
||||||
expectit "push the rock away"
|
expectit "push the rock away"
|
||||||
|
|
||||||
send "pull rock\n"
|
send "pull flat rock\n"
|
||||||
expectit "pull the rock closer"
|
expectit "pull the rock closer"
|
||||||
|
|
||||||
send "get doll\n"
|
send "get doll\n"
|
||||||
|
|
@ -1215,6 +1215,8 @@ expectit "The giant leaf slows as it arrives next to the dock."
|
||||||
send "boat\n"
|
send "boat\n"
|
||||||
expectit "The giant leaf gently bobs in the surf of this island, allowing you to disembark."
|
expectit "The giant leaf gently bobs in the surf of this island, allowing you to disembark."
|
||||||
|
|
||||||
|
set timeout 30
|
||||||
|
|
||||||
send "disembark\n"
|
send "disembark\n"
|
||||||
expectit "Lonely Island"
|
expectit "Lonely Island"
|
||||||
|
|
||||||
|
|
@ -1292,12 +1294,32 @@ send "look door\n"
|
||||||
expectit "A door you didn't notice before"
|
expectit "A door you didn't notice before"
|
||||||
|
|
||||||
send "door\n"
|
send "door\n"
|
||||||
expectit "Escape Hallway"
|
expectit "relocate some gold coins"
|
||||||
|
|
||||||
send "leave\n"
|
send "look plaque\n"
|
||||||
expectit "Grotto"
|
expectit "green patina"
|
||||||
|
|
||||||
send "east\n"
|
send "look door\n"
|
||||||
|
expectit "grid of letters"
|
||||||
|
|
||||||
|
send "door\n"
|
||||||
|
expectit "The door is locked"
|
||||||
|
|
||||||
|
send "say This is tricky. I think the answer is tidal surge!\n"
|
||||||
|
expectit "You hear an audible click"
|
||||||
|
|
||||||
|
send "door\n"
|
||||||
|
expectit "Lonely Island"
|
||||||
|
|
||||||
|
set timeout 240
|
||||||
|
send "boat\n"
|
||||||
|
expectit "docks"
|
||||||
|
set timeout 30
|
||||||
|
|
||||||
|
send "disembark\n"
|
||||||
|
expectit "Lazy Dock"
|
||||||
|
|
||||||
|
send "north\n"
|
||||||
expectit "Grove of the Matriarchs"
|
expectit "Grove of the Matriarchs"
|
||||||
|
|
||||||
send "climb boulder\n"
|
send "climb boulder\n"
|
||||||
|
|
@ -1320,6 +1342,9 @@ expectit "Frog Meadow"
|
||||||
expect {
|
expect {
|
||||||
"a big hairy beast" {
|
"a big hairy beast" {
|
||||||
# Refeed!
|
# Refeed!
|
||||||
|
send "inv\n"
|
||||||
|
expectit "pouch"
|
||||||
|
|
||||||
send "feed beast\n"
|
send "feed beast\n"
|
||||||
expectit "scone"
|
expectit "scone"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1556,18 +1556,6 @@ py me.search("bartender").backstory("tavern")
|
||||||
# Puppeting:1 ends here
|
# Puppeting:1 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Need a channel to chat about the game:
|
|
||||||
|
|
||||||
|
|
||||||
# [[file:../moss-n-puddles.org::*Hide and Seek][Hide and Seek:6]]
|
|
||||||
@channel/create Hide and Seek Game;hide;game = Messages to people playing the Hide and Seek game
|
|
||||||
#
|
|
||||||
# Others would type:
|
|
||||||
# channel/sub game
|
|
||||||
# Hide and Seek:6 ends here
|
|
||||||
|
|
||||||
|
|
||||||
# Gives out candy, as there is a never-ending bowl of them on the bar.
|
# Gives out candy, as there is a never-ending bowl of them on the bar.
|
||||||
# Gotta have something to munch on.
|
# Gotta have something to munch on.
|
||||||
|
|
||||||
|
|
@ -4093,7 +4081,7 @@ py bt = self.search('gnome'); bt.sdesc.add('old gnome'); bt.db.pose = 'smiling a
|
||||||
# And his fancy jacket:
|
# And his fancy jacket:
|
||||||
|
|
||||||
|
|
||||||
# [[file:../moss-n-puddles.org::*Character: Dabbler][Character: Dabbler:10]]
|
# [[file:../moss-n-puddles.org::*His Magic Devices][His Magic Devices:2]]
|
||||||
@create waistcoat : typeclasses.things.BagofJunk
|
@create waistcoat : typeclasses.things.BagofJunk
|
||||||
#
|
#
|
||||||
@desc waistcoat = An elegant green waistcoat with gold embroidery.
|
@desc waistcoat = An elegant green waistcoat with gold embroidery.
|
||||||
|
|
@ -4101,14 +4089,14 @@ py bt = self.search('gnome'); bt.sdesc.add('old gnome'); bt.db.pose = 'smiling a
|
||||||
@set waistcoat/stuff = "fey"
|
@set waistcoat/stuff = "fey"
|
||||||
#
|
#
|
||||||
@give waistcoat = gnome
|
@give waistcoat = gnome
|
||||||
# Character: Dabbler:10 ends here
|
# His Magic Devices:2 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# And some special /triggers/ which are mostly “phrases” that are shown to all characters:
|
# And some special /triggers/ which are mostly “phrases” that are shown to all characters:
|
||||||
|
|
||||||
|
|
||||||
# [[file:../moss-n-puddles.org::*Character: Dabbler][Character: Dabbler:11]]
|
# [[file:../moss-n-puddles.org::*His Magic Devices][His Magic Devices:3]]
|
||||||
@set self/triggers:main = {
|
@set self/triggers:main = {
|
||||||
"darkness": {
|
"darkness": {
|
||||||
"desc": "Make the room go black",
|
"desc": "Make the room go black",
|
||||||
|
|
@ -4117,15 +4105,15 @@ py bt = self.search('gnome'); bt.sdesc.add('old gnome'); bt.db.pose = 'smiling a
|
||||||
"The room gets dark",
|
"The room gets dark",
|
||||||
"And then pitch-black!",
|
"And then pitch-black!",
|
||||||
"The darkess lifts, and the room returns to normal."]}}
|
"The darkess lifts, and the room returns to normal."]}}
|
||||||
# Character: Dabbler:11 ends here
|
# His Magic Devices:3 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# And set the /typical/ state of =main=:
|
# And set the /typical/ state of =main=:
|
||||||
|
|
||||||
# [[file:../moss-n-puddles.org::*Character: Dabbler][Character: Dabbler:12]]
|
# [[file:../moss-n-puddles.org::*His Magic Devices][His Magic Devices:4]]
|
||||||
@set self/currentgame = main
|
@set self/currentgame = main
|
||||||
# Character: Dabbler:12 ends here
|
# His Magic Devices:4 ends here
|
||||||
|
|
||||||
|
|
||||||
# And my staff:
|
# And my staff:
|
||||||
|
|
@ -4192,6 +4180,43 @@ py bt = self.search('gnome'); bt.sdesc.add('old gnome'); bt.db.pose = 'smiling a
|
||||||
# Pipe:2 ends here
|
# Pipe:2 ends here
|
||||||
|
|
||||||
|
|
||||||
|
# First create a number of magic rings equal to the number of players, minus one:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../moss-n-puddles.org::*Hide and Seek][Hide and Seek:1]]
|
||||||
|
@create magic ring:typeclasses.things.MagicRing
|
||||||
|
#
|
||||||
|
@desc magic ring = Octarine sparks fly when you don this ring.|/Commands: |gtransform|n and |guntransform|n.
|
||||||
|
#
|
||||||
|
give magic ring to Dabbler
|
||||||
|
# Hide and Seek:1 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# And create a monocle:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../moss-n-puddles.org::*Hide and Seek][Hide and Seek:2]]
|
||||||
|
@create monocle:typeclasses.things.MagicMonocle
|
||||||
|
#
|
||||||
|
@desc monocle = Allows you to see past magical illusions. |/Command: |gpeer <object>|n
|
||||||
|
#
|
||||||
|
give monocle to Dabbler
|
||||||
|
# Hide and Seek:2 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Need a channel to chat about the game:
|
||||||
|
|
||||||
|
|
||||||
|
# [[file:../moss-n-puddles.org::*Hide and Seek][Hide and Seek:6]]
|
||||||
|
@channel/create Hide and Seek Game;hide;game = Messages to people playing the Hide and Seek game
|
||||||
|
#
|
||||||
|
# Others would type:
|
||||||
|
# channel/sub game
|
||||||
|
# Hide and Seek:6 ends here
|
||||||
|
|
||||||
|
|
||||||
# The pipe is little more than messages to the smoker and everyone else in the room.
|
# The pipe is little more than messages to the smoker and everyone else in the room.
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -6602,7 +6627,7 @@ $state(boat, A large leaf bobs invitingly in the surf.)
|
||||||
|
|
||||||
|
|
||||||
# [[file:../moss-n-puddles.org::*The Throne: First Puzzle][The Throne: First Puzzle:7]]
|
# [[file:../moss-n-puddles.org::*The Throne: First Puzzle][The Throne: First Puzzle:7]]
|
||||||
@set gr02ctl/say = { r".*\bthalome.*": "gm Upon uttering that phrase, sparks of octarine magic pop the illusion, revealing an open archway at the base of the giant statue. ;; tag_all hidden_archway" }
|
@set gr02ctl/say = { r".*\bthalome\b.*": "gm Upon uttering that phrase, sparks of octarine magic pop the illusion, revealing an open archway at the base of the giant statue. ;; tag_all hidden_archway" }
|
||||||
# The Throne: First Puzzle:7 ends here
|
# The Throne: First Puzzle:7 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -6754,8 +6779,7 @@ light torch
|
||||||
|
|
||||||
|
|
||||||
# [[file:../moss-n-puddles.org::*Puzzle Three: The Changing Obelisk][Puzzle Three: The Changing Obelisk:6]]
|
# [[file:../moss-n-puddles.org::*Puzzle Three: The Changing Obelisk][Puzzle Three: The Changing Obelisk: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. ;; scoring_all blue_medal ;; gm A blue medal materializes in the opening. You snatch it, claiming your prize.
|
@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 snatch it, claiming your prize. ;; gift_all blue ;; gm You also notice a secret door! ;; tag_all hidden_antechamber_door" }
|
||||||
;; gift_all blue ;; gm You also notice a secret door! ;; tag_all hidden_antechamber_door" }
|
|
||||||
# Puzzle Three: The Changing Obelisk:6 ends here
|
# Puzzle Three: The Changing Obelisk:6 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -6889,7 +6913,7 @@ light torch
|
||||||
|
|
||||||
|
|
||||||
# [[file:../moss-n-puddles.org::*Puzzle Four: The Door Puzzle][Puzzle Four: The Door Puzzle:13]]
|
# [[file:../moss-n-puddles.org::*Puzzle Four: The Door Puzzle][Puzzle Four: The Door Puzzle:13]]
|
||||||
@set gr04ctl/say = {r"^tidal ?surge.*": "gm You hear an audible click from the ornate door! ;; tag_all open_ornate_door"}
|
@set gr04ctl/say = { r".*\btidal ?surge\b.*": "tag_all open_ornate_door ;; gm You hear an audible click from the ornate door! " }
|
||||||
# Puzzle Four: The Door Puzzle:13 ends here
|
# Puzzle Four: The Door Puzzle:13 ends here
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue