forked from github/server
Merge pull request #582 from ennorehling/develop
Bug 2241 and many small race-related fixes
This commit is contained in:
commit
545bd6b744
40 changed files with 18608 additions and 280 deletions
doc
res
core
e3a
eressea
races
src
18335
doc/gprof-v3.10.0-163-gdfab45d.txt
Normal file
18335
doc/gprof-v3.10.0-163-gdfab45d.txt
Normal file
File diff suppressed because it is too large
Load diff
|
@ -2456,23 +2456,6 @@
|
|||
<text locale="en">skeleton</text>
|
||||
</string>
|
||||
|
||||
<string name="centaur">
|
||||
<text locale="de">Zentaur</text>
|
||||
<text locale="en">centaur</text>
|
||||
</string>
|
||||
<string name="centaur_p">
|
||||
<text locale="de">Zentauren</text>
|
||||
<text locale="en">centaurs</text>
|
||||
</string>
|
||||
<string name="centaur_d">
|
||||
<text locale="de">Zentauren</text>
|
||||
<text locale="en">centaurs</text>
|
||||
</string>
|
||||
<string name="centaur_x">
|
||||
<text locale="de">Zentauren</text>
|
||||
<text locale="en">centaur</text>
|
||||
</string>
|
||||
|
||||
<string name="shadowknight">
|
||||
<text locale="de">Schattenritter</text>
|
||||
<text locale="en">shadow knight</text>
|
||||
|
|
|
@ -1894,12 +1894,6 @@
|
|||
<string name="eagle">
|
||||
<text locale="fr">aigle</text>
|
||||
</string>
|
||||
<string name="centaur_p">
|
||||
<text locale="fr">centaures</text>
|
||||
</string>
|
||||
<string name="centaur">
|
||||
<text locale="fr">centaure</text>
|
||||
</string>
|
||||
<string name="skeleton_p">
|
||||
<text locale="fr">squelettes</text>
|
||||
</string>
|
||||
|
|
|
@ -890,7 +890,7 @@
|
|||
</race>
|
||||
|
||||
<!-- for the shadowcall spell -->
|
||||
<race name="shadowbat" magres="0.800000" maxaura="0.000000" regaura="0.000000" recruitcost="500" weight="500" capacity="540" speed="1.0" hp="1" ac="4" damage="2d4" unarmedattack="0" unarmeddefense="0" attackmodifier="3" defensemodifier="3" scarepeasants="yes" fly="yes" walk="yes" teach="no" getitem="yes">
|
||||
<race name="shadowbat" magres="0.800000" maxaura="0.000000" regaura="0.000000" weight="500" capacity="540" speed="1.0" hp="1" ac="4" damage="2d4" unarmedattack="0" unarmeddefense="0" attackmodifier="3" defensemodifier="3" scarepeasants="yes" fly="yes" walk="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="5000" killpeasants="yes"/>
|
||||
<function name="name" value="namegeneric"/>
|
||||
<attack type="4" damage="1d6"/>
|
||||
|
@ -898,7 +898,7 @@
|
|||
</race>
|
||||
|
||||
<!-- for the shadowcall spell -->
|
||||
<race name="nightmare" magres="0.500000" maxaura="0.000000" regaura="0.000000" recruitcost="500" weight="100" capacity="540" speed="1.0" hp="80" ac="10" damage="2d4" unarmedattack="0" unarmeddefense="0" attackmodifier="3" defensemodifier="3" scarepeasants="yes" fly="yes" walk="yes" teach="no" getitem="yes" invinciblenonmagic="yes">
|
||||
<race name="nightmare" magres="0.500000" maxaura="0.000000" regaura="0.000000" weight="100" capacity="540" speed="1.0" hp="80" ac="10" damage="2d4" unarmedattack="0" unarmeddefense="0" attackmodifier="3" defensemodifier="3" scarepeasants="yes" fly="yes" walk="yes" teach="no" getitem="yes" invinciblenonmagic="yes">
|
||||
<ai splitsize="500" killpeasants="yes"/>
|
||||
<function name="name" value="namegeneric"/>
|
||||
<attack type="4" damage="1d4"/>
|
||||
|
@ -909,7 +909,7 @@
|
|||
</race>
|
||||
|
||||
<!-- for the shadowcall spell -->
|
||||
<race name="vampunicorn" magres="1.0" maxaura="0.000000" regaura="0.000000" recruitcost="500" weight="5000" capacity="2000" speed="1.0" hp="30" ac="4" damage="2d4" unarmedattack="0" unarmeddefense="0" attackmodifier="3" defensemodifier="3" scarepeasants="yes" walk="yes" teach="no" getitem="yes">
|
||||
<race name="vampunicorn" magres="1.0" maxaura="0.000000" regaura="0.000000" weight="5000" capacity="2000" speed="1.0" hp="30" ac="4" damage="2d4" unarmedattack="0" unarmeddefense="0" attackmodifier="3" defensemodifier="3" scarepeasants="yes" walk="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="5000" killpeasants="yes"/>
|
||||
<function name="name" value="namegeneric"/>
|
||||
<attack type="4" damage="2d10"/>
|
||||
|
|
|
@ -68,10 +68,6 @@
|
|||
<callback name="equip_newunits"/>
|
||||
</set>
|
||||
|
||||
<set name="first_centaur">
|
||||
<callback name="equip_newunits"/>
|
||||
</set>
|
||||
|
||||
<!-- equipment-sets for random encounters -->
|
||||
<set name="random_desert">
|
||||
<skill name="melee" level="d2"/>
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
<familiar race="eagle"/>
|
||||
<familiar race="imp"/>
|
||||
</race>
|
||||
<race name="kraken" magres="0.000000" maxaura="0.000000" regaura="0.000000" recruitcost="50" 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">
|
||||
<race name="kraken" magres="0.000000" 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"/>
|
||||
|
@ -61,7 +61,7 @@
|
|||
<attack type="4" damage="1d10"/>
|
||||
<attack type="4" damage="1d10"/>
|
||||
</race>
|
||||
<race name="giantturtle" magres="0.000000" maxaura="0.000000" regaura="0.000000" recruitcost="50" 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">
|
||||
<race name="giantturtle" magres="0.000000" 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"/>
|
||||
|
@ -90,7 +90,7 @@
|
|||
<skill name="taxation" modifier="-99"/>
|
||||
<attack type="4" damage="2d50"/>
|
||||
</race>
|
||||
<race name="dolphin" magres="0.000000" maxaura="0.000000" regaura="0.000000" recruitcost="50" 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">
|
||||
<race name="dolphin" magres="0.000000" 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"/>
|
||||
|
@ -118,7 +118,7 @@
|
|||
<skill name="taxation" modifier="-99"/>
|
||||
<attack type="4" damage="1d6"/>
|
||||
</race>
|
||||
<race name="tiger" magres="0.000000" maxaura="0.000000" regaura="0.000000" recruitcost="50" 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">
|
||||
<race name="tiger" magres="0.000000" 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"/>
|
||||
|
@ -148,7 +148,7 @@
|
|||
<attack type="4" damage="1d6"/>
|
||||
<attack type="4" damage="1d6"/>
|
||||
</race>
|
||||
<race name="hellcat" magres="0.500000" maxaura="0.000000" regaura="0.000000" recruitcost="50" 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">
|
||||
<race name="hellcat" magres="0.500000" 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"/>
|
||||
|
@ -178,7 +178,7 @@
|
|||
<attack type="4" damage="1d6"/>
|
||||
<attack type="4" damage="1d6"/>
|
||||
</race>
|
||||
<race name="owl" magres="0.000000" maxaura="0.000000" regaura="0.000000" recruitcost="50" 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">
|
||||
<race name="owl" magres="0.000000" 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"/>
|
||||
|
@ -209,7 +209,7 @@
|
|||
<skill name="taxation" modifier="-99"/>
|
||||
<attack type="4" damage="1d4"/>
|
||||
</race>
|
||||
<race name="fairy" magres="0.800000" maxaura="1.000000" regaura="1.500000" recruitcost="50" 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">
|
||||
<race name="fairy" magres="0.800000" 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"/>
|
||||
|
@ -244,7 +244,7 @@
|
|||
<attack type="4" damage="1d3"/>
|
||||
<attack type="4" damage="1d3"/>
|
||||
</race>
|
||||
<race name="dreamcat" magres="0.500000" maxaura="1.000000" regaura="1.000000" recruitcost="50" 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">
|
||||
<race name="dreamcat" magres="0.500000" 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"/>
|
||||
|
@ -275,7 +275,7 @@
|
|||
<attack type="4" damage="1d5"/>
|
||||
<attack type="4" damage="1d5"/>
|
||||
</race>
|
||||
<race name="imp" magres="0.500000" maxaura="1.000000" regaura="1.000000" recruitcost="50" 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">
|
||||
<race name="imp" magres="0.500000" 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"/>
|
||||
|
@ -308,7 +308,7 @@
|
|||
<attack type="1" damage="1d4"/>
|
||||
<attack type="6" spell="fiery_dragonbreath" level="3" />
|
||||
</race>
|
||||
<race name="ghost" magres="0.800000" maxaura="0.500000" regaura="0.100000" recruitcost="50" 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">
|
||||
<race name="ghost" magres="0.800000" 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"/>
|
||||
|
@ -339,7 +339,7 @@
|
|||
<attack type="2" damage="2d30"/>
|
||||
<attack type="3" damage="1d1"/>
|
||||
</race>
|
||||
<race name="wolf" magres="0.000000" maxaura="0.000000" regaura="0.000000" recruitcost="50" 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">
|
||||
<race name="wolf" magres="0.000000" 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"/>
|
||||
|
@ -370,7 +370,7 @@
|
|||
<attack type="4" damage="1d4"/>
|
||||
<attack type="4" damage="1d4"/>
|
||||
</race>
|
||||
<race name="unicorn" magres="0.900000" maxaura="1.500000" regaura="1.500000" recruitcost="50" 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">
|
||||
<race name="unicorn" magres="0.900000" 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"/>
|
||||
|
@ -401,7 +401,7 @@
|
|||
<attack type="4" damage="3d12"/>
|
||||
<attack type="4" damage="2d4"/>
|
||||
</race>
|
||||
<race name="nymph" magres="0.900000" maxaura="1.000000" regaura="1.500000" recruitcost="50" 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">
|
||||
<race name="nymph" magres="0.900000" 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"/>
|
||||
|
@ -431,7 +431,7 @@
|
|||
<attack type="1" damage="1d4"/>
|
||||
<attack type="2" damage="2d20"/>
|
||||
</race>
|
||||
<race name="songdragon" magres="0.990000" maxaura="1.000000" regaura="1.000000" recruitcost="50" 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">
|
||||
<race name="songdragon" magres="0.990000" 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"/>
|
||||
|
@ -463,7 +463,7 @@
|
|||
<attack type="4" damage="2d4"/>
|
||||
<attack type="6" spell="fiery_dragonbreath" level="3" />
|
||||
</race>
|
||||
<race name="rat" magres="0.000000" maxaura="0.000000" regaura="0.000000" recruitcost="50" 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">
|
||||
<race name="rat" magres="0.000000" 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"/>
|
||||
|
@ -495,7 +495,7 @@
|
|||
<attack type="4" damage="1d4"/>
|
||||
<attack type="4" damage="1d4"/>
|
||||
</race>
|
||||
<race name="eagle" magres="0.000000" maxaura="0.000000" regaura="0.000000" recruitcost="50" 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">
|
||||
<race name="eagle" magres="0.000000" 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"/>
|
||||
|
@ -525,7 +525,7 @@
|
|||
<skill name="taxation" modifier="-99"/>
|
||||
<attack type="4" damage="2d3"/>
|
||||
</race>
|
||||
<race name="tunnelworm" magres="0.800000" maxaura="0.000000" regaura="0.000000" recruitcost="50" 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">
|
||||
<race name="tunnelworm" magres="0.800000" 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"/>
|
||||
|
@ -558,7 +558,7 @@
|
|||
<attack type="4" damage="3d20"/>
|
||||
<attack type="8" damage="1d10"/>
|
||||
</race>
|
||||
<race name="lynx" magres="0.000000" maxaura="0.000000" regaura="0.000000" recruitcost="50" 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">
|
||||
<race name="lynx" magres="0.000000" 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"/>
|
||||
|
@ -589,17 +589,17 @@
|
|||
<skill name="taxation" modifier="-99"/>
|
||||
<attack type="4" damage="2d3"/>
|
||||
</race>
|
||||
<race name="direwolf" magres="0.000000" maxaura="0.000000" regaura="0.000000" recruitcost="50" 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">
|
||||
<race name="direwolf" magres="0.000000" 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>
|
||||
<race name="peasant" magres="0.000000" maxaura="1.000000" regaura="1.000000" recruitcost="50" weight="1000" capacity="540" speed="1.000000" hp="20" damage="1d6" unarmedattack="0" unarmeddefense="0" cannotmove="yes" teach="no">
|
||||
<race name="peasant" magres="0.000000" maxaura="1.000000" regaura="1.000000" weight="1000" capacity="540" speed="1.000000" hp="20" damage="1d6" unarmedattack="0" unarmeddefense="0" cannotmove="yes" teach="no">
|
||||
<ai splitsize="10000"/>
|
||||
<attack type="1" damage="1d6"/>
|
||||
</race>
|
||||
<race name="braineater" magres="0.900000" maxaura="1.000000"
|
||||
regaura="1.000000" recruitcost="50000" 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">
|
||||
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"/>
|
||||
|
@ -607,7 +607,7 @@
|
|||
<attack type="3" damage="1d1"/>
|
||||
<attack type="4" damage="1d1"/>
|
||||
</race>
|
||||
<race name="toad" magres="0.200000" maxaura="1.000000" regaura="1.000000" recruitcost="50" maintenance="10" weight="100" capacity="540" speed="1.000000" hp="10" damage="1d2" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" giveperson="yes" giveunit="yes" getitem="yes" walk="yes">
|
||||
<race name="toad" magres="0.200000" maxaura="1.000000" regaura="1.000000" maintenance="10" weight="100" capacity="540" speed="1.000000" hp="10" damage="1d2" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" giveperson="yes" giveunit="yes" getitem="yes" walk="yes">
|
||||
<ai splitsize="1" learn="yes"/>
|
||||
<skill name="alchemy" modifier="-10"/>
|
||||
<skill name="crossbow" modifier="-10"/>
|
||||
|
@ -676,41 +676,41 @@
|
|||
<function name="name" value="namegeneric"/>
|
||||
<attack type="4" damage="2d40"/>
|
||||
</race>
|
||||
<race name="shadowmaster" cansail="no" cansteal="no" canlearn="no" magres="0.750000" maxaura="1.000000" regaura="2.000000" recruitcost="50000" 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">
|
||||
<race name="shadowmaster" cansail="no" cansteal="no" canlearn="no" magres="0.750000" 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="0.750000" maxaura="1.000000" regaura="1.000000" recruitcost="5000" 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">
|
||||
<race name="shadowdemon" cansail="no" cansteal="no" canlearn="no" magres="0.750000" 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>
|
||||
<race name="stonegolem" stonegolem="true" magres="0.250000" maxaura="1.000000" regaura="0.100000" recruitcost="5000" weight="10000" capacity="2000" speed="1.000000" hp="60" ac="4" damage="2d12+6" unarmedattack="0" unarmeddefense="0" attackmodifier="4" defensemodifier="2" walk="yes" canlearn="no" teach="no">
|
||||
<race name="stonegolem" stonegolem="true" magres="0.250000" maxaura="1.000000" regaura="0.100000" weight="10000" capacity="2000" speed="1.000000" hp="60" ac="4" damage="2d12+6" unarmedattack="0" unarmeddefense="0" attackmodifier="4" defensemodifier="2" walk="yes" canlearn="no" teach="no">
|
||||
<ai splitsize="50"/>
|
||||
<skill name="building" modifier="14"/>
|
||||
<skill name="roadwork" modifier="14"/>
|
||||
<attack type="4" damage="2d10+4"/>
|
||||
</race>
|
||||
<race name="irongolem" irongolem="true" magres="0.250000" maxaura="1.000000" regaura="0.100000" recruitcost="5000" 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">
|
||||
<race name="irongolem" irongolem="true" magres="0.250000" 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"/>
|
||||
</race>
|
||||
<race name="spell" magres="0.000000" maxaura="1.000000" regaura="0.100000" recruitcost="0" weight="0" capacity="0" speed="0.000000" hp="1" damage="1d4" unarmedattack="-2" unarmeddefense="-2" canlearn="no" noheal="yes" noweapons="yes" illusionary="yes" invisible="yes" fly="yes" swim="yes" walk="yes">
|
||||
<race name="spell" magres="0.000000" maxaura="1.000000" regaura="0.100000" weight="0" capacity="0" speed="0.000000" hp="1" damage="1d4" unarmedattack="-2" unarmeddefense="-2" canlearn="no" noheal="yes" noweapons="yes" illusionary="yes" invisible="yes" fly="yes" swim="yes" walk="yes">
|
||||
<ai splitsize="1"/>
|
||||
<attack type="1" damage="1d4"/>
|
||||
</race>
|
||||
<race name="special" magres="0.000000" maxaura="0.000000" regaura="0.000000" recruitcost="0" weight="0" capacity="0" speed="0.000000" hp="1" damage="1d4" unarmedattack="-2" unarmeddefense="-2">
|
||||
<race name="special" magres="0.000000" maxaura="0.000000" regaura="0.000000" weight="0" capacity="0" speed="0.000000" hp="1" damage="1d4" unarmedattack="-2" unarmeddefense="-2">
|
||||
<ai splitsize="1"/>
|
||||
<attack type="1" damage="1d4"/>
|
||||
</race>
|
||||
<race name="dracoid" magres="0.000000" maxaura="1.000000" regaura="1.000000" recruitcost="50" 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">
|
||||
<race name="dracoid" magres="0.000000" 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"/>
|
||||
|
@ -724,13 +724,13 @@
|
|||
<attack type="4" damage="2d40"/>
|
||||
<attack type="4" damage="2d40"/>
|
||||
</race>
|
||||
<race name="ent" magres="0.250000" maxaura="1.000000" regaura="0.500000" recruitcost="5000" 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">
|
||||
<race name="ent" magres="0.250000" 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="0.900000" maxaura="1.000000" regaura="3.000000" recruitcost="250000" 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">
|
||||
<race name="wyrm" magres="0.900000" 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"/>
|
||||
|
@ -742,7 +742,7 @@
|
|||
<attack type="4" damage="5d30"/>
|
||||
<attack type="6" spell="powerful_dragonbreath" level="12" />
|
||||
</race>
|
||||
<race name="dragon" magres="0.700000" maxaura="1.000000" regaura="2.000000" recruitcost="50000" 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">
|
||||
<race name="dragon" magres="0.700000" 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"/>
|
||||
|
@ -755,7 +755,7 @@
|
|||
<attack type="4" damage="3d30"/>
|
||||
<attack type="6" spell="icy_dragonbreath" level="6" />
|
||||
</race>
|
||||
<race name="youngdragon" magres="0.500000" maxaura="1.000000" regaura="1.000000" recruitcost="10000" 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">
|
||||
<race name="youngdragon" magres="0.500000" 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"/>
|
||||
|
@ -769,13 +769,13 @@
|
|||
<attack type="4" damage="1d30"/>
|
||||
<attack type="6" spell="fiery_dragonbreath" level="3" />
|
||||
</race>
|
||||
<race name="illusion" magres="0.000000" maxaura="0.000000" regaura="0.000000" recruitcost="50" 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">
|
||||
<race name="illusion" magres="0.000000" 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" magres="0.000000" maxaura="1.000000" regaura="1.000000" recruitcost="2" 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">
|
||||
<race name="undead" magres="0.000000" 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"/>
|
||||
|
@ -978,7 +978,7 @@
|
|||
<familiar race="rat"/>
|
||||
<familiar race="imp"/>
|
||||
</race>
|
||||
<race name="clone" magres="0.900000" maxaura="0.000000" regaura="0.000000" recruitcost="0" weight="1000" capacity="540" speed="1.000000" hp="40" damage="0d0" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" canlearn="no" teach="no" noheal="yes">
|
||||
<race name="clone" magres="0.900000" maxaura="0.000000" regaura="0.000000" weight="1000" capacity="540" speed="1.000000" hp="40" damage="0d0" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" canlearn="no" teach="no" noheal="yes">
|
||||
<ai splitsize="10000"/>
|
||||
<skill name="alchemy" modifier="-99"/>
|
||||
<skill name="crossbow" modifier="-99"/>
|
||||
|
@ -1011,11 +1011,11 @@
|
|||
<skill name="unarmed" modifier="-99"/>
|
||||
<attack type="1" damage="0d0"/>
|
||||
</race>
|
||||
<race name="template" magres="1.000000" maxaura="0.000000" regaura="0.000000" recruitcost="0" weight="0" capacity="1000" speed="10.000000" hp="10" damage="1d4" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" fly="yes" swim="yes" walk="yes" shapeshift="yes" shapeshiftany="yes" giveperson="yes" giveunit="yes" getitem="yes" recruitethereal="yes" recruitunlimited="yes" equipment="yes">
|
||||
<race name="template" magres="1.000000" maxaura="0.000000" regaura="0.000000" weight="0" capacity="1000" speed="10.000000" hp="10" damage="1d4" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" fly="yes" swim="yes" walk="yes" shapeshift="yes" shapeshiftany="yes" giveperson="yes" giveunit="yes" getitem="yes" recruitethereal="yes" recruitunlimited="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<attack type="1" damage="1d4"/>
|
||||
</race>
|
||||
<race name="gnome" magres="1.000000" maxaura="0.000000" regaura="0.000000" recruitcost="5" weight="1000" capacity="540" speed="1.000000" hp="50" damage="1d4" unarmedattack="10" unarmeddefense="10" attackmodifier="10" defensemodifier="10" walk="yes" teach="no">
|
||||
<race name="gnome" magres="1.000000" maxaura="0.000000" regaura="0.000000" weight="1000" capacity="540" speed="1.000000" hp="50" damage="1d4" unarmedattack="10" unarmeddefense="10" attackmodifier="10" defensemodifier="10" walk="yes" teach="no">
|
||||
<ai splitsize="10000"/>
|
||||
<skill name="tactics" modifier="1"/>
|
||||
<skill name="perception" modifier="1"/>
|
||||
|
@ -1023,7 +1023,7 @@
|
|||
<skill name="unarmed" modifier="1"/>
|
||||
<attack type="1" damage="1d4"/>
|
||||
</race>
|
||||
<race name="museumghost" magres="1.000000" maxaura="0.000000" regaura="0.000000" recruitcost="5" weight="1000" capacity="540" speed="1.000000" hp="50" damage="1d4" unarmedattack="10" unarmeddefense="10" attackmodifier="10" defensemodifier="10" walk="yes" teach="no">
|
||||
<race name="museumghost" magres="1.000000" maxaura="0.000000" regaura="0.000000" weight="1000" capacity="540" speed="1.000000" hp="50" damage="1d4" unarmedattack="10" unarmeddefense="10" attackmodifier="10" defensemodifier="10" walk="yes" teach="no">
|
||||
<ai splitsize="10000"/>
|
||||
<skill name="tactics" modifier="1"/>
|
||||
<skill name="perception" modifier="1"/>
|
||||
|
@ -1037,7 +1037,7 @@
|
|||
<attack type="2" damage="5d600"/>
|
||||
<attack type="1" damage="1d4"/>
|
||||
</race>
|
||||
<race name="ghast" magres="0.600000" maxaura="1.000000" regaura="1.000000" recruitcost="5" 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">
|
||||
<race name="ghast" magres="0.600000" 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" aggression="0.02" killpeasants="yes" moverandom="yes"/>
|
||||
<function name="name" value="nameghoul"/>
|
||||
<skill name="crossbow" modifier="1"/>
|
||||
|
@ -1055,7 +1055,7 @@
|
|||
<attack type="2" damage="1d30"/>
|
||||
<attack type="2" damage="1d30"/>
|
||||
</race>
|
||||
<race name="ghoul" magres="0.300000" maxaura="1.000000" regaura="1.000000" recruitcost="5" 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">
|
||||
<race name="ghoul" magres="0.300000" 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"/>
|
||||
|
@ -1073,7 +1073,7 @@
|
|||
<attack type="3" damage="1d2"/>
|
||||
<attack type="2" damage="1d30"/>
|
||||
</race>
|
||||
<race name="juju-zombie" magres="0.500000" maxaura="1.000000" regaura="1.000000" recruitcost="8" 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-zombie" magres="0.500000" 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" aggression="0.02" killpeasants="yes" moverandom="yes"/>
|
||||
<function name="name" value="namezombie"/>
|
||||
<skill name="crossbow" modifier="1"/>
|
||||
|
@ -1089,7 +1089,7 @@
|
|||
<attack type="3" damage="1d1"/>
|
||||
<attack type="3" damage="1d1"/>
|
||||
</race>
|
||||
<race name="zombie" magres="0.200000" maxaura="1.000000" regaura="1.000000" recruitcost="4" 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">
|
||||
<race name="zombie" magres="0.200000" 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"/>
|
||||
|
@ -1104,7 +1104,7 @@
|
|||
<skill name="unarmed" modifier="1"/>
|
||||
<attack type="1" damage="1d7"/>
|
||||
</race>
|
||||
<race name="skeletonlord" magres="0.300000" maxaura="1.000000" regaura="1.000000" recruitcost="2" 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">
|
||||
<race name="skeletonlord" magres="0.300000" 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" aggression="0.02" killpeasants="yes" moverandom="yes"/>
|
||||
<function name="name" value="nameskeleton"/>
|
||||
<skill name="crossbow" modifier="1"/>
|
||||
|
@ -1119,7 +1119,7 @@
|
|||
<attack type="1" damage="1d7"/>
|
||||
<attack type="1" damage="1d7"/>
|
||||
</race>
|
||||
<race name="skeleton" magres="0.100000" maxaura="1.000000" regaura="1.000000" recruitcost="0" 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">
|
||||
<race name="skeleton" magres="0.100000" 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"/>
|
||||
|
@ -1134,40 +1134,12 @@
|
|||
<skill name="unarmed" modifier="1"/>
|
||||
<attack type="1" damage="1d7"/>
|
||||
</race>
|
||||
<race name="centaur" magres="0.000000" maxaura="0.750000" regaura="0.750000" recruitcost="100" maintenance="10" weight="5000" capacity="2040" speed="1.000000" hp="30" damage="2d5" unarmedattack="0" unarmeddefense="0" playerrace="yes" walk="yes" horse="yes" giveperson="yes" giveunit="yes" getitem="yes" recruithorses="yes" equipment="yes">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<skill name="crossbow" modifier="1"/>
|
||||
<skill name="mining" modifier="-3"/>
|
||||
<skill name="bow" modifier="1"/>
|
||||
<skill name="building" modifier="-2"/>
|
||||
<skill name="trade" modifier="1"/>
|
||||
<skill name="catapult" modifier="-2"/>
|
||||
<skill name="herbalism" modifier="1"/>
|
||||
<skill name="training" modifier="4"/>
|
||||
<skill name="armorer" modifier="-1"/>
|
||||
<skill name="shipcraft" modifier="-4"/>
|
||||
<skill name="sailing" modifier="-4"/>
|
||||
<skill name="polearm" modifier="1"/>
|
||||
<skill name="espionage" modifier="-1"/>
|
||||
<skill name="quarrying" modifier="-1"/>
|
||||
<skill name="stealth" modifier="-1"/>
|
||||
<skill name="weaponsmithing" modifier="1"/>
|
||||
<skill name="cartmaking" modifier="1"/>
|
||||
<skill name="taxation" modifier="1"/>
|
||||
<attack type="1" damage="2d5"/>
|
||||
<familiar race="eagle" default="yes"/>
|
||||
<familiar race="fairy"/>
|
||||
<familiar race="owl"/>
|
||||
<familiar race="unicorn"/>
|
||||
<familiar race="nymph"/>
|
||||
<familiar race="imp"/>
|
||||
</race>
|
||||
<race name="shadowknight" magres="0.000000" maxaura="0.000000" regaura="0.000000" recruitcost="5" 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">
|
||||
<race name="shadowknight" magres="0.000000" 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="0.500000" maxaura="1.000000" regaura="1.000000" recruitcost="5000" 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">
|
||||
<race name="seaserpent" magres="0.500000" 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"/>
|
||||
|
@ -1209,36 +1181,6 @@
|
|||
<familiar race="demon"/>
|
||||
</race>
|
||||
|
||||
<!-- race name="old_orc" magres="-0.050000" maxaura="1.000000" regaura="1.000000" recruitcost="50" maintenance="10" weight="1000" capacity="540" speed="1.000000" hp="24" damage="1d5" unarmedattack="-2" unarmeddefense="-2" 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"/>
|
||||
<skill name="trade" modifier="-3"/>
|
||||
<skill name="forestry" modifier="1"/>
|
||||
<skill name="herbalism" modifier="-2"/>
|
||||
<skill name="magic" modifier="-1"/>
|
||||
<skill name="training" modifier="-1"/>
|
||||
<skill name="armorer" modifier="1"/>
|
||||
<skill name="shipcraft" modifier="-1"/>
|
||||
<skill name="sailing" modifier="-1"/>
|
||||
<skill name="espionage" modifier="-1"/>
|
||||
<skill name="quarrying" modifier="1"/>
|
||||
<skill name="tactics" modifier="1"/>
|
||||
<skill name="entertainment" modifier="-2"/>
|
||||
<skill name="weaponsmithing" modifier="2"/>
|
||||
<skill name="cartmaking" modifier="-1"/>
|
||||
<skill name="taxation" modifier="1"/>
|
||||
<skill name="unarmed" modifier="-99"/>
|
||||
<attack type="1" damage="1d5"/>
|
||||
<familiar race="goblin" default="yes"/>
|
||||
<familiar race="ghost"/>
|
||||
<familiar race="imp"/>
|
||||
<familiar race="rat"/>
|
||||
<familiar race="wolf"/>
|
||||
<familiar race="demon"/>
|
||||
</race -->
|
||||
<race name="elf" magres="0.100000" 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"/>
|
||||
|
@ -1328,7 +1270,7 @@
|
|||
<familiar race="wolf"/>
|
||||
<familiar race="demon"/>
|
||||
</race>
|
||||
<race name="shadowdragon" magres="0.950000" maxaura="1.000000" regaura="3.000000" recruitcost="2500000" 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">
|
||||
<race name="shadowdragon" magres="0.950000" 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"/>
|
||||
|
@ -1342,13 +1284,13 @@
|
|||
<attack type="6" spell="aura_of_fear" level="12"/>
|
||||
<precombatspell spell="shadowcall"/>
|
||||
</race>
|
||||
<race name="shadowbat" magres="0.800000" maxaura="0.000000" regaura="0.000000" recruitcost="500" weight="500" capacity="540" speed="1.000000" hp="1" ac="4" damage="2d4" unarmedattack="0" unarmeddefense="0" attackmodifier="3" defensemodifier="3" scarepeasants="yes" fly="yes" walk="yes" teach="no" getitem="yes">
|
||||
<race name="shadowbat" magres="0.800000" maxaura="0.000000" regaura="0.000000" weight="500" capacity="540" speed="1.000000" hp="1" ac="4" damage="2d4" unarmedattack="0" unarmeddefense="0" attackmodifier="3" defensemodifier="3" scarepeasants="yes" fly="yes" walk="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="5000" killpeasants="yes"/>
|
||||
<function name="name" value="namegeneric"/>
|
||||
<attack type="4" damage="1d6"/>
|
||||
<attack type="3" damage="1d1"/>
|
||||
</race>
|
||||
<race name="nightmare" magres="0.500000" maxaura="0.000000" regaura="0.000000" recruitcost="500" weight="100" capacity="540" speed="1.000000" hp="80" ac="10" damage="2d4" unarmedattack="0" unarmeddefense="0" attackmodifier="3" defensemodifier="3" scarepeasants="yes" fly="yes" walk="yes" teach="no" getitem="yes" invinciblenonmagic="yes">
|
||||
<race name="nightmare" magres="0.500000" maxaura="0.000000" regaura="0.000000" weight="100" capacity="540" speed="1.000000" hp="80" ac="10" damage="2d4" unarmedattack="0" unarmeddefense="0" attackmodifier="3" defensemodifier="3" scarepeasants="yes" fly="yes" walk="yes" teach="no" getitem="yes" invinciblenonmagic="yes">
|
||||
<ai splitsize="500" killpeasants="yes"/>
|
||||
<function name="name" value="namegeneric"/>
|
||||
<attack type="4" damage="1d4"/>
|
||||
|
@ -1357,7 +1299,7 @@
|
|||
<attack type="3" damage="1d4"/>
|
||||
<attack type="2" damage="1d10"/>
|
||||
</race>
|
||||
<race name="vampunicorn" magres="1.000000" maxaura="0.000000" regaura="0.000000" recruitcost="500" weight="5000" capacity="2000" speed="1.000000" hp="30" ac="4" damage="2d4" unarmedattack="0" unarmeddefense="0" attackmodifier="3" defensemodifier="3" scarepeasants="yes" walk="yes" teach="no" getitem="yes">
|
||||
<race name="vampunicorn" magres="1.000000" maxaura="0.000000" regaura="0.000000" weight="5000" capacity="2000" speed="1.000000" hp="30" ac="4" damage="2d4" unarmedattack="0" unarmeddefense="0" attackmodifier="3" defensemodifier="3" scarepeasants="yes" walk="yes" teach="no" getitem="yes">
|
||||
<ai splitsize="5000" killpeasants="yes"/>
|
||||
<function name="name" value="namegeneric"/>
|
||||
<attack type="4" damage="2d10"/>
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
<?xml version="1.0" ?>
|
||||
<race name="demon" magres="0.150000" 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">
|
||||
<race name="demon" magres="0.150000" 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" healing="1.5">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<skill name="alchemy" modifier="2"/>
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
<race name="dragon" magres="0.700000" maxaura="1.0" 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" dragon="yes">
|
||||
<ai splitsize="2" killpeasants="yes" learn="yes"/>
|
||||
"6" damage="2d30" unarmedattack="0" unarmeddefense="0"
|
||||
attackmodifier="7" defensemodifier="7" scarepeasants="yes" fly="yes"
|
||||
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"/>
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
<?xml version="1.0" ?>
|
||||
<race name="goblin" magres="-0.05" maxaura="1.0" regaura="1.0" recruitcost="60" maintenance="6" weight="600" capacity="440" speed="1.0" hp="16" damage="1d5" unarmedattack="-2" unarmeddefense="0" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
|
||||
<race name="goblin" magres="-0.05" maxaura="1.0" regaura="1.0"
|
||||
recruitcost="60" maintenance="6" weight="600" capacity="440"
|
||||
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"/>
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
<?xml version="1.0" ?>
|
||||
<race name="goblin" magres="-0.05" maxaura="1.0" regaura="1.0" recruitcost="60" maintenance="6" weight="600" capacity="440" speed="1.0" hp="16" damage="1d5" unarmedattack="-2" unarmeddefense="0" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
|
||||
<race name="goblin" magres="-0.05" maxaura="1.0" regaura="1.0"
|
||||
recruitcost="60" maintenance="6" weight="600" capacity="440"
|
||||
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"/>
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
<?xml version="1.0" ?>
|
||||
<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">
|
||||
<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"
|
||||
healing="2.0">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<skill name="alchemy" modifier="1"/>
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
<?xml version="1.0" ?>
|
||||
<race name="troll" magres="0.100000" 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">
|
||||
<race name="troll" magres="0.100000" 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"
|
||||
healing="1.5">
|
||||
<ai splitsize="10000" moverandom="yes" learn="yes"/>
|
||||
<function name="itemdrop" value="defaultdrops"/>
|
||||
<skill name="mining" modifier="2"/>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<race name="wyrm" magres="0.900000" maxaura="1.0" regaura="3.000000" weight="18000" capacity="1000000" speed="1.0" 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" dragon="yes">
|
||||
<ai splitsize="1" killpeasants="yes" learn="yes"/>
|
||||
<ai splitsize="1" killpeasants="yes" learn="yes" scare="1000"/>
|
||||
<function name="name" value="namedragon"/>
|
||||
<function name="move" value="movedragon"/>
|
||||
<skill name="magic" modifier="12"/>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<race name="youngdragon" magres="0.500000" maxaura="1.0" regaura="1.0" weight="8000" capacity="10000" speed="1.0" 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" dragon="yes">
|
||||
<ai splitsize="6" killpeasants="yes" learn="yes"/>
|
||||
<ai splitsize="6" killpeasants="yes" learn="yes" scare="160"/>
|
||||
<function name="name" value="namedragon"/>
|
||||
<function name="age" value="agefiredragon"/>
|
||||
<function name="move" value="movedragon"/>
|
||||
|
|
|
@ -61,6 +61,10 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|||
|
||||
#include <storage.h>
|
||||
|
||||
attrib_type at_scare = { // monster scares peasants
|
||||
"scare", NULL, NULL, NULL, a_writeint, a_readint
|
||||
};
|
||||
|
||||
attrib_type at_unitdissolve = {
|
||||
"unitdissolve", NULL, NULL, NULL, a_writechars, a_readchars
|
||||
};
|
||||
|
@ -77,6 +81,7 @@ static int read_ext(attrib * a, void *owner, gamedata *data)
|
|||
void register_attributes(void)
|
||||
{
|
||||
/* Alle speicherbaren Attribute müssen hier registriert werden */
|
||||
at_register(&at_scare);
|
||||
at_register(&at_shiptrail);
|
||||
at_register(&at_familiar);
|
||||
at_register(&at_familiarmage);
|
||||
|
|
|
@ -22,6 +22,8 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct attrib_type;
|
||||
extern struct attrib_type at_scare;
|
||||
extern void register_attributes(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -1039,7 +1039,7 @@ static int rc_specialdamage(const unit *au, const unit *du, const struct weapon_
|
|||
if (wtype != NULL) {
|
||||
if (fval(u_race(du), RCF_DRAGON)) {
|
||||
static int cache;
|
||||
static race *rc_halfling;
|
||||
static const race *rc_halfling;
|
||||
if (rc_changed(&cache)) {
|
||||
rc_halfling = get_race(RC_HALFLING);
|
||||
}
|
||||
|
|
|
@ -1480,6 +1480,8 @@ report_computer(const char *filename, report_context * ctx, const char *charset)
|
|||
const char *mailto = LOC(f->locale, "mailto");
|
||||
const attrib *a;
|
||||
FILE *F = fopen(filename, "w");
|
||||
static const race *rc_human;
|
||||
static int rc_cache;
|
||||
|
||||
if (era < 0) {
|
||||
era = config_get_int("world.era", 1);
|
||||
|
@ -1546,7 +1548,10 @@ report_computer(const char *filename, report_context * ctx, const char *charset)
|
|||
fprintf(F, "%d;Anzahl Personen\n", count_all(f));
|
||||
fprintf(F, "\"%s\";Magiegebiet\n", magic_school[f->magiegebiet]);
|
||||
|
||||
if (f->race == get_race(RC_HUMAN)) {
|
||||
if (rc_changed(&rc_cache)) {
|
||||
rc_human = rc_find("human");
|
||||
}
|
||||
if (f->race == rc_human) {
|
||||
fprintf(F, "%d;Anzahl Immigranten\n", count_migrants(f));
|
||||
fprintf(F, "%d;Max. Immigranten\n", count_maxmigrants(f));
|
||||
}
|
||||
|
|
|
@ -3106,11 +3106,17 @@ void produce(struct region *r)
|
|||
request *nextworker = workers;
|
||||
static int bt_cache;
|
||||
static const struct building_type *caravan_bt;
|
||||
|
||||
static int rc_cache;
|
||||
static const race *rc_spell, *rc_insect, *rc_aquarian;
|
||||
|
||||
if (bt_changed(&bt_cache)) {
|
||||
caravan_bt = bt_find("caravan");
|
||||
}
|
||||
|
||||
if (rc_changed(&rc_cache)) {
|
||||
rc_spell = get_race(RC_SPELL);
|
||||
rc_insect = get_race(RC_INSECT);
|
||||
rc_aquarian = get_race(RC_AQUARIAN);
|
||||
}
|
||||
assert(r);
|
||||
|
||||
/* das sind alles befehle, die 30 tage brauchen, und die in thisorder
|
||||
|
@ -3145,10 +3151,10 @@ void produce(struct region *r)
|
|||
bool trader = false;
|
||||
keyword_t todo;
|
||||
|
||||
if (u_race(u) == get_race(RC_SPELL) || fval(u, UFL_LONGACTION))
|
||||
if (u_race(u) == rc_spell || fval(u, UFL_LONGACTION))
|
||||
continue;
|
||||
|
||||
if (u_race(u) == get_race(RC_INSECT) && r_insectstalled(r) &&
|
||||
if (u_race(u) == rc_insect && r_insectstalled(r) &&
|
||||
!is_cursed(u->attribs, C_KAELTESCHUTZ, 0))
|
||||
continue;
|
||||
|
||||
|
@ -3185,7 +3191,7 @@ void produce(struct region *r)
|
|||
if (todo == NOKEYWORD)
|
||||
continue;
|
||||
|
||||
if (fval(r->terrain, SEA_REGION) && u_race(u) != get_race(RC_AQUARIAN)
|
||||
if (fval(r->terrain, SEA_REGION) && u_race(u) != rc_aquarian
|
||||
&& !(u_race(u)->flags & RCF_SWIM)
|
||||
&& todo != K_STEAL && todo != K_SPY && todo != K_SABOTAGE)
|
||||
continue;
|
||||
|
|
|
@ -69,7 +69,7 @@ unsigned int guard_flags(const unit * u)
|
|||
{
|
||||
// TODO: this should be a property of the race, like race.guard_flags
|
||||
static int rc_cache;
|
||||
static race *rc_elf, *rc_ent, *rc_ironkeeper;
|
||||
static const race *rc_elf, *rc_ent, *rc_ironkeeper;
|
||||
const race *rc = u_race(u);
|
||||
unsigned int flags =
|
||||
GUARD_CREWS | GUARD_LANDING | GUARD_TRAVELTHRU | GUARD_TAX;
|
||||
|
|
|
@ -301,7 +301,7 @@ unit *addplayer(region * r, faction * f)
|
|||
fset(u, UFL_ISNEW);
|
||||
if (f->race == get_race(RC_DAEMON)) {
|
||||
race_t urc;
|
||||
race *rc;
|
||||
const race *rc;
|
||||
do {
|
||||
urc = (race_t)(rng_int() % MAXRACES);
|
||||
rc = get_race(urc);
|
||||
|
|
|
@ -65,17 +65,17 @@ static const char *racenames[MAXRACES] = {
|
|||
"dwarf", "elf", NULL, "goblin", "human", "troll", "demon", "insect",
|
||||
"halfling", "cat", "aquarian", "orc", "snotling", "undead", "illusion",
|
||||
"youngdragon", "dragon", "wyrm", "ent", "catdragon", "dracoid",
|
||||
"special", "spell", "irongolem", "stonegolem", "shadowdemon",
|
||||
NULL, "spell", "irongolem", "stonegolem", "shadowdemon",
|
||||
"shadowmaster", "mountainguard", "alp", "toad", "braineater", "peasant",
|
||||
"wolf", NULL, NULL, NULL, NULL, "songdragon", NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, "seaserpent",
|
||||
"shadowknight", "centaur", "skeleton", "skeletonlord", "zombie",
|
||||
"juju-zombie", "ghoul", "ghast", "museumghost", "gnome", "template",
|
||||
"shadowknight", NULL, "skeleton", "skeletonlord", "zombie",
|
||||
"juju-zombie", "ghoul", "ghast", NULL, NULL, "template",
|
||||
"clone"
|
||||
};
|
||||
|
||||
struct race *get_race(race_t rt) {
|
||||
const struct race *get_race(race_t rt) {
|
||||
const char * name;
|
||||
|
||||
assert(rt < MAXRACES);
|
||||
|
@ -83,7 +83,7 @@ struct race *get_race(race_t rt) {
|
|||
if (!name) {
|
||||
return NULL;
|
||||
}
|
||||
return rc_get_or_create(name);
|
||||
return rc_find(name);
|
||||
}
|
||||
|
||||
race_list *get_familiarraces(void)
|
||||
|
@ -163,38 +163,43 @@ bool rc_changed(int *cache) {
|
|||
return false;
|
||||
}
|
||||
|
||||
race *rc_get_or_create(const char *zName)
|
||||
race *rc_create(const char *zName)
|
||||
{
|
||||
race *rc;
|
||||
int i;
|
||||
|
||||
assert(zName);
|
||||
rc = rc_find_i(zName);
|
||||
if (!rc) {
|
||||
rc = (race *)calloc(sizeof(race), 1);
|
||||
rc->hitpoints = 1;
|
||||
rc->weight = PERSON_WEIGHT;
|
||||
rc->capacity = 540;
|
||||
rc->recruit_multi = 1.0F;
|
||||
rc->regaura = 1.0F;
|
||||
rc->speed = 1.0F;
|
||||
rc->battle_flags = 0;
|
||||
if (strchr(zName, ' ') != NULL) {
|
||||
log_error("race '%s' has an invalid name. remove spaces\n", zName);
|
||||
assert(strchr(zName, ' ') == NULL);
|
||||
}
|
||||
rc->_name = _strdup(zName);
|
||||
rc->precombatspell = NULL;
|
||||
|
||||
rc->attack[0].type = AT_COMBATSPELL;
|
||||
for (i = 1; i < RACE_ATTACKS; ++i)
|
||||
rc->attack[i].type = AT_NONE;
|
||||
rc->index = num_races++;
|
||||
++rc_changes;
|
||||
rc->next = races;
|
||||
return races = rc;
|
||||
rc = (race *)calloc(sizeof(race), 1);
|
||||
rc->hitpoints = 1;
|
||||
rc->weight = PERSON_WEIGHT;
|
||||
rc->capacity = 540;
|
||||
rc->recruit_multi = 1.0F;
|
||||
rc->regaura = 1.0F;
|
||||
rc->speed = 1.0F;
|
||||
rc->battle_flags = 0;
|
||||
if (strchr(zName, ' ') != NULL) {
|
||||
log_error("race '%s' has an invalid name. remove spaces\n", zName);
|
||||
assert(strchr(zName, ' ') == NULL);
|
||||
}
|
||||
return rc;
|
||||
rc->_name = _strdup(zName);
|
||||
rc->precombatspell = NULL;
|
||||
|
||||
rc->attack[0].type = AT_COMBATSPELL;
|
||||
for (i = 1; i < RACE_ATTACKS; ++i)
|
||||
rc->attack[i].type = AT_NONE;
|
||||
rc->index = num_races++;
|
||||
++rc_changes;
|
||||
rc->next = races;
|
||||
return races = rc;
|
||||
}
|
||||
|
||||
race *rc_get_or_create(const char *zName)
|
||||
{
|
||||
race *rc;
|
||||
|
||||
assert(zName);
|
||||
rc = rc_find_i(zName);
|
||||
return rc ? rc : rc_create(zName);
|
||||
}
|
||||
|
||||
/** dragon movement **/
|
||||
|
|
|
@ -52,37 +52,31 @@ extern "C" {
|
|||
RC_ELF,
|
||||
RC_GOBLIN = 3,
|
||||
RC_HUMAN,
|
||||
|
||||
RC_TROLL,
|
||||
RC_DAEMON,
|
||||
RC_INSECT,
|
||||
RC_HALFLING,
|
||||
RC_CAT,
|
||||
|
||||
RC_AQUARIAN,
|
||||
RC_ORC,
|
||||
RC_SNOTLING,
|
||||
RC_UNDEAD,
|
||||
RC_ILLUSION,
|
||||
|
||||
RC_FIREDRAGON,
|
||||
RC_DRAGON,
|
||||
RC_WYRM,
|
||||
RC_TREEMAN,
|
||||
RC_BIRTHDAYDRAGON,
|
||||
|
||||
RC_DRACOID,
|
||||
RC_SPECIAL,
|
||||
RC_SPELL,
|
||||
|
||||
RC_SPELL = 22,
|
||||
RC_IRONGOLEM,
|
||||
RC_STONEGOLEM,
|
||||
|
||||
RC_SHADOW,
|
||||
RC_SHADOWLORD,
|
||||
RC_IRONKEEPER,
|
||||
RC_ALP,
|
||||
RC_TOAD,
|
||||
|
||||
RC_HIRNTOETER,
|
||||
RC_PEASANT,
|
||||
RC_WOLF = 32,
|
||||
|
@ -91,20 +85,15 @@ extern "C" {
|
|||
|
||||
RC_SEASERPENT = 51,
|
||||
RC_SHADOWKNIGHT,
|
||||
RC_CENTAUR,
|
||||
RC_SKELETON,
|
||||
|
||||
RC_SKELETON = 54,
|
||||
RC_SKELETON_LORD,
|
||||
RC_ZOMBIE,
|
||||
RC_ZOMBIE_LORD,
|
||||
RC_GHOUL,
|
||||
RC_GHOUL_LORD,
|
||||
|
||||
RC_MUS_SPIRIT,
|
||||
RC_GNOME,
|
||||
RC_TEMPLATE,
|
||||
RC_TEMPLATE = 62,
|
||||
RC_CLONE,
|
||||
|
||||
MAXRACES,
|
||||
NORACE = -1
|
||||
} race_t;
|
||||
|
@ -125,6 +114,7 @@ extern "C" {
|
|||
typedef struct race {
|
||||
char *_name;
|
||||
float magres;
|
||||
float healing;
|
||||
double maxaura; /* Faktor auf Maximale Aura */
|
||||
double regaura; /* Faktor auf Regeneration */
|
||||
double recruit_multi; /* Faktor für Bauernverbrauch */
|
||||
|
@ -175,10 +165,11 @@ extern "C" {
|
|||
|
||||
struct race_list *get_familiarraces(void);
|
||||
struct race *races;
|
||||
struct race *get_race(race_t rt);
|
||||
const struct race *get_race(race_t rt);
|
||||
/** TODO: compatibility hacks: **/
|
||||
race_t old_race(const struct race *);
|
||||
|
||||
race *rc_create(const char *zName);
|
||||
race *rc_get_or_create(const char *name);
|
||||
bool rc_changed(int *cache);
|
||||
const race *rc_find(const char *);
|
||||
|
@ -241,8 +232,6 @@ extern "C" {
|
|||
const char *racename(const struct locale *lang, const struct unit *u,
|
||||
const race * rc);
|
||||
|
||||
#define omniscient(f) ((f)->race==get_race(RC_ILLUSION) || (f)->race==get_race(RC_TEMPLATE))
|
||||
|
||||
#define playerrace(rc) (!fval((rc), RCF_NPC))
|
||||
#define dragonrace(rc) (fval(rc, RCF_DRAGON))
|
||||
#define humanoidrace(rc) (fval((rc), RCF_UNDEAD) || (rc)==get_race(RC_DRACOID) || playerrace(rc))
|
||||
|
|
|
@ -51,15 +51,15 @@ static void test_rc_find(CuTest *tc) {
|
|||
|
||||
static void test_race_get(CuTest *tc) {
|
||||
int cache = 0;
|
||||
race *rc;
|
||||
const race *rc;
|
||||
test_setup();
|
||||
CuAssertTrue(tc, rc_changed(&cache));
|
||||
CuAssertTrue(tc, !rc_changed(&cache));
|
||||
rc = get_race(RC_ELF);
|
||||
CuAssertPtrEquals(tc, rc, (void *)rc_get_or_create("elf"));
|
||||
rc = rc_get_or_create("elf");
|
||||
CuAssertPtrEquals(tc, (void *)rc, (void *)get_race(RC_ELF));
|
||||
CuAssertTrue(tc, rc_changed(&cache));
|
||||
CuAssertTrue(tc, !rc_changed(&cache));
|
||||
CuAssertPtrEquals(tc, rc, (void *)rc_find("elf"));
|
||||
CuAssertPtrEquals(tc, (void *)rc, (void *)rc_find("elf"));
|
||||
free_races();
|
||||
CuAssertTrue(tc, rc_changed(&cache));
|
||||
test_cleanup();
|
||||
|
|
|
@ -105,7 +105,7 @@ int skill_mod(const race * rc, skill_t sk, const struct terrain_type *terrain)
|
|||
{
|
||||
int result = 0;
|
||||
static int rc_cache;
|
||||
static race *rc_dwarf, *rc_insect;
|
||||
static const race *rc_dwarf, *rc_insect;
|
||||
|
||||
if (rc_changed(&rc_cache)) {
|
||||
rc_dwarf = get_race(RC_DWARF);
|
||||
|
@ -140,7 +140,7 @@ int rc_skillmod(const struct race *rc, const region * r, skill_t sk)
|
|||
}
|
||||
if (r && r_isforest(r)) {
|
||||
static int rc_cache;
|
||||
static race * rc_elf;
|
||||
static const race * rc_elf;
|
||||
if (rc_changed(&rc_cache)) {
|
||||
rc_elf = get_race(RC_ELF);
|
||||
}
|
||||
|
|
|
@ -102,7 +102,7 @@ static void test_remove_units_ignores_spells(CuTest *tc) {
|
|||
test_cleanup();
|
||||
test_create_world();
|
||||
|
||||
u = create_unit(findregion(0, 0), test_create_faction(test_create_race("human")), 1, get_race(RC_SPELL), 0, 0, 0);
|
||||
u = create_unit(findregion(0, 0), test_create_faction(test_create_race("human")), 1, test_create_race("spell"), 0, 0, 0);
|
||||
uid = u->no;
|
||||
u->number = 0;
|
||||
u->age = 1;
|
||||
|
|
|
@ -33,6 +33,7 @@ without prior permission by the authors of Eressea.
|
|||
#include "vortex.h"
|
||||
|
||||
#include <modules/score.h>
|
||||
#include <attributes/attributes.h>
|
||||
|
||||
/* util includes */
|
||||
#include <util/attrib.h>
|
||||
|
@ -1605,6 +1606,14 @@ static void parse_param(struct param **params, xmlNodePtr node)
|
|||
|
||||
static void parse_ai(race * rc, xmlNodePtr node)
|
||||
{
|
||||
int n;
|
||||
|
||||
n = xml_ivalue(node, "scare", 0);
|
||||
if (n>0) {
|
||||
attrib *a = a_new(&at_scare);
|
||||
a->data.i = n;
|
||||
a_add(&rc->attribs, a);
|
||||
}
|
||||
rc->splitsize = xml_ivalue(node, "splitsize", 0);
|
||||
rc->aggression = (float)xml_fvalue(node, "aggression", 0.04);
|
||||
if (xml_bvalue(node, "killpeasants", false))
|
||||
|
@ -1647,6 +1656,7 @@ static int parse_races(xmlDocPtr doc)
|
|||
xmlFree(propValue);
|
||||
|
||||
rc->magres = (float)xml_fvalue(node, "magres", rc->magres);
|
||||
rc->healing = (float)xml_fvalue(node, "healing", rc->healing);
|
||||
rc->maxaura = (float)xml_fvalue(node, "maxaura", rc->maxaura);
|
||||
rc->regaura = (float)xml_fvalue(node, "regaura", rc->regaura);
|
||||
rc->recruitcost = xml_ivalue(node, "recruitcost", rc->recruitcost);
|
||||
|
|
32
src/laws.c
32
src/laws.c
|
@ -36,6 +36,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|||
#include "study.h"
|
||||
#include "wormhole.h"
|
||||
#include "prefix.h"
|
||||
#include "reports.h"
|
||||
#include "teleport.h"
|
||||
#include "calendar.h"
|
||||
#include "guard.h"
|
||||
|
@ -3463,23 +3464,26 @@ static int use_item(unit * u, const item_type * itype, int amount, struct order
|
|||
|
||||
static double heal_factor(const unit * u)
|
||||
{
|
||||
double elf_regen;
|
||||
// TODO: do not hard-code, make this a property, race.healing
|
||||
switch (old_race(u_race(u))) {
|
||||
case RC_TROLL:
|
||||
case RC_DAEMON:
|
||||
return 1.5;
|
||||
case RC_GOBLIN:
|
||||
return 2.0;
|
||||
case RC_ELF:
|
||||
elf_regen = get_param_flt(u_race(u)->parameters, "regen.forest", 1.0F);
|
||||
if (elf_regen != 1.0 && r_isforest(u->region)) {
|
||||
const race * rc = u_race(u);
|
||||
if (rc->healing>0) {
|
||||
return rc->healing;
|
||||
}
|
||||
if (r_isforest(u->region)) {
|
||||
static int rc_cache;
|
||||
static const race *rc_elf;
|
||||
if (rc_changed(&rc_cache)) {
|
||||
rc_elf = get_race(RC_ELF);
|
||||
}
|
||||
if (rc==rc_elf) {
|
||||
static int config;
|
||||
static double elf_regen = 1.0;
|
||||
if (config_changed(&config)) {
|
||||
elf_regen = get_param_flt(u_race(u)->parameters, "regen.forest", 1.0F);
|
||||
}
|
||||
return elf_regen;
|
||||
}
|
||||
return 1.0;
|
||||
default:
|
||||
return 1.0;
|
||||
}
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
void monthly_healing(void)
|
||||
|
|
|
@ -1363,7 +1363,9 @@ static void do_fumble(castorder * co)
|
|||
int level = co->level;
|
||||
int duration;
|
||||
double effect;
|
||||
|
||||
static const race *rc_toad;
|
||||
static int rc_cache;
|
||||
|
||||
ADDMSG(&u->faction->msgs,
|
||||
msg_message("patzer", "unit region spell", u, r, sp));
|
||||
switch (rng_int() % 10) {
|
||||
|
@ -1394,7 +1396,10 @@ static void do_fumble(castorder * co)
|
|||
duration = rng_int() % level / 2;
|
||||
if (duration < 2) duration = 2;
|
||||
add_trigger(&u->attribs, "timer", trigger_timeout(duration, trestore));
|
||||
u_setrace(u, get_race(RC_TOAD));
|
||||
if (rc_changed(&rc_cache)) {
|
||||
rc_toad = get_race(RC_TOAD);
|
||||
}
|
||||
u_setrace(u, rc_toad);
|
||||
u->irace = NULL;
|
||||
ADDMSG(&r->msgs, msg_message("patzer6", "unit region spell", u, r, sp));
|
||||
break;
|
||||
|
|
|
@ -38,6 +38,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|||
#include <util/language.h>
|
||||
|
||||
/* libc includes */
|
||||
#include <assert.h>
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
|
||||
|
@ -105,14 +106,14 @@ void score(void)
|
|||
int itemscore = 0;
|
||||
int i;
|
||||
faction *f = u->faction;
|
||||
const race *rc = u_race(u);
|
||||
|
||||
if (f == NULL || u_race(u) == get_race(RC_SPELL)
|
||||
|| u_race(u) == get_race(RC_BIRTHDAYDRAGON)) {
|
||||
if (f == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (old_race(u_race(u)) <= RC_AQUARIAN) {
|
||||
f->score += (u_race(u)->recruitcost * u->number) / 50;
|
||||
else if (rc->recruitcost>0) {
|
||||
assert(playerrace(rc));
|
||||
f->score += (rc->recruitcost * u->number) / 50;
|
||||
}
|
||||
f->score += get_money(u) / 50;
|
||||
for (itm = u->items; itm; itm = itm->next) {
|
||||
|
|
|
@ -28,6 +28,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|||
/* attributes includes */
|
||||
#include <attributes/targetregion.h>
|
||||
#include <attributes/hate.h>
|
||||
#include <attributes/attributes.h>
|
||||
|
||||
/* kernel includes */
|
||||
#include <kernel/build.h>
|
||||
|
@ -79,22 +80,17 @@ static void eaten_by_monster(unit * u)
|
|||
int n = 0;
|
||||
int horse = -1;
|
||||
const resource_type *rhorse = get_resourcetype(R_HORSE);
|
||||
const race *rc = u_race(u);
|
||||
attrib *a;
|
||||
|
||||
if (multi == 0.0) {
|
||||
multi = RESOURCE_QUANTITY * newterrain(T_PLAIN)->size / 10000.0;
|
||||
}
|
||||
|
||||
// TODO: do not hard-code, make it a race property or callback? it's already RCF_KILLPEASANTS
|
||||
switch (old_race(u_race(u))) {
|
||||
case RC_FIREDRAGON:
|
||||
n = rng_int() % 80 * u->number;
|
||||
break;
|
||||
case RC_DRAGON:
|
||||
n = rng_int() % 200 * u->number;
|
||||
break;
|
||||
case RC_WYRM:
|
||||
n = rng_int() % 500 * u->number;
|
||||
break;
|
||||
default:
|
||||
a = a_find(rc->attribs, &at_scare);
|
||||
if (a) {
|
||||
n = rng_int() & a->data.i * u->number;
|
||||
} else {
|
||||
n = rng_int() % (u->number / 20 + 1);
|
||||
horse = 0;
|
||||
}
|
||||
|
@ -168,21 +164,14 @@ static int scareaway(region * r, int anzahl)
|
|||
static void scared_by_monster(unit * u)
|
||||
{
|
||||
int n;
|
||||
|
||||
switch (old_race(u_race(u))) {
|
||||
case RC_FIREDRAGON:
|
||||
n = rng_int() % 160 * u->number;
|
||||
break;
|
||||
case RC_DRAGON:
|
||||
n = rng_int() % 400 * u->number;
|
||||
break;
|
||||
case RC_WYRM:
|
||||
n = rng_int() % 1000 * u->number;
|
||||
break;
|
||||
default:
|
||||
const race *rc = u_race(u);
|
||||
attrib *a;
|
||||
a = a_find(rc->attribs, &at_scare);
|
||||
if (a) {
|
||||
n = rng_int() & a->data.i * u->number;
|
||||
} else {
|
||||
n = rng_int() % (u->number / 4 + 1);
|
||||
}
|
||||
|
||||
if (n > 0) {
|
||||
n = lovar(n);
|
||||
n = _min(rpeasants(u->region), n);
|
||||
|
|
|
@ -84,9 +84,6 @@ static void equip_newunits(const struct equipment *eq, struct unit *u)
|
|||
u_set_ship(u, sh);
|
||||
}
|
||||
break;
|
||||
case RC_CENTAUR:
|
||||
rsethorses(r, 250 + rng_int() % 51 + rng_int() % 51);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -104,6 +104,19 @@ const char *coasts[MAXDIRECTIONS] = {
|
|||
"coast::w"
|
||||
};
|
||||
|
||||
bool omniscient(const faction *f)
|
||||
{
|
||||
static const race *rc_template, *rc_illusion;
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static char *groupid(const struct group *g, const struct faction *f)
|
||||
{
|
||||
typedef char name[OBJECTIDSIZE + 1];
|
||||
|
@ -1135,19 +1148,24 @@ static void add_seen(region *r, seen_mode mode) {
|
|||
}
|
||||
}
|
||||
|
||||
static void faction_add_seen(faction *f, region *r, seen_mode mode) {
|
||||
static void add_seen_nb(faction *f, region *r, seen_mode mode) {
|
||||
region *first = r, *last = r;
|
||||
add_seen(r, mode);
|
||||
if (mode > seen_neighbour) {
|
||||
region *next[MAXDIRECTIONS];
|
||||
int d;
|
||||
get_neighbours(r, next);
|
||||
for (d = 0; d != MAXDIRECTIONS; ++d) {
|
||||
if (next[d] && next[d]->seen.mode<seen_neighbour) {
|
||||
faction_add_seen(f, next[d], seen_neighbour);
|
||||
region *rn = next[d];
|
||||
if (rn && rn->seen.mode<seen_neighbour) {
|
||||
add_seen(rn, seen_neighbour);
|
||||
if (first->index>rn->index) first = rn;
|
||||
if (last->index<rn->index) last = rn;
|
||||
}
|
||||
}
|
||||
}
|
||||
update_interval(f, r);
|
||||
update_interval(f, first);
|
||||
update_interval(f, last);
|
||||
}
|
||||
|
||||
/** mark all regions seen by the lighthouse.
|
||||
|
@ -1162,7 +1180,7 @@ static void prepare_lighthouse(building * b, report_context *ctx)
|
|||
for (ql = rlist, qi = 0; ql; ql_advance(&ql, &qi, 1)) {
|
||||
region *rl = (region *)ql_get(ql, qi);
|
||||
if (!fval(rl->terrain, FORBIDDEN_REGION)) {
|
||||
faction_add_seen(f, rl, seen_lighthouse);
|
||||
add_seen_nb(f, rl, seen_lighthouse);
|
||||
}
|
||||
}
|
||||
ql_free(rlist);
|
||||
|
@ -1286,7 +1304,7 @@ static region *firstregion(faction * f)
|
|||
static void cb_add_seen(region *r, unit *u, void *cbdata) {
|
||||
faction *f = (faction *)cbdata;
|
||||
if (u->faction==f) {
|
||||
faction_add_seen(f, r, seen_travel);
|
||||
add_seen_nb(f, r, seen_travel);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1327,7 +1345,7 @@ void prepare_report(report_context *ctx, faction *f)
|
|||
if (u && u->faction==f) {
|
||||
prepare_lighthouse(b, ctx);
|
||||
if (u_race(u) != get_race(RC_SPELL) || u->number == RS_FARVISION) {
|
||||
faction_add_seen(f, r, seen_unit);
|
||||
add_seen_nb(f, r, seen_unit);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1338,7 +1356,7 @@ void prepare_report(report_context *ctx, faction *f)
|
|||
for (u = r->units; u; u = u->next) {
|
||||
if (u->faction==f) {
|
||||
if (u_race(u) != get_race(RC_SPELL) || u->number == RS_FARVISION) {
|
||||
faction_add_seen(f, r, seen_unit);
|
||||
add_seen_nb(f, r, seen_unit);
|
||||
}
|
||||
if (fval(r, RF_LIGHTHOUSE)) {
|
||||
if (u->building && u->building->type == bt_lighthouse && inside_building(u)) {
|
||||
|
@ -1349,7 +1367,7 @@ void prepare_report(report_context *ctx, faction *f)
|
|||
}
|
||||
}
|
||||
|
||||
if (fval(r, RF_TRAVELUNIT)) {
|
||||
if (fval(r, RF_TRAVELUNIT) && r->seen.mode<seen_travel) {
|
||||
travelthru_map(r, cb_add_seen, f);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -48,6 +48,8 @@ extern "C" {
|
|||
|
||||
struct unit *can_find(struct faction *, struct faction *);
|
||||
|
||||
bool omniscient(const struct faction *f);
|
||||
|
||||
/* funktionen zum schreiben eines reports */
|
||||
void sparagraph(struct strlist **SP, const char *s, unsigned int indent, char mark);
|
||||
void lparagraph(struct strlist **SP, char *s, unsigned int indent, char mark);
|
||||
|
|
|
@ -410,7 +410,11 @@ static void test_seen_travelthru(CuTest *tc) {
|
|||
r3 = test_create_region(2, 0, 0);
|
||||
|
||||
u = test_create_unit(f, r1);
|
||||
CuAssertPtrEquals(tc, r1, f->first);
|
||||
CuAssertPtrEquals(tc, r1, f->last);
|
||||
travelthru_add(r2, u);
|
||||
CuAssertPtrEquals(tc, r1, f->first);
|
||||
CuAssertPtrEquals(tc, r3, f->last);
|
||||
prepare_report(&ctx, f);
|
||||
CuAssertPtrEquals(tc, r1, ctx.first);
|
||||
CuAssertPtrEquals(tc, 0, ctx.last);
|
||||
|
|
|
@ -2730,9 +2730,9 @@ static int sp_firewall(castorder * co)
|
|||
* (SPELLLEVEL | TESTCANSEE)
|
||||
*/
|
||||
|
||||
static race *unholy_race(const race *rc) {
|
||||
static const race *unholy_race(const race *rc) {
|
||||
static int cache;
|
||||
static race * rc_skeleton, *rc_zombie, *rc_ghoul;
|
||||
static const race * rc_skeleton, *rc_zombie, *rc_ghoul;
|
||||
if (rc_changed(&cache)) {
|
||||
rc_skeleton = get_race(RC_SKELETON);
|
||||
rc_zombie = get_race(RC_ZOMBIE);
|
||||
|
|
|
@ -95,7 +95,7 @@ magic_t getmagicskill(const struct locale * lang)
|
|||
bool is_migrant(unit * u)
|
||||
{
|
||||
static int cache;
|
||||
static race *toad_rc;
|
||||
static const race *toad_rc;
|
||||
|
||||
if (u_race(u) == u->faction->race)
|
||||
return false;
|
||||
|
@ -113,7 +113,7 @@ bool is_migrant(unit * u)
|
|||
/* ------------------------------------------------------------- */
|
||||
bool magic_lowskill(unit * u)
|
||||
{
|
||||
static race *toad_rc;
|
||||
static const race *toad_rc;
|
||||
static int cache;
|
||||
if (rc_changed(&cache)) {
|
||||
toad_rc = get_race(RC_TOAD);
|
||||
|
|
|
@ -291,10 +291,10 @@ void test_learn_skill_multi(CuTest *tc) {
|
|||
|
||||
static void test_demon_skillchanges(CuTest *tc) {
|
||||
unit * u;
|
||||
race * rc;
|
||||
const race * rc;
|
||||
test_setup();
|
||||
rc = test_create_race("demon");
|
||||
CuAssertPtrEquals(tc, rc, get_race(RC_DAEMON));
|
||||
CuAssertPtrEquals(tc, (void *)rc, (void *)get_race(RC_DAEMON));
|
||||
u = test_create_unit(test_create_faction(rc), test_create_region(0, 0, 0));
|
||||
CuAssertPtrNotNull(tc, u);
|
||||
set_level(u, SK_CROSSBOW, 1);
|
||||
|
|
|
@ -64,6 +64,8 @@ attrib_type at_travelunit = {
|
|||
*/
|
||||
void travelthru_add(region * r, unit * u)
|
||||
{
|
||||
region *next[MAXDIRECTIONS];
|
||||
int d;
|
||||
attrib *a;
|
||||
quicklist *ql;
|
||||
|
||||
|
@ -84,6 +86,10 @@ void travelthru_add(region * r, unit * u)
|
|||
* could be in regions that are located before the [first, last] interval,
|
||||
* and recalculation is needed */
|
||||
update_interval(u->faction, r);
|
||||
get_neighbours(r, next);
|
||||
for (d=0;d!=MAXDIRECTIONS;++d) {
|
||||
update_interval(u->faction, next[d]);
|
||||
}
|
||||
}
|
||||
|
||||
bool travelthru_cansee(const struct region *r, const struct faction *f, const struct unit *u) {
|
||||
|
|
11
src/upkeep.c
11
src/upkeep.c
|
@ -115,7 +115,12 @@ void get_food(region * r)
|
|||
unit *u;
|
||||
int peasantfood = rpeasants(r) * 10;
|
||||
int food_rules = config_get_int("rules.food.flags", 0);
|
||||
|
||||
static const race *rc_demon;
|
||||
static int rc_cache;
|
||||
|
||||
if (rc_changed(&rc_cache)) {
|
||||
rc_demon = get_race(RC_DAEMON);
|
||||
}
|
||||
if (food_rules & FOOD_IS_FREE) {
|
||||
return;
|
||||
}
|
||||
|
@ -228,7 +233,7 @@ void get_food(region * r)
|
|||
* bei fehlenden Bauern den Dämon hungern lassen
|
||||
*/
|
||||
for (u = r->units; u; u = u->next) {
|
||||
if (u_race(u) == get_race(RC_DAEMON)) {
|
||||
if (u_race(u) == rc_demon) {
|
||||
int hungry = u->number;
|
||||
|
||||
/* use peasantblood before eating the peasants themselves */
|
||||
|
@ -250,7 +255,7 @@ void get_food(region * r)
|
|||
if (donor == u)
|
||||
donor = r->units;
|
||||
while (donor != NULL) {
|
||||
if (u_race(donor) == get_race(RC_DAEMON) && donor != u) {
|
||||
if (u_race(donor) == rc_demon && donor != u) {
|
||||
if (get_effect(donor, pt_blood)) {
|
||||
/* if he's in our faction, drain him: */
|
||||
if (donor->faction == u->faction)
|
||||
|
|
Loading…
Add table
Reference in a new issue