documentation and index/offset fix.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2135 c06c8d41-db1a-0410-9941-cceddc491573
FYD4A5TIETIV2ZLFYWGHXANU6WQFKMVREHM7OZY2TAXSBMMCDLJAC
AIIVH43Z5X3GTPFY4FXQRZPG6Y7QPH2KJ47VM2Q43PCGGD5MTMOAC
OVM7ZULJJ6Q23AQ747AWBGISGDQYCGF2NT5YTXKW633I56WIYZPQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
RVST2QHYJ757ZHK4AUJ5NGPDZ44AD6RVFVXYPKQIBJXZBDNUCHXQC
Y3ZCJ2CZJYJAEB76HS4EY4GD64TDPPKANQVNDEH2OJPRDPZWJNYAC
R5Q2OJMXNVK5RPXIKLTHHAOP67XOBB44AZKKZ2TOI3USPL6HACXAC
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.
As of Dungeon Crawl Stone Soup 0.3 the previously hard-coded
monster speech has been outsourced by Matthew Cline into
shout.txt and speak.txt. This makes changing existing
messages, or adding new ones really easy. This file will
hopefully help you in this endeavour.
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.
capital letters), then a group description (such as insect
or humanoid) defined by the monster's body shape (winged,
tailed etc). The latter is entirely hardcoded, though.
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.
string, then, reading from left to right, combinations are
tested, beginning at three prefixes and ending at none, at
which time the prefix "default" is used instead.
Only keys that match a searching string perfectly
(ignoring upper/lower cases) will be found!
For the last round (shape comparison, e.g. winged
humanoid) occasionally an additional intelligence estimate
("stupid", "smart") is prefixed to the search string. If
in this last round still nothing has been found, the
monster stays silent.
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.
More variables can be defined in the form of @variable@.
The "@_friendly_imp_@" above is a reference to another
entry in the database that has the key "_friendly_imp_"
(without those '@' signs) that actually has imps talking.
Their speech includes messages such as the following.
The message entries themselves can be longer than a line,
though Crawl will simply truncate it should it exceed the
screen width (assuming 80 columns or less). The actual
message length will usually differ from the one defining an
entry as parameters can be stripped from the entry or
replaced by other values, as explained in the following
section.
VISUAL ENCHANT : MSGCH_ENCHANT
Note, though, that these rarely will take effect as
usually the "silenced humanoid" types will take
precedence. In the case of silenced monsters, first the
database is searched for the monster key along with
several prefixes including "silenced", and only if no
message can be found through all iterations of monster
name, glyph and group description, the search will repeat
ignoring the "silenced" prefix and only then these special
VISUAL cases can apply.
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!"
automatically changed to MSGCH_TALK_VISUAL for monsters
that can't speak (animals, usually), and manually set to
MSGCH_SOUND for all those variants of "You hear a shout!"
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.
Like with @_friendly_imp_@ above, a number of variables
has been defined to allow for greater flexibility.
Whenever the speech code encounters an '@' sign it will
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.
@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
@monster@ : replaced by plain monster name,
e.g. "rat" or "Sigmund"
@Monster@ : as above, but capitalized
@the_monster@ : replaced by definite article plus
monster name, or only the name if it is
unique, e.g. "the rat" or "Sigmund"
@The_monster@ : as above, but capitalized
@a_monster@ : replaced by indefinite article plus
monster name, if more than one can exist,
e.g. "a rat" or (again) "Sigmund"
@A_monster@ : as above, but capitalized
For friendly monsters an additional "your"/"Your" is
placed before the monster name, respecting capitalization
and grammar (only for the_xxx).
For friendly monsters a special case takes effect. Instead
of adding the definite article for @the_xxx@ constructs,
"your" or "Your" is used, respecting both capitalization and
grammar.
@pronoun@ : replaced be it, she, he as appropriate
@Pronoun@ : replaced be It, She, He, as appropriate
@possessive@ : replaced by its, her, his as appropriate
@pronoun@ : replaced by it, she, he, as appropriate
@Pronoun@ : replaced by It, She, He, as appropriate
@possessive@ : replaced by its, her, his, as appropriate
_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
_friendly_imp_, _hostile_imp_, and _tormentor_. There are
also a few synonyms defined at the beginning of speak.txt
such as for @ATTACK@, @pointless@, @shouts@, @wails@, and
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.
TESTING YOUR CHANGES
Should you have a version of Stone Soup that has been
compiled with the WIZARD mode defined, this could greatly
simplify testing. You can check whether this is the case by
pressing '&' during the game. If you are told that this is
an "unknown command" you are out of luck and might consider
compiling the game for yourself. You can download the source
code from the Crawl homepage [1].
Read the "INSTALL" file in the main directory for
instructions. Should you, after reading the documentation
and checking the archives of the Crawl newsgroup [2], still
have any questions, ask away!
If you have WIZARD mode compiled in, you can simply answer
"yes" to the safety question resulting from pressing '&',
and then test to your heart's content. Pressing '&' followed
by a number of other keys will execute wizard mode commands
that are all listed in the wizard help menu (press '&?').
In particular, you can create a monster with '&M', and
enforce behaviour on a monster by examining it (with 'x',
as usual). In wizard mode this offers several new commands
such as 'F' (make monster friendly/unfriendly) and 's'
(make monster shout). These last two are of particular
interest to monster speech designers.
You can also temporarily increase the likelihood of a given
message by adding a high weight value before it, e.g. w:500,
or equally temporarily push it into another channel (e.g.
MSGCH_WARN) to make it more noticeable.
PUBLISHING YOUR ADDITIONS AND CHANGES
If you feel that your additions really add something to the
game and would like to make them available to the general
public, you can post them (in the form of a diff file, or in
plain text) in the newsgroup [2] or as a feature request on
sourceforge.net [1].
[1] http://crawl-ref.sourceforge.net
http://sourceforge.net/projects/crawl-ref
[2] rec.games.roguelike.misc
Since this newsgroup is being shared with a number of other
roguelike games, it is generally considered polite to flag
subjects of posts pertaining only to Crawl with "-crawl-" or
a similar marker.
Ogres are huge, chunky creatures related to orcs. They are terrible
monsters who usually live to do nothing more than smash, smash, smash,
and destroy.
Genealogists would call these species Common Ogres and Sapient Ogres rather,
yet the folklore labels stuck somehow. These two are genuinely different
races stemming from a mythological progenitor, the Primordial Ogre.
While crossbreeding is possible, it is generally frowned upon in Ogre
societies: the resulting offspring is often ill-fated, and in very rare cases, even two-headed ogres result.
Ogres are huge, chunky creatures who usually live to do nothing more than
smash, smash, smash, and destroy. They have great physical strength, but
are bad at almost everything except fighting and mature quite slowly.
Because of their large size they can only wear loose robes, cloaks and
animal skins. Although ogres can eat almost anything, their size also
means that they need to do so more frequently than smaller folk.
They have great physical strength, but are bad at almost everything
except fighting and learn quite slowly. Because of their large size
they can only wear loose robes, cloaks and animal skins. Although ogres
can eat almost anything, their size means that they need to do so more
frequently than smaller folk.
Ogre Mages are slightly smaller and nimbler than their Common
counterparts and grow a bit slower. They are unique among the beefier
species in their ability to use magic, especially enchantments. Still,
they also perform well in all types of melee combat, with a slight
disadvantage at short blades. While they perform better than Ogres in all
more civilised aspects of life, Ogre Mages have lost the ability to
digest corpsed when not hungry.
Ogre-mages are a separate race of ogres who are unique among the beefier
species in their ability to use magic, especially enchantments. Although
slighter than their common ogre relatives they nevertheless have great
strength and can survive a lot of punishment. They advance in level as
slowly as high elves. In contrast to their Ogre cousins, Ogre Mages have
lost the ability to digest corpses when not hungry.
Most often, small bands of Common Ogres raid the countryside or
underground dungeons, accompanied by a Sapient Ogre. The latter is
usually at once the undisputed spokesman, medicine man and shaman of the
group.