diff --git a/.classpath b/.classpath index d42f8d855..ca9e0e4eb 100644 --- a/.classpath +++ b/.classpath @@ -4,4 +4,4 @@ - + \ No newline at end of file diff --git a/data/descriptions/filter_descriptions.txt b/data/descriptions/filter_descriptions.txt index 090f5c622..b978376da 100644 --- a/data/descriptions/filter_descriptions.txt +++ b/data/descriptions/filter_descriptions.txt @@ -334,6 +334,24 @@ #extendeddescription "and %pronoun_pos% infernal heritage gives %pronoun_obj% great power" #end +#new +#name "dragonblood desc" +#set "lineage" +#prev "lineage desc" +#synonym "the dragons of old" +#synonym "fire-breathing dragons" +#extendeddescription "and can annihilate enemies with %pronoun_pos% fiery breath" +#end + +#new +#name "serpentblood desc" +#set "lineage" +#prev "lineage desc" +#synonym "an ancient reptilian race" +#synonym "a race of venomous lizards" +#extendeddescription "and %pronoun% retain %pronoun_pos% deadly fangs" +#end + #new #name "pooramphibian desc" #set "lineage" @@ -353,6 +371,16 @@ #extendeddescription "and %pronoun% can move and breathe underwater as well as in air" #end +#new +#name "psychic desc" +#set "wondrous" +#prev "wondrous desc" +#bridge "wondrous bridge" +#synonym "strange psychic powers" +#synonym "powerful mental abilities" +#extendeddescription "and can paralyze enemies through sheer mental force" +#end + #new #name "levy desc" #description "Levy" @@ -835,6 +863,17 @@ #extendeddescription "and in the light of the sun few would dare strike %pronoun_obj%" #end +#new +#name "halt heretic desc" +#synonym "an aura of sacred authority" +#synonym "an unfaltering aura of faith" +#synonym "the power to crush false believers" +#extendeddescription "and those who serve foreign gods may not strike %pronoun_obj%" +#set "wondrous" +#prev "wondrous desc" +#bridge "wondrous bridge" +#end + #new #name "fear desc" #synonym "terrifying" @@ -866,6 +905,16 @@ #extendeddescription "and those that attempt to strike %pronoun_obj% will be burned by the flames" #end +#new +#name "vineshield desc" +#set "wondrous" +#prev "wondrous desc" +#bridge "wondrous bridge" +#synonym "the protection of living plants" +#synonym "a cloak of writhing ivy" +#extendeddescription "and can entangle attackers with growing vines" +#end + #new #name "poisonarmor desc" #synonym "venomous thorns" @@ -876,6 +925,16 @@ #extendeddescription "and those that attempt to strike %pronoun_obj% risk poisoning %pronoun_obj%selves" #end +#new +#name "bloodvengeance desc" +#set "wondrous" +#prev "wondrous desc" +#bridge "wondrous bridge" +#synonym "an unutterable curse of vengeance" +#synonym "a pact of blood vengeance" +#extendeddescription "and in return for ritual mutilation %pronoun% share %pronoun_pos% pain with %pronoun_pos% attackers" +#end + #new #name "airshield desc" #set "wondrous" @@ -988,13 +1047,32 @@ #name "chargedbody desc" #description "has charged body" #synonym "a protective electric field" -#synonym "an electrically charge" +#synonym "an electrical charge" #set "wondrous" #prev "wondrous desc" #bridge "wondrous bridge" #extendeddescription "and will unleash a blast of lightning when struck" #end +#new +#name "falconer desc" +#set "skill" +#prev "skill desc" +#synonym "falconry" +#synonym "training birds of prey" +#extendeddescription "and %pronoun% carry trained falcons" +#end + + +#new +#name "militia desc" +#synonym "a personal spearbearer" +#synonym "the power to levy peasants" +#set "retinue" +#prev "retinue desc" +#next "retinue end" +#end + #new #name "shikigami desc" #description "has a shikigami familiar" @@ -1560,7 +1638,7 @@ #set "wondrous" #prev "wondrous desc" #bridge "wondrous bridge" -#extendeddescription "and %pronoun% grow stronger in stormy weather" +#extendeddescription "and %pronoun% grow stronger in the absence of light" #end #new @@ -1582,6 +1660,25 @@ #synonym "the strength of giants" #end +#new +#name "extra speed desc" +#set "wondrous" +#prev "wondrous desc" +#bridge "wondrous bridge" +#synonym "lightning speed" +#synonym "supernatural quickness" +#end + +#new +#name "larger desc" +#set "wondrous" +#prev "wondrous desc" +#bridge "wondrous bridge" +#synonym "enormous size" +#synonym "prodigious size and strength" +#synonym "great stature" +#end + #new #name "springpower desc" #synonym "a connection to the spring" diff --git a/data/filters/default_sacredfilters.txt b/data/filters/default_sacredfilters.txt index a04334569..30f08c578 100644 --- a/data/filters/default_sacredfilters.txt +++ b/data/filters/default_sacredfilters.txt @@ -182,7 +182,6 @@ #chanceinc "personalcommand #stealthy -10" #chanceinc "race vanir -20" #chanceinc "pose mounted *0.25" -#power 2 #filterdesc "stealthy desc" #end @@ -303,34 +302,36 @@ #end #new -#name "fireshield2" +#name "fireshield3" #type "fireshield" #basechance 0.0 -#command "#fireshield 2" +#command "#fireshield 3" #command "#speciallook 1" -#chanceinc "command #fireshield +2" +#chanceinc "command #fireshield +3" #chanceinc "magic fire 1" +#chanceinc pose ranged *0.25 #power 1 #filterdesc "fireshield desc" #end #new -#name "fireshield4" +#name "fireshield6" #type "fireshield" #basechance 0.0 -#command "#fireshield +4" +#command "#fireshield +6" #command "#speciallook 1" #chanceinc "command #fireshield 1" #chanceinc "magic fire 1" -#power 2 +#chanceinc pose ranged *0.25 +#power 3 #filterdesc "fireshield desc" #end #new -#name "fireshield6" +#name "fireshield9" #type "fireshield" #basechance 0.0 -#command "#fireshield +6" +#command "#fireshield +9" #command "#speciallook 1" #chanceinc "command #fireshield 0.5" #chanceinc "magic fire 0.5" @@ -338,7 +339,8 @@ #chanceinc "prot 10 *0.25" #chanceinc "prot 12 *0.125" #chanceinc "prot 15 *0" -#power 3 +#chanceinc pose ranged *0.25 +#power 4 #filterdesc "fireshield desc" #end @@ -401,6 +403,7 @@ #command "#hp +2" #command "#gcost +5" #filterdesc "professional desc" +#power 2 #end #new @@ -422,18 +425,28 @@ #basechance 0.0 #chanceinc "magic air 2" #chanceinc "command #illusion 10" +#chanceinc pose ranged *0.5 #command "#illusion" #command "#stealthy +0" -#command "#gcost *1.2" -#command "#gcost +23" -#price_per_command #hp 1 10 +#command "#gcost *1.1" +#command "#gcost +15" +#price_per_command #hp 1 20 #tag "path air" #chanceinc "personalcommand #illusion -20" #chanceinc "race van -20" #chanceinc "race sidhe -20" #chanceinc "race abysian *0.5" +#chanceinc "prot 10 *0.5" #chanceinc "prot 15 *0.5" +#chanceinc "prot 20 *0.5" +#chanceinc "def below 9 *0.25" +#chanceinc "def below 12 *0.5" +#chanceinc "def 17 *0.5" +#chanceinc "def 20 *0.25" #chanceinc "pose mounted *0.5" +#themeinc "thisarmorprot 13 *0.25" +#themeinc "thisarmorprot 15 *0.25" +#themeinc "thisarmorprot 17 *0.25" #power 4 #filterdesc "illusion desc" #end @@ -521,7 +534,7 @@ #command "#poisonres +3" #command "#shockres +3" #command "#gcost +5" -#power 2 +#power 1 #filterdesc "allres desc" #end @@ -536,6 +549,7 @@ #synonym "a supernatural healing factor" #synonym "the ability to recover from injuries" #filterdesc "recuperation desc" +#power 2 #end #new @@ -571,11 +585,12 @@ #name "stormpower" #type "stormpower" #basechance 0.0 -#chanceinc "magic air 1" +#chanceinc "magic air 0.5" #chanceinc "command #shockres 0.3" #chanceinc "command #flying 0.2" -#chanceinc "personalcommand #flying 3" +#chanceinc "personalcommand #flying 1.5" #command "#stormpower +2" +#command "#shockres +3" #command "#gcost +5" #tag "path air" #filterdesc "stormpower desc" @@ -585,11 +600,12 @@ #name "stormpower" #type "stormpower" #basechance 0.0 -#chanceinc "magic air 1" -#chanceinc "command #shockres 0.3" -#chanceinc "command #flying 0.2" -#chanceinc "personalcommand #flying 3" +#chanceinc "magic air 0.25" +#chanceinc "command #shockres 0.2" +#chanceinc "command #flying 0.1" +#chanceinc "personalcommand #flying 1" #command "#stormpower +4" +#command "#shockres +5" #command "#gcost +10" #power 2 #tag "path air" @@ -599,19 +615,20 @@ #new #type "seasonpower" #name "springpower-low" -#basechance 0.5 +#basechance 0.3 #chanceinc "magic water 0.75" #chanceinc "magic nature 0.75" #chanceinc "magic water nature 3" #command "#springpower +25" #tag "path nature" #filterdesc "springpower desc" +#power 0 #end #new #type "seasonpower" #name "summerpower-low" -#basechance 0.5 +#basechance 0.3 #chanceinc "magic fire 0.75" #chanceinc "magic nature 0.75" #chanceinc "magic fire nature 3" @@ -619,24 +636,26 @@ #command "#summerpower +25" #tag "path fire" #filterdesc "summerpower desc" +#power 0 #end #new #type "seasonpower" #name "fallpower-low" -#basechance 0.5 +#basechance 0.3 #chanceinc "magic earth 1" #chanceinc "magic nature 0.5" #chanceinc "magic earth nature 3" #command "#fallpower +25" #tag "path earth" #filterdesc "fallpower desc" +#power 0 #end #new #type "seasonpower" #name "winterpower-low" -#basechance 0.0 +#basechance 0.1 #chanceinc "magic water 0.7" #chanceinc "magic nature 0.1" #chanceinc "magic death 0.7" @@ -645,24 +664,26 @@ #command "#winterpower +25" #tag "path water" #filterdesc "winterpower desc" +#power 0 #end #new #type "seasonpower" #name "springpower-high" -#basechance 0.1 +#basechance 0.0 #chanceinc "magic water 0.25" #chanceinc "magic nature 0.25" #chanceinc "magic water nature 1" #command "#springpower +50" #tag "path nature" #filterdesc "springpower desc" +#power 0 #end #new #type "seasonpower" #name "summerpower-high" -#basechance 0.1 +#basechance 0.0 #chanceinc "magic fire 0.25" #chanceinc "magic nature 0.25" #chanceinc "magic fire nature 1" @@ -670,6 +691,7 @@ #command "#summerpower +50" #tag "path fire" #filterdesc "summerpower desc" +#power 0 #end #new @@ -682,6 +704,7 @@ #command "#fallpower +50" #tag "path earth" #filterdesc "fallpower desc" +#power 0 #end #new @@ -696,6 +719,7 @@ #command "#winterpower +50" #tag "path water" #filterdesc "winterpower desc" +#power 0 #end #new @@ -726,6 +750,7 @@ #command "#yearturn 2" #command "#gcost +3" #filterdesc "turningseasonpower desc" +#power 2 #end #new @@ -736,7 +761,7 @@ #primarycommand "#blind" #command "#darkpower +2" #command "#darkvision 100" -#command "#gcost +3" +#command "#gcost +1" #tag "path death" #filterdesc "darkpower desc" #end @@ -749,7 +774,7 @@ #primarycommand "#blind" #command "#darkpower +4" #command "#darkvision 100" -#command "#gcost +8" +#command "#gcost +2" #power 2 #tag "path death" #filterdesc "darkpower desc" @@ -761,7 +786,7 @@ #chanceinc "personalcommand #blind 5" #chanceinc "magic death *2" #command "#darkpower +2" -#command "#gcost +3" +#command "#gcost +1" #tag "path death" #filterdesc "darkpower desc" #end @@ -772,7 +797,7 @@ #chanceinc "personalcommand #blind 3" #chanceinc "magic death *2" #command "#darkpower +4" -#command "#gcost +8" +#command "#gcost +3" #power 2 #tag "path death" #filterdesc "darkpower desc" @@ -784,6 +809,7 @@ #command "#dompower +1" #command "#rpcost +5" #filterdesc "dompower desc" +#power 2 #end #new @@ -792,9 +818,10 @@ #basechance 0.1 #chanceinc "magic astral 0.1" #chanceinc "command #awe +1" +#chanceinc pose ranged *0.25 #command "#awe +1" -#command "#gcost +15" -#command "#gcost *1.2" +#command "#gcost +10" +#command "#gcost *1.1" #price_per_command #hp 1 10 #themeinc thisarmorprot 18 *0.125 #themeinc thisarmorprot 15 *0.125 @@ -803,15 +830,17 @@ #filterdesc "awe desc" #end -#new magefilter +#new #name "sun awe" #basechance 0.1 #chanceinc magic astral OR magic fire 0.1 #chanceinc magic astral fire 0.1 #chanceinc "command #sunawe +1" +#chanceinc pose ranged *0.25 #command "#sunawe +1" -#command "#gcost +15" -#command "#gcost *1.2" +#command "#gcost +10" +#command "#gcost *1.1" +#primarycommand "#command awe" #price_per_command #hp 1 10 #themeinc thisarmorprot 18 *0.125 #themeinc thisarmorprot 15 *0.125 @@ -820,12 +849,25 @@ #filterdesc "sun awe desc" #end +#new +#name "halt heretic" +#basechance 0.1 +#chanceinc magic astral 0.1 +#chanceinc pose ranged *0.25 +#command "#haltheretic +3" +#command "#gcost +5" +#price_per_command #hp 1 20 +#power 2 +#filterdesc "halt heretic desc" +#end + #new #name "regen10 size 1-2" #basechance 0.2 #chanceinc "magic nature 0.8" #chanceinc "command #regeneration 6" #chanceinc "personalcommand size above 2 *0" +#chanceinc pose ranged *0.25 #command "#regeneration 10" #command "#gcost +2" #command "#gcost *1.25" @@ -842,6 +884,7 @@ #chanceinc "command #regeneration 6" #chanceinc "personalcommand size below 3 *0" #chanceinc "personalcommand size above 4 *0" +#chanceinc pose ranged *0.25 #command "#regeneration 10" #command "#gcost +10" #command "#gcost *1.25" @@ -858,6 +901,7 @@ #chanceinc "magic nature 0.8" #chanceinc "command #regeneration 6" #chanceinc "personalcommand size below 5 *0" +#chanceinc pose ranged *0.25 #command "#regeneration 10" #command "#gcost +20" #command "#gcost *1.5" @@ -931,6 +975,7 @@ #type "resist" #name "bluntres" #basechance 0.5 +#chanceinc pose ranged *0.25 #primarycommand "#bluntres" #command "#bluntres" #command "#gcost +5" @@ -942,6 +987,7 @@ #type "resist" #name "pierceres" #basechance 0.5 +#chanceinc pose ranged *0.5 #primarycommand "#pierceres" #command "#pierceres" #command "#gcost +5" @@ -953,6 +999,7 @@ #type "resist" #name "slashres" #basechance 0.5 +#chanceinc pose ranged *0.25 #primarycommand "#slashres" #command "#slashres" #command "#gcost +5" @@ -964,6 +1011,7 @@ #type "invuln" #name "invulnerable (5)" #basechance 0.5 +#chanceinc pose ranged *0.5 #primarycommand "#prot" #command "#invulnerable +5" #command "#gcost +8" @@ -975,6 +1023,7 @@ #type "invuln" #name "invulnerable (10)" #basechance 0.25 +#chanceinc pose ranged *0.5 #primarycommand "#prot" #command "#invulnerable +10" #command "#gcost +10" @@ -1009,6 +1058,7 @@ #name "poisonarmor" #basechance 0.0 #chanceinc "magic nature 3" +#chanceinc pose ranged *0.25 #command "#poisonarmor +5" #command "#gcost +5" #tag "path nature" @@ -1020,6 +1070,7 @@ #type overcharged #basechance 0.0 #chanceinc "magic air 2" +#chanceinc pose ranged *0.25 #command "#overcharged +10" #tag "path air" #price_if_command above #prot 20 +5 @@ -1033,6 +1084,7 @@ #type overcharged #basechance 0.0 #chanceinc "magic air 1" +#chanceinc pose ranged *0.25 #command "#overcharged +20" #tag "path air" #price_if_command above #prot 15 +5 @@ -1083,7 +1135,7 @@ #chanceinc "personalcommand #amphibian -100" #tag "nopose mounted" #chanceinc "magic water 2" -#power 2 +#power 1 #theme "toadtotem" #theme "totemanimal" #filterdesc "amphibian desc" @@ -1100,14 +1152,14 @@ #chanceinc "magic astral 0.95" #chanceinc "pose mounted *0.25" #chanceinc "pose chariot *0.1" +#chanceinc pose ranged *0.25 #themeinc thisarmorprot 18 *0.125 #themeinc thisarmorprot 15 *0.125 #themeinc thisarmorprot 12 *0.125 -#power 3 +#power 5 #filterdesc "ethereal desc" #end - #new #name "cultist" #chance 0.1 @@ -1117,3 +1169,255 @@ #command "#startaff +20" #filterdesc "cultist desc" #end + +#new +#name "larger" +#basechance 0.25 +#chanceinc "magic nature 0.5" +#chanceinc "magic earth 0.25" +#chanceinc "personalcommand size above 5 *0" +#chanceinc "personalcommand size below 2 *0.5" +#chanceinc "pose ranged *0.25" +#tag "nopose mounted" +#tag "nopose chariot" +#command "#size +1" +#command "#hp *1.3" +#command "#str +3" +#command "#def -1" +#command "#mapmove +2" +#command "#drawsize 30" +#command "#gcost +10" +#power 3 +#filterdesc "larger desc" +#end + +#new +#name "fear" +#basechance 0.05 +#chanceinc magic death 0.25 +#chanceinc magic blood 0.25 +#chanceinc "personalcommand size below 2 -0.4" +#chanceinc "personalcommand size above 3 0.25" +#chanceinc "personalcommand #undead 0.25" +#chanceinc "personalcommand #demon 0.25" +#chanceinc pose ranged *0.25 +#command "#fear +5" +#command "#gcost +25" +#command "#gcost *1.25" +#price_per_command #hp 1 5 +#power 5 +#filterdesc "fear desc" +#end + +#new +#name "magicbeing" +#basechance 0.1 +#chanceinc magic nature 0.25 +#chanceinc magic astral 0.25 +#chanceinc "personalcommand #illusion 0.25" +#primarycommand "#magicbeing" +#command "#magicbeing" +#command "#mr +3" +#command "#att +1" +#command "#def +1" +#command "#gcost +1" +#filterdesc "magicbeing desc" +#end + +#new +#name "demonblood" +#basechance 0.1 +#chanceinc magic blood 0.5 +#chanceinc magic fire 0.25 +#chanceinc magic astral 0.25 +#chanceinc "personalcommand #fireres 0.025" +#chanceinc "personalcommand #undead *0" +#primarycommand "#demon" +#command "#demon" +#command "#mr +1" +#command "#gcost +4" +#command "#str +2" +#command "#hp +1" +#filterdesc "demonblood desc" +#end + +#new +#name "thickskin" +#basechance 0.5 +#chanceinc magic earth 0.5 +#chanceinc magic nature 0.5 +#chanceinc pose ranged *0.25 +#command "#prot +2" +#filterdesc "thickskin desc" +#end + +#new +#name "golem" +#basechance 0.25 +#chanceinc magic earth 0.25 +#chanceinc magic astral 0.25 +#chanceinc magic earth astral 0.25 +#chanceinc pose ranged *0.25 +#primarycommand "#stonebeing" +#command "#stonebeing" +#command "#ap -4" +#command "#prot +4" +#filterdesc "golem desc" +#power 3 +#end + +#new +#name "blind" +#basechance 0.25 +#primarycommand "#blind" +#command "#blind" +#command "#spiritsight" +#command "#att +1" +#command "#def +1" +#filterdesc "blind desc" +#end + +#new +#name "falconer" +#basechance 0.25 +#chanceinc magic air 0.5 +#chanceinc personalcommand mountainsurvival 0.25 +#chanceinc personalcommand forestsurvival 0.25 +#chanceinc personalcommand wastesurvival 0.25 +#chanceinc personalcommand stealthy 0.25 +#chanceinc personalcommand patrolbonus 0.25 +#primarycommand "#batstartsum1" +#command "#gcost +8" +#command "#batstartsum1 3371" +#filterdesc "falconer desc" +#power 3 +#end + +#new +#name "shieldbearer" +#basechance 0.25 +#chanceinc racetag human 0.5 +#command "#gcost +8" +#command "#batstartsum1 18" +#primarycommand "#batstartsum1" +#filterdesc "militia desc" +#power 3 +#end + +#new +#name "serpentblood" +#basechance 0.1 +#chanceinc magic nature 0.25 +#chanceinc race Ophidian -10 +#chanceinc race lizard -10 +#chanceinc race naga -10 +#chanceinc race sobek -10 +#chanceinc "personalcommand #poisonres 0.25" +#chanceinc "nationcommand #idealcold above 0 -2" +#chanceinc "nationcommand #idealheat above 0 0.0125" +#chanceinc "personalcommand #size above 3 -0.1" +#chanceinc pose ranged *0.1 +#command "#coldblood" +#command "#prot +2" +#command "#swimming" +#command "#weapon 239" +#command "#poisonres 10" +#power 3 +#filterdesc "serpentblood desc" +#end + +#new +#name "dragonblood" +#chance 0.025 +#chanceinc magic fire 0.1 +#chanceinc race Ophidian 0.1 +#chanceinc race abysian 0.1 +#chanceinc race lizard 0.1 +#chanceinc "personalcommand #fireres 0.1" +#chanceinc "nationcommand #idealheat above 1 0.1" +#chanceinc pose ranged *0.1 +#price_per_command #hp 1 20 +#price_per_command #str 1 2 +#define "#weapon fixeddrakefire" +#command "#fireres +10" +#command "#hp +3" +#command "#str +1" +#command "#prot +2" +#command "#gcost +20" +#command "#gcost *1.2" +#command "#rpcost +30" +#power 5 +#filterdesc "dragonblood desc" +#end + +#new +#name "psychic" +#chance 0.05 +#chanceinc magic astral 0.25 +#chanceinc race illithid -100 +#command "#voidsanity +10" +#command "#mr +2" +#command "#weapon 86" +#nopose chariot +#nopose ranged +#power 4 +#filterdesc "psychic desc" +#end + +#new +#name "extra speed" +#basechance 0.25 +#chanceinc magic air 0.5 +#chanceinc race van 0.1 +#chanceinc race sidhe 0.1 +#command "#ap +1" +#command "#ap *1.3" +#command "#def +1" +#command "#mapmove +4" +#command "#gcost +3" +#filterdesc "extra speed desc" +#power 2 +#end + +#new +#name "flight" +#basechance 0.25 +#chanceinc magic air 0.2 +#chanceinc magic astral 0.1 +#chanceinc magic air astral 0.2 +#chanceinc magic earth -0.1 +#primarycommand "#flying" +#command "#flying" +#command "#mapmove +6" +#command "#gcost +5" +#filterdesc "flying desc" +#power 5 +#end + +#new +#name "vineshield" +#basechance 0.05 +#chanceinc magic nature 0.2 +#chanceinc magic nature earth 0.1 +#chanceinc magic nature astral 0.1 +#chanceinc magic earth 0.1 +#chanceinc pose ranged *0.1 +#command "#entangle" +#command "#gcost *1.2" +#price_per_command #hp 1 10 +#power 5 +#filterdesc "vineshield desc" +#end + +#new +#name "bloodvengeance" +#basechance 0.05 +#chanceinc magic blood 0.25 +#chanceinc pose ranged *0.5 +#command "#bloodvengeance +1" +#command "#startaff +65" +#command "#gcost *1.1" +#price_per_command #hp 1 5 +#power 5 +#filterdesc "bloodvengeance desc" +#end \ No newline at end of file diff --git a/data/filters/default_sacredfilters_shapeshift.txt b/data/filters/default_sacredfilters_shapeshift.txt index 40e4bf234..fdf076cef 100644 --- a/data/filters/default_sacredfilters_shapeshift.txt +++ b/data/filters/default_sacredfilters_shapeshift.txt @@ -402,4 +402,33 @@ #theme "spidertotem" #theme "totemanimal" #filterdesc "spider shift desc" +#end + +#new +#type "shapeshift" +#name "ghost" +#basechance 0.025 +#chanceinc "magic death 0.25" +#chanceinc "magic blood 0.1" +#chanceinc "magic nature *0.25" +#chanceinc "personalcommand #size above 3 *0" +#chanceinc "personalcommand undead *0" +#command "#secondtmpshape ghost" +#command "#gcost *1.2" +#power 4 +#filterdesc "ghost desc" +#end + +#new +#type "shapeshift" +#name "lesserhorror" +#basechance 0.01 +#chanceinc "magic astral 0.01" +#chanceinc "magic blood 0.05" +#chanceinc "magic astral blood 0.5" +#command "#secondtmpshape lesserhorror" +#command "#horrormark" +#command "#gcost *1.2" +#power 3 +#filterdesc "lesserhorror desc" #end \ No newline at end of file diff --git a/data/items/customitems.txt b/data/items/customitems.txt index 0ac7d0d0c..be46085ad 100644 --- a/data/items/customitems.txt +++ b/data/items/customitems.txt @@ -2337,7 +2337,6 @@ #command "#natural" #end - #new customweapon #name "crabpincer" #command "#dmg 1" @@ -2347,3 +2346,9 @@ #command "#slash" #command "#natural" #end + +#new customweapon +#name "fixeddrakefire" +#command "#copyweapon 567" +#command "#bowstr" +#end \ No newline at end of file diff --git a/graphics/vaettir/armor/robes/loincloth.png b/graphics/vaettir/armor/robes/loincloth.png index a87ab40c6..77988e9c9 100644 Binary files a/graphics/vaettir/armor/robes/loincloth.png and b/graphics/vaettir/armor/robes/loincloth.png differ diff --git a/src/nationGen/chances/ChanceIncConditionType.java b/src/nationGen/chances/ChanceIncConditionType.java index bc10e3eaa..9722d14b2 100644 --- a/src/nationGen/chances/ChanceIncConditionType.java +++ b/src/nationGen/chances/ChanceIncConditionType.java @@ -747,6 +747,17 @@ Condition parseConditionArguments(ArgParser args) { } }, + DEF("def") { + @Override + Condition parseConditionArguments(ArgParser args) { + boolean not = args.nextOptionalFlag("not"); + boolean below = args.nextOptionalFlag("below"); + int target = args.nextInt(); + + return d -> d.u.getTotalDef() >= target != (below ^ not); + } + }, + ENC("enc") { @Override Condition parseConditionArguments(ArgParser args) { diff --git a/src/nationGen/nation/Nation.java b/src/nationGen/nation/Nation.java index 64a69d044..512df3d83 100644 --- a/src/nationGen/nation/Nation.java +++ b/src/nationGen/nation/Nation.java @@ -276,11 +276,8 @@ else if(random.nextDouble() > 0.9) // Sacred for(int i = 0; i < sacredcount; i++) { - int power = 1; - - - + if(random.nextDouble() < 0.9) { power++; diff --git a/src/nationGen/rostergeneration/SacredGenerator.java b/src/nationGen/rostergeneration/SacredGenerator.java index 02169a110..1928dd8b7 100644 --- a/src/nationGen/rostergeneration/SacredGenerator.java +++ b/src/nationGen/rostergeneration/SacredGenerator.java @@ -44,7 +44,6 @@ public SacredGenerator(NationGen g, Nation n, NationGenAssets assets) { private void addEpicness(Unit u, boolean sacred, int power) { - int origpower = power; // Determine stat boost amount @@ -168,22 +167,26 @@ private void addEpicness(Unit u, boolean sacred, int power) } // Add more stat boosts - else if(random.nextDouble() < 1.1 - powerups / (double)origpower) + else if(random.nextDouble() < 1.05 - powerups / (double)origpower) { - power--; powerups++; } // Add a filter else - { - - + { List choices = ChanceIncHandler.getFiltersWithPower(power, power, filters); - if(choices.size() == 0 || random.nextDouble() > 0.8) + if(choices.size() == 0 || random.nextDouble() > 0.5) choices = ChanceIncHandler.getFiltersWithPower(power - 1, power, filters); + if(choices.size() == 0 || random.nextDouble() > 0.5) + choices = ChanceIncHandler.getFiltersWithPower(power / 2, power, filters); + + if (choices.size() == 0 || random.nextDouble() > 0.5) + choices = ChanceIncHandler.getFiltersWithPower(0, power, filters); + + /* if(choices.size() == 0) { int range = 1; @@ -195,12 +198,13 @@ else if(random.nextDouble() < 1.1 - powerups / (double)origpower) } if(choices.size() == 0 || power <= 2 || (power <= 3 && random.nextDouble() < 0.35)) choices = ChanceIncHandler.getFiltersWithPower(-100, power, filters); + */ if(random.nextDouble() < 0.05) { List maybe = ChanceIncHandler.getFiltersWithPower(-100, -1, filters); - if(choices.size() > 0) + if(maybe.size() > 0) choices = maybe; @@ -418,16 +422,19 @@ public Unit generateUnit(boolean sacred, int power, boolean isFirstSacred) public Unit generateUnit(boolean sacred, int power, Race race, boolean isFirstSacred) { + if (sacred) + { + // Handle sacred power settings + double extrapower = this.nationGen.settings.get(SettingsType.sacredpower) - 1; + + power = (int) (power + power * extrapower * (1 + random.nextDouble() * 0.5) + extrapower); + } if(race == null) race = getRace(sacred); - Pose p = getPose(sacred, power, race, isFirstSacred); - - - double epicchance = random.nextDouble() * 0.5 + power * 0.25 + 0.25; Unit u = this.unitGen.generateUnit(race, p); @@ -495,37 +502,40 @@ else if(!canBeSacred(sacred, nation.races.get(0))) } public Pose getPose(boolean sacred, int power, Race race, boolean isFirstSacred) - { + { + /* + * This calculation is never actually used in this method - presumably at some point code got rearranged + * // Handle sacred power settings double extrapower = this.nationGen.settings.get(SettingsType.sacredpower) - 1; power = (int) (power + power * extrapower * (1 + random.nextDouble() * 0.5) + extrapower); - - + */ List possibleposes = new ArrayList<>(); - // Note that the first sacred of a nation should only be ranged if no others are available + // Note that the first sacred of a nation should very rarely be ranged if any others are available ChanceDistribution roles = new ChanceDistribution<>(); String toGet = "sacred"; if(race.hasSpecialRole("infantry", sacred)) { - roles.setChance("infantry", race.tags.getDouble(toGet + "infantrychance").orElse(1.0)); + roles.setChance("infantry", race.tags.getDouble(toGet + "infantrychance").orElse(1.0) + power * 0.1); } if(race.hasSpecialRole("mounted", sacred)) { - roles.setChance("mounted", race.tags.getDouble(toGet + "mountedchance").orElse(0.25)); + roles.setChance("mounted", race.tags.getDouble(toGet + "mountedchance").orElse(0.25) + power * 0.15); } if(race.hasSpecialRole("chariot", sacred)) { - roles.setChance("chariot", race.tags.getDouble(toGet + "chariotchance").orElse(0.05)); + roles.setChance("chariot", race.tags.getDouble(toGet + "chariotchance").orElse(0.05) + power * 0.1); } if(race.hasSpecialRole("ranged", sacred) && !isFirstSacred) { - roles.setChance("ranged", race.tags.getDouble(toGet + "rangedchance").orElse(0.125)); + roles.setChance("ranged", race.tags.getDouble(toGet + "rangedchance").orElse(0.25)); } else if(race.hasSpecialRole("ranged", sacred)) { - roles.setChance("ranged",0.0001); + roles.setChance("ranged",0.05); } - while(roles.hasPossible()) + // FIXED: this loop used to iterate through all possible roles and condense them into a single array with no weighting, ignoring the checks above and resulting in unwanted numbers of ranged sacreds + while(roles.hasPossible() && possibleposes.isEmpty()) { String role = roles.getRandom(this.random); roles.eliminate(role); @@ -547,13 +557,8 @@ else if(((race.tags.containsName("all_troops_sacred") && sacred) || ((race.tags. possibleposes.add(p); } } - - //if(possibleposes.size() > 0) - //break; } - - if(possibleposes.isEmpty()) { throw new IllegalStateException("No " + (sacred ? "sacred" : "elite") + " poses were found for " + race.name + ". Consider adding #all_troops_sacred or #all_troops_elite to race file to use normal poses."); } @@ -567,6 +572,7 @@ else if(((race.tags.containsName("all_troops_sacred") && sacred) || ((race.tags. /** * Adds some cost and caponlyness if unit is badass enough + * Non-badass sacreds get some small buffs * @param u * @param power */ @@ -574,21 +580,19 @@ public void calculatePower(Unit u, int power) { // Calculate some loose power rating - double rating = 0; - for(Filter f : u.appliedFilters) - rating += Math.pow(2, f.power) / 2; + double rating = power; + for(Filter f : u.appliedFilters) + rating += Math.pow(2, f.power - 2) / 2; // Rating should theoretically range from 0 to 4ish at this point - - + if(u.pose.roles.contains("ranged") || u.pose.roles.contains("elite ranged") || u.pose.roles.contains("sacred ranged")) { - if(u.getTotalProt() < 5) - rating *= 2; - else if(u.getTotalProt() < 8) - rating *= 1.75; - else if(u.getTotalProt() < 12) + //this used to be a bonus for low prot, but low resources is more relevant and accurate + if(u.getResCost(true) < 10) rating *= 1.5; + else if(u.getResCost(true) < 20) + rating *= 1.25; } else { @@ -600,36 +604,84 @@ else if(u.getTotalProt() < 12) rating *= 0.8; } - double total = 1; - for(Double multi : Generic.getAllUnitTags(u).getAllDoubles("sacredratingmulti")) + int survivability = (u.getCommandValue("#hp", 10) / 2 + u.getTotalDef() + u.getTotalProt() * 2 + u.getCommandValue("#size", 2) - power) / 2; + int defbonus = 0; + double discount = 1; + + for (Filter f : u.appliedFilters) { - total *= multi; + for (Command c : f.getCommands()) + { + if (c.command.equals("#regen")) survivability += 5; + if (c.command.equals("#awe") || c.command.equals("#sunawe")) survivability += 10; + if (c.command.equals("#invuln")) survivability += 10; + if (c.command.equals("#illusion")) survivability += 10; + if (c.command.equals("#ethereal")) survivability += 15; + if (c.command.equals("#entangle")) survivability += 15; + } } - rating *= total; + //sacreds that are too flimsy get extra defense and cost discount, and are more likely to be rec-anywhere + for (int i=15; i < 31; i +=5) + { + if (survivability < i) + { + rating--; + + if (random.nextDouble() < (double)(100 - survivability - power) / 100) + defbonus += 1; + else if (random.nextDouble() < (double)(100 - survivability - power) / 100) + rating -= 2; + + if (random.nextDouble() < (double)(100 - power * 5) / 100) discount -= 0.1; + } + } + + if (defbonus > 0) + u.commands.add(Command.args("#def", "+" + defbonus)); - total = 1; - for(Double multi : Generic.getAllUnitTags(u).getAllDoubles("sacredcostmulti")) + double total = 1; + for(Double multi : Generic.getAllUnitTags(u).getAllDoubles("sacredratingmulti")) { total *= multi; } - u.commands.add(Command.args("#gcost", "*" + total)); - + rating *= total; // The highest caponlychance for the unit will apply if one is defined, unless the default formula is higher double highestcaponlychance = Generic.getAllUnitTags(u).streamAllValues("caponlychance") .map(Arg::getDouble) .max(Double::compareTo).orElse(0D); - if(highestcaponlychance < ((power + rating) / 10 + 0.3)) - highestcaponlychance = (power + rating) / 10 + 0.3; + // sacreds that are still too flimsy are much more likely to be rec-anywhere + if (survivability / discount + defbonus < random.nextDouble() * 25 + 5) + { + highestcaponlychance = Math.max(highestcaponlychance, 0.25); + if (survivability / discount + defbonus < random.nextDouble() * 25 + 5) + highestcaponlychance = 0; + } + else + if(highestcaponlychance < ((rating) / 10 + 0.3)) + highestcaponlychance = (rating) / 10 + 0.3; if(random.nextDouble() < highestcaponlychance) + { u.caponly = true; + + //apply cost discount if cap-only + total = discount; + for(Double multi : Generic.getAllUnitTags(u).getAllDoubles("sacredcostmulti")) + { + total *= multi; + } + u.commands.add(Command.args("#gcost", "*" + total)); + } else { if(u.getGoldCost() <= 50) - u.commands.add(Command.args("#gcost", "+10")); + { + int costModifier = (int)(Math.log(u.getGoldCost()) * 10 / (Math.log(50))); + u.commands.add(Command.args("#gcost", "+" + costModifier)); + } else u.commands.add(Command.args("#gcost", "*1.2")); diff --git a/src/nationGen/units/Unit.java b/src/nationGen/units/Unit.java index a715a8f43..533a75dcb 100644 --- a/src/nationGen/units/Unit.java +++ b/src/nationGen/units/Unit.java @@ -1477,6 +1477,39 @@ public int getTotalEnc() return (int)prot; } + public int getTotalDef() + { + int eqdef = 0; + int natural = 0; + + for(Command c : this.getCommands()) + { + if(c.command.equals("#def")) + { + natural += c.args.get(0).getInt(); + } + if (c.command.equals("#mounted")) + eqdef += 3; + } + + Dom3DB armordb = nationGen.armordb; + Dom3DB weapondb = nationGen.weapondb; + + for(String slot : slotmap.getSlots()) + { + if(getSlot(slot) != null && !getSlot(slot).id.equals("-1")) + { + if (getSlot(slot).armor) + eqdef += armordb.GetInteger(getSlot(slot).id, "def", 0); + else + eqdef += weapondb.GetInteger(getSlot(slot).id, "def", 0); + } + } + + double def = eqdef + natural; + + return (int)def; + } public List writeLines(String spritedir) {