diff options
-rw-r--r-- | crawl-ref/docs/monster_speech.txt | 227 | ||||
-rw-r--r-- | crawl-ref/source/dat/shout.txt | 69 | ||||
-rw-r--r-- | crawl-ref/source/dat/speak.txt | 454 | ||||
-rw-r--r-- | crawl-ref/source/debug.cc | 6 | ||||
-rw-r--r-- | crawl-ref/source/message.cc | 4 | ||||
-rw-r--r-- | crawl-ref/source/mon-data.h | 2 | ||||
-rw-r--r-- | crawl-ref/source/mon-util.cc | 8 | ||||
-rw-r--r-- | crawl-ref/source/monspeak.cc | 79 | ||||
-rw-r--r-- | crawl-ref/source/mpr.h | 1 | ||||
-rw-r--r-- | crawl-ref/source/view.cc | 20 |
10 files changed, 597 insertions, 273 deletions
diff --git a/crawl-ref/docs/monster_speech.txt b/crawl-ref/docs/monster_speech.txt new file mode 100644 index 0000000000..27ebc1aae2 --- /dev/null +++ b/crawl-ref/docs/monster_speech.txt @@ -0,0 +1,227 @@ +As of Stone Soup 0.3 the previously hard-coded monster +speech has been outsourced into shout.txt and speak.txt by +Matthew Cline. This makes changing existing messages, or +adding new ones really easy. This file will hopefully help +you in this endeavour. + +shout.txt handles message output for monsters noticing you. +speak.txt handles messages for monsters communicating. + +If you take a look through the two files, you'll see that +all entries have basically the same structure. Let's have a +look at an xample: + +############### +# Friendly imps +############### +%%%% +# Friendly imps are very common so they speak very rarely +friendly '5' + +w:9 +__NONE + +w:1 +@_friendly_imp_@ + +%%%% + + +Now let's have a look at these in more detail: + +# Friendly imps + A '#' sign at the beginning of line means this line will + be ignored, so it's used as a comment. + + +%%%% + The four percentage signs mark beginning and end of a + database entry. If you forget to place these, buggy + monster speech will result. + + +friendly '5' + The first non-comment, non-clear line is interpreted as + the key of an entry. Most keys are hardcoded but there's + place for user defined ones as well. In this case, the key + is "friendly '5'". + + '5' refers to the monster glyph, so the speech will not be + entirely restricted to imps, though they are by far the + most common ones. + On the whole there are three ways the game tries to look + for keys in the database. First the actual monster name is + used, then the monster glyph (with prefix "cap-" for + capital letters), then a a group description (such as + insect or humanoid) defined by the monster's body shape. + The latter is entirely hardcoded, though. + + "friendly" is one of a couple of allowed prefixes, + distinguishing the speech from "hostile" (default). + + These prefixes are optional and tested in the following + order: + + default friendly/hostile fleeing silenced confused monster + + First the database is searched for the whole prefix + string, then reading from left to right the combinations + are tested, beginning at three prefixes and ending at + none, at which time the prefix "default" is used instead. + For the last round (shape comparison, e.g. winged humanoid + etc.) a prefix on intelligence gets added. If in this last + round still nothing has been found, the monster stays + silent. + + +w:9 + After a clear line the actual talk begins. You can skew + the probability of a given message with the weight ('w') + tag. A message will be chosen with a probability of its + weight (defaults to 10 if none set) out of the sum of + weights for this entry. In this case, nine times out of + ten a friendly imp will stay silent. + + +__NONE + Aside from "__NONE" there are a few other hardcoded + markers: + + __NONE : no message + __NEXT : try the next combination of attributes + __MORE : enforce a "-- More --" prompt + __YOU_RESIST : "You resist." + __NOTHING_HAPPENS : "Nothing appears to happen." + + In addition, some more are defined in speak.txt and + shout.txt, such as __RESIST_OR_NOTHING, __SHOUT, and + others. + + +@_friendly_imp_@ + Other variables can be defined in the form of @variable@. + The "@_friendly_imp_@" above is key to another entry in + the database entitled "_friendly_imp_" (without those '@' + signs) that actually has imps talking. Their speech + includes messages such as the following. + + +VISUAL:@The_monster@ grins impishly at you. + +VISUAL:@The_monster@ picks up some beetles from the @surface@ and offers them to you. + + +Again, there have to be clear lines between the different +messages. If messages are placed directly one after another +they will be printed as a block. This can be useful, e.g. +for outputting first a "spell" and then it's (fake) result. + +Monster speech can be greatly customized by the use of +several variables. This example already includes a few. + + +VISUAL: + This optional parameter at the beginning of a string + decides which message channel a string will be passed + through. The list of allowed tags is as follows: + + TALK : MSGCH_TALK (Default value.) + DANGER : MSGCH_DANGER + ENCHANT : MSGCH_ENCHANT + PLAIN : MSGCH_PLAIN + SOUND : MSGCH_SOUND + SPELL : MSGCH_MONSTER_SPELL + VISUAL : MSGCH_TALK_VISUAL + WARN : MSGCH_WARN + + Note that MSGCH_SOUND and MSGCH_TALK get filtered out + when you are silenced. For similar reasons monster speech + of channel SPELL is muted under silence, along with + ENCHANT and WARN, both of which currently only occur in + combination with SPELL. To allow for silent spells along + with fake warnings and enchantments, you can combine these + with VISUAL and enforce output even when silenced. + + VISUAL SPELL : MSGCH_SPELL + VISUAL WARN : MSGCH_WARN + VISUAL ENCHANT : MSGCH_ENCHANT + + Note, though, that these hardly ever take effect as + usually the "silenced humanoid" types take precedence. + Only if no message for the silenced monster type is found + these special VISUAL cases will apply. + For shouts the default is also MSGCH_TALK which is + changed to MSGCH_TALK_VISUAL for monsters that don't + speak, and manually set to MSGCH_SOUND for all those + variants of "You hear a shout!" + + +@The_monster@, @surface@ + Like with @_friendly_imp_@ above, variables have been + defined to allow for greater flexibility. When the speech + code encounters an '@' sign it will first search the + database for a variable of that name and execute the + necessary replacement. Note that recursive replacement of + one variable with another is possible, so try to avoid + loops. The remaining variables it was unable to find in + the database are hardcoded and will be replaced before + output. If you add a new variable make sure to also add a + database entry for it (without those '@' marks around!); + otherwise it won't get replaced and just look weird. + + A variable that you will see all over the place is + @The_monster@ which is hardcoded and will be replaced with + the monster's name. This is particularly useful for groups + of monsters that share the same speech pattern. Another + variable you can see in this example is @surface@ which + will be replaced by whatever the monster is standing on. + +The following variables are hardcoded: + +@the_monster@ : replaced with definite article plus + monster name for non-unique monsters +@Monster@ : as above, but capitalized +@the_monster@ : replaced with monster name +@The_monster@ : replaced with capitalized monster name +@a_monster@ : replaced with indefinite article plus + monster name, if several can exist +@A_monster@ : as above, but capitalized +@Monster@ : replaced with plain monster name +@monster@ : es above, but capitalized + +For friendly monsters an additional "your"/"Your" is +placed before the monster name, respecting capitalization +and grammar (only for the_xxx). + +As an alternative there's also @the_something@, +@The_something@, @a_something@, @A_something@, @something@ +and @Something@, all of which behave like the corresponding +monster definitions above but get replaced by "something" +and "Something", respectively, should the monster be +invisible and the player be unable to see invisible. + +But wait, there's more! + +@player_name@ : replaced by player name + +@surface@ : replaced with whatever the monster stands on +@feature@ : replaced with the monster's square's feature + description + +@pronoun@ : replaced be it, she, he as appropriate +@Pronoun@ : replaced be It, She, He, as appropriate +@possessive@ : replaced by its, her, his as appropriate +@Possessive@ : replaced by Its, Her, His, as appropriate + +@imp_taunt@ : replaced by hardcoded imp type insults +@demon_taunt@ : replaced by hardcoded demon type insults + +Also, @says@ will get replaced with a synonym of 'say' that +fits a monster's (hardcoded) speech pattern and noise level. + +Pre-defined variables in the database include _high_priest_, +_mercenary_guard_, _wizard_, _hostile_adventurer_, +_friendly_imp_, _hostile_imp_, _tormentor_. There are also a +few synonyms defined at the beginning of speak.txt such as +for @ATTACK@, @pointless@, @shouts@, @wails@, @yells@ and +others. diff --git a/crawl-ref/source/dat/shout.txt b/crawl-ref/source/dat/shout.txt index 28dceff0e7..977b32e689 100644 --- a/crawl-ref/source/dat/shout.txt +++ b/crawl-ref/source/dat/shout.txt @@ -1,81 +1,94 @@ +############################################################ +# As of Stone Soup 0.3 the previously hardcoded monster +# speech has been outsourced. This makes changing existing +# messages, and adding new ones really easy. +# +# shout.txt holds the utterances (and visual equivalents) of +# monsters that notice you. +# +# For an explanation of how to read shout.txt and speak.txt +# and how to add new messages, see monster_speech.txt in the +# docs directory. +############################################################ %%%% __BUGGY # This line should never get displayed to the user, even if -# handle_monster_shouts() in view.cc detects buggy behavior, so -# showing this line would itself be a bug. -You hear doubly buggy behavior! +# handle_monster_shouts() in view.cc detects buggy behavior, +# so showing this line would itself be a bug. +SOUND:You hear doubly buggy behavior! %%%% __SHOUT -You hear a shout! +SOUND:You hear a shout! %%%% __BARK -You hear a bark! +SOUND:You hear a bark! %%%% __TWO_SHOUTS -You hear two shouts! +SOUND:You hear two shouts! %%%% __ROAR -You hear a roar! +SOUND:You hear a roar! %%%% __SCREAM -You hear a hideous shriek! +SOUND:You hear a hideous shriek! %%%% __BELLOW -You hear a bellow! +SOUND:You hear a bellow! %%%% __SCREECH -You hear a screech! +SOUND:You hear a screech! %%%% __BUZZ -You hear an angry buzzing noise. +SOUND:You hear an angry buzzing noise. %%%% __MOAN -You hear a chilling moan. +SOUND:You hear a chilling moan. %%%% __WHINE -You hear an irritating high-pitched whine. +SOUND:You hear an irritating high-pitched whine. %%%% __CROAK -You hear a loud, deep croak! +SOUND:You hear a loud, deep croak! -You hear a croak. +SOUND:You hear a croak. %%%% __GROWL -You hear an angry growl. +SOUND:You hear an angry growl. %%%% __HISS -You hear an angry hiss. +SOUND:You hear an angry hiss. %%%% __DEMON_TAUNT @The_monster@ @says@: @demon_taunt@ -#################################################################### +############################################ # End of default shouts -#################################################################### +############################################ -#################################################################### -# Player ghost shouts. Potentially different ones for each class, -# though currently they all just copy the default player ghost. -#################################################################### +############################################################ +# Player ghost shouts. Potentially different ones for each +# class, though currently they all just copy the default +# player ghost. +############################################################ %%%% player ghost -@The_monster@ turns @possessive@ malevolent gaze towards you. +VISUAL:@The_monster@ turns @possessive@ malevolent gaze towards you. %%%% Fighter player ghost @@ -189,9 +202,9 @@ Wanderer player ghost @player ghost@ -###################################################################### +######################################## # Shouts by monster symbol -###################################################################### +######################################## %%%% '&' @@ -222,9 +235,9 @@ Wanderer player ghost 'r' @The_monster@ angrily lashes @possessive@ tail. -###################################################################### +######################################## # Shouts for specific monsters -###################################################################### +######################################## %%%% # The giant spore has no eyes, so it can't gaze at the player like the # other 'G' monsters. diff --git a/crawl-ref/source/dat/speak.txt b/crawl-ref/source/dat/speak.txt index e1be5ab2fa..d58da9d2d6 100644 --- a/crawl-ref/source/dat/speak.txt +++ b/crawl-ref/source/dat/speak.txt @@ -1,8 +1,22 @@ -################################################################## -# Library of randomized word/phrase substitutions. (The keys will -# have to be changed in the unlikely event that monsters are ever -# given names like "yells" or "begs".) -##################################################################%%%% +############################################################ +# As of Stone Soup 0.3 the previously hardcoded monster +# speech has been outsourced. This makes changing existing +# messages, and adding new ones really easy. +# +# speak.txt contains the messages of monsters that "talk" +# to the player, or at least the biggest part there-of. +# +# For an explanation of how to read shout.txt and speak.txt +# and how to add new messages, see monster_speech.txt in the +# docs directory +############################################################ + +############################################################ +# Library of randomized word/phrase substitutions. (The keys +# will have to be changed in the unlikely event that +# monsters are ever given names like "yells" or "begs".) +############################################################ +%%%% __RESIST_OR_NOTHING __YOU_RESIST @@ -31,6 +45,17 @@ cries screams %%%% +# for ghosts +wails + +wails + +shouts + +says + +screams +%%%% begs begs @@ -87,10 +112,10 @@ ploy trick -###################################################################### -# Library of speeches for types of monsters, like priests, wizards, -# guards and so on. -###################################################################### +############################################################ +# Library of speeches for types of monsters, like priests, +# wizards, guards and so on. +############################################################ %%%% _high_priest_ @@ -100,7 +125,7 @@ SPELL:@The_monster@ mumbles some strange prayers. SPELL:@The_monster@ intones a terrible prayer. -@The_monster@ looks excited. +VISUAL:@The_monster@ looks excited. @The_monster@ starts to sing a prayer. @@ -119,11 +144,11 @@ SPELL:@The_monster@ intones a terrible prayer. %%%% _mercenary_guard_ -@The_monster@ looks very unfriendly. +VISUAL:@The_monster@ looks very unfriendly. -@The_monster@ looks very cold. +VISUAL:@The_monster@ looks very cold. -@The_monster@ grins evilly. +VISUAL:@The_monster@ grins evilly. @The_monster@ says, "Now you've reached the end of your journey." @@ -179,7 +204,7 @@ ENCHANT:@possessive@ fingertips start to glow. SPELL:@The_monster@ casts a spell. __YOU_RESIST -SPELL:@The_monster@ throws some strange powder towards you. +VISUAL SPELL:@The_monster@ throws some strange powder towards you. SPELL:@The_monster@ says, "Argatax netranoch dertex." @@ -187,9 +212,9 @@ SPELL:@The_monster@ says, "Dogrw nutew berg." SPELL:@The_monster@ shouts, "Entram moth deg ulag!" -SPELL:@The_monster@'s eyes start to glow. +VISUAL SPELL:@The_monster@'s eyes start to glow. -SPELL:@The_monster@ tries to paralyze you with @possessive@ gaze. +VISUAL SPELL:@The_monster@ tries to paralyze you with @possessive@ gaze. @The_monster@ shouts, "You can't withstand my power!" @@ -198,9 +223,9 @@ SPELL:@The_monster@ tries to paralyze you with @possessive@ gaze. %%%% _hostile_adventurer_ -@The_monster@ frowns. +VISUAL:@The_monster@ frowns. -@The_monster@ looks very upset. +VISUAL:@The_monster@ looks very upset. @The_monster@ screams, "Return home!" @@ -218,18 +243,18 @@ _hostile_adventurer_ @The_monster@ screams, "First you have to pass me!" -@The_monster@ scream, "I hate you!" +@The_monster@ screams, "I hate you!" ## END _hostile_adventurer_ ## %%%% _friendly_imp_ -@The_monster@ jumps up and down with excitement. +VISUAL:@The_monster@ jumps up and down with excitement. -@The_monster@ grins impishly at you. +VISUAL:@The_monster@ grins impishly at you. -@The_monster@ picks up some beetles from the @surface@ and offers them to you. +VISUAL:@The_monster@ picks up some beetles from the @surface@ and offers them to you. -@The_monster@ blows smoke rings. +VISUAL:@The_monster@ blows smoke rings. @The_monster@ says, "Just tell me who NOT to kill." @@ -252,25 +277,25 @@ _hostile_imp_ @The_monster@ laughs crazily. -@The_monster@ grins evilly. +VISUAL:@The_monster@ grins evilly. -@The_monster@ breathes smoke at you. +VISUAL:@The_monster@ breathes smoke at you. -@The_monster@ lashes his tail. +VISUAL:@The_monster@ lashes his tail. -@The_monster@ grinds his teeth. +VISUAL:@The_monster@ grinds his teeth. @The_monster@ sputters. -@The_monster@ breathes steam at you. +VISUAL:@The_monster@ breathes steam at you. -@The_monster@ spits at you. +VISUAL:@The_monster@ spits at you. -@The_monster@ disappears for a moment. +VISUAL:@The_monster@ disappears for a moment. -@The_monster@ summons a swarm of flies. +VISUAL:@The_monster@ summons a swarm of flies. -@The_monster@ picks up a beetle and eats it. +VISUAL:@The_monster@ picks up a beetle and eats it. ## END _hostile_imp_ ## %%%% _demon_taunt_ @@ -280,9 +305,9 @@ _demon_taunt_ _imp_taunt_ @The_monster@ @says@: @imp_taunt@ -################################################################ +########################################## # Messages by monster body shape -################################################################ +########################################## %%%% default stupid friendly humanoid @@ -303,66 +328,67 @@ __NONE default silenced confused humanoid w:40 -@The_monster@ gestures wildly. +VISUAL:@The_monster@ gestures wildly. w:20 -@The_monster@ says something but you don't hear anything. -@The_monster@ looks confused. +VISUAL:@The_monster@ says something but you don't hear anything. + +VISUAL:@The_monster@ looks confused. -@The_monster@ grins evilly. +VISUAL:@The_monster@ grins evilly. -@The_monster@ smiles happily. +VISUAL:@The_monster@ smiles happily. -@The_monster@ cries. +VISUAL:@The_monster@ cries. ## END silenced confused humanoid ## %%%% default fleeing silenced humanoid w:30 -@The_monster@ glances furtively about. +VISUAL:@The_monster@ glances furtively about. w:30 -@The_monster@ seems to say something. +VISUAL:@The_monster@ seems to say something. -@The_monster@ opens @possessive@ mouth, as if shouting. +VISUAL:@The_monster@ opens @possessive@ mouth, as if shouting. -@The_monster@ looks around. +VISUAL:@The_monster@ looks around. -@The_monster@ ponders the situation. +VISUAL:@The_monster@ ponders the situation. ## END fleeing silenced humanoid ## %%%% default friendly silenced humanoid w:30 -@The_monster@ gives you a thumbs up. +VISUAL:@The_monster@ gives you the thumbs up. w:30 -@The_monster@ says something you can't hear. +VISUAL:@The_monster@ says something you can't hear. -@The_monster@ looks at you. +VISUAL:@The_monster@ looks at you. -@The_monster@ waves at you. +VISUAL:@The_monster@ waves at you. -@The_monster@ smiles happily. +VISUAL:@The_monster@ smiles happily. -@The_monster@ winks at you. +VISUAL:@The_monster@ winks at you. ## END friendly silenced humanoid ## %%%% default silenced humanoid w:30 -@The_monster@ says something but you don't hear anything. +VISUAL:@The_monster@ says something but you don't hear anything. w:30 -@The_monster@ gestures. +VISUAL:@The_monster@ gestures. -@The_monster@ gestures obscenely. +VISUAL:@The_monster@ gestures obscenely. -@The_monster@ grins. +VISUAL:@The_monster@ grins. -@The_monster@ looks angry. +VISUAL:@The_monster@ looks angry. -@The_monster@ seems to be listening. +VISUAL:@The_monster@ seems to be listening. ## END silenced humanoid ## %%%% default friendly confused humanoid @@ -375,7 +401,7 @@ default friendly confused humanoid @The_monster@ shouts, "What's happening?!" -@The_monster@ cries. +VISUAL:@The_monster@ cries. @The_monster@ shouts, "Yeah!" @@ -383,11 +409,11 @@ default friendly confused humanoid @The_monster@ laughs crazily. -@The_monster@ ponders the situation. +VISUAL:@The_monster@ ponders the situation. -@The_monster@ grins madly. +VISUAL:@The_monster@ grins madly. -@The_monster@ looks very confused. +VISUAL:@The_monster@ looks very confused. @The_monster@ mumbles something. @@ -403,7 +429,7 @@ default friendly confused humanoid default confused humanoid w:30 -@The_monster@ gestures wildly. +VISUAL:@The_monster@ gestures wildly. @The_monster@ yells, "Get them off me!" @@ -411,7 +437,7 @@ w:30 @The_monster@ shouts, "What's happening?!" -@The_monster@ cries. +VISUAL:@The_monster@ cries. @The_monster@ shouts, "NO!" @@ -419,11 +445,11 @@ w:30 @The_monster@ laughs crazily. -@The_monster@ ponders the situation. +VISUAL:@The_monster@ ponders the situation. -@The_monster@ grins madly. +VISUAL:@The_monster@ grins madly. -@The_monster@ looks very confused. +VISUAL:@The_monster@ looks very confused. @The_monster@ mumbles something. @@ -431,7 +457,7 @@ w:30 @The_monster@ asks, "Where am I?" -@The_monster@ shakes. +VISUAL:@The_monster@ shakes. @The_monster@ asks, "Who are you?" @@ -443,15 +469,15 @@ w:30 @The_monster@ screams, "NO! I can't bear this much noise." -@The_monster@ covers @possessive@ eyes. +VISUAL:@The_monster@ covers @possessive@ eyes. ## END confused humanoid ## %%%% default friendly fleeing humanoid w:30 -@The_monster@ tries to hide somewhere. +VISUAL:@The_monster@ tries to hide somewhere. -@The_monster@ @shouts@, "WAIT FOR ME, @your_nam@! Could you help me?" +@The_monster@ @shouts@, "WAIT FOR ME, @player_name@! Could you help me?" @The_monster@ screams, "Help!" @@ -469,7 +495,7 @@ w:30 default fleeing humanoid w:30 -@The_monster@ gives up. +VISUAL:@The_monster@ gives up. w:20 @The_monster@ @yells@, "Help!" @@ -477,7 +503,7 @@ w:20 @The_monster@ @begs@, "Why can't we all just get along?" # This one won't work for nagas. -@The_monster@ @almost@ stumbles in trying to escape. +VISUAL:@The_monster@ @almost@ stumbles in trying to escape. @The_monster@ @mutters@, "Of all the rotten luck!" @@ -499,9 +525,9 @@ w:20 @The_monster@ @begs@, "Please! I have a lot of children..." -@The_monster@ tries to recover @possessive@ lost courage. +VISUAL:@The_monster@ tries to recover @possessive@ lost courage. -@The_monster@ looks really @rattled@. +VISUAL:@The_monster@ looks really @rattled@. ## END fleeing humanoid ## %%%% default friendly humanoid @@ -512,21 +538,21 @@ default friendly humanoid @The_monster@ says, "It's nice to have friends." -@The_monster@ looks at you. +VISUAL:@The_monster@ looks at you. -@The_monster@ smiles at you. +VISUAL:@The_monster@ smiles at you. @The_monster@ says, "@player_name@, you are my only friend." @The_monster@ says, "@player_name@, I like you." -@The_monster@ waves at you. +VISUAL:@The_monster@ waves at you. @The_monster@ says, "Be careful!" @The_monster@ says, "Don't worry. I'm here with you." -@The_monster@ smiles happily. +VISUAL:@The_monster@ smiles happily. @The_monster@ shouts, "No mercy! Kill them all!" @@ -536,61 +562,63 @@ default friendly humanoid @The_monster@ shouts, "Beware of monsters!" -@The_monster@ looks friendly. +VISUAL:@The_monster@ looks friendly. ## END friendly humanoid ## %%%% default insect -@The_monster@ waves @possessive@ antennas. +VISUAL:@The_monster@ waves @possessive@ antennas. %%%% default confused insect -@The_monster@ wildly waves @possessive@ antennas. +VISUAL:@The_monster@ wildly waves @possessive@ antennas. -@The_monster@ seems to be having trouble coordinating all six of @possessive@ legs. +VISUAL:@The_monster@ seems to be having trouble coordinating all six of @possessive@ legs. %%%% default confused winged insect -@The_monster@ wildly waves @possessive@ antennas. +VISUAL:@The_monster@ wildly waves @possessive@ antennas. -@The_monster@ wobbles in @possessive@ flight. +VISUAL:@The_monster@ wobbles in @possessive@ flight. %%%% default confused arachnid -@The_monster@ seems to be having trouble coordinating all eight of @possessive@ legs. +VISUAL:@The_monster@ seems to be having trouble coordinating all eight of @possessive@ legs. %%%% centipede -@The_monster@ waves its antennas. +VISUAL:@The_monster@ waves its antennas. %%%% default confused centipede -@The_monster@ seems to be having trouble coordinating @possessive@ many legs. +VISUAL:@The_monster@ seems to be having trouble coordinating @possessive@ many legs. -@The_monster@ wildly waves @possessive@ antennas. +VISUAL:@The_monster@ wildly waves @possessive@ antennas. -####################################################################### Speech strings by monster symbol -######################################################################%%%% +######################################### +# Speech strings by monster symbol +######################################### +%%%% default confused 'b' -@The_monster@ flutters around in erratic circles. +VISUAL:@The_monster@ flutters around in erratic circles. %%%% default 'cap-G' -@The_monster@ pulsates ominously. +VISUAL:@The_monster@ pulsates ominously. %%%% default 'cap-J' -@The_monster@ jiggles. +VISUAL:@The_monster@ jiggles. %%%% default confused 'k' -@The_monster@ buzzes around in tight circles. +SOUND:@The_monster@ buzzes around in tight circles. %%%% default silenced confused 'k' -@The_monster@ flies around in tight circles. +VISUAL:@The_monster@ flies around in tight circles. %%%% 'l' @@ -598,16 +626,16 @@ default silenced confused 'k' %%%% 'r' -@The_monster@ twitches @possessive@ whiskers. +VISUAL:@The_monster@ twitches @possessive@ whiskers. %%%% default confused 'r' -@The_monster@ runs around in a circle. +VISUAL:@The_monster@ runs around in a circle. %%%% # Excluding the moth of wrath, which being a moth doesn't buzz. default confused 'y' -@The_monster@ buzzes around in tight circles. +SOUND:@The_monster@ buzzes around in tight circles. %%%% # Statues and golems never speak unless assigned a message to their # specific species. @@ -680,9 +708,13 @@ __NONE w:1 @_friendly_imp_@ -##################################################################### Player ghost phrases. Ghosts with different classes can be given +%%%% + +#################################################################### +# Player ghost phrases. Ghosts with different classes can be given # different messages. -####################################################################%%%% +#################################################################### +%%%% # Only use messages that are explicitly for the player ghost, since # other messages might seem weird coming out of it. default player ghost @@ -691,12 +723,12 @@ __NONE %%%% silenced player ghost -SPELL:@The_monster@ stares at you. -WARN:You feel cold. +VISUAL SPELL:@The_monster@ stares at you. +VISUAL WARN:You feel cold. -@The_monster@ points at you threateningly. +VISUAL:@The_monster@ points at you threateningly. -@The_monster@ stares at you while slowly dragging a finger across @possessive@ throat. +VISUAL:@The_monster@ stares at you while slowly dragging a finger across @possessive@ throat. ## END silenced player ghost ## %%%% player ghost @@ -710,7 +742,7 @@ WARN:You feel cold. @The_monster@ laughs crazily. -@The_monster@ grins evilly. +VISUAL:@The_monster@ grins evilly. @The_monster@ makes a sound of rattling chains. @@ -718,34 +750,34 @@ WARN:You feel cold. # mv: ghosts are usually wailing instead of speaking normally, # aren't they? -@The_monster@ says, "I have seen your future, and it is all used up." +@The_monster@ @wails@, "I have seen your future, and it is all used up." -@The_monster@ says, "They lied to you. The Dungeon just goes down and down forever." +@The_monster@ @wails@, "They lied to you. The Dungeon just goes down and down forever." -@The_monster@ says, "Do you think the gods will protect you?" +@The_monster@ @wails@, "Do you think the gods will protect you?" -@The_monster@ says "I was like you once." +@The_monster@ @wails@, "I was like you once." -@The_monster@ says, "Very impressive. But it won't help. Nothing will." +@The_monster@ @wails@, "Very impressive. But it won't help. Nothing will." -@The_monster@ says, "What have you got that I didn't have?" +@The_monster@ @wails@, "What have you got that I didn't have?" @The_monster@ says very slowly, "There's no hope." -@The_monster@ shouts, "You will never get the ORB!" +@The_monster@ @wails@, "You will never get the ORB!" -@The_monster@ screams, "You must not succeed where I failed!" +@The_monster@ @wails@, "You must not succeed where I failed!" @The_monster@ screams, "I'll kill anyone who wants the ORB!" @The_monster@ screams, "Don't try to defend! You have no chance!" -@The_monster@ screams, "You will join me soon!" +@The_monster@ @wails@, "You will join me soon!" # Hamlet @The_monster@ wails, "To die, to sleep, no more." -@The_monster@ wails, "Death is your only future!" +@The_monster@ @wails@, "Death is your only future!" @The_monster@ whispers, "They're coming for you..." @@ -762,12 +794,14 @@ WARN:You feel cold. @The_monster@ whispers, "The ORB doesn't exist." ## END player ghost ## -####################################################################### Unique monsters -######################################################################%%%% +####################################### +# Unique monsters +####################################### +%%%% # She is trying to get money and treasure Agnes -@The_monster@ grins evilly. +VISUAL:@The_monster@ grins evilly. @The_monster@ says, "I need a new robe. I'll buy it with your money." @@ -790,11 +824,11 @@ Agnes %%%% Blork the orc -@The_monster@ grins evilly. +VISUAL:@The_monster@ grins evilly. -@The_monster@ frowns. +VISUAL:@The_monster@ frowns. -@The_monster@ looks angry. +VISUAL:@The_monster@ looks angry. @The_monster@ screams, "I don't like you!" @@ -828,14 +862,14 @@ Blork the orc # An ancient lich Boris -SPELL:@The_monster@ stares at you. -WARN:You feel drained. +VISUAL SPELL:@The_monster@ stares at you. +VISUAL WARN:You feel drained. -SPELL:@The_monster@ stares at you. -WARN:You feel weakened. +VISUAL SPELL:@The_monster@ stares at you. +VISUAL WARN:You feel weakened. -SPELL:@The_monster@ stares at you. -WARN:You feel troubled.", MSGCH_WARN +VISUAL SPELL:@The_monster@ stares at you. +VISUAL WARN:You feel troubled. SPELL:@The_monster@ casts a spell. WARN:Your equipment suddenly seems to weigh more. @@ -852,7 +886,7 @@ WARN:You have a terrible headache. SPELL:@The_monster@ casts a spell. ENCHANT:@The_monster@ speeds up. -SPELL:@The_monster@ gestures. +VISUAL SPELL:@The_monster@ gestures. @The_monster@ laughs. @@ -903,9 +937,9 @@ Edmund # A wild tempered adventuress Erica -@The_monster@ looks angry. +VISUAL:@The_monster@ looks angry. -@The_monster@ drinks a potion. +VISUAL:@The_monster@ drinks a potion. @The_monster@ laughs wildly. @@ -935,7 +969,7 @@ Erolcha @The_monster@ growls. -@The_monster@ tries to grin evilly. +VISUAL:@The_monster@ tries to grin evilly. @The_monster@ screams, "Eat!" @@ -965,11 +999,11 @@ Francis SPELL:@The_monster@ casts a spell. ENCHANT:@The_monster@'s hands start to glow with a soft light. -@The_monster@ ponders the situation. +VISUAL:@The_monster@ ponders the situation. -@The_monster@ looks for a scalpel. +VISUAL:@The_monster@ looks for a scalpel. -@The_monster@ throws something at you. +VISUAL:@The_monster@ throws something at you. @The_monster@ asks, "Did you know that corpses are an important natural resource?" @@ -1002,7 +1036,7 @@ Frederick # A twisted goblin Ijyb -@The_monster@ grins evilly. +VISUAL:@The_monster@ grins evilly. @The_monster@ screams, "Die!" @@ -1032,7 +1066,7 @@ Ijyb # A middle aged man, hired to kill you. He is in a hurry. Harold -@The_monster@ looks nervous. +VISUAL:@The_monster@ looks nervous. @The_monster@ says, "Stand still. I'm trying to kill you." @@ -1058,9 +1092,9 @@ Harold # A sorceress disturbed by player Jessica -@The_monster@ grins evilly. +VISUAL:@The_monster@ grins evilly. -@The_monster@ looks very angry. +VISUAL:@The_monster@ looks very angry. @The_monster@ says, "I'm really upset." @@ -1081,9 +1115,9 @@ SPELL:@The_monster@ gestures wildly. %%%% Joseph -@The_monster@ smiles happily. +VISUAL:@The_monster@ smiles happily. -@The_monster@ tries to grin evilly. +VISUAL:@The_monster@ tries to grin evilly. @The_monster@ says, "I'm happy to see you. And I'll be happy to kill you." @@ -1109,11 +1143,11 @@ Joseph # An ugly old witch looking for someone to kill Josephine -@The_monster@ grins evilly. +VISUAL:@The_monster@ grins evilly. -@The_monster@ grins malevolently. +VISUAL:@The_monster@ grins malevolently. -@The_monster@ grinds her teeth. +VISUAL:@The_monster@ grinds her teeth. @The_monster@ laughs insanely. @@ -1131,7 +1165,7 @@ Josephine # A bounty hunter Jozef -@The_monster@ looks satisfied. +VISUAL:@The_monster@ looks satisfied. @The_monster@ asks, "Did you write a testament? You should." @@ -1163,7 +1197,7 @@ Jozef # A powerful sorceress, guarding the ORB Margery -SPELL:@The_monster@ gestures. +VISUAL SPELL:@The_monster@ gestures. SPELL:@The_monster@ casts a spell. ENCHANT:@The_monster@ is surrounded with an aura of power. @@ -1177,22 +1211,22 @@ ENCHANT:@The_monster@'s hands start to glow. SPELL:@The_monster@ screams, "Ergichanteg reztahaw!" WARN:You feel really bad. -SPELL:@The_monster@ gestures. -WARN:You feel doomed. +VISUAL SPELL:@The_monster@ gestures. +VISUAL WARN:You feel doomed. -SPELL:@The_monster@ gestures. -WARN:You feel weakened. +VISUAL SPELL:@The_monster@ gestures. +VISUAL WARN:You feel weakened. -SPELL:@The_monster@ throws some purple powder towards you. -WARN:You feel cursed. +VISUAL SPELL:@The_monster@ throws some purple powder towards you. +VISUAL WARN:You feel cursed. -@The_monster@'s eyes start to glow with a red light. +VISUAL SPELL:@The_monster@'s eyes start to glow with a red light. -@The_monster@'s eyes start to glow with a green light. +VISUAL SPELL:@The_monster@'s eyes start to glow with a green light. -@The_monster@'s eyes start to glow with a blue light. +VISUAL SPELL:@The_monster@'s eyes start to glow with a blue light. -@The_monster@ looks very self-confident. +VISUAL:@The_monster@ looks very self-confident. @The_monster@ says, "You are dead." @@ -1223,9 +1257,9 @@ Louise # A warrior princess looking for the sword "Entarex". Maud -@The_monster@ frowns. +VISUAL:@The_monster@ frowns. -@The_monster@ looks upset. +VISUAL:@The_monster@ looks upset. @The_monster@ asks, "Will you think of me as you die?" @@ -1253,18 +1287,18 @@ SPELL:@The_monster@ mumbles some strange words. SPELL:@The_monster@ gestures wildly. -SPELL:@The_monster@ points at you. -__YOU_RESIST +VISUAL SPELL:@The_monster@ points at you. +VISUAL:__YOU_RESIST -@The_monster@ drinks a potion. +VISUAL:@The_monster@ drinks a potion. -@The_monster@ looks very angry. +VISUAL:@The_monster@ looks very angry. -@The_monster@ frowns. +VISUAL:@The_monster@ frowns. -@The_monster@ looks angry. +VISUAL:@The_monster@ looks angry. -@The_monster@ shakes with wrath. +VISUAL:@The_monster@ shakes with wrath. @The_monster@ says, "You really are a nuisance." @@ -1275,13 +1309,13 @@ __YOU_RESIST # A disembodied skull. Murray -@The_monster@ rolls in a circle. +VISUAL:@The_monster@ rolls in a circle. -@The_monster@ rolls around. +VISUAL:@The_monster@ rolls around. -@The_monster@ spins like a top. +VISUAL:@The_monster@ spins like a top. -@The_monster@ grins evilly. +VISUAL:@The_monster@ grins evilly. @The_monster@ laughs evilly. @@ -1306,23 +1340,23 @@ Murray %%%% silenced Murray -@The_monster@ rolls in a circle. +VISUAL:@The_monster@ rolls in a circle. -@The_monster@ rolls around. +VISUAL:@The_monster@ rolls around. -@The_monster@ spins like a top. +VISUAL:@The_monster@ spins like a top. -@The_monster@ grins evilly. +VISUAL:@The_monster@ grins evilly. -@The_monster@ seems to say something. +VISUAL:@The_monster@ seems to say something. -@The_monster@ says something you can't hear. It was probably not a compliment. +VISUAL:@The_monster@ says something you can't hear. It was probably not a compliment. ## END silenced Murray ## %%%% # A skilled warrior looking for some fame. More kills = more fame. Norbert -@The_monster@ smiles happily. +VISUAL:@The_monster@ smiles happily. @The_monster@ asks, "Did you write a will? You should." @@ -1356,13 +1390,13 @@ Norris SPELL:@The_monster@ mumbles some mantras. -@The_monster@ is surrounded with aura of peace. +VISUAL:@The_monster@ is surrounded with aura of peace. -@The_monster@ looks very balanced. +VISUAL:@The_monster@ looks very balanced. -@The_monster@ smiles at you. +VISUAL:@The_monster@ smiles at you. -@The_monster@ looks relaxed. +VISUAL:@The_monster@ looks relaxed. @The_monster@ sings "Hare Rama, Hare Krishna!" @@ -1406,21 +1440,21 @@ SPELL:@The_monster@ mumbles some mantras. # An insane sorceress Psyche -@The_monster@ smiles happily. +VISUAL:@The_monster@ smiles happily. @The_monster@ giggles crazily. -@The_monster@ cries. +VISUAL:@The_monster@ cries. -@The_monster@ stares at you for a moment. +VISUAL:@The_monster@ stares at you for a moment. @The_monster@ sings. @The_monster@ sings a strange song. -@The_monster@ bursts into tears. +VISUAL:@The_monster@ bursts into tears. -@The_monster@ sucks her thumb. +VISUAL:@The_monster@ sucks her thumb. @The_monster@ says, "Please, could you die a little faster?" @@ -1449,9 +1483,9 @@ Psyche # A crazy adventurer Rupert -@The_monster@ looks excited. +VISUAL:@The_monster@ looks excited. -@The_monster@ looks confused. +VISUAL:@The_monster@ looks confused. @The_monster@ asks, "You're a monster, aren't you?" @@ -1478,9 +1512,9 @@ Sigmund w:30 @The_monster@ laughs crazily. -@The_monster@ grinds his teeth. +VISUAL:@The_monster@ grinds his teeth. -@The_monster@ tries to bite you. +VISUAL:@The_monster@ tries to bite you. @The_monster@ asks, "Do you like me?" @@ -1517,9 +1551,9 @@ ENCHANT:@The_monster@ is suddenly surrounded by pale green light. # A fighter who likes to kill Terence -@The_monster@ looks scornfully at you. +VISUAL:@The_monster@ looks scornfully at you. -@The_monster@ bares @possessive@ teeth. +VISUAL:@The_monster@ bares @possessive@ teeth. @The_monster@ asks, "Do you want it fast or slow?" @@ -1551,7 +1585,7 @@ Terence # An orc hired to kill you Urug -@The_monster@ grins evilly. +VISUAL:@The_monster@ grins evilly. @The_monster@ roars. @@ -1582,7 +1616,7 @@ Wayne # An ancient dragon Xtahua -@The_monster@ glares at you. +VISUAL:@The_monster@ glares at you. @The_monster@ growls, "YOU BORE ME SO." @@ -1606,11 +1640,13 @@ Xtahua You are afraid. ## END Xtahua ## -####################################################################### Specific non-unique monsters -######################################################################%%%% +########################################## +# Specific non-unique monsters +########################################## +%%%% crystal golem -@The_monster@ glitters in the dim dungeon light. +VISUAL:@The_monster@ glitters in the dim dungeon light. %%%% death cob @@ -1630,11 +1666,11 @@ deep elf sorcerer %%%% default electric golem -@The_monster@ crackles and sizzles. +SOUND:@The_monster@ crackles and sizzles. %%%% default ice statue -@The_monster@ glitters in the dim dungeon light. +VISUAL:@The_monster@ glitters in the dim dungeon light. %%%% imp @@ -1656,19 +1692,19 @@ Killer Klown @The_monster@ laughs merrily. -@The_monster@ beckons to you. +VISUAL:@The_monster@ beckons to you. -@The_monster@ does a flip. +VISUAL:@The_monster@ does a flip. -@The_monster@ does a somersault. +VISUAL:@The_monster@ does a somersault. -@The_monster@ smiles at you. +VISUAL:@The_monster@ smiles at you. -@The_monster@ grins with merry abandon. +VISUAL:@The_monster@ grins with merry abandon. @The_monster@ howls with blood-lust! -@The_monster@ pokes out @possessive@ tongue. +VISUAL:@The_monster@ pokes out @possessive@ tongue. @The_monster@ says, "Come and play with me!" ## END Killer Klown ## @@ -1677,11 +1713,11 @@ Killer Klown # with it being a moth. default confused moth of wrath -@The_monster@ flutters around in erratic circles. +VISUAL:@The_monster@ flutters around in erratic circles. %%%% default orange crystal statue -@The_monster@ glitters in the dim dungeon light. +VISUAL:@The_monster@ glitters in the dim dungeon light. %%%% orc sorcerer @@ -1701,7 +1737,7 @@ sheep %%%% default silver statue -@The_monster@ glitters in the dim dungeon light. +VISUAL:@The_monster@ glitters in the dim dungeon light. %%%% # A cruel demon tormentor @@ -1719,11 +1755,11 @@ w:20 @The_monster@ laughs crazily. -@The_monster@ grins evilly. +VISUAL:@The_monster@ grins evilly. -@The_monster@ grins madly. +VISUAL:@The_monster@ grins madly. -@The_monster@ grins malevolently. +VISUAL:@The_monster@ grins malevolently. @The_monster@ says, "I am all your nightmares come true." diff --git a/crawl-ref/source/debug.cc b/crawl-ref/source/debug.cc index b63df4d115..bdf319fca9 100644 --- a/crawl-ref/source/debug.cc +++ b/crawl-ref/source/debug.cc @@ -2580,10 +2580,10 @@ void debug_make_monster_shout(monsters* mon) if (type == 's') { - if (silenced(mon->x, mon->y)) - mpr("The monster is silenced and likely won't give any shouts."); if (silenced(you.x_pos, you.y_pos)) mpr("You are silenced and likely won't hear any shouts."); + else if (silenced(mon->x, mon->y)) + mpr("The monster is silenced and likely won't give any shouts."); for (int i = 0; i < num_times; i++) force_monster_shout(mon); @@ -2591,7 +2591,7 @@ void debug_make_monster_shout(monsters* mon) else { if (mon->invisible()) - mpr("The monster is invisble and likely won't speak."); + mpr("The monster is invisible and likely won't speak."); if (silenced(you.x_pos, you.y_pos) && !silenced(mon->x, mon->y)) mpr("You are silenced but the monster isn't; you will " diff --git a/crawl-ref/source/message.cc b/crawl-ref/source/message.cc index 49a92b0f9d..c09c1056b1 100644 --- a/crawl-ref/source/message.cc +++ b/crawl-ref/source/message.cc @@ -273,6 +273,7 @@ int channel_to_colour( msg_channel_type channel, int param ) break; case MSGCH_TALK: + case MSGCH_TALK_VISUAL: ret = WHITE; break; @@ -485,7 +486,8 @@ static void mpr_check_patterns(const std::string& message, // reusing travel_stop_message here if (channel != MSGCH_DIAGNOSTICS && channel != MSGCH_EQUIPMENT - && channel != MSGCH_SOUND && channel != MSGCH_TALK) + && channel != MSGCH_TALK && channel != MSGCH_TALK_VISUAL + && channel != MSGCH_SOUND) { interrupt_activity( AI_MESSAGE, channel_to_str(channel) + ":" + message ); } diff --git a/crawl-ref/source/mon-data.h b/crawl-ref/source/mon-data.h index fc70f66c00..0340f2aaa1 100644 --- a/crawl-ref/source/mon-data.h +++ b/crawl-ref/source/mon-data.h @@ -4080,7 +4080,7 @@ 0, 15, MONS_PHANTOM, MONS_PLAYER_GHOST, MH_UNDEAD, -5, { {AT_HIT, AF_PLAIN, 5}, {AT_NONE, AF_PLAIN, 0}, {AT_NONE, AF_PLAIN, 0}, {AT_NONE, AF_PLAIN, 0} }, { 4, 2, 3, 0 }, - 1, 2, 10, 7, MST_GHOST, CE_CONTAMINATED, Z_NOZOMBIE, S_SILENT, I_HIGH, + 1, 2, 10, 7, MST_GHOST, CE_CONTAMINATED, Z_NOZOMBIE, S_SHOUT, I_HIGH, MONUSE_OPEN_DOORS, SIZE_MEDIUM } , diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc index fd097c2963..d773f0032d 100644 --- a/crawl-ref/source/mon-util.cc +++ b/crawl-ref/source/mon-util.cc @@ -4860,10 +4860,14 @@ std::string do_mon_str_replacements(const std::string in_msg, msg = replace_all(msg, "@A_monster@", monster->name(DESC_CAP_A)); msg = replace_all(msg, "@The_monster@", monster->name(cap)); - msg = replace_all(msg, "@possessive@", - mons_pronoun(monster->type, 3)); msg = replace_all(msg, "@pronoun@", mons_pronoun(monster->type, 0)); + msg = replace_all(msg, "@pronoun@", + mons_pronoun(monster->type, 1)); + msg = replace_all(msg, "@Possessive@", + mons_pronoun(monster->type, 2)); + msg = replace_all(msg, "@possessive@", + mons_pronoun(monster->type, 3)); msg = replace_all(msg, "@imp_taunt@", imp_taunt_str()); msg = replace_all(msg, "@demon_taunt@", demon_taunt_str()); diff --git a/crawl-ref/source/monspeak.cc b/crawl-ref/source/monspeak.cc index 04da8f22fe..f1230a6fbd 100644 --- a/crawl-ref/source/monspeak.cc +++ b/crawl-ref/source/monspeak.cc @@ -42,21 +42,30 @@ static std::string get_speak_string(const std::vector<std::string> prefixes, const std::string key, - const monsters *monster) + const monsters *monster, + bool ignore_silenced = false) { std::string prefix = ""; + bool silenced = false; const int size = prefixes.size(); for (int i = 0; i < size; i++) { + if (prefixes[i] == "silenced") + { + if (ignore_silenced) + continue; + silenced = true; + } prefix += prefixes[i]; prefix += " "; } std::string msg = ""; + // try string of all prefixes msg = getSpeakString(prefix + key); if (msg != "") return msg; - + // Combinations of prefixes by threes if (size >= 3) { @@ -105,6 +114,10 @@ static std::string get_speak_string(const std::vector<std::string> prefixes, // No prefixes msg = getSpeakString("default " + key); + // try the same ignoring silence + if (msg == "" && silenced) + return get_speak_string(prefixes, key, monster, true); + return msg; } @@ -150,18 +163,23 @@ bool mons_speaks(const monsters *monster) // *is* silenced, and is hence able to see the monsters' gestures // and such but not hear any sounds it makes, would be a big // headache to deal with, so skip it. + + // [jpeg] Why? Only print visible stuff! :p +/* if (!silenced(monster->x, monster->y) && silenced(you.x_pos, you.y_pos)) return false; - +*/ // Silenced monsters only "speak" 1/3 as often as non-silenced, // unless they're normally silent (S_SILENT). Use // get_monster_data(monster->type) to bypass mon_shouts() // replacing S_RANDOM with a random value. if (silenced(monster->x, monster->y) && get_monster_data(monster->type)->shouts != S_SILENT) + { if (!one_chance_in(3)) return false; + } // charmed monsters aren't too expressive if (monster->has_ench(ENCH_CHARM)) @@ -178,8 +196,12 @@ bool mons_speaks(const monsters *monster) if (monster->behaviour == BEH_FLEE) prefixes.push_back("fleeing"); + bool silence = silenced(you.x_pos, you.y_pos); if (silenced(monster->x, monster->y)) + { + silence = true; prefixes.push_back("silenced"); + } if (monster->has_ench(ENCH_CONFUSION)) prefixes.push_back("confused"); @@ -327,47 +349,37 @@ bool mons_speaks(const monsters *monster) for (int i = 0, size = lines.size(); i < size; i++) { std::string line = lines[i]; - - if (line == "__YOU_RESIST") - { - canned_msg( MSG_YOU_RESIST ); - continue; - } - else if (line == "__NOTHING_HAPPENS") - { - canned_msg( MSG_NOTHING_HAPPENS ); - continue; - } - else if (line == "__MORE") - { - more(); - continue; - } - + // This function is a little bit of a problem for the message // channels since some of the messages it generates are "fake" // warning to scare the player. In order to accomidate this // intent, we're falsely categorizing various things in the // function as spells and danger warning... everything else // just goes into the talk channel -- bwr + // [jpeg] Added MSGCH_TALK_VISUAL for silent "chatter" msg_channel_type msg_type = MSGCH_TALK; + std::string param = ""; std::string::size_type pos = line.find(":"); if (pos != std::string::npos) + param = line.substr(0, pos); + + if (!param.empty()) { - std::string param = line.substr(0, pos); - bool match = true; + bool match = true; if (param == "DANGER") msg_type = MSGCH_DANGER; - else if (param == "WARN") + else if (param == "WARN" && !silence || param == "VISUAL WARN") msg_type = MSGCH_WARN; else if (param == "SOUND") msg_type = MSGCH_SOUND; - else if (param == "SPELL") + else if (param == "VISUAL") + msg_type = MSGCH_TALK_VISUAL; + else if (param == "SPELL" && !silence || param == "VISUAL SPELL") msg_type = MSGCH_MONSTER_SPELL; - else if (param == "ENCHANT") + else if (param == "ENCHANT" && !silence || param == "VISUAL ENCHANT") msg_type = MSGCH_MONSTER_ENCHANT; else if (param == "PLAIN") msg_type = MSGCH_PLAIN; @@ -378,6 +390,23 @@ bool mons_speaks(const monsters *monster) line = line.substr(pos + 1); } + // except for VISUAL none of the above influence these + if (line == "__YOU_RESIST" && (!silence || param == "VISUAL")) + { + canned_msg( MSG_YOU_RESIST ); + continue; + } + else if (line == "__NOTHING_HAPPENS" && (!silence || param == "VISUAL")) + { + canned_msg( MSG_NOTHING_HAPPENS ); + continue; + } + else if (line == "__MORE" && (!silence || param == "VISUAL")) + { + more(); + continue; + } + mpr(line.c_str(), msg_type); } diff --git a/crawl-ref/source/mpr.h b/crawl-ref/source/mpr.h index 34094e3a14..02772989e0 100644 --- a/crawl-ref/source/mpr.h +++ b/crawl-ref/source/mpr.h @@ -31,6 +31,7 @@ enum msg_channel_type MSGCH_RECOVERY, // recovery from disease/stat/poison condition MSGCH_SOUND, // messages about things the player hears MSGCH_TALK, // monster talk (param is monster type) + MSGCH_TALK_VISUAL, // silent monster "talk" (not restricted by silence) MSGCH_INTRINSIC_GAIN, // player level/stat/species-power gains MSGCH_MUTATION, // player gain/lose mutations MSGCH_MONSTER_SPELL, // monsters casting spells diff --git a/crawl-ref/source/view.cc b/crawl-ref/source/view.cc index c44639b141..3c2db65d08 100644 --- a/crawl-ref/source/view.cc +++ b/crawl-ref/source/view.cc @@ -938,11 +938,23 @@ static void handle_monster_shouts(monsters* monster, bool force = false) else { msg = do_mon_str_replacements(msg, monster); + msg_channel_type channel = MSGCH_TALK; + + std::string param = ""; + std::string::size_type pos = msg.find(":"); - if (mons_shouts(monster->type) == S_SILENT) - msg::streams(MSGCH_TALK) << msg << std::endl; - else - msg::streams(MSGCH_SOUND) << msg << std::endl; + if (pos != std::string::npos) + { + param = msg.substr(0, pos); + msg = msg.substr(pos + 1); + } + + if (mons_shouts(monster->type) == S_SILENT || param == "VISUAL") + channel = MSGCH_TALK_VISUAL; + else if (param == "SOUND") + channel = MSGCH_SOUND; + + msg::streams(channel) << msg << std::endl; } if (noise_level > 0) |