summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--crawl-ref/docs/monster_speech.txt51
-rw-r--r--crawl-ref/source/dat/database/monspeak.txt871
-rw-r--r--crawl-ref/source/mon-util.cc120
-rw-r--r--crawl-ref/source/monspeak.cc253
-rw-r--r--crawl-ref/source/religion.cc1
5 files changed, 804 insertions, 492 deletions
diff --git a/crawl-ref/docs/monster_speech.txt b/crawl-ref/docs/monster_speech.txt
index 84b61a5ff2..17579e9067 100644
--- a/crawl-ref/docs/monster_speech.txt
+++ b/crawl-ref/docs/monster_speech.txt
@@ -513,6 +513,57 @@ end of wpnnoise.txt.
The best way to learn about how variables and other concepts can be
used is probably to see how it has been done for existing messages.
+Speaking to the player vs to another monster
+--------------------------------------------
+
+If a message contains a variable starting with "@player", then that message
+will only be used by friendly/good-neutral monsters, or by hostile/neutral
+monsters which have the player as their foe (and it will never be used in the
+arena). Additionally, any message containing a line starting with "You" or
+ending in a bare "you." (but not a quoted "you.") will also be considered
+player centric. You can also make a message player-centric by appending
+"@player_only@" to the end of any of the lines in the message, which will be
+removed before displaying it to the player.
+
+If you want a message to be able to apply to a foe which is another monster in
+*addition* to the player, you can replace "@player" with "@foe" to have the
+variable filled out with a string appropriate for the foe being either the
+player or another monster. If "@foe_name@" is present then the message will
+only be used on monster foes which are named, and if "@foe_god@" or "@god_is@"
+is present then it will only be used on priestly monsters or god gift monsters.
+"@Foe@" or "@foe@" will be replaced with "You" or "you" if directed at the
+player, or if directed at another monster be the same as "@The_monster@" or
+"@the_monster@", but with the foe monster's name rather than the speaking
+monster's name
+
+If you want to indicate which monster a message is directed at, you can put in
+"@to_foe@" or "@at_foe@" to fill in the foe name when the message is directed
+at a monster; when directed at the player the variable will be removed. For
+example, with the message:
+
+ @The_monster@ says @to_foe@, "Defend yourself!"
+
+If directed at an orc will expand to:
+
+ @The_monster@ says to the orc, "Defend yourself!"
+
+but if directed at the player will expand to:
+
+ @The_monster@ says, "Defend yourself!"
+
+You can do something similar with "@foe,@" for asking questions and the like.
+For example:
+
+ @The_monster@ asks @foe,@ "Who are you?"
+
+when directed at an orc will expand to:
+
+ @The_monster@ asks the orc, "Who are you?"
+
+and when directed at the player will expand to:
+
+ @The_monster@ asks, "Who are you?"
+
Channels
--------
diff --git a/crawl-ref/source/dat/database/monspeak.txt b/crawl-ref/source/dat/database/monspeak.txt
index 7514873ac7..81eeace28f 100644
--- a/crawl-ref/source/dat/database/monspeak.txt
+++ b/crawl-ref/source/dat/database/monspeak.txt
@@ -143,7 +143,7 @@ SPELL:@The_monster@ intones a terrible prayer.
@The_monster@ starts to sing a prayer.
-@The_monster@ says, "All sinners must die."
+@The_monster@ says @to_foe@, "All sinners must die."
%%%%
_high_priest_medium_
@@ -152,20 +152,20 @@ VISUAL:@The_monster@ looks excited.
VISUAL:@The_monster@ performs a strange gesture.
-@The_monster@ shouts, "You are a heretic and must be destroyed!"
+@The_monster@ shouts @at_foe@, "You are a heretic and must be destroyed!"
-@The_monster@ says, "You will make a fine sacrifice."
+@The_monster@ says @to_foe@, "You will make a fine sacrifice."
-@The_monster@ shouts, "You must be punished!"
+@The_monster@ shouts @at_foe@, "You must be punished!"
%%%%
_high_priest_rare_
-@The_monster@ says, "Right in the middle of my sermon, too."
+@The_monster@ says @to_foe@, "Right in the middle of my sermon, too."
-@The_monster@ says "The wages of sin are death, you know."
+@The_monster@ says @to_foe@, "The wages of sin are death, you know."
# Mother Theresa
-@The_monster@ whispers, "Deep inside, it's sometimes so empty."
+@The_monster@ whispers @to_foe@, "Deep inside, it's sometimes so empty."
## END _high_priest_ ##
%%%%
_mercenary_guard_
@@ -186,41 +186,41 @@ VISUAL:@The_monster@ looks very cold.
VISUAL:@The_monster@ grins evilly.
-@The_monster@ screams, "One false step and I'll kill you."
+@The_monster@ screams @at_foe@, "One false step and I'll kill you."
-@The_monster@ screams, "I'm going to kill you! Now!"
+@The_monster@ screams @at_foe@, "I'm going to kill you! Now!"
-@The_monster@ shouts, "You will never get the Orb!"
+@The_monster@ shouts, "You will never get the Orb!" @player_only@
-@The_monster@ says, "No trespassing is allowed here."
+@The_monster@ says @to_foe@, "No trespassing is allowed here."
-@The_monster@ says, "Drop everything you've found here and return home."
+@The_monster@ says @to_foe@, "Drop everything you've found here and return home."
-@The_monster@ says, "Return every stolen item!"
+@The_monster@ says @to_foe@, "Return every stolen item!"
-@The_monster@ shouts, "Intruder!"
+@The_monster@ shouts @at_foe@, "Intruder!"
-@The_monster@ screams, "You must be punished!"
+@The_monster@ screams @at_foe@, "You must be punished!"
%%%%
_mercenary_guard_medium_
-@The_monster@ says, "Now you've reached the end of your journey."
+@The_monster@ says @to_foe@, "Now you've reached the end of your journey."
-@The_monster@ says, "It's nothing personal."
+@The_monster@ says @to_foe@, "It's nothing personal."
-@The_monster@ says, "Coming here was your last mistake."
+@The_monster@ says @to_foe@, "Coming here was your last mistake."
-@The_monster@ says, "The best offense is a good offense."
+@The_monster@ says @to_foe@, "The best offense is a good offense."
-@The_monster@ shouts, "Return immediately or I'll kill you!"
+@The_monster@ shouts @at_foe@, "Return immediately or I'll kill you!"
%%%%
_mercenary_guard_rare_
-@The_monster@ says, "A dead adventurer is a good adventurer."
+@The_monster@ says, "A dead adventurer is a good adventurer." @player_only@
-@The_monster@ shouts, "It's the end of the party!"
+@The_monster@ shouts @at_foe@, "It's the end of the party!"
-@The_monster@ shouts, "Surrender and die!"
+@The_monster@ shouts @at_foe@, "Surrender and die!"
## END _mercenary_guard_ ##
%%%%
@@ -264,21 +264,21 @@ ENCHANT:@The_monster@ becomes larger for a moment.
VISUAL SPELL:@The_monster@'s eyes start to glow.
-VISUAL SPELL:@The_monster@ tries to paralyze you with @possessive@ gaze.
+VISUAL SPELL:@The_monster@ tries to paralyze @foe@ with @possessive@ gaze.
-@The_monster@ shouts, "You can't withstand my power!"
+@The_monster@ shouts @at_foe@, "You can't withstand my power!"
-@The_monster@ shouts, "You are history!"
+@The_monster@ shouts @at_foe@, "You are history!"
%%%%
_wizard_rare_
-VISUAL SPELL:@The_monster@ throws some strange powder towards you.
+VISUAL SPELL:@The_monster@ throws some strange powder towards @foe@.
-SPELL:@The_monster@ says, "Argatax netranoch dertex."
+SPELL:@The_monster@ says @to_foe@, "Argatax netranoch dertex."
-SPELL:@The_monster@ says, "Dogrw nutew berg."
+SPELL:@The_monster@ says @to_foe@, "Dogrw nutew berg."
-SPELL:@The_monster@ shouts, "Entram moth deg ulag!"
+SPELL:@The_monster@ shouts @at_foe@, "Entram moth deg ulag!"
## END _wizard_ ##
%%%%
@@ -293,29 +293,29 @@ _hostile_adventurer_common_
VISUAL:@The_monster@ frowns.
-@The_monster@ screams, "I was here first!"
+@The_monster@ screams, "I was here first!" @player_only@
-@The_monster@ screams, "The Orb is mine!"
+@The_monster@ screams, "The Orb is mine!" @player_only@
-@The_monster@ screams, "Go away or die!"
+@The_monster@ screams @at_foe@, "Go away or die!"
-@The_monster@ screams, "Die!"
+@The_monster@ screams @at_foe@, "Die!"
%%%%
_hostile_adventurer_rare_
VISUAL:@The_monster@ looks very upset.
-@The_monster@ screams, "Return home!"
+@The_monster@ screams @at_foe@, "Return home!"
-@The_monster@ screams, "Give me all your treasure!"
+@The_monster@ screams @at_foe@, "Give me all your treasure!"
-@The_monster@ screams, "You will never get the Orb!"
+@The_monster@ screams, "You will never get the Orb!" @player_only@
-@The_monster@ screams, "First you have to pass me!"
+@The_monster@ screams @at_foe@, "First you have to pass me!"
-@The_monster@ screams, "I hate you!"
+@The_monster@ screams @at_foe@, "I hate you!"
-@The_monster@ laughs, "I am free! Free to kill you!"
+@The_monster@ laughs @at_foe@, "I am free! Free to kill you!"
## END _hostile_adventurer_ ##
%%%%
_friendly_imp_
@@ -373,12 +373,12 @@ VISUAL:@The_monster@ lashes @possessive@ tail.
VISUAL:@The_monster@ grinds @possessive@ teeth.
-VISUAL:@The_monster@ breathes @smoke_or_steam@ at you.
+VISUAL:@The_monster@ breathes @smoke_or_steam@ at @foe@.
%%%%
_hostile_imp_rare_
-VISUAL:@The_monster@ spits at you.
+VISUAL:@The_monster@ spits at @foe@.
VISUAL:@The_monster@ picks up a beetle and eats it.
@@ -392,11 +392,11 @@ VISUAL:@The_monster@ summons a swarm of flies.
%%%%
_demon_taunt_
-@The_monster@ @says@, "@demon_taunt@"
+@The_monster@ @says@ @to_foe@, "@demon_taunt@"
%%%%
_imp_taunt_
-@The_monster@ @says@, "@imp_taunt@"
+@The_monster@ @says@ @to_foe@, "@imp_taunt@"
##########################################
# Messages by monster body shape
##########################################
@@ -606,9 +606,9 @@ _confused_humanoid_rare_
VISUAL:@The_monster@ shakes.
-@The_monster@ asks, "Who are you?"
+@The_monster@ asks @foe,@ "Who are you?"
-@The_monster@ asks, "What the hell are we doing here? Hmm, I see..."
+@The_monster@ asks @foe,@ "What the hell are we doing here? Hmm, I see..."
@The_monster@ cries, "My head! MY HEAD!!!"
@@ -670,25 +670,25 @@ VISUAL:@The_monster@ @almost@ stumbles in trying to escape.
@The_monster@ @moans@, "Oh dear! Oh dear!"
-@The_monster@ @begs@, "Please don't kill me!"
+@The_monster@ @begs@ @to_foe@, "Please don't kill me!"
@The_monster@ begs for mercy.
-@The_monster@ cries, "Mercy!"
+@The_monster@ cries @to_foe@, "Mercy!"
VISUAL:@The_monster@ tries to recover @possessive@ lost courage.
%%%%
_fleeing_humanoid_rare_
-@The_monster@ @begs@, "Why can't we all just get along?"
+@The_monster@ @begs@ @to_foe@, "Why can't we all just get along?"
@The_monster@ @mutters@, "Damn and blast!"
-@The_monster@ shouts, "No! I'll never do that again!"
+@The_monster@ shouts @at_foe@, "No! I'll never do that again!"
@The_monster@ @blubbers@, "@Mommeee@!"
-@The_monster@ @begs@, "Please! I have a lot of children..."
+@The_monster@ @begs@ @to_foe@, "Please! I have a lot of children..."
VISUAL:@The_monster@ looks really @rattled@.
## END fleeing humanoid ##
@@ -729,7 +729,7 @@ _friendly_humanoid_common_
@The_monster@ yells, "Run! I'll cover you!"
-@The_monster@ shouts, "Die, monster!"
+@The_monster@ shouts @at_foe@, "Die, monster!"
VISUAL:@The_monster@ looks at you.
@@ -941,10 +941,10 @@ w:15
VISUAL SPELL:@The_monster@ stares at you.
VISUAL WARN:You feel cold.
-VISUAL:@The_monster@ points at you threateningly.
+VISUAL:@The_monster@ points at @foe@ threateningly.
w:5
-VISUAL:@The_monster@ stares at you while slowly dragging a finger across @possessive@ throat.
+VISUAL:@The_monster@ stares at @foe@ while slowly dragging a finger across @possessive@ throat.
## END silenced player ghost ##
%%%%
player ghost
@@ -959,7 +959,7 @@ w:2
%%%%
_player_ghost_common_
-SPELL:@The_monster@ stares at you.
+SPELL:@The_monster@ stares at @foe@.
WARN:You feel cold.
@The_monster@ lets out a mournful wail.
@@ -972,9 +972,9 @@ WARN:You feel cold.
@The_monster@ says very slowly, "There's no hope."
-@The_monster@ @wails@, "You will never get the ORB!"
+@The_monster@ @wails@, "You will never get the ORB!" @player_only@
-@The_monster@ whispers, "The ORB doesn't exist."
+@The_monster@ whispers, "The ORB doesn't exist." @player_only@
@The_monster@ @wails@, "They lied to you. The Dungeon just goes down and down forever."
@@ -983,7 +983,7 @@ WARN:You feel cold.
@The_monster@ @wails@, "You must not succeed where I failed!"
# Sid Vicious II
-@The_monster@ whispers, "There is no future for you."
+@The_monster@ whispers @to_foe@, "There is no future for you."
%%%%
_player_ghost_medium_
@@ -1001,11 +1001,11 @@ VISUAL:@The_monster@ grins evilly.
@The_monster@ @wails@, "Do you think the gods will protect you?"
-@The_monster@ screams, "I'll kill anyone who wants the ORB!"
+@The_monster@ screams, "I'll kill anyone who wants the ORB!" @player_only@
-@The_monster@ screams, "Don't try to defend! You have no chance!"
+@The_monster@ screams @at_foe@, "Don't try to defend! You have no chance!"
-@The_monster@ screams, "Zot is a myth, the ORB is a fable, you'll soon be a tale!"
+@The_monster@ screams, "Zot is a myth, the ORB is a fable, you'll soon be a tale!" @player_only@
@The_monster@ whispers, "Death is liberation."
@@ -1054,27 +1054,27 @@ _Agnes_common_
VISUAL:@The_monster@ grins evilly.
-@The_monster@ says, "I need a new robe. I'll buy it with your money."
+@The_monster@ says @to_foe@, "I need a new robe. I'll buy it with your money."
-@The_monster@ says, "How can you wear that ugly dress?"
+@The_monster@ says @to_foe@, "How can you wear that ugly dress?"
-@The_monster@ screams, "Give me all your money!"
+@The_monster@ screams @at_foe@, "Give me all your money!"
-@The_monster@ screams, "All treasure is mine! Mine!"
+@The_monster@ screams @at_foe@, "All treasure is mine! Mine!"
-@The_monster@ screams, "Die, beast!"
+@The_monster@ screams @at_foe@, "Die, beast!"
%%%%
_Agnes_rare_
-@The_monster@ screams, "You'll never get my money!"
+@The_monster@ screams @at_foe@, "You'll never get my money!"
-@The_monster@ screams, "Give me everything and get away!"
+@The_monster@ screams @at_foe@, "Give me everything and get away!"
-@The_monster@ screams, "If you give me all your money I'll let you live. Maybe."
+@The_monster@ screams @at_foe@, "If you give me all your money I'll let you live. Maybe."
-@The_monster@ screams, "I want your rings! And amulets! And... EVERYTHING!"
+@The_monster@ screams @at_foe@, "I want your rings! And amulets! And... EVERYTHING!"
-@The_monster@ screams, "I hate dirty adventurers like you!"
+@The_monster@ screams, "I hate dirty adventurers like you!" @player_only@
## END Agnes ##
%%%%
@@ -1098,17 +1098,17 @@ _Azrael_common_
@The_monster@ howls in rage.
-@The_monster@ screams, "No! No! YES! No!"
+@The_monster@ screams @at_foe@, "No! No! YES! No!"
-@The_monster@ screams, "Burn! Burn! All of it must BURN!"
+@The_monster@ screams @at_foe@, "Burn! Burn! All of it must BURN!"
VISUAL:@The_monster@ blows smoke rings.
%%%%
_Azrael_rare_
-@The_monster@ grins and asks, "Are you @adj_flammable@?"
+@The_monster@ grins and asks @foe,@ "Are you @adj_flammable@?"
-@The_monster@ says, "We're having tasty @player_genus@ kabobs tonight!"
+@The_monster@ says @to_foe@, "We're having tasty @foe_genus@ kabobs tonight!"
VISUAL:@The_monster@ whirls about in circles.
## END Azrael ##
@@ -1137,36 +1137,36 @@ VISUAL:@The_monster@ frowns.
VISUAL:@The_monster@ looks angry.
-@The_monster@ screams, "I don't like you!"
+@The_monster@ screams @at_foe@, "I don't like you!"
-@The_monster@ screams, "I'm going to kill you!"
+@The_monster@ screams @at_foe@, "I'm going to kill you!"
-@The_monster@ screams, "I'm much stronger than you!"
+@The_monster@ screams @at_foe@, "I'm much stronger than you!"
-@The_monster@ screams, "I'll eat your brain! And then I'll vomit it back up!"
+@The_monster@ screams @at_foe@, "I'll eat your brain! And then I'll vomit it back up!"
-@The_monster@ screams, "You are the ugliest creature I've ever seen!"
+@The_monster@ screams @at_foe@, "You are the ugliest creature I've ever seen!"
-@The_monster@ screams, "Die!"
+@The_monster@ screams @at_foe@, "Die!"
-@The_monster@ screams, "I'll cover the dungeon with your blood!"
+@The_monster@ screams @at_foe@, "I'll cover the dungeon with your blood!"
%%%%
_Blork_rare_
-@The_monster@ screams, "I'll cut your head off!"
+@The_monster@ screams @at_foe@, "I'll cut your head off!"
-@The_monster@ screams, "I'll break your legs!"
+@The_monster@ screams @at_foe@, "I'll break your legs!"
-@The_monster@ screams, "I'll break your arms!"
+@The_monster@ screams @at_foe@, "I'll break your arms!"
-@The_monster@ screams, "I'll crush all your ribs! One by one!"
+@The_monster@ screams @at_foe@, "I'll crush all your ribs! One by one!"
-@The_monster@ screams, "I'll make a cloak from your skin!"
+@The_monster@ screams @at_foe@, "I'll make a cloak from your skin!"
-@The_monster@ screams, "I'll decorate my home with your organs!"
+@The_monster@ screams @at_foe@, "I'll decorate my home with your organs!"
-@The_monster@ screams, "I'll drink your blood! Soon!"
+@The_monster@ screams @at_foe@, "I'll drink your blood! Soon!"
## END Blork the orc ##
%%%%
# An ancient lich
@@ -1215,35 +1215,35 @@ _Boris_medium_
@The_monster@ laughs.
-@The_monster@ says, "You can't imagine my power."
+@The_monster@ says @to_foe@, "You can't imagine my power."
-@The_monster@ says, "Orb? You want the Orb? You'll never get it."
+@The_monster@ says, "Orb? You want the Orb? You'll never get it." @player_only@
-@The_monster@ says, "My power is unlimited."
+@The_monster@ says @to_foe@, "My power is unlimited."
-@The_monster@ says, "You can't kill me. I'm immortal."
+@The_monster@ says @to_foe@, "You can't kill me. I'm immortal."
-@The_monster@ says, "I know the secret of eternal life. Do you?"
+@The_monster@ says @to_foe@, "I know the secret of eternal life. Do you?"
-@The_monster@ says, "I know your future. Your future is death."
+@The_monster@ says @to_foe@, "I know your future. Your future is death."
-@The_monster@ says, "Who wants to live forever? Me."
+@The_monster@ says @to_foe@, "Who wants to live forever? Me."
-@The_monster@ says, "There's only one solution for you. To die."
+@The_monster@ says @to_foe@, "There's only one solution for you. To die."
-@The_monster@ says, "You can never win."
+@The_monster@ says @to_foe@, "You can never win."
%%%%
_Boris_rare_
-@The_monster@ says, "I didn't invite you."
+@The_monster@ says @to_foe@, "I didn't invite you."
-@The_monster@ says, "The world, the flesh, and the devil."
+@The_monster@ says @to_foe@, "The world, the flesh, and the devil."
@The_monster@ says "Magic. You know nothing about it."
-@The_monster@ says, "I'll be back."
+@The_monster@ says @to_foe@, "I'll be back."
-@The_monster@ says, "Join the legion of my servants."
+@The_monster@ says @to_foe@, "Join the legion of my servants."
%%%%
Boris return_speech
@@ -1254,23 +1254,23 @@ w:5
%%%%
_Boris_return_common_
-@The_monster@ says, "You haven't seen the last of me!"
+@The_monster@ says @to_foe@, "You haven't seen the last of me!"
-@The_monster@ says, "I'll get you next time!"
+@The_monster@ says @to_foe@, "I'll get you next time!"
-@The_monster@ says, "This isn't over yet!"
+@The_monster@ says @to_foe@, "This isn't over yet!"
-@The_monster@ says, "I'll be back!"
+@The_monster@ says @to_foe@, "I'll be back!"
-@The_monster@ says, "This isn't the end, it's only just beginning!"
+@The_monster@ says @to_foe@, "This isn't the end, it's only just beginning!"
%%%%
_Boris_return_rare_
-@The_monster@ says, "Kill me? I think not!"
+@The_monster@ says @to_foe@, "Kill me? I think not!"
-@The_monster@ says, "You cannot defeat me so easily!"
+@The_monster@ says @to_foe@, "You cannot defeat me so easily!"
-@The_monster@ says, "We will meet again!"
+@The_monster@ says @to_foe@, "We will meet again!"
## END Boris ##
%%%%
# An adventurer hating competition
@@ -1301,27 +1301,27 @@ VISUAL:@The_monster@ looks angry.
@The_monster@ laughs wildly.
-@The_monster@ says, "I'm so much better than you."
+@The_monster@ says @to_foe@, "I'm so much better than you."
-@The_monster@ says, "I love to fight, but killing is better."
+@The_monster@ says @to_foe@, "I love to fight, but killing is better."
-@The_monster@ says, "Fast and perfect. Such is my way of killing."
+@The_monster@ says @to_foe@, "Fast and perfect. Such is my way of killing."
-@The_monster@ screams, "Die!"
+@The_monster@ screams @at_foe@, "Die!"
-@The_monster@ screams, "Do you want it fast or slow?!"
+@The_monster@ screams @at_foe@, "Do you want it fast or slow?!"
%%%%
_Erica_rare_
VISUAL:@The_monster@ drinks a potion.
-@The_monster@ screams, "Hurry, death awaits!"
+@The_monster@ screams @at_foe@, "Hurry, death awaits!"
-@The_monster@ screams, "I'll never tell where it is!"
+@The_monster@ screams @at_foe@, "I'll never tell where it is!"
-@The_monster@ screams, "You'll never get it!"
+@The_monster@ screams @at_foe@, "You'll never get it!"
-@The_monster@ screams, "Coming here was suicide! For you!"
+@The_monster@ screams @at_foe@, "Coming here was suicide! For you!"
## END Erica ##
%%%%
# An ugly ogre
@@ -1340,25 +1340,25 @@ _Erolcha_common_
VISUAL:@The_monster@ tries to grin evilly.
-@The_monster@ screams, "DIE!"
+@The_monster@ screams @at_foe@, "DIE!"
-@The_monster@ screams, "Lunch!"
+@The_monster@ screams @at_foe@, "Lunch!"
-@The_monster@ screams, "Erolcha kill you!"
+@The_monster@ screams @at_foe@, "Erolcha kill you!"
%%%%
_Erolcha_rare_
-@The_monster@ screams, "Eat!"
+@The_monster@ screams @at_foe@, "Eat!"
-@The_monster@ screams, "Stand! Erolcha hit you!"
+@The_monster@ screams @at_foe@, "Stand! Erolcha hit you!"
-@The_monster@ screams, "Blood!"
+@The_monster@ screams @at_foe@, "Blood!"
-@The_monster@ screams, "Erolcha crush your head!"
+@The_monster@ screams @at_foe@, "Erolcha crush your head!"
-@The_monster@ screams, "Erolcha happy to kill you!"
+@The_monster@ screams @at_foe@, "Erolcha happy to kill you!"
-@The_monster@ screams, "Erolcha angry!"
+@The_monster@ screams @at_foe@, "Erolcha angry!"
## END Erolcha ##
%%%%
# apprentice summoner, has funny ideas about honour
@@ -1371,17 +1371,17 @@ w:5
%%%%
_Eustachio_common_
-@The_monster@ screams, "At last I'll have my revenge!"
+@The_monster@ screams @at_foe@, "At last I'll have my revenge!"
-@The_monster@ screams, "Hey, you killed my favorite bat!"
+@The_monster@ screams @at_foe@, "Hey, you killed my favorite bat!"
-@The_monster@ says, "Summoning is fun!"
+@The_monster@ says @to_foe@, "Summoning is fun!"
-@The_monster@ says, "My allies will avenge me."
+@The_monster@ says @to_foe@, "My allies will avenge me."
%%%%
_Eustachio_rare_
-@The_monster@ yells, "Perjured traitor, DIE!"
+@The_monster@ yells @at_foe@, "Perjured traitor, DIE!"
VISUAL:@The_monster@ twirls his moustache.
@@ -1415,35 +1415,35 @@ VISUAL:@The_monster@ ponders the situation.
VISUAL:@The_monster@ looks for a scalpel.
-VISUAL:@The_monster@ throws something at you.
+VISUAL:@The_monster@ throws something at @foe@.
-@The_monster@ says, "You've got nice eyes. I could use them."
+@The_monster@ says @to_foe@, "You've got nice eyes. I could use them."
-@The_monster@ says, "I only need a few of your organs!"
+@The_monster@ says @to_foe@, "I only need a few of your organs!"
-@The_monster@ says, "This won't hurt a bit."
+@The_monster@ says @to_foe@, "This won't hurt a bit."
-@The_monster@ says, "I have something special for you."
+@The_monster@ says @to_foe@, "I have something special for you."
-@The_monster@ says, "Don't worry, I'll take only what I need."
+@The_monster@ says @to_foe@, "Don't worry, I'll take only what I need."
%%%%
_Francis_rare_
-@The_monster@ says, "Relax, I know what I'm doing!"
+@The_monster@ says @to_foe@, "Relax, I know what I'm doing!"
-@The_monster@ asks, "Did you know that corpses are an important natural resource?"
+@The_monster@ asks @foe,@ "Did you know that corpses are an important natural resource?"
-@The_monster@ asks, "How about a little dissection?"
+@The_monster@ asks @foe,@ "How about a little dissection?"
-@The_monster@ says, "Excuse me, but I need your head."
+@The_monster@ says @to_foe@, "Excuse me, but I need your head."
-@The_monster@ says, "I want you in my laboratory!"
+@The_monster@ says @to_foe@, "I want you in my laboratory!"
-@The_monster@ says, "What about your heart? Do you need it?"
+@The_monster@ says @to_foe@, "What about your heart? Do you need it?"
-@The_monster@ screams, "Don't move! I want to cut off your ear!"
+@The_monster@ screams @at_foe@, "Don't move! I want to cut off your ear!"
-@The_monster@ says, "Say, could I borrow your tongue for a while?"
+@The_monster@ says @to_foe@, "Say, could I borrow your tongue for a while?"
## END Francis ##
%%%%
@@ -1469,31 +1469,31 @@ _Ijyb_common_
VISUAL:@The_monster@ grins evilly.
-@The_monster@ screams, "Die!"
+@The_monster@ screams @at_foe@, "Die!"
-@The_monster@ screams, "Me kill you!"
+@The_monster@ screams @at_foe@, "Me kill you!"
-@The_monster@ screams, "Me stronger than you!"
+@The_monster@ screams @at_foe@, "Me stronger than you!"
-@The_monster@ screams, "It's all mine!"
+@The_monster@ screams @at_foe@, "It's all mine!"
-@The_monster@ screams, "Get away!"
+@The_monster@ screams @at_foe@, "Get away!"
-@The_monster@ screams, "Level is mine! All mine!"
+@The_monster@ screams @at_foe@, "Level is mine! All mine!"
-@The_monster@ screams, "You nasty! Big nasty!"
+@The_monster@ screams @at_foe@, "You nasty! Big nasty!"
%%%%
_Ijyb_rare_
-@The_monster@ screams, "I cut your head off!"
+@The_monster@ screams @at_foe@, "I cut your head off!"
-@The_monster@ screams, "I dance on your bones!"
+@The_monster@ screams @at_foe@, "I dance on your bones!"
-@The_monster@ screams, "Me very upset!"
+@The_monster@ screams @at_foe@, "Me very upset!"
-@The_monster@ screams, "No! No, no, no, no!"
+@The_monster@ screams @at_foe@, "No! No, no, no, no!"
-@The_monster@ screams, "I no like you!"
+@The_monster@ screams @at_foe@, "I no like you!"
## END Ijyb ##
%%%%
# A middle aged man, hired to kill you. He is in a hurry.
@@ -1508,35 +1508,35 @@ _Harold_common_
VISUAL:@The_monster@ looks nervous.
-@The_monster@ says, "Stand still. I'm trying to kill you."
+@The_monster@ says @to_foe@, "Stand still. I'm trying to kill you."
-@The_monster@ screams, "Hurry up!"
+@The_monster@ screams @at_foe@, "Hurry up!"
-@The_monster@ screams, "Die!"
+@The_monster@ screams @at_foe@, "Die!"
-@The_monster@ screams, "DIE! Now!"
+@The_monster@ screams @at_foe@, "DIE! Now!"
-@The_monster@ says, "Only a few hits and it's over."
+@The_monster@ says @to_foe@, "Only a few hits and it's over."
@The_monster@ sighs, "I don't have time for this!"
-@The_monster@ screams, "Could you die a little faster?!"
+@The_monster@ screams @at_foe@, "Could you die a little faster?!"
-@The_monster@ shouts, "Come on! I've got more names on my list!"
+@The_monster@ shouts @at_foe@, "Come on! I've got more names on my list!"
%%%%
_Harold_rare_
-@The_monster@ says, "You know, I'm in a hurry."
+@The_monster@ says @to_foe@, "You know, I'm in a hurry."
-@The_monster@ says, "I hope you die faster."
+@The_monster@ says @to_foe@, "I hope you die faster."
-@The_monster@ screams, "I'll finish you soon!"
+@The_monster@ screams @at_foe@, "I'll finish you soon!"
-@The_monster@ screams, "Don't delay it!"
+@The_monster@ screams @at_foe@, "Don't delay it!"
-@The_monster@ nervously moans, "This is taking ages..."
+@The_monster@ nervously moans @at_foe@, "This is taking ages..."
-@The_monster@ says, "Mine is not to reason why. Mine's to do, yours to die."
+@The_monster@ says @to_foe@, "Mine is not to reason why. Mine's to do, yours to die."
## END Harold ##
%%%%
# a pretty merfolk witch
@@ -1549,9 +1549,9 @@ w:5
%%%%
_Ilsuiw_common_
-@The_monster@ asks, "Won't you come swim with me?"
+@The_monster@ asks @foe,@ "Won't you come swim with me?"
-@The_monster@ whispers, "Come on in, the water's fine."
+@The_monster@ whispers @to_foe@, "Come on in, the water's fine."
@The_monster@ sings a @strange_or_haunting@ @chanty@.
@@ -1563,9 +1563,9 @@ VISUAL:@The_monster@ gazes at you @hypnot_or_seductively@.
@The_monster@ sings, "To sleep, to sleep ... mayhap to drown."
-@The_monster@ says, "It's lovely beneath the waves -- you'll see!"
+@The_monster@ says @to_foe@, "It's lovely beneath the waves -- you'll see!"
-@The_monster@ asks, "Do you dare to walk upon the beach?"
+@The_monster@ asks @foe,@ "Do you dare to walk upon the beach?"
%%%%
hypnot_or_seductively
@@ -1600,7 +1600,7 @@ VISUAL:@The_monster@ grins evilly.
VISUAL:@The_monster@ looks very angry.
-@The_monster@ shouts, "You're disturbing me! I'll have to kill you!"
+@The_monster@ shouts @at_foe@, "You're disturbing me! I'll have to kill you!"
SPELL:@The_monster@ gestures wildly.
@@ -1608,17 +1608,17 @@ SPELL:@The_monster@ mumbles something strange.
%%%%
_Jessica_rare_
-@The_monster@ says, "Why did you come here?"
+@The_monster@ says @to_foe@, "Why did you come here?"
-@The_monster@ says, "I'm really upset."
+@The_monster@ says @to_foe@, "I'm really upset."
-@The_monster@ very coldly says, "I hate your company."
+@The_monster@ very coldly says @to_foe@, "I hate your company."
-@The_monster@ shouts, "I don't like beings like you!"
+@The_monster@ shouts @at_foe@, "I don't like beings like you!"
-@The_monster@ shouts, "Stop bothering me, or I'll kill you!"
+@The_monster@ shouts @at_foe@, "Stop bothering me, or I'll kill you!"
-@The_monster@ shouts, "You are a ghastly nuisance!"
+@The_monster@ shouts @at_foe@, "You are a ghastly nuisance!"
## END Jessica ##
%%%%
@@ -1638,27 +1638,27 @@ VISUAL:@The_monster@ smiles happily.
VISUAL:@The_monster@ tries to grin evilly.
-@The_monster@ says, "I'm happy to see you. And I'll be happy to kill you."
+@The_monster@ says @to_foe@, "I'm happy to see you. And I'll be happy to kill you."
-@The_monster@ says, "I've waited for this moment for such a long time."
+@The_monster@ says @to_foe@, "I've waited for this moment for such a long time."
-@The_monster@ says, "It's nothing personal, but I have to kill you."
+@The_monster@ says @to_foe@, "It's nothing personal, but I have to kill you."
-@The_monster@ says, "You will never get the Orb, sorry."
+@The_monster@ says, "You will never get the Orb, sorry." @player_only@
-@The_monster@ shouts, "I love to fight! I love killing!"
+@The_monster@ shouts @at_foe@, "I love to fight! I love killing!"
-@The_monster@ says, "I'm here to kill trespassers. I like my job."
+@The_monster@ says @to_foe@, "I'm here to kill trespassers. I like my job."
-@The_monster@ says, "You must be punished! Or... I want to punish you!"
+@The_monster@ says @to_foe@, "You must be punished! Or... I want to punish you!"
%%%%
_Joseph_rare_
-@The_monster@ shouts, "At last, some action!"
+@The_monster@ shouts @at_foe@, "At last, some action!"
-@The_monster@ sighs, "Being a guard is usually so boring..."
+@The_monster@ sighs @at_foe@, "Being a guard is usually so boring..."
-@The_monster@ shouts, "Wow!"
+@The_monster@ shouts @at_foe@, "Wow!"
## END Joseph ##
%%%%
# An ugly old witch looking for someone to kill
@@ -1672,15 +1672,15 @@ VISUAL:@The_monster@ grinds her teeth.
@The_monster@ laughs insanely.
-@The_monster@ says, "I'll make a rug of your skin."
+@The_monster@ says @to_foe@, "I'll make a rug of your skin."
-@The_monster@ says, "How about some decapitation?"
+@The_monster@ says @to_foe@, "How about some decapitation?"
-@The_monster@ screams, "Die!"
+@The_monster@ screams @at_foe@, "Die!"
-@The_monster@ screams, "I have something special for you."
+@The_monster@ screams @at_foe@, "I have something special for you."
-@The_monster@ screams, "I'll use your head as a decoration in my hut!"
+@The_monster@ screams @at_foe@, "I'll use your head as a decoration in my hut!"
## END Josephine ##
%%%%
# A bounty hunter
@@ -1695,35 +1695,35 @@ _Jozef_common_
VISUAL:@The_monster@ looks satisfied.
-@The_monster@ asks, "You are @player_name@, aren't you?"
+@The_monster@ asks @foe,@ "You are @foe_name@, aren't you?"
-@The_monster@ says, "You don't look worth it for that money."
+@The_monster@ says @to_foe@, "You don't look worth it for that money."
-@The_monster@ says, "Really sorry, but I've got to feed my family."
+@The_monster@ says @to_foe@, "Really sorry, but I've got to feed my family."
-@The_monster@ says, "It's nothing personal. I'm paid for it!"
+@The_monster@ says @to_foe@, "It's nothing personal. I'm paid for it!"
-@The_monster@ shouts, "I'll get 500 gold for your head!"
+@The_monster@ shouts @at_foe@, "I'll get 500 gold for your head!"
-@The_monster@ shouts, "Your time has come!"
+@The_monster@ shouts @at_foe@, "Your time has come!"
-@The_monster@ screams, "Die!"
+@The_monster@ screams @at_foe@, "Die!"
-@The_monster@ screams, "At last I found you!"
+@The_monster@ screams @at_foe@, "At last I found you!"
%%%%
_Jozef_rare_
-@The_monster@ says, "I suppose that you are @player_name@. Sorry if I'm wrong."
+@The_monster@ says @to_foe@, "I suppose that you are @foe_name@. Sorry if I'm wrong."
-@The_monster@ asks, "Did you write a testament? You should."
+@The_monster@ asks @foe,@ "Did you write a testament? You should."
-@The_monster@ says, "One dead @player_name@, 500 gold pieces. It's in my contract."
+@The_monster@ says @to_foe@, "One dead @foe_name@, 500 gold pieces. It's in my contract."
-@The_monster@ says, "My job is sometimes very exciting. Sometimes..."
+@The_monster@ says @to_foe@, "My job is sometimes very exciting. Sometimes..."
-@The_monster@ says, "I think I deserve my money."
+@The_monster@ says @to_foe@, "I think I deserve my money."
-@The_monster@ screams, "Die! I've got more contracts today."
+@The_monster@ screams @at_foe@, "Die! I've got more contracts today."
## END Jozef ##
%%%%
# A powerful sorceress, guarding the ORB
@@ -1765,7 +1765,7 @@ VISUAL SPELL:@The_monster@ gestures.
SPELL:@The_monster@ casts a spell.
@_Margery_spell_results_@
-VISUAL SPELL:@The_monster@'s eyes start to glow with a @spell_colour_ light.
+VISUAL SPELL:@The_monster@'s eyes start to glow with a @spell_colour@ light.
VISUAL SPELL:@The_monster@ gestures.
VISUAL WARN:You feel @bad_effect@.
@@ -1774,33 +1774,33 @@ w:5
VISUAL SPELL:@The_monster@ throws some purple powder towards you.
VISUAL WARN:You feel @bad_effect@.
-@The_monster@ says, "Die!"
+@The_monster@ says @to_foe@, "Die!"
-@The_monster@ screams, "You must be punished!"
+@The_monster@ screams @at_foe@, "You must be punished!"
-@The_monster@ screams, "You can't withstand my power!"
+@The_monster@ screams @at_foe@, "You can't withstand my power!"
-@The_monster@ screams, "All trespassers must die!"
+@The_monster@ screams @at_foe@, "All trespassers must die!"
%%%%
_Margery_rare_
-SPELL:@The_monster@ screams, "Ergichanteg reztahaw!"
+SPELL:@The_monster@ screams @at_foe@, "Ergichanteg reztahaw!"
WARN:You feel really bad.
VISUAL:@The_monster@ looks very self-confident.
-@The_monster@ says, "You are dead."
+@The_monster@ says @to_foe@, "You are dead."
-@The_monster@ screams, "You'll have to get past me!"
+@The_monster@ screams @at_foe@, "You'll have to get past me!"
-@The_monster@ screams, "You are doomed!"
+@The_monster@ screams @at_foe@, "You are doomed!"
-@The_monster@ screams, "Nothing can help you."
+@The_monster@ screams @at_foe@, "Nothing can help you."
-@The_monster@ screams, "Death is my middle name!"
+@The_monster@ screams @at_foe@, "Death is my middle name!"
-@The_monster@ screams, "The ORB is only a tale, but I will kill you anyway!"
+@The_monster@ screams, "The ORB is only a tale, but I will kill you anyway!" @player_only@
## END Margery
%%%%
# A mercenary guarding the dungeon
@@ -1822,27 +1822,27 @@ VISUAL:@The_monster@ frowns.
VISUAL:@The_monster@ looks upset.
-@The_monster@ screams, "'Entarex' is mine!"
+@The_monster@ screams @at_foe@, "'Entarex' is mine!"
-@The_monster@ screams, "You can't face my power!"
+@The_monster@ screams @at_foe@, "You can't face my power!"
-@The_monster@ screams, "Give me that sword! Immediately!"
+@The_monster@ screams @at_foe@, "Give me that sword! Immediately!"
-@The_monster@ screams, "Your life or 'Entarex'! You must choose!"
+@The_monster@ screams @at_foe@, "Your life or 'Entarex'! You must choose!"
-@The_monster@ screams, "I want it!"
+@The_monster@ screams @at_foe@, "I want it!"
-@The_monster@ screams, "Die, you thief!"
+@The_monster@ screams @at_foe@, "Die, you thief!"
%%%%
_Maud_rare_
-@The_monster@ screams, "Submit or die!"
+@The_monster@ screams @at_foe@, "Submit or die!"
-@The_monster@ screams, "Give me 'Entarex'!"
+@The_monster@ screams @at_foe@, "Give me 'Entarex'!"
-@The_monster@ screams, "If you give me 'Entarex', I'll let you live!"
+@The_monster@ screams @at_foe@, "If you give me 'Entarex', I'll let you live!"
-@The_monster@ asks, "Will you think of me as you die?"
+@The_monster@ asks @foe,@ "Will you think of me as you die?"
## END Maud ##
%%%%
@@ -1860,7 +1860,7 @@ SPELL:@The_monster@ mumbles some strange words.
SPELL:@The_monster@ gestures wildly.
-VISUAL SPELL:@The_monster@ points at you.
+VISUAL SPELL:@The_monster@ points at @foe@.
VISUAL:__YOU_RESIST
VISUAL:@The_monster@ looks very angry.
@@ -1869,17 +1869,17 @@ VISUAL:@The_monster@ frowns.
VISUAL:@The_monster@ looks angry.
-@The_monster@ screams, "Get away! Or better yet, die!"
-%%%
+@The_monster@ screams @at_foe@, "Get away! Or better yet, die!"
+%%%%
_Michael_rare_
VISUAL:@The_monster@ drinks a potion.
VISUAL:@The_monster@ shakes with wrath.
-@The_monster@ says, "You really are a nuisance."
+@The_monster@ says @to_foe@, "You really are a nuisance."
-@The_monster@ screams, "I want to be alone!"
+@The_monster@ screams @at_foe@, "I want to be alone!"
%%%%
# A disembodied skull.
@@ -1904,21 +1904,21 @@ VISUAL:@The_monster@ grins evilly.
@The_monster@'s teeth chatter loudly.
-@The_monster@ cackles, "I will rule the world!"
+@The_monster@ cackles @at_foe@, "I will rule the world!"
%%%%
_Murray_rare_
-@The_monster@ says, "You're the second biggest fool I've ever met!"
+@The_monster@ says @to_foe@, "You're the second biggest fool I've ever met!"
-@The_monster@ screams, "If I had legs, you would be dead twenty times over!"
+@The_monster@ screams @at_foe@, "If I had legs, you would be dead twenty times over!"
-@The_monster@ shouts, "Give me your head, so I can impale it on a pike!"
+@The_monster@ shouts @at_foe@, "Give me your head, so I can impale it on a pike!"
-@The_monster@ shouts, "Let the forces of evil and voodoo overcome you!"
+@The_monster@ shouts @at_foe@, "Let the forces of evil and voodoo overcome you!"
-@The_monster@ yells, "I'm a mighty demonic power!"
+@The_monster@ yells @at_foe@, "I'm a mighty demonic power!"
-@The_monster@ yells, "My visage is famous all over the dungeon!"
+@The_monster@ yells @at_foe@, "My visage is famous all over the dungeon!"
## END Murray ##
%%%%
silenced Murray
@@ -1949,15 +1949,15 @@ VISUAL:@The_monster@ grimaces horribly.
@The_monster@ mutters something to herself.
-@The_monster@ asks, "There's a tasty morsel, hm?"
+@The_monster@ asks @foe,@ "There's a tasty morsel, hm?"
%%%%
_Nergalle_rare_
-@The_monster@ yells, "What are YOU looking at?"
+@The_monster@ yells @at_foe@, "What are YOU looking at?"
-@The_monster@ shouts, "Kill, kill, my pretties!"
+@The_monster@ shouts @at_foe@, "Kill, kill, my pretties!"
-@The_monster@ says, "THAT's why. How awful. You!"
+@The_monster@ says @to_foe@, "THAT's why. How awful. You!"
@The_monster@ blows @possessive@ nose.
## END Nergalle ##
@@ -1974,31 +1974,31 @@ _Norbert_common_
VISUAL:@The_monster@ smiles happily.
-@The_monster@ asks, "Did you write a will? You should."
+@The_monster@ asks @foe,@ "Did you write a will? You should."
-@The_monster@ says, "I love killing ugly monsters like you."
+@The_monster@ says @to_foe@, "I love killing ugly monsters like you."
-@The_monster@ says, "Another dead monster... It must be my lucky day!"
+@The_monster@ says @to_foe@, "Another dead monster... It must be my lucky day!"
-@The_monster@ screams, "Die, monster!"
+@The_monster@ screams @at_foe@, "Die, monster!"
-@The_monster@ screams, "Blood and destruction!"
+@The_monster@ screams @at_foe@, "Blood and destruction!"
-@The_monster@ screams, "Pray, because you'll die soon!"
+@The_monster@ screams @at_foe@, "Pray, because you'll die soon!"
-@The_monster@ shouts, "Your time has come!"
+@The_monster@ shouts @at_foe@, "Your time has come!"
%%%%
_Norbert_rare_
-@The_monster@ says, "A pity your head will make such an ugly trophy."
+@The_monster@ says @to_foe@, "A pity your head will make such an ugly trophy."
-@The_monster@ says, "You know, it's an honour to die by my hand."
+@The_monster@ says @to_foe@, "You know, it's an honour to die by my hand."
-@The_monster@ says, "I'm sorry but you don't have a chance."
+@The_monster@ says @to_foe@, "I'm sorry but you don't have a chance."
-@The_monster@ screams, "I'm a hero!"
+@The_monster@ screams @at_foe@, "I'm a hero!"
-@The_monster@ shouts, "YES! Another notch!"
+@The_monster@ shouts @at_foe@, "YES! Another notch!"
## END Norbert ##
%%%%
@@ -2016,27 +2016,27 @@ SPELL:@The_monster@ mumbles some mantras.
VISUAL:@The_monster@ is surrounded with an aura of peace.
-VISUAL:@The_monster@ smiles at you.
+VISUAL:@The_monster@ smiles at @foe@.
VISUAL:@The_monster@ looks relaxed.
@The_monster@ sings, "Peace now, freedom now! Peace now, freedom now!"
-@The_monster@ says, "Life is just suffering. I'll help you."
+@The_monster@ says @to_foe@, "Life is just suffering. I'll help you."
-@The_monster@ says, "Death is just a liberation!"
+@The_monster@ says @to_foe@, "Death is just a liberation!"
-@The_monster@ says, "Feel free to die. It's a great thing."
+@The_monster@ says @to_foe@, "Feel free to die. It's a great thing."
-@The_monster@ says, "Breathe deeply."
+@The_monster@ says @to_foe@, "Breathe deeply."
-@The_monster@ says, "It's all maya."
+@The_monster@ says @to_foe@, "It's all maya."
-@The_monster@ says, "Drop out!"
+@The_monster@ says @to_foe@, "Drop out!"
-@The_monster@ screams, "Peace! I bring you eternal peace!"
+@The_monster@ screams @at_foe@, "Peace! I bring you eternal peace!"
-@The_monster@ screams, "Free your soul! Die!"
+@The_monster@ screams @at_foe@, "Free your soul! Die!"
%%%%
_Norris_rare_
@@ -2044,25 +2044,25 @@ VISUAL:@The_monster@ looks very balanced.
@The_monster@ sings, "Hare Rama, Hare Krishna!"
-@The_monster@ says, "After death you'll find inner peace."
+@The_monster@ says @to_foe@, "After death you'll find inner peace."
-@The_monster@ says, "Don't resist. I'll do it for you."
+@The_monster@ says @to_foe@, "Don't resist. I'll do it for you."
-@The_monster@ says, "OHM MANI PADME HUM!"
+@The_monster@ says @to_foe@, "OHM MANI PADME HUM!"
-@The_monster@ says, "The Orb is only a myth. Forget about it."
+@The_monster@ says @to_foe@, "The Orb is only a myth. Forget about it." @player_only@
-@The_monster@ says, "This is called Combat Meditation."
+@The_monster@ says @to_foe@, "This is called Combat Meditation."
-@The_monster@ asks, "What is the sound of one hand?"
+@The_monster@ asks @foe,@ "What is the sound of one hand?"
-@The_monster@ sighs, "Enlightenment is such responsibility."
+@The_monster@ sighs @at_foe@, "Enlightenment is such responsibility."
-@The_monster@ screams, "Enter NIRVANA! Now!"
+@The_monster@ screams @at_foe@, "Enter NIRVANA! Now!"
-@The_monster@ screams, "Love! Eternal love!"
+@The_monster@ screams @at_foe@, "Love! Eternal love!"
-@The_monster@ screams, "Blow your mind!"
+@The_monster@ screams @at_foe@, "Blow your mind!"
## END Norris ##
%%%%
# The King of the Cyclopes from Homer's Odyssey!
@@ -2081,30 +2081,30 @@ _Polyphemus_common_
# In the movie, I hear he speaks stupidly, as an unintelligent brute
# would. This speech is a compromise, as it reflects neither. :)
-VISUAL:@The_monster@ glares at you with his lone eye.
+VISUAL:@The_monster@ glares at @foe@ with his lone eye.
-VISUAL:@The_monster@ wildly rolls his eye at you.
+VISUAL:@The_monster@ wildly rolls his eye at @foe@.
@The_monster@ @shouts@ loudly for his pets to attack!
-@The_monster@ @shouts@, "You will make a great snack!"
+@The_monster@ @shouts@ @at_foe@, "You will make a great snack!"
@The_monster@ @shouts@, "Attack, my pets! Attack!"
-@The_monster@ says, "Trying to escape from me is @pointless@!"
+@The_monster@ says @to_foe@, "Trying to escape from me is @pointless@!"
%%%%
_Polyphemus_rare_
-VISUAL:@The_monster@ seems to be sizing you up for his next meal.
+VISUAL:@The_monster@ seems to be sizing @foe@ up for his next meal.
VISUAL:@The_monster@ stomps at the @surface@ furiously.
-VISUAL:@The_monster@ looks around for something heavy to throw at you.
+VISUAL:@The_monster@ looks around for something heavy to throw at @foe@.
-@The_monster@ says, "Do you like to play 'catch'?"
+@The_monster@ says @to_foe@, "Do you like to play 'catch'?"
#I suppose this line may not fit if the player is of certain species...
-@The_monster@ says, "@player_genus@ for dinner? Sounds delicious!"
+@The_monster@ says @to_foe@, "@foe_genus@ for dinner? Sounds delicious!"
## END Polyphemus ##
%%%%
Prince Ribbit
@@ -2126,11 +2126,11 @@ VISUAL:@The_monster@ catches a @_frog_food_@ with @possessive@ tongue.
%%%%
_Prince_Ribbit_rare_
-@The_monster@ asks, "Just a little smooch?"
+@The_monster@ asks @foe,@ "Just a little smooch?"
-@The_monster@ sighs, "It's not easy being green!"
+@The_monster@ sighs @at_foe@, "It's not easy being green!"
-@The_monster@ says, "You're just another fly to me."
+@The_monster@ says @to_foe@, "You're just another fly to me."
%%%%
_frog_food_
@@ -2161,42 +2161,42 @@ VISUAL:@The_monster@ cries.
@The_monster@ sings a strange song.
-@The_monster@ says, "Please, could you die a little faster?"
+@The_monster@ says @to_foe@, "Please, could you die a little faster?"
-@The_monster@ says, "I'm a bad girl, but I can't do anything about it."
+@The_monster@ says @to_foe@, "I'm a bad girl, but I can't do anything about it."
-@The_monster@ says, "I'm so lonely. Only corpses are my friends."
+@The_monster@ says @to_foe@, "I'm so lonely. Only corpses are my friends."
-@The_monster@ says, "Once you're dead we can play together!"
+@The_monster@ says @to_foe@, "Once you're dead we can play together!"
-@The_monster@ says, "I'll kill you and take you home."
+@The_monster@ says @to_foe@, "I'll kill you and take you home."
@The_monster@ cries, "I hate blood and violence."
-@The_monster@ cries, "You've killed my pet!"
+@The_monster@ cries @to_foe@, "You've killed my pet!"
%%%%
_Psyche_rare_
VISUAL:@The_monster@ smiles happily.
-VISUAL:@The_monster@ stares at you for a moment.
+VISUAL:@The_monster@ stares at @foe@ for a moment.
VISUAL:@The_monster@ bursts into tears.
VISUAL:@The_monster@ sucks her thumb.
-@The_monster@ screams, "YOU ARE VIOLATING AREA SECURITY!!!"
+@The_monster@ screams @at_foe@, "YOU ARE VIOLATING AREA SECURITY!!!"
-@The_monster@ screams, "Peace! Flowers! Freedom! Dead adventurers!"
+@The_monster@ screams @at_foe@, "Peace! Flowers! Freedom! Dead adventurers!"
-@The_monster@ shouts, "Well, maybe I'm a bit nutty, but who cares?!"
+@The_monster@ shouts @at_foe@, "Well, maybe I'm a bit nutty, but who cares?!"
-@The_monster@ shouts, "I'm not crazy, you are!"
+@The_monster@ shouts @at_foe@, "I'm not crazy, you are!"
-@The_monster@ shouts, "I hope that you are sorry for that!"
+@The_monster@ shouts @at_foe@, "I hope that you are sorry for that!"
# Copyright U2?
-@The_monster@ whispers, "Hold me, thrill me, kiss me, kill me."
+@The_monster@ whispers @to_foe@, "Hold me, thrill me, kiss me, kill me."
## END Psyche ##
%%%%
# A crazy adventurer
@@ -2213,25 +2213,25 @@ VISUAL:@The_monster@ looks excited.
VISUAL:@The_monster@ looks confused.
-@The_monster@ screams, "Die, monster!"
+@The_monster@ screams @at_foe@, "Die, monster!"
-@The_monster@ screams, "Give me the Holy Grail!"
+@The_monster@ screams @at_foe@, "Give me the Holy Grail!"
-@The_monster@ screams, "You killed all those lovely monsters, you murderer!"
+@The_monster@ screams @at_foe@, "You killed all those lovely monsters, you murderer!"
-@The_monster@ screams, "Hurray!"
+@The_monster@ screams @at_foe@, "Hurray!"
%%%%
_Rupert_rare_
-@The_monster@ asks, "You're a monster, aren't you?"
+@The_monster@ asks @foe,@ "You're a monster, aren't you?"
-@The_monster@ says, "My Mum always said: 'Kill them all'."
+@The_monster@ says @to_foe@, "My Mum always said: 'Kill them all'."
-@The_monster@ shouts, "I'm a great and powerful hero!"
+@The_monster@ shouts @at_foe@, "I'm a great and powerful hero!"
-@The_monster@ screams, "Get ready! I'll kill you! Or something like that..."
+@The_monster@ screams @at_foe@, "Get ready! I'll kill you! Or something like that..."
-@The_monster@ screams, "Red! No, blue!"
+@The_monster@ screams @at_foe@, "Red! No, blue!"
## END Rupert ##
%%%%
# a sapphire statue of an earth mage
@@ -2247,11 +2247,11 @@ w:1
%%%%
_Roxanne_common_
-@The_monster@ says, "Come a little closer, will you?"
+@The_monster@ says @to_foe@, "Come a little closer, will you?"
@The_monster@ mutters, "When I said I wanted to live forever... this was not what I had in mind."
-@The_monster@ says, "At least I didn't end up somewhere with nobody to talk to."
+@The_monster@ says @to_foe@, "At least I didn't end up somewhere with nobody to talk to."
@The_monster@ wails, "NOOOO!"
@@ -2260,21 +2260,21 @@ __NONE
%%%%
_Roxanne_medium_
-@The_monster@ asks, "Could you be a darling and pick up those spellbooks for me?"
+@The_monster@ asks @foe,@ "Could you be a darling and pick up those spellbooks for me?"
-@The_monster@ asks, "Say, could you scratch my back for me?"
+@The_monster@ asks @foe,@ "Say, could you scratch my back for me?"
-@The_monster@ sighs and says, "It wouldn't be so bad were it not for the bird droppings."
+@The_monster@ sighs and says @to_foe@, "It wouldn't be so bad were it not for the bird droppings."
%%%%
_Roxanne_rare_
-@The_monster@ shouts, "I'd kick your ass right now if I could just get over there!"
+@The_monster@ shouts @at_foe@, "I'd kick your ass right now if I could just get over there!"
@The_monster@ prays for a Stone to Flesh spell.
-@The_monster@ wonders, "Maybe oil would work? Probably not."
+@The_monster@ wonders @to_foe@, "Maybe oil would work? Probably not."
-@The_monster@ says, "They said I was crazy for my new spells... Turns out they were right."
+@The_monster@ says @to_foe@, "They said I was crazy for my new spells... Turns out they were right."
## END Roxanne ##
%%%%
# orc warlord
@@ -2284,9 +2284,9 @@ Saint Roka
w:7
@related Saint Roka@
-@The_monster@ says, "Down here, you're an orc or you're nobody."
+@The_monster@ says @to_foe@, "Down here, you're an orc or you're nobody."
-@The_monster@ says, "In the orcish mines, orcs kill the likes of you."
+@The_monster@ says @to_foe@, "In the orcish mines, orcs kill the likes of you."
%%%%
related Saint Roka
@@ -2297,7 +2297,7 @@ w:2
@The_monster@ calls out, "Only Beogh rules here!"
-@The_monster@ says, "I shall smite you and smash you."
+@The_monster@ says @to_foe@, "I shall smite you and smash you."
@The_monster@ lets out a mighty cry!
@@ -2319,7 +2319,7 @@ w:5
@_hostile_orc_beogh_believer_rare_@
w:1
-@The_monster@ shouts, "There can only be one messiah: ME!"
+@The_monster@ shouts @at_foe@, "There can only be one messiah: ME!"
## END Saint Roka ##
%%%%
@@ -2338,17 +2338,17 @@ w:20
VISUAL:@The_monster@ grinds his teeth.
-@The_monster@ says, "Don't worry, I'll kill you fast."
+@The_monster@ says @to_foe@, "Don't worry, I'll kill you fast."
-@The_monster@ says, "You will soon forget everything."
+@The_monster@ says @to_foe@, "You will soon forget everything."
-@The_monster@ says, "Look into my eyes."
+@The_monster@ says @to_foe@, "Look into my eyes."
-@The_monster@ says, "I'm your fate."
+@The_monster@ says @to_foe@, "I'm your fate."
-@The_monster@ screams, "Die, monster!"
+@The_monster@ screams @at_foe@, "Die, monster!"
-@The_monster@ screams, "Don't try to resist!"
+@The_monster@ screams @at_foe@, "Don't try to resist!"
SPELL:@The_monster@ casts a spell.
ENCHANT:@The_monster@'s eyes start glowing with a red light.
@@ -2358,17 +2358,17 @@ ENCHANT:@The_monster@ is suddenly surrounded by pale @spell_colour@ light.
%%%%
_Sigmund_rare_
-VISUAL:@The_monster@ tries to bite you.
+VISUAL:@The_monster@ tries to bite @foe@.
-@The_monster@ asks, "Do you like me?"
+@The_monster@ asks @foe,@ "Do you like me?"
-@The_monster@ screams, "You will never... NEVER!!!"
+@The_monster@ screams @at_foe@, "You will never... NEVER!!!"
-@The_monster@ screams, "I am the angel of Death!"
+@The_monster@ screams @at_foe@, "I am the angel of Death!"
-@The_monster@ screams, "Only death can liberate you!"
+@The_monster@ screams @at_foe@, "Only death can liberate you!"
-@The_monster@ whispers, "You'll know eternity soon."
+@The_monster@ whispers @to_foe@, "You'll know eternity soon."
## END Sigmund ##
%%%%
# female kobold assassin
@@ -2381,9 +2381,9 @@ w:5
%%%%
_Sonja_common_
-@The_monster@ says, "I'm academy-trained, you know."
+@The_monster@ says @to_foe@, "I'm academy-trained, you know."
-@The_monster@ shouts, "Too slow!"
+@The_monster@ shouts @at_foe@, "Too slow!"
VISUAL:@The_monster@ twirls her cape.
@@ -2393,15 +2393,15 @@ VISUAL:@The_monster@ plants her feet in a plie.
%%%%
_Sonja_rare_
-@The_monster@ shouts, "Hah! Missed me again!"
+@The_monster@ shouts @at_foe@, "Hah! Missed me again!"
-@The_monster@ says, "The Royal Ballet doesn't accept kobolds. That's why I went into killing people."
+@The_monster@ says @to_foe@, "The Royal Ballet doesn't accept kobolds. That's why I went into killing people."
-@The_monster@ says, "If only old Madame Brzewit could see me now!"
+@The_monster@ says @to_foe@, "If only old Madame Brzewit could see me now!"
-@The_monster@ shouts, "Some dancing partner you are!"
+@The_monster@ shouts @at_foe@, "Some dancing partner you are!"
-@The_monster@ says, "Someone hired me to kill you, but I'm not supposed to say who."
+@The_monster@ says @to_foe@, "Someone hired me to kill you, but I'm not supposed to say who."
## END Sonja ##
%%%%
# A fighter who likes to kill
@@ -2414,37 +2414,37 @@ w:4
%%%%
_Terence_common_
-VISUAL:@The_monster@ looks scornfully at you.
+VISUAL:@The_monster@ looks scornfully at @foe@.
VISUAL:@The_monster@ bares @possessive@ teeth.
-@The_monster@ asks, "Do you want it fast or slow?"
+@The_monster@ asks @foe,@ "Do you want it fast or slow?"
-@The_monster@ says, "Don't bother to defend, it's @pointless@."
+@The_monster@ says @to_foe@, "Don't bother to defend, it's @pointless@."
-@The_monster@ says, "I'll show you a few @ploy@s."
+@The_monster@ says @to_foe@, "I'll show you a few @ploy@s."
-@The_monster@ shouts, "Now you die!"
+@The_monster@ shouts @at_foe@, "Now you die!"
-@The_monster@ shouts, "@ATTACK@!!!"
+@The_monster@ shouts @at_foe@, "@ATTACK@!!!"
-@The_monster@ shouts, "Get ready for death!"
+@The_monster@ shouts @at_foe@, "Get ready for death!"
-@The_monster@ screams, "I want your blood!"
+@The_monster@ screams @at_foe@, "I want your blood!"
-@The_monster@ screams, "I'm going to kill you!"
+@The_monster@ screams @at_foe@, "I'm going to kill you!"
%%%%
_Terence_rare_
-@The_monster@ says, "Rest in peace."
+@The_monster@ says @to_foe@, "Rest in peace."
-@The_monster@ says, "How do you enjoy it?"
+@The_monster@ says @to_foe@, "How do you enjoy it?"
-@The_monster@ says, "You're history."
+@The_monster@ says @to_foe@, "You're history."
-@The_monster@ says, "Did you write a will? You should..."
+@The_monster@ says @to_foe@, "Did you write a will? You should..."
-@The_monster@ says, "Time to say good-bye..."
+@The_monster@ says @to_foe@, "Time to say good-bye..."
## END Terence ###
%%%%
@@ -2461,21 +2461,21 @@ VISUAL:@The_monster@ grins evilly.
@The_monster@ howls with blood-lust.
-@The_monster@ says, "Maybe you aren't @player_name@. It doesn't matter."
+@The_monster@ says @to_foe@, "Maybe you aren't @foe_name@. It doesn't matter."
-@The_monster@ sneers, "Innocent? I'll kill you anyway."
+@The_monster@ sneers @at_foe@, "Innocent? I'll kill you anyway."
-@The_monster@ screams, "Die!"
+@The_monster@ screams @at_foe@, "Die!"
-@The_monster@ screams, "I'm going to kill you! Now!"
+@The_monster@ screams @at_foe@, "I'm going to kill you! Now!"
-@The_monster@ screams, "Blood and destruction!"
+@The_monster@ screams @at_foe@, "Blood and destruction!"
-@The_monster@ screams, "I'll get 30 silver pieces for your head!"
+@The_monster@ screams @at_foe@, "I'll get 30 silver pieces for your head!"
-@The_monster@ screams, "You are already dead."
+@The_monster@ screams @at_foe@, "You are already dead."
-@The_monster@ screams, "I love blood!"
+@The_monster@ screams @at_foe@, "I love blood!"
## END Urug ##
%%%%
# An adventurer hating competition
@@ -2498,27 +2498,27 @@ w:5
@The_monster@ roars horribly.
You are afraid.
-VISUAL:@The_monster@ glares at you.
+VISUAL:@The_monster@ glares at @foe@.
-@The_monster@ growls, "YOU BORE ME SO."
+@The_monster@ growls @at_foe@, "YOU BORE ME SO."
-@The_monster@ roars, "DIE, PUNY ONE!"
+@The_monster@ roars @at_foe@, "DIE, PUNY ONE!"
-@The_monster@ roars, "FACE MY WRATH!"
+@The_monster@ roars @at_foe@, "FACE MY WRATH!"
-@The_monster@ roars, "COMING HERE WAS YOUR LAST MISTAKE!"
+@The_monster@ roars @at_foe@, "COMING HERE WAS YOUR LAST MISTAKE!"
-@The_monster@ roars, "I'VE KILLED HUNDREDS OF ADVENTURERS!"
+@The_monster@ roars, "I'VE KILLED HUNDREDS OF ADVENTURERS!" @player_only@
%%%%
_Xtahua_rare_
-@The_monster@ rumbles, "YOU'RE BARELY A SNACK."
+@The_monster@ rumbles @at_foe@, "YOU'RE BARELY A SNACK."
-@The_monster@ roars, "I HATE BEING BOTHERED!"
+@The_monster@ roars @at_foe@, "I HATE BEING BOTHERED!"
-@The_monster@ roars, "I HOPE YOU'RE TASTY!"
+@The_monster@ roars @at_foe@, "I HOPE YOU'RE TASTY!"
-@The_monster@ roars, "BAH! BLOODY ADVENTURERS."
+@The_monster@ roars, "BAH! BLOODY ADVENTURERS." @player_only@
## END Xtahua ##
##########################################
@@ -2529,7 +2529,7 @@ _Xtahua_rare_
# orderly for beings of pure chaos.
chaos spawn
-VISUAL:@The_monster@ grows dozens of eye stalks in order to get a better look at you.
+VISUAL:@The_monster@ grows dozens of eye stalks in order to get a better look at @foe@.
VISUAL:@The_monster@ splits into many small globs of multi-coloured light, then recombines.
@@ -2580,21 +2580,21 @@ w:2
##################################
reaper
-@The_monster@ whispers, "Time's up, @player_name@!"
+@The_monster@ whispers, "Time's up, @foe_name@!"
-VISUAL:@The_monster@ beckons to you.
+VISUAL:@The_monster@ beckons to @foe@.
-@The_monster@ shouts, "I have come for you, @player_name@!"
+@The_monster@ shouts @at_foe@, "I have come for you, @foe_name@!"
-@The_monster@ shouts, "Death awaits you!"
+@The_monster@ shouts @at_foe@, "Death awaits you!"
-@The_monster@ says, "Everyone has to die one time, and your time is now."
+@The_monster@ says @to_foe@, "Everyone has to die one time, and your time is now."
VISUAL:@The_monster@ draws a finger across @possessive@ throat.
-@The_monster@ shouts, "You must die NOW!"
+@The_monster@ shouts @at_foe@, "You must die NOW!"
-@The_monster@ shouts, "Die, @player_name@!"
+@The_monster@ shouts @at_foe@, "Die, @foe_name@!"
%%%%
# Too many killer bees in the hive to have them give messages, unless
# they're confused or fleeing.
@@ -2614,13 +2614,13 @@ _Killer_Klown_common_
@The_monster@ laughs merrily.
-VISUAL:@The_monster@ beckons to you.
+VISUAL:@The_monster@ beckons to @foe@.
VISUAL:@The_monster@ does a flip.
VISUAL:@The_monster@ does a somersault.
-VISUAL:@The_monster@ smiles at you.
+VISUAL:@The_monster@ smiles at @foe@.
VISUAL:@The_monster@ grins with merry abandon.
@@ -2634,7 +2634,7 @@ VISUAL:@The_monster@ pantomimes your execution.
VISUAL:@The_monster@ pokes out @possessive@ tongue.
-@The_monster@ says, "Come and play with me!"
+@The_monster@ says @to_foe@, "Come and play with me!"
## END Killer Klown ##
%%%%
# The moth of wrath doesn't buzz like the other 'y' monsters, what
@@ -2681,7 +2681,7 @@ _tormentor_
_tormentor_common_
w:15
-@The_monster@ says, "I'll crush your bones, one by one."
+@The_monster@ says @to_foe@, "I'll crush your bones, one by one."
VISUAL:@The_monster@ grins evilly.
@@ -2689,33 +2689,33 @@ VISUAL:@The_monster@ grins madly.
VISUAL:@The_monster@ grins malevolently.
-@The_monster@ says, "I will show you what pain is."
+@The_monster@ says @to_foe@, "I will show you what pain is."
-@The_monster@ says, "You will wish to die when I get to you."
+@The_monster@ says @to_foe@, "You will wish to die when I get to you."
-@The_monster@ says, "I know your fate. It's pain."
+@The_monster@ says @to_foe@, "I know your fate. It's pain."
-@The_monster@ screams, "You will die horribly!"
+@The_monster@ screams @at_foe@, "You will die horribly!"
%%%%
_tormentor_rare_
@The_monster@ laughs crazily.
-@The_monster@ says, "I am all your nightmares come true."
+@The_monster@ says @to_foe@, "I am all your nightmares come true."
-@The_monster@ says, "I will drown you in your own blood."
+@The_monster@ says @to_foe@, "I will drown you in your own blood."
-@The_monster@ says, "I will eat your liver."
+@The_monster@ says @to_foe@, "I will eat your liver."
-@The_monster@ says, "I know a thousand and one ways to kill you."
+@The_monster@ says @to_foe@, "I know a thousand and one ways to kill you."
-@The_monster@ says, "I'll show you my torture chamber!"
+@The_monster@ says @to_foe@, "I'll show you my torture chamber!"
-@The_monster@ says, "Get ready! Throes of agony await you."
+@The_monster@ says @to_foe@, "Get ready! Throes of agony await you."
-@The_monster@ shouts, "Prepare for my thousand needles of pain!"
+@The_monster@ shouts @at_foe@, "Prepare for my thousand needles of pain!"
-@The_monster@ shouts, "I'll tear you apart!"
+@The_monster@ shouts @at_foe@, "I'll tear you apart!"
## END _tormentor_ ##
%%%%
white imp
@@ -2752,18 +2752,18 @@ SPELL:@The_monster@ intones a prayer.
SPELL:A sense of peace washes over you.
w:1
-@The_monster@ says, "Thou must remain pure in the battle against evil."
+@The_monster@ says @to_foe@, "Thou must remain pure in the battle against evil."
w:1
-@The_monster@ says, "May @player_god@ always shine on thee, @player_name@!"
+@The_monster@ says @to_foe@, "May @player_god@ always shine on thee, @player_name@!"
w:1
-@The_monster@ says, "@player_god@ be with thee, mortal!"
+@The_monster@ says @to_foe@, "@player_god@ be with thee, mortal!"
# The good gods are assumed to work closely together, so a Daeva praising
# Elyvilon is actually flavour.
w:1
-@The_monster@ says, "Praised be @good_god@ in the heavens above!"
+@The_monster@ says @to_foe@, "Praised be @good_god@ in the heavens above!"
%%%%
neutral good god 'cap-A'
@@ -2795,11 +2795,11 @@ good_god_neutral_holy_being_reaction
%%%%
good_god_neutral_holy_being_speech
-@The_monster@ shouts, "Continue thy quest, mortal!"
+@The_monster@ shouts @at_foe@, "Continue thy quest, mortal!"
-@The_monster@ says, "Forge ahead, servant of @player_god@!"
+@The_monster@ says @to_foe@, "Forge ahead, servant of @player_god@!"
-@The_monster@ says, "Carry on, mortal."
+@The_monster@ says @to_foe@, "Carry on, mortal."
%%%%
#############################################################
# evil monsters may also have some choicy things to say...
@@ -2810,10 +2810,10 @@ w:20
@_demon_taunt_@
w:1
-@The_monster@ screams, "@player_god@ won't protect you, @player_name@!"
+@The_monster@ screams @at_foe@, "@foe_god@ won't protect you, @foe_name@!"
w:1
-@The_monster@ screams, "@player_god@ is but a nuisance to me, mortal!"
+@The_monster@ screams @at_foe@, "@foe_god@ is but a nuisance to me, mortal!"
%%%%
##############################################
# Special orc speech
@@ -2929,6 +2929,17 @@ friendly related orc
w:5
@_generic_orc_speech_@
%%%%
+orc_says_to_foe
+
+shouts @at_foe@
+
+says @to_foe@
+
+grunts @at_foe@
+
+w:5
+sneers @at_foe@
+%%%%
orc_says
shouts
@@ -2981,31 +2992,31 @@ w:4
%%%%
_hostile_orc_beogh_unbeliever_common_
-@The_monster@ @orc_says@, "I don't believe in Beogh!"
+@The_monster@ @orc_says_to_foe@, "I don't believe in Beogh!"
-@The_monster@ @shouts@, "You're not the messiah, I am!"
+@The_monster@ @shouts@ @at_foe@, "You're not the messiah, I am!"
%%%%
_hostile_orc_beogh_believer_common_
-@The_monster@ mutters, "You're NOT the saviour of the Orcs."
+@The_monster@ mutters @at_foe@, "You're NOT the saviour of the Orcs."
-@The_monster@ grumbles, "You're not even a proper Orc..."
+@The_monster@ grumbles @at_foe@, "You're not even a proper Orc..."
-@The_monster@ @orc_says@, "How could Beogh possibly choose you?"
+@The_monster@ @orc_says_to_foe@, "How could Beogh possibly choose you?"
@The_monster@ mutters something uncomplimentary.
-@The_monster@ @orc_says@, "Beogh will surely punish you for your arrogance!"
+@The_monster@ @orc_says_to_foe@, "Beogh will surely punish you for your arrogance!"
-@The_monster@ grunts, "You, the messiah? You don't even look the part!"
+@The_monster@ grunts @at_foe@, "You, the messiah? You don't even look the part!"
-@The_monster@ @orc_says@, "The messiah will not be a Hill Orc!"
+@The_monster@ @orc_says_to_foe@, "The messiah will not be a Hill Orc!"
-@The_monster@ @orc_says@, "The messiah will be a true Orc!"
+@The_monster@ @orc_says_to_foe@, "The messiah will be a true Orc!"
-@The_monster@ @orc_says@, "Turn back to the hills, deceiver!"
+@The_monster@ @orc_says_to_foe@, "Turn back to the hills, deceiver!"
-@The_monster@ @shouts@, "Die, @orc_heathen@!"
+@The_monster@ @shouts@ @at_foe@, "Die, @orc_heathen@!"
@The_monster@ @shouts@, "Die, @player_name@, for besmirching Beogh's name!"
@@ -3013,23 +3024,23 @@ VISUAL:@The_monster@ grimaces.
%%%%
_hostile_orc_beogh_unbeliever_rare_
-@The_monster@ @orc_says@, "Orcs don't need Beogh!"
+@The_monster@ @orc_says_to_foe@, "Orcs don't need Beogh!"
-@The_monster@ @orc_says@, "Beogh's messiah is just a fairy-tale."
+@The_monster@ @orc_says_to_foe@, "Beogh's messiah is just a fairy-tale."
-@The_monster@ says, "Even if there were a messiah, it wouldn't be you."
+@The_monster@ says @to_foe@, "Even if there were a messiah, it wouldn't be you."
%%%%
_hostile_orc_beogh_believer_rare_
-@The_monster@ laughs, "You, our saviour!?"
+@The_monster@ laughs @at_foe@, "You, our saviour!?"
-@The_monster@ @shouts@, "Orcs! @player_name@ is lying!"
+@The_monster@ @shouts@ @at_foe@, "Orcs! @foe_name@ is lying!"
-@The_monster@ @orc_says@, "For a messiah, you look rather @orc_pathetic@."
+@The_monster@ @orc_says_to_foe@, "For a messiah, you look rather @orc_pathetic@."
-@The_monster@ @orc_says@, "Your @costumes_or_trick@ cannot @fool_or_deceive@ me."
+@The_monster@ @orc_says_to_foe@, "Your @costumes_or_trick@ cannot @fool_or_deceive@ me."
-@The_monster@ @orc_says@, "I wonder, will Beogh raise you from the dead?"
+@The_monster@ @orc_says_to_foe@, "I wonder, will Beogh raise you from the dead?"
VISUAL:@The_monster@ shakes @possessive@ head.
@@ -3135,7 +3146,7 @@ _friendly_beogh_speech_rare_
@The_monster@ @says_or_shouts@, "Our fallen brethren won't be forgotten."
# messages submitted by Lemuel
-@The_monster@ says, "I'd rather not die in your service, @player_name@."
+@The_monster@ says @to_foe@, "I'd rather not die in your service, @player_name@."
@The_monster@ chants, "I shall fear no evil, for @player_name@ is my saviour."
diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc
index d190d7805b..8451b50e37 100644
--- a/crawl-ref/source/mon-util.cc
+++ b/crawl-ref/source/mon-util.cc
@@ -7896,24 +7896,25 @@ void mon_enchant::set_duration(const monsters *mons, const mon_enchant *added)
maxduration = duration;
}
-// Replaces @player_god@ and @god_is@ with player's god name
+// Replaces @foe_god@ and @god_is@ with foe's god name
// special handling for atheists: use "you"/"You" instead.
-static std::string _replace_god_name(bool need_verb = false,
+static std::string _replace_god_name(god_type god, bool need_verb = false,
bool capital = false)
{
std::string result =
- (you.religion == GOD_NO_GOD ? (capital ? "You" : "you")
- : god_name(you.religion, false));
+ (god == GOD_NO_GOD ? (capital ? "You" : "you")
+ : god_name(god, false));
if (need_verb)
{
result +=
- (you.religion == GOD_NO_GOD ? " are" : " is");
+ (god == GOD_NO_GOD ? " are" : " is");
}
return (result);
}
-static std::string _get_species_insult(const std::string type)
+static std::string _get_species_insult(const std::string &species,
+ const std::string &type)
{
std::string lookup = "insult ";
// Get species genus.
@@ -7953,6 +7954,78 @@ std::string do_mon_str_replacements(const std::string &in_msg,
const monsters* monster, int s_type)
{
std::string msg = in_msg;
+
+ const actor* foe = (!crawl_state.arena && mons_wont_attack(monster)
+ && invalid_monster_index(monster->foe)) ?
+ &you : monster->get_foe();
+ const monsters* m_foe = (foe && foe->atype() == ACT_MONSTER) ?
+ dynamic_cast<const monsters*>(foe) : NULL;
+
+ std::string foe_species;
+
+ if (foe == NULL)
+ ;
+ else if (foe->atype() == ACT_PLAYER)
+ {
+ foe_species = species_name(you.species, 1, true);
+
+ msg = replace_all(msg, "@player_only@", "");
+ msg = replace_all(msg, " @foe,@", ",");
+
+ msg = replace_all(msg, "@player", "@foe");
+ msg = replace_all(msg, "@Player", "@Foe");
+
+ msg = replace_all(msg, "@foe@", "you");
+ msg = replace_all(msg, "@Foe@", "You");
+
+ msg = replace_all(msg, "@foe_name@", you.your_name);
+ msg = replace_all(msg, "@foe_species@", species_name(you.species, 1));
+ msg = replace_all(msg, "@foe_genus@", foe_species);
+ msg = replace_all(msg, "@foe_genus_plural@",
+ _pluralise_player_genus());
+ }
+ else
+ {
+ std::string foe_name;
+ if (you.can_see(m_foe) || crawl_state.arena)
+ {
+ if (m_foe->attitude == ATT_FRIENDLY
+ && !mons_is_unique(m_foe->type)
+ && !crawl_state.arena)
+ {
+ foe_name = m_foe->name(DESC_NOCAP_YOUR);
+ }
+ else
+ foe_name = m_foe->name(DESC_NOCAP_THE);
+ }
+ else
+ foe_name = "something";
+
+ msg = replace_all(msg, " @to_foe@", " to @foe@");
+ msg = replace_all(msg, " @at_foe@", " at @foe@");
+ msg = replace_all(msg, "@foe,@", "@foe@,");
+
+ msg = replace_all(msg, "@foe@", foe_name);
+ msg = replace_all(msg, "@Foe@", upcase_first(foe_name));
+
+ if (m_foe->is_named())
+ msg = replace_all(msg, "@foe_name@",
+ m_foe->name(DESC_PLAIN, true));
+
+ std::string species = mons_type_name(mons_species(m_foe->type),
+ DESC_PLAIN);
+
+ msg = replace_all(msg, "@foe_species@", species);
+
+ std::string genus = mons_type_name(mons_genus(m_foe->type),
+ DESC_PLAIN);
+
+ msg = replace_all(msg, "@foe_genus@", genus);
+ msg = replace_all(msg, "@foe_genus_plural@", pluralise(genus));
+
+ foe_species = genus;
+ }
+
description_level_type nocap = DESC_NOCAP_THE, cap = DESC_CAP_THE;
if (monster->is_named() && player_monster_visible(monster))
@@ -8000,13 +8073,6 @@ std::string do_mon_str_replacements(const std::string &in_msg,
msg = replace_all(msg, "@feature@", "buggy unseen feature");
}
- msg = replace_all(msg, "@player_name@", you.your_name);
- msg = replace_all(msg, "@player_species@",
- species_name(you.species, 1).c_str());
- msg = replace_all(msg, "@player_genus@",
- species_name(you.species, 1, true, false).c_str());
- msg = replace_all(msg, "@player_genus_plural@",
- _pluralise_player_genus().c_str());
if (player_monster_visible(monster))
{
@@ -8093,13 +8159,21 @@ std::string do_mon_str_replacements(const std::string &in_msg,
msg = replace_all(msg, "@feet@", part_str);
msg = replace_all(msg, "@Feet@", upcase_first(part_str));
- // Replace with "you are" for atheists.
- msg = replace_all(msg, "@god_is@", _replace_god_name(true, false));
- msg = replace_all(msg, "@God_is@", _replace_god_name(true, true));
+ if (foe != NULL)
+ {
+ const god_type god = foe->deity();
+
+ // Replace with "you are" for atheists.
+ msg = replace_all(msg, "@god_is@",
+ _replace_god_name(god, true, false));
+ msg = replace_all(msg, "@God_is@", _replace_god_name(god, true, true));
- // No verb needed,
- msg = replace_all(msg, "@player_god@", _replace_god_name(false, false));
- msg = replace_all(msg, "@Player_god@", _replace_god_name(false, true));
+ // No verb needed,
+ msg = replace_all(msg, "@foe_god@",
+ _replace_god_name(god, false, false));
+ msg = replace_all(msg, "@foe_god@",
+ _replace_god_name(god, false, true));
+ }
// The monster's god, not the player's.
if (monster->god == GOD_NO_GOD)
@@ -8108,14 +8182,14 @@ std::string do_mon_str_replacements(const std::string &in_msg,
msg = replace_all(msg, "@God@", god_name(monster->god));
// Replace with species specific insults.
- if (msg.find("@species_insult_") != std::string::npos)
+ if (foe != NULL && msg.find("@species_insult_") != std::string::npos)
{
msg = replace_all(msg, "@species_insult_adj1@",
- _get_species_insult("adj1"));
+ _get_species_insult(foe_species, "adj1"));
msg = replace_all(msg, "@species_insult_adj2@",
- _get_species_insult("adj2"));
+ _get_species_insult(foe_species, "adj2"));
msg = replace_all(msg, "@species_insult_noun@",
- _get_species_insult("noun"));
+ _get_species_insult(foe_species, "noun"));
}
static const char * sound_list[] =
diff --git a/crawl-ref/source/monspeak.cc b/crawl-ref/source/monspeak.cc
index 3b4e45233c..1265e522ca 100644
--- a/crawl-ref/source/monspeak.cc
+++ b/crawl-ref/source/monspeak.cc
@@ -45,12 +45,12 @@ REVISION("$Rev$");
// Try the exact key lookup along with the entire prefix list.
// If that fails, start ignoring hostile/religion/silence, in that order,
// first skipping hostile, then hostile *and* religion, then all three.
-static std::string _try_exact_string(const std::vector<std::string> prefixes,
- const std::string key,
- bool ignore_hostile = false,
- bool ignore_related = false,
- bool ignore_religion = false,
- bool ignore_silenced = false)
+static std::string __try_exact_string(const std::vector<std::string> &prefixes,
+ const std::string &key,
+ bool ignore_hostile = false,
+ bool ignore_related = false,
+ bool ignore_religion = false,
+ bool ignore_silenced = false)
{
bool hostile = false;
bool related = false;
@@ -95,29 +95,117 @@ static std::string _try_exact_string(const std::vector<std::string> prefixes,
if (msg.empty())
{
if (hostile) // skip hostile
- msg = _try_exact_string(prefixes, key, true);
+ msg = __try_exact_string(prefixes, key, true);
else if (related)
{
if (religion) // skip hostile and religion
- msg = _try_exact_string(prefixes, key, true, false, true);
+ msg = __try_exact_string(prefixes, key, true, false, true);
else // skip hostile and related
- msg = _try_exact_string(prefixes, key, true, true);
+ msg = __try_exact_string(prefixes, key, true, true);
}
else if (religion) // skip hostile, related and religion
- msg = _try_exact_string(prefixes, key, true, true, true);
+ msg = __try_exact_string(prefixes, key, true, true, true);
// 50% use non-verbal monster speech,
// 50% try for more general silenced monster message instead
else if (silenced && coinflip()) // skip all
- msg = _try_exact_string(prefixes, key, true, true, true, true);
+ msg = __try_exact_string(prefixes, key, true, true, true, true);
}
return msg;
}
-static std::string _get_speak_string(const std::vector<std::string> prefixes,
- const std::string key,
- const monsters *monster)
+static bool _invalid_msg(const std::string &msg, bool no_player, bool no_foe,
+ bool no_foe_name, bool no_god)
+{
+ if (no_player
+ && (msg.find("@player") != std::string::npos
+ || msg.find("@Player") != std::string::npos
+ || msg.find(":You") != std::string::npos))
+ {
+ return (true);
+ }
+
+ if (no_player)
+ {
+ std::vector<std::string> lines = split_string("\n", msg);
+ for (unsigned int i = 0; i < lines.size(); i++)
+ {
+ if (starts_with(lines[i], "You")
+ || ends_with(lines[i], "you."))
+ {
+ return (true);
+ }
+ }
+ }
+
+ if (no_foe && (msg.find("@foe") != std::string::npos
+ || msg.find("@Foe") != std::string::npos
+ || msg.find("foe@") != std::string::npos
+ || msg.find("@species") != std::string::npos))
+ {
+ return (true);
+ }
+
+ if (no_god && (msg.find("_god@") != std::string::npos
+ || msg.find("@god_") != std::string::npos))
+ {
+ return (true);
+ }
+
+ if (no_foe_name && msg.find("@foe_name@") != std::string::npos)
+ return (true);
+
+ return (false);
+}
+
+static std::string _try_exact_string(const std::vector<std::string> &prefixes,
+ const std::string &key,
+ bool no_player, bool no_foe,
+ bool no_foe_name, bool no_god,
+ bool ignore_hostile = false,
+ bool ignore_related = false,
+ bool ignore_religion = false,
+ bool ignore_silenced = false)
{
- std::string msg = _try_exact_string(prefixes, key);
+ std::string msg;
+ for (int tries = 0; tries < 10; tries++)
+ {
+ msg =
+ __try_exact_string(prefixes, key, ignore_hostile, ignore_related,
+ ignore_religion, ignore_silenced);
+
+ // If the first message was non-empty and discarded then discard
+ // all subsequent empty messages, so as to not replace an
+ // invalid non-empty message with an empty one.
+ if (msg.empty())
+ {
+ if (tries == 0)
+ return (msg);
+ else
+ {
+ tries--;
+ continue;
+ }
+ }
+
+ if (_invalid_msg(msg, no_player, no_foe, no_foe_name, no_god))
+ {
+ msg = "";
+ continue;
+ }
+ break;
+ }
+
+ return (msg);
+}
+
+static std::string __get_speak_string(const std::vector<std::string> &prefixes,
+ const std::string &key,
+ const monsters *monster,
+ bool no_player, bool no_foe,
+ bool no_foe_name, bool no_god)
+{
+ std::string msg = _try_exact_string(prefixes, key, no_player, no_foe,
+ no_foe_name, no_god);
if (!msg.empty())
return msg;
@@ -178,6 +266,45 @@ static std::string _get_speak_string(const std::vector<std::string> prefixes,
return msg;
}
+static std::string _get_speak_string(const std::vector<std::string> &prefixes,
+ const std::string &key,
+ const monsters *monster,
+ bool no_player, bool no_foe,
+ bool no_foe_name, bool no_god)
+{
+ std::string msg;
+ for (int tries = 0; tries < 10; tries++)
+ {
+ msg =
+ __get_speak_string(prefixes, key, monster, no_player, no_foe,
+ no_foe_name, no_god);
+
+ // If the first message was non-empty and discarded then discard
+ // all subsequent empty messages, so as to not replace an
+ // invalid non-empty message with an empty one.
+ if (msg.empty())
+ {
+ if (tries == 0)
+ return (msg);
+ else
+ {
+ tries--;
+ continue;
+ }
+ }
+
+ if (_invalid_msg(msg, no_player, no_foe, no_foe_name, no_god))
+ {
+ msg = "";
+ continue;
+ }
+
+ break;
+ }
+
+ return (msg);
+}
+
// Player ghosts with different classes can potentially speak different
// things.
static std::string _player_ghost_speak_str(const monsters *monster,
@@ -204,7 +331,7 @@ static std::string _player_ghost_speak_str(const monsters *monster,
}
// If the monster was originally a unique which has been polymorphed into
-// a non-unique, is its current monter type capable of using it's old
+// a non-unique, is its current monter type capable of using its old
// speech?
static bool _polyd_can_speak(const monsters* monster)
{
@@ -287,27 +414,48 @@ bool mons_speaks(const monsters *monster)
if (monster->has_ench(ENCH_CONFUSION))
prefixes.push_back("confused");
- // animals only look at the current player form,
- // smart monsters at the actual player genus
- if (is_player_same_species(monster->type,
- mons_intel(monster) <= I_ANIMAL))
+ const actor* foe = (!crawl_state.arena && mons_wont_attack(monster)
+ && invalid_monster_index(monster->foe)) ?
+ &you : monster->get_foe();
+ const monsters* m_foe = (foe && foe->atype() == ACT_MONSTER) ?
+ dynamic_cast<const monsters*>(foe) : NULL;
+
+ // animals only look at the current player form, smart monsters at the
+ // actual player genus
+ if (!foe || foe->atype() == ACT_PLAYER)
+ {
+ if (is_player_same_species(monster->type,
+ mons_intel(monster) <= I_ANIMAL))
+ {
+ prefixes.push_back("related"); // maybe overkill for Beogh?
+ }
+ }
+ else
{
- prefixes.push_back("related"); // maybe overkill for Beogh?
+ if (mons_genus(monster->mons_species()) ==
+ mons_genus(foe->mons_species()))
+ {
+ prefixes.push_back("related");
+ }
}
+ const god_type god = foe ? foe->deity() :
+ crawl_state.arena ? GOD_NO_GOD :
+ you.religion;
+
// Add Beogh to list of prefixes for orcs (hostile and friendly) if you
// worship Beogh. (This assumes your being a Hill Orc, so might have odd
// results in wizard mode.) Don't count charmed orcs.
- if (you.religion == GOD_BEOGH && mons_genus(monster->type) == MONS_ORC
+ if (god == GOD_BEOGH && mons_genus(monster->type) == MONS_ORC
&& !monster->has_ench(ENCH_CHARM))
{
prefixes.push_back("beogh");
}
else
{
- if (is_good_god(you.religion))
+ if (is_good_god(god))
prefixes.push_back("good god");
- else if (is_evil_god(you.religion))
+ else if (is_evil_god(god))
prefixes.push_back("evil god");
}
@@ -325,6 +473,18 @@ bool mons_speaks(const monsters *monster)
}
#endif
+ const bool no_foe = foe == NULL;
+ const bool no_player = crawl_state.arena
+ || (!mons_wont_attack(monster)
+ && (!foe || foe->atype() != ACT_PLAYER));
+ const bool mon_foe = m_foe != NULL;
+ const bool no_god = no_foe || (mon_foe && foe->deity() == GOD_NO_GOD);
+ const bool named_foe = !no_foe
+ && (!mon_foe || (m_foe->is_named()
+ && m_foe->type != MONS_ROYAL_JELLY));
+ const bool no_foe_name = !named_foe
+ || (mon_foe && (m_foe->flags & MF_NAME_MASK));
+
std::string msg;
// First, try its exact name
@@ -337,17 +497,20 @@ bool mons_speaks(const monsters *monster)
{
// Pandemonium demons have randomly generated names,
// so use "pandemonium lord" instead.
- msg = _get_speak_string(prefixes, "pandemonium lord", monster);
+ msg = _get_speak_string(prefixes, "pandemonium lord", monster,
+ no_player, no_foe, no_foe_name, no_god);
}
else
{
if (!monster->mname.empty() && _polyd_can_speak(monster))
msg = _get_speak_string(prefixes, monster->name(DESC_PLAIN),
- monster);
+ monster, no_player, no_foe, no_foe_name,
+ no_god);
if (msg.empty())
msg = _get_speak_string(prefixes, monster->base_name(DESC_PLAIN),
- monster);
+ monster, no_player, no_foe, no_foe_name,
+ no_god);
}
// The exact name brought no results, try monster genus.
@@ -356,7 +519,7 @@ bool mons_speaks(const monsters *monster)
{
msg = _get_speak_string(prefixes,
mons_type_name(mons_genus(monster->type), DESC_PLAIN),
- monster);
+ monster, no_player, no_foe, no_foe_name, no_god);
}
// __NONE means to be silent, and __NEXT means to try the next,
@@ -388,7 +551,8 @@ bool mons_speaks(const monsters *monster)
key += mons_char(monster->type);
key += "'";
- msg = _get_speak_string(prefixes, key, monster);
+ msg = _get_speak_string(prefixes, key, monster, no_player, no_foe,
+ no_foe_name, no_god);
}
if (msg == "__NONE")
@@ -441,7 +605,8 @@ bool mons_speaks(const monsters *monster)
}
if (msg.empty() || msg == "__NEXT")
- msg = _get_speak_string(prefixes, get_mon_shape_str(shape), monster);
+ msg = _get_speak_string(prefixes, get_mon_shape_str(shape), monster,
+ no_player, no_foe, no_foe_name, no_god);
if (msg == "__NONE")
{
@@ -462,18 +627,18 @@ bool mons_speaks(const monsters *monster)
if (shape == MON_SHAPE_HUMANOID_WINGED_TAILED)
{
shape = MON_SHAPE_HUMANOID_TAILED;
- msg = _get_speak_string(prefixes,
- get_mon_shape_str(shape),
- monster);
+ msg = _get_speak_string(prefixes, get_mon_shape_str(shape),
+ monster, no_player, no_foe, no_foe_name,
+ no_god);
// Only be silent if both tailed and winged return __NONE
if (msg.empty() || msg == "__NONE" || msg == "__NEXT")
{
shape = MON_SHAPE_HUMANOID_WINGED;
std::string msg2;
- msg2 = _get_speak_string(prefixes,
- get_mon_shape_str(shape),
- monster);
+ msg2 = _get_speak_string(prefixes, get_mon_shape_str(shape),
+ monster, no_player, no_foe,
+ no_foe_name, no_god);
if (msg == "__NONE" && msg2 == "__NONE")
{
@@ -492,9 +657,9 @@ bool mons_speaks(const monsters *monster)
if (msg.empty() || msg == "__NONE" || msg == "__NEXT")
{
shape = MON_SHAPE_HUMANOID;
- msg = _get_speak_string(prefixes,
- get_mon_shape_str(shape),
- monster);
+ msg = _get_speak_string(prefixes, get_mon_shape_str(shape),
+ monster, no_player, no_foe, no_foe_name,
+ no_god);
}
}
if (msg.empty() || msg == "__NONE")
@@ -514,6 +679,16 @@ bool mons_speaks(const monsters *monster)
return (false);
}
+ if (foe == NULL)
+ msg = replace_all(msg, "__YOU_RESIST", "__NOTHING_HAPPENS");
+ else if (foe->atype() == ACT_MONSTER)
+ {
+ if (you.can_see(foe))
+ msg = replace_all(msg, "__YOU_RESIST", "@The_monster@ resists.");
+ else
+ msg = replace_all(msg, "__YOU_RESIST", "__NOTHING_HAPPENS");
+ }
+
mons_speaks_msg(monster, msg, MSGCH_TALK, silence);
return (true);
} // end mons_speaks = end of routine
diff --git a/crawl-ref/source/religion.cc b/crawl-ref/source/religion.cc
index 661c0a80df..07edc0d82d 100644
--- a/crawl-ref/source/religion.cc
+++ b/crawl-ref/source/religion.cc
@@ -2318,6 +2318,7 @@ void god_speaks(god_type god, const char *mesg)
fake_mon.hit_points = 1;
fake_mon.god = god;
fake_mon.position = you.pos();
+ fake_mon.foe = MHITYOU;
fake_mon.mname = "FAKE GOD MONSTER";
mpr(do_mon_str_replacements(mesg, &fake_mon).c_str(), MSGCH_GOD, god);