forked from github/server
commit
a8506442e1
|
@ -3,6 +3,7 @@
|
|||
<xi:include href="config://core/messages.xml"/>
|
||||
<xi:include href="config://core/de/strings.xml"/>
|
||||
<xi:include href="config://core/en/strings.xml"/>
|
||||
<xi:include href="config://game/strings.xml"/>
|
||||
<xi:include href="config://game/spellinfo.xml" />
|
||||
<xi:include href="config://default/names-undead.xml"/>
|
||||
<xi:include href="config://default/names-skeletons.xml"/>
|
||||
|
|
|
@ -1,11 +1,5 @@
|
|||
<?xml version="1.0"?>
|
||||
<eressea xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
<xi:include href="config://core/messages.xml"/>
|
||||
|
||||
<!-- Localization -->
|
||||
<xi:include href="config://core/de/strings.xml"/>
|
||||
<xi:include href="config://core/en/strings.xml"/>
|
||||
<xi:include href="config://game/spellinfo.xml" />
|
||||
|
||||
<xi:include href="config://core/common/items.xml" />
|
||||
<xi:include href="config://core/common/armor.xml" />
|
||||
|
@ -26,7 +20,6 @@
|
|||
<xi:include href="config://game/equipment.xml"/>
|
||||
<xi:include href="config://game/items.xml"/>
|
||||
<xi:include href="config://game/spells.xml"/>
|
||||
<xi:include href="config://game/strings.xml"/>
|
||||
<xi:include href="config://default/adamantium.xml"/>
|
||||
<equipment>
|
||||
<set name="autoseed_unit">
|
||||
|
@ -46,10 +39,4 @@
|
|||
<item name="adamantium" amount="1"/>
|
||||
</set>
|
||||
</equipment>
|
||||
|
||||
<xi:include href="config://default/names-undead.xml"/>
|
||||
<xi:include href="config://default/names-skeletons.xml"/>
|
||||
<xi:include href="config://default/names-zombies.xml"/>
|
||||
<xi:include href="config://default/names-ghouls.xml"/>
|
||||
<xi:include href="config://default/names-dragons.xml"/>
|
||||
</eressea>
|
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0"?>
|
||||
<eressea xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
<xi:include href="config://core/messages.xml"/>
|
||||
<xi:include href="config://core/de/strings.xml"/>
|
||||
<xi:include href="config://core/en/strings.xml"/>
|
||||
<xi:include href="config://game/strings.xml"/>
|
||||
<xi:include href="config://game/messages.xml"/>
|
||||
<xi:include href="config://default/names-undead.xml"/>
|
||||
<xi:include href="config://default/names-skeletons.xml"/>
|
||||
<xi:include href="config://default/names-zombies.xml"/>
|
||||
<xi:include href="config://default/names-ghouls.xml"/>
|
||||
<xi:include href="config://default/names-dragons.xml"/>
|
||||
</eressea>
|
|
@ -1,8 +1,5 @@
|
|||
<?xml version="1.0"?>
|
||||
<eressea xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
<xi:include href="config://core/messages.xml"/>
|
||||
<xi:include href="config://core/de/strings.xml"/>
|
||||
<xi:include href="config://core/en/strings.xml"/>
|
||||
<xi:include href="config://core/common/items.xml"/>
|
||||
<xi:include href="config://core/common/herbs.xml" />
|
||||
<xi:include href="config://core/spoils.xml"/>
|
||||
|
@ -15,8 +12,6 @@
|
|||
<xi:include href="config://game/shipnames.xml"/>
|
||||
<xi:include href="config://core/calendar.xml"/>
|
||||
<xi:include href="config://game/items.xml" />
|
||||
<xi:include href="config://game/strings.xml"/>
|
||||
<xi:include href="config://game/messages.xml"/>
|
||||
<xi:include href="config://game/races.xml"/>
|
||||
<xi:include href="config://game/buildings.xml"/>
|
||||
<xi:include href="config://game/equipment.xml"/>
|
|
@ -2379,19 +2379,19 @@
|
|||
<text locale="en">ghoul</text>
|
||||
</string>
|
||||
|
||||
<string name="juju-zombie">
|
||||
<string name="juju">
|
||||
<text locale="de">Juju-Zombie</text>
|
||||
<text locale="en">juju-zombie</text>
|
||||
</string>
|
||||
<string name="juju-zombie_p">
|
||||
<string name="juju_p">
|
||||
<text locale="de">Juju-Zombies</text>
|
||||
<text locale="en">juju-zombies</text>
|
||||
</string>
|
||||
<string name="juju-zombie_d">
|
||||
<string name="juju_d">
|
||||
<text locale="de">Juju-Zombies</text>
|
||||
<text locale="en">juju-zombies</text>
|
||||
</string>
|
||||
<string name="juju-zombie_x">
|
||||
<string name="juju_x">
|
||||
<text locale="de">Juju-Zombie</text>
|
||||
<text locale="en">juju-zombie</text>
|
||||
</string>
|
||||
|
|
|
@ -1912,10 +1912,10 @@
|
|||
<string name="zombie">
|
||||
<text locale="fr">zombie</text>
|
||||
</string>
|
||||
<string name="juju-zombie_p">
|
||||
<string name="juju_p">
|
||||
<text locale="fr">zombies juju</text>
|
||||
</string>
|
||||
<string name="juju-zombie">
|
||||
<string name="juju">
|
||||
<text locale="fr">zombie juju</text>
|
||||
</string>
|
||||
<string name="ghoul_p">
|
||||
|
|
|
@ -3266,20 +3266,6 @@
|
|||
<text locale="de">"$unit($unit) marschiert in eine Antimagiezone und löst sich auf."</text>
|
||||
<text locale="en">"$unit($unit) walks into an antimagical zone and dissolves."</text>
|
||||
</message>
|
||||
<message name="illusiondissolve" section="events">
|
||||
<type>
|
||||
<arg name="unit" type="unit"/>
|
||||
</type>
|
||||
<text locale="de">"$unit($unit) hat sich unbemerkt verflüchtigt."</text>
|
||||
<text locale="en">"$unit($unit) has dissolved without a trace."</text>
|
||||
</message>
|
||||
<message name="warnillusiondissolve" section="events">
|
||||
<type>
|
||||
<arg name="unit" type="unit"/>
|
||||
</type>
|
||||
<text locale="de">"$unit($unit) wird sich bald verflüchtigen."</text>
|
||||
<text locale="en">"$unit($unit) will dissolve soon."</text>
|
||||
</message>
|
||||
<message name="fleescared" section="events">
|
||||
<type>
|
||||
<arg name="amount" type="int"/>
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
|
||||
<race name="lynx" maxaura="0.000000" regaura="0.000000" weight="500" capacity="540" speed="1.0" hp="20" damage="2d3" unarmedattack="0" unarmeddefense="0" attackmodifier="4" defensemodifier="5" walk="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="99999"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
<skill name="mining" modifier="-99"/>
|
||||
<skill name="bow" modifier="-99"/>
|
||||
|
@ -34,7 +33,6 @@
|
|||
|
||||
<race name="human" maxaura="1.0" regaura="1.0" recruitcost="100" maintenance="10" weight="1000" capacity="540" speed="1.0" hp="20" damage="1d5" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<param name="other_race" value="elf"/>
|
||||
<skill name="riding" modifier="+1"/>
|
||||
<skill name="shipcraft" modifier="2"/>
|
||||
|
@ -48,7 +46,6 @@
|
|||
|
||||
<race name="orc" studyspeed="-5" magres="-5" maxaura="1.0" regaura="1.0" recruitcost="100" maintenance="10" weight="1000" capacity="540" speed="1.0" hp="20" damage="1d5" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<param name="other_race" value="troll"/>
|
||||
|
||||
<skill name="bow" speed="+5"/>
|
||||
|
@ -76,7 +73,6 @@
|
|||
|
||||
<race name="halfling" defensemodifier="1" magres="5" maxaura="1.0" regaura="1.0" recruitcost="100" maintenance="10" weight="1000" capacity="540" speed="1.0" hp="20" damage="1d5" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<param name="other_race" value="dwarf"/>
|
||||
<param name="luxury_trade" value="600"/>
|
||||
<skill name="bow" modifier="-1"/>
|
||||
|
@ -103,7 +99,6 @@
|
|||
|
||||
<race name="demon" magres="15" maxaura="1.0" regaura="1.1" recruitcost="360" maintenance="10" weight="1000" capacity="540" speed="1.0" hp="30" ac="2" damage="1d5" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" shapeshift="yes" giveperson="yes" giveunit="yes" getitem="yes" recruitethereal="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<skill name="cartmaking" modifier="-2"/>
|
||||
<skill name="forestry" modifier="1"/>
|
||||
<skill name="melee" modifier="1"/>
|
||||
|
@ -123,7 +118,6 @@
|
|||
|
||||
<race name="elf" magres="10" maxaura="1.0" regaura="1.1" recruitcost="200" maintenance="10" weight="1000" capacity="540" speed="1.0" hp="20" damage="1d5" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<skill name="armorer" modifier="-1"/>
|
||||
<skill name="bow" modifier="2"/>
|
||||
<skill name="building" modifier="-1"/>
|
||||
|
@ -142,7 +136,6 @@
|
|||
|
||||
<race name="troll" magres="10" maxaura="1.0" regaura="1.0" recruitcost="260" maintenance="10" weight="2000" capacity="1080" speed="1.0" hp="20" ac="1" damage="1d5+3" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<param name="armor.stamina" value="4"/> <!-- +1 natural armor per X levels stamina -->
|
||||
<skill name="armorer" modifier="2"/>
|
||||
<skill name="bow" modifier="-2"/>
|
||||
|
@ -165,7 +158,6 @@
|
|||
|
||||
<race name="dwarf" magres="5" maxaura="1.0" regaura="0.9" recruitcost="240" maintenance="10" weight="1000" capacity="540" speed="1.0" hp="20" damage="1d5" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<skill name="armorer" modifier="2"/>
|
||||
<skill name="bow" modifier="-1"/>
|
||||
<skill name="building" modifier="2"/>
|
||||
|
@ -190,7 +182,6 @@
|
|||
|
||||
<race name="kraken" maxaura="0.000000" regaura="0.000000" weight="500" capacity="540" speed="2.000000" hp="300" damage="2d10" unarmedattack="0" unarmeddefense="0" attackmodifier="7" defensemodifier="7" coastal="yes" swim="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="5000"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
<skill name="mining" modifier="-99"/>
|
||||
<skill name="bow" modifier="-99"/>
|
||||
|
@ -217,7 +208,6 @@
|
|||
</race>
|
||||
<race name="giantturtle" maxaura="0.000000" regaura="0.000000" weight="1600" capacity="600" speed="1.0" hp="900" ac="7" damage="2d50" unarmedattack="0" unarmeddefense="0" attackmodifier="10" defensemodifier="5" coastal="yes" swim="yes" walk="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="5000"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
<skill name="mining" modifier="-99"/>
|
||||
<skill name="bow" modifier="-99"/>
|
||||
|
@ -239,7 +229,6 @@
|
|||
</race>
|
||||
<race name="dolphin" maxaura="0.000000" regaura="0.000000" weight="500" capacity="540" speed="2.000000" hp="24" damage="1d6" unarmedattack="0" unarmeddefense="0" attackmodifier="5" defensemodifier="5" coastal="yes" swim="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="5000"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
<skill name="mining" modifier="-99"/>
|
||||
<skill name="bow" modifier="-99"/>
|
||||
|
@ -261,7 +250,6 @@
|
|||
</race>
|
||||
<race name="tiger" maxaura="0.000000" regaura="0.000000" weight="500" capacity="540" speed="1.0" hp="30" damage="2d6" unarmedattack="0" unarmeddefense="0" attackmodifier="6" defensemodifier="3" walk="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="5000"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
<skill name="mining" modifier="-99"/>
|
||||
<skill name="bow" modifier="-99"/>
|
||||
|
@ -285,7 +273,6 @@
|
|||
</race>
|
||||
<race name="hellcat" magres="50" maxaura="0.000000" regaura="0.000000" weight="500" capacity="540" speed="1.0" hp="40" damage="2d6" unarmedattack="0" unarmeddefense="0" attackmodifier="6" defensemodifier="4" walk="yes" teach="no" getitem="yes" resistpierce="yes">
|
||||
<ai splitsize="5000"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
<skill name="mining" modifier="-99"/>
|
||||
<skill name="bow" modifier="-99"/>
|
||||
|
@ -309,7 +296,6 @@
|
|||
</race>
|
||||
<race name="owl" maxaura="0.000000" regaura="0.000000" weight="500" capacity="540" speed="1.0" hp="9" damage="1d4" unarmedattack="0" unarmeddefense="0" attackmodifier="2" defensemodifier="4" fly="yes" walk="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="5000"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
<skill name="mining" modifier="-99"/>
|
||||
<skill name="bow" modifier="-99"/>
|
||||
|
@ -332,7 +318,6 @@
|
|||
</race>
|
||||
<race name="fairy" magres="80" maxaura="1.0" regaura="1.500000" weight="200" capacity="540" speed="1.0" hp="6" damage="1d3" unarmedattack="0" unarmeddefense="0" attackmodifier="6" defensemodifier="14" fly="yes" walk="yes" teach="no" getitem="yes" equipment="yes">
|
||||
<ai splitsize="5000"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="magic" modifier="1"/>
|
||||
<skill name="riding" modifier="-1"/>
|
||||
<skill name="melee" modifier="-1"/>
|
||||
|
@ -359,7 +344,6 @@
|
|||
</race>
|
||||
<race name="dreamcat" magres="50" maxaura="1.0" regaura="1.0" weight="500" capacity="540" speed="1.0" hp="10" damage="1d5" unarmedattack="0" unarmeddefense="0" attackmodifier="5" defensemodifier="6" fly="yes" walk="yes" teach="no" getitem="yes" invinciblenonmagic="yes">
|
||||
<ai splitsize="5000"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="magic" modifier="1"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
<skill name="mining" modifier="-99"/>
|
||||
|
@ -382,7 +366,6 @@
|
|||
</race>
|
||||
<race name="imp" magres="50" maxaura="1.0" regaura="1.0" weight="500" capacity="540" speed="1.0" hp="10" ac="1" damage="1d4" unarmedattack="0" unarmeddefense="0" attackmodifier="5" defensemodifier="4" fly="yes" walk="yes" teach="no" getitem="yes" equipment="yes">
|
||||
<ai splitsize="5000"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
<skill name="mining" modifier="-99"/>
|
||||
<skill name="bow" modifier="-99"/>
|
||||
|
@ -407,7 +390,6 @@
|
|||
</race>
|
||||
<race name="ghost" magres="80" maxaura="0.500000" regaura="0.100000" weight="500" capacity="540" speed="1.0" hp="30" ac="5" damage="2d6" unarmedattack="0" unarmeddefense="0" attackmodifier="5" defensemodifier="8" scarepeasants="yes" fly="yes" walk="yes" teach="no" getitem="yes" equipment="yes" invinciblenonmagic="yes">
|
||||
<ai splitsize="5000"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
<skill name="mining" modifier="-99"/>
|
||||
<skill name="bow" modifier="-99"/>
|
||||
|
@ -433,8 +415,6 @@
|
|||
</race>
|
||||
<race name="wolf" maxaura="0.000000" regaura="0.000000" weight="500" capacity="540" speed="1.0" hp="25" damage="2d6" unarmedattack="0" unarmeddefense="0" attackmodifier="6" defensemodifier="3" scarepeasants="yes" walk="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="5000"/>
|
||||
<function name="name" value="namegeneric"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
<skill name="mining" modifier="-99"/>
|
||||
<skill name="bow" modifier="-99"/>
|
||||
|
@ -458,7 +438,6 @@
|
|||
</race>
|
||||
<race name="unicorn" magres="90" maxaura="1.500000" regaura="1.500000" weight="5000" capacity="2000" speed="2.000000" hp="40" damage="2d4" unarmedattack="0" unarmeddefense="0" attackmodifier="6" defensemodifier="4" walk="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="9999"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
<skill name="mining" modifier="-99"/>
|
||||
<skill name="bow" modifier="-99"/>
|
||||
|
@ -482,7 +461,6 @@
|
|||
</race>
|
||||
<race name="nymph" magres="90" maxaura="1.0" regaura="1.500000" weight="1000" capacity="540" speed="1.0" hp="15" damage="1d4" unarmedattack="0" unarmeddefense="0" attackmodifier="3" defensemodifier="1" walk="yes" teach="no" getitem="yes" equipment="yes">
|
||||
<ai splitsize="9999"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="mining" modifier="-99"/>
|
||||
<skill name="bow" modifier="2"/>
|
||||
<skill name="building" modifier="-99"/>
|
||||
|
@ -505,7 +483,6 @@
|
|||
</race>
|
||||
<race name="songdragon" magres="99" maxaura="1.0" regaura="1.0" weight="1000" capacity="600" speed="1.500000" hp="40" ac="1" damage="2d4" unarmedattack="0" unarmeddefense="0" attackmodifier="3" defensemodifier="1" fly="yes" walk="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="9999"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
<skill name="mining" modifier="-99"/>
|
||||
<skill name="bow" modifier="-99"/>
|
||||
|
@ -533,7 +510,6 @@
|
|||
|
||||
<race name="rat" maxaura="0.000000" regaura="0.000000" weight="100" capacity="540" speed="1.0" hp="10" damage="1d4" unarmedattack="0" unarmeddefense="0" attackmodifier="1" defensemodifier="1" walk="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="9999"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
<skill name="mining" modifier="-99"/>
|
||||
<skill name="bow" modifier="-99"/>
|
||||
|
@ -557,7 +533,6 @@
|
|||
</race>
|
||||
<race name="eagle" maxaura="0.000000" regaura="0.000000" weight="500" capacity="540" speed="1.500000" hp="15" damage="2d3" unarmedattack="0" unarmeddefense="0" attackmodifier="6" defensemodifier="2" fly="yes" walk="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="9999"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
<skill name="mining" modifier="-99"/>
|
||||
<skill name="bow" modifier="-99"/>
|
||||
|
@ -580,7 +555,6 @@
|
|||
</race>
|
||||
<race name="tunnelworm" magres="80" maxaura="0.000000" regaura="0.000000" weight="30000" capacity="10000" speed="1.0" hp="300" ac="6" damage="3d20" unarmedattack="0" unarmeddefense="0" attackmodifier="6" defensemodifier="1" scarepeasants="yes" walk="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="99999"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
<skill name="mining" modifier="10"/>
|
||||
<skill name="bow" modifier="-99"/>
|
||||
|
@ -604,7 +578,6 @@
|
|||
<attack type="8" damage="1d10"/>
|
||||
</race>
|
||||
<race name="direwolf" maxaura="0.000000" regaura="0.000000" weight="500" capacity="540" speed="1.0" hp="20" damage="2d4" unarmedattack="0" unarmeddefense="0" attackmodifier="3" defensemodifier="1" walk="yes" teach="no" giveperson="yes">
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<ai splitsize="5000"/>
|
||||
<attack type="4" damage="2d4"/>
|
||||
</race>
|
||||
|
@ -614,8 +587,6 @@
|
|||
</race>
|
||||
<race name="braineater" magres="90" maxaura="1.0" regaura="1.0" weight="100" capacity="540" speed="1.0" hp="20" damage="0d0" unarmedattack="0" unarmeddefense="0" attackmodifier="6" defensemodifier="10" scarepeasants="yes" fly="yes" walk="yes" teach="no" invinciblenonmagic="yes">
|
||||
<ai splitsize="500" killpeasants="yes" moverandom="yes" learn="yes"/>
|
||||
<function name="name" value="namegeneric"/>
|
||||
<function name="describe" value="describe_race"/>
|
||||
<attack type="2" damage="3d15"/>
|
||||
<attack type="3" damage="1d1"/>
|
||||
<attack type="4" damage="1d1"/>
|
||||
|
@ -670,19 +641,16 @@
|
|||
</race>
|
||||
<race name="mountainguard" unarmedguard="yes" magres="50" maxaura="1.0" regaura="0.500000" weight="10000" capacity="2000" speed="0.000000" hp="1000" ac="12" damage="2d40" unarmedattack="0" unarmeddefense="0" attackmodifier="6" defensemodifier="8" cannotmove="yes" canlearn="no" teach="no" noweapons="yes">
|
||||
<ai splitsize="1"/>
|
||||
<function name="name" value="namegeneric"/>
|
||||
<attack type="4" damage="2d40"/>
|
||||
</race>
|
||||
<race name="shadowmaster" cansail="no" cansteal="no" canlearn="no" magres="75" maxaura="1.0" regaura="2.000000" weight="500" capacity="540" speed="1.0" hp="150" ac="4" damage="2d5" unarmedattack="0" unarmeddefense="0" attackmodifier="11" defensemodifier="13" scarepeasants="yes" walk="yes" teach="no" desert="yes">
|
||||
<ai splitsize="50" killpeasants="yes" moverandom="yes" learn="yes"/>
|
||||
<function name="name" value="namegeneric"/>
|
||||
<attack type="4" damage="2d4"/>
|
||||
<attack type="2" damage="2d30"/>
|
||||
<attack type="3" damage="1d2"/>
|
||||
</race>
|
||||
<race name="shadowdemon" cansail="no" cansteal="no" canlearn="no" magres="75" maxaura="1.0" regaura="1.0" weight="500" capacity="540" speed="1.0" hp="50" ac="3" damage="2d4" unarmedattack="0" unarmeddefense="0" attackmodifier="8" defensemodifier="11" scarepeasants="yes" walk="yes" teach="no" desert="yes" recruitethereal="yes">
|
||||
<ai splitsize="1000" killpeasants="yes" moverandom="yes" learn="yes"/>
|
||||
<function name="name" value="namegeneric"/>
|
||||
<attack type="4" damage="2d3"/>
|
||||
<attack type="3" damage="1d1"/>
|
||||
</race>
|
||||
|
@ -694,7 +662,6 @@
|
|||
</race>
|
||||
<race name="irongolem" irongolem="true" magres="25" maxaura="1.0" regaura="0.100000" weight="10000" capacity="2000" speed="1.0" hp="50" ac="2" damage="2d10+4" unarmedattack="0" unarmeddefense="0" attackmodifier="4" defensemodifier="2" walk="yes" canlearn="no" teach="no">
|
||||
<ai splitsize="50"/>
|
||||
<function name="name" value="namegeneric"/>
|
||||
<skill name="armorer" modifier="14"/>
|
||||
<skill name="weaponsmithing" modifier="14"/>
|
||||
<attack type="4" damage="2d8+4"/>
|
||||
|
@ -710,7 +677,6 @@
|
|||
|
||||
<race name="dracoid" maxaura="1.0" regaura="1.0" weight="1000" capacity="540" speed="1.0" hp="24" damage="1d5" unarmedattack="-2" unarmeddefense="-2" walk="yes" teach="no" giveperson="yes" getitem="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="name" value="namedracoid"/>
|
||||
<attack type="4" damage="1d6"/>
|
||||
<attack type="4" damage="1d6"/>
|
||||
<attack type="1" damage="1d5"/>
|
||||
|
@ -718,22 +684,12 @@
|
|||
|
||||
<race name="ent" magres="25" maxaura="1.0" regaura="0.500000" weight="5000" capacity="2500" speed="1.0" hp="50" ac="4" damage="2d4+12" unarmedattack="0" unarmeddefense="0" attackmodifier="9" defensemodifier="7" scarepeasants="yes" walk="yes" teach="no">
|
||||
<ai splitsize="1000" moverandom="yes" learn="yes"/>
|
||||
<function name="name" value="namegeneric"/>
|
||||
<attack type="4" damage="2d12"/>
|
||||
<attack type="4" damage="2d12"/>
|
||||
</race>
|
||||
|
||||
<race name="illusion" maxaura="0.000000" regaura="0.000000" weight="0" capacity="0" speed="1.0" hp="1" damage="1d1" unarmedattack="0" unarmeddefense="0" walk="yes" canlearn="no" teach="no" noweapons="yes" illusionary="yes">
|
||||
<ai splitsize="999999"/>
|
||||
<function name="age" value="ageillusion"/>
|
||||
<skill name="unarmed" modifier="-99"/>
|
||||
<attack type="1" damage="1d1"/>
|
||||
</race>
|
||||
|
||||
<race name="undead" maxaura="1.0" regaura="1.0" weight="1000" capacity="540" speed="1.0" hp="20" damage="1d7" unarmedattack="0" unarmeddefense="0" attackmodifier="1" defensemodifier="1" scarepeasants="yes" walk="yes" canlearn="no" teach="no" noheal="yes" undead="yes" equipment="yes">
|
||||
<ai splitsize="20000" moverandom="yes"/>
|
||||
<function name="name" value="nameundead"/>
|
||||
<function name="age" value="ageundead"/>
|
||||
<attack type="4" damage="1d7"/>
|
||||
<attack type="5"/>
|
||||
</race>
|
||||
|
@ -766,7 +722,6 @@
|
|||
|
||||
<race name="ghast" magres="60" maxaura="1.0" regaura="1.0" weight="1000" capacity="540" speed="1.0" hp="60" ac="2" damage="1d7" unarmedattack="6" unarmeddefense="6" attackmodifier="6" defensemodifier="6" scarepeasants="yes" walk="yes" canlearn="no" teach="no" absorbpeasants="yes" noheal="yes" undead="yes" equipment="yes">
|
||||
<ai splitsize="2000" killpeasants="yes" moverandom="yes"/>
|
||||
<function name="name" value="nameghoul"/>
|
||||
<skill name="crossbow" modifier="1"/>
|
||||
<skill name="bow" modifier="1"/>
|
||||
<skill name="catapult" modifier="1"/>
|
||||
|
@ -785,8 +740,6 @@
|
|||
|
||||
<race name="ghoul" magres="30" maxaura="1.0" regaura="1.0" weight="1000" capacity="540" speed="1.0" hp="30" ac="1" damage="1d7" unarmedattack="3" unarmeddefense="3" attackmodifier="3" defensemodifier="3" scarepeasants="yes" walk="yes" canlearn="no" teach="no" absorbpeasants="yes" noheal="yes" undead="yes" equipment="yes">
|
||||
<ai splitsize="10000" killpeasants="yes" moverandom="yes"/>
|
||||
<function name="name" value="nameghoul"/>
|
||||
<function name="age" value="ageghoul"/>
|
||||
<skill name="crossbow" modifier="1"/>
|
||||
<skill name="bow" modifier="1"/>
|
||||
<skill name="catapult" modifier="1"/>
|
||||
|
@ -802,9 +755,8 @@
|
|||
<attack type="2" damage="1d30"/>
|
||||
</race>
|
||||
|
||||
<race name="juju-zombie" magres="50" maxaura="1.0" regaura="1.0" weight="1000" capacity="540" speed="1.0" hp="80" ac="2" damage="1d7" unarmedattack="6" unarmeddefense="6" attackmodifier="8" defensemodifier="8" scarepeasants="yes" walk="yes" canlearn="no" teach="no" absorbpeasants="yes" noheal="yes" undead="yes" equipment="yes" resistbash="yes" resistcut="yes" resistpierce="yes">
|
||||
<race name="juju" magres="50" maxaura="1.0" regaura="1.0" weight="1000" capacity="540" speed="1.0" hp="80" ac="2" damage="1d7" unarmedattack="6" unarmeddefense="6" attackmodifier="8" defensemodifier="8" scarepeasants="yes" walk="yes" canlearn="no" teach="no" absorbpeasants="yes" noheal="yes" undead="yes" equipment="yes" resistbash="yes" resistcut="yes" resistpierce="yes">
|
||||
<ai splitsize="2000" killpeasants="yes" moverandom="yes"/>
|
||||
<function name="name" value="namezombie"/>
|
||||
<skill name="crossbow" modifier="1"/>
|
||||
<skill name="bow" modifier="1"/>
|
||||
<skill name="catapult" modifier="1"/>
|
||||
|
@ -821,8 +773,6 @@
|
|||
|
||||
<race name="zombie" magres="20" maxaura="1.0" regaura="1.0" weight="1000" capacity="540" speed="1.0" hp="40" ac="1" damage="1d7" unarmedattack="2" unarmeddefense="2" attackmodifier="5" defensemodifier="5" scarepeasants="yes" walk="yes" canlearn="no" teach="no" noheal="yes" undead="yes" equipment="yes" resistcut="yes" resistpierce="yes">
|
||||
<ai splitsize="10000" killpeasants="yes" moverandom="yes"/>
|
||||
<function name="name" value="namezombie"/>
|
||||
<function name="age" value="agezombie"/>
|
||||
<skill name="crossbow" modifier="1"/>
|
||||
<skill name="bow" modifier="1"/>
|
||||
<skill name="catapult" modifier="1"/>
|
||||
|
@ -837,7 +787,6 @@
|
|||
|
||||
<race name="skeletonlord" magres="30" maxaura="1.0" regaura="1.0" weight="1000" capacity="540" speed="1.0" hp="60" ac="4" damage="1d7" unarmedattack="6" unarmeddefense="6" attackmodifier="8" defensemodifier="8" scarepeasants="yes" walk="yes" canlearn="no" teach="no" absorbpeasants="yes" noheal="yes" undead="yes" equipment="yes" resistcut="yes" resistpierce="yes">
|
||||
<ai splitsize="2000" killpeasants="yes" moverandom="yes"/>
|
||||
<function name="name" value="nameskeleton"/>
|
||||
<skill name="crossbow" modifier="1"/>
|
||||
<skill name="bow" modifier="1"/>
|
||||
<skill name="catapult" modifier="1"/>
|
||||
|
@ -853,8 +802,6 @@
|
|||
|
||||
<race name="skeleton" magres="10" maxaura="1.0" regaura="1.0" weight="500" capacity="540" speed="1.0" hp="20" ac="1" damage="1d7" unarmedattack="1" unarmeddefense="1" attackmodifier="6" defensemodifier="6" scarepeasants="yes" walk="yes" canlearn="no" teach="no" noheal="yes" undead="yes" equipment="yes" resistcut="yes" resistpierce="yes">
|
||||
<ai splitsize="10000" killpeasants="yes" moverandom="yes"/>
|
||||
<function name="name" value="nameskeleton"/>
|
||||
<function name="age" value="ageskeleton"/>
|
||||
<skill name="crossbow" modifier="1"/>
|
||||
<skill name="bow" modifier="1"/>
|
||||
<skill name="catapult" modifier="1"/>
|
||||
|
@ -869,14 +816,11 @@
|
|||
|
||||
<race name="shadowknight" maxaura="0.000000" regaura="0.000000" weight="1000" capacity="540" speed="1.0" hp="1" damage="1d1" unarmedattack="0" unarmeddefense="0" attackmodifier="1" defensemodifier="1" scarepeasants="yes" walk="yes" canlearn="no" teach="no" noblock="yes">
|
||||
<ai splitsize="20000" moverandom="yes"/>
|
||||
<function name="name" value="namegeneric"/>
|
||||
<attack type="1" damage="1d1"/>
|
||||
</race>
|
||||
|
||||
<race name="seaserpent" magres="50" maxaura="1.0" regaura="1.0" weight="20000" capacity="5000" speed="1.0" hp="600" ac="3" damage="2d15" unarmedattack="0" unarmeddefense="0" attackmodifier="4" defensemodifier="4" scarepeasants="yes" swim="yes" teach="no" getitem="yes" resistbash="yes">
|
||||
<ai splitsize="6" killpeasants="yes" moverandom="yes" learn="yes" moveattack="yes"/>
|
||||
<function name="name" value="namegeneric"/>
|
||||
<function name="move" value="moveswimming"/>
|
||||
<skill name="tactics" modifier="4"/>
|
||||
<attack type="4" damage="1d30"/>
|
||||
<attack type="4" damage="1d30"/>
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
|
||||
<race name="human" maxaura="1.000000" regaura="1.000000" recruitcost="75" maintenance="10" weight="1000" capacity="540" speed="1.000000" hp="20" damage="1d5" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<param name="migrants.formula" value="1"/>
|
||||
<skill name="trade" modifier="1"/>
|
||||
<skill name="herbalism" modifier="-1"/>
|
||||
|
@ -29,7 +28,6 @@
|
|||
</race>
|
||||
<race name="kraken" maxaura="0.000000" regaura="0.000000" weight="500" capacity="540" speed="2.000000" hp="300" damage="2d10" unarmedattack="0" unarmeddefense="0" attackmodifier="7" defensemodifier="7" coastal="yes" swim="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="5000"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="perception" modifier="1"/>
|
||||
<skill name="alchemy" modifier="-99"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
|
@ -63,7 +61,6 @@
|
|||
</race>
|
||||
<race name="giantturtle" maxaura="0.000000" regaura="0.000000" weight="1600" capacity="600" speed="1.000000" hp="900" ac="7" damage="2d50" unarmedattack="0" unarmeddefense="0" attackmodifier="10" defensemodifier="5" coastal="yes" swim="yes" walk="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="5000"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="perception" modifier="1"/>
|
||||
<skill name="alchemy" modifier="-99"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
|
@ -92,7 +89,6 @@
|
|||
</race>
|
||||
<race name="dolphin" maxaura="0.000000" regaura="0.000000" weight="500" capacity="540" speed="2.000000" hp="24" damage="1d6" unarmedattack="0" unarmeddefense="0" attackmodifier="5" defensemodifier="5" coastal="yes" swim="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="5000"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="alchemy" modifier="-99"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
<skill name="mining" modifier="-99"/>
|
||||
|
@ -120,7 +116,6 @@
|
|||
</race>
|
||||
<race name="tiger" maxaura="0.000000" regaura="0.000000" weight="500" capacity="540" speed="1.000000" hp="30" damage="2d6" unarmedattack="0" unarmeddefense="0" attackmodifier="6" defensemodifier="3" walk="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="5000"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="alchemy" modifier="-99"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
<skill name="mining" modifier="-99"/>
|
||||
|
@ -150,7 +145,6 @@
|
|||
</race>
|
||||
<race name="hellcat" magres="50" maxaura="0.000000" regaura="0.000000" weight="500" capacity="540" speed="1.000000" hp="40" damage="2d6" unarmedattack="0" unarmeddefense="0" attackmodifier="6" defensemodifier="4" walk="yes" teach="no" getitem="yes" resistpierce="yes">
|
||||
<ai splitsize="5000"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="perception" modifier="1"/>
|
||||
<skill name="alchemy" modifier="-99"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
|
@ -180,7 +174,6 @@
|
|||
</race>
|
||||
<race name="owl" maxaura="0.000000" regaura="0.000000" weight="500" capacity="540" speed="1.000000" hp="9" damage="1d4" unarmedattack="0" unarmeddefense="0" attackmodifier="2" defensemodifier="4" fly="yes" walk="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="5000"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="espionage" modifier="1"/>
|
||||
<skill name="stealth" modifier="1"/>
|
||||
<skill name="perception" modifier="5"/>
|
||||
|
@ -211,7 +204,6 @@
|
|||
</race>
|
||||
<race name="fairy" magres="80" maxaura="1.000000" regaura="1.500000" weight="200" capacity="540" speed="1.000000" hp="6" damage="1d3" unarmedattack="0" unarmeddefense="0" attackmodifier="6" defensemodifier="14" fly="yes" walk="yes" teach="no" getitem="yes" equipment="yes">
|
||||
<ai splitsize="5000"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="stealth" modifier="5"/>
|
||||
<skill name="espionage" modifier="2"/>
|
||||
<skill name="perception" modifier="2"/>
|
||||
|
@ -246,7 +238,6 @@
|
|||
</race>
|
||||
<race name="dreamcat" magres="50" maxaura="1.000000" regaura="1.000000" weight="500" capacity="540" speed="1.000000" hp="10" damage="1d5" unarmedattack="0" unarmeddefense="0" attackmodifier="5" defensemodifier="6" fly="yes" walk="yes" teach="no" getitem="yes" invinciblenonmagic="yes">
|
||||
<ai splitsize="5000"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="magic" modifier="1"/>
|
||||
<skill name="espionage" modifier="1"/>
|
||||
<skill name="stealth" modifier="1"/>
|
||||
|
@ -277,7 +268,6 @@
|
|||
</race>
|
||||
<race name="imp" magres="50" maxaura="1.000000" regaura="1.000000" weight="500" capacity="540" speed="1.000000" hp="10" ac="1" damage="1d4" unarmedattack="0" unarmeddefense="0" attackmodifier="5" defensemodifier="4" fly="yes" walk="yes" teach="no" getitem="yes" equipment="yes">
|
||||
<ai splitsize="5000"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="alchemy" modifier="-99"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
<skill name="mining" modifier="-99"/>
|
||||
|
@ -310,7 +300,6 @@
|
|||
</race>
|
||||
<race name="ghost" magres="80" maxaura="0.500000" regaura="0.100000" weight="500" capacity="540" speed="1.000000" hp="30" ac="5" damage="2d6" unarmedattack="0" unarmeddefense="0" attackmodifier="5" defensemodifier="8" scarepeasants="yes" fly="yes" walk="yes" teach="no" getitem="yes" equipment="yes" invinciblenonmagic="yes">
|
||||
<ai splitsize="5000"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="alchemy" modifier="-99"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
<skill name="mining" modifier="-99"/>
|
||||
|
@ -341,8 +330,6 @@
|
|||
</race>
|
||||
<race name="wolf" maxaura="0.000000" regaura="0.000000" weight="500" capacity="540" speed="1.000000" hp="25" damage="2d6" unarmedattack="0" unarmeddefense="0" attackmodifier="6" defensemodifier="3" scarepeasants="yes" walk="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="5000"/>
|
||||
<function name="name" value="namegeneric"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="alchemy" modifier="-99"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
<skill name="mining" modifier="-99"/>
|
||||
|
@ -372,7 +359,6 @@
|
|||
</race>
|
||||
<race name="unicorn" magres="90" maxaura="1.500000" regaura="1.500000" weight="5000" capacity="2000" speed="2.000000" hp="40" damage="2d4" unarmedattack="0" unarmeddefense="0" attackmodifier="6" defensemodifier="4" walk="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="9999"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="alchemy" modifier="-99"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
<skill name="mining" modifier="-99"/>
|
||||
|
@ -403,7 +389,6 @@
|
|||
</race>
|
||||
<race name="nymph" magres="90" maxaura="1.000000" regaura="1.500000" weight="1000" capacity="540" speed="1.000000" hp="15" damage="1d4" unarmedattack="0" unarmeddefense="0" attackmodifier="3" defensemodifier="1" walk="yes" teach="no" getitem="yes" equipment="yes">
|
||||
<ai splitsize="9999"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="mining" modifier="-99"/>
|
||||
<skill name="bow" modifier="2"/>
|
||||
<skill name="building" modifier="-99"/>
|
||||
|
@ -433,7 +418,6 @@
|
|||
</race>
|
||||
<race name="songdragon" magres="99" maxaura="1.000000" regaura="1.000000" weight="1000" capacity="600" speed="1.500000" hp="40" ac="1" damage="2d4" unarmedattack="0" unarmeddefense="0" attackmodifier="3" defensemodifier="1" fly="yes" walk="yes" teach="no" getitem="yes" unarmedguard="yes">
|
||||
<ai splitsize="9999"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="alchemy" modifier="-99"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
<skill name="mining" modifier="-99"/>
|
||||
|
@ -465,7 +449,6 @@
|
|||
</race>
|
||||
<race name="rat" maxaura="0.000000" regaura="0.000000" weight="100" capacity="540" speed="1.000000" hp="10" damage="1d4" unarmedattack="0" unarmeddefense="0" attackmodifier="1" defensemodifier="1" walk="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="9999"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="espionage" modifier="5"/>
|
||||
<skill name="stealth" modifier="4"/>
|
||||
<skill name="perception" modifier="2"/>
|
||||
|
@ -497,7 +480,6 @@
|
|||
</race>
|
||||
<race name="eagle" maxaura="0.000000" regaura="0.000000" weight="500" capacity="540" speed="1.500000" hp="15" damage="2d3" unarmedattack="0" unarmeddefense="0" attackmodifier="6" defensemodifier="2" fly="yes" walk="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="9999"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="alchemy" modifier="-99"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
<skill name="mining" modifier="-99"/>
|
||||
|
@ -527,7 +509,6 @@
|
|||
</race>
|
||||
<race name="tunnelworm" magres="80" maxaura="0.000000" regaura="0.000000" weight="30000" capacity="10000" speed="1.000000" hp="300" ac="6" damage="3d20" unarmedattack="0" unarmeddefense="0" attackmodifier="6" defensemodifier="1" scarepeasants="yes" walk="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="99999"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="alchemy" modifier="-99"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
<skill name="mining" modifier="10"/>
|
||||
|
@ -560,7 +541,6 @@
|
|||
</race>
|
||||
<race name="lynx" maxaura="0.000000" regaura="0.000000" weight="500" capacity="540" speed="1.000000" hp="20" damage="2d3" unarmedattack="0" unarmeddefense="0" attackmodifier="4" defensemodifier="5" walk="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="99999"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<skill name="alchemy" modifier="-99"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
<skill name="mining" modifier="-99"/>
|
||||
|
@ -590,7 +570,6 @@
|
|||
<attack type="4" damage="2d3"/>
|
||||
</race>
|
||||
<race name="direwolf" maxaura="0.000000" regaura="0.000000" weight="500" capacity="540" speed="1.000000" hp="20" damage="2d4" unarmedattack="0" unarmeddefense="0" attackmodifier="3" defensemodifier="1" walk="yes" teach="no" giveperson="yes">
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<ai splitsize="5000"/>
|
||||
<attack type="4" damage="2d4"/>
|
||||
</race>
|
||||
|
@ -601,8 +580,6 @@
|
|||
<race name="braineater" magres="90" maxaura="1.000000"
|
||||
regaura="1.000000" weight="100" capacity="540" speed="1.000000" hp="20" damage="0d0" unarmedattack="0" unarmeddefense="0" attackmodifier="6" defensemodifier="10" scarepeasants="yes" fly="yes" walk="yes" teach="no" invinciblenonmagic="yes">
|
||||
<ai splitsize="500" killpeasants="yes" moverandom="yes" learn="yes"/>
|
||||
<function name="name" value="namegeneric"/>
|
||||
<function name="describe" value="describe_race"/>
|
||||
<attack type="2" damage="3d15"/>
|
||||
<attack type="3" damage="1d1"/>
|
||||
<attack type="4" damage="1d1"/>
|
||||
|
@ -673,19 +650,16 @@
|
|||
</race>
|
||||
<race name="mountainguard" unarmedguard="yes" magres="50" maxaura="1.000000" regaura="0.500000" weight="10000" capacity="2000" speed="0.000000" hp="1000" ac="12" damage="2d40" unarmedattack="0" unarmeddefense="0" attackmodifier="6" defensemodifier="8" cannotmove="yes" canlearn="no" teach="no" noweapons="yes">
|
||||
<ai splitsize="1"/>
|
||||
<function name="name" value="namegeneric"/>
|
||||
<attack type="4" damage="2d40"/>
|
||||
</race>
|
||||
<race name="shadowmaster" cansail="no" cansteal="no" canlearn="no" magres="75" maxaura="1.000000" regaura="2.000000" weight="500" capacity="540" speed="1.000000" hp="150" ac="4" damage="2d5" unarmedattack="0" unarmeddefense="0" attackmodifier="11" defensemodifier="13" scarepeasants="yes" walk="yes" teach="no" desert="yes">
|
||||
<ai splitsize="50" killpeasants="yes" moverandom="yes" learn="yes"/>
|
||||
<function name="name" value="namegeneric"/>
|
||||
<attack type="4" damage="2d4"/>
|
||||
<attack type="2" damage="2d30"/>
|
||||
<attack type="3" damage="1d2"/>
|
||||
</race>
|
||||
<race name="shadowdemon" cansail="no" cansteal="no" canlearn="no" magres="75" maxaura="1.000000" regaura="1.000000" weight="500" capacity="540" speed="1.000000" hp="50" ac="3" damage="2d4" unarmedattack="0" unarmeddefense="0" attackmodifier="8" defensemodifier="11" scarepeasants="yes" walk="yes" teach="no" desert="yes" recruitethereal="yes">
|
||||
<ai splitsize="1000" killpeasants="yes" moverandom="yes" learn="yes"/>
|
||||
<function name="name" value="namegeneric"/>
|
||||
<attack type="4" damage="2d3"/>
|
||||
<attack type="3" damage="1d1"/>
|
||||
</race>
|
||||
|
@ -697,7 +671,6 @@
|
|||
</race>
|
||||
<race name="irongolem" irongolem="true" magres="25" maxaura="1.000000" regaura="0.100000" weight="10000" capacity="2000" speed="1.000000" hp="50" ac="2" damage="2d10+4" unarmedattack="0" unarmeddefense="0" attackmodifier="4" defensemodifier="2" walk="yes" canlearn="no" teach="no">
|
||||
<ai splitsize="50"/>
|
||||
<function name="name" value="namegeneric"/>
|
||||
<skill name="armorer" modifier="14"/>
|
||||
<skill name="weaponsmithing" modifier="14"/>
|
||||
<attack type="4" damage="2d8+4"/>
|
||||
|
@ -712,7 +685,6 @@
|
|||
</race>
|
||||
<race name="dracoid" maxaura="1.000000" regaura="1.000000" weight="1000" capacity="540" speed="1.000000" hp="24" damage="1d5" unarmedattack="-2" unarmeddefense="-2" walk="yes" teach="no" giveperson="yes" getitem="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="name" value="namedracoid"/>
|
||||
<attack type="4" damage="1d6"/>
|
||||
<attack type="4" damage="1d6"/>
|
||||
<attack type="1" damage="1d5"/>
|
||||
|
@ -726,14 +698,11 @@
|
|||
</race>
|
||||
<race name="ent" magres="25" maxaura="1.000000" regaura="0.500000" weight="5000" capacity="2500" speed="1.000000" hp="50" ac="4" damage="2d4+12" unarmedattack="0" unarmeddefense="0" attackmodifier="9" defensemodifier="7" scarepeasants="yes" walk="yes" teach="no">
|
||||
<ai splitsize="1000" moverandom="yes" learn="yes"/>
|
||||
<function name="name" value="namegeneric"/>
|
||||
<attack type="4" damage="2d12"/>
|
||||
<attack type="4" damage="2d12"/>
|
||||
</race>
|
||||
<race name="wyrm" magres="90" maxaura="1.000000" regaura="3.000000" weight="18000" capacity="1000000" speed="1.000000" hp="2700" ac="8" damage="2d60" unarmedattack="0" unarmeddefense="0" attackmodifier="10" defensemodifier="10" scarepeasants="yes" fly="yes" walk="yes" teach="no" getitem="yes" resistbash="yes" unarmedguard="yes">
|
||||
<ai splitsize="1" killpeasants="yes" learn="yes"/>
|
||||
<function name="name" value="namedragon"/>
|
||||
<function name="move" value="movedragon"/>
|
||||
<skill name="magic" modifier="12"/>
|
||||
<skill name="tactics" modifier="12"/>
|
||||
<skill name="perception" modifier="10"/>
|
||||
|
@ -744,9 +713,6 @@
|
|||
</race>
|
||||
<race name="dragon" magres="70" maxaura="1.000000" regaura="2.000000" weight="10000" capacity="1000000" speed="1.500000" hp="900" ac="6" damage="2d30" unarmedattack="0" unarmeddefense="0" attackmodifier="7" defensemodifier="7" scarepeasants="yes" fly="yes" walk="yes" teach="no" getitem="yes" resistbash="yes" unarmedguard="yes" dragon="yes">
|
||||
<ai splitsize="2" killpeasants="yes" learn="yes"/>
|
||||
<function name="name" value="namedragon"/>
|
||||
<function name="age" value="agedragon"/>
|
||||
<function name="move" value="movedragon"/>
|
||||
<skill name="magic" modifier="8"/>
|
||||
<skill name="tactics" modifier="8"/>
|
||||
<skill name="perception" modifier="5"/>
|
||||
|
@ -757,9 +723,6 @@
|
|||
</race>
|
||||
<race name="youngdragon" magres="50" maxaura="1.000000" regaura="1.000000" weight="20000" capacity="10000" speed="1.000000" hp="300" ac="4" damage="2d15" unarmedattack="0" unarmeddefense="0" attackmodifier="4" defensemodifier="4" scarepeasants="yes" fly="yes" walk="yes" teach="no" getitem="yes" resistbash="yes" unarmedguard="yes">
|
||||
<ai splitsize="6" killpeasants="yes" learn="yes"/>
|
||||
<function name="name" value="namedragon"/>
|
||||
<function name="age" value="agefiredragon"/>
|
||||
<function name="move" value="movedragon"/>
|
||||
<skill name="magic" modifier="4"/>
|
||||
<skill name="tactics" modifier="4"/>
|
||||
<skill name="stealth" modifier="2"/>
|
||||
|
@ -769,22 +732,13 @@
|
|||
<attack type="4" damage="1d30"/>
|
||||
<attack type="6" spell="fiery_dragonbreath" level="3" />
|
||||
</race>
|
||||
<race name="illusion" maxaura="0.000000" regaura="0.000000" weight="0" capacity="0" speed="1.000000" hp="1" damage="1d1" unarmedattack="0" unarmeddefense="0" walk="yes" canlearn="no" teach="no" noweapons="yes" illusionary="yes">
|
||||
<ai splitsize="999999"/>
|
||||
<function name="age" value="ageillusion"/>
|
||||
<skill name="unarmed" modifier="-99"/>
|
||||
<attack type="1" damage="1d1"/>
|
||||
</race>
|
||||
<race name="undead" maxaura="1.000000" regaura="1.000000" weight="1000" capacity="540" speed="1.000000" hp="20" damage="1d7" unarmedattack="0" unarmeddefense="0" attackmodifier="1" defensemodifier="1" scarepeasants="yes" walk="yes" canlearn="no" teach="no" noheal="yes" undead="yes" equipment="yes">
|
||||
<ai splitsize="20000" moverandom="yes"/>
|
||||
<function name="name" value="nameundead"/>
|
||||
<function name="age" value="ageundead"/>
|
||||
<attack type="4" damage="1d7"/>
|
||||
<attack type="5"/>
|
||||
</race>
|
||||
<race name="aquarian" maxaura="1.000000" regaura="1.000000" recruitcost="80" maintenance="10" weight="1000" capacity="540" speed="1.000000" hp="20" damage="1d5" unarmedattack="-2" unarmeddefense="-2" shipspeed="yes" playerrace="yes" coastal="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<skill name="mining" modifier="-2"/>
|
||||
<skill name="building" modifier="-1"/>
|
||||
<skill name="trade" modifier="2"/>
|
||||
|
@ -803,7 +757,6 @@
|
|||
</race>
|
||||
<race name="cat" maxaura="1.000000" regaura="1.000000" recruitcost="90" maintenance="10" weight="1000" capacity="540" speed="1.000000" hp="20" damage="1d5" unarmedattack="-2" unarmeddefense="-2" defensemodifier="1" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<skill name="alchemy" modifier="-1"/>
|
||||
<skill name="mining" modifier="-2"/>
|
||||
<skill name="building" modifier="-1"/>
|
||||
|
@ -829,7 +782,6 @@
|
|||
</race>
|
||||
<race name="halfling" magres="5" maxaura="1.000000" regaura="1.000000" recruitcost="80" maintenance="10" weight="1000" capacity="540" speed="1.000000" hp="18" damage="1d5" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<param name="hunger.damage" value="1d14+14"/>
|
||||
<skill name="crossbow" modifier="1"/>
|
||||
<skill name="mining" modifier="1"/>
|
||||
|
@ -862,7 +814,6 @@
|
|||
</race>
|
||||
<race name="insect" magres="50" maxaura="1.000000" regaura="1.000000" recruitcost="80" maintenance="10" weight="1000" capacity="540" speed="1.000000" hp="24" ac="2" damage="1d5" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<skill name="crossbow" modifier="1"/>
|
||||
<skill name="mining" modifier="1"/>
|
||||
<skill name="bow" modifier="-2"/>
|
||||
|
@ -891,8 +842,6 @@
|
|||
</race>
|
||||
<race name="demon" magres="15" maxaura="1.000000" regaura="1.250000" recruitcost="150" maintenance="10" weight="1000" capacity="540" speed="1.000000" hp="50" ac="2" damage="1d5" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" shapeshift="yes" giveperson="yes" giveunit="yes" getitem="yes" recruitethereal="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<skill name="alchemy" modifier="2"/>
|
||||
<skill name="trade" modifier="-3"/>
|
||||
<skill name="forestry" modifier="1"/>
|
||||
|
@ -923,7 +872,6 @@
|
|||
</race>
|
||||
<race name="troll" magres="10" maxaura="1.000000" regaura="1.000000" recruitcost="90" maintenance="10" weight="2000" capacity="1080" speed="1.000000" hp="30" ac="1" damage="1d5+3" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<skill name="mining" modifier="2"/>
|
||||
<skill name="bow" modifier="-2"/>
|
||||
<skill name="building" modifier="2"/>
|
||||
|
@ -954,8 +902,6 @@
|
|||
</race>
|
||||
<race name="goblin" magres="-0.050000" maxaura="1.000000" regaura="1.000000" recruitcost="40" maintenance="10" weight="600" capacity="440" speed="1.000000" hp="16" damage="1d5" unarmedattack="-2" unarmeddefense="0" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="initfamiliar" value="oldfamiliars"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<skill name="alchemy" modifier="1"/>
|
||||
<skill name="mining" modifier="1"/>
|
||||
<skill name="building" modifier="1"/>
|
||||
|
@ -1039,7 +985,6 @@
|
|||
</race>
|
||||
<race name="ghast" magres="60" maxaura="1.000000" regaura="1.000000" weight="1000" capacity="540" speed="1.000000" hp="60" ac="2" damage="1d7" unarmedattack="6" unarmeddefense="6" attackmodifier="6" defensemodifier="6" scarepeasants="yes" walk="yes" canlearn="no" teach="no" absorbpeasants="yes" noheal="yes" undead="yes" equipment="yes">
|
||||
<ai splitsize="2000" killpeasants="yes" moverandom="yes"/>
|
||||
<function name="name" value="nameghoul"/>
|
||||
<skill name="crossbow" modifier="1"/>
|
||||
<skill name="bow" modifier="1"/>
|
||||
<skill name="catapult" modifier="1"/>
|
||||
|
@ -1057,8 +1002,6 @@
|
|||
</race>
|
||||
<race name="ghoul" magres="30" maxaura="1.000000" regaura="1.000000" weight="1000" capacity="540" speed="1.000000" hp="30" ac="1" damage="1d7" unarmedattack="3" unarmeddefense="3" attackmodifier="3" defensemodifier="3" scarepeasants="yes" walk="yes" canlearn="no" teach="no" absorbpeasants="yes" noheal="yes" undead="yes" equipment="yes">
|
||||
<ai splitsize="10000" killpeasants="yes" moverandom="yes"/>
|
||||
<function name="name" value="nameghoul"/>
|
||||
<function name="age" value="ageghoul"/>
|
||||
<skill name="crossbow" modifier="1"/>
|
||||
<skill name="bow" modifier="1"/>
|
||||
<skill name="catapult" modifier="1"/>
|
||||
|
@ -1073,9 +1016,8 @@
|
|||
<attack type="3" damage="1d2"/>
|
||||
<attack type="2" damage="1d30"/>
|
||||
</race>
|
||||
<race name="juju-zombie" magres="50" maxaura="1.000000" regaura="1.000000" weight="1000" capacity="540" speed="1.000000" hp="80" ac="2" damage="1d7" unarmedattack="6" unarmeddefense="6" attackmodifier="8" defensemodifier="8" scarepeasants="yes" walk="yes" canlearn="no" teach="no" absorbpeasants="yes" noheal="yes" undead="yes" equipment="yes" resistbash="yes" resistcut="yes" resistpierce="yes">
|
||||
<race name="juju" magres="50" maxaura="1.000000" regaura="1.000000" weight="1000" capacity="540" speed="1.000000" hp="80" ac="2" damage="1d7" unarmedattack="6" unarmeddefense="6" attackmodifier="8" defensemodifier="8" scarepeasants="yes" walk="yes" canlearn="no" teach="no" absorbpeasants="yes" noheal="yes" undead="yes" equipment="yes" resistbash="yes" resistcut="yes" resistpierce="yes">
|
||||
<ai splitsize="2000" killpeasants="yes" moverandom="yes"/>
|
||||
<function name="name" value="namezombie"/>
|
||||
<skill name="crossbow" modifier="1"/>
|
||||
<skill name="bow" modifier="1"/>
|
||||
<skill name="catapult" modifier="1"/>
|
||||
|
@ -1091,8 +1033,6 @@
|
|||
</race>
|
||||
<race name="zombie" magres="20" maxaura="1.000000" regaura="1.000000" weight="1000" capacity="540" speed="1.000000" hp="40" ac="1" damage="1d7" unarmedattack="2" unarmeddefense="2" attackmodifier="5" defensemodifier="5" scarepeasants="yes" walk="yes" canlearn="no" teach="no" noheal="yes" undead="yes" equipment="yes" resistcut="yes" resistpierce="yes">
|
||||
<ai splitsize="10000" killpeasants="yes" moverandom="yes"/>
|
||||
<function name="name" value="namezombie"/>
|
||||
<function name="age" value="agezombie"/>
|
||||
<skill name="crossbow" modifier="1"/>
|
||||
<skill name="bow" modifier="1"/>
|
||||
<skill name="catapult" modifier="1"/>
|
||||
|
@ -1106,7 +1046,6 @@
|
|||
</race>
|
||||
<race name="skeletonlord" magres="30" maxaura="1.000000" regaura="1.000000" weight="1000" capacity="540" speed="1.000000" hp="60" ac="4" damage="1d7" unarmedattack="6" unarmeddefense="6" attackmodifier="8" defensemodifier="8" scarepeasants="yes" walk="yes" canlearn="no" teach="no" absorbpeasants="yes" noheal="yes" undead="yes" equipment="yes" resistcut="yes" resistpierce="yes">
|
||||
<ai splitsize="2000" killpeasants="yes" moverandom="yes"/>
|
||||
<function name="name" value="nameskeleton"/>
|
||||
<skill name="crossbow" modifier="1"/>
|
||||
<skill name="bow" modifier="1"/>
|
||||
<skill name="catapult" modifier="1"/>
|
||||
|
@ -1121,8 +1060,6 @@
|
|||
</race>
|
||||
<race name="skeleton" magres="10" maxaura="1.000000" regaura="1.000000" weight="500" capacity="540" speed="1.000000" hp="20" ac="1" damage="1d7" unarmedattack="1" unarmeddefense="1" attackmodifier="6" defensemodifier="6" scarepeasants="yes" walk="yes" canlearn="no" teach="no" noheal="yes" undead="yes" equipment="yes" resistcut="yes" resistpierce="yes">
|
||||
<ai splitsize="10000" killpeasants="yes" moverandom="yes"/>
|
||||
<function name="name" value="nameskeleton"/>
|
||||
<function name="age" value="ageskeleton"/>
|
||||
<skill name="crossbow" modifier="1"/>
|
||||
<skill name="bow" modifier="1"/>
|
||||
<skill name="catapult" modifier="1"/>
|
||||
|
@ -1136,13 +1073,10 @@
|
|||
</race>
|
||||
<race name="shadowknight" maxaura="0.000000" regaura="0.000000" weight="1000" capacity="540" speed="1.000000" hp="1" damage="1d1" unarmedattack="0" unarmeddefense="0" attackmodifier="1" defensemodifier="1" scarepeasants="yes" walk="yes" canlearn="no" teach="no" noblock="yes">
|
||||
<ai splitsize="20000" moverandom="yes"/>
|
||||
<function name="name" value="namegeneric"/>
|
||||
<attack type="1" damage="1d1"/>
|
||||
</race>
|
||||
<race name="seaserpent" magres="50" maxaura="1.000000" regaura="1.000000" weight="20000" capacity="5000" speed="1.000000" hp="600" ac="3" damage="2d15" unarmedattack="0" unarmeddefense="0" attackmodifier="4" defensemodifier="4" scarepeasants="yes" swim="yes" teach="no" getitem="yes" resistbash="yes" unarmedguard="yes">
|
||||
<ai splitsize="6" killpeasants="yes" moverandom="yes" learn="yes" moveattack="yes"/>
|
||||
<function name="name" value="namegeneric"/>
|
||||
<function name="move" value="moveswimming"/>
|
||||
<skill name="tactics" modifier="4"/>
|
||||
<attack type="4" damage="1d30"/>
|
||||
<attack type="4" damage="1d30"/>
|
||||
|
@ -1154,7 +1088,6 @@
|
|||
<race name="snotling" magres="-5" maxaura="1.000000" regaura="1.000000"
|
||||
maintenance="10" weight="1000" capacity="540" speed="1.000000" hp="24" damage="1d5" unarmedattack="-2" unarmeddefense="-2" playerrace="no" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<skill name="alchemy" modifier="1"/>
|
||||
<skill name="mining" modifier="1"/>
|
||||
<skill name="building" modifier="1"/>
|
||||
|
@ -1184,7 +1117,6 @@
|
|||
</race>
|
||||
<race name="elf" magres="10" maxaura="1.000000" regaura="1.250000" recruitcost="130" maintenance="10" weight="1000" capacity="540" speed="1.000000" hp="18" damage="1d5" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<skill name="alchemy" modifier="-1"/>
|
||||
<skill name="mining" modifier="-2"/>
|
||||
<skill name="bow" modifier="2"/>
|
||||
|
@ -1211,7 +1143,6 @@
|
|||
</race>
|
||||
<race name="dwarf" magres="5" maxaura="1.000000" regaura="0.500000" recruitcost="110" maintenance="10" weight="1000" capacity="540" speed="1.000000" hp="24" damage="1d5" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<skill name="mining" modifier="2"/>
|
||||
<skill name="bow" modifier="-1"/>
|
||||
<skill name="building" modifier="2"/>
|
||||
|
@ -1273,8 +1204,6 @@
|
|||
</race>
|
||||
<race name="shadowdragon" magres="95" maxaura="1.000000" regaura="3.000000" weight="100" capacity="100000" speed="1.000000" hp="2700" ac="10" damage="2d60" unarmedattack="0" unarmeddefense="0" attackmodifier="10" defensemodifier="12" scarepeasants="yes" fly="yes" walk="yes" teach="no" getitem="yes" resistbash="yes">
|
||||
<ai splitsize="1" killpeasants="yes" learn="yes"/>
|
||||
<function name="name" value="namedragon"/>
|
||||
<function name="move" value="movedragon"/>
|
||||
<skill name="tactics" modifier="20"/>
|
||||
<skill name="perception" modifier="20"/>
|
||||
<attack type="4" damage="5d30"/>
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" ?>
|
||||
<race name="aquarian" maxaura="1.000000" regaura="1.000000" recruitcost="80" maintenance="10" weight="1000" capacity="540" speed="1.000000" hp="20" damage="1d5" unarmedattack="-2" unarmeddefense="-2" shipspeed="yes" playerrace="yes" coastal="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<skill name="mining" modifier="-2"/>
|
||||
<skill name="building" modifier="-1"/>
|
||||
<skill name="trade" modifier="2"/>
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" encoding="iso-8859-1" ?>
|
||||
<race name="cat" maxaura="1.000000" regaura="1.000000" recruitcost="90" maintenance="10" weight="1000" capacity="540" speed="1.000000" hp="20" damage="1d5" unarmedattack="-2" unarmeddefense="-2" defensemodifier="1" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<skill name="alchemy" modifier="-1"/>
|
||||
<skill name="mining" modifier="-2"/>
|
||||
<skill name="building" modifier="-1"/>
|
||||
|
|
|
@ -6,7 +6,6 @@ unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes"
|
|||
shapeshift="yes" giveperson="yes" giveunit="yes" getitem="yes"
|
||||
recruitethereal="yes" equipment="yes" healing="1.5">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<skill name="alchemy" modifier="2"/>
|
||||
<skill name="trade" modifier="-3"/>
|
||||
<skill name="forestry" modifier="1"/>
|
||||
|
|
|
@ -5,8 +5,6 @@ income="1000" walk="yes" teach="no" getitem="yes" resistbash="yes"
|
|||
dragon="yes">
|
||||
<ai splitsize="2" killpeasants="yes" learn="yes" scare="400"/>
|
||||
<function name="name" value="namedragon"/>
|
||||
<function name="age" value="agedragon"/>
|
||||
<function name="move" value="movedragon"/>
|
||||
<skill name="magic" modifier="8"/>
|
||||
<skill name="tactics" modifier="8"/>
|
||||
<attack type="4" damage="2d20"/>
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" ?>
|
||||
<race name="dwarf" magres="5" maxaura="1.000000" regaura="0.500000" recruitcost="110" maintenance="10" weight="1000" capacity="540" speed="1.000000" hp="24" damage="1d5" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<skill name="mining" modifier="2"/>
|
||||
<skill name="bow" modifier="-1"/>
|
||||
<skill name="building" modifier="2"/>
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" ?>
|
||||
<race name="elf" magres="10" maxaura="1.000000" regaura="1.250000" recruitcost="130" maintenance="10" weight="1000" capacity="540" speed="1.000000" hp="18" damage="1d5" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<skill name="alchemy" modifier="-1"/>
|
||||
<skill name="mining" modifier="-2"/>
|
||||
<skill name="bow" modifier="2"/>
|
||||
|
|
|
@ -5,7 +5,6 @@ speed="1.0" hp="16" damage="1d5" unarmedattack="-2" unarmeddefense="0"
|
|||
playerrace="yes" walk="yes" giveperson="yes" giveunit="yes"
|
||||
getitem="yes" equipment="yes" healing="2.0">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<param name="hunger.damage" value="1d8+7"/>
|
||||
<param name="other_race" value="demon"/>
|
||||
<param name="recruit_multi" value="0.5"/>
|
||||
|
|
|
@ -5,7 +5,6 @@ speed="1.0" hp="16" damage="1d5" unarmedattack="-2" unarmeddefense="0"
|
|||
playerrace="yes" walk="yes" giveperson="yes" giveunit="yes"
|
||||
getitem="yes" equipment="yes" healing="2.0">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<param name="hunger.damage" value="1d8+7"/>
|
||||
<param name="other_race" value="demon"/>
|
||||
<param name="recruit_multi" value="0.5"/>
|
||||
|
|
|
@ -6,7 +6,6 @@ unarmedattack="-2" unarmeddefense="0" playerrace="yes" walk="yes"
|
|||
giveperson="yes" giveunit="yes" getitem="yes" equipment="yes"
|
||||
healing="2.0">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<skill name="alchemy" modifier="1"/>
|
||||
<skill name="mining" modifier="1"/>
|
||||
<skill name="building" modifier="1"/>
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" ?>
|
||||
<race name="halfling" magres="5" maxaura="1.000000" regaura="1.000000" recruitcost="80" maintenance="10" weight="1000" capacity="540" speed="1.000000" hp="18" damage="1d5" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<param name="hunger.damage" value="1d14+14"/>
|
||||
<skill name="crossbow" modifier="1"/>
|
||||
<skill name="mining" modifier="1"/>
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" ?>
|
||||
<race name="human" maxaura="1.000000" regaura="1.000000" recruitcost="75" maintenance="10" weight="1000" capacity="540" speed="1.000000" hp="20" damage="1d5" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<skill name="trade" modifier="1"/>
|
||||
<skill name="herbalism" modifier="-1"/>
|
||||
<skill name="shipcraft" modifier="1"/>
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" ?>
|
||||
<race name="insect" magres="5" maxaura="1.000000" regaura="1.000000" recruitcost="80" maintenance="10" weight="1000" capacity="540" speed="1.000000" hp="24" ac="2" damage="1d5" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<skill name="crossbow" modifier="1"/>
|
||||
<skill name="mining" modifier="1"/>
|
||||
<skill name="bow" modifier="-2"/>
|
||||
|
|
|
@ -6,7 +6,6 @@ unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes"
|
|||
giveperson="yes" giveunit="yes" getitem="yes" equipment="yes"
|
||||
healing="1.5">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<skill name="mining" modifier="2"/>
|
||||
<skill name="bow" modifier="-2"/>
|
||||
<skill name="building" modifier="2"/>
|
||||
|
|
|
@ -5,7 +5,6 @@ defensemodifier="10" scarepeasants="yes" fly="yes" walk="yes"
|
|||
teach="no" getitem="yes" resistbash="yes" dragon="yes" income="5000">
|
||||
<ai splitsize="1" killpeasants="yes" learn="yes" scare="1000"/>
|
||||
<function name="name" value="namedragon"/>
|
||||
<function name="move" value="movedragon"/>
|
||||
<skill name="magic" modifier="12"/>
|
||||
<skill name="tactics" modifier="12"/>
|
||||
<attack type="4" damage="3d20"/>
|
||||
|
|
|
@ -5,8 +5,6 @@ defensemodifier="4" scarepeasants="yes" fly="yes" walk="yes"
|
|||
teach="no" getitem="yes" resistbash="yes" dragon="yes" income="150">
|
||||
<ai splitsize="6" killpeasants="yes" learn="yes" scare="160"/>
|
||||
<function name="name" value="namedragon"/>
|
||||
<function name="age" value="agefiredragon"/>
|
||||
<function name="move" value="movedragon"/>
|
||||
<skill name="magic" modifier="4"/>
|
||||
<skill name="tactics" modifier="4"/>
|
||||
<attack type="4" damage="1d30"/>
|
||||
|
|
|
@ -4,7 +4,8 @@ if config.install then
|
|||
end
|
||||
if config.rules then
|
||||
local rules = config.rules .. '/'
|
||||
assert(0 == read_xml(confdir .. rules .. 'config.xml', confdir .. rules .. 'catalog.xml'), "could not load XML data, did you compile with LIBXML2 ?")
|
||||
assert(0 == eressea.config.read(rules .. 'config.json', confdir), "could not read JSON data")
|
||||
assert(0 == read_xml(confdir .. rules .. 'rules.xml', confdir .. rules .. 'catalog.xml'), "could not load XML data, did you compile with LIBXML2 ?")
|
||||
assert(0 == read_xml(confdir .. rules .. 'locales.xml', confdir .. rules .. 'catalog.xml'), "could not load XML data, did you compile with LIBXML2 ?")
|
||||
end
|
||||
eressea.game.reset()
|
||||
|
|
|
@ -925,14 +925,12 @@ void kill_troop(troop dt)
|
|||
if (!df->alive) {
|
||||
char eqname[64];
|
||||
const struct equipment *eq;
|
||||
if (u_race(du)->itemdrop) {
|
||||
item *drops = u_race(du)->itemdrop(u_race(du), du->number - df->run.number);
|
||||
|
||||
const race *rc = u_race(du);
|
||||
item *drops = item_spoil(rc, du->number - df->run.number);
|
||||
if (drops != NULL) {
|
||||
i_merge(&du->items, &drops);
|
||||
}
|
||||
}
|
||||
sprintf(eqname, "%s_spoils", u_race(du)->_name);
|
||||
sprintf(eqname, "%s_spoils", rc->_name);
|
||||
eq = get_equipment(eqname);
|
||||
if (eq != NULL) {
|
||||
equip_items(&du->items, eq);
|
||||
|
|
|
@ -1175,7 +1175,7 @@ attrib_type at_resourcelimit = {
|
|||
finalize_resourcelimit,
|
||||
};
|
||||
|
||||
static item *default_spoil(const struct race *rc, int size)
|
||||
item *item_spoil(const struct race *rc, int size)
|
||||
{
|
||||
item *itm = NULL;
|
||||
|
||||
|
@ -1303,7 +1303,6 @@ void register_resources(void)
|
|||
register_function((pf_generic)res_changepermaura, "changepermaura");
|
||||
register_function((pf_generic)res_changehp, "changehp");
|
||||
register_function((pf_generic)res_changeaura, "changeaura");
|
||||
register_function((pf_generic)default_spoil, "defaultdrops");
|
||||
|
||||
register_item_use(use_potion, "usepotion");
|
||||
register_item_use(use_potion_delayed, "usepotion_delayed");
|
||||
|
|
|
@ -309,6 +309,7 @@ extern "C" {
|
|||
|
||||
extern const struct potion_type *oldpotiontype[];
|
||||
const struct resource_type *get_resourcetype(resource_t rt);
|
||||
struct item *item_spoil(const struct race *rc, int size);
|
||||
|
||||
int get_item(const struct unit * u, const struct item_type *itype);
|
||||
int set_item(struct unit * u, const struct item_type *itype, int value);
|
||||
|
|
|
@ -66,7 +66,7 @@ static int rc_changes = 1;
|
|||
|
||||
static const char *racenames[MAXRACES] = {
|
||||
"dwarf", "elf", NULL, "goblin", "human", "troll", "demon", "insect",
|
||||
"halfling", "cat", "aquarian", "orc", "snotling", "undead", "illusion",
|
||||
"halfling", "cat", "aquarian", "orc", "snotling", "undead", NULL,
|
||||
"youngdragon", "dragon", "wyrm", "ent", "catdragon", "dracoid",
|
||||
NULL, "spell", "irongolem", "stonegolem", "shadowdemon",
|
||||
"shadowmaster", "mountainguard", "alp", "toad", "braineater", "peasant",
|
||||
|
@ -74,7 +74,7 @@ static const char *racenames[MAXRACES] = {
|
|||
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, "seaserpent",
|
||||
"shadowknight", NULL, "skeleton", "skeletonlord", "zombie",
|
||||
"juju-zombie", "ghoul", "ghast", NULL, NULL, "template",
|
||||
"juju", "ghoul", "ghast", NULL, NULL, "template",
|
||||
"clone"
|
||||
};
|
||||
|
||||
|
@ -226,7 +226,7 @@ race_list *get_familiarraces(void)
|
|||
if (!init) {
|
||||
race *rc = races;
|
||||
for (; rc != NULL; rc = rc->next) {
|
||||
if (rc->init_familiar != NULL) {
|
||||
if (rc->flags & RCF_FAMILIAR) {
|
||||
racelist_insert(&familiarraces, rc);
|
||||
}
|
||||
}
|
||||
|
@ -296,9 +296,16 @@ static race *rc_find_i(const char *name)
|
|||
while (rc && strcmp(rname, rc->_name) != 0) {
|
||||
rc = rc->next;
|
||||
}
|
||||
if (!rc && strcmp(name, "uruk") == 0) {
|
||||
rc = rc_find_i("orc");
|
||||
if (!rc) {
|
||||
const char *rc_depr[] = { "uruk", "orc", "illusion", "template", "juju-zombie", "juju", NULL };
|
||||
int i;
|
||||
for (i = 0; rc_depr[i]; i += 2) {
|
||||
if (strcmp(name, rc_depr[i]) == 0) {
|
||||
rc = rc_find_i(rc_depr[i + 1]);
|
||||
log_warning("a reference was made to the retired race '%s', returning '%s'.", name, rc->_name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
@ -320,6 +327,7 @@ race *rc_create(const char *zName)
|
|||
{
|
||||
race *rc;
|
||||
int i;
|
||||
char zText[64];
|
||||
|
||||
assert(zName);
|
||||
rc = (race *)calloc(sizeof(race), 1);
|
||||
|
@ -343,6 +351,13 @@ race *rc_create(const char *zName)
|
|||
rc->index = num_races++;
|
||||
++rc_changes;
|
||||
rc->next = races;
|
||||
|
||||
snprintf(zText, sizeof(zText), "age_%s", zName);
|
||||
rc->age_unit = (race_func)get_function(zText);
|
||||
|
||||
snprintf(zText, sizeof(zText), "name_%s", zName);
|
||||
rc->name_unit = (race_func)get_function(zText);
|
||||
|
||||
return races = rc;
|
||||
}
|
||||
|
||||
|
@ -542,10 +557,6 @@ variant read_race_reference(struct storage *store)
|
|||
return result;
|
||||
}
|
||||
|
||||
void register_race_description_function(race_desc_func func, const char *name) {
|
||||
register_function((pf_generic)func, name);
|
||||
}
|
||||
|
||||
void register_race_name_function(race_name_func func, const char *name) {
|
||||
void register_race_function(race_func func, const char *name) {
|
||||
register_function((pf_generic)func, name);
|
||||
}
|
||||
|
|
|
@ -65,8 +65,8 @@ extern "C" {
|
|||
RC_ORC,
|
||||
RC_SNOTLING,
|
||||
RC_UNDEAD,
|
||||
RC_ILLUSION,
|
||||
RC_FIREDRAGON,
|
||||
|
||||
RC_FIREDRAGON = 15,
|
||||
RC_DRAGON,
|
||||
RC_WYRM,
|
||||
RC_TREEMAN,
|
||||
|
@ -112,8 +112,7 @@ extern "C" {
|
|||
int level;
|
||||
} att;
|
||||
|
||||
typedef const char *(*race_desc_func)(const struct race *rc, const struct locale *lang);
|
||||
typedef void (*race_name_func)(struct unit *);
|
||||
typedef void (*race_func) (struct unit *);
|
||||
|
||||
typedef struct race {
|
||||
char *_name;
|
||||
|
@ -144,12 +143,8 @@ extern "C" {
|
|||
struct att attack[RACE_ATTACKS];
|
||||
signed char bonus[MAXSKILLS];
|
||||
|
||||
race_name_func generate_name;
|
||||
race_desc_func describe;
|
||||
void(*age) (struct unit * u);
|
||||
bool(*move_allowed) (const struct region *, const struct region *);
|
||||
struct item *(*itemdrop) (const struct race *, int size);
|
||||
void(*init_familiar) (struct unit *);
|
||||
race_func name_unit;
|
||||
race_func age_unit;
|
||||
|
||||
struct rcoption *options; /* rarely used properties */
|
||||
|
||||
|
@ -230,6 +225,7 @@ extern "C" {
|
|||
#define RCF_IRONGOLEM (1<<28) /* race gets irongolem properties */
|
||||
#define RCF_ATTACK_MOVED (1<<29) /* may attack if it has moved */
|
||||
#define RCF_MIGRANTS (1<<30) /* may have migrant units (human bonus) */
|
||||
#define RCF_FAMILIAR (1<<31) /* may be a familiar */
|
||||
|
||||
/* Economic flags */
|
||||
#define ECF_KEEP_ITEM (1<<1) /* gibt Gegenst<73>nde weg */
|
||||
|
@ -266,8 +262,7 @@ extern "C" {
|
|||
variant read_race_reference(struct storage *store);
|
||||
|
||||
const char *raceprefix(const struct unit *u);
|
||||
void register_race_name_function(race_name_func, const char *);
|
||||
void register_race_description_function(race_desc_func, const char *);
|
||||
void register_race_function(race_func, const char *);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -695,17 +695,6 @@ unit *read_unit(struct gamedata *data)
|
|||
else
|
||||
u->irace = NULL;
|
||||
|
||||
if (rc->describe) {
|
||||
const char *rcdisp = rc->describe(rc, u->faction->locale);
|
||||
if (u->display && rcdisp) {
|
||||
/* see if the data file contains old descriptions */
|
||||
if (strcmp(rcdisp, u->display) == 0) {
|
||||
free(u->display);
|
||||
u->display = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
READ_INT(data->store, &n);
|
||||
if (n > 0) {
|
||||
building * b = findbuilding(n);
|
||||
|
|
|
@ -531,8 +531,15 @@ const char *u_description(const unit * u, const struct locale *lang)
|
|||
if (u->display && u->display[0]) {
|
||||
return u->display;
|
||||
}
|
||||
else if (u_race(u)->describe) {
|
||||
return u_race(u)->describe(u->_race, lang);
|
||||
else {
|
||||
char zText[64];
|
||||
const char * d;
|
||||
const race * rc = u_race(u);
|
||||
snprintf(zText, sizeof(zText), "describe_%s", rc->_name);
|
||||
d = locale_getstring(lang, zText);
|
||||
if (d) {
|
||||
return d;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
@ -1453,8 +1460,11 @@ void default_name(const unit *u, char name[], int len) {
|
|||
void name_unit(unit * u)
|
||||
{
|
||||
const race *rc = u_race(u);
|
||||
if (rc->generate_name) {
|
||||
rc->generate_name(u);
|
||||
if (rc->name_unit) {
|
||||
rc->name_unit(u);
|
||||
}
|
||||
else if (u->faction->flags & FFL_NPC) {
|
||||
unit_setname(u, NULL);
|
||||
}
|
||||
else {
|
||||
char name[32];
|
||||
|
@ -1507,7 +1517,7 @@ unit *create_unit(region * r, faction * f, int number, const struct race *urace,
|
|||
if (dname) {
|
||||
u->_name = strdup(dname);
|
||||
}
|
||||
else if (urace->generate_name || playerrace(urace)) {
|
||||
else if (urace->name_unit || playerrace(urace)) {
|
||||
name_unit(u);
|
||||
}
|
||||
|
||||
|
|
|
@ -390,14 +390,24 @@ static void test_limited_skills(CuTest *tc) {
|
|||
static void test_unit_description(CuTest *tc) {
|
||||
race *rc;
|
||||
unit *u;
|
||||
struct locale *lang;
|
||||
|
||||
test_setup();
|
||||
lang = test_create_locale();
|
||||
rc = test_create_race("hodor");
|
||||
u = test_create_unit(test_create_faction(rc), test_create_region(0,0,0));
|
||||
|
||||
CuAssertPtrEquals(tc, 0, u->display);
|
||||
CuAssertStrEquals(tc, 0, u_description(u, u->faction->locale));
|
||||
CuAssertStrEquals(tc, 0, u_description(u, lang));
|
||||
u->display = strdup("Hodor");
|
||||
CuAssertStrEquals(tc, "Hodor", u_description(u, NULL));
|
||||
CuAssertStrEquals(tc, "Hodor", u_description(u, u->faction->locale));
|
||||
CuAssertStrEquals(tc, "Hodor", u_description(u, lang));
|
||||
|
||||
free(u->display);
|
||||
u->display = NULL;
|
||||
locale_setstring(lang, "describe_hodor", "HODOR");
|
||||
CuAssertStrEquals(tc, "HODOR", u_description(u, lang));
|
||||
|
||||
test_cleanup();
|
||||
}
|
||||
|
||||
|
@ -477,7 +487,7 @@ static void test_name_unit(CuTest *tc) {
|
|||
test_setup();
|
||||
rc = test_create_race("skeleton");
|
||||
u = test_create_unit(test_create_faction(rc), test_create_region(0, 0, 0));
|
||||
rc->generate_name = gen_name;
|
||||
rc->name_unit = gen_name;
|
||||
name_unit(u);
|
||||
CuAssertStrEquals(tc, "Hodor", unit_getname(u));
|
||||
test_cleanup();
|
||||
|
|
|
@ -1778,46 +1778,6 @@ static int parse_races(xmlDocPtr doc)
|
|||
}
|
||||
xmlXPathFreeObject(result);
|
||||
|
||||
/* reading eressea/races/race/function */
|
||||
xpath->node = node;
|
||||
result = xmlXPathEvalExpression(BAD_CAST "function", xpath);
|
||||
for (k = 0; k != result->nodesetval->nodeNr; ++k) {
|
||||
xmlNodePtr node = result->nodesetval->nodeTab[k];
|
||||
pf_generic fun;
|
||||
|
||||
parse_function(node, &fun, &propValue);
|
||||
if (fun == NULL) {
|
||||
log_error("unknown function name '%s' for race %s\n", (const char *)propValue, rc->_name);
|
||||
xmlFree(propValue);
|
||||
continue;
|
||||
}
|
||||
assert(propValue != NULL);
|
||||
if (strcmp((const char *)propValue, "name") == 0) {
|
||||
rc->generate_name = (race_name_func)fun;
|
||||
}
|
||||
else if (strcmp((const char *)propValue, "describe") == 0) {
|
||||
rc->describe = (race_desc_func)fun;
|
||||
}
|
||||
else if (strcmp((const char *)propValue, "age") == 0) {
|
||||
rc->age = (void(*)(struct unit *))fun;
|
||||
}
|
||||
else if (strcmp((const char *)propValue, "move") == 0) {
|
||||
rc->move_allowed =
|
||||
(bool(*)(const struct region *, const struct region *))fun;
|
||||
}
|
||||
else if (strcmp((const char *)propValue, "itemdrop") == 0) {
|
||||
rc->itemdrop = (struct item * (*)(const struct race *, int))fun;
|
||||
}
|
||||
else if (strcmp((const char *)propValue, "initfamiliar") == 0) {
|
||||
rc->init_familiar = (void(*)(struct unit *))fun;
|
||||
}
|
||||
else {
|
||||
log_error("unknown function type '%s' for race %s\n", (const char *)propValue, rc->_name);
|
||||
}
|
||||
xmlFree(propValue);
|
||||
}
|
||||
xmlXPathFreeObject(result);
|
||||
|
||||
/* reading eressea/races/race/familiar */
|
||||
xpath->node = node;
|
||||
result = xmlXPathEvalExpression(BAD_CAST "familiar", xpath);
|
||||
|
@ -1832,6 +1792,7 @@ static int parse_races(xmlDocPtr doc)
|
|||
propValue = xmlGetProp(node, BAD_CAST "race");
|
||||
assert(propValue != NULL);
|
||||
frc = rc_get_or_create((const char *)propValue);
|
||||
frc->flags |= RCF_FAMILIAR;
|
||||
if (xml_bvalue(node, "default", false)) {
|
||||
rc->familiars[k] = rc->familiars[0];
|
||||
rc->familiars[0] = frc;
|
||||
|
|
|
@ -164,9 +164,10 @@ static void age_unit(region * r, unit * u)
|
|||
}
|
||||
}
|
||||
else {
|
||||
const race *rc = u_race(u);
|
||||
++u->age;
|
||||
if (u->number > 0 && u_race(u)->age) {
|
||||
u_race(u)->age(u);
|
||||
if (u->number > 0 && rc->age_unit) {
|
||||
rc->age_unit(u);
|
||||
}
|
||||
}
|
||||
if (u->region && is_astral(u->region)) {
|
||||
|
|
51
src/names.c
51
src/names.c
|
@ -45,13 +45,6 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
static const char *describe_race(const race * rc, const struct locale *lang)
|
||||
{
|
||||
char zText[32];
|
||||
sprintf(zText, "describe_%s", rc->_name);
|
||||
return locale_getstring(lang, zText);
|
||||
}
|
||||
|
||||
static void count_particles(const char *monster, int *num_prefix, int *num_name, int *num_postfix)
|
||||
{
|
||||
char zText[32];
|
||||
|
@ -219,11 +212,6 @@ const char *silbe3[SIL3] = {
|
|||
"bus",
|
||||
};
|
||||
|
||||
static void generic_name(unit * u)
|
||||
{
|
||||
unit_setname(u, NULL);
|
||||
}
|
||||
|
||||
static void dragon_name(unit * u)
|
||||
{
|
||||
char name[NAMESIZE + 1];
|
||||
|
@ -395,29 +383,29 @@ const char *abkz(const char *s, char *buf, size_t buflen, size_t maxchars)
|
|||
int result;
|
||||
|
||||
UNUSED_ARG(buflen);
|
||||
/* Prüfen, ob Kurz genug */
|
||||
/* Pr<EFBFBD>fen, ob Kurz genug */
|
||||
if (strlen(s) <= maxchars) {
|
||||
return s;
|
||||
}
|
||||
/* Anzahl der Wörter feststellen */
|
||||
/* Anzahl der W<EFBFBD>rter feststellen */
|
||||
|
||||
while (*p != 0) {
|
||||
|
||||
result = unicode_utf8_to_ucs4(&ucs, p, &size);
|
||||
assert(result == 0 || "damnit, we're not handling invalid input here!");
|
||||
|
||||
/* Leerzeichen überspringen */
|
||||
/* Leerzeichen <EFBFBD>berspringen */
|
||||
while (*p != 0 && !iswalnum((wint_t)ucs)) {
|
||||
p += size;
|
||||
result = unicode_utf8_to_ucs4(&ucs, p, &size);
|
||||
assert(result == 0 || "damnit, we're not handling invalid input here!");
|
||||
}
|
||||
|
||||
/* Counter erhöhen */
|
||||
/* Counter erh<EFBFBD>hen */
|
||||
if (*p != 0)
|
||||
++c;
|
||||
|
||||
/* alnums überspringen */
|
||||
/* alnums <EFBFBD>berspringen */
|
||||
while (*p != 0 && iswalnum((wint_t)ucs)) {
|
||||
p += size;
|
||||
result = unicode_utf8_to_ucs4(&ucs, p, &size);
|
||||
|
@ -425,10 +413,10 @@ const char *abkz(const char *s, char *buf, size_t buflen, size_t maxchars)
|
|||
}
|
||||
}
|
||||
|
||||
/* Buchstaben pro Teilkürzel = MAX(1,max/AnzWort) */
|
||||
/* Buchstaben pro Teilk<EFBFBD>rzel = MAX(1,max/AnzWort) */
|
||||
bpt = (c > 0) ? MAX(1, maxchars / c) : 1;
|
||||
|
||||
/* Einzelne Wörter anspringen und jeweils die ersten BpT kopieren */
|
||||
/* Einzelne W<EFBFBD>rter anspringen und jeweils die ersten BpT kopieren */
|
||||
|
||||
p = s;
|
||||
c = 0;
|
||||
|
@ -438,7 +426,7 @@ const char *abkz(const char *s, char *buf, size_t buflen, size_t maxchars)
|
|||
assert(result == 0 || "damnit, we're not handling invalid input here!");
|
||||
|
||||
while (*p != 0 && c < maxchars) {
|
||||
/* Leerzeichen überspringen */
|
||||
/* Leerzeichen <EFBFBD>berspringen */
|
||||
|
||||
while (*p != 0 && !iswalnum((wint_t)ucs)) {
|
||||
p += size;
|
||||
|
@ -446,7 +434,7 @@ const char *abkz(const char *s, char *buf, size_t buflen, size_t maxchars)
|
|||
assert(result == 0 || "damnit, we're not handling invalid input here!");
|
||||
}
|
||||
|
||||
/* alnums übertragen */
|
||||
/* alnums <EFBFBD>bertragen */
|
||||
|
||||
for (i = 0; i < bpt && *p != 0 && iswalnum((wint_t)ucs); ++i) {
|
||||
memcpy(bufp, p, size);
|
||||
|
@ -458,7 +446,7 @@ const char *abkz(const char *s, char *buf, size_t buflen, size_t maxchars)
|
|||
assert(result == 0 || "damnit, we're not handling invalid input here!");
|
||||
}
|
||||
|
||||
/* Bis zum nächsten Leerzeichen */
|
||||
/* Bis zum n<EFBFBD>chsten Leerzeichen */
|
||||
|
||||
while (c < maxchars && *p != 0 && iswalnum((wint_t)ucs)) {
|
||||
p += size;
|
||||
|
@ -474,15 +462,16 @@ const char *abkz(const char *s, char *buf, size_t buflen, size_t maxchars)
|
|||
|
||||
void register_names(void)
|
||||
{
|
||||
register_race_description_function(describe_race, "describe_race");
|
||||
/* function name
|
||||
* generate a name for a nonplayerunit
|
||||
* race->generate_name() */
|
||||
register_race_name_function(undead_name, "nameundead");
|
||||
register_race_name_function(skeleton_name, "nameskeleton");
|
||||
register_race_name_function(zombie_name, "namezombie");
|
||||
register_race_name_function(ghoul_name, "nameghoul");
|
||||
register_race_name_function(dracoid_name, "namedracoid");
|
||||
register_race_name_function(dragon_name, "namedragon");
|
||||
register_race_name_function(generic_name, "namegeneric");
|
||||
* race->name_unit() */
|
||||
|
||||
register_race_function(undead_name, "name_undead");
|
||||
register_race_function(skeleton_name, "name_skeleton");
|
||||
register_race_function(zombie_name, "name_zombie");
|
||||
register_race_function(ghoul_name, "name_ghoul");
|
||||
register_race_function(dracoid_name, "name_dracoid");
|
||||
register_race_function(dragon_name, "name_dragon");
|
||||
register_race_function(dragon_name, "name_youngdragon");
|
||||
register_race_function(dragon_name, "name_wyrm");
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
#include <kernel/race.h>
|
||||
#include <kernel/unit.h>
|
||||
#include <kernel/faction.h>
|
||||
#include <util/language.h>
|
||||
#include <util/functions.h>
|
||||
|
||||
|
@ -12,32 +13,33 @@
|
|||
|
||||
static void test_names(CuTest * tc)
|
||||
{
|
||||
race_name_func foo;
|
||||
unit *u;
|
||||
race *rc;
|
||||
test_cleanup();
|
||||
register_names();
|
||||
CuAssertPtrNotNull(tc, get_function("name_undead"));
|
||||
CuAssertPtrNotNull(tc, get_function("name_skeleton"));
|
||||
CuAssertPtrNotNull(tc, get_function("name_zombie"));
|
||||
CuAssertPtrNotNull(tc, get_function("name_ghoul"));
|
||||
CuAssertPtrNotNull(tc, get_function("name_dragon"));
|
||||
CuAssertPtrNotNull(tc, get_function("name_youngdragon"));
|
||||
CuAssertPtrNotNull(tc, get_function("name_wyrm"));
|
||||
CuAssertPtrNotNull(tc, get_function("name_dracoid"));
|
||||
default_locale = test_create_locale();
|
||||
u = test_create_unit(test_create_faction(0), test_create_region(0, 0, 0));
|
||||
rc = test_create_race("undead");
|
||||
u = test_create_unit(test_create_faction(rc), test_create_region(0, 0, 0));
|
||||
locale_setstring(default_locale, "undead_name_0", "Graue");
|
||||
locale_setstring(default_locale, "undead_postfix_0", "Kobolde");
|
||||
CuAssertPtrNotNull(tc, foo = (race_name_func)get_function("nameundead"));
|
||||
rc->generate_name = foo;
|
||||
rc->generate_name(u);
|
||||
CuAssertPtrNotNull(tc, rc->name_unit);
|
||||
CuAssertTrue(tc, rc->name_unit == (race_func)get_function("name_undead"));
|
||||
name_unit(u);
|
||||
CuAssertStrEquals(tc, "Graue Kobolde", u->_name);
|
||||
CuAssertPtrNotNull(tc, get_function("nameskeleton"));
|
||||
CuAssertPtrNotNull(tc, get_function("namezombie"));
|
||||
CuAssertPtrNotNull(tc, get_function("nameghoul"));
|
||||
CuAssertPtrNotNull(tc, get_function("namedragon"));
|
||||
CuAssertPtrNotNull(tc, get_function("namedracoid"));
|
||||
CuAssertPtrNotNull(tc, get_function("namegeneric"));
|
||||
CuAssertPtrNotNull(tc, get_function("describe_race"));
|
||||
test_cleanup();
|
||||
}
|
||||
|
||||
static void test_monster_names(CuTest *tc) {
|
||||
unit *u;
|
||||
faction *f;
|
||||
race *rc;
|
||||
|
||||
test_setup();
|
||||
|
@ -46,11 +48,13 @@ static void test_monster_names(CuTest *tc) {
|
|||
locale_setstring(default_locale, "race::irongolem", "Eisengolem");
|
||||
locale_setstring(default_locale, "race::irongolem_p", "Eisengolems");
|
||||
rc = test_create_race("irongolem");
|
||||
u = test_create_unit(test_create_faction(rc), test_create_region(0, 0, 0));
|
||||
f = test_create_faction(rc);
|
||||
f->flags |= FFL_NPC;
|
||||
u = test_create_unit(f, test_create_region(0, 0, 0));
|
||||
unit_setname(u, "Hodor");
|
||||
CuAssertPtrNotNull(tc, u->_name);
|
||||
rc->generate_name = (race_name_func)get_function("namegeneric");
|
||||
rc->generate_name(u);
|
||||
CuAssertPtrEquals(tc, 0, u->_name);
|
||||
name_unit(u);
|
||||
CuAssertPtrEquals(tc, NULL, u->_name);
|
||||
CuAssertStrEquals(tc, "Eisengolem", unit_getname(u));
|
||||
u->number = 2;
|
||||
CuAssertStrEquals(tc, "Eisengolems", unit_getname(u));
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
PROJECT(races C)
|
||||
SET(_FILES
|
||||
dragons.c
|
||||
illusion.c
|
||||
races.c
|
||||
zombies.c
|
||||
)
|
||||
|
|
|
@ -1,38 +0,0 @@
|
|||
/*
|
||||
* Eressea PB(E)M host Copyright (C) 1998-2015
|
||||
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
||||
* Katja Zedel (katze@felidae.kn-bremen.de)
|
||||
* Henning Peters (faroul@beyond.kn-bremen.de)
|
||||
* Enno Rehling (enno@eressea.de)
|
||||
* Ingo Wilken (Ingo.Wilken@informatik.uni-oldenburg.de)
|
||||
*
|
||||
* This program may not be used, modified or distributed without
|
||||
* prior permission by the authors of Eressea.
|
||||
*/
|
||||
|
||||
#include <platform.h>
|
||||
|
||||
/* kernel includes */
|
||||
#include <kernel/race.h>
|
||||
#include <kernel/unit.h>
|
||||
#include <kernel/faction.h>
|
||||
#include <kernel/messages.h>
|
||||
|
||||
/* libc includes */
|
||||
#include <stdlib.h>
|
||||
#include <assert.h>
|
||||
|
||||
#define ILLUSIONMAX 6
|
||||
|
||||
void age_illusion(unit * u)
|
||||
{
|
||||
if (u->faction->race != get_race(RC_ILLUSION)) {
|
||||
if (u->age == ILLUSIONMAX) {
|
||||
ADDMSG(&u->faction->msgs, msg_message("warnillusiondissolve", "unit", u));
|
||||
}
|
||||
else if (u->age > ILLUSIONMAX) {
|
||||
set_number(u, 0);
|
||||
ADDMSG(&u->faction->msgs, msg_message("illusiondissolve", "unit", u));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -31,22 +31,11 @@
|
|||
|
||||
void age_firedragon(struct unit *u);
|
||||
void age_dragon(struct unit *u);
|
||||
void age_illusion(struct unit *u);
|
||||
void age_undead(struct unit *u);
|
||||
void age_skeleton(struct unit *u);
|
||||
void age_zombie(struct unit *u);
|
||||
void age_ghoul(struct unit *u);
|
||||
|
||||
static void oldfamiliars(unit * u)
|
||||
{
|
||||
char fname[64];
|
||||
/* these familiars have no special skills.
|
||||
*/
|
||||
snprintf(fname, sizeof(fname), "%s_familiar", u_race(u)->_name);
|
||||
create_mage(u, M_GRAY);
|
||||
equip_unit(u, get_equipment(fname));
|
||||
}
|
||||
|
||||
static void equip_newunits(const struct equipment *eq, struct unit *u)
|
||||
{
|
||||
struct region *r = u->region;
|
||||
|
@ -88,30 +77,17 @@ static void equip_newunits(const struct equipment *eq, struct unit *u)
|
|||
}
|
||||
}
|
||||
|
||||
/* Die Funktionen werden über den hier registrierten Namen in races.xml
|
||||
/* Die Funktionen werden <EFBFBD>ber den hier registrierten Namen in races.xml
|
||||
* in die jeweilige Rassendefiniton eingebunden */
|
||||
void register_races(void)
|
||||
{
|
||||
/* function initfamiliar */
|
||||
register_function((pf_generic)oldfamiliars, "oldfamiliars");
|
||||
|
||||
register_function((pf_generic)allowed_dragon, "movedragon");
|
||||
|
||||
register_function((pf_generic)allowed_swim, "moveswimming");
|
||||
register_function((pf_generic)allowed_fly, "moveflying");
|
||||
register_function((pf_generic)allowed_walk, "movewalking");
|
||||
register_function((pf_generic)equip_newunits, "equip_newunits");
|
||||
|
||||
/* function age for race->age() */
|
||||
register_function((pf_generic)age_undead, "ageundead");
|
||||
register_function((pf_generic)age_illusion, "ageillusion");
|
||||
register_function((pf_generic)age_skeleton, "ageskeleton");
|
||||
register_function((pf_generic)age_zombie, "agezombie");
|
||||
register_function((pf_generic)age_ghoul, "ageghoul");
|
||||
register_function((pf_generic)age_dragon, "agedragon");
|
||||
register_function((pf_generic)age_firedragon, "agefiredragon");
|
||||
|
||||
/* function itemdrop
|
||||
* to generate battle spoils
|
||||
* race->itemdrop() */
|
||||
register_function((pf_generic)equip_newunits, "equip_newunits");
|
||||
register_function((pf_generic)age_undead, "age_undead");
|
||||
register_function((pf_generic)age_skeleton, "age_skeleton");
|
||||
register_function((pf_generic)age_zombie, "age_zombie");
|
||||
register_function((pf_generic)age_ghoul, "age_ghoul");
|
||||
register_function((pf_generic)age_dragon, "age_dragon");
|
||||
register_function((pf_generic)age_firedragon, "age_youngdragon");
|
||||
}
|
||||
|
|
|
@ -123,13 +123,12 @@ const char *options[MAXOPTIONS] = {
|
|||
|
||||
bool omniscient(const faction *f)
|
||||
{
|
||||
static const race *rc_template, *rc_illusion;
|
||||
static const race *rc_template;
|
||||
static int cache;
|
||||
if (rc_changed(&cache)) {
|
||||
rc_illusion = get_race(RC_ILLUSION);
|
||||
rc_template = get_race(RC_TEMPLATE);
|
||||
}
|
||||
return (f->race == rc_template || f->race == rc_illusion);
|
||||
return (f->race == rc_template);
|
||||
}
|
||||
|
||||
|
||||
|
|
15
src/spells.c
15
src/spells.c
|
@ -34,10 +34,10 @@
|
|||
#include <spells/flyingship.h>
|
||||
|
||||
/* kernel includes */
|
||||
#include <kernel/curse.h>
|
||||
#include <kernel/connection.h>
|
||||
#include <kernel/building.h>
|
||||
#include <kernel/curse.h>
|
||||
#include <kernel/connection.h>
|
||||
#include <kernel/equipment.h>
|
||||
#include <kernel/faction.h>
|
||||
#include <kernel/item.h>
|
||||
#include <kernel/messages.h>
|
||||
|
@ -514,11 +514,16 @@ static const race *select_familiar(const race * magerace, magic_t magiegebiet)
|
|||
static void make_familiar(unit * familiar, unit * mage)
|
||||
{
|
||||
/* skills and spells: */
|
||||
if (u_race(familiar)->init_familiar != NULL) {
|
||||
u_race(familiar)->init_familiar(familiar);
|
||||
const struct equipment *eq;
|
||||
char eqname[64];
|
||||
const race * rc = u_race(familiar);
|
||||
snprintf(eqname, sizeof(eqname), "%s_familiar", rc->_name);
|
||||
eq = get_equipment(eqname);
|
||||
if (eq != NULL) {
|
||||
equip_items(&familiar->items, eq);
|
||||
}
|
||||
else {
|
||||
log_error("could not perform initialization for familiar %s.\n", familiar->faction->race->_name);
|
||||
log_error("could not perform initialization for familiar %s.\n", rc->_name);
|
||||
}
|
||||
|
||||
/* triggers: */
|
||||
|
|
Loading…
Reference in New Issue