diff --git a/nwn/nwnprc/trunk/2das/classes.2da b/nwn/nwnprc/trunk/2das/classes.2da index 7adb9814..7fab012c 100644 --- a/nwn/nwnprc/trunk/2das/classes.2da +++ b/nwn/nwnprc/trunk/2das/classes.2da @@ -199,7 +199,7 @@ 195 MasterOfNine 16790679 16847557 16847558 16847559 16847560 IR_PSYWARRIOR 8 CLS_ATK_2 CLS_FEAT_MONINE CLS_SAVTHR_WIZ CLS_SKILL_MONINE CLS_BFEAT_MONINE 6 **** **** 1 0 12 16 14 8 14 12 DEX 0X00 0X0 0 CLASS_TYPE_MASTER_OF_NINE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_MONINE 5 0 0 0 5 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 196 EternalBlade 16790680 16834750 16834751 16834752 16834753 IR_FH 10 CLS_ATK_1 CLS_FEAT_ETBL CLS_SAVTHR_FIGHT CLS_SKILL_ETBL CLS_BFEAT_ETBL 2 **** **** 1 0 16 13 16 10 10 9 STR 0X00 0X0 0 CLASS_TYPE_ETERNAL_BLADE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ETBL 10 0 0 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 197 ShadowSunNinja 16790681 16834778 16834779 16834780 16834781 IR_SHADADEPT 8 CLS_ATK_2 CLS_FEAT_SSN CLS_SAVTHR_MONK CLS_SKILL_SSN CLS_BFEAT_SSN 4 **** **** 1 0 16 13 16 10 10 9 STR 0X11 0X2 0 CLASS_TYPE_SHADOW_SUN_NINJA 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SSN 40 0 0 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** -198 WitchbornBinder 16790682 16838144 16838145 16838146 16838147 IR_WITCH 6 CLS_ATK_2 CLS_FEAT_WCHBRN CLS_SAVTHR_WIZ CLS_SKILL_WCHBRN CLS_BFEAT_BLANK 4 **** **** 1 0 10 14 14 10 12 16 CHA 0X00 0X0 0 CLASS_TYPE_WITCHBORN_BINDER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_WCHBRN 10 0 0 0 10 6 2 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +198 WitchbornBinder 16790682 16838144 16838145 16838146 16838147 IR_WITCH 6 CLS_ATK_2 CLS_FEAT_WCHBRN CLS_SAVTHR_WIZ CLS_SKILL_WCHBRN CLS_BFEAT_WCHBRN 4 **** **** 1 0 10 14 14 10 12 16 CHA 0X00 0X0 0 CLASS_TYPE_WITCHBORN_BINDER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_WCHBRN 40 0 0 0 10 6 2 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 199 Baelnorn 16790683 16829216 16829217 16829218 16829219 IR_BAELNORN 4 CLS_ATK_4 CLS_FEAT_BAELN CLS_SAVTHR_LICH CLS_SKILL_WIZ CLS_BFEAT_LICH 2 **** **** 1 0 13 13 13 13 13 13 CHA 0X11 0X2 0 CLASS_TYPE_BAELNORN 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_BAELN 4 0 0 0 4 10 0 cls_stat_baeln **** **** **** **** **** **** **** **** **** **** **** **** **** **** 200 Disciple_of_Meph 16790684 16823016 16823017 16823018 16823019 IR_DISCMEPH 8 CLS_ATK_1 CLS_FEAT_MEPH CLS_SAVTHR_MONK CLS_SKILL_MEPH CLS_BFEAT_MEPH 4 **** **** 1 0 12 16 14 8 14 12 CHA 0X09 0X2 0 CLASS_TYPE_DISCIPLE_OF_MEPH 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_MEPH 10 0 0 0 10 2 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 201 Soul_Eater 16790685 16832116 16832117 16832118 16832119 IR_SOULEATER 8 CLS_ATK_1 CLS_FEAT_SLEAT CLS_SAVTHR_MONK CLS_SKILL_SLEAT CLS_BFEAT_SLEAT 4 **** **** 1 0 14 16 10 12 14 10 INT 0X09 0X2 0 CLASS_TYPE_SOUL_EATER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SLEAT 10 0 0 0 10 1 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** diff --git a/nwn/nwnprc/trunk/2das/cls_bfeat_wchbm.2da b/nwn/nwnprc/trunk/2das/cls_bfeat_wchbm.2da new file mode 100644 index 00000000..d41b8e5b --- /dev/null +++ b/nwn/nwnprc/trunk/2das/cls_bfeat_wchbm.2da @@ -0,0 +1,63 @@ +2DA V2.0 + + Bonus +0 0 +1 0 +2 0 +3 0 +4 0 +5 0 +6 0 +7 0 +8 0 +9 0 +10 0 +11 0 +12 1 +13 0 +14 0 +15 1 +16 0 +17 0 +18 1 +19 0 +20 0 +21 1 +22 0 +23 0 +24 1 +25 0 +26 0 +27 1 +28 0 +29 0 +30 1 +31 0 +32 0 +33 1 +34 0 +35 0 +36 1 +37 0 +38 0 +39 1 +40 0 +41 0 +42 1 +43 0 +44 0 +45 1 +46 0 +47 0 +48 1 +49 0 +50 0 +51 1 +52 0 +53 0 +54 1 +55 0 +56 0 +57 1 +58 0 +59 0 diff --git a/nwn/nwnprc/trunk/2das/cls_feat_wchbrn.2da b/nwn/nwnprc/trunk/2das/cls_feat_wchbrn.2da index 2f6f215a..6f6a634d 100644 --- a/nwn/nwnprc/trunk/2das/cls_feat_wchbrn.2da +++ b/nwn/nwnprc/trunk/2das/cls_feat_wchbrn.2da @@ -1,16 +1,183 @@ 2DA V2.0 - FeatLabel FeatIndex List GrantedOnLevel OnMenu -0 Lorestealer_DetectMagic 22867 3 1 1 -1 Meldshield_Invest 8953 3 1 1 -2 Meldshield 8954 3 99 1 -3 DispellingOrb_Invest 8955 3 2 1 -4 DispellingOrb 8956 3 2 1 -5 MageShackles_Invest 8957 3 4 1 -6 MageShackles 8958 3 4 1 -7 Abrogation_Invest 8959 3 6 1 -8 Abrogation 8960 3 6 1 -9 SpiritFlay_Invest 8961 3 8 1 -10 SpiritFlay 8962 3 8 1 -11 Integument_Invest 8963 3 10 1 -12 Integument 8964 3 10 1 + FeatLabel FeatIndex List GrantedOnLevel OnMenu +0 Lorestealer_DetectMagic 22867 3 1 1 +1 Meldshield_Invest 8953 3 1 1 +2 Meldshield 8954 3 99 1 +3 DispellingOrb_Invest 8955 3 2 1 +4 DispellingOrb 8956 3 2 1 +5 MageShackles_Invest 8957 3 4 1 +6 MageShackles 8958 3 4 1 +7 Abrogation_Invest 8959 3 6 1 +8 Abrogation 8960 3 6 1 +9 SpiritFlay_Invest 8961 3 8 1 +10 SpiritFlay 8962 3 8 1 +11 Integument_Invest 8963 3 10 1 +12 Integument 8964 3 10 1 +13 EPIC_WITCHBORN_BINDER 25083 3 11 0 +14 FEAT_EPIC_ARMOR_SKIN 490 1 -1 0 +15 FEAT_EPIC_BLINDING_SPEED 491 1 -1 1 +16 FEAT_EPIC_PROWESS 584 1 -1 0 +17 FEAT_EPIC_TOUGHNESS_1 754 1 -1 0 +18 FEAT_EPIC_TOUGHNESS_2 755 1 -1 0 +19 FEAT_EPIC_TOUGHNESS_3 756 1 -1 0 +20 FEAT_EPIC_TOUGHNESS_4 757 1 -1 0 +21 FEAT_EPIC_TOUGHNESS_5 758 1 -1 0 +22 FEAT_EPIC_TOUGHNESS_6 759 1 -1 0 +23 FEAT_EPIC_TOUGHNESS_7 760 1 -1 0 +24 FEAT_EPIC_TOUGHNESS_8 761 1 -1 0 +25 FEAT_EPIC_TOUGHNESS_9 762 1 -1 0 +26 FEAT_EPIC_TOUGHNESS_10 763 1 -1 0 +27 ExpandedSoulmeldCapacity_1 8946 1 -1 0 +28 ExpandedSoulmeldCapacity_2 8947 1 -1 0 +29 ExpandedSoulmeldCapacity_3 8948 1 -1 0 +30 ExpandedSoulmeldCapacity_4 8949 1 -1 0 +31 ExpandedSoulmeldCapacity_5 8950 1 -1 0 +32 BonusSoulmeld_1 8965 1 -1 0 +33 BonusSoulmeld_2 8966 1 -1 0 +34 BonusSoulmeld_3 8967 1 -1 0 +35 BonusSoulmeld_4 8968 1 -1 0 +36 BonusSoulmeld_5 8969 1 -1 0 +37 BonusSoulmeld_6 8970 1 -1 0 +38 BonusSoulmeld_7 8971 1 -1 0 +39 BonusSoulmeld_8 8972 1 -1 0 +40 BonusSoulmeld_9 8973 1 -1 0 +41 BonusSoulmeld_10 8974 1 -1 0 +42 EpicEssentia_1 8975 1 -1 0 +43 EpicEssentia_2 8976 1 -1 0 +44 EpicEssentia_3 8977 1 -1 0 +45 EpicEssentia_4 8978 1 -1 0 +46 EpicEssentia_5 8979 1 -1 0 +47 EpicEssentia_6 8980 1 -1 0 +48 ExtraChakraBind_1 8981 1 -1 0 +49 ExtraChakraBind_2 8982 1 -1 0 +50 ExtraChakraBind_3 8983 1 -1 0 +51 ExtraChakraBind_4 8984 1 -1 0 +52 ExtraChakraBind_5 8985 1 -1 0 +53 ExtraChakraBind_6 8986 1 -1 0 +54 ExtraChakraBind_7 8987 1 -1 0 +55 ExtraChakraBind_8 8988 1 -1 0 +56 ExtraChakraBind_9 8989 1 -1 0 +57 ExtraChakraBind_10 8990 1 -1 0 +58 OpenHeartChakra 8991 1 -1 0 +59 OpenSoulChakra 8992 1 -1 0 +60 Epic_RapidMeldshaping_1 8993 1 -1 0 +61 Epic_RapidMeldshaping_2 8994 1 -1 0 +62 Epic_RapidMeldshaping_3 8995 1 -1 0 +63 Epic_RapidMeldshaping_4 8996 1 -1 0 +64 Epic_RapidMeldshaping_5 8997 1 -1 0 +65 Epic_RapidMeldshaping_6 8998 1 -1 0 +66 Epic_RapidMeldshaping_7 8999 1 -1 0 +67 Epic_RapidMeldshaping_8 9000 1 -1 0 +68 Epic_RapidMeldshaping_9 9001 1 -1 0 +69 Epic_RapidMeldshaping_10 9002 1 -1 0 +70 Epic_RebindSoulmeld_Crown 9003 1 -1 1 +71 Epic_RebindSoulmeld_Feet 9004 1 -1 1 +72 Epic_RebindSoulmeld_Hands 9005 1 -1 1 +73 Epic_RebindSoulmeld_Arms 9006 1 -1 1 +74 Epic_RebindSoulmeld_Brow 9007 1 -1 1 +75 Epic_RebindSoulmeld_Shoulders 9008 1 -1 1 +76 Epic_RebindSoulmeld_Throat 9009 1 -1 1 +77 Epic_RebindSoulmeld_Waist 9010 1 -1 1 +78 Epic_RebindSoulmeld_Heart 9011 1 -1 1 +79 Epic_RebindSoulmeld_Soul 9012 1 -1 1 +80 Epic_RebindSoulmeld_Totem 9013 1 -1 1 +81 FEAT_EPIC_ENERGY_RESISTANCE_COLD_1 533 1 -1 0 +82 FEAT_EPIC_ENERGY_RESISTANCE_COLD_2 534 1 -1 0 +83 FEAT_EPIC_ENERGY_RESISTANCE_COLD_3 535 1 -1 0 +84 FEAT_EPIC_ENERGY_RESISTANCE_COLD_4 536 1 -1 0 +85 FEAT_EPIC_ENERGY_RESISTANCE_COLD_5 537 1 -1 0 +86 FEAT_EPIC_ENERGY_RESISTANCE_COLD_6 538 1 -1 0 +87 FEAT_EPIC_ENERGY_RESISTANCE_COLD_7 539 1 -1 0 +88 FEAT_EPIC_ENERGY_RESISTANCE_COLD_8 540 1 -1 0 +89 FEAT_EPIC_ENERGY_RESISTANCE_COLD_9 541 1 -1 0 +90 FEAT_EPIC_ENERGY_RESISTANCE_COLD_10 542 1 -1 0 +91 FEAT_EPIC_ENERGY_RESISTANCE_ACID_1 543 1 -1 0 +92 FEAT_EPIC_ENERGY_RESISTANCE_ACID_2 544 1 -1 0 +93 FEAT_EPIC_ENERGY_RESISTANCE_ACID_3 545 1 -1 0 +94 FEAT_EPIC_ENERGY_RESISTANCE_ACID_4 546 1 -1 0 +95 FEAT_EPIC_ENERGY_RESISTANCE_ACID_5 547 1 -1 0 +96 FEAT_EPIC_ENERGY_RESISTANCE_ACID_6 548 1 -1 0 +97 FEAT_EPIC_ENERGY_RESISTANCE_ACID_7 549 1 -1 0 +98 FEAT_EPIC_ENERGY_RESISTANCE_ACID_8 550 1 -1 0 +99 FEAT_EPIC_ENERGY_RESISTANCE_ACID_9 551 1 -1 0 +100 FEAT_EPIC_ENERGY_RESISTANCE_ACID_10 552 1 -1 0 +101 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_1 553 1 -1 0 +102 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_2 554 1 -1 0 +103 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_3 555 1 -1 0 +104 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_4 556 1 -1 0 +105 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_5 557 1 -1 0 +106 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_6 558 1 -1 0 +107 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_7 559 1 -1 0 +108 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_8 560 1 -1 0 +109 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_9 561 1 -1 0 +110 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_10 562 1 -1 0 +111 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_1 563 1 -1 0 +112 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_2 564 1 -1 0 +113 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_3 565 1 -1 0 +114 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_4 566 1 -1 0 +115 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_5 567 1 -1 0 +116 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_6 568 1 -1 0 +117 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_7 569 1 -1 0 +118 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_8 570 1 -1 0 +119 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_9 571 1 -1 0 +120 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_10 572 1 -1 0 +121 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_1 573 1 -1 0 +122 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_2 574 1 -1 0 +123 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_3 575 1 -1 0 +124 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_4 576 1 -1 0 +125 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_5 577 1 -1 0 +126 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_6 578 1 -1 0 +127 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_7 579 1 -1 0 +128 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_8 580 1 -1 0 +129 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_9 581 1 -1 0 +130 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_10 582 1 -1 0 +131 FEAT_EPIC_REPUTATION 586 1 -1 0 +132 FEAT_EPIC_SUPERIOR_INITIATIVE 753 1 -1 0 +133 FEAT_EPIC_FORTITUDE 583 1 -1 0 +134 FEAT_EPIC_REFLEXES 585 1 -1 0 +135 FEAT_EPIC_WILL 695 1 -1 0 +136 FEAT_EPIC_SKILL_FOCUS_USEMAGICDEVICE 609 1 -1 0 +137 FEAT_EPIC_SKILL_FOCUS_RIDE 3038 1 -1 0 +138 FEAT_EPIC_SKILL_FOCUS_JUMP 3040 1 -1 0 +139 FEAT_EPIC_SKILL_FOCUS_SENSE_MOTIVE 3042 1 -1 0 +140 FEAT_EPIC_SKILL_FOCUS_MARTIAL_LORE 3044 1 -1 0 +141 FEAT_EPIC_SKILL_FOCUS_BALANCE 3046 1 -1 0 +142 FEAT_EPIC_SKILL_FOCUS_CRAFT_POISON 3048 1 -1 0 +143 FEAT_EPIC_SKILL_FOCUS_PSICRAFT 3050 1 -1 0 +144 FEAT_EPIC_SKILL_FOCUS_CLIMB 3052 1 -1 0 +145 FEAT_EPIC_SKILL_FOCUS_CRAFT_GENERAL 3054 1 -1 0 +146 FEAT_EPIC_SKILL_FOCUS_APPRAISE 588 1 -1 0 +147 FEAT_EPIC_SKILL_FOCUS_CONCENTRATION 589 1 -1 0 +148 FEAT_EPIC_SKILL_FOCUS_CRAFT_TRAP 590 1 -1 0 +149 FEAT_EPIC_SKILL_FOCUS_DISABLETRAP 591 1 -1 0 +150 FEAT_EPIC_SKILL_FOCUS_DISCIPLINE 592 1 -1 0 +151 FEAT_EPIC_SKILL_FOCUS_HEAL 593 1 -1 0 +152 FEAT_EPIC_SKILL_FOCUS_HIDE 594 1 -1 0 +153 FEAT_EPIC_SKILL_FOCUS_LISTEN 595 1 -1 0 +154 FEAT_EPIC_SKILL_FOCUS_LORE 596 1 -1 0 +155 FEAT_EPIC_SKILL_FOCUS_MOVESILENTLY 597 1 -1 0 +156 FEAT_EPIC_SKILL_FOCUS_OPENLOCK 598 1 -1 0 +157 FEAT_EPIC_SKILL_FOCUS_PARRY 599 1 -1 0 +158 FEAT_EPIC_SKILL_FOCUS_PERSUADE 601 1 -1 0 +159 FEAT_EPIC_SKILL_FOCUS_PICKPOCKET 602 1 -1 0 +160 FEAT_EPIC_SKILL_FOCUS_SEARCH 603 1 -1 0 +161 FEAT_EPIC_SKILL_FOCUS_SETTRAP 604 1 -1 0 +162 FEAT_EPIC_SKILL_FOCUS_SPELLCRAFT 605 1 -1 0 +163 FEAT_EPIC_SKILL_FOCUS_SPOT 606 1 -1 0 +164 FEAT_EPIC_SKILL_FOCUS_TAUNT 607 1 -1 0 +165 FEAT_EPIC_SKILL_FOCUS_TUMBLE 608 1 -1 0 +166 FEAT_EPIC_SKILL_FOCUS_CRAFT_ARMOR 913 1 -1 0 +167 FEAT_EPIC_SKILL_FOCUS_CRAFT_WEAPON 914 1 -1 0 +168 FEAT_EPIC_SKILL_FOCUS_BLUFF 917 1 -1 0 +169 FEAT_EPIC_SKILL_FOCUS_INTIMIDATE 918 1 -1 0 +170 FEAT_EPIC_GREAT_CONSTITUTION_1 774 1 -1 0 +171 FEAT_EPIC_GREAT_CONSTITUTION_2 775 1 -1 0 +172 FEAT_EPIC_GREAT_CONSTITUTION_3 776 1 -1 0 +173 FEAT_EPIC_GREAT_CONSTITUTION_4 777 1 -1 0 +174 FEAT_EPIC_GREAT_CONSTITUTION_5 778 1 -1 0 +175 FEAT_EPIC_GREAT_CONSTITUTION_6 779 1 -1 0 +176 FEAT_EPIC_GREAT_CONSTITUTION_7 780 1 -1 0 +177 FEAT_EPIC_GREAT_CONSTITUTION_8 781 1 -1 0 +178 FEAT_EPIC_GREAT_CONSTITUTION_9 782 1 -1 0 +179 FEAT_EPIC_GREAT_CONSTITUTION_10 783 1 -1 0 diff --git a/nwn/nwnprc/trunk/2das/cls_feat_wiz.2da b/nwn/nwnprc/trunk/2das/cls_feat_wiz.2da index 2fc375b7..eac65309 100644 --- a/nwn/nwnprc/trunk/2das/cls_feat_wiz.2da +++ b/nwn/nwnprc/trunk/2das/cls_feat_wiz.2da @@ -1,841 +1,846 @@ 2DA V2.0 - FeatLabel FeatIndex List GrantedOnLevel OnMenu -0 WeapProfWizard 51 3 1 0 -1 WeapProfSim_Dart 7914 3 1 0 -2 SpellFocusCon 166 1 -1 0 -3 SpellFocusDiv 167 1 -1 0 -4 SpellFocusEnc 168 1 -1 0 -5 SpellFocusEvo 169 1 -1 0 -6 SpellFocusIll 170 1 -1 0 -7 SpellFocusNec 171 1 -1 0 -8 SpellFocusTra 172 1 -1 0 -9 SpellFocusAbj 35 1 -1 0 -10 CmbtCast 7 1 -1 0 -11 Empower 11 1 -1 0 -12 ExtSpell 12 1 -1 0 -13 MaxSpell 25 1 -1 0 -14 Quicken 29 1 -1 0 -15 Silent 33 1 -1 0 -16 SpellPen 36 1 -1 0 -17 StillSpell 37 1 -1 0 -18 Familiar 303 3 1 1 -19 DefArrow 8 0 -1 0 -20 TwoWeap 41 0 -1 0 -21 Ambidex 1 0 -1 0 -22 ArcaneDefenseAbj 415 1 -1 0 -23 ArcaneDefenseCon 416 1 -1 0 -24 ArcaneDefenseDiv 417 1 -1 0 -25 ArcaneDefenseEnch 418 1 -1 0 -26 ArcaneDefenseEvo 419 1 -1 0 -27 ArcaneDefenseIll 420 1 -1 0 -28 ArcaneDefenseNec 421 1 -1 0 -29 ArcaneDefenseTra 422 1 -1 0 -30 GrSpllFcsAbj 393 1 -1 0 -31 GrSpllFcsCnj 394 1 -1 0 -32 GrSpllFcsDiv 395 1 -1 0 -33 GrSpllFcsEnch 396 1 -1 0 -34 GrSpllFcsEvc 397 1 -1 0 -35 GrSpllFcsIll 398 1 -1 0 -36 GrSpllFcsNec 399 1 -1 0 -37 GrSpllFcsTran 400 1 -1 0 -38 GreatSpellPen 401 1 -1 0 -39 FEAT_SCRIBE_SCROLL 945 3 1 0 -40 FEAT_BREW_POTION 944 1 3 0 -41 FEAT_CRAFT_WAND 946 1 5 0 -42 FEAT_EPIC_SPELLCASTING 4073 1 -1 0 -43 FEAT_EPIC_SPELL_FOCUS_ABJURATION 610 1 -1 0 -44 FEAT_EPIC_SPELL_FOCUS_CONJURATION 611 1 -1 0 -45 FEAT_EPIC_SPELL_FOCUS_DIVINATION 612 1 -1 0 -46 FEAT_EPIC_SPELL_FOCUS_ENCHANTMENT 613 1 -1 0 -47 FEAT_EPIC_SPELL_FOCUS_EVOCATION 614 1 -1 0 -48 FEAT_EPIC_SPELL_FOCUS_ILLUSION 615 1 -1 0 -49 FEAT_EPIC_SPELL_FOCUS_NECROMANCY 616 1 -1 0 -50 FEAT_EPIC_SPELL_FOCUS_TRANSMUTATION 617 1 -1 0 -51 FEAT_EPIC_SPELL_PENETRATION 618 1 -1 0 -52 FEAT_EPIC_IMPROVED_COMBAT_CASTING 696 1 -1 0 -53 FEAT_EPIC_AUTOMATIC_QUICKEN_1 857 1 -1 0 -54 FEAT_EPIC_AUTOMATIC_QUICKEN_2 858 1 -1 0 -55 FEAT_EPIC_AUTOMATIC_QUICKEN_3 859 1 -1 0 -56 FEAT_EPIC_AUTOMATIC_SILENT_SPELL_1 860 1 -1 0 -57 FEAT_EPIC_AUTOMATIC_SILENT_SPELL_2 861 1 -1 0 -58 FEAT_EPIC_AUTOMATIC_SILENT_SPELL_3 862 1 -1 0 -59 FEAT_EPIC_AUTOMATIC_STILL_SPELL_1 863 1 -1 0 -60 FEAT_EPIC_AUTOMATIC_STILL_SPELL_2 864 1 -1 0 -61 FEAT_EPIC_AUTOMATIC_STILL_SPELL_3 865 1 -1 0 -62 FEAT_EPIC_WIZARD 976 3 21 0 -63 FEAT_EPIC_GREAT_INTELLIGENCE_1 794 1 -1 0 -64 FEAT_EPIC_GREAT_INTELLIGENCE_2 795 1 -1 0 -65 FEAT_EPIC_GREAT_INTELLIGENCE_3 796 1 -1 0 -66 FEAT_EPIC_GREAT_INTELLIGENCE_4 797 1 -1 0 -67 FEAT_EPIC_GREAT_INTELLIGENCE_5 798 1 -1 0 -68 FEAT_EPIC_GREAT_INTELLIGENCE_6 799 1 -1 0 -69 FEAT_EPIC_GREAT_INTELLIGENCE_7 800 1 -1 0 -70 FEAT_EPIC_GREAT_INTELLIGENCE_8 801 1 -1 0 -71 FEAT_EPIC_GREAT_INTELLIGENCE_9 802 1 -1 0 -72 FEAT_EPIC_GREAT_INTELLIGENCE_10 803 1 -1 0 -73 FEAT_EPIC_BLINDING_SPEED 491 0 -1 1 -74 FEAT_CRAFT_WONDROUS_ITEM 2925 1 3 0 -75 FEAT_CRAFT_MAGIC_ARMS_AND_ARMOR 2926 1 5 0 -76 FEAT_CRAFT_ROD 2927 1 9 0 -77 FEAT_CRAFT_STAFF 2928 1 12 0 -78 FEAT_FORGE_RING 2929 1 12 0 -79 FEAT_ALTERNATE_FORM 2931 3 99 0 -80 ESS_Rest 4399 0 99 2 -81 FEAT_CRAFT_CONSTRUCT 2920 1 -1 0 -82 FEAT_CRAFT_EPIC_WONDROUS_ITEM 3488 1 21 0 -83 FEAT_CRAFT_EPIC_MAGIC_ARMS_ARMOR 3489 1 21 0 -84 FEAT_CRAFT_EPIC_ROD 3490 1 21 0 -85 FEAT_CRAFT_EPIC_STAFF 3491 1 21 0 -86 FEAT_FORGE_EPIC_RING 3528 1 21 0 -87 FEAT_EXCEPTIONAL_ARTISAN_I 2872 1 -1 0 -88 FEAT_EXCEPTIONAL_ARTISAN_II 2873 1 -1 0 -89 FEAT_EXCEPTIONAL_ARTISAN_III 2874 1 -1 0 -90 FEAT_EXTRAORDINARY_ARTISAN_I 2875 1 -1 0 -91 FEAT_EXTRAORDINARY_ARTISAN_II 2876 1 -1 0 -92 FEAT_EXTRAORDINARY_ARTISAN_III 2893 1 -1 0 -93 FEAT_LEGENDARY_ARTISAN_I 2894 1 -1 0 -94 FEAT_LEGENDARY_ARTISAN_II 2895 1 -1 0 -95 FEAT_LEGENDARY_ARTISAN_III 2896 1 -1 0 -96 SuddenEmpower 2830 0 -1 1 -97 SuddenExtend 2831 0 -1 1 -98 SuddenMaximize 2832 0 -1 1 -99 SuddenWiden 2833 0 -1 1 -100 FEAT_ESCHEW_MATERIALS 2596 0 1 0 -101 FEAT_IGNORE_MATERIALS 2597 0 -1 0 -102 FEAT_PNP_FAMILIARS 24243 0 99 1 -103 FocusedSpellPenetrCon 3128 1 -1 0 -104 FocusedSpellPenetrDiv 3129 1 -1 0 -105 FocusedSpellPenetrEnc 3130 1 -1 0 -106 FocusedSpellPenetrEvo 3131 1 -1 0 -107 FocusedSpellPenetrIll 3132 1 -1 0 -108 FocusedSpellPenetrNec 3133 1 -1 0 -109 FocusedSpellPenetrTra 3134 1 -1 0 -110 FocusedSpellPenetrAbj 3135 1 -1 0 -111 FEAT_TENACIOUSMAGIC 2961 1 -1 0 -112 FEAT_PERNICIOUSMAGIC 2962 1 -1 0 -113 FEAT_INSIDIOUSMAGIC 2963 1 -1 0 -114 Bane_Magic_Aberration 23556 0 -1 0 -115 Bane_Magic_Animal 23557 0 -1 0 -116 Bane_Magic_Beast 23558 0 -1 0 -117 Bane_Magic_Construct 23559 0 -1 0 -118 Bane_Magic_Dragon 23560 0 -1 0 -119 Bane_Magic_Dwarf 23561 0 -1 0 -120 Bane_Magic_Elemental 23562 0 -1 0 -121 Bane_Magic_Elf 23563 0 -1 0 -122 Bane_Magic_Fey 23564 0 -1 0 -123 Bane_Magic_Giant 23565 0 -1 0 -124 Bane_Magic_Gnome 23566 0 -1 0 -125 Bane_Magic_HalfElf 23567 0 -1 0 -126 Bane_Magic_Halfling 23568 0 -1 0 -127 Bane_Magic_HalfOrc 23569 0 -1 0 -128 Bane_Magic_Human 23570 0 -1 0 -129 Bane_Magic_Humanoid_Goblinoid 23571 0 -1 0 -130 Bane_Magic_Humanoid_Monstrous 23572 0 -1 0 -131 Bane_Magic_Humanoid_Orc 23573 0 -1 0 -132 Bane_Magic_Humanoid_Reptilian 23574 0 -1 0 -133 Bane_Magic_Magical_Beast 23575 0 -1 0 -134 Bane_Magic_Outsider 23576 0 -1 0 -135 Bane_Magic_Shapechanger 23577 0 -1 0 -136 Bane_Magic_Undead 23578 0 -1 0 -137 Bane_Magic_Vermin 23579 0 -1 0 -138 **** **** **** **** **** -139 ###cls_feat_allBaseClasses_BEGIN### **** **** **** **** -140 **Bio169Feats** **** **** **** **** -141 FEAT_HORSE_MENU 1089 3 1 1 -142 PLAYER_TOOL_01 1106 1 999 1 -143 PLAYER_TOOL_02 1107 1 999 1 -144 PLAYER_TOOL_03 1108 1 999 1 -145 PLAYER_TOOL_04 1109 1 999 1 -146 PLAYER_TOOL_05 1110 1 999 1 -147 PLAYER_TOOL_06 1111 1 999 1 -148 PLAYER_TOOL_07 1112 1 999 1 -149 PLAYER_TOOL_08 1113 1 999 1 -150 PLAYER_TOOL_09 1114 1 999 1 -151 PLAYER_TOOL_10 1115 1 999 1 -152 **FeatsGrantedToAll** **** **** **** **** -153 FEAT_JUMP 2884 3 1 1 -154 FEAT_CLIMB 3112 3 1 1 -155 FEAT_POWER_ATTACK_SINGLE_RADIAL 3143 0 999 1 -156 FEAT_POWER_ATTACK_FIVES_RADIAL 3144 0 999 1 -157 FEAT_PRC_POWER_ATTACK_QUICKS_RADIAL 3179 0 999 1 -158 ACP_QUICK_FEAT 3479 0 999 1 -159 ACP_HEAVY_FEAT 3480 0 999 1 -160 ACP_UNARMED_FEAT 3481 0 999 1 -161 TeleportManagementRadial 4235 3 1 1 -162 SWITCH_FEAT 2285 3 1 1 -163 FEAT_READ_RECIPE 2919 3 1 1 -164 FEAT_SPELLS_TOUCH_ATTACK 4092 3 1 1 -165 FEAT_SPELLS_HOLD_CHARGE_TOGGLE 4095 3 1 1 -166 EndSpellEffects 2468 3 1 1 -167 CombatMove_RadialMaster 2898 3 1 1 -168 CombatMove_RadialMaster2 5195 3 1 1 -169 CombatMove_RadialMaster3 3415 3 1 1 -170 **** **** **** **** **** -171 **GeneralActivatableFeats** **** **** **** **** -172 FEAT_EPIC_SWARM_OF_ARROWS 25995 0 -1 1 -173 DivineIntercession 5283 0 -1 1 -174 FEAT_INLINDL_SCHOOL 5284 0 -1 1 -175 FEAT_DESPANA_SCHOOL 5324 0 -1 1 -176 FEAT_ATTUNE_GEM 2472 0 -1 1 -177 FEAT_INSCRIBE_RUNE 2462 0 -1 1 -178 FEAT_CRAFT_SKULL_TALISMAN 3004 0 -1 1 -179 FEAT_THRALL_TO_DEMON 2616 0 -1 1 -180 FEAT_HOLYRADIANCE 3164 0 -1 1 -181 FEAT_NIMBUSOFLIGHT 3165 0 -1 1 -182 FEAT_MANYSHOT 3306 0 -1 1 -183 FEAT_IMP_MANYSHOT 3350 0 -1 1 -184 Pinpoint_Accuracy 3351 0 -1 1 -185 FEAT_SERVHEAVEN 3355 0 -1 1 -186 FEAT_DISCIPLE_OF_DARKNESS 4012 0 -1 1 -187 FEAT_BLOOD_OF_THE_WARLORD 4608 0 -1 1 -188 Cloak_Dance 4817 0 -1 1 -189 Reckless_Offense 4816 0 -1 1 -190 ZoneOfAnimation 2891 0 -1 1 -191 FEAT_SPELLFIRE_WIELDER 4368 0 -1 1 -192 FEAT_SPELLFIRE_INCREASE 4369 0 999 1 -193 FEAT_SPELLFIRE_DECREASE 4370 0 999 1 -194 FEAT_SPELLFIRE_QUICKSELECT 4371 0 999 1 -195 FEAT_DISCIPLE_OF_THE_SUN 3127 0 -1 1 -196 Dragonfire_Assault 1842 0 -1 1 -197 Dragonfire_Channeling 1843 0 -1 1 -198 Dragonfire_Inspiration 1844 0 -1 1 -199 DauntingPresence 24025 0 -1 1 -200 ProfaneLifeLeech 24026 0 -1 1 -201 ProfaneAgony 5282 0 -1 1 -202 SacredVitality 24027 0 -1 1 -203 SacredVengeance 24028 0 -1 1 -204 DeformityEyes 24029 0 -1 1 -205 DeformityParasite 24031 0 -1 1 -206 DarkSpeech 24033 0 -1 1 -207 DarkWhispers 24034 0 -1 1 -208 MastersWill 24035 0 -1 1 -209 DeformityMadness 24036 0 -1 1 -210 ReflexivePsychosis 24037 0 -1 1 -211 ChosenOfEvil 24038 0 -1 1 -212 Avenging_Strike 4297 0 -1 1 -213 SnowflakeWardance 4489 0 -1 1 -214 MasterWand 5312 0 -1 1 -215 RecklessWandWielder 5313 0 -1 1 -216 DoubleWandWielder 5315 0 -1 1 -217 Wandstrike 5316 0 -1 1 -218 Snap_Kick 4398 0 -1 1 -219 HighSwordLowAxe 5288 0 -1 1 -220 ScorpionsGrasp 5178 0 -1 1 -221 WeaponAndTorch 5291 0 -1 1 -222 ShieldCharge 3256 0 -1 1 -223 ShieldSlam 3257 0 -1 1 -224 AwesomeBlow 5370 0 -1 1 -225 Spinning_Halberd 5287 0 -1 1 -226 FEAT_RAY_CHARM_PERSON 2220 0 999 1 -227 FEAT_RAY_CHARM_MONSTER 2221 0 999 1 -228 FEAT_RAY_SLEEP 2222 0 999 1 -229 FEAT_RAY_FLESH_TO_STONE 2223 0 999 1 -230 FEAT_RAY_DISINTIGRATE 2224 0 999 1 -231 FEAT_RAY_FEAR 2225 0 999 1 -232 FEAT_RAY_SLOW 2226 0 999 1 -233 FEAT_RAY_INFLICT_MODERATE_WOUNDS 2227 0 999 1 -234 BonesOfTheEarth_Feat 2864 0 999 1 -235 FEAT_MYSTIC_BACKLASH 24737 0 -1 1 -236 FEAT_ACIDIC_SPLATTER 24738 0 -1 1 -237 FEAT_FIERY_BURST 24739 0 -1 1 -238 FEAT_STORM_BOLT 24740 0 -1 1 -239 FEAT_WINTERS_BLAST 24741 0 -1 1 -240 FEAT_CLAP_OF_THUNDER 24742 0 -1 1 -241 FEAT_SICKENING_GRASP 24743 0 -1 1 -242 FEAT_TOUCH_OF_HEALING 24744 0 -1 1 -243 FEAT_DIMENSIONAL_JAUNT 24745 0 -1 1 -244 FEAT_CLUTCH_OF_EARTH 24746 0 -1 1 -245 FEAT_BORNE_ALOFT 24747 0 -1 1 -246 FEAT_PROTECTIVE_WARD 24748 0 -1 1 -247 FEAT_SHADOW_VEIL 24749 0 -1 1 -248 FEAT_SUNLIGHT_EYES 24750 0 -1 1 -249 FEAT_TOUCH_OF_DISTRACTION 24751 0 -1 1 -250 FEAT_UMBRAL_SHROUD 24752 0 -1 1 -251 FEAT_CHARNEL_MIASMA 24753 0 -1 1 -252 FEAT_DROWNING_GLANCE 24754 0 -1 1 -253 FEAT_INVISIBLE_NEEDLE 24755 0 -1 1 -254 FEAT_SUMMON_ELEMENTAL 24756 0 -1 1 -255 FEAT_DIMENSIONAL_REACH 24757 0 -1 1 -256 FEAT_HURRICANE_BREATH 24758 0 -1 1 -257 FEAT_MINOR_SHAPESHIFT 24759 0 -1 1 -258 FEAT_FACECHANGER 24760 0 -1 1 -259 **** **** **** **** **** -260 **Metabreath_and_Channeling** **** **** **** **** -261 FEAT_CLINGING_BREATH 4966 0 -1 1 -262 FEAT_LINGERING_BREATH 4967 0 -1 1 -263 FEAT_ENLARGE_BREATH 4968 0 -1 1 -264 FEAT_HEIGHTEN_BREATH 4969 0 -1 1 -265 FEAT_MAXIMIZE_BREATH 4970 0 -1 1 -266 FEAT_SHAPE_BREATH 4972 0 -1 1 -267 FEAT_SPREAD_BREATH 4973 0 -1 1 -268 FEAT_TEMPEST_BREATH 4974 0 -1 1 -269 FEAT_ENTANGLING_EXHALATION 4975 0 -1 1 -270 FEAT_EXHALED_BARRIER 4976 0 -1 1 -271 FEAT_EXHALED_IMMUNITY 4977 0 -1 1 -272 **** **** **** **** **** -273 **DraconicAuras** **** **** **** **** -274 FEAT_BONUS_AURA_ENERGYACID 1828 0 -1 1 -275 FEAT_BONUS_AURA_ENERGYCOLD 1829 0 -1 1 -276 FEAT_BONUS_AURA_ENERGYELEC 1830 0 -1 1 -277 FEAT_BONUS_AURA_ENERGYFIRE 1831 0 -1 1 -278 FEAT_BONUS_AURA_TOUGHNESS 1894 0 -1 1 -279 FEAT_BONUS_AURA_SENSES 1891 0 -1 1 -280 FEAT_BONUS_AURA_PRESENCE 1885 0 -1 1 -281 FEAT_BONUS_AURA_INSIGHT 1884 0 -1 1 -282 FEAT_BONUS_AURA_RESOLVE 1890 0 -1 1 -283 FEAT_BONUS_AURA_STAMINA 1892 0 -1 1 -284 FEAT_BONUS_AURA_SWIFTNESS 1893 0 -1 1 -285 FEAT_BONUS_AURA_RESISTACID 1886 0 -1 1 -286 FEAT_BONUS_AURA_RESISTCOLD 1887 0 -1 1 -287 FEAT_BONUS_AURA_RESISTELEC 1888 0 -1 1 -288 FEAT_BONUS_AURA_RESISTFIRE 1889 0 -1 1 -289 FEAT_BONUS_AURA_MAGICPOWER 1840 0 -1 1 -290 FEAT_SECOND_AURA_POWER 1853 0 999 1 -291 FEAT_SECOND_AURA_ENERGYSHLD 1854 0 999 1 -292 FEAT_SECOND_AURA_TOUGHNESS 1855 0 999 1 -293 FEAT_SECOND_AURA_SENSES 1856 0 999 1 -294 FEAT_SECOND_AURA_VIGOR 1857 0 999 1 -295 FEAT_SECOND_AURA_RESISTANCE 1858 0 999 1 -296 FEAT_SECOND_AURA_PRESENCE 1859 0 999 1 -297 FEAT_SECOND_AURA_INSIGHT 1860 0 999 1 -298 FEAT_SECOND_AURA_RESOLVE 1861 0 999 1 -299 FEAT_SECOND_AURA_STAMINA 1862 0 999 1 -300 FEAT_SECOND_AURA_SWIFTNESS 1863 0 999 1 -301 FEAT_SECOND_AURA_RESISTACID 1864 0 999 1 -302 FEAT_SECOND_AURA_RESISTCOLD 1865 0 999 1 -303 FEAT_SECOND_AURA_RESISTELEC 1866 0 999 1 -304 FEAT_SECOND_AURA_RESISTFIRE 1867 0 999 1 -305 FEAT_SECOND_AURA_MAGICPOWER 1841 0 999 1 -306 FEAT_SECOND_AURA_ENERGYACID 1824 0 999 1 -307 FEAT_SECOND_AURA_ENERGYCOLD 1825 0 999 1 -308 FEAT_SECOND_AURA_ENERGYELEC 1826 0 999 1 -309 FEAT_SECOND_AURA_ENERGYFIRE 1827 0 999 1 -310 FEAT_SECOND_AURA_ENERGY 1836 0 999 1 -311 **** **** **** **** **** -312 **PsionicFeats** **** **** **** **** -313 Psionic_Focus 4818 0 999 1 -314 Invest_Armour 3643 0 -1 1 -315 Mental_Leap 4809 0 -1 1 -316 Psionic_Fist 4800 0 -1 1 -317 Greater_Psionic_Fist 4821 0 -1 1 -318 Psionic_Weapon 4822 0 -1 1 -319 Greater_Psionic_Weapon 4823 0 -1 1 -320 Psionic_Shot 4824 0 -1 1 -321 Greater_Psionic_Shot 4825 0 -1 1 -322 Psionic_Meditation 4827 0 -1 1 -323 Unavoidable_Strike 4830 0 -1 1 -324 Wounding_Attack 4832 0 -1 1 -325 Deep_Impact 4852 0 -1 1 -326 Fell_Shot 4853 0 -1 1 -327 Strength_of_Two 4965 0 -1 1 -328 **** **** **** **** **** -329 **IncarnumFeats** **** **** **** **** -330 InvestEssentiaConversation 8800 0 999 1 -331 HealingSoul 8882 0 999 1 -332 MidnightAugmentation 8884 0 999 1 -333 PsycarnumBlade 8887 0 999 1 -334 DivineSoultouch 8891 0 999 1 -335 PsycarnumInfusion 8896 0 999 1 -336 **** **** **** **** **** -337 **BindingFeats** **** **** **** **** -338 BindVestige 9131 0 -1 1 -339 ExpelVestige 9136 0 -1 1 -340 MalphasArcaneEye 9040 0 999 1 -341 SavnokCallArmor 9043 0 999 1 -342 AndromaliusSee_Invisibility 9048 0 999 1 -343 FocalorAuraSadness 9049 0 999 1 -344 KarsusSenses 9052 0 999 1 -345 **** **** **** **** **** -346 **RacialFeats** **** **** **** **** -347 FEAT_STONECHILD_MAGIC_STONE 5179 0 999 1 -348 FEAT_ASHERATI_BODY_DAZZLE 5213 0 999 1 -349 FEAT_ASHERATI_BODY_LAMP 5214 0 999 1 -350 FEAT_URDINNIR_STONESKIN 4644 0 999 1 -351 FEAT_AVARIEL_DIVE 4645 0 999 1 -352 FEAT_AYUAN_FEAR 4646 0 999 1 -353 FEAT_AYUAN_ENTANGLE 4647 0 999 1 -354 FEAT_AYUAN_DARKNESS 4648 0 999 1 -355 FEAT_AYUAN_NEUTRALIZE_POISON 4649 0 999 1 -356 FEAT_AASIMAR_LIGHT 4650 0 999 1 -357 FEAT_TIEFLING_DARK 4651 0 999 1 -358 FEAT_SVIRF_BLIND_DEAF 4652 0 999 1 -359 FEAT_SVIRF_BLUR 4653 0 999 1 -360 FEAT_SVIRF_DISGUISE 4654 0 999 1 -361 FEAT_SVIRF_REVERT 4655 0 999 1 -362 FEAT_RAK_DISGUISE 4656 0 999 1 -363 FEAT_RAK_CHANGE_SHAPE 4657 0 999 1 -364 FEAT_PYUAN_CHARM 4658 0 999 1 -365 FEAT_PYUAN_DARKNESS 4659 0 999 1 -366 FEAT_PYUAN_ENTANGLE 4660 0 999 1 -367 FEAT_PYUAN_FEAR 4661 0 999 1 -368 FEAT_PIXIE_INVIS 4662 0 999 1 -369 FEAT_PIXIE_CONFUSE 4663 0 999 1 -370 FEAT_PIXIE_ENTANGLE 4664 0 999 1 -371 FEAT_PIXIE_DISPEL_MAGIC 4665 0 999 1 -372 FEAT_PIXIE_POLYMORPH 4666 0 999 1 -373 FEAT_PIXIE_REVERT 4667 0 999 1 -374 FEAT_MINOTAUR_CHARGE 4668 0 999 1 -375 FEAT_ILLITHID_CHARM 4669 0 999 1 -376 FEAT_ILLITHID_BLAST 4670 0 999 1 -377 FEAT_ILLITHID_SUCKBRAIN 4671 0 999 1 -378 FEAT_GITHZERAI_DAZE 4672 0 999 1 -379 FEAT_GITHYANKI_DAZE 4673 0 999 1 -380 FEAT_GITHYANKI_BLUR 4674 0 999 1 -381 FEAT_FEYRI_CHARMPERSON 4675 0 999 1 -382 FEAT_FEYRI_CLAIRAUDIENCE 4676 0 999 1 -383 FEAT_FEYRI_DARKNESS 4677 0 999 1 -384 FEAT_FEYRI_ENERVATION 4678 0 999 1 -385 FEAT_FEYRI_ALTER 4679 0 999 1 -386 FEAT_FEYRI_REVERT 4680 0 999 1 -387 FEAT_DUERGAR_INVIS 4681 0 999 1 -388 FEAT_DROW_DARKNESS 4682 0 999 1 -389 FEAT_DROW_FAERIE_FIRE 4683 0 999 1 -390 BROWNIE_RAKSHASA_HIPS 433 0 999 0 -391 FEAT_WGNOME_SILENCE 4555 0 999 1 -392 FEAT_WGNOME_MAGEHAND 4519 0 999 1 -393 FEAT_HOUND_AID 4574 0 999 1 -394 FEAT_HOUND_AURAMENACE 4548 0 999 1 -395 FEAT_HOUND_CONTFLAME 4514 0 999 1 -396 FEAT_HOUND_DETECTEVIL 4618 0 999 1 -397 FEAT_HOUND_DISGUISE 4513 0 999 1 -398 FEAT_HOUND_MAGICCIRCLE 4515 0 999 1 -399 FEAT_HOUND_TELEPORT 4516 0 999 1 -400 FEAT_RACE_ENERGYRAY 4856 0 999 1 -401 FEAT_RACE_ENERGYRAYSONIC 4520 0 999 1 -402 FEAT_ELAN_RESISTANCE 4521 0 999 1 -403 FEAT_ELAN_RESILIANCE 4522 0 999 1 -404 FEAT_PSIRACE_STOMP 4524 0 999 1 -405 FEAT_MAENAD_OUTBURST 4525 0 999 1 -406 FEAT_XEPH_BURST 4526 0 999 1 -407 FEAT_ZENYTH_TRUESTRIKE 4536 0 999 1 -408 FEAT_TULADH_MAGIC_CIRCL 4533 0 999 1 -409 FEAT_NATHRI_EXP_RETREAT 4534 0 999 1 -410 FEAT_BLADELING_RAZOR_STORM 4539 0 999 1 -411 FEAT_KAPAK_SALIVA 4546 0 999 1 -412 FEAT_IRDA_FLARE 4551 0 999 1 -413 FEAT_ZAKYA_CHILLTOUCH 4570 0 999 1 -414 FEAT_ZAKYA_TRUESTRIKE 4557 0 999 1 -415 FEAT_ZAKYA_VAMPTOUCH 4558 0 999 1 -416 FEAT_MINOR_CHANGE_SHAPE 4560 0 999 1 -417 FEAT_CHANGELING_CHANGE_SHAPE 4561 0 999 1 -418 FEAT_IRDA_CHANGE_SHAPE 4562 0 999 1 -419 FEAT_QUICK_CHANGE_SHAPE 4563 0 999 1 -420 FEAT_SHIFTER_SHIFTING 4566 0 999 1 -421 FEAT_RAK_SHADOW_JUMP 3307 0 999 1 -422 FEAT_NIXIE_CHARM_PERSON 4597 0 999 1 -423 FEAT_NIXIE_WATERBREATHING 4641 0 999 1 -424 FEAT_NYMPH_DIMENSION_DOOR 4755 0 999 1 -425 FEAT_NYMPH_STUNNING_GLANCE 4684 0 999 1 -426 FEAT_NYMPH_BLINDING_BEAUTY 4685 0 999 1 -427 FEAT_GRIG_PYROTECHNICS 4686 0 999 1 -428 FEAT_GRIG_INVIS 4687 0 999 1 -429 FEAT_GRIG_ENTANGLE 4635 0 999 1 -430 FEAT_BRALANI_LIGHTNING_BOLT 4995 0 999 1 -431 FEAT_BRALANI_CURE_SERIOUS 4996 0 999 1 -432 FEAT_BRALANI_BLUR 4997 0 999 1 -433 FEAT_BRALANI_CHARM_PERSON 4998 0 999 1 -434 FEAT_BRALANI_MIRROR_IMAGE 4999 0 999 1 -435 FEAT_BRALANI_GUST_OF_WIND 4978 0 999 1 -436 FEAT_TOUCH_OF_LUCK 4634 0 999 1 -437 FEAT_FORESTLORD_TREEWALK 4633 0 999 1 -438 FEAT_TROGLODYTE_STENCH 23549 0 999 1 -439 Skarn_spines 5180 0 999 1 -440 Killoren_Aspect_H 5209 0 999 1 -441 Killoren_Aspect_D 5210 0 999 1 -442 Killoren_Aspect_A 5211 0 999 1 -443 FrostFolk_IceBlast 5372 0 999 1 -444 Uldra_RayFrost 5373 0 999 1 -445 Uldra_Fatigue 5374 0 999 1 -446 Marrulurk_DA 2930 0 999 1 -447 Marrulurk_NauseatingBreath 5375 0 999 1 -448 ExtaminaarCharmAnimal 5379 0 999 1 -449 Marrusault_Howl 3308 0 999 1 -450 FEAT_HYBSIL_MIRROR_IMAGE 5382 0 999 1 -451 FEAT_HYBSIL_DANCLIGHTS 5383 0 999 1 -452 FEAT_HYBSIL_JUMP 5384 0 999 1 -453 FEAT_WILDREN_FURY 5386 0 999 1 -454 Turlemoi_RockThrowing 5419 0 999 1 -455 Arkamoi_ArcaneMastermind 5424 0 999 1 -456 Muckdweller_Squirt 5425 0 999 1 -457 Aranea_AlternateForm 5426 0 999 1 -458 Aranea_Web 5427 0 999 1 -459 Mephling_breath 5429 0 999 1 -460 FEAT_FOG_CLOUD_BREATH 5434 0 999 1 -461 Warsoul_CultPower 1805 0 999 1 -462 Warsoul_SoulTyrant 1806 0 999 1 -463 **** **** **** **** **** -464 **BonusDomains** **** **** **** **** -465 FEAT_CHECK_DOMAIN_SLOTS 2000 0 999 1 -466 FEAT_CAST_DOMAIN_LEVEL_ONE 2049 0 999 1 -467 FEAT_CAST_DOMAIN_LEVEL_TWO 2050 0 999 1 -468 FEAT_CAST_DOMAIN_LEVEL_THREE 2051 0 999 1 -469 FEAT_CAST_DOMAIN_LEVEL_FOUR 2052 0 999 1 -470 FEAT_CAST_DOMAIN_LEVEL_FIVE 2053 0 999 1 -471 FEAT_CAST_DOMAIN_LEVEL_SIX 2054 0 999 1 -472 FEAT_CAST_DOMAIN_LEVEL_SEVEN 2055 0 999 1 -473 FEAT_CAST_DOMAIN_LEVEL_EIGHT 2056 0 999 1 -474 FEAT_CAST_DOMAIN_LEVEL_NINE 2057 0 999 1 -475 Strength_Domain_Power 307 0 999 1 -476 Protection_Domain_Power 308 0 999 1 -477 Death_Domain_Power 310 0 999 1 -478 Air_Domain_Power 311 0 999 1 -479 Destruction_Domain_Power 313 0 999 1 -480 Earth_Domain_Power 314 0 999 1 -481 Fire_Domain_Power 316 0 999 1 -482 Plant_Domain_Power 321 0 999 1 -483 Sun_Domain_Power 322 0 999 1 -484 Travel_Domain_Power 323 0 999 1 -485 Trickery_Domain_Power 324 0 999 1 -486 Water_Domain_Power 325 0 999 1 -487 FEAT_ORC_DOMAIN 4041 0 999 1 -488 FEAT_SLIME_DOMAIN 4043 0 999 1 -489 FEAT_CHARM_DOMAIN 4045 0 999 1 -490 FEAT_FAMILY_DOMAIN 4051 0 999 1 -491 FEAT_HALFLING_DOMAIN 4052 0 999 1 -492 FEAT_ILLUSION_DOMAIN 4053 0 999 0 -493 FEAT_HATRED_DOMAIN 4054 0 999 1 -494 FEAT_NOBILITY_DOMAIN 4055 0 999 1 -495 FEAT_SCALEYKIND_DOMAIN 4057 0 999 1 -496 FEAT_RENEWAL_DOMAIN 4060 0 999 1 -497 FEAT_SPIDER_DOMAIN 4061 0 999 1 -498 FEAT_BLIGHTBRINGER 2250 0 999 1 -499 **** **** **** **** **** -500 **Templates** **** **** **** **** -501 Celestial_Smite_Evil 22601 0 999 1 -502 Fiendish_Smite_Good 22603 0 999 1 -503 Half_Celestial_Smite_Evil 22605 0 999 1 -504 Half_Celestial_Protection_from_Evil 22606 0 999 1 -505 Half_Celestial_Bless 22607 0 999 1 -506 Half_Celestial_Aid 22608 0 999 1 -507 Half_Celestial_Detect_Evil 22609 0 999 1 -508 Half_Celestial_Cure_Serious_Wounds 22610 0 999 1 -509 Half_Celestial_Neutralize_Poison 22611 0 999 1 -510 Half_Celestial_HolySmite **** 0 999 1 -511 Half_Celestial_Remove_Disease 22613 0 999 1 -512 Half_Celestial_DispelEvil **** 0 999 1 -513 Half_Celestial_Holy_Word 22615 0 999 1 -514 Half_Celestial_HolyAura 22616 0 999 1 -515 Half_Celestial_Hallow **** 0 999 1 -516 Half_Celestial_Mass_Charm 22618 0 999 1 -517 Half_Celestial_Summon_Creature_IX 22619 0 999 1 -518 Half_Celestial_Resurrection 22620 0 999 1 -519 Half_Celestial_Daylight 22621 0 999 1 -520 Half_Fiendish_Smite_Good 22624 0 999 1 -521 Half_Fiendish_Darkness 22625 0 999 1 -522 Half_Fiendish_Desecrate **** 0 999 1 -523 Half_Fiendish_Unholy_Blight **** 0 999 1 -524 Half_Fiendish_Poison 22628 0 999 1 -525 Half_Fiendish_Contagion 22629 0 999 1 -526 Half_Fiendish_Blasphemy 22630 0 999 1 -527 Half_Fiendish_Unholy_Aura **** 0 999 1 -528 Half_Fiendish_Unhallow **** 0 999 1 -529 Half_Fiendish_Horrid_Wilting 22633 0 999 1 -530 Half_Fiendish_Summon_Creature_IX 22634 0 999 1 -531 Half_Fiendish_Destruction 22635 0 999 1 -532 Lich_Fear_Aura 22637 0 999 1 -533 Lich_Paralyzing_Touch 22638 0 999 1 -534 Lich_Appearance 22639 0 999 1 -535 Demilich_Alter_Self 22641 0 999 1 -536 Demilich_Astral_Projection **** 0 999 1 -537 Demilich_Create_Greater_Undead 22643 0 999 1 -538 Demilich_Create_Undead 22644 0 999 1 -539 Demilich_Death_Knell **** 0 999 1 -540 Demilich_Enervation 22646 0 999 1 -541 Demilich_Greater_Dispel_Magic 22647 0 999 1 -542 Demilich_Harm 22648 0 999 1 -543 Demilich_Summon_Creature_I 22649 0 999 1 -544 Demilich_Summon_Creature_II 22650 0 999 1 -545 Demilich_Summon_Creature_III 22651 0 999 1 -546 Demilich_Summon_Creature_IV 22652 0 999 1 -547 Demilich_Summon_Creature_V 22653 0 999 1 -548 Demilich_Summon_Creature_VI 22654 0 999 1 -549 Demilich_Summon_Creature_VII 22655 0 999 1 -550 Demilich_Summon_Creature_VIII 22656 0 999 1 -551 Demilich_Summon_Creature_IX 22657 0 999 1 -552 Demilich_Telekinesis **** 0 999 1 -553 Demilich_Weird 22659 0 999 1 -554 Demilich_Greater_Planar_Ally 22660 0 999 1 -555 HalfDragon_Breath_Weapon 22662 0 999 1 -556 Earth_Strike 5328 0 999 1 -557 BloodedOne_War_Cry 5377 0 999 1 -558 RethDekala_VilefireBlast 5409 0 999 1 -559 RethDekala_MartialSpirit 5410 0 999 1 -560 RethDekala_ThicketOfBlades 5411 0 999 1 -561 RethDekala_DauntingStrike 5412 0 999 1 -562 RethDekala_DeathFromAbove 5413 0 999 1 -563 RethDekala_DisarmingStrike 5414 0 999 1 -564 RethDekala_EntanglingBlade 5415 0 999 1 -565 RethDekala_WallOfBlades 5416 0 999 1 -566 RethDekala_RecoverManeuvers 5417 0 999 1 -567 ArchlichTurnUndead 22701 0 999 1 -568 FEAT_ANIMATE_DEAD 3574 0 999 1 -569 FEAT_PROJECTION 3579 0 999 1 -570 FEAT_END_PROJECTION 3575 0 999 1 -571 **** **** **** **** **** -572 Saint_Bless 22702 0 999 1 -573 Saint_Guidance_Placeholder **** **** **** **** -574 Saint_Resistance 22704 0 999 1 -575 Saint_Virtue 22705 0 999 1 -576 Saint_Protective_Aura 22706 0 999 1 -577 **** **** **** **** **** -578 **WeaponsOfLegacy** **** **** **** **** -579 BBB_Darkvision 22710 0 999 1 -580 BBB_Longstrider 22711 0 999 1 -581 BBB_Lesser_Restoration 22712 0 999 1 -582 BBB_Teleport_SelfOnly 22713 0 999 1 -583 BBB_Protection_from_Evil 22714 0 999 1 -584 BBB_Drowseeker 22715 0 999 1 -585 BBB_ShockingShot 22716 0 999 1 -586 BBB_PierceTheBlackHeart 22717 0 999 1 -587 Steadfast_vigor 22718 0 999 1 -588 Steadfast_slow 22719 0 999 1 -589 Flay_SnakeSting 22720 0 999 1 -590 Flay_WhipWrap 22721 0 999 1 -591 CrimsonRuination_FrozenFate 22722 0 999 1 -592 Devious_DetectThoughts 22723 0 999 1 -593 SimpleBow_TrueSeeing 22724 0 999 1 -594 SimpleBow_Prescience 22725 0 999 1 -595 SimpleBow_Focus 22726 0 999 1 -596 Aradros_Extend 22727 0 999 1 -597 Aradros_Survive 22728 0 999 1 -598 Guurgal_Force 22729 0 999 1 -599 Guurgal_Rage 22730 0 999 1 -600 DivSpark_Fear 22731 0 999 1 -601 DivSpark_Light 22732 0 999 1 -602 Wargirds_Haste 22733 0 999 1 -603 Wargirds_Stoneskin 22734 0 999 1 -604 DesertWind_FierySlash 22735 0 999 1 -605 DesertWind_HowlingWind 22736 0 999 1 -606 DesertWind_FanFlames 22737 0 999 1 -607 DesertWind_DustDesert 22738 0 999 1 -608 Mindsplinter_VirtueDenied 22739 0 999 1 -609 Mindsplinter_KissOfDeath 22740 0 999 1 -610 Mindsplinter_BattleShriek 22741 0 999 1 -611 Mindsplinter_RuinousHowl 22742 0 999 1 -612 NotchedSpear_ParliamentOfFishes 22743 0 999 1 -613 NotchedSpear_ConcealmentKraken 22744 0 999 1 -614 NotchedSpear_ScionSea 22745 0 999 1 -615 NotchedSpear_CommandSeaChildren 22746 0 999 1 -616 Ur_SwiftStride 22747 0 999 1 -617 Ur_HealingTotem 22748 0 999 1 -618 Ur_SavageTransformation 22749 0 999 1 -619 FlamecastersBolt_MarkTarget 22750 0 999 1 -620 FlamecastersBolt_Morale 22751 0 999 1 -621 FlamecastersBolt_Fireball 22752 0 999 1 -622 StalkersBow_StalkersInsight 22753 0 999 1 -623 StalkersBow_Ethereal 22754 0 999 1 -624 Exordius_Guidance 22755 0 999 1 -625 Exordius_Cure 22756 0 999 1 -626 Exordius_Dismissal 22757 0 999 1 -627 Caladbolg_Imprison 22758 0 999 1 -628 HammerWitches_Detect 22759 0 999 1 -629 HammerWitches_Spellbreaker 22760 0 999 1 -630 HammerWitches_AMF 22761 0 999 1 -631 HammerWitches_Dispel 22762 0 999 1 -632 HammerWitches_Mantle 22763 0 999 1 -633 SlingOfTheDireWind_StunningStone 22764 0 999 1 -634 SlingOfTheDireWind_GustOfWind 22765 0 999 1 -635 SlingOfTheDireWind_WindWall 22766 0 999 1 -636 Treebrother_Shillelagh 22767 0 999 1 -637 Treebrother_Charm_Plant 22768 0 999 1 -638 Treebrother_Entangle 22769 0 999 1 -639 Treebrother_Owls_Insight 22770 0 999 1 -640 Treebrother_Changestaff 22771 0 999 1 -641 FullMoonsTrick_Rage 22772 0 999 1 -642 FullMoonsTrick_Invis 22773 0 999 1 -643 FiendkillersFlail_Darkvis 22774 0 999 1 -644 FiendkillersFlail_Detect 22775 0 999 1 -645 ScalesBalance_Detect 22776 0 999 1 -646 ScalesBalance_Cure 22777 0 999 1 -647 ScalesBalance_Knell 22778 0 999 1 -648 ScalesBalance_Enerv 22779 0 999 1 -649 ScalesBalance_Heal 22780 0 999 1 -650 ScalesBalance_Finger 22781 0 999 1 -651 ShishiO_Charm 22782 0 999 1 -652 ShishiO_Summon 22783 0 999 1 -653 ShishiO_Poly 22784 0 999 1 -654 ShishiO_Shout 22785 0 999 1 -655 Dymondheart_ShedBolts 22786 0 999 1 -656 Dymondheart_Deflect 22787 0 999 1 -657 Dymondheart_Daylight 22788 0 999 1 -658 Dymondheart_Cure 22789 0 999 1 -659 Dymondheart_Banish 22790 0 999 1 -660 Sunsword_Daylight 22791 0 999 1 -661 Sunsword_Death_Ward 22792 0 999 1 -662 Sunsword_Banish 22793 0 999 1 -663 Sunsword_Undeath 22794 0 999 1 -664 Blackrazor_Detect 22795 0 999 1 -665 Blackrazor_Knell 22796 0 999 1 -666 Blackrazor_Haste 22797 0 999 1 -667 Ramethene_Detect 22798 0 999 1 -668 Ramethene_Smite 22799 0 999 1 -669 Ramethene_Resist_Elements 22800 0 999 1 -670 Ramethene_Cloudkill 22801 0 999 1 -671 Ramethene_SuddenMaximize 22802 0 999 1 -672 Ramethene_Horrid_Wilting 22803 0 999 1 -673 Wyrmbane_Cause_Fear 22804 0 999 1 -674 Wyrmbane_Lightning_Bolt 22805 0 999 1 -675 Wyrmbane_Sudden_Emp 22806 0 999 1 -676 Wyrmbane_Breath_Lightning 22807 0 999 1 -677 Whelm_Detect_Giant 22808 0 999 1 -678 Whelm_Locate_Object 22809 0 999 1 -679 Whelm_Detect_Goblin 22810 0 999 1 -680 Ravenkind_Dancing_Lights 22811 0 999 1 -681 Ravenkind_Light 22812 0 999 1 -682 Ravenkind_Flare 22813 0 999 1 -683 Ravenkind_Detect_Undead 22814 0 999 1 -684 Ravenkind_Halt_Undead 22815 0 999 1 -685 Ravenkind_Cure_Light_Wounds 22816 0 999 1 -686 Ravenkind_Daylight 22817 0 999 1 -687 Ravenkind_Death_Ward 22818 0 999 1 -688 Ravenkind_Break_Enchantment 22819 0 999 1 -689 Ravenkind_Mass_Heal 22820 0 999 1 -690 LastCitadel_LeadingTheAttack 22821 0 999 1 -691 LastCitadel_Prayer 22822 0 999 1 -692 LastCitadel_Remove_Fear 22823 0 999 1 -693 LastCitadel_Cure_Critical_Wounds 22824 0 999 1 -694 LastCitadel_Blade_Barrier 22825 0 999 1 -695 LastCitadel_Heal 22826 0 999 1 -696 Unfettered_ChargingMinotaur 22827 0 999 1 -697 Unfettered_ENLARGE_PERSON 22828 0 999 1 -698 Unfettered_Etherealness 22829 0 999 1 -699 Unfettered_Stoneskin 22830 0 999 1 -700 Unfettered_Mordenkainens_Sword 22831 0 999 1 -701 Hillcrusher_Earthen_Might 22832 0 999 1 -702 Hillcrusher_Soften_Earth 22833 0 999 1 -703 Hillcrusher_Fangs_of_Stone 22834 0 999 1 -704 Hillcrusher_Raise_the_Earth 22835 0 999 1 -705 Hillcrusher_Shake_the_Earth 22836 0 999 1 -706 DesertWindToB_BurningBlade 22837 0 999 1 -707 DesertWindToB_FanTheFlames 22838 0 999 1 -708 DesertWindToB_WyrmsFlame 22839 0 999 1 -709 Faithful_Detect_Evil 22840 0 999 1 -710 Faithful_Lesser_Restoration 22841 0 999 1 -711 Faithful_Restoration 22842 0 999 1 -712 Faithful_Resiliency 22843 0 999 1 -713 Faithful_ImmortalFortitude 22844 0 999 1 -714 SupernalClarity_SapphireNightmareBlade 22845 0 999 1 -715 SupernalClarity_PsychicPoise 22846 0 999 1 -716 SupernalClarity_Haste 22847 0 999 1 -717 SupernalClarity_Freeeeeedom 22848 0 999 1 -718 SupernalClarity_Time_Stop 22849 0 999 1 -719 Kamate_SteelWind 22850 0 999 1 -720 Kamate_ShockingGrasp 22851 0 999 1 -721 Kamate_Lightning_Bolt 22852 0 999 1 -722 Kamate_Chain_Lightning 22853 0 999 1 -723 Kamate_True_Strike 22854 0 999 1 -724 Eventide_CometThrow 22855 0 999 1 -725 Eventide_BafflingDefense 22856 0 999 1 -726 Eventide_Improved_Invisibility 22857 0 999 1 -727 Umbral_Invisibility 22858 0 999 1 -728 Umbral_Shadowstep 22859 0 999 1 -729 TigerFang_FrenziedCharge 22860 0 999 1 -730 TigerFang_BattleFever 22861 0 999 1 -731 TigerFang_Haste 22862 0 999 1 -732 Bullybasher_KnockSilly 22863 0 999 1 -733 Bullybasher_StoneGathering 22864 0 999 1 -734 Bullybasher_LightningPunch 22865 0 999 1 -735 Bullybasher_GiantBearing 26000 0 999 1 -736 Lorestealer_Read_Magic 22866 0 999 1 -737 Lorestealer_DetectMagic 22867 0 999 1 -738 Lorestealer_Axecasting 22868 0 999 1 -739 Durindana_Daylight 22869 0 999 1 -740 Durindana_Death_Ward 22870 0 999 1 -741 Durindana_Hallow 22871 0 999 1 -742 Durindana_Dazzle 22872 0 999 1 -743 Thaas_Detect_Demon 22873 0 999 1 -744 Thaas_ObstructSummoning 22874 0 999 1 -745 Thaas_Banishment 22875 0 999 1 -746 Thaas_Teleport 22876 0 999 1 -747 Quickspur_Entropic_Shield 22877 0 999 1 -748 Quickspur_Resist_Elements 22878 0 999 1 -749 Quickspur_PhantomSteed 22879 0 999 1 -750 Quickspur_Blur 22880 0 999 1 -751 Quickspur_Stoneskin 22881 0 999 1 -752 BES_FIRE_OF_THE_HEART 22882 0 999 1 -753 BES_ENTHRALLING_LIGHT 22883 0 999 1 -754 BES_COLOR_SPRAY 22884 0 999 1 -755 BES_BLINDING_FLASH 22885 0 999 1 -756 BES_SHOOTING_STARS 22886 0 999 1 -757 BES_GLITTERING_MOTES 22887 0 999 1 -758 BES_TWINKLE 22888 0 999 1 -759 BES_SILVER_STARLIGHT 22889 0 999 1 -760 BES_STARLIGHT_DISPELLING 22890 0 999 1 -761 BES_TALES_IN_THE_SKY 22891 0 999 1 -762 BES_CALL_DOWN_A_STAR 22892 0 999 1 -763 ###cls_feat_allBaseClasses_END### **** **** **** **** -764 **** **** **** **** **** -765 ReservedBelowForISCAndESS **** **** **** **** -766 FEAT_WANDER_UNSEEN 5028 0 99 1 -767 EPIC_SPELL_ACHILLES_HEEL 5030 0 99 2 -768 EPIC_SPELL_ALL_HOPE_LOST 5032 0 99 2 -769 EPIC_SPELL_ALLIED_MARTYR 5034 0 99 2 -770 EPIC_SPELL_ANARCHYS_CALL 5036 0 99 2 -771 EPIC_SPELL_ANIMUS_BLAST 5038 0 99 2 -772 EPIC_SPELL_ANIMUS_BLIZZARD 5040 0 99 2 -773 EPIC_SPELL_ARMY_UNFALLEN 5042 0 99 2 -774 EPIC_SPELL_AUDIENCE_OF_STONE 5044 0 99 2 -775 EPIC_SPELL_BATTLE_BOUNDING 5046 0 99 2 -776 EPIC_SPELL_CELESTIAL_COUNCIL 5048 0 99 2 -777 EPIC_SPELL_CHAMPIONS_VALOR 5050 0 99 2 -778 EPIC_SPELL_CONTINGENT_RESURRECTION 5052 0 99 2 -779 EPIC_SPELL_CONTINGENT_REUNION 5054 0 99 2 -780 EPIC_SPELL_DEADEYE_SENSE 5056 0 99 2 -781 EPIC_SPELL_DEATHMARK 5058 0 99 2 -782 EPIC_SPELL_DIRE_WINTER 5060 0 99 2 -783 EPIC_SPELL_DRAGON_KNIGHT 5062 0 99 2 -784 EPIC_SPELL_DREAMSCAPE 5064 0 99 2 -785 EPIC_SPELL_DULLBLADES 5066 0 99 2 -786 EPIC_SPELL_DWEOMER_THIEF 5068 0 99 2 -787 EPIC_SPELL_ENSLAVE 5070 0 99 2 -788 EPIC_SPELL_EPIC_MAGE_ARMOR 5072 0 99 2 -789 EPIC_SPELL_EPIC_REPULSION 5074 0 99 2 -790 EPIC_SPELL_EPIC_SPELL_REFLECTION 5076 0 99 2 -791 EPIC_SPELL_EPIC_WARDING 5078 0 99 2 -792 EPIC_SPELL_ETERNAL_FREEDOM 5080 0 99 2 -793 EPIC_SPELL_FIENDISH_WORDS 5082 0 99 2 -794 EPIC_SPELL_FLEETNESS_OF_FOOT 5084 0 99 2 -795 EPIC_SPELL_GEM_CAGE 5086 0 99 2 -796 EPIC_SPELL_GODSMITE 5088 0 99 2 -797 EPIC_SPELL_GREATER_RUIN 5090 0 99 2 -798 EPIC_SPELL_GREATER_SPELL_RESISTANCE 5092 0 99 2 -799 EPIC_SPELL_GREATER_TIMESTOP 5094 0 99 2 -800 EPIC_SPELL_HELL_SEND 5096 0 99 2 -801 EPIC_SPELL_HELLBALL 5098 0 99 2 -802 EPIC_SPELL_HERCULEAN_ALLIANCE 5100 0 99 2 -803 EPIC_SPELL_HERCULEAN_EMPOWERMENT 5102 0 99 2 -804 EPIC_SPELL_IMPENETRABILITY 5104 0 99 2 -805 EPIC_SPELL_LEECH_FIELD 5106 0 99 2 -806 EPIC_SPELL_LEGENDARY_ARTISAN 5108 0 99 2 -807 EPIC_SPELL_LIFE_FORCE_TRANSFER 5110 0 99 2 -808 EPIC_SPELL_MAGMA_BURST 5112 0 99 2 -809 EPIC_SPELL_MASS_PENGUIN 5114 0 99 2 -810 EPIC_SPELL_MOMENTO_MORI 5116 0 99 2 -811 EPIC_SPELL_MUMMY_DUST 5118 0 99 2 -812 EPIC_SPELL_NAILED_TO_THE_SKY 5120 0 99 2 -813 EPIC_SPELL_NIGHTS_UNDOING 5122 0 99 2 -814 EPIC_SPELL_ORDER_RESTORED 5124 0 99 2 -815 EPIC_SPELL_PATHS_BECOME_KNOWN 5126 0 99 2 -816 EPIC_SPELL_PEERLESS_PENITENCE 5128 0 99 2 -817 EPIC_SPELL_PESTILENCE 5130 0 99 2 -818 EPIC_SPELL_PIOUS_PARLEY 5132 0 99 2 -819 EPIC_SPELL_PLANAR_CELL 5134 0 99 2 -820 EPIC_SPELL_PSIONIC_SALVO 5136 0 99 2 -821 EPIC_SPELL_RAIN_OF_FIRE 5138 0 99 2 -822 EPIC_SPELL_RISEN_REUNITED 5140 0 99 2 -823 EPIC_SPELL_RUIN 5142 0 99 2 -824 EPIC_SPELL_SINGULAR_SUNDER 5144 0 99 2 -825 EPIC_SPELL_SPELL_WORM 5146 0 99 2 -826 EPIC_SPELL_STORM_MANTLE 5148 0 99 2 -827 EPIC_SPELL_SUMMON_ABERRATION 5150 0 99 2 -828 EPIC_SPELL_SUPERB_DISPELLING 5152 0 99 2 -829 EPIC_SPELL_SYMRUSTARS_SPELLBINDING 5154 0 99 2 -830 EPIC_SPELL_THE_WITHERING 5156 0 99 2 -831 EPIC_SPELL_TOLODINES_KILLING_WIND 5158 0 99 2 -832 EPIC_SPELL_TRANSCENDENT_VITALITY 5160 0 99 2 -833 EPIC_SPELL_TWINFIEND 5162 0 99 2 -834 EPIC_SPELL_UNHOLY_DISCIPLE 5164 0 99 2 -835 EPIC_SPELL_UNIMPINGED 5166 0 99 2 -836 EPIC_SPELL_UNSEEN_WANDERER 5168 0 99 2 -837 EPIC_SPELL_WHIP_OF_SHAR 5170 0 99 2 + FeatLabel FeatIndex List GrantedOnLevel OnMenu +0 WeapProfWizard 51 3 1 0 +1 WeapProfSim_Dart 7914 3 1 0 +2 WeapProfSim_LightCrossbow 7951 3 1 0 +3 WeapProfSim_HeavyCrossbow 7952 3 1 0 +4 WeapProfSim_Quarterstaff 7953 3 1 0 +5 WeapProfSim_Dagger 7954 3 1 0 +6 WeapProfSim_Club 7955 3 1 0 +7 SpellFocusCon 166 1 -1 0 +8 SpellFocusDiv 167 1 -1 0 +9 SpellFocusEnc 168 1 -1 0 +10 SpellFocusEvo 169 1 -1 0 +11 SpellFocusIll 170 1 -1 0 +12 SpellFocusNec 171 1 -1 0 +13 SpellFocusTra 172 1 -1 0 +14 SpellFocusAbj 35 1 -1 0 +15 CmbtCast 7 1 -1 0 +16 Empower 11 1 -1 0 +17 ExtSpell 12 1 -1 0 +18 MaxSpell 25 1 -1 0 +19 Quicken 29 1 -1 0 +20 Silent 33 1 -1 0 +21 SpellPen 36 1 -1 0 +22 StillSpell 37 1 -1 0 +23 Familiar 303 3 1 1 +24 DefArrow 8 0 -1 0 +25 TwoWeap 41 0 -1 0 +26 Ambidex 1 0 -1 0 +27 ArcaneDefenseAbj 415 1 -1 0 +28 ArcaneDefenseCon 416 1 -1 0 +29 ArcaneDefenseDiv 417 1 -1 0 +30 ArcaneDefenseEnch 418 1 -1 0 +31 ArcaneDefenseEvo 419 1 -1 0 +32 ArcaneDefenseIll 420 1 -1 0 +33 ArcaneDefenseNec 421 1 -1 0 +34 ArcaneDefenseTra 422 1 -1 0 +35 GrSpllFcsAbj 393 1 -1 0 +36 GrSpllFcsCnj 394 1 -1 0 +37 GrSpllFcsDiv 395 1 -1 0 +38 GrSpllFcsEnch 396 1 -1 0 +39 GrSpllFcsEvc 397 1 -1 0 +40 GrSpllFcsIll 398 1 -1 0 +41 GrSpllFcsNec 399 1 -1 0 +42 GrSpllFcsTran 400 1 -1 0 +43 GreatSpellPen 401 1 -1 0 +44 FEAT_SCRIBE_SCROLL 945 3 1 0 +45 FEAT_BREW_POTION 944 1 3 0 +46 FEAT_CRAFT_WAND 946 1 5 0 +47 FEAT_EPIC_SPELLCASTING 4073 1 -1 0 +48 FEAT_EPIC_SPELL_FOCUS_ABJURATION 610 1 -1 0 +49 FEAT_EPIC_SPELL_FOCUS_CONJURATION 611 1 -1 0 +50 FEAT_EPIC_SPELL_FOCUS_DIVINATION 612 1 -1 0 +51 FEAT_EPIC_SPELL_FOCUS_ENCHANTMENT 613 1 -1 0 +52 FEAT_EPIC_SPELL_FOCUS_EVOCATION 614 1 -1 0 +53 FEAT_EPIC_SPELL_FOCUS_ILLUSION 615 1 -1 0 +54 FEAT_EPIC_SPELL_FOCUS_NECROMANCY 616 1 -1 0 +55 FEAT_EPIC_SPELL_FOCUS_TRANSMUTATION 617 1 -1 0 +56 FEAT_EPIC_SPELL_PENETRATION 618 1 -1 0 +57 FEAT_EPIC_IMPROVED_COMBAT_CASTING 696 1 -1 0 +58 FEAT_EPIC_AUTOMATIC_QUICKEN_1 857 1 -1 0 +59 FEAT_EPIC_AUTOMATIC_QUICKEN_2 858 1 -1 0 +60 FEAT_EPIC_AUTOMATIC_QUICKEN_3 859 1 -1 0 +61 FEAT_EPIC_AUTOMATIC_SILENT_SPELL_1 860 1 -1 0 +62 FEAT_EPIC_AUTOMATIC_SILENT_SPELL_2 861 1 -1 0 +63 FEAT_EPIC_AUTOMATIC_SILENT_SPELL_3 862 1 -1 0 +64 FEAT_EPIC_AUTOMATIC_STILL_SPELL_1 863 1 -1 0 +65 FEAT_EPIC_AUTOMATIC_STILL_SPELL_2 864 1 -1 0 +66 FEAT_EPIC_AUTOMATIC_STILL_SPELL_3 865 1 -1 0 +67 FEAT_EPIC_WIZARD 976 3 21 0 +68 FEAT_EPIC_GREAT_INTELLIGENCE_1 794 1 -1 0 +69 FEAT_EPIC_GREAT_INTELLIGENCE_2 795 1 -1 0 +70 FEAT_EPIC_GREAT_INTELLIGENCE_3 796 1 -1 0 +71 FEAT_EPIC_GREAT_INTELLIGENCE_4 797 1 -1 0 +72 FEAT_EPIC_GREAT_INTELLIGENCE_5 798 1 -1 0 +73 FEAT_EPIC_GREAT_INTELLIGENCE_6 799 1 -1 0 +74 FEAT_EPIC_GREAT_INTELLIGENCE_7 800 1 -1 0 +75 FEAT_EPIC_GREAT_INTELLIGENCE_8 801 1 -1 0 +76 FEAT_EPIC_GREAT_INTELLIGENCE_9 802 1 -1 0 +77 FEAT_EPIC_GREAT_INTELLIGENCE_10 803 1 -1 0 +78 FEAT_EPIC_BLINDING_SPEED 491 0 -1 1 +79 FEAT_CRAFT_WONDROUS_ITEM 2925 1 3 0 +80 FEAT_CRAFT_MAGIC_ARMS_AND_ARMOR 2926 1 5 0 +81 FEAT_CRAFT_ROD 2927 1 9 0 +82 FEAT_CRAFT_STAFF 2928 1 12 0 +83 FEAT_FORGE_RING 2929 1 12 0 +84 FEAT_ALTERNATE_FORM 2931 3 99 0 +85 ESS_Rest 4399 0 99 2 +86 FEAT_CRAFT_CONSTRUCT 2920 1 -1 0 +87 FEAT_CRAFT_EPIC_WONDROUS_ITEM 3488 1 21 0 +88 FEAT_CRAFT_EPIC_MAGIC_ARMS_ARMOR 3489 1 21 0 +89 FEAT_CRAFT_EPIC_ROD 3490 1 21 0 +90 FEAT_CRAFT_EPIC_STAFF 3491 1 21 0 +91 FEAT_FORGE_EPIC_RING 3528 1 21 0 +92 FEAT_EXCEPTIONAL_ARTISAN_I 2872 1 -1 0 +93 FEAT_EXCEPTIONAL_ARTISAN_II 2873 1 -1 0 +94 FEAT_EXCEPTIONAL_ARTISAN_III 2874 1 -1 0 +95 FEAT_EXTRAORDINARY_ARTISAN_I 2875 1 -1 0 +96 FEAT_EXTRAORDINARY_ARTISAN_II 2876 1 -1 0 +97 FEAT_EXTRAORDINARY_ARTISAN_III 2893 1 -1 0 +98 FEAT_LEGENDARY_ARTISAN_I 2894 1 -1 0 +99 FEAT_LEGENDARY_ARTISAN_II 2895 1 -1 0 +100 FEAT_LEGENDARY_ARTISAN_III 2896 1 -1 0 +101 SuddenEmpower 2830 0 -1 1 +102 SuddenExtend 2831 0 -1 1 +103 SuddenMaximize 2832 0 -1 1 +104 SuddenWiden 2833 0 -1 1 +105 FEAT_ESCHEW_MATERIALS 2596 0 1 0 +106 FEAT_IGNORE_MATERIALS 2597 0 -1 0 +107 FEAT_PNP_FAMILIARS 24243 0 99 1 +108 FocusedSpellPenetrCon 3128 1 -1 0 +109 FocusedSpellPenetrDiv 3129 1 -1 0 +110 FocusedSpellPenetrEnc 3130 1 -1 0 +111 FocusedSpellPenetrEvo 3131 1 -1 0 +112 FocusedSpellPenetrIll 3132 1 -1 0 +113 FocusedSpellPenetrNec 3133 1 -1 0 +114 FocusedSpellPenetrTra 3134 1 -1 0 +115 FocusedSpellPenetrAbj 3135 1 -1 0 +116 FEAT_TENACIOUSMAGIC 2961 1 -1 0 +117 FEAT_PERNICIOUSMAGIC 2962 1 -1 0 +118 FEAT_INSIDIOUSMAGIC 2963 1 -1 0 +119 Bane_Magic_Aberration 23556 0 -1 0 +120 Bane_Magic_Animal 23557 0 -1 0 +121 Bane_Magic_Beast 23558 0 -1 0 +122 Bane_Magic_Construct 23559 0 -1 0 +123 Bane_Magic_Dragon 23560 0 -1 0 +124 Bane_Magic_Dwarf 23561 0 -1 0 +125 Bane_Magic_Elemental 23562 0 -1 0 +126 Bane_Magic_Elf 23563 0 -1 0 +127 Bane_Magic_Fey 23564 0 -1 0 +128 Bane_Magic_Giant 23565 0 -1 0 +129 Bane_Magic_Gnome 23566 0 -1 0 +130 Bane_Magic_HalfElf 23567 0 -1 0 +131 Bane_Magic_Halfling 23568 0 -1 0 +132 Bane_Magic_HalfOrc 23569 0 -1 0 +133 Bane_Magic_Human 23570 0 -1 0 +134 Bane_Magic_Humanoid_Goblinoid 23571 0 -1 0 +135 Bane_Magic_Humanoid_Monstrous 23572 0 -1 0 +136 Bane_Magic_Humanoid_Orc 23573 0 -1 0 +137 Bane_Magic_Humanoid_Reptilian 23574 0 -1 0 +138 Bane_Magic_Magical_Beast 23575 0 -1 0 +139 Bane_Magic_Outsider 23576 0 -1 0 +140 Bane_Magic_Shapechanger 23577 0 -1 0 +141 Bane_Magic_Undead 23578 0 -1 0 +142 Bane_Magic_Vermin 23579 0 -1 0 +143 **** **** **** **** **** +144 ###cls_feat_allBaseClasses_BEGIN### **** **** **** **** +145 **Bio169Feats** **** **** **** **** +146 FEAT_HORSE_MENU 1089 3 1 1 +147 PLAYER_TOOL_01 1106 1 999 1 +148 PLAYER_TOOL_02 1107 1 999 1 +149 PLAYER_TOOL_03 1108 1 999 1 +150 PLAYER_TOOL_04 1109 1 999 1 +151 PLAYER_TOOL_05 1110 1 999 1 +152 PLAYER_TOOL_06 1111 1 999 1 +153 PLAYER_TOOL_07 1112 1 999 1 +154 PLAYER_TOOL_08 1113 1 999 1 +155 PLAYER_TOOL_09 1114 1 999 1 +156 PLAYER_TOOL_10 1115 1 999 1 +157 **FeatsGrantedToAll** **** **** **** **** +158 FEAT_JUMP 2884 3 1 1 +159 FEAT_CLIMB 3112 3 1 1 +160 FEAT_POWER_ATTACK_SINGLE_RADIAL 3143 0 999 1 +161 FEAT_POWER_ATTACK_FIVES_RADIAL 3144 0 999 1 +162 FEAT_PRC_POWER_ATTACK_QUICKS_RADIAL 3179 0 999 1 +163 ACP_QUICK_FEAT 3479 0 999 1 +164 ACP_HEAVY_FEAT 3480 0 999 1 +165 ACP_UNARMED_FEAT 3481 0 999 1 +166 TeleportManagementRadial 4235 3 1 1 +167 SWITCH_FEAT 2285 3 1 1 +168 FEAT_READ_RECIPE 2919 3 1 1 +169 FEAT_SPELLS_TOUCH_ATTACK 4092 3 1 1 +170 FEAT_SPELLS_HOLD_CHARGE_TOGGLE 4095 3 1 1 +171 EndSpellEffects 2468 3 1 1 +172 CombatMove_RadialMaster 2898 3 1 1 +173 CombatMove_RadialMaster2 5195 3 1 1 +174 CombatMove_RadialMaster3 3415 3 1 1 +175 **** **** **** **** **** +176 **GeneralActivatableFeats** **** **** **** **** +177 FEAT_EPIC_SWARM_OF_ARROWS 25995 0 -1 1 +178 DivineIntercession 5283 0 -1 1 +179 FEAT_INLINDL_SCHOOL 5284 0 -1 1 +180 FEAT_DESPANA_SCHOOL 5324 0 -1 1 +181 FEAT_ATTUNE_GEM 2472 0 -1 1 +182 FEAT_INSCRIBE_RUNE 2462 0 -1 1 +183 FEAT_CRAFT_SKULL_TALISMAN 3004 0 -1 1 +184 FEAT_THRALL_TO_DEMON 2616 0 -1 1 +185 FEAT_HOLYRADIANCE 3164 0 -1 1 +186 FEAT_NIMBUSOFLIGHT 3165 0 -1 1 +187 FEAT_MANYSHOT 3306 0 -1 1 +188 FEAT_IMP_MANYSHOT 3350 0 -1 1 +189 Pinpoint_Accuracy 3351 0 -1 1 +190 FEAT_SERVHEAVEN 3355 0 -1 1 +191 FEAT_DISCIPLE_OF_DARKNESS 4012 0 -1 1 +192 FEAT_BLOOD_OF_THE_WARLORD 4608 0 -1 1 +193 Cloak_Dance 4817 0 -1 1 +194 Reckless_Offense 4816 0 -1 1 +195 ZoneOfAnimation 2891 0 -1 1 +196 FEAT_SPELLFIRE_WIELDER 4368 0 -1 1 +197 FEAT_SPELLFIRE_INCREASE 4369 0 999 1 +198 FEAT_SPELLFIRE_DECREASE 4370 0 999 1 +199 FEAT_SPELLFIRE_QUICKSELECT 4371 0 999 1 +200 FEAT_DISCIPLE_OF_THE_SUN 3127 0 -1 1 +201 Dragonfire_Assault 1842 0 -1 1 +202 Dragonfire_Channeling 1843 0 -1 1 +203 Dragonfire_Inspiration 1844 0 -1 1 +204 DauntingPresence 24025 0 -1 1 +205 ProfaneLifeLeech 24026 0 -1 1 +206 ProfaneAgony 5282 0 -1 1 +207 SacredVitality 24027 0 -1 1 +208 SacredVengeance 24028 0 -1 1 +209 DeformityEyes 24029 0 -1 1 +210 DeformityParasite 24031 0 -1 1 +211 DarkSpeech 24033 0 -1 1 +212 DarkWhispers 24034 0 -1 1 +213 MastersWill 24035 0 -1 1 +214 DeformityMadness 24036 0 -1 1 +215 ReflexivePsychosis 24037 0 -1 1 +216 ChosenOfEvil 24038 0 -1 1 +217 Avenging_Strike 4297 0 -1 1 +218 SnowflakeWardance 4489 0 -1 1 +219 MasterWand 5312 0 -1 1 +220 RecklessWandWielder 5313 0 -1 1 +221 DoubleWandWielder 5315 0 -1 1 +222 Wandstrike 5316 0 -1 1 +223 Snap_Kick 4398 0 -1 1 +224 HighSwordLowAxe 5288 0 -1 1 +225 ScorpionsGrasp 5178 0 -1 1 +226 WeaponAndTorch 5291 0 -1 1 +227 ShieldCharge 3256 0 -1 1 +228 ShieldSlam 3257 0 -1 1 +229 AwesomeBlow 5370 0 -1 1 +230 Spinning_Halberd 5287 0 -1 1 +231 FEAT_RAY_CHARM_PERSON 2220 0 999 1 +232 FEAT_RAY_CHARM_MONSTER 2221 0 999 1 +233 FEAT_RAY_SLEEP 2222 0 999 1 +234 FEAT_RAY_FLESH_TO_STONE 2223 0 999 1 +235 FEAT_RAY_DISINTIGRATE 2224 0 999 1 +236 FEAT_RAY_FEAR 2225 0 999 1 +237 FEAT_RAY_SLOW 2226 0 999 1 +238 FEAT_RAY_INFLICT_MODERATE_WOUNDS 2227 0 999 1 +239 BonesOfTheEarth_Feat 2864 0 999 1 +240 FEAT_MYSTIC_BACKLASH 24737 0 -1 1 +241 FEAT_ACIDIC_SPLATTER 24738 0 -1 1 +242 FEAT_FIERY_BURST 24739 0 -1 1 +243 FEAT_STORM_BOLT 24740 0 -1 1 +244 FEAT_WINTERS_BLAST 24741 0 -1 1 +245 FEAT_CLAP_OF_THUNDER 24742 0 -1 1 +246 FEAT_SICKENING_GRASP 24743 0 -1 1 +247 FEAT_TOUCH_OF_HEALING 24744 0 -1 1 +248 FEAT_DIMENSIONAL_JAUNT 24745 0 -1 1 +249 FEAT_CLUTCH_OF_EARTH 24746 0 -1 1 +250 FEAT_BORNE_ALOFT 24747 0 -1 1 +251 FEAT_PROTECTIVE_WARD 24748 0 -1 1 +252 FEAT_SHADOW_VEIL 24749 0 -1 1 +253 FEAT_SUNLIGHT_EYES 24750 0 -1 1 +254 FEAT_TOUCH_OF_DISTRACTION 24751 0 -1 1 +255 FEAT_UMBRAL_SHROUD 24752 0 -1 1 +256 FEAT_CHARNEL_MIASMA 24753 0 -1 1 +257 FEAT_DROWNING_GLANCE 24754 0 -1 1 +258 FEAT_INVISIBLE_NEEDLE 24755 0 -1 1 +259 FEAT_SUMMON_ELEMENTAL 24756 0 -1 1 +260 FEAT_DIMENSIONAL_REACH 24757 0 -1 1 +261 FEAT_HURRICANE_BREATH 24758 0 -1 1 +262 FEAT_MINOR_SHAPESHIFT 24759 0 -1 1 +263 FEAT_FACECHANGER 24760 0 -1 1 +264 **** **** **** **** **** +265 **Metabreath_and_Channeling** **** **** **** **** +266 FEAT_CLINGING_BREATH 4966 0 -1 1 +267 FEAT_LINGERING_BREATH 4967 0 -1 1 +268 FEAT_ENLARGE_BREATH 4968 0 -1 1 +269 FEAT_HEIGHTEN_BREATH 4969 0 -1 1 +270 FEAT_MAXIMIZE_BREATH 4970 0 -1 1 +271 FEAT_SHAPE_BREATH 4972 0 -1 1 +272 FEAT_SPREAD_BREATH 4973 0 -1 1 +273 FEAT_TEMPEST_BREATH 4974 0 -1 1 +274 FEAT_ENTANGLING_EXHALATION 4975 0 -1 1 +275 FEAT_EXHALED_BARRIER 4976 0 -1 1 +276 FEAT_EXHALED_IMMUNITY 4977 0 -1 1 +277 **** **** **** **** **** +278 **DraconicAuras** **** **** **** **** +279 FEAT_BONUS_AURA_ENERGYACID 1828 0 -1 1 +280 FEAT_BONUS_AURA_ENERGYCOLD 1829 0 -1 1 +281 FEAT_BONUS_AURA_ENERGYELEC 1830 0 -1 1 +282 FEAT_BONUS_AURA_ENERGYFIRE 1831 0 -1 1 +283 FEAT_BONUS_AURA_TOUGHNESS 1894 0 -1 1 +284 FEAT_BONUS_AURA_SENSES 1891 0 -1 1 +285 FEAT_BONUS_AURA_PRESENCE 1885 0 -1 1 +286 FEAT_BONUS_AURA_INSIGHT 1884 0 -1 1 +287 FEAT_BONUS_AURA_RESOLVE 1890 0 -1 1 +288 FEAT_BONUS_AURA_STAMINA 1892 0 -1 1 +289 FEAT_BONUS_AURA_SWIFTNESS 1893 0 -1 1 +290 FEAT_BONUS_AURA_RESISTACID 1886 0 -1 1 +291 FEAT_BONUS_AURA_RESISTCOLD 1887 0 -1 1 +292 FEAT_BONUS_AURA_RESISTELEC 1888 0 -1 1 +293 FEAT_BONUS_AURA_RESISTFIRE 1889 0 -1 1 +294 FEAT_BONUS_AURA_MAGICPOWER 1840 0 -1 1 +295 FEAT_SECOND_AURA_POWER 1853 0 999 1 +296 FEAT_SECOND_AURA_ENERGYSHLD 1854 0 999 1 +297 FEAT_SECOND_AURA_TOUGHNESS 1855 0 999 1 +298 FEAT_SECOND_AURA_SENSES 1856 0 999 1 +299 FEAT_SECOND_AURA_VIGOR 1857 0 999 1 +300 FEAT_SECOND_AURA_RESISTANCE 1858 0 999 1 +301 FEAT_SECOND_AURA_PRESENCE 1859 0 999 1 +302 FEAT_SECOND_AURA_INSIGHT 1860 0 999 1 +303 FEAT_SECOND_AURA_RESOLVE 1861 0 999 1 +304 FEAT_SECOND_AURA_STAMINA 1862 0 999 1 +305 FEAT_SECOND_AURA_SWIFTNESS 1863 0 999 1 +306 FEAT_SECOND_AURA_RESISTACID 1864 0 999 1 +307 FEAT_SECOND_AURA_RESISTCOLD 1865 0 999 1 +308 FEAT_SECOND_AURA_RESISTELEC 1866 0 999 1 +309 FEAT_SECOND_AURA_RESISTFIRE 1867 0 999 1 +310 FEAT_SECOND_AURA_MAGICPOWER 1841 0 999 1 +311 FEAT_SECOND_AURA_ENERGYACID 1824 0 999 1 +312 FEAT_SECOND_AURA_ENERGYCOLD 1825 0 999 1 +313 FEAT_SECOND_AURA_ENERGYELEC 1826 0 999 1 +314 FEAT_SECOND_AURA_ENERGYFIRE 1827 0 999 1 +315 FEAT_SECOND_AURA_ENERGY 1836 0 999 1 +316 **** **** **** **** **** +317 **PsionicFeats** **** **** **** **** +318 Psionic_Focus 4818 0 999 1 +319 Invest_Armour 3643 0 -1 1 +320 Mental_Leap 4809 0 -1 1 +321 Psionic_Fist 4800 0 -1 1 +322 Greater_Psionic_Fist 4821 0 -1 1 +323 Psionic_Weapon 4822 0 -1 1 +324 Greater_Psionic_Weapon 4823 0 -1 1 +325 Psionic_Shot 4824 0 -1 1 +326 Greater_Psionic_Shot 4825 0 -1 1 +327 Psionic_Meditation 4827 0 -1 1 +328 Unavoidable_Strike 4830 0 -1 1 +329 Wounding_Attack 4832 0 -1 1 +330 Deep_Impact 4852 0 -1 1 +331 Fell_Shot 4853 0 -1 1 +332 Strength_of_Two 4965 0 -1 1 +333 **** **** **** **** **** +334 **IncarnumFeats** **** **** **** **** +335 InvestEssentiaConversation 8800 0 999 1 +336 HealingSoul 8882 0 999 1 +337 MidnightAugmentation 8884 0 999 1 +338 PsycarnumBlade 8887 0 999 1 +339 DivineSoultouch 8891 0 999 1 +340 PsycarnumInfusion 8896 0 999 1 +341 **** **** **** **** **** +342 **BindingFeats** **** **** **** **** +343 BindVestige 9131 0 -1 1 +344 ExpelVestige 9136 0 -1 1 +345 MalphasArcaneEye 9040 0 999 1 +346 SavnokCallArmor 9043 0 999 1 +347 AndromaliusSee_Invisibility 9048 0 999 1 +348 FocalorAuraSadness 9049 0 999 1 +349 KarsusSenses 9052 0 999 1 +350 **** **** **** **** **** +351 **RacialFeats** **** **** **** **** +352 FEAT_STONECHILD_MAGIC_STONE 5179 0 999 1 +353 FEAT_ASHERATI_BODY_DAZZLE 5213 0 999 1 +354 FEAT_ASHERATI_BODY_LAMP 5214 0 999 1 +355 FEAT_URDINNIR_STONESKIN 4644 0 999 1 +356 FEAT_AVARIEL_DIVE 4645 0 999 1 +357 FEAT_AYUAN_FEAR 4646 0 999 1 +358 FEAT_AYUAN_ENTANGLE 4647 0 999 1 +359 FEAT_AYUAN_DARKNESS 4648 0 999 1 +360 FEAT_AYUAN_NEUTRALIZE_POISON 4649 0 999 1 +361 FEAT_AASIMAR_LIGHT 4650 0 999 1 +362 FEAT_TIEFLING_DARK 4651 0 999 1 +363 FEAT_SVIRF_BLIND_DEAF 4652 0 999 1 +364 FEAT_SVIRF_BLUR 4653 0 999 1 +365 FEAT_SVIRF_DISGUISE 4654 0 999 1 +366 FEAT_SVIRF_REVERT 4655 0 999 1 +367 FEAT_RAK_DISGUISE 4656 0 999 1 +368 FEAT_RAK_CHANGE_SHAPE 4657 0 999 1 +369 FEAT_PYUAN_CHARM 4658 0 999 1 +370 FEAT_PYUAN_DARKNESS 4659 0 999 1 +371 FEAT_PYUAN_ENTANGLE 4660 0 999 1 +372 FEAT_PYUAN_FEAR 4661 0 999 1 +373 FEAT_PIXIE_INVIS 4662 0 999 1 +374 FEAT_PIXIE_CONFUSE 4663 0 999 1 +375 FEAT_PIXIE_ENTANGLE 4664 0 999 1 +376 FEAT_PIXIE_DISPEL_MAGIC 4665 0 999 1 +377 FEAT_PIXIE_POLYMORPH 4666 0 999 1 +378 FEAT_PIXIE_REVERT 4667 0 999 1 +379 FEAT_MINOTAUR_CHARGE 4668 0 999 1 +380 FEAT_ILLITHID_CHARM 4669 0 999 1 +381 FEAT_ILLITHID_BLAST 4670 0 999 1 +382 FEAT_ILLITHID_SUCKBRAIN 4671 0 999 1 +383 FEAT_GITHZERAI_DAZE 4672 0 999 1 +384 FEAT_GITHYANKI_DAZE 4673 0 999 1 +385 FEAT_GITHYANKI_BLUR 4674 0 999 1 +386 FEAT_FEYRI_CHARMPERSON 4675 0 999 1 +387 FEAT_FEYRI_CLAIRAUDIENCE 4676 0 999 1 +388 FEAT_FEYRI_DARKNESS 4677 0 999 1 +389 FEAT_FEYRI_ENERVATION 4678 0 999 1 +390 FEAT_FEYRI_ALTER 4679 0 999 1 +391 FEAT_FEYRI_REVERT 4680 0 999 1 +392 FEAT_DUERGAR_INVIS 4681 0 999 1 +393 FEAT_DROW_DARKNESS 4682 0 999 1 +394 FEAT_DROW_FAERIE_FIRE 4683 0 999 1 +395 BROWNIE_RAKSHASA_HIPS 433 0 999 0 +396 FEAT_WGNOME_SILENCE 4555 0 999 1 +397 FEAT_WGNOME_MAGEHAND 4519 0 999 1 +398 FEAT_HOUND_AID 4574 0 999 1 +399 FEAT_HOUND_AURAMENACE 4548 0 999 1 +400 FEAT_HOUND_CONTFLAME 4514 0 999 1 +401 FEAT_HOUND_DETECTEVIL 4618 0 999 1 +402 FEAT_HOUND_DISGUISE 4513 0 999 1 +403 FEAT_HOUND_MAGICCIRCLE 4515 0 999 1 +404 FEAT_HOUND_TELEPORT 4516 0 999 1 +405 FEAT_RACE_ENERGYRAY 4856 0 999 1 +406 FEAT_RACE_ENERGYRAYSONIC 4520 0 999 1 +407 FEAT_ELAN_RESISTANCE 4521 0 999 1 +408 FEAT_ELAN_RESILIANCE 4522 0 999 1 +409 FEAT_PSIRACE_STOMP 4524 0 999 1 +410 FEAT_MAENAD_OUTBURST 4525 0 999 1 +411 FEAT_XEPH_BURST 4526 0 999 1 +412 FEAT_ZENYTH_TRUESTRIKE 4536 0 999 1 +413 FEAT_TULADH_MAGIC_CIRCL 4533 0 999 1 +414 FEAT_NATHRI_EXP_RETREAT 4534 0 999 1 +415 FEAT_BLADELING_RAZOR_STORM 4539 0 999 1 +416 FEAT_KAPAK_SALIVA 4546 0 999 1 +417 FEAT_IRDA_FLARE 4551 0 999 1 +418 FEAT_ZAKYA_CHILLTOUCH 4570 0 999 1 +419 FEAT_ZAKYA_TRUESTRIKE 4557 0 999 1 +420 FEAT_ZAKYA_VAMPTOUCH 4558 0 999 1 +421 FEAT_MINOR_CHANGE_SHAPE 4560 0 999 1 +422 FEAT_CHANGELING_CHANGE_SHAPE 4561 0 999 1 +423 FEAT_IRDA_CHANGE_SHAPE 4562 0 999 1 +424 FEAT_QUICK_CHANGE_SHAPE 4563 0 999 1 +425 FEAT_SHIFTER_SHIFTING 4566 0 999 1 +426 FEAT_RAK_SHADOW_JUMP 3307 0 999 1 +427 FEAT_NIXIE_CHARM_PERSON 4597 0 999 1 +428 FEAT_NIXIE_WATERBREATHING 4641 0 999 1 +429 FEAT_NYMPH_DIMENSION_DOOR 4755 0 999 1 +430 FEAT_NYMPH_STUNNING_GLANCE 4684 0 999 1 +431 FEAT_NYMPH_BLINDING_BEAUTY 4685 0 999 1 +432 FEAT_GRIG_PYROTECHNICS 4686 0 999 1 +433 FEAT_GRIG_INVIS 4687 0 999 1 +434 FEAT_GRIG_ENTANGLE 4635 0 999 1 +435 FEAT_BRALANI_LIGHTNING_BOLT 4995 0 999 1 +436 FEAT_BRALANI_CURE_SERIOUS 4996 0 999 1 +437 FEAT_BRALANI_BLUR 4997 0 999 1 +438 FEAT_BRALANI_CHARM_PERSON 4998 0 999 1 +439 FEAT_BRALANI_MIRROR_IMAGE 4999 0 999 1 +440 FEAT_BRALANI_GUST_OF_WIND 4978 0 999 1 +441 FEAT_TOUCH_OF_LUCK 4634 0 999 1 +442 FEAT_FORESTLORD_TREEWALK 4633 0 999 1 +443 FEAT_TROGLODYTE_STENCH 23549 0 999 1 +444 Skarn_spines 5180 0 999 1 +445 Killoren_Aspect_H 5209 0 999 1 +446 Killoren_Aspect_D 5210 0 999 1 +447 Killoren_Aspect_A 5211 0 999 1 +448 FrostFolk_IceBlast 5372 0 999 1 +449 Uldra_RayFrost 5373 0 999 1 +450 Uldra_Fatigue 5374 0 999 1 +451 Marrulurk_DA 2930 0 999 1 +452 Marrulurk_NauseatingBreath 5375 0 999 1 +453 ExtaminaarCharmAnimal 5379 0 999 1 +454 Marrusault_Howl 3308 0 999 1 +455 FEAT_HYBSIL_MIRROR_IMAGE 5382 0 999 1 +456 FEAT_HYBSIL_DANCLIGHTS 5383 0 999 1 +457 FEAT_HYBSIL_JUMP 5384 0 999 1 +458 FEAT_WILDREN_FURY 5386 0 999 1 +459 Turlemoi_RockThrowing 5419 0 999 1 +460 Arkamoi_ArcaneMastermind 5424 0 999 1 +461 Muckdweller_Squirt 5425 0 999 1 +462 Aranea_AlternateForm 5426 0 999 1 +463 Aranea_Web 5427 0 999 1 +464 Mephling_breath 5429 0 999 1 +465 FEAT_FOG_CLOUD_BREATH 5434 0 999 1 +466 Warsoul_CultPower 1805 0 999 1 +467 Warsoul_SoulTyrant 1806 0 999 1 +468 **** **** **** **** **** +469 **BonusDomains** **** **** **** **** +470 FEAT_CHECK_DOMAIN_SLOTS 2000 0 999 1 +471 FEAT_CAST_DOMAIN_LEVEL_ONE 2049 0 999 1 +472 FEAT_CAST_DOMAIN_LEVEL_TWO 2050 0 999 1 +473 FEAT_CAST_DOMAIN_LEVEL_THREE 2051 0 999 1 +474 FEAT_CAST_DOMAIN_LEVEL_FOUR 2052 0 999 1 +475 FEAT_CAST_DOMAIN_LEVEL_FIVE 2053 0 999 1 +476 FEAT_CAST_DOMAIN_LEVEL_SIX 2054 0 999 1 +477 FEAT_CAST_DOMAIN_LEVEL_SEVEN 2055 0 999 1 +478 FEAT_CAST_DOMAIN_LEVEL_EIGHT 2056 0 999 1 +479 FEAT_CAST_DOMAIN_LEVEL_NINE 2057 0 999 1 +480 Strength_Domain_Power 307 0 999 1 +481 Protection_Domain_Power 308 0 999 1 +482 Death_Domain_Power 310 0 999 1 +483 Air_Domain_Power 311 0 999 1 +484 Destruction_Domain_Power 313 0 999 1 +485 Earth_Domain_Power 314 0 999 1 +486 Fire_Domain_Power 316 0 999 1 +487 Plant_Domain_Power 321 0 999 1 +488 Sun_Domain_Power 322 0 999 1 +489 Travel_Domain_Power 323 0 999 1 +490 Trickery_Domain_Power 324 0 999 1 +491 Water_Domain_Power 325 0 999 1 +492 FEAT_ORC_DOMAIN 4041 0 999 1 +493 FEAT_SLIME_DOMAIN 4043 0 999 1 +494 FEAT_CHARM_DOMAIN 4045 0 999 1 +495 FEAT_FAMILY_DOMAIN 4051 0 999 1 +496 FEAT_HALFLING_DOMAIN 4052 0 999 1 +497 FEAT_ILLUSION_DOMAIN 4053 0 999 0 +498 FEAT_HATRED_DOMAIN 4054 0 999 1 +499 FEAT_NOBILITY_DOMAIN 4055 0 999 1 +500 FEAT_SCALEYKIND_DOMAIN 4057 0 999 1 +501 FEAT_RENEWAL_DOMAIN 4060 0 999 1 +502 FEAT_SPIDER_DOMAIN 4061 0 999 1 +503 FEAT_BLIGHTBRINGER 2250 0 999 1 +504 **** **** **** **** **** +505 **Templates** **** **** **** **** +506 Celestial_Smite_Evil 22601 0 999 1 +507 Fiendish_Smite_Good 22603 0 999 1 +508 Half_Celestial_Smite_Evil 22605 0 999 1 +509 Half_Celestial_Protection_from_Evil 22606 0 999 1 +510 Half_Celestial_Bless 22607 0 999 1 +511 Half_Celestial_Aid 22608 0 999 1 +512 Half_Celestial_Detect_Evil 22609 0 999 1 +513 Half_Celestial_Cure_Serious_Wounds 22610 0 999 1 +514 Half_Celestial_Neutralize_Poison 22611 0 999 1 +515 Half_Celestial_HolySmite **** 0 999 1 +516 Half_Celestial_Remove_Disease 22613 0 999 1 +517 Half_Celestial_DispelEvil **** 0 999 1 +518 Half_Celestial_Holy_Word 22615 0 999 1 +519 Half_Celestial_HolyAura 22616 0 999 1 +520 Half_Celestial_Hallow **** 0 999 1 +521 Half_Celestial_Mass_Charm 22618 0 999 1 +522 Half_Celestial_Summon_Creature_IX 22619 0 999 1 +523 Half_Celestial_Resurrection 22620 0 999 1 +524 Half_Celestial_Daylight 22621 0 999 1 +525 Half_Fiendish_Smite_Good 22624 0 999 1 +526 Half_Fiendish_Darkness 22625 0 999 1 +527 Half_Fiendish_Desecrate **** 0 999 1 +528 Half_Fiendish_Unholy_Blight **** 0 999 1 +529 Half_Fiendish_Poison 22628 0 999 1 +530 Half_Fiendish_Contagion 22629 0 999 1 +531 Half_Fiendish_Blasphemy 22630 0 999 1 +532 Half_Fiendish_Unholy_Aura **** 0 999 1 +533 Half_Fiendish_Unhallow **** 0 999 1 +534 Half_Fiendish_Horrid_Wilting 22633 0 999 1 +535 Half_Fiendish_Summon_Creature_IX 22634 0 999 1 +536 Half_Fiendish_Destruction 22635 0 999 1 +537 Lich_Fear_Aura 22637 0 999 1 +538 Lich_Paralyzing_Touch 22638 0 999 1 +539 Lich_Appearance 22639 0 999 1 +540 Demilich_Alter_Self 22641 0 999 1 +541 Demilich_Astral_Projection **** 0 999 1 +542 Demilich_Create_Greater_Undead 22643 0 999 1 +543 Demilich_Create_Undead 22644 0 999 1 +544 Demilich_Death_Knell **** 0 999 1 +545 Demilich_Enervation 22646 0 999 1 +546 Demilich_Greater_Dispel_Magic 22647 0 999 1 +547 Demilich_Harm 22648 0 999 1 +548 Demilich_Summon_Creature_I 22649 0 999 1 +549 Demilich_Summon_Creature_II 22650 0 999 1 +550 Demilich_Summon_Creature_III 22651 0 999 1 +551 Demilich_Summon_Creature_IV 22652 0 999 1 +552 Demilich_Summon_Creature_V 22653 0 999 1 +553 Demilich_Summon_Creature_VI 22654 0 999 1 +554 Demilich_Summon_Creature_VII 22655 0 999 1 +555 Demilich_Summon_Creature_VIII 22656 0 999 1 +556 Demilich_Summon_Creature_IX 22657 0 999 1 +557 Demilich_Telekinesis **** 0 999 1 +558 Demilich_Weird 22659 0 999 1 +559 Demilich_Greater_Planar_Ally 22660 0 999 1 +560 HalfDragon_Breath_Weapon 22662 0 999 1 +561 Earth_Strike 5328 0 999 1 +562 BloodedOne_War_Cry 5377 0 999 1 +563 RethDekala_VilefireBlast 5409 0 999 1 +564 RethDekala_MartialSpirit 5410 0 999 1 +565 RethDekala_ThicketOfBlades 5411 0 999 1 +566 RethDekala_DauntingStrike 5412 0 999 1 +567 RethDekala_DeathFromAbove 5413 0 999 1 +568 RethDekala_DisarmingStrike 5414 0 999 1 +569 RethDekala_EntanglingBlade 5415 0 999 1 +570 RethDekala_WallOfBlades 5416 0 999 1 +571 RethDekala_RecoverManeuvers 5417 0 999 1 +572 ArchlichTurnUndead 22701 0 999 1 +573 FEAT_ANIMATE_DEAD 3574 0 999 1 +574 FEAT_PROJECTION 3579 0 999 1 +575 FEAT_END_PROJECTION 3575 0 999 1 +576 **** **** **** **** **** +577 Saint_Bless 22702 0 999 1 +578 Saint_Guidance_Placeholder **** **** **** **** +579 Saint_Resistance 22704 0 999 1 +580 Saint_Virtue 22705 0 999 1 +581 Saint_Protective_Aura 22706 0 999 1 +582 **** **** **** **** **** +583 **WeaponsOfLegacy** **** **** **** **** +584 BBB_Darkvision 22710 0 999 1 +585 BBB_Longstrider 22711 0 999 1 +586 BBB_Lesser_Restoration 22712 0 999 1 +587 BBB_Teleport_SelfOnly 22713 0 999 1 +588 BBB_Protection_from_Evil 22714 0 999 1 +589 BBB_Drowseeker 22715 0 999 1 +590 BBB_ShockingShot 22716 0 999 1 +591 BBB_PierceTheBlackHeart 22717 0 999 1 +592 Steadfast_vigor 22718 0 999 1 +593 Steadfast_slow 22719 0 999 1 +594 Flay_SnakeSting 22720 0 999 1 +595 Flay_WhipWrap 22721 0 999 1 +596 CrimsonRuination_FrozenFate 22722 0 999 1 +597 Devious_DetectThoughts 22723 0 999 1 +598 SimpleBow_TrueSeeing 22724 0 999 1 +599 SimpleBow_Prescience 22725 0 999 1 +600 SimpleBow_Focus 22726 0 999 1 +601 Aradros_Extend 22727 0 999 1 +602 Aradros_Survive 22728 0 999 1 +603 Guurgal_Force 22729 0 999 1 +604 Guurgal_Rage 22730 0 999 1 +605 DivSpark_Fear 22731 0 999 1 +606 DivSpark_Light 22732 0 999 1 +607 Wargirds_Haste 22733 0 999 1 +608 Wargirds_Stoneskin 22734 0 999 1 +609 DesertWind_FierySlash 22735 0 999 1 +610 DesertWind_HowlingWind 22736 0 999 1 +611 DesertWind_FanFlames 22737 0 999 1 +612 DesertWind_DustDesert 22738 0 999 1 +613 Mindsplinter_VirtueDenied 22739 0 999 1 +614 Mindsplinter_KissOfDeath 22740 0 999 1 +615 Mindsplinter_BattleShriek 22741 0 999 1 +616 Mindsplinter_RuinousHowl 22742 0 999 1 +617 NotchedSpear_ParliamentOfFishes 22743 0 999 1 +618 NotchedSpear_ConcealmentKraken 22744 0 999 1 +619 NotchedSpear_ScionSea 22745 0 999 1 +620 NotchedSpear_CommandSeaChildren 22746 0 999 1 +621 Ur_SwiftStride 22747 0 999 1 +622 Ur_HealingTotem 22748 0 999 1 +623 Ur_SavageTransformation 22749 0 999 1 +624 FlamecastersBolt_MarkTarget 22750 0 999 1 +625 FlamecastersBolt_Morale 22751 0 999 1 +626 FlamecastersBolt_Fireball 22752 0 999 1 +627 StalkersBow_StalkersInsight 22753 0 999 1 +628 StalkersBow_Ethereal 22754 0 999 1 +629 Exordius_Guidance 22755 0 999 1 +630 Exordius_Cure 22756 0 999 1 +631 Exordius_Dismissal 22757 0 999 1 +632 Caladbolg_Imprison 22758 0 999 1 +633 HammerWitches_Detect 22759 0 999 1 +634 HammerWitches_Spellbreaker 22760 0 999 1 +635 HammerWitches_AMF 22761 0 999 1 +636 HammerWitches_Dispel 22762 0 999 1 +637 HammerWitches_Mantle 22763 0 999 1 +638 SlingOfTheDireWind_StunningStone 22764 0 999 1 +639 SlingOfTheDireWind_GustOfWind 22765 0 999 1 +640 SlingOfTheDireWind_WindWall 22766 0 999 1 +641 Treebrother_Shillelagh 22767 0 999 1 +642 Treebrother_Charm_Plant 22768 0 999 1 +643 Treebrother_Entangle 22769 0 999 1 +644 Treebrother_Owls_Insight 22770 0 999 1 +645 Treebrother_Changestaff 22771 0 999 1 +646 FullMoonsTrick_Rage 22772 0 999 1 +647 FullMoonsTrick_Invis 22773 0 999 1 +648 FiendkillersFlail_Darkvis 22774 0 999 1 +649 FiendkillersFlail_Detect 22775 0 999 1 +650 ScalesBalance_Detect 22776 0 999 1 +651 ScalesBalance_Cure 22777 0 999 1 +652 ScalesBalance_Knell 22778 0 999 1 +653 ScalesBalance_Enerv 22779 0 999 1 +654 ScalesBalance_Heal 22780 0 999 1 +655 ScalesBalance_Finger 22781 0 999 1 +656 ShishiO_Charm 22782 0 999 1 +657 ShishiO_Summon 22783 0 999 1 +658 ShishiO_Poly 22784 0 999 1 +659 ShishiO_Shout 22785 0 999 1 +660 Dymondheart_ShedBolts 22786 0 999 1 +661 Dymondheart_Deflect 22787 0 999 1 +662 Dymondheart_Daylight 22788 0 999 1 +663 Dymondheart_Cure 22789 0 999 1 +664 Dymondheart_Banish 22790 0 999 1 +665 Sunsword_Daylight 22791 0 999 1 +666 Sunsword_Death_Ward 22792 0 999 1 +667 Sunsword_Banish 22793 0 999 1 +668 Sunsword_Undeath 22794 0 999 1 +669 Blackrazor_Detect 22795 0 999 1 +670 Blackrazor_Knell 22796 0 999 1 +671 Blackrazor_Haste 22797 0 999 1 +672 Ramethene_Detect 22798 0 999 1 +673 Ramethene_Smite 22799 0 999 1 +674 Ramethene_Resist_Elements 22800 0 999 1 +675 Ramethene_Cloudkill 22801 0 999 1 +676 Ramethene_SuddenMaximize 22802 0 999 1 +677 Ramethene_Horrid_Wilting 22803 0 999 1 +678 Wyrmbane_Cause_Fear 22804 0 999 1 +679 Wyrmbane_Lightning_Bolt 22805 0 999 1 +680 Wyrmbane_Sudden_Emp 22806 0 999 1 +681 Wyrmbane_Breath_Lightning 22807 0 999 1 +682 Whelm_Detect_Giant 22808 0 999 1 +683 Whelm_Locate_Object 22809 0 999 1 +684 Whelm_Detect_Goblin 22810 0 999 1 +685 Ravenkind_Dancing_Lights 22811 0 999 1 +686 Ravenkind_Light 22812 0 999 1 +687 Ravenkind_Flare 22813 0 999 1 +688 Ravenkind_Detect_Undead 22814 0 999 1 +689 Ravenkind_Halt_Undead 22815 0 999 1 +690 Ravenkind_Cure_Light_Wounds 22816 0 999 1 +691 Ravenkind_Daylight 22817 0 999 1 +692 Ravenkind_Death_Ward 22818 0 999 1 +693 Ravenkind_Break_Enchantment 22819 0 999 1 +694 Ravenkind_Mass_Heal 22820 0 999 1 +695 LastCitadel_LeadingTheAttack 22821 0 999 1 +696 LastCitadel_Prayer 22822 0 999 1 +697 LastCitadel_Remove_Fear 22823 0 999 1 +698 LastCitadel_Cure_Critical_Wounds 22824 0 999 1 +699 LastCitadel_Blade_Barrier 22825 0 999 1 +700 LastCitadel_Heal 22826 0 999 1 +701 Unfettered_ChargingMinotaur 22827 0 999 1 +702 Unfettered_ENLARGE_PERSON 22828 0 999 1 +703 Unfettered_Etherealness 22829 0 999 1 +704 Unfettered_Stoneskin 22830 0 999 1 +705 Unfettered_Mordenkainens_Sword 22831 0 999 1 +706 Hillcrusher_Earthen_Might 22832 0 999 1 +707 Hillcrusher_Soften_Earth 22833 0 999 1 +708 Hillcrusher_Fangs_of_Stone 22834 0 999 1 +709 Hillcrusher_Raise_the_Earth 22835 0 999 1 +710 Hillcrusher_Shake_the_Earth 22836 0 999 1 +711 DesertWindToB_BurningBlade 22837 0 999 1 +712 DesertWindToB_FanTheFlames 22838 0 999 1 +713 DesertWindToB_WyrmsFlame 22839 0 999 1 +714 Faithful_Detect_Evil 22840 0 999 1 +715 Faithful_Lesser_Restoration 22841 0 999 1 +716 Faithful_Restoration 22842 0 999 1 +717 Faithful_Resiliency 22843 0 999 1 +718 Faithful_ImmortalFortitude 22844 0 999 1 +719 SupernalClarity_SapphireNightmareBlade 22845 0 999 1 +720 SupernalClarity_PsychicPoise 22846 0 999 1 +721 SupernalClarity_Haste 22847 0 999 1 +722 SupernalClarity_Freeeeeedom 22848 0 999 1 +723 SupernalClarity_Time_Stop 22849 0 999 1 +724 Kamate_SteelWind 22850 0 999 1 +725 Kamate_ShockingGrasp 22851 0 999 1 +726 Kamate_Lightning_Bolt 22852 0 999 1 +727 Kamate_Chain_Lightning 22853 0 999 1 +728 Kamate_True_Strike 22854 0 999 1 +729 Eventide_CometThrow 22855 0 999 1 +730 Eventide_BafflingDefense 22856 0 999 1 +731 Eventide_Improved_Invisibility 22857 0 999 1 +732 Umbral_Invisibility 22858 0 999 1 +733 Umbral_Shadowstep 22859 0 999 1 +734 TigerFang_FrenziedCharge 22860 0 999 1 +735 TigerFang_BattleFever 22861 0 999 1 +736 TigerFang_Haste 22862 0 999 1 +737 Bullybasher_KnockSilly 22863 0 999 1 +738 Bullybasher_StoneGathering 22864 0 999 1 +739 Bullybasher_LightningPunch 22865 0 999 1 +740 Bullybasher_GiantBearing 26000 0 999 1 +741 Lorestealer_Read_Magic 22866 0 999 1 +742 Lorestealer_DetectMagic 22867 0 999 1 +743 Lorestealer_Axecasting 22868 0 999 1 +744 Durindana_Daylight 22869 0 999 1 +745 Durindana_Death_Ward 22870 0 999 1 +746 Durindana_Hallow 22871 0 999 1 +747 Durindana_Dazzle 22872 0 999 1 +748 Thaas_Detect_Demon 22873 0 999 1 +749 Thaas_ObstructSummoning 22874 0 999 1 +750 Thaas_Banishment 22875 0 999 1 +751 Thaas_Teleport 22876 0 999 1 +752 Quickspur_Entropic_Shield 22877 0 999 1 +753 Quickspur_Resist_Elements 22878 0 999 1 +754 Quickspur_PhantomSteed 22879 0 999 1 +755 Quickspur_Blur 22880 0 999 1 +756 Quickspur_Stoneskin 22881 0 999 1 +757 BES_FIRE_OF_THE_HEART 22882 0 999 1 +758 BES_ENTHRALLING_LIGHT 22883 0 999 1 +759 BES_COLOR_SPRAY 22884 0 999 1 +760 BES_BLINDING_FLASH 22885 0 999 1 +761 BES_SHOOTING_STARS 22886 0 999 1 +762 BES_GLITTERING_MOTES 22887 0 999 1 +763 BES_TWINKLE 22888 0 999 1 +764 BES_SILVER_STARLIGHT 22889 0 999 1 +765 BES_STARLIGHT_DISPELLING 22890 0 999 1 +766 BES_TALES_IN_THE_SKY 22891 0 999 1 +767 BES_CALL_DOWN_A_STAR 22892 0 999 1 +768 ###cls_feat_allBaseClasses_END### **** **** **** **** +769 **** **** **** **** **** +770 ReservedBelowForISCAndESS **** **** **** **** +771 FEAT_WANDER_UNSEEN 5028 0 99 1 +772 EPIC_SPELL_ACHILLES_HEEL 5030 0 99 2 +773 EPIC_SPELL_ALL_HOPE_LOST 5032 0 99 2 +774 EPIC_SPELL_ALLIED_MARTYR 5034 0 99 2 +775 EPIC_SPELL_ANARCHYS_CALL 5036 0 99 2 +776 EPIC_SPELL_ANIMUS_BLAST 5038 0 99 2 +777 EPIC_SPELL_ANIMUS_BLIZZARD 5040 0 99 2 +778 EPIC_SPELL_ARMY_UNFALLEN 5042 0 99 2 +779 EPIC_SPELL_AUDIENCE_OF_STONE 5044 0 99 2 +780 EPIC_SPELL_BATTLE_BOUNDING 5046 0 99 2 +781 EPIC_SPELL_CELESTIAL_COUNCIL 5048 0 99 2 +782 EPIC_SPELL_CHAMPIONS_VALOR 5050 0 99 2 +783 EPIC_SPELL_CONTINGENT_RESURRECTION 5052 0 99 2 +784 EPIC_SPELL_CONTINGENT_REUNION 5054 0 99 2 +785 EPIC_SPELL_DEADEYE_SENSE 5056 0 99 2 +786 EPIC_SPELL_DEATHMARK 5058 0 99 2 +787 EPIC_SPELL_DIRE_WINTER 5060 0 99 2 +788 EPIC_SPELL_DRAGON_KNIGHT 5062 0 99 2 +789 EPIC_SPELL_DREAMSCAPE 5064 0 99 2 +790 EPIC_SPELL_DULLBLADES 5066 0 99 2 +791 EPIC_SPELL_DWEOMER_THIEF 5068 0 99 2 +792 EPIC_SPELL_ENSLAVE 5070 0 99 2 +793 EPIC_SPELL_EPIC_MAGE_ARMOR 5072 0 99 2 +794 EPIC_SPELL_EPIC_REPULSION 5074 0 99 2 +795 EPIC_SPELL_EPIC_SPELL_REFLECTION 5076 0 99 2 +796 EPIC_SPELL_EPIC_WARDING 5078 0 99 2 +797 EPIC_SPELL_ETERNAL_FREEDOM 5080 0 99 2 +798 EPIC_SPELL_FIENDISH_WORDS 5082 0 99 2 +799 EPIC_SPELL_FLEETNESS_OF_FOOT 5084 0 99 2 +800 EPIC_SPELL_GEM_CAGE 5086 0 99 2 +801 EPIC_SPELL_GODSMITE 5088 0 99 2 +802 EPIC_SPELL_GREATER_RUIN 5090 0 99 2 +803 EPIC_SPELL_GREATER_SPELL_RESISTANCE 5092 0 99 2 +804 EPIC_SPELL_GREATER_TIMESTOP 5094 0 99 2 +805 EPIC_SPELL_HELL_SEND 5096 0 99 2 +806 EPIC_SPELL_HELLBALL 5098 0 99 2 +807 EPIC_SPELL_HERCULEAN_ALLIANCE 5100 0 99 2 +808 EPIC_SPELL_HERCULEAN_EMPOWERMENT 5102 0 99 2 +809 EPIC_SPELL_IMPENETRABILITY 5104 0 99 2 +810 EPIC_SPELL_LEECH_FIELD 5106 0 99 2 +811 EPIC_SPELL_LEGENDARY_ARTISAN 5108 0 99 2 +812 EPIC_SPELL_LIFE_FORCE_TRANSFER 5110 0 99 2 +813 EPIC_SPELL_MAGMA_BURST 5112 0 99 2 +814 EPIC_SPELL_MASS_PENGUIN 5114 0 99 2 +815 EPIC_SPELL_MOMENTO_MORI 5116 0 99 2 +816 EPIC_SPELL_MUMMY_DUST 5118 0 99 2 +817 EPIC_SPELL_NAILED_TO_THE_SKY 5120 0 99 2 +818 EPIC_SPELL_NIGHTS_UNDOING 5122 0 99 2 +819 EPIC_SPELL_ORDER_RESTORED 5124 0 99 2 +820 EPIC_SPELL_PATHS_BECOME_KNOWN 5126 0 99 2 +821 EPIC_SPELL_PEERLESS_PENITENCE 5128 0 99 2 +822 EPIC_SPELL_PESTILENCE 5130 0 99 2 +823 EPIC_SPELL_PIOUS_PARLEY 5132 0 99 2 +824 EPIC_SPELL_PLANAR_CELL 5134 0 99 2 +825 EPIC_SPELL_PSIONIC_SALVO 5136 0 99 2 +826 EPIC_SPELL_RAIN_OF_FIRE 5138 0 99 2 +827 EPIC_SPELL_RISEN_REUNITED 5140 0 99 2 +828 EPIC_SPELL_RUIN 5142 0 99 2 +829 EPIC_SPELL_SINGULAR_SUNDER 5144 0 99 2 +830 EPIC_SPELL_SPELL_WORM 5146 0 99 2 +831 EPIC_SPELL_STORM_MANTLE 5148 0 99 2 +832 EPIC_SPELL_SUMMON_ABERRATION 5150 0 99 2 +833 EPIC_SPELL_SUPERB_DISPELLING 5152 0 99 2 +834 EPIC_SPELL_SYMRUSTARS_SPELLBINDING 5154 0 99 2 +835 EPIC_SPELL_THE_WITHERING 5156 0 99 2 +836 EPIC_SPELL_TOLODINES_KILLING_WIND 5158 0 99 2 +837 EPIC_SPELL_TRANSCENDENT_VITALITY 5160 0 99 2 +838 EPIC_SPELL_TWINFIEND 5162 0 99 2 +839 EPIC_SPELL_UNHOLY_DISCIPLE 5164 0 99 2 +840 EPIC_SPELL_UNIMPINGED 5166 0 99 2 +841 EPIC_SPELL_UNSEEN_WANDERER 5168 0 99 2 +842 EPIC_SPELL_WHIP_OF_SHAR 5170 0 99 2 diff --git a/nwn/nwnprc/trunk/include/nw_inc_nui.nss b/nwn/nwnprc/trunk/include/nw_inc_nui.nss new file mode 100644 index 00000000..96fc3da4 --- /dev/null +++ b/nwn/nwnprc/trunk/include/nw_inc_nui.nss @@ -0,0 +1,1193 @@ +const int NUI_DIRECTION_HORIZONTAL = 0; +const int NUI_DIRECTION_VERTICAL = 1; + +const int NUI_MOUSE_BUTTON_LEFT = 0; +const int NUI_MOUSE_BUTTON_MIDDLE = 1; +const int NUI_MOUSE_BUTTON_RIGHT = 2; + +const int NUI_SCROLLBARS_NONE = 0; +const int NUI_SCROLLBARS_X = 1; +const int NUI_SCROLLBARS_Y = 2; +const int NUI_SCROLLBARS_BOTH = 3; +const int NUI_SCROLLBARS_AUTO = 4; + +const int NUI_ASPECT_FIT = 0; +const int NUI_ASPECT_FILL = 1; +const int NUI_ASPECT_FIT100 = 2; +const int NUI_ASPECT_EXACT = 3; +const int NUI_ASPECT_EXACTSCALED = 4; +const int NUI_ASPECT_STRETCH = 5; + +const int NUI_HALIGN_CENTER = 0; +const int NUI_HALIGN_LEFT = 1; +const int NUI_HALIGN_RIGHT = 2; + +const int NUI_VALIGN_MIDDLE = 0; +const int NUI_VALIGN_TOP = 1; +const int NUI_VALIGN_BOTTOM = 2; + +// ----------------------- +// Style + +const float NUI_STYLE_PRIMARY_WIDTH = 150.0; +const float NUI_STYLE_PRIMARY_HEIGHT = 50.0; + +const float NUI_STYLE_SECONDARY_WIDTH = 150.0; +const float NUI_STYLE_SECONDARY_HEIGHT = 35.0; + +const float NUI_STYLE_TERTIARY_WIDTH = 100.0; +const float NUI_STYLE_TERTIARY_HEIGHT = 30.0; + +const float NUI_STYLE_ROW_HEIGHT = 25.0; + +// ----------------------- +// Window + +// Special cases: +// * Set the window title to JsonBool(FALSE), Collapse to JsonBool(FALSE) and bClosable to FALSE +// to hide the title bar. +// Note: You MUST provide a way to close the window some other way, or the user will be stuck with it. +json // Window +NuiWindow( + json jRoot, // Layout-ish (NuiRow, NuiCol, NuiGroup) + json jTitle, // Bind:String + json jGeometry, // Bind:Rect Set x and/or y to -1.0 to center the window on that axis + // Set x and/or y to -2.0 to position the window's top left at the mouse cursor's position of that axis + // Set x and/or y to -3.0 to center the window on the mouse cursor's position of that axis + json jResizable, // Bind:Bool Set to JsonBool(TRUE) or JsonNull() to let user resize without binding. + json jCollapsed, // Bind:Bool Set to a static value JsonBool(FALSE) to disable collapsing. + // Set to JsonNull() to let user collapse without binding. + // For better UX, leave collapsing on. + json jClosable, // Bind:Bool You must provide a way to close the window if you set this to FALSE. + // For better UX, handle the window "closed" event. + json jTransparent, // Bind:Bool Do not render background + json jBorder, // Bind:Bool Do not render border + json jAcceptsInput = // Bind:Bool Set JsonBool(FALSE) to disable all input. + JSON_TRUE // All hover, clicks and keypresses will fall through. +); + +// ----------------------- +// Values + +// Create a dynamic bind. Unlike static values, these can change at runtime: +// NuiBind("mybindlabel"); +// NuiSetBind(.., "mybindlabel", JsonString("hi")); +// To create static values, just use the json types directly: +// JsonString("hi"); +json // Bind +NuiBind( + string sId +); + +// Tag the given element with a id. +// Only tagged elements will send events to the server. +json // Element +NuiId( + json jElem, // Element + string sId // String +); + +// A shim/helper that can be used to render or bind a strref where otherwise +// a string value would go. +json +NuiStrRef( + int nStrRef // STRREF +); + +// ----------------------- +// Layout + +// A column will auto-space all elements inside of it and advise the parent +// about it's desired size. +json // Layout +NuiCol( + json jList // Layout[] or Element[] +); + +// A row will auto-space all elements inside of it and advise the parent +// about it's desired size. +json // Layout +NuiRow( + json jList // Layout[] or Element[] +); + +// A group, usually with a border and some padding, holding a single element. Can scroll. +// Will not advise parent of size, so you need to let it fill a span (col/row) as if it was +// a element. +json // Layout +NuiGroup( + json jChild, // Layout or Element + int bBorder = TRUE, + int nScroll = NUI_SCROLLBARS_AUTO +); + +// Modifiers/Attributes: These are all static and cannot be bound, since the UI system +// cannot easily reflow once the layout is set up. You need to swap the layout if you +// want to change element geometry. + +json // Element +NuiWidth( + json jElem, // Element + float fWidth // Float: Element width in pixels (strength=required). +); + +json // Element +NuiHeight( + json jElem, // Element + float fHeight // Float: Height in pixels (strength=required). +); + +json // Element +NuiAspect( + json jElem, // Element + float fAspect // Float: Ratio of x/y. +); + +// Set a margin on the widget. The margin is the spacing outside of the widget. +json // Element +NuiMargin( + json jElem, // Element + float fMargin // Float +); + +// Set padding on the widget. The margin is the spacing inside of the widget. +json // Element +NuiPadding( + json jElem, // Element + float fPadding // Float +); + +// Disabled elements are non-interactive and greyed out. +json // Element +NuiEnabled( + json jElem, // Element + json jEnabler // Bind:Bool +); + +// Invisible elements do not render at all, but still take up layout space. +json // Element +NuiVisible( + json jElem, // Element + json jVisible // Bind:Bool +); + +// Tooltips show on mouse hover. +json // Element +NuiTooltip( + json jElem, // Element + json jTooltip // Bind:String +); + +// Tooltips for disabled elements show on mouse hover. +json // Element +NuiDisabledTooltip( + json jElem, // Element + json jTooltip // Bind:String +); + +// Encouraged elements have a breathing animated glow inside of it. +json // Element +NuiEncouraged( + json jElem, // Element + json jEncouraged // Bind:Bool +); + +// ----------------------- +// Props & Style + +json // Vec2 +NuiVec(float x, float y); + +json // Rect +NuiRect(float x, float y, float w, float h); + +json // Color +NuiColor(int r, int g, int b, int a = 255); + +// Style the foreground color of the widget. This is dependent on the widget +// in question and only supports solid/full colors right now (no texture skinning). +// For example, labels would style their text color; progress bars would style the bar. +json // Element +NuiStyleForegroundColor( + json jElem, // Element + json jColor // Bind:Color +); + +// ----------------------- +// Widgets + +// A special widget that just takes up layout space. +// If you add multiple spacers to a span, they will try to size equally. +// e.g.: [ ] will try to center the button. +json // Element +NuiSpacer(); + +// Create a label field. Labels are single-line stylable non-editable text fields. +json // Element +NuiLabel( + json jValue, // Bind:String + json jHAlign, // Bind:Int:NUI_HALIGN_* + json jVAlign // Bind:Int:NUI_VALIGN_* +); + +// Create a non-editable text field. Note: This text field internally implies a NuiGroup wrapped +// around it, which is providing the optional border and scrollbars. +json // Element +NuiText( + json jValue, // Bind:String + int bBorder = TRUE, // Bool + int nScroll = NUI_SCROLLBARS_AUTO // Int:NUI_SCROLLBARS_* +); + +// A clickable button with text as the label. +// Sends "click" events on click. +json // Element +NuiButton( + json jLabel // Bind:String +); + +// A clickable button with an image as the label. +// Sends "click" events on click. +json // Element +NuiButtonImage( + json jResRef // Bind:ResRef +); + +// A clickable button with text as the label. +// Same as the normal button, but this one is a toggle. +// Sends "click" events on click. +json // Element +NuiButtonSelect( + json jLabel, // Bind:String + json jValue // Bind:Bool +); + +// A checkbox with a label to the right of it. +json // Element +NuiCheck( + json jLabel, // Bind:String + json jBool // Bind:Bool +); + +// A image, with no border or padding. +json // Element +NuiImage( + json jResRef, // Bind:ResRef + json jAspect, // Bind:Int:NUI_ASPECT_* + json jHAlign, // Bind:Int:NUI_HALIGN_* + json jVAlign // Bind:Int:NUI_VALIGN_* +); + +// Optionally render only subregion of jImage. +// jRegion is a NuiRect (x, y, w, h) to indicate the render region inside the image. +json // NuiImage +NuiImageRegion( + json jImage, // NuiImage + json jRegion // Bind:NuiRect +); + +// A combobox/dropdown. +json // Element +NuiCombo( + json jElements, // Bind:ComboEntry[] + json jSelected // Bind:Int (index into jElements) +); + +json // ComboEntry +NuiComboEntry( + string sLabel, + int nValue +); + +// A floating-point slider. A good step size for normal-sized sliders is 0.01. +json // Element +NuiSliderFloat( + json jValue, // Bind:Float + json jMin, // Bind:Float + json jMax, // Bind:Float + json jStepSize // Bind:Float +); + +// A integer/discrete slider. +json // Element +NuiSlider( + json jValue, // Bind:Int + json jMin, // Bind:Int + json jMax, // Bind:Int + json jStepSize // Bind:Int +); + +// A progress bar. Progress is always from 0.0 to 1.0. +json // Element +NuiProgress( + json jValue // Bind:Float (0.0->1.0) +); + +// A editable text field. +json // Element +NuiTextEdit( + json jPlaceholder, // Bind:String + json jValue, // Bind:String + int nMaxLength, // UInt >= 1, <= 65535 + int bMultiline, // Bool + int bWordWrap = TRUE // Bool +); + +// Creates a list view of elements. +// jTemplate needs to be an array of NuiListTemplateCell instances. +// All binds referenced in jTemplate should be arrays of rRowCount size; +// e.g. when rendering a NuiLabel(), the bound label String should be an array of strings. +// You can pass in one of the template jRowCount into jSize as a convenience. The array +// size will be uses as the Int bind. +// jRowHeight defines the height of the rendered rows. +json // Element +NuiList( + json jTemplate, // NuiListTemplateCell[] (max: 16) + json jRowCount, // Bind:Int + float fRowHeight = NUI_STYLE_ROW_HEIGHT, + int bBorder = TRUE, + int nScroll = NUI_SCROLLBARS_Y // Note: Cannot be AUTO. +); + +json // NuiListTemplateCell +NuiListTemplateCell( + json jElem, // Element + float fWidth, // Float:0 = auto, >1 = pixel width + int bVariable // Bool:Cell can grow if space is available; otherwise static +); + +// A simple color picker, with no border or spacing. +json // Element +NuiColorPicker( + json jColor // Bind:Color +); + +// A list of options (radio buttons). Only one can be selected +// at a time. jValue is updated every time a different element is +// selected. The special value -1 means "nothing". +json // Element +NuiOptions( + int nDirection, // NUI_DIRECTION_* + json jElements, // JsonArray of string labels + json jValue // Bind:Int +); + +// A group of buttons. Only one can be selected at a time. jValue +// is updated every time a different button is selected. The special +// value -1 means "nothing". +json // Element +NuiToggles( + int nDirection, // NUI_DIRECTION_* + json jElements, // JsonArray of string labels + json jValue // Bind:Int +); + +const int NUI_CHART_TYPE_LINES = 0; +const int NUI_CHART_TYPE_COLUMN = 1; + +json // NuiChartSlot +NuiChartSlot( + int nType, // Int:NUI_CHART_TYPE_* + json jLegend, // Bind:String + json jColor, // Bind:NuiColor + json jData // Bind:Float[] +); + +// Renders a chart. +// Currently, min and max values are determined automatically and +// cannot be influenced. +json // Element +NuiChart( + json jSlots // NuiChartSlot[] +); + +// ----------------------- +// Draw Lists + +// Draw lists are raw painting primitives on top of widgets. +// They are anchored to the widget x/y coordinates, and are always +// painted in order of definition, without culling. You cannot bind +// the draw_list itself, but most parameters on individual draw_list +// entries can be bound. + +const int NUI_DRAW_LIST_ITEM_TYPE_POLYLINE = 0; +const int NUI_DRAW_LIST_ITEM_TYPE_CURVE = 1; +const int NUI_DRAW_LIST_ITEM_TYPE_CIRCLE = 2; +const int NUI_DRAW_LIST_ITEM_TYPE_ARC = 3; +const int NUI_DRAW_LIST_ITEM_TYPE_TEXT = 4; +const int NUI_DRAW_LIST_ITEM_TYPE_IMAGE = 5; +const int NUI_DRAW_LIST_ITEM_TYPE_LINE = 6; + +// You can order draw list items to be painted either before, or after the +// builtin render of the widget in question. This enables you to paint "behind" +// a widget. + +const int NUI_DRAW_LIST_ITEM_ORDER_BEFORE = -1; +const int NUI_DRAW_LIST_ITEM_ORDER_AFTER = 1; + +// Always render draw list item (default). +const int NUI_DRAW_LIST_ITEM_RENDER_ALWAYS = 0; +// Only render when NOT hovering. +const int NUI_DRAW_LIST_ITEM_RENDER_MOUSE_OFF = 1; +// Only render when mouse is hovering. +const int NUI_DRAW_LIST_ITEM_RENDER_MOUSE_HOVER = 2; +// Only render while LMB is held down. +const int NUI_DRAW_LIST_ITEM_RENDER_MOUSE_LEFT = 3; +// Only render while RMB is held down. +const int NUI_DRAW_LIST_ITEM_RENDER_MOUSE_RIGHT = 4; +// Only render while MMB is held down. +const int NUI_DRAW_LIST_ITEM_RENDER_MOUSE_MIDDLE = 5; + +json // DrawListItem +NuiDrawListPolyLine( + json jEnabled, // Bind:Bool + json jColor, // Bind:Color + json jFill, // Bind:Bool + json jLineThickness, // Bind:Float + json jPoints, // Bind:Float[] Always provide points in pairs + int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, // Int:NUI_DRAW_LIST_ITEM_ORDER_* + int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS // Int:NUI_DRAW_LIST_ITEM_RENDER_* +); + +json // DrawListItem +NuiDrawListCurve( + json jEnabled, // Bind:Bool + json jColor, // Bind:Color + json jLineThickness, // Bind:Float + json jA, // Bind:Vec2 + json jB, // Bind:Vec2 + json jCtrl0, // Bind:Vec2 + json jCtrl1, // Bind:Vec2 + int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, // Int:NUI_DRAW_LIST_ITEM_ORDER_* + int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS // Int:NUI_DRAW_LIST_ITEM_RENDER_* +); + +json // DrawListItem +NuiDrawListCircle( + json jEnabled, // Bind:Bool + json jColor, // Bind:Color + json jFill, // Bind:Bool + json jLineThickness, // Bind:Float + json jRect, // Bind:Rect + int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, // Int:NUI_DRAW_LIST_ITEM_ORDER_* + int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS // Int:NUI_DRAW_LIST_ITEM_RENDER_* +); + +json // DrawListItem +NuiDrawListArc( + json jEnabled, // Bind:Bool + json jColor, // Bind:Color + json jFill, // Bind:Bool + json jLineThickness, // Bind:Float + json jCenter, // Bind:Vec2 + json jRadius, // Bind:Float + json jAMin, // Bind:Float + json jAMax, // Bind:Float + int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, // Int:NUI_DRAW_LIST_ITEM_ORDER_* + int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS // Int:NUI_DRAW_LIST_ITEM_RENDER_* +); + +json // DrawListItem +NuiDrawListText( + json jEnabled, // Bind:Bool + json jColor, // Bind:Color + json jRect, // Bind:Rect + json jText, // Bind:String + int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, // Int:NUI_DRAW_LIST_ITEM_ORDER_* + int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS // Int:NUI_DRAW_LIST_ITEM_RENDER_* +); + +json // DrawListItem +NuiDrawListImage( + json jEnabled, // Bind:Bool + json jResRef, // Bind:ResRef + json jPos, // Bind:Rect + json jAspect, // Bind:Int:NUI_ASPECT_* + json jHAlign, // Bind:Int:NUI_HALIGN_* + json jVAlign, // Bind:Int:NUI_VALIGN_* + int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, // Int:NUI_DRAW_LIST_ITEM_ORDER_* + int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS // Int:NUI_DRAW_LIST_ITEM_RENDER_* +); + +json // DrawListItemImage +NuiDrawListImageRegion( + json jDrawListImage, // DrawListItemImage + json jRegion // Bind:NuiRect +); + +json // DrawListItem +NuiDrawListLine( + json jEnabled, // Bind:Bool + json jColor, // Bind:Color + json jLineThickness, // Bind:Float + json jA, // Bind:Vec2 + json jB, // Bind:Vec2 + int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, // Int:NUI_DRAW_LIST_ITEM_ORDER_* + int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS // Int:NUI_DRAW_LIST_ITEM_RENDER_* +); + +json // Element +NuiDrawList( + json jElem, // Element + json jScissor, // Bind:Bool Constrain painted elements to widget bounds. + json jList // DrawListItem[] +); + +// ----------------------- +// Implementation + +json +NuiWindow( + json jRoot, + json jTitle, + json jGeometry, + json jResizable, + json jCollapsed, + json jClosable, + json jTransparent, + json jBorder, + json jAcceptsInput +) +{ + json ret = JsonObject(); + // Currently hardcoded and here to catch backwards-incompatible data in the future. + ret = JsonObjectSet(ret, "version", JsonInt(1)); + ret = JsonObjectSet(ret, "title", jTitle); + ret = JsonObjectSet(ret, "root", jRoot); + ret = JsonObjectSet(ret, "geometry", jGeometry); + ret = JsonObjectSet(ret, "resizable", jResizable); + ret = JsonObjectSet(ret, "collapsed", jCollapsed); + ret = JsonObjectSet(ret, "closable", jClosable); + ret = JsonObjectSet(ret, "transparent", jTransparent); + ret = JsonObjectSet(ret, "border", jBorder); + ret = JsonObjectSet(ret, "accepts_input", jAcceptsInput); + return ret; +} + +json +NuiElement( + string sType, + json jLabel, + json jValue +) +{ + json ret = JsonObject(); + ret = JsonObjectSet(ret, "type", JsonString(sType)); + ret = JsonObjectSet(ret, "label", jLabel); + ret = JsonObjectSet(ret, "value", jValue); + return ret; +} + +json +NuiBind( + string sId +) +{ + return JsonObjectSet(JsonObject(), "bind", JsonString(sId)); +} + +json +NuiId( + json jElem, + string sId +) +{ + return JsonObjectSet(jElem, "id", JsonString(sId)); +} + +json +NuiStrRef( + int nStrRef +) +{ + json ret = JsonObject(); + ret = JsonObjectSet(ret, "strref", JsonInt(nStrRef)); + return ret; +} + +json +NuiCol( + json jList +) +{ + return JsonObjectSet(NuiElement("col", JsonNull(), JsonNull()), "children", jList); +} + +json +NuiRow( + json jList +) +{ + return JsonObjectSet(NuiElement("row", JsonNull(), JsonNull()), "children", jList); +} + +json +NuiGroup( + json jChild, + int bBorder = TRUE, + int nScroll = NUI_SCROLLBARS_AUTO +) +{ + json ret = NuiElement("group", JsonNull(), JsonNull()); + ret = JsonObjectSet(ret, "children", JsonArrayInsert(JsonArray(), jChild)); + ret = JsonObjectSet(ret, "border", JsonBool(bBorder)); + ret = JsonObjectSet(ret, "scrollbars", JsonInt(nScroll)); + return ret; +} + +json +NuiWidth(json jElem, float fWidth) +{ + return JsonObjectSet(jElem, "width", JsonFloat(fWidth)); +} + +json +NuiHeight(json jElem, float fHeight) +{ + return JsonObjectSet(jElem, "height", JsonFloat(fHeight)); +} + +json +NuiAspect(json jElem, float fAspect) +{ + return JsonObjectSet(jElem, "aspect", JsonFloat(fAspect)); +} + +json +NuiMargin( + json jElem, + float fMargin +) +{ + return JsonObjectSet(jElem, "margin", JsonFloat(fMargin)); +} + +json +NuiPadding( + json jElem, + float fPadding +) +{ + return JsonObjectSet(jElem, "padding", JsonFloat(fPadding)); +} + +json +NuiEnabled( + json jElem, + json jEnabler +) +{ + return JsonObjectSet(jElem, "enabled", jEnabler); +} + +json +NuiVisible( + json jElem, + json jVisible +) +{ + return JsonObjectSet(jElem, "visible", jVisible); +} + +json +NuiTooltip( + json jElem, + json jTooltip +) +{ + return JsonObjectSet(jElem, "tooltip", jTooltip); +} + +json +NuiDisabledTooltip( + json jElem, + json jTooltip +) +{ + return JsonObjectSet(jElem, "disabled_tooltip", jTooltip); +} + +json +NuiEncouraged( + json jElem, + json jEncouraged +) +{ + return JsonObjectSet(jElem, "encouraged", jEncouraged); +} + +json +NuiVec(float x, float y) +{ + json ret = JsonObject(); + ret = JsonObjectSet(ret, "x", JsonFloat(x)); + ret = JsonObjectSet(ret, "y", JsonFloat(y)); + return ret; +} + +json +NuiRect(float x, float y, float w, float h) +{ + json ret = JsonObject(); + ret = JsonObjectSet(ret, "x", JsonFloat(x)); + ret = JsonObjectSet(ret, "y", JsonFloat(y)); + ret = JsonObjectSet(ret, "w", JsonFloat(w)); + ret = JsonObjectSet(ret, "h", JsonFloat(h)); + return ret; +} + +json +NuiColor(int r, int g, int b, int a = 255) +{ + json ret = JsonObject(); + ret = JsonObjectSet(ret, "r", JsonInt(r)); + ret = JsonObjectSet(ret, "g", JsonInt(g)); + ret = JsonObjectSet(ret, "b", JsonInt(b)); + ret = JsonObjectSet(ret, "a", JsonInt(a)); + return ret; +} + +json +NuiStyleForegroundColor( + json jElem, + json jColor +) +{ + return JsonObjectSet(jElem, "foreground_color", jColor); +} + +json +NuiSpacer() +{ + return NuiElement("spacer", JsonNull(), JsonNull()); +} + +json +NuiLabel( + json jValue, + json jHAlign, + json jVAlign +) +{ + json ret = NuiElement("label", JsonNull(), jValue); + ret = JsonObjectSet(ret, "text_halign", jHAlign); + ret = JsonObjectSet(ret, "text_valign", jVAlign); + return ret; +} + +json +NuiText( + json jValue, + int bBorder = TRUE, + int nScroll = NUI_SCROLLBARS_AUTO +) +{ + json ret = NuiElement("text", JsonNull(), jValue); + ret = JsonObjectSet(ret, "border", JsonBool(bBorder)); + ret = JsonObjectSet(ret, "scrollbars", JsonInt(nScroll)); + return ret; +} + +json +NuiButton( + json jLabel +) +{ + return NuiElement("button", jLabel, JsonNull()); +} + +json +NuiButtonImage( + json jResRef +) +{ + return NuiElement("button_image", jResRef, JsonNull()); +} + +json +NuiButtonSelect( + json jLabel, + json jValue +) +{ + return NuiElement("button_select", jLabel, jValue); +} + +json +NuiCheck( + json jLabel, + json jBool +) +{ + return NuiElement("check", jLabel, jBool); +} + +json +NuiImage( + json jResRef, + json jAspect, + json jHAlign, + json jVAlign +) +{ + json img = NuiElement("image", JsonNull(), jResRef); + img = JsonObjectSet(img, "image_aspect", jAspect); + img = JsonObjectSet(img, "image_halign", jHAlign); + img = JsonObjectSet(img, "image_valign", jVAlign); + return img; +} + +json +NuiImageRegion( + json jImage, + json jRegion +) +{ + return JsonObjectSet(jImage, "image_region", jRegion); +} + +json +NuiCombo( + json jElements, + json jSelected +) +{ + return JsonObjectSet(NuiElement("combo", JsonNull(), jSelected), "elements", jElements); +} + +json +NuiComboEntry( + string sLabel, + int nValue +) +{ + return JsonArrayInsert(JsonArrayInsert(JsonArray(), JsonString(sLabel)), JsonInt(nValue)); +} + +json +NuiSliderFloat( + json jValue, + json jMin, + json jMax, + json jStepSize +) +{ + json ret = NuiElement("sliderf", JsonNull(), jValue); + ret = JsonObjectSet(ret, "min", jMin); + ret = JsonObjectSet(ret, "max", jMax); + ret = JsonObjectSet(ret, "step", jStepSize); + return ret; +} + +json +NuiSlider( + json jValue, + json jMin, + json jMax, + json jStepSize +) +{ + json ret = NuiElement("slider", JsonNull(), jValue); + ret = JsonObjectSet(ret, "min", jMin); + ret = JsonObjectSet(ret, "max", jMax); + ret = JsonObjectSet(ret, "step", jStepSize); + return ret; +} + +json +NuiProgress( + json jValue +) +{ + return NuiElement("progress", JsonNull(), jValue); +} + +json +NuiTextEdit( + json jPlaceholder, + json jValue, + int nMaxLength, + int bMultiline, + int bWordWrap = TRUE +) +{ + json ret = NuiElement("textedit", jPlaceholder, jValue); + ret = JsonObjectSet(ret, "max", JsonInt(nMaxLength)); + ret = JsonObjectSet(ret, "multiline", JsonBool(bMultiline)); + ret = JsonObjectSet(ret, "wordwrap", JsonBool(bWordWrap)); + return ret; +} + +json +NuiList( + json jTemplate, + json jRowCount, + float fRowHeight = NUI_STYLE_ROW_HEIGHT, + int bBorder = TRUE, + int nScroll = NUI_SCROLLBARS_Y +) +{ + json ret = NuiElement("list", JsonNull(), JsonNull()); + ret = JsonObjectSet(ret, "row_template", jTemplate); + ret = JsonObjectSet(ret, "row_count", jRowCount); + ret = JsonObjectSet(ret, "row_height", JsonFloat(fRowHeight)); + ret = JsonObjectSet(ret, "border", JsonBool(bBorder)); + ret = JsonObjectSet(ret, "scrollbars", JsonInt(nScroll)); + return ret; +} + +json +NuiListTemplateCell( + json jElem, + float fWidth, + int bVariable +) +{ + json ret = JsonArray(); + ret = JsonArrayInsert(ret, jElem); + ret = JsonArrayInsert(ret, JsonFloat(fWidth)); + ret = JsonArrayInsert(ret, JsonBool(bVariable)); + return ret; +} + +json +NuiColorPicker( + json jColor +) +{ + json ret = NuiElement("color_picker", JsonNull(), jColor); + return ret; +} + +json +NuiOptions( + int nDirection, + json jElements, + json jValue +) +{ + json ret = NuiElement("options", JsonNull(), jValue); + ret = JsonObjectSet(ret, "direction", JsonInt(nDirection)); + ret = JsonObjectSet(ret, "elements", jElements); + return ret; +} + +json +NuiToggles( + int nDirection, + json jElements, + json jValue +) +{ + json ret = NuiElement("tabbar", JsonNull(), jValue); + ret = JsonObjectSet(ret, "direction", JsonInt(nDirection)); + ret = JsonObjectSet(ret, "elements", jElements); + return ret; +} + +json +NuiChartSlot( + int nType, + json jLegend, + json jColor, + json jData +) +{ + json ret = JsonObject(); + ret = JsonObjectSet(ret, "type", JsonInt(nType)); + ret = JsonObjectSet(ret, "legend", jLegend); + ret = JsonObjectSet(ret, "color", jColor); + ret = JsonObjectSet(ret, "data", jData); + return ret; +} + +json +NuiChart( + json jSlots +) +{ + json ret = NuiElement("chart", JsonNull(), jSlots); + return ret; +} + +json +NuiDrawListItem( + int nType, + json jEnabled, + json jColor, + json jFill, + json jLineThickness, + int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, + int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS +) +{ + json ret = JsonObject(); + ret = JsonObjectSet(ret, "type", JsonInt(nType)); + ret = JsonObjectSet(ret, "enabled", jEnabled); + ret = JsonObjectSet(ret, "color", jColor); + ret = JsonObjectSet(ret, "fill", jFill); + ret = JsonObjectSet(ret, "line_thickness", jLineThickness); + ret = JsonObjectSet(ret, "order", JsonInt(nOrder)); + ret = JsonObjectSet(ret, "render", JsonInt(nRender)); + return ret; +} + +json +NuiDrawListPolyLine( + json jEnabled, + json jColor, + json jFill, + json jLineThickness, + json jPoints, + int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, + int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS +) +{ + json ret = NuiDrawListItem(NUI_DRAW_LIST_ITEM_TYPE_POLYLINE, jEnabled, jColor, jFill, jLineThickness, nOrder, nRender); + ret = JsonObjectSet(ret, "points", jPoints); + return ret; +} + +json +NuiDrawListCurve( + json jEnabled, + json jColor, + json jLineThickness, + json jA, + json jB, + json jCtrl0, + json jCtrl1, + int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, + int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS +) +{ + json ret = NuiDrawListItem(NUI_DRAW_LIST_ITEM_TYPE_CURVE, jEnabled, jColor, JsonBool(0), jLineThickness, nOrder, nRender); + ret = JsonObjectSet(ret, "a", jA); + ret = JsonObjectSet(ret, "b", jB); + ret = JsonObjectSet(ret, "ctrl0", jCtrl0); + ret = JsonObjectSet(ret, "ctrl1", jCtrl1); + return ret; +} + +json +NuiDrawListCircle( + json jEnabled, + json jColor, + json jFill, + json jLineThickness, + json jRect, + int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, + int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS +) +{ + json ret = NuiDrawListItem(NUI_DRAW_LIST_ITEM_TYPE_CIRCLE, jEnabled, jColor, jFill, jLineThickness, nOrder, nRender); + ret = JsonObjectSet(ret, "rect", jRect); + return ret; +} + +json +NuiDrawListArc( + json jEnabled, + json jColor, + json jFill, + json jLineThickness, + json jCenter, + json jRadius, + json jAMin, + json jAMax, + int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, + int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS +) +{ + json ret = NuiDrawListItem(NUI_DRAW_LIST_ITEM_TYPE_ARC, jEnabled, jColor, jFill, jLineThickness, nOrder, nRender); + ret = JsonObjectSet(ret, "c", jCenter); + ret = JsonObjectSet(ret, "radius", jRadius); + ret = JsonObjectSet(ret, "amin", jAMin); + ret = JsonObjectSet(ret, "amax", jAMax); + return ret; +} + +json +NuiDrawListText( + json jEnabled, + json jColor, + json jRect, + json jText, + int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, + int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS +) +{ + json ret = NuiDrawListItem(NUI_DRAW_LIST_ITEM_TYPE_TEXT, jEnabled, jColor, JsonNull(), JsonNull(), nOrder, nRender); + ret = JsonObjectSet(ret, "rect", jRect); + ret = JsonObjectSet(ret, "text", jText); + return ret; +} + +json +NuiDrawListImage( + json jEnabled, + json jResRef, + json jRect, + json jAspect, + json jHAlign, + json jVAlign, + int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, + int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS +) +{ + json ret = NuiDrawListItem(NUI_DRAW_LIST_ITEM_TYPE_IMAGE, jEnabled, JsonNull(), JsonNull(), JsonNull(), nOrder, nRender); + ret = JsonObjectSet(ret, "image", jResRef); + ret = JsonObjectSet(ret, "rect", jRect); + ret = JsonObjectSet(ret, "image_aspect", jAspect); + ret = JsonObjectSet(ret, "image_halign", jHAlign); + ret = JsonObjectSet(ret, "image_valign", jVAlign); + return ret; +} + +json +NuiDrawListImageRegion( + json jDrawListImage, + json jRegion +) +{ + return JsonObjectSet(jDrawListImage, "image_region", jRegion); +} + +json +NuiDrawListLine( + json jEnabled, + json jColor, + json jLineThickness, + json jA, + json jB, + int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, + int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS +) +{ + json ret = NuiDrawListItem(NUI_DRAW_LIST_ITEM_TYPE_LINE, jEnabled, jColor, JsonNull(), jLineThickness, nOrder, nRender); + ret = JsonObjectSet(ret, "a", jA); + ret = JsonObjectSet(ret, "b", jB); + return ret; +} + +json +NuiDrawList( + json jElem, + json jScissor, + json jList +) +{ + json ret = JsonObjectSet(jElem, "draw_list", jList); + ret = JsonObjectSet(ret, "draw_list_scissor", jScissor); + return ret; +} + +// json +// NuiCanvas( +// json jList +// ) +// { +// json ret = NuiElement("canvas", JsonNull(), jList); +// return ret; +// } + diff --git a/nwn/nwnprc/trunk/include/prc_feat_const.nss b/nwn/nwnprc/trunk/include/prc_feat_const.nss index 80ea4999..5401ca18 100644 --- a/nwn/nwnprc/trunk/include/prc_feat_const.nss +++ b/nwn/nwnprc/trunk/include/prc_feat_const.nss @@ -169,22 +169,22 @@ const int FEAT_VILE_MARTIAL_ELVEN_THINBLADE = 24814; const int FEAT_VILE_MARTIAL_ELVEN_COURTBLADE = 24815; //:: Sanctify Martial Strike Expansion -const int FEAT_SANCTIFY_MARTIAL_EAGLE_CLAW = 24850; -const int FEAT_SANCTIFY_MARTIAL_LIGHT_LANCE = 24851; -const int FEAT_SANCTIFY_MARTIAL_HEAVY_PICK = 24852; -const int FEAT_SANCTIFY_MARTIAL_LIGHT_PICK = 24853; -const int FEAT_SANCTIFY_MARTIAL_SAI = 24854; -const int FEAT_SANCTIFY_MARTIAL_NUNCHAKU = 24855; -const int FEAT_SANCTIFY_MARTIAL_FALCHION = 24856; -const int FEAT_SANCTIFY_MARTIAL_SAP = 24857; -const int FEAT_SANCTIFY_MARTIAL_KATAR = 24858; -const int FEAT_SANCTIFY_MARTIAL_HEAVY_MACE = 24859; -const int FEAT_SANCTIFY_MARTIAL_MAUL = 24860; -const int FEAT_SANCTIFY_MARTIAL_DBL_SCIMITAR = 24861; -const int FEAT_SANCTIFY_MARTIAL_GOAD = 24862; -const int FEAT_SANCTIFY_MARTIAL_ELVEN_LIGHTBLADE = 24863; -const int FEAT_SANCTIFY_MARTIAL_ELVEN_THINBLADE = 24864; -const int FEAT_SANCTIFY_MARTIAL_ELVEN_COURTBLADE = 24865; +const int FEAT_SANCTIFY_MARTIAL_EAGLE_CLAW = 24850; +const int FEAT_SANCTIFY_MARTIAL_LIGHT_LANCE = 24851; +const int FEAT_SANCTIFY_MARTIAL_HEAVY_PICK = 24852; +const int FEAT_SANCTIFY_MARTIAL_LIGHT_PICK = 24853; +const int FEAT_SANCTIFY_MARTIAL_SAI = 24854; +const int FEAT_SANCTIFY_MARTIAL_NUNCHAKU = 24855; +const int FEAT_SANCTIFY_MARTIAL_FALCHION = 24856; +const int FEAT_SANCTIFY_MARTIAL_SAP = 24857; +const int FEAT_SANCTIFY_MARTIAL_KATAR = 24858; +const int FEAT_SANCTIFY_MARTIAL_HEAVY_MACE = 24859; +const int FEAT_SANCTIFY_MARTIAL_MAUL = 24860; +const int FEAT_SANCTIFY_MARTIAL_DBL_SCIMITAR = 24861; +const int FEAT_SANCTIFY_MARTIAL_GOAD = 24862; +const int FEAT_SANCTIFY_MARTIAL_ELVEN_LIGHTBLADE = 24863; +const int FEAT_SANCTIFY_MARTIAL_ELVEN_THINBLADE = 24864; +const int FEAT_SANCTIFY_MARTIAL_ELVEN_COURTBLADE = 24865; //:: Web Enhancement Feats const int FEAT_CHARMING_THE_ARROW = 25997; diff --git a/nwn/nwnprc/trunk/include/prc_inc_combat.nss b/nwn/nwnprc/trunk/include/prc_inc_combat.nss index 2b66cf8f..f5a24113 100644 --- a/nwn/nwnprc/trunk/include/prc_inc_combat.nss +++ b/nwn/nwnprc/trunk/include/prc_inc_combat.nss @@ -1506,8 +1506,8 @@ struct WeaponFeat GetAllFeatsOfWeaponType(int iWeaponType) sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTMACE; sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTMACE; sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_LIGHTMACE; - sFeat.SanctifyMartialStrike = FEAT_VILE_MARTIAL_LIGHTMACE; - sFeat.VileMartialStrike = FEAT_SANCTIFY_MARTIAL_LIGHTMACE; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_LIGHTMACE; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_LIGHTMACE; break; } case BASE_ITEM_LONGBOW: { diff --git a/nwn/nwnprc/trunk/include/prc_ipfeat_const.nss b/nwn/nwnprc/trunk/include/prc_ipfeat_const.nss index 2d5aab0e..a1829bef 100644 --- a/nwn/nwnprc/trunk/include/prc_ipfeat_const.nss +++ b/nwn/nwnprc/trunk/include/prc_ipfeat_const.nss @@ -1355,7 +1355,8 @@ const int IP_CONST_FEAT_VILE_MARTIAL_SICKLE = 24794; const int IP_CONST_FEAT_VILE_MARTIAL_DWARVENAXE = 24795; const int IP_CONST_FEAT_VILE_MARTIAL_WHIP = 24796; const int IP_CONST_FEAT_VILE_MARTIAL_TRIDENT = 24797; -const int IP_CONST_FEAT_VILE_MARTIAL_MINDBLADE = 24898; +const int IP_CONST_FEAT_VILE_MARTIAL_MINDBLADE = 24798; + //:: New Weapons const int IP_CONST_FEAT_VILE_MARTIAL_EAGLE_CLAW = 26500; const int IP_CONST_FEAT_VILE_MARTIAL_LIGHT_LANCE = 26501; diff --git a/nwn/nwnprc/trunk/include/prc_spell_const.nss b/nwn/nwnprc/trunk/include/prc_spell_const.nss index 618ff1a7..bb8b1cd6 100644 --- a/nwn/nwnprc/trunk/include/prc_spell_const.nss +++ b/nwn/nwnprc/trunk/include/prc_spell_const.nss @@ -1,5 +1,8 @@ //const int FOOBAR = -1; // Comment or uncomment whenever the compiler croaks on an error code 5. +//:: NUI Spell constants +const int SPELL_NUI_POWER_ATTACK = 2691; + //spell const int SPELL_MAJOR_MAGIC_MISSILE = 2247; const int SPELL_GREAT_WALL_OF_DISPEL = 2096; diff --git a/nwn/nwnprc/trunk/include/prc_weap_apt.nss b/nwn/nwnprc/trunk/include/prc_weap_apt.nss index dee6c5fb..7b35caa6 100644 --- a/nwn/nwnprc/trunk/include/prc_weap_apt.nss +++ b/nwn/nwnprc/trunk/include/prc_weap_apt.nss @@ -228,8 +228,10 @@ int GetSanctifyMartialStrikeFeatItemProperty(int nFeatNumber) int GetVileMartialStrikeFeatItemProperty(int nFeatNumber) { int nItemProperty; - nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_VILE_MARTIAL_CLUB, IP_CONST_FEAT_VILE_MARTIAL_MINDBLADE); + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_VILE_MARTIAL_CLUB, IP_CONST_FEAT_VILE_MARTIAL_TRIDENT); if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_VILE_MARTIAL_MINDBLADE, IP_CONST_FEAT_VILE_MARTIAL_MINDBLADE); + if(nItemProperty != -1) return nItemProperty; nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_VILE_MARTIAL_EAGLE_CLAW, IP_CONST_FEAT_VILE_MARTIAL_ELVEN_COURTBLADE); if(nItemProperty != -1) return nItemProperty; return -1; diff --git a/nwn/nwnprc/trunk/include/tob_inc_tobfunc.nss b/nwn/nwnprc/trunk/include/tob_inc_tobfunc.nss index 5d9e9edf..3d74cbdd 100644 --- a/nwn/nwnprc/trunk/include/tob_inc_tobfunc.nss +++ b/nwn/nwnprc/trunk/include/tob_inc_tobfunc.nss @@ -341,6 +341,16 @@ int BladeMeditationFeat(object oInitiator); */ int BladeMeditationDamage(object oInitiator, int nMoveId); + +/** + * Returns 1 if Blade Meditation & Discipline match + * @param oInitiator Person to check + * @param nDiscipline Discipline to match + * + * @return 1 or 0 + */ + int HasBladeMeditationForDiscipline(object oInitiator, int nDiscipline); + ////////////////////////////////////////////////// /* Includes */ ////////////////////////////////////////////////// @@ -1266,4 +1276,18 @@ int BladeMeditationDamage(object oInitiator, int nMoveId) return 1; return -1; +} + +int HasBladeMeditationForDiscipline(object oInitiator, int nDiscipline) +{ + if (!GetIsObjectValid(oInitiator)) + return FALSE; + + int nFeatDiscipline = BladeMeditationFeat(oInitiator); + + // If the discipline for Blade Meditation matches the one we're checking, return true + if (nFeatDiscipline == nDiscipline) + return TRUE; + + return FALSE; } \ No newline at end of file diff --git a/nwn/nwnprc/trunk/newspellbook/shd_myst_echospl.nss b/nwn/nwnprc/trunk/newspellbook/shd_myst_echospl.nss index 89154a4b..45677fe5 100644 --- a/nwn/nwnprc/trunk/newspellbook/shd_myst_echospl.nss +++ b/nwn/nwnprc/trunk/newspellbook/shd_myst_echospl.nss @@ -24,6 +24,60 @@ mystery or a spell of higher than 4th level. #include "shd_inc_shdfunc" #include "shd_mysthook" +void main() +{ + object oShadow = OBJECT_SELF; + int nMyst = PRCGetSpellId(); + + if(DEBUG) DoDebug("shd_myst_echospl: nMyst " + IntToString(nMyst)); + + // Disallow if this spell is from an item + if (PRCGetSpellCastItem(oShadow) != OBJECT_INVALID) + { + FloatingTextStringOnCreature("You cannot Echo spells cast from items.", oShadow); + if(DEBUG) DoDebug("shd_myst_echospl: Disallowed - item cast"); + return; + } + // Disallow if this spell is cast by the shadowcaster itself + if (GetLastSpellCaster() == oShadow) + { + FloatingTextStringOnCreature("You cannot Echo your own spells.", oShadow); + if(DEBUG) DoDebug("shd_myst_echospl: Disallowed - item cast or cast by oShadow"); + return; + } + + if (GetLocalInt(oShadow, "EchoedSpell")) + { + int nSpellId = GetLocalInt(oShadow, "EchoedSpell"); + int nDC = 10 + StringToInt(Get2DACache("spells", "Innate", nSpellId)) + GetAbilityModifier(ABILITY_CHARISMA, oShadow); + + if(DEBUG) DoDebug("shd_myst_echospl: Echo SpellId " + IntToString(nSpellId) + " at DC " + IntToString(nDC)); + + AssignCommand(oShadow, ActionCastSpell(nSpellId, GetShadowcasterLevel(oShadow), 0, nDC)); + } + else + { + if(DEBUG) DoDebug("shd_myst_echospl: MYST_ECHO_SPELL"); + if (!ShadPreMystCastCode()) return; + + object oTarget = PRCGetSpellTargetObject(); + struct mystery myst = EvaluateMystery(oShadow, oTarget, METASHADOW_NONE); + + if (myst.bCanMyst) + { + if(DEBUG) DoDebug("shd_myst_echospl: MYST_ECHO_SPELL bCanMyst"); + SetLocalInt(oTarget, "EchoSpell", TRUE); + SetLocalObject(oTarget, "EchoSpell", oShadow); + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DIMENSIONANCHOR), oTarget); + } + } +} + + + +/* #include "shd_inc_shdfunc" +#include "shd_mysthook" + void main() { object oShadow = OBJECT_SELF; @@ -56,4 +110,4 @@ void main() ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DIMENSIONANCHOR), oTarget); } } -} \ No newline at end of file +} */ \ No newline at end of file diff --git a/nwn/nwnprc/trunk/newspellbook/tob_dmnd_dmndbld.nss b/nwn/nwnprc/trunk/newspellbook/tob_dmnd_dmndbld.nss index 7d3d2c83..337ac5d7 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_dmnd_dmndbld.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_dmnd_dmndbld.nss @@ -46,7 +46,7 @@ void main() if(move.bCanManeuver) { effect eNone; - int nDC = GetDefenderAC(oTarget, oInitiator); + int nDC = GetDefenderAC(oTarget, oInitiator); int nAB = -2; if (GetIsSkillSuccessful(oInitiator, SKILL_CONCENTRATION, nDC)) { diff --git a/nwn/nwnprc/trunk/newspellbook/tob_dmnd_drptb.nss b/nwn/nwnprc/trunk/newspellbook/tob_dmnd_drptb.nss index 4c51195b..043edbd0 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_dmnd_drptb.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_dmnd_drptb.nss @@ -27,19 +27,26 @@ or be unable to take any actions for 1 round. void TOBAttack(object oTarget, object oInitiator) { - effect eNone; - PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Disrupting Blow Hit", "Disrupting Blow Miss"); - - if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) - { - int nDC = 15 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator); - - // Saving Throw - if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC)) - { - SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDazed(), oTarget, RoundsToSeconds(1)); - } - } + effect eNone; + + PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Disrupting Blow Hit", "Disrupting Blow Miss"); + + if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) + { + int nDC = 15 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId())); + if (nBladeMed) + { + nDC += 1; + } + + // Saving Throw + if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC)) + { + SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDazed(), oTarget, RoundsToSeconds(1)); + } + } } void main() diff --git a/nwn/nwnprc/trunk/newspellbook/tob_dmnd_mndstrk.nss b/nwn/nwnprc/trunk/newspellbook/tob_dmnd_mndstrk.nss index fbb7dc0a..04883a09 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_dmnd_mndstrk.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_dmnd_mndstrk.nss @@ -29,14 +29,22 @@ void TOBAttack(object oTarget, object oInitiator) { - effect eNone = EffectVisualEffect(VFX_IMP_BLINDDEAD_DN_CYAN); + int nDC = 14 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId())); + if (nBladeMed) + { + nDC += 1; + } + + effect eNone = EffectVisualEffect(VFX_IMP_BLINDDEAD_DN_CYAN); int nAB = 0; if (GetLocalInt(oInitiator, "SupernalAttack")) nAB += 1; PerformAttack(oTarget, oInitiator, eNone, 0.0, nAB, 0, 0, "Mind Strike Hit", "Mind Strike Miss"); if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) { // Saving Throw - if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, (14 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator)))) + if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC)) { ApplyAbilityDamage(oTarget, ABILITY_WISDOM, d4(), DURATION_TYPE_PERMANENT); } diff --git a/nwn/nwnprc/trunk/newspellbook/tob_dmnd_qcksil.nss b/nwn/nwnprc/trunk/newspellbook/tob_dmnd_qcksil.nss index 50edbfd1..0f28753c 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_dmnd_qcksil.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_dmnd_qcksil.nss @@ -12,7 +12,7 @@ Range: Personal Target: You In the blink of an eye, you make your move. Your speed, reflexes, and boundless confidence -combine to allow you to make a fast, bold move that catches your fores off guard. +combine to allow you to make a fast, bold move that catches your foes off guard. Your speed doubles for one round. diff --git a/nwn/nwnprc/trunk/newspellbook/tob_dpst_awstdrg.nss b/nwn/nwnprc/trunk/newspellbook/tob_dpst_awstdrg.nss index 9e0acc07..aadedec5 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_dpst_awstdrg.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_dpst_awstdrg.nss @@ -41,8 +41,15 @@ void main() // Enemy check if (GetIsEnemy(oProneTarget, oInitiator)) { + int nDC = 10 + GetHitDice(oInitiator)/2 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId())); + if (nBladeMed) + { + nDC += 1; + } // Save check - if (!PRCMySavingThrow(SAVING_THROW_WILL, oProneTarget, (10 + GetHitDice(oInitiator)/2 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator)))) + if (!PRCMySavingThrow(SAVING_THROW_WILL, oProneTarget, nDC)) { ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectKnockdown()), oProneTarget, 6.0); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(12)), oProneTarget); diff --git a/nwn/nwnprc/trunk/newspellbook/tob_dpst_crhmntj.nss b/nwn/nwnprc/trunk/newspellbook/tob_dpst_crhmntj.nss index cc7dc42e..276de3d1 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_dpst_crhmntj.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_dpst_crhmntj.nss @@ -32,8 +32,16 @@ void main() object oProneTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(10.0), GetLocation(oInitiator)); while(GetIsObjectValid(oProneTarget)) { - // Skill check - if (!GetIsSkillSuccessful(oProneTarget, SKILL_BALANCE, 15)) + int nDC = 15; + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId())); + if (nBladeMed) + { + nDC += 1; + } + + // Skill check + if (!GetIsSkillSuccessful(oProneTarget, SKILL_BALANCE, nDC)) { ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectKnockdown()), oProneTarget, 6.0); } diff --git a/nwn/nwnprc/trunk/newspellbook/tob_dpst_drgtth.nss b/nwn/nwnprc/trunk/newspellbook/tob_dpst_drgtth.nss index 67b7fd32..ad3603a1 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_dpst_drgtth.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_dpst_drgtth.nss @@ -16,7 +16,7 @@ You cause a 10 foot tall pillar of stone to appear, tossing enemies to the ground. */ - +#include "tob_inc_move" #include "prc_inc_spells" void main() @@ -26,11 +26,18 @@ void main() object oProneTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(10.0), GetLocation(oInitiator)); while(GetIsObjectValid(oProneTarget)) { - // Save check - if (!PRCMySavingThrow(SAVING_THROW_WILL, oProneTarget, (10 + GetHitDice(oInitiator)/2 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator)))) + int nDC = 10 + GetHitDice(oInitiator)/2 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId())); + if (nBladeMed) + { + nDC += 1; + } + // Save check + if (!PRCMySavingThrow(SAVING_THROW_WILL, oProneTarget, nDC)) { ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectKnockdown()), oProneTarget, 6.0); - } + } oProneTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(10.0), GetLocation(oInitiator)); } diff --git a/nwn/nwnprc/trunk/newspellbook/tob_dpst_mntfrta.nss b/nwn/nwnprc/trunk/newspellbook/tob_dpst_mntfrta.nss index 52c5fce6..f97635e1 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_dpst_mntfrta.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_dpst_mntfrta.nss @@ -28,8 +28,17 @@ void main() { //Declare major variables object oTarget = GetEnteringObject(); + object oInitiator = GetAreaOfEffectCreator(OBJECT_SELF); + + int nDC = 10; + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, DISCIPLINE_STONE_DRAGON); + if (nBladeMed) + { + nDC += 1; + } // Cleaned up on exit - if (!GetIsSkillSuccessful(oTarget, SKILL_BALANCE, 10) && GetIsEnemy(oTarget, GetAreaOfEffectCreator())) + if (!GetIsSkillSuccessful(oTarget, SKILL_BALANCE, nDC) && GetIsEnemy(oTarget, GetAreaOfEffectCreator())) ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectKnockdown()), oTarget, 6.0); } \ No newline at end of file diff --git a/nwn/nwnprc/trunk/newspellbook/tob_dvsp_ctgstrk.nss b/nwn/nwnprc/trunk/newspellbook/tob_dvsp_ctgstrk.nss index 736722dc..f8204326 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_dvsp_ctgstrk.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_dvsp_ctgstrk.nss @@ -39,8 +39,15 @@ void TOBAttack(object oTarget, object oInitiator) PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(8), 0, "Castigating Strike Hit", "Castigating Strike Miss"); if(GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) { + int nDC = 17 + GetAbilityModifier(ABILITY_CHARISMA, oInitiator); + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId())); + if (nBladeMed) + { + nDC += 1; + } + // Saving Throw for the primary target - if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (17 + GetAbilityModifier(ABILITY_CHARISMA, oInitiator)))) + if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC)) { effect eLink = ExtraordinaryEffect(EffectVisualEffect(VFX_IMP_HEAD_EVIL)); ApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget); @@ -64,7 +71,7 @@ void TOBAttack(object oTarget, object oInitiator) ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FLAME_M_PURPLE), oAreaTarget); // Saving Throw for the secondary targets - if(!PRCMySavingThrow(SAVING_THROW_FORT, oAreaTarget, (17 + GetAbilityModifier(ABILITY_CHARISMA, oInitiator)))) + if(!PRCMySavingThrow(SAVING_THROW_FORT, oAreaTarget, nDC)) { effect eLink = ExtraordinaryEffect(EffectVisualEffect(VFX_IMP_HEAD_EVIL)); ApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oAreaTarget); diff --git a/nwn/nwnprc/trunk/newspellbook/tob_dvsp_dntstrk.nss b/nwn/nwnprc/trunk/newspellbook/tob_dvsp_dntstrk.nss index 2f9e7b44..b39e565e 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_dvsp_dntstrk.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_dvsp_dntstrk.nss @@ -35,8 +35,14 @@ void TOBAttack(object oTarget, object oInitiator) PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Daunting Strike Hit", "Daunting Strike Miss"); if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) { - // Saving Throw - if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (15 + GetAbilityModifier(ABILITY_CHARISMA, oInitiator)))) + int nDC = 15 + GetAbilityModifier(ABILITY_CHARISMA, oInitiator); + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId())); + if (nBladeMed) + { + nDC += 1; + } + // Saving Throw + if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC)) { effect eLink = ExtraordinaryEffect(EffectLinkEffects(EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED), EffectShaken())); SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 60.0); diff --git a/nwn/nwnprc/trunk/newspellbook/tob_dvsp_dvnsrg.nss b/nwn/nwnprc/trunk/newspellbook/tob_dvsp_dvnsrg.nss index fa7941ce..bc86f441 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_dvsp_dvnsrg.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_dvsp_dvnsrg.nss @@ -46,6 +46,6 @@ void main() { effect eNone = EffectVisualEffect(PSI_IMP_CONCUSSION_BLAST); object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator); - DelayCommand(0.0, PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d8(8), GetWeaponDamageType(oWeap), "Divine Surge Hit", "Divine Surge Miss")); + DelayCommand(0.0, PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d8(8), GetWeaponDamageType(oWeap), "Divine Surge Hit", "Divine Surge Miss")); } } \ No newline at end of file diff --git a/nwn/nwnprc/trunk/newspellbook/tob_dw_blstflrsh.nss b/nwn/nwnprc/trunk/newspellbook/tob_dw_blstflrsh.nss index fa11c61c..25693a42 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_dw_blstflrsh.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_dw_blstflrsh.nss @@ -41,6 +41,13 @@ void main() effect eExplode = EffectVisualEffect(VFX_FNF_FIREBALL); ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget); int nDC = 11 + GetAbilityModifier(ABILITY_WISDOM, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));; + if (nBladeMed) + { + nDC += 1; + } + //Get the first target in the radius around the caster object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(30.0), lTarget); while(GetIsObjectValid(oTarget)) diff --git a/nwn/nwnprc/trunk/newspellbook/tob_dw_dthmrk.nss b/nwn/nwnprc/trunk/newspellbook/tob_dw_dthmrk.nss index dd350ca8..5be701e9 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_dw_dthmrk.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_dw_dthmrk.nss @@ -66,6 +66,13 @@ void Deathmark(object oInitiator, object oTarget) float fDist = DoDeathmarkArea(oTarget); //FloatingTextStringOnCreature("Deathmark Area "+FloatToString(fDist), oInitiator); int nDC = 13 + GetAbilityModifier(ABILITY_WISDOM, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));; + if (nBladeMed) + { + nDC += 1; + } + effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S); //Get the first target in the radius around the caster diff --git a/nwn/nwnprc/trunk/newspellbook/tob_dw_frsnk.nss b/nwn/nwnprc/trunk/newspellbook/tob_dw_frsnk.nss index ca383482..0ac05370 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_dw_frsnk.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_dw_frsnk.nss @@ -51,6 +51,13 @@ void main() float fLength = FeetToMeters(60.0); vector vOrigin = GetPosition(oInitiator); int nDC = 14 + GetAbilityModifier(ABILITY_WISDOM, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));; + if (nBladeMed) + { + nDC += 1; + } + effect eVis = EffectVisualEffect(VFX_IMP_FLAME_M); // Loop over targets in the line shape oTarget = MyFirstObjectInShape(SHAPE_SPELLCYLINDER, fLength, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, vOrigin); diff --git a/nwn/nwnprc/trunk/newspellbook/tob_dw_htchflm.nss b/nwn/nwnprc/trunk/newspellbook/tob_dw_htchflm.nss index 9a9afdd1..b4e1c2a0 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_dw_htchflm.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_dw_htchflm.nss @@ -48,6 +48,13 @@ void main() { location lTarget = GetLocation(oInitiator); int nDC = 12 + GetAbilityModifier(ABILITY_WISDOM, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));; + if (nBladeMed) + { + nDC += 1; + } + effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S); //Get the first target in the radius around the caster oTarget = MyFirstObjectInShape(SHAPE_SPELLCONE, FeetToMeters(30.0), PRCGetSpellTargetLocation(), TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE); diff --git a/nwn/nwnprc/trunk/newspellbook/tob_dw_infrnblst.nss b/nwn/nwnprc/trunk/newspellbook/tob_dw_infrnblst.nss index bb29d3ae..f40e69ea 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_dw_infrnblst.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_dw_infrnblst.nss @@ -50,6 +50,13 @@ void main() { location lTarget = GetLocation(oInitiator); int nDC = 19 + GetAbilityModifier(ABILITY_WISDOM, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));; + if (nBladeMed) + { + nDC += 1; + } + effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S); //Get the first target in the radius around the caster oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(60.0), PRCGetSpellTargetLocation(), TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE); diff --git a/nwn/nwnprc/trunk/newspellbook/tob_dw_ringfire.nss b/nwn/nwnprc/trunk/newspellbook/tob_dw_ringfire.nss index c4776c50..0157288a 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_dw_ringfire.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_dw_ringfire.nss @@ -49,6 +49,13 @@ void main() { location lTarget = GetLocation(oInitiator); int nDC = 16 + GetAbilityModifier(ABILITY_WISDOM, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));; + if (nBladeMed) + { + nDC += 1; + } + effect eVis = EffectVisualEffect(VFX_IMP_FLAME_M); //Get the first target in the radius around the caster oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(30.0), PRCGetSpellTargetLocation(), TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE); diff --git a/nwn/nwnprc/trunk/newspellbook/tob_dw_wyrmflmt.nss b/nwn/nwnprc/trunk/newspellbook/tob_dw_wyrmflmt.nss index 239eeb10..bbf7c52b 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_dw_wyrmflmt.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_dw_wyrmflmt.nss @@ -49,6 +49,13 @@ void main() { location lTarget = GetLocation(oInitiator); int nDC = 18 + GetAbilityModifier(ABILITY_WISDOM, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));; + if (nBladeMed) + { + nDC += 1; + } + effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S); //Get the first target in the radius around the caster oTarget = MyFirstObjectInShape(SHAPE_SPELLCONE, FeetToMeters(30.0), PRCGetSpellTargetLocation(), TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE); diff --git a/nwn/nwnprc/trunk/newspellbook/tob_irnh_dazstr.nss b/nwn/nwnprc/trunk/newspellbook/tob_irnh_dazstr.nss index 95e5a9d4..5e3466b9 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_irnh_dazstr.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_irnh_dazstr.nss @@ -31,17 +31,24 @@ Str modifier) or be dazed for 1 round. void TOBAttack(object oTarget, object oInitiator) { - effect eNone; - PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Dazing Strike Hit", "Dazing Strike Miss"); - - if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) - { - // Saving Throw - if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (15 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator)))) - { - SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDazed(), oTarget, RoundsToSeconds(1)); - } - } + effect eNone; + PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Dazing Strike Hit", "Dazing Strike Miss"); + + if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) + { + int nDC = 15 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));; + if (nBladeMed) + { + nDC += 1; + } +` // Saving Throw + if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC)) + { + SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDazed(), oTarget, RoundsToSeconds(1)); + } + } } void main() diff --git a/nwn/nwnprc/trunk/newspellbook/tob_irnh_exostl.nss b/nwn/nwnprc/trunk/newspellbook/tob_irnh_exostl.nss index 957f72a6..2a92603f 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_irnh_exostl.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_irnh_exostl.nss @@ -39,6 +39,13 @@ void TOBAttack(object oTarget, object oInitiator) if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) { int nDC = 13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));; + if (nBladeMed) + { + nDC += 1; + } + int nDamage = 4; if (PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_NONE)) nDamage = 2; diff --git a/nwn/nwnprc/trunk/newspellbook/tob_irnh_lgtthr.nss b/nwn/nwnprc/trunk/newspellbook/tob_irnh_lgtthr.nss index 1fcc5e7b..0774f88a 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_irnh_lgtthr.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_irnh_lgtthr.nss @@ -50,7 +50,14 @@ void main() if(move.bCanManeuver) { object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator); - int nDC = d20(1) + GetAttackBonus(oTarget, oInitiator, oWeap); + int nDC = d20(1) + GetAttackBonus(oTarget, oInitiator, oWeap); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));; + if (nBladeMed) + { + nDC += 1; + } + SetLocalInt(oInitiator, "IHLightningThrow", TRUE); float fLength = FeetToMeters(30.0); location lTarget = PRCGetSpellTargetLocation(); diff --git a/nwn/nwnprc/trunk/newspellbook/tob_sdhd_bldlts.nss b/nwn/nwnprc/trunk/newspellbook/tob_sdhd_bldlts.nss index a8ad08ee..e036dc21 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_sdhd_bldlts.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_sdhd_bldlts.nss @@ -26,18 +26,25 @@ to 2 points, although the foe still takes full normal melee damage. void TOBAttack(object oTarget, object oInitiator) { - effect eNone; - - PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Bloodletting Strike Hit", "Bloodletting Strike Miss"); - - if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) - { - int nDam = 4; - - if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (15 + GetAbilityModifier(ABILITY_WISDOM, oInitiator)))) nDam = 2; - - ApplyAbilityDamage(oTarget, ABILITY_CONSTITUTION, nDam, DURATION_TYPE_TEMPORARY, TRUE, -1.0); - } + effect eNone; + + PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Bloodletting Strike Hit", "Bloodletting Strike Miss"); + + if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) + { + int nDam = 4; + + int nDC = 15 + GetAbilityModifier(ABILITY_WISDOM, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId())); + if (nBladeMed) + { + nDC += 1; + } + if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC)) nDam = 2; + + ApplyAbilityDamage(oTarget, ABILITY_CONSTITUTION, nDam, DURATION_TYPE_TEMPORARY, TRUE, -1.0); + } } void main() diff --git a/nwn/nwnprc/trunk/newspellbook/tob_sdhd_clngshd.nss b/nwn/nwnprc/trunk/newspellbook/tob_sdhd_clngshd.nss index 5b6a8b9a..fb82303f 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_sdhd_clngshd.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_sdhd_clngshd.nss @@ -38,8 +38,16 @@ void TOBAttack(object oTarget, object oInitiator) PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, nDamage, nDamageType, "Clinging Shadow Strike Hit", "Clinging Shadow Strike Miss"); if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) { - // Saving Throw - if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (11 + GetAbilityModifier(ABILITY_WISDOM, oInitiator)))) + int nDC = 11 + GetAbilityModifier(ABILITY_WISDOM, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId())); + if (nBladeMed) + { + nDC += 1; + } + + // Saving Throw + if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC)) { effect eLink = SupernaturalEffect(EffectVisualEffect(VFX_IMP_HEAD_EVIL)); SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget); diff --git a/nwn/nwnprc/trunk/newspellbook/tob_sdhd_drnvita.nss b/nwn/nwnprc/trunk/newspellbook/tob_sdhd_drnvita.nss index 8ac5da16..aeb68e1f 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_sdhd_drnvita.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_sdhd_drnvita.nss @@ -31,14 +31,22 @@ void TOBAttack(object oTarget, object oInitiator) { - effect eNone; + effect eNone; PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Drain Vitality Hit", "Drain Vitality Miss"); - - if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && PRCMySavingThrow(SAVING_THROW_FORT, oTarget, 12 + GetAbilityModifier(ABILITY_WISDOM, oInitiator),SAVING_THROW_TYPE_NONE)) - { - ApplyAbilityDamage(oTarget, ABILITY_CONSTITUTION, 2, DURATION_TYPE_TEMPORARY, TRUE, -1.0f); - SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE_RED), oTarget); - } + + int nDC = 12 + GetAbilityModifier(ABILITY_WISDOM, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId())); + if (nBladeMed) + { + nDC += 1; + } + + if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE)) + { + ApplyAbilityDamage(oTarget, ABILITY_CONSTITUTION, 2, DURATION_TYPE_TEMPORARY, TRUE, -1.0f); + SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE_RED), oTarget); + } } void main() diff --git a/nwn/nwnprc/trunk/newspellbook/tob_sdhd_dthdrk.nss b/nwn/nwnprc/trunk/newspellbook/tob_sdhd_dthdrk.nss index b7e5da59..cc07a54b 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_sdhd_dthdrk.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_sdhd_dthdrk.nss @@ -31,8 +31,15 @@ void TOBAttack(object oTarget, object oInitiator) if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) { int nDam = d6(15); - - if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (15 + GetAbilityModifier(ABILITY_WISDOM, oInitiator)))) nDam = d6(5); + + int nDC = 15 + GetAbilityModifier(ABILITY_WISDOM, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId())); + if (nBladeMed) + { + nDC += 1; + } + if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC)) nDam = d6(5); if(!GetIsImmune(oTarget, IMMUNITY_TYPE_CRITICAL_HIT)) { diff --git a/nwn/nwnprc/trunk/newspellbook/tob_sdhd_enshds.nss b/nwn/nwnprc/trunk/newspellbook/tob_sdhd_enshds.nss index 63b6c5d1..8b3aa43d 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_sdhd_enshds.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_sdhd_enshds.nss @@ -45,7 +45,15 @@ void TOBAttack(object oTarget, object oInitiator) if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) { - if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (18 + GetAbilityModifier(ABILITY_WISDOM, oInitiator)))) + int nDC = 18 + GetAbilityModifier(ABILITY_WISDOM, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId())); + if (nBladeMed) + { + nDC += 1; + } + + if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC)) { int nLevels = d4(); diff --git a/nwn/nwnprc/trunk/newspellbook/tob_sdhd_fscies.nss b/nwn/nwnprc/trunk/newspellbook/tob_sdhd_fscies.nss index 0da083a8..f4f88125 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_sdhd_fscies.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_sdhd_fscies.nss @@ -53,7 +53,15 @@ void TOBAttack(object oTarget, object oInitiator) if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && PRCGetIsAliveCreature(oTarget)) { // Saving Throw - int nSave = PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (19 + GetAbilityModifier(ABILITY_WISDOM, oInitiator))); + int nDC = 19 + GetAbilityModifier(ABILITY_WISDOM, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId())); + if (nBladeMed) + { + nDC += 1; + } + + int nSave = PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC); int nRoll = d20(1); int nDam; diff --git a/nwn/nwnprc/trunk/newspellbook/tob_sdhd_hnddth.nss b/nwn/nwnprc/trunk/newspellbook/tob_sdhd_hnddth.nss index acc83eca..47b66399 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_sdhd_hnddth.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_sdhd_hnddth.nss @@ -47,22 +47,28 @@ void main() int nTouchAttack = PRCDoMeleeTouchAttack(oTarget); if(nTouchAttack > 0) { - - // Saving Throw - if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (14 + GetAbilityModifier(ABILITY_WISDOM, oInitiator)))) - { - effect eParal = EffectParalyze(); - effect eVis = EffectVisualEffect(82); - effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); - effect eDur2 = EffectVisualEffect(VFX_DUR_PARALYZED); - effect eDur3 = EffectVisualEffect(VFX_DUR_PARALYZE_HOLD); + int nDC = 14 + GetAbilityModifier(ABILITY_WISDOM, oInitiator); + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId())); + if (nBladeMed) + { + nDC += 1; + } - effect eLink = EffectLinkEffects(eDur2, eDur); - eLink = EffectLinkEffects(eLink, eParal); - eLink = EffectLinkEffects(eLink, eVis); - eLink = EffectLinkEffects(eLink, eDur3); - SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(d3())); - } + // Saving Throw + if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC)) + { + effect eParal = EffectParalyze(); + effect eVis = EffectVisualEffect(82); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eDur2 = EffectVisualEffect(VFX_DUR_PARALYZED); + effect eDur3 = EffectVisualEffect(VFX_DUR_PARALYZE_HOLD); + + effect eLink = EffectLinkEffects(eDur2, eDur); + eLink = EffectLinkEffects(eLink, eParal); + eLink = EffectLinkEffects(eLink, eVis); + eLink = EffectLinkEffects(eLink, eDur3); + SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(d3())); + } } } } \ No newline at end of file diff --git a/nwn/nwnprc/trunk/newspellbook/tob_sdhd_obscvl.nss b/nwn/nwnprc/trunk/newspellbook/tob_sdhd_obscvl.nss index d31e60cb..3e101af5 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_sdhd_obscvl.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_sdhd_obscvl.nss @@ -40,14 +40,21 @@ void TOBAttack(object oTarget, object oInitiator) PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, nDamage, nDamageType, "Obscuring Shadow Veil Hit", "Obscuring Shadow Veil Miss"); if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) { + int nDC = 14 + GetAbilityModifier(ABILITY_WISDOM, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId())); + if (nBladeMed) + { + nDC += 1; + } // Saving Throw - if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (14 + GetAbilityModifier(ABILITY_WISDOM, oInitiator)))) + if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC)) { - effect eLink = SupernaturalEffect(EffectVisualEffect(VFX_IMP_HEAD_EVIL)); - SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget); - eLink = SupernaturalEffect(EffectMissChance(50)); - SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 6.0); - } + effect eLink = SupernaturalEffect(EffectVisualEffect(VFX_IMP_HEAD_EVIL)); + SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget); + eLink = SupernaturalEffect(EffectMissChance(50)); + SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 6.0); + } } } diff --git a/nwn/nwnprc/trunk/newspellbook/tob_sdhd_shdgrrt.nss b/nwn/nwnprc/trunk/newspellbook/tob_sdhd_shdgrrt.nss index 01ae53f6..58f9ae03 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_sdhd_shdgrrt.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_sdhd_shdgrrt.nss @@ -63,6 +63,13 @@ void main() //Apply the flat-footed effect int nDC = 13 + GetAbilityModifier(ABILITY_WISDOM, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId())); + if (nBladeMed) + { + nDC += 1; + } + if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE)) { AssignCommand(oTarget, ClearAllActions(TRUE)); diff --git a/nwn/nwnprc/trunk/newspellbook/tob_sdhd_shdnse.nss b/nwn/nwnprc/trunk/newspellbook/tob_sdhd_shdnse.nss index 97ec3cac..880d574a 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_sdhd_shdnse.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_sdhd_shdnse.nss @@ -61,7 +61,14 @@ void main() ApplyTouchAttackDamage(oInitiator, oTarget, iAttackRoll, d6(8), DAMAGE_TYPE_MAGICAL); //Apply the stun effect - int nDC = 16 + GetAbilityModifier(ABILITY_WISDOM, oInitiator); + int nDC = 16 + GetAbilityModifier(ABILITY_WISDOM, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId())); + if (nBladeMed) + { + nDC += 1; + } + if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE)) { SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectStunned(), oTarget, RoundsToSeconds(1)); diff --git a/nwn/nwnprc/trunk/newspellbook/tob_sdhd_strdrn.nss b/nwn/nwnprc/trunk/newspellbook/tob_sdhd_strdrn.nss index 49e3368d..7d1293ef 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_sdhd_strdrn.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_sdhd_strdrn.nss @@ -40,11 +40,18 @@ void TOBAttack(object oTarget, object oInitiator) if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) { int nDC = 13 + GetAbilityModifier(ABILITY_WISDOM, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId())); + if (nBladeMed) + { + nDC += 1; + } + int nDamage = 4; - if (PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE)) + if (PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE)) nDamage = 2; - ApplyAbilityDamage(oTarget, ABILITY_STRENGTH, nDamage, DURATION_TYPE_PERMANENT); - ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY), oTarget); + ApplyAbilityDamage(oTarget, ABILITY_STRENGTH, nDamage, DURATION_TYPE_PERMANENT); + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY), oTarget); } } diff --git a/nwn/nwnprc/trunk/newspellbook/tob_stdr_bncrsh.nss b/nwn/nwnprc/trunk/newspellbook/tob_stdr_bncrsh.nss index 8b7a5217..fa77dce3 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_stdr_bncrsh.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_stdr_bncrsh.nss @@ -34,8 +34,14 @@ void TOBAttack(object oTarget, object oInitiator) PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(4), GetWeaponDamageType(oWeap), "Bone Crusher Hit", "Bone Crusher Miss"); if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) { - // Saving Throw - if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator)))) + int nDC = 13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator); + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));; + if (nBladeMed) + { + nDC += 1; + } + // Saving Throw + if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC)) { effect eLink = SupernaturalEffect(EffectVisualEffect(VFX_IMP_HEAD_EVIL)); SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget); diff --git a/nwn/nwnprc/trunk/newspellbook/tob_stdr_colostk.nss b/nwn/nwnprc/trunk/newspellbook/tob_stdr_colostk.nss index 122fa2be..c0edb5ba 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_stdr_colostk.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_stdr_colostk.nss @@ -31,19 +31,26 @@ square. void TOBAttack(object oTarget, object oInitiator) { - effect eNone; - object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator); - PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(6), GetWeaponDamageType(oWeap), "Colossus Strike Hit", "Colossus Strike Miss"); - - if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) - { - int nDC = 17 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator); - if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE, oInitiator, 1.0)) - { - float fFeet = IntToFloat(5 * d4(1)); - _DoBullRushKnockBack(oTarget, oInitiator, fFeet); - } - } + effect eNone; + object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator); + PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(6), GetWeaponDamageType(oWeap), "Colossus Strike Hit", "Colossus Strike Miss"); + + if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) + { + int nDC = 17 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));; + if (nBladeMed) + { + nDC += 1; + } + + if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE, oInitiator, 1.0)) + { + float fFeet = IntToFloat(5 * d4(1)); + _DoBullRushKnockBack(oTarget, oInitiator, fFeet); + } + } } void main() diff --git a/nwn/nwnprc/trunk/newspellbook/tob_stdr_erthstq.nss b/nwn/nwnprc/trunk/newspellbook/tob_stdr_erthstq.nss index 0431283e..45453481 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_stdr_erthstq.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_stdr_erthstq.nss @@ -54,6 +54,12 @@ void main() location lLoc = GetLocation(oInitiator); int nDC = 18 + (GetAbilityModifier(ABILITY_STRENGTH, oInitiator)); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));; + if (nBladeMed) + { + nDC += 1; + } //Shaking ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SCREEN_SHAKE), lLoc); diff --git a/nwn/nwnprc/trunk/newspellbook/tob_stdr_irmtstr.nss b/nwn/nwnprc/trunk/newspellbook/tob_stdr_irmtstr.nss index 66b0ac1d..7d5ea15b 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_stdr_irmtstr.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_stdr_irmtstr.nss @@ -35,18 +35,23 @@ damage. void TOBAttack(object oTarget, object oInitiator) { - effect eNone; - PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(4), 0, "Iron Bones Hit", "Iron Bones Miss"); - - if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) - { - //Save - int nDC = 16 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator); - if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE, oInitiator, 1.0)) - { - SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDazed(), oTarget, RoundsToSeconds(1)); - } - } + effect eNone; + PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(4), 0, "Iron Bones Hit", "Iron Bones Miss"); + + if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) + { + //Save + int nDC = 16 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator); + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));; + if (nBladeMed) + { + nDC += 1; + } + if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE, oInitiator, 1.0)) + { + SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDazed(), oTarget, RoundsToSeconds(1)); + } + } } void main() diff --git a/nwn/nwnprc/trunk/newspellbook/tob_stdr_mtavaln.nss b/nwn/nwnprc/trunk/newspellbook/tob_stdr_mtavaln.nss index b6716653..4dde7667 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_stdr_mtavaln.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_stdr_mtavaln.nss @@ -34,25 +34,25 @@ times you move into or through its space. void main() { - if (!PreManeuverCastCode()) - { - // If code within the PreManeuverCastCode (i.e. UMD) reports FALSE, do not run this spell - return; - } - - // End of Spell Cast Hook - - object oInitiator = OBJECT_SELF; - object oTarget = PRCGetSpellTargetObject(); - struct maneuver move = EvaluateManeuver(oInitiator, oTarget); - - if(move.bCanManeuver) - { - //Twice the speed - SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectMovementSpeedIncrease(99), oInitiator, RoundsToSeconds(1)); - - SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAreaOfEffect(AOE_MOB_MOUNTAIN_AVALANCHE), oInitiator, 6.0); - } + if (!PreManeuverCastCode()) + { + // If code within the PreManeuverCastCode (i.e. UMD) reports FALSE, do not run this spell + return; + } + + // End of Spell Cast Hook + + object oInitiator = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + struct maneuver move = EvaluateManeuver(oInitiator, oTarget); + + if(move.bCanManeuver) + { + //Twice the speed + SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectMovementSpeedIncrease(99), oInitiator, RoundsToSeconds(1)); + + SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAreaOfEffect(AOE_MOB_MOUNTAIN_AVALANCHE), oInitiator, 6.0); + } } diff --git a/nwn/nwnprc/trunk/newspellbook/tob_stdr_ovrmnt.nss b/nwn/nwnprc/trunk/newspellbook/tob_stdr_ovrmnt.nss index 84796e9f..ead5176a 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_stdr_ovrmnt.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_stdr_ovrmnt.nss @@ -30,18 +30,27 @@ void TOBAttack(object oTarget, object oInitiator) { - effect eNone = EffectVisualEffect(PSI_IMP_CONCUSSION_BLAST); - object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator); + effect eNone = EffectVisualEffect(PSI_IMP_CONCUSSION_BLAST); + object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator); + PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(2), GetWeaponDamageType(oWeap), "Overwhelming Mountain Strike Hit", "Overwhelming Mountain Strike Miss"); + if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) - { - // Saving Throw - if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator)))) - { + { + int nDC = 13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));; + if (nBladeMed) + { + nDC += 1; + } + // Saving Throw + if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC)) + { effect eLink = ExtraordinaryEffect(EffectSlow()); SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 6.0); } - } + } } void main() diff --git a/nwn/nwnprc/trunk/newspellbook/tob_stdr_stnvise.nss b/nwn/nwnprc/trunk/newspellbook/tob_stdr_stnvise.nss index 15ea5cee..8bb45b3f 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_stdr_stnvise.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_stdr_stnvise.nss @@ -29,15 +29,22 @@ void TOBAttack(object oTarget, object oInitiator) { - effect eNone; - object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator); + effect eNone; + object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator); PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(1), GetWeaponDamageType(oWeap), "Stone Vise Hit", "Stone Vise Miss"); - - if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && PRCMySavingThrow(SAVING_THROW_FORT, oTarget, 12 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator),SAVING_THROW_TYPE_NONE)) - { - SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectCutsceneParalyze()), oTarget, 6.0); - SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DIMENSIONLOCK), oTarget); - } + + int nDC = 12 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));; + if (nBladeMed) + { + nDC += 1; + } + if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE)) + { + SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectCutsceneParalyze()), oTarget, 6.0); + SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DIMENSIONLOCK), oTarget); + } } void main() diff --git a/nwn/nwnprc/trunk/newspellbook/tob_stsn_brkshld.nss b/nwn/nwnprc/trunk/newspellbook/tob_stsn_brkshld.nss index 29053dae..35668b0c 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_stsn_brkshld.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_stsn_brkshld.nss @@ -37,8 +37,14 @@ void TOBAttack(object oTarget, object oInitiator) PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(4), 0, "Strike of the Broken Shield Hit", "Strike of the Broken Shield Miss"); if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) { - // Saving Throw - if (!PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, (14 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator)))) + int nDC = 14 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator); + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));; + if (nBladeMed) + { + nDC += 1; + } + // Saving Throw + if (!PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, nDC)) { AssignCommand(oTarget, ClearAllActions(TRUE)); } diff --git a/nwn/nwnprc/trunk/newspellbook/tob_stsn_cmtthr.nss b/nwn/nwnprc/trunk/newspellbook/tob_stsn_cmtthr.nss index f6030307..4146489a 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_stsn_cmtthr.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_stsn_cmtthr.nss @@ -77,7 +77,13 @@ void main() // Saving Throw for area target int nDamage = d6(4); // Adjust damage according to Reflex Save, Evasion or Improved Evasion - nDamage = PRCGetReflexAdjustedDamage(nDamage, oAreaTarget, (13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator)), SAVING_THROW_TYPE_NONE); + int nDC = 13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator); + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));; + if (nBladeMed) + { + nDC += 1; + } + nDamage = PRCGetReflexAdjustedDamage(nDamage, oAreaTarget, nDC, SAVING_THROW_TYPE_NONE); if(nDamage > 0) { diff --git a/nwn/nwnprc/trunk/newspellbook/tob_stsn_vlcpstn.nss b/nwn/nwnprc/trunk/newspellbook/tob_stsn_vlcpstn.nss index 46a59376..5d2d38cf 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_stsn_vlcpstn.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_stsn_vlcpstn.nss @@ -31,14 +31,22 @@ void TOBAttack(object oTarget, object oInitiator) { - effect eNone; + effect eNone; + PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Clever Positioning Hit", "Clever Positioning Miss"); - - if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, 12 + GetAbilityModifier(ABILITY_DEXTERITY, oInitiator),SAVING_THROW_TYPE_NONE)) - { - DoTransposition(TRUE, FALSE); - SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_WIND), oTarget); - } + int nDC = 12 + GetAbilityModifier(ABILITY_DEXTERITY, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId())); + if (nBladeMed) + { + nDC += 1; + } + + if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, nDC, SAVING_THROW_TYPE_NONE)) + { + DoTransposition(TRUE, FALSE); + SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_WIND), oTarget); + } } void main() diff --git a/nwn/nwnprc/trunk/newspellbook/tob_tgcw_dncmon.nss b/nwn/nwnprc/trunk/newspellbook/tob_tgcw_dncmon.nss index c82f5580..0da293a8 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_tgcw_dncmon.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_tgcw_dncmon.nss @@ -50,11 +50,11 @@ void main() if (IPGetIsMeleeWeapon(oItem)) { // Perform first bonus attack, overriding weapon just to make sure - DelayCommand(0.0, PerformAttack(oTarget, oInitiator, eNone, 0.0, nBonus, 0, 0, "Raging Mongoose Hit", "Raging Mongoose Miss", FALSE, oItem)); + DelayCommand(0.0, PerformAttack(oTarget, oInitiator, eNone, 0.0, nBonus, 0, 0, "Dancing Mongoose Hit", "Dancing Mongoose Miss", FALSE, oItem)); if (IPGetIsMeleeWeapon(oItem2)) { // Perform second bonus attack, overriding weapon just to make sure - DelayCommand(0.0, PerformAttack(oTarget, oInitiator, eNone, 0.0, nBonus, 0, 0, "Raging Mongoose Hit", "Raging Mongoose Miss", FALSE, oItem2)); + DelayCommand(0.0, PerformAttack(oTarget, oInitiator, eNone, 0.0, nBonus, 0, 0, "Dancing Mongoose Hit", "Dancing Mongoose Miss", FALSE, oItem2)); } } else diff --git a/nwn/nwnprc/trunk/newspellbook/tob_tgcw_ferdbl.nss b/nwn/nwnprc/trunk/newspellbook/tob_tgcw_ferdbl.nss index 877adabd..d3b25db0 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_tgcw_ferdbl.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_tgcw_ferdbl.nss @@ -47,6 +47,13 @@ void TOBAttack(object oTarget, object oInitiator) { //Save int nDC = 19 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));; + if (nBladeMed) + { + nDC += 1; + } + if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_DEATH) && !GetIsImmune(oTarget, IMMUNITY_TYPE_CRITICAL_HIT)) { DeathlessFrenzyCheck(oTarget); diff --git a/nwn/nwnprc/trunk/newspellbook/tob_tgcw_flshrip.nss b/nwn/nwnprc/trunk/newspellbook/tob_tgcw_flshrip.nss index 3b89b619..2cf8b8c9 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_tgcw_flshrip.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_tgcw_flshrip.nss @@ -31,11 +31,20 @@ void TOBAttack(object oTarget, object oInitiator) { effect eNone = EffectVisualEffect(PSI_IMP_CONCUSSION_BLAST); int nBonus = TOBSituationalAttackBonuses(oInitiator, DISCIPLINE_TIGER_CLAW); - PerformAttack(oTarget, oInitiator, eNone, 0.0, nBonus, 0, 0, "Flesh Ripper Hit", "Flesh Ripper Miss"); - if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && !GetIsImmune(oTarget, IMMUNITY_TYPE_CRITICAL_HIT)) + int nDC = 13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));; + if (nBladeMed) + { + nDC += 1; + } + + PerformAttack(oTarget, oInitiator, eNone, 0.0, nBonus, 0, 0, "Flesh Ripper Hit", "Flesh Ripper Miss"); + + if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && !GetIsImmune(oTarget, IMMUNITY_TYPE_CRITICAL_HIT)) { // Saving Throw - if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator)))) + if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC)) { effect eLink = EffectLinkEffects(EffectAttackDecrease(4), EffectACDecrease(4)); eLink = ExtraordinaryEffect(eLink); diff --git a/nwn/nwnprc/trunk/newspellbook/tob_tgcw_ftnbld.nss b/nwn/nwnprc/trunk/newspellbook/tob_tgcw_ftnbld.nss index 35cbe019..7969853b 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_tgcw_ftnbld.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_tgcw_ftnbld.nss @@ -58,8 +58,16 @@ void main() { if(GetIsEnemy(oTarget, oInitiator)) { - // Saving Throw - if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, (14 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator)))) + // Saving Throw + int nDC = 14 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));; + if (nBladeMed) + { + nDC += 1; + } + + if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC)) { effect eLink = ExtraordinaryEffect(EffectLinkEffects(EffectShaken(), EffectVisualEffect(VFX_IMP_DOOM))); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 60.0); diff --git a/nwn/nwnprc/trunk/newspellbook/tob_tgcw_hamstr.nss b/nwn/nwnprc/trunk/newspellbook/tob_tgcw_hamstr.nss index ed1ff013..9fce353f 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_tgcw_hamstr.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_tgcw_hamstr.nss @@ -27,25 +27,32 @@ Dexterity damage and the speed penalty. void TOBAttack(object oTarget, object oInitiator) { - effect eNone; - int nBonus = TOBSituationalAttackBonuses(oInitiator, DISCIPLINE_TIGER_CLAW); - PerformAttack(oTarget, oInitiator, eNone, 0.0, nBonus, 0, 0, "Hamstring Attack Hit", "Hamstring Attack Miss"); - - if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) - { - int nDexDam = d8(1); - effect eSlow = EffectMovementSpeedDecrease(33); - - //Save - if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (17 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator)), SAVING_THROW_TYPE_NONE)) - { - nDexDam = nDexDam/2; - eSlow = EffectMovementSpeedDecrease(17); - } - - ApplyAbilityDamage(oTarget, ABILITY_DEXTERITY, nDexDam, DURATION_TYPE_PERMANENT); - SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSlow, oTarget, TurnsToSeconds(1)); - } + effect eNone; + int nDC = 17 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator); + + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));; + if (nBladeMed) + { + nDC += 1; + } + int nBonus = TOBSituationalAttackBonuses(oInitiator, DISCIPLINE_TIGER_CLAW); + PerformAttack(oTarget, oInitiator, eNone, 0.0, nBonus, 0, 0, "Hamstring Attack Hit", "Hamstring Attack Miss"); + + if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) + { + int nDexDam = d8(1); + effect eSlow = EffectMovementSpeedDecrease(33); + + //Save + if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE)) + { + nDexDam = nDexDam/2; + eSlow = EffectMovementSpeedDecrease(17); + } + + ApplyAbilityDamage(oTarget, ABILITY_DEXTERITY, nDexDam, DURATION_TYPE_PERMANENT); + SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSlow, oTarget, TurnsToSeconds(1)); + } } void main() diff --git a/nwn/nwnprc/trunk/newspellbook/tob_tgcw_swpdrg.nss b/nwn/nwnprc/trunk/newspellbook/tob_tgcw_swpdrg.nss index e4115916..886a53f1 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_tgcw_swpdrg.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_tgcw_swpdrg.nss @@ -43,6 +43,12 @@ void TOBAttack(object oTarget, object oInitiator, int iJumpRoll) effect eNone; int nAB = GetAbilityModifier(ABILITY_DEXTERITY, oTarget); int nBonus = TOBSituationalAttackBonuses(oInitiator, DISCIPLINE_TIGER_CLAW); + int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId())); + if (nBladeMed) + { + iJumpRoll += 1; + } + DelayCommand(0.0, PerformAttack(oTarget, oInitiator, eNone, 0.0, nAB + nBonus, d6(10), GetWeaponDamageType(oWeap), "Swooping Dragon Strike Hit", "Swooping Dragon Strike Miss")); if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) diff --git a/nwn/nwnprc/trunk/newspellbook/tob_wtrn_swarmt.nss b/nwn/nwnprc/trunk/newspellbook/tob_wtrn_swarmt.nss index 5bedac08..22b87b7f 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_wtrn_swarmt.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_wtrn_swarmt.nss @@ -10,7 +10,7 @@ Swarm Tactics - Devoted Spirit (Stance) + White Raven (Stance) Level: Crusader 5, Warblade 5 Prerequisite: One White Raven maneuver Initiation Action: 1 Swift Action diff --git a/nwn/nwnprc/trunk/newspellbook/tob_wtrn_swarmta.nss b/nwn/nwnprc/trunk/newspellbook/tob_wtrn_swarmta.nss index 77328ccd..88d33e23 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_wtrn_swarmta.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_wtrn_swarmta.nss @@ -10,7 +10,7 @@ Swarm Tactics - Devoted Spirit (Stance) + White Raven (Stance) Level: Crusader 5, Warblade 5 Prerequisite: One White Raven maneuver Initiation Action: 1 Swift Action diff --git a/nwn/nwnprc/trunk/newspellbook/tob_wtrn_whtrvnt.nss b/nwn/nwnprc/trunk/newspellbook/tob_wtrn_whtrvnt.nss index 2df6e0cb..3607dfe6 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_wtrn_whtrvnt.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_wtrn_whtrvnt.nss @@ -10,7 +10,7 @@ White Raven Tactics - Iron Heart (Boost) + White Raven (Boost) Level: Crusader 3, Warblade 3 Initiation Action: 1 Swift Action Range: 10 ft. diff --git a/nwn/nwnprc/trunk/race2das/racialtypes.2da b/nwn/nwnprc/trunk/race2das/racialtypes.2da index 9d2c2448..2ab45d73 100644 --- a/nwn/nwnprc/trunk/race2das/racialtypes.2da +++ b/nwn/nwnprc/trunk/race2das/racialtypes.2da @@ -75,7 +75,7 @@ 71 Hadrimoi Ha 16790329 16790329 16790330 16790331 16790332 **** 1 2 8 2 0 2 4 30 8 RACE_FEAT_HADRIM 8163 1 RACIAL_TYPE_HADRIMOI 15 8 1 ushemoi **** **** **** 4 30 3 1 INT 274 72 RedspawnArcaniss Ra 16790334 16790334 16790335 16790336 16790337 **** 353 0 2 0 6 0 4 40 9 RACE_FEAT_REDARC 8163 1 RACIAL_TYPE_REDSPAWN_ARCANISS 15 9 1 redspawn **** **** **** 4 30 3 1 INT 274 73 Gloura Gl 16790346 16790346 16790347 16790348 16790349 **** 6 0 10 0 6 2 4 30 1 RACE_FEAT_GLOURA 8163 1 RACIAL_TYPE_GLOURA 15 1 1 gloura **** **** **** 4 30 3 1 INT 278 -74 Muckdweller Mr 16836018 16836018 16836019 16836020 16836021 **** 206 -2 6 0 -2 -2 0 20 8 RACE_FEAT_MUCKD 8163 1 RACIAL_TYPE_MUCKDWELLER 15 8 1 muckdweller **** **** **** 4 30 3 1 INT 276 +74 Muckdweller Mr 16836018 16836018 16836019 16836020 16836021 **** 206 -6 6 0 -2 -2 0 20 8 RACE_FEAT_MUCKD 8163 1 RACIAL_TYPE_MUCKDWELLER 15 8 1 muckdweller **** **** **** 4 30 3 1 INT 276 75 Aranea Ae 16836006 16836006 16836007 16836008 16836009 **** 158 0 4 4 4 2 4 50 9 RACE_FEAT_ARANEA 8163 1 RACIAL_TYPE_ARANEA 15 9 1 aranea **** **** **** 4 30 3 1 INT 284 76 Chitine Ch 16832294 16832294 16832295 16832296 16832297 **** 2 **** 2 2 -4 **** 2 30 8 RACE_FEAT_CHIT 16832294 1 RACIAL_TYPE_CHITINE 15 8 1 chitine **** **** **** 4 30 3 1 INT 274 77 SpiretopDragon Sd 16835965 16835966 16835967 16835968 16835969 **** 375 -4 8 -4 -2 0 2 60 8 RACE_FEAT_SPDRAG 16835970 1 RACIAL_TYPE_SPIRETOPDRAGON 25 8 1 dragon **** **** **** 4 30 3 1 INT 272 diff --git a/nwn/nwnprc/trunk/scripts/ft_sanctmartial.nss b/nwn/nwnprc/trunk/scripts/ft_sanctmartial.nss index b5817770..5810e7db 100644 --- a/nwn/nwnprc/trunk/scripts/ft_sanctmartial.nss +++ b/nwn/nwnprc/trunk/scripts/ft_sanctmartial.nss @@ -400,7 +400,6 @@ void main() Pwatk(oPC); - object oSkin = GetPCSkin(oPC); if (GetAlignmentGoodEvil(oPC)!= ALIGNMENT_GOOD) diff --git a/nwn/nwnprc/trunk/scripts/prc_chosen_evil.nss b/nwn/nwnprc/trunk/scripts/prc_chosen_evil.nss index b3527a4d..e79aae6a 100644 --- a/nwn/nwnprc/trunk/scripts/prc_chosen_evil.nss +++ b/nwn/nwnprc/trunk/scripts/prc_chosen_evil.nss @@ -96,7 +96,23 @@ int GetVileFeats(object oPC) + GetHasFeat(FEAT_VILE_MARTIAL_DART, oPC) + GetHasFeat(FEAT_VILE_MARTIAL_SICKLE, oPC) + GetHasFeat(FEAT_VILE_MARTIAL_DWAXE, oPC) - + GetHasFeat(FEAT_VILE_MARTIAL_MINDBLADE, oPC) + + GetHasFeat(FEAT_VILE_MARTIAL_MINDBLADE, oPC) + + GetHasFeat(FEAT_VILE_MARTIAL_EAGLE_CLAW) + + GetHasFeat(FEAT_VILE_MARTIAL_LIGHT_LANCE) + + GetHasFeat(FEAT_VILE_MARTIAL_HEAVY_PICK) + + GetHasFeat(FEAT_VILE_MARTIAL_LIGHT_PICK) + + GetHasFeat(FEAT_VILE_MARTIAL_SAI) + + GetHasFeat(FEAT_VILE_MARTIAL_NUNCHAKU) + + GetHasFeat(FEAT_VILE_MARTIAL_FALCHION) + + GetHasFeat(FEAT_VILE_MARTIAL_SAP) + + GetHasFeat(FEAT_VILE_MARTIAL_KATAR) + + GetHasFeat(FEAT_VILE_MARTIAL_HEAVY_MACE) + + GetHasFeat(FEAT_VILE_MARTIAL_MAUL) + + GetHasFeat(FEAT_VILE_MARTIAL_DBL_SCIMITAR) + + GetHasFeat(FEAT_VILE_MARTIAL_GOAD) + + GetHasFeat(FEAT_VILE_MARTIAL_ELVEN_LIGHTBLADE) + + GetHasFeat(FEAT_VILE_MARTIAL_ELVEN_THINBLADE) + + GetHasFeat(FEAT_VILE_MARTIAL_ELVEN_COURTBLADE) + GetHasFeat(FEAT_APOSTATE, oPC) + GetHasFeat(FEAT_DARK_WHISPERS, oPC) + GetHasFeat(FEAT_MASTERS_WILL, oPC) diff --git a/nwn/nwnprc/trunk/scripts/prc_grapple.nss b/nwn/nwnprc/trunk/scripts/prc_grapple.nss index eb541de1..a9cadf20 100644 --- a/nwn/nwnprc/trunk/scripts/prc_grapple.nss +++ b/nwn/nwnprc/trunk/scripts/prc_grapple.nss @@ -115,6 +115,7 @@ void main() { // And now we can grab them DoGrapple(oPC, oTarget, 0); + GZPRCRemoveSpellEffects(SPELL_INVISIBILITY, oPC); } } } diff --git a/nwn/nwnprc/trunk/scripts/prc_nui_pwrattk.nss b/nwn/nwnprc/trunk/scripts/prc_nui_pwrattk.nss index 8827ea79..60472592 100644 --- a/nwn/nwnprc/trunk/scripts/prc_nui_pwrattk.nss +++ b/nwn/nwnprc/trunk/scripts/prc_nui_pwrattk.nss @@ -1,16 +1,260 @@ -//:: prc_nui_pwrattk -//:: -//:: +//:://///////////////////////////////////////////// +//:: Power Attack script +//:: ft_poweratk +//:://///////////////////////////////////////////// +/* + This script handles the PRC power attack feats. + For PA, I was thinking 3 radials + One for the presets + One for +0, +1, +2, +3, +4 + One for +0, +5, +10, +15, +20 + And a bunch of switches to control it: + PRC_POWER_ATTACK - 3 values: + -1 -- Disabled. Never apply the PRC PA feats to hide + 0 -- Default. As it is now, you can't go higher than the equivalent BW feat you have + 1 -- Full PnP. Ignores the BW IPA + PRC_POWER_ATTACK_STACK_WITH_BW + 0 - Default. Allow people to use both at the same time + 1 - Add the BW effects in when limiting to BAB +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +#include "prc_inc_combat" +#include "inc_addragebonus" +//#include "prc_inc_sneak" //for Dragonfire damage type resolving + +/* +const int SINGLE_START = 2171; +const int SINGLE_LAST = 2175; +const int FIVES_START = 2177; +const int FIVES_LAST = 2181; +*/ + +// Converts the given amount of bonus damage to equivalent DAMAGE_BONUS constant +// Due to the bonus cap, bonuses are cropped to +20 +int BonusAtk(int nDmg) +{ + switch (nDmg) + { + case 1: return DAMAGE_BONUS_1; + case 2: return DAMAGE_BONUS_2; + case 3: return DAMAGE_BONUS_3; + case 4: return DAMAGE_BONUS_4; + case 5: return DAMAGE_BONUS_5; + case 6: return DAMAGE_BONUS_6; + case 7: return DAMAGE_BONUS_7; + case 8: return DAMAGE_BONUS_8; + case 9: return DAMAGE_BONUS_9; + case 10: return DAMAGE_BONUS_10; + case 11: return DAMAGE_BONUS_11; + case 12: return DAMAGE_BONUS_12; + case 13: return DAMAGE_BONUS_13; + case 14: return DAMAGE_BONUS_14; + case 15: return DAMAGE_BONUS_15; + case 16: return DAMAGE_BONUS_16; + case 17: return DAMAGE_BONUS_17; + case 18: return DAMAGE_BONUS_18; + case 19: return DAMAGE_BONUS_19; + case 20: return DAMAGE_BONUS_20; + case 21: return DAMAGE_BONUS_21; + case 22: return DAMAGE_BONUS_22; + case 23: return DAMAGE_BONUS_23; + case 24: return DAMAGE_BONUS_24; + case 25: return DAMAGE_BONUS_25; + case 26: return DAMAGE_BONUS_26; + case 27: return DAMAGE_BONUS_27; + case 28: return DAMAGE_BONUS_28; + case 29: return DAMAGE_BONUS_29; + case 30: return DAMAGE_BONUS_30; + case 31: return DAMAGE_BONUS_31; + case 32: return DAMAGE_BONUS_32; + case 33: return DAMAGE_BONUS_33; + case 34: return DAMAGE_BONUS_34; + case 35: return DAMAGE_BONUS_35; + case 36: return DAMAGE_BONUS_36; + case 37: return DAMAGE_BONUS_37; + case 38: return DAMAGE_BONUS_38; + case 39: return DAMAGE_BONUS_39; + case 40: return DAMAGE_BONUS_40; + case 41: return DAMAGE_BONUS_41; + case 42: return DAMAGE_BONUS_42; + case 43: return DAMAGE_BONUS_43; + case 44: return DAMAGE_BONUS_44; + case 45: return DAMAGE_BONUS_45; + case 46: return DAMAGE_BONUS_46; + case 47: return DAMAGE_BONUS_47; + case 48: return DAMAGE_BONUS_48; + case 49: return DAMAGE_BONUS_49; + case 50: return DAMAGE_BONUS_50; + } + if(nDmg > 50) return DAMAGE_BONUS_50; + + return -1; // Invalid value received +} + +/* +int CalculatePower(object oUser) +{ + int nPower = GetLocalInt(oUser, "PRC_PowerAttack_Level"); + int nSID = GetSpellID(); + + // Changing the value of +0,+1,+2,+3,+4 radial + if(nSID >= SINGLE_START && <= SINGLE_LAST) + { + // Extract the old fives value + nPower = (nPower / 5) * 5; + // Add in the new single value + nPower += nSID - SINGLE_START; + } + // Changing the value of +0,+5,+10,+15,+20 radial + else if(nSID >= FIVES_START && <= FIVES_LAST) + { + // Extract the old single value + nPower = nPower % 5; + // Add in the new fives value + nPower += (nSID - FIVES_START) * 5; + } + // Unknown SpellId + else + { + WriteTimestampedLogEntry("ft_poweratk called with unknown SpellID: " + IntToString(nSID)); + nPower = 0; + } + + // Cache the new PA level + SetLocalInt(oUser, "PRC_PowerAttack_Level", nPower); + + return nPower; +} +*/ void main() { - - int nSpellID = PRCGetSpellId(); - - - - - - - -} \ No newline at end of file + object oUser = OBJECT_SELF; + int nPower = GetLocalInt(oUser, "PRC_PowerAttack_Level"); + + // The PRC Power Attack must be active for this to do anything + if(GetPRCSwitch(PRC_POWER_ATTACK) == PRC_POWER_ATTACK_DISABLED) + return; + + // Get the old Power Attack, if any + int nOld = GetLocalInt(oUser, "PRC_PowerAttackSpellID"); + + // Remove effects from it + if(nOld) + { + PRCRemoveSpellEffects(nOld, oUser, oUser); + DeleteLocalInt(oUser, "PRC_PowerAttackSpellID"); + DeleteLocalInt(oUser, "PRC_PowerAttack_DamageBonus"); + } + + // Activate Power Attack if the new value is non-zero + if(nPower) + { + // Requires the appropriate BW PA feat. + if(!GetHasFeat(FEAT_POWER_ATTACK)) + { + FloatingTextStrRefOnCreature(16823148, oUser, FALSE); //Prereq: Power Attack feat + return; + } + if(nPower > 5 && // If the power attack is in BW IPA range + !GetHasFeat(FEAT_IMPROVED_POWER_ATTACK) && // And they don't have IPA + GetPRCSwitch(PRC_POWER_ATTACK) != PRC_POWER_ATTACK_FULL_PNP) // And full PnP PA, which ignores BW IPA isn't active + { + FloatingTextStrRefOnCreature(16823149, oUser, FALSE); // Prereq: Improved Power Attack feat + return; + } + + // This script is for the melee weapon PA. If Power Shot is implemented using the same script + // at some future date, change this. + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oUser); + int nBase = GetBaseItemType(oWeapon); + int nThrow = FALSE; + if (GetIsThrowingWeaponType(nBase) && GetHasFeat(FEAT_POWER_THROW, oUser)) nThrow = TRUE; // Power throw allows power attacking with throwing weapons + if(GetWeaponRanged(oWeapon) && !nThrow) + { + FloatingTextStrRefOnCreature(16823150, oUser, FALSE); // You may not use this feat with a ranged weapon. + return; + } + + // All checks are done, initialize variables for calculating the effect. + int nDamageBonusType = GetDamageTypeOfWeapon(INVENTORY_SLOT_RIGHTHAND, oUser); + if(GetLocalInt(oUser, "DragonFireAssOn")) nDamageBonusType = GetDragonfireDamageType(oUser); + int nDmg, nHit, nDex, nTemp; + effect eDamage; + effect eToHit; + + // Initialize the calculation with the power attack value given by the user. + nHit = nPower; + + // Check if we are set to care about BW power attack being active + if(GetPRCSwitch(PRC_POWER_ATTACK_STACK_WITH_BW)) + { + nTemp += GetActionMode(oUser, ACTION_MODE_POWER_ATTACK) ? 5 : 0; + nTemp += GetActionMode(oUser, ACTION_MODE_IMPROVED_POWER_ATTACK) ? 10 : 0; + } + // The attack bonus paid to PA is limited to one's BAB + if(GetBaseAttackBonus(oUser) < (nHit + nTemp)) + { + nHit = GetBaseAttackBonus(oUser) - ((GetActionMode(oUser, ACTION_MODE_POWER_ATTACK) ? 5 : 0) + + (GetActionMode(oUser, ACTION_MODE_IMPROVED_POWER_ATTACK ? 10 : 0))); + if(nHit < 0) nHit = 0; + + FloatingTextStrRefOnCreature(16823151, oUser, FALSE); // Your base attack bonus isn't high enough to pay for chosen Power Attack level. + } + + // Focused Strike adds Dex mod to damage, limited to number of AB paid. + if(GetHasFeat(FEAT_FOCUSED_STRIKE)) + { + // Negative Dex mod won't reduce damage + nDex = GetAbilityModifier(ABILITY_DEXTERITY) > 0 ? GetAbilityModifier(ABILITY_DEXTERITY) : 0; + if(nDex > nHit) nDex = nHit; + } + + // Calculate in Frenzied Berserker PA feats + nTemp = GetHasFeat(FEAT_SUPREME_POWER_ATTACK, oUser) ? nHit * 2 : + GetHasFeat(FEAT_FREBZK_IMPROVED_POWER_ATTACK, oUser) ? FloatToInt(1.5 * nHit) : + nHit; + + // Calculate the damage. Supreme Power Attack doubles the damage + nDmg = BonusAtk(nTemp + nDex + GetEssentiaInvestedFeat(oUser, FEAT_COBALT_POWER)); + + eDamage = EffectDamageIncrease(nDmg, nDamageBonusType); + eToHit = EffectAttackDecrease(nHit); + + effect eLink = ExtraordinaryEffect(EffectLinkEffects(eDamage, eToHit)); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oUser); + + // Cache the spellid of the power attack used. Also acts as a marker + //SetLocalInt(oUser, "PRC_PowerAttackSpellID", PRCGetSpellId()); + SetLocalInt(oUser, "PRC_PowerAttackSpellID", SPELL_NUI_POWER_ATTACK); + // Cache the amount of damage granted. This is used by the PRC combat engine + SetLocalInt(oUser, "PRC_PowerAttack_DamageBonus", nDmg); + // Add an eventscript that makes sure the PC does not use a ranged weapon with Power Attack + AddEventScript(oUser, EVENT_ONPLAYEREQUIPITEM, "prc_powatk_equ", TRUE, FALSE); + + // Power Attack Activated + string sMes = "*" + GetStringByStrRef(417) + " " + IntToString(nHit) + " " + GetStringByStrRef(63798) + "*"; + FloatingTextStringOnCreature(sMes, oUser, FALSE); + + if (GetHasFeat(FEAT_FAVORED_POWER_ATTACK, oUser)) + { + ActionCastSpellAtObject(SPELL_UR_FAVORITE_ENEMY, oUser, METAMAGIC_ANY, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE); + } + } + // Turn Power Attack off + else + { + RemoveEventScript(oUser, EVENT_ONPLAYEREQUIPITEM, "prc_powatk_equ", TRUE); + + // Power Attack Mode Deactivated + string sMes = "* " + GetStringByStrRef(58282) + " *"; + FloatingTextStringOnCreature(sMes, oUser, FALSE); + + if(GetHasFeat(FEAT_FAVORED_POWER_ATTACK, oUser)) + { + ActionCastSpellAtObject(SPELL_UR_FAVORITE_ENEMY, oUser, METAMAGIC_ANY, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE); + } + } +} diff --git a/nwn/nwnprc/trunk/scripts/prc_onplayerchat.nss b/nwn/nwnprc/trunk/scripts/prc_onplayerchat.nss index 5930830f..9b7680f5 100644 --- a/nwn/nwnprc/trunk/scripts/prc_onplayerchat.nss +++ b/nwn/nwnprc/trunk/scripts/prc_onplayerchat.nss @@ -87,7 +87,8 @@ void main() ExecuteScript(GetLocalString(oPC, PRC_CHAT_HOOK_SCRIPT), oPC); _clear_chat_vars(oPC); } - + + ExecuteScript("hp_pa_chatscript", oPC); // Execute scripts hooked to this event for the player triggering it ExecuteAllScriptsHookedToEvent(oPC, EVENT_ONPLAYERCHAT); } \ No newline at end of file diff --git a/nwn/nwnprc/trunk/spells/sp_starmantle.nss b/nwn/nwnprc/trunk/spells/sp_starmantle.nss index 134e1fff..93309d0f 100644 --- a/nwn/nwnprc/trunk/spells/sp_starmantle.nss +++ b/nwn/nwnprc/trunk/spells/sp_starmantle.nss @@ -67,6 +67,13 @@ void main() return; } + //can't stack Starmantels + if (GetHasSpellEffect(SPELL_STARMANTLE, oPC)) + { + PRCRemoveSpellEffects(SPELL_STARMANTLE, OBJECT_SELF, OBJECT_SELF); + RemoveEventScript(oTarget, EVENT_ONHIT, "prc_evnt_strmtl", TRUE, FALSE); + } + //VFX SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_SANCTUARY), oTarget, fDur); diff --git a/nwn/nwnprc/trunk/spells/x2_pc_umdcheck.nss b/nwn/nwnprc/trunk/spells/x2_pc_umdcheck.nss index bb8e8a2f..5abf2f51 100644 --- a/nwn/nwnprc/trunk/spells/x2_pc_umdcheck.nss +++ b/nwn/nwnprc/trunk/spells/x2_pc_umdcheck.nss @@ -100,8 +100,9 @@ int X2_UMD() // ------------------------------------------------------------------------- if(!GetHasSkill(SKILL_USE_MAGIC_DEVICE, oCaster) && !GetLevelByClass(CLASS_TYPE_ROGUE, oCaster) - && !GetLevelByClass(CLASS_TYPE_ASSASSIN, oCaster) - && !GetLevelByClass(CLASS_TYPE_SHADOWDANCER, oCaster)) + && !GetLevelByClass(CLASS_TYPE_SHADOW_THIEF_AMN, oCaster) + && !GetLevelByClass(CLASS_TYPE_FACTOTUM, oCaster) + && !GetLevelByClass(CLASS_TYPE_ASSASSIN, oCaster)) { // --------------------------------------------------------------------- //SpeakString("I have no UMD, thus I can cast the spell... "); diff --git a/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk b/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk index b9b80352..4a1fede7 100644 Binary files a/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk and b/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk differ diff --git a/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml b/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml index 5ef4c71e..bf7d40ae 100644 --- a/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml +++ b/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml @@ -51087,7 +51087,8 @@ Aranea Ability Adjustments: +4 Dex, +4 Con, +4 Int, +2 Wis, +4 Cha Favored Class (Sorcerer): A multiclass aranea's sorcerer class does not count when determining whether they suffer an XP penalty for multiclassing. Racial Traits: -- A aranea's base land speed is 50 feet in spider form, 30 in hybrid or humanoid forms. +- An aranea's base land speed is 50 feet in spider form, 30 in hybrid or humanoid forms. +- Racial Hit Dice: An aranea begins with three levels of shapechanger, which provide 3d8 Hit Dice. - Medium: As Medium creatures, aranea have no special bonuses or penalties due to their size. - Natural Weapons: An aranea can bite 1d6 points of damage in spider & hybrid form. - Poison: An aranea's bite is poisonous & does 1d6 STR initial damage & 2d6 secondary damage. @@ -73833,7 +73834,6 @@ Bonus Feats: The epic Umbral Disciple gains a bonus feat every three levels Special: Sneak Attack: The epic Umbral Disciple's sneak attack continues to increase by 1d6 every 3 levels. -Meldshaping: Increases as if gaining a level in your meldshaper class at each level. Epic Umbral Disciple Bonus Feat List: Armor Skin, Blinding Speed, Bonus Soulmeld, Epic Dodge, Epic Energy Resistance, Epic Essentia, Epic Prowess, Epic Reflexes, Epic Reputation, Epic Self-Concealment, Epic Skill Focus, Epic Superior Initiative, Epic Weapon Focus, Extra Chakra Bind, Great Dexterity, Improved Sneak Attack, Lingering Damage, Open Heart Chakra, Open Soul Chakra, Rapid Meldshaping, Rebind Soulmeld. diff --git a/nwn/nwnprc/trunk/users/jaysyn/hp_pa_script.nss b/nwn/nwnprc/trunk/users/jaysyn/hp_pa_script.nss index c00e4940..f338c845 100644 --- a/nwn/nwnprc/trunk/users/jaysyn/hp_pa_script.nss +++ b/nwn/nwnprc/trunk/users/jaysyn/hp_pa_script.nss @@ -27,7 +27,10 @@ void SetPowerAttack(); // void main() { - int amount = GetLocalInt(OBJECT_SELF, "PRC_PowerAttack_Level"); + + ExecuteScript("prc_nui_pwrattk"); + +/* int amount = GetLocalInt(OBJECT_SELF, "PRC_PowerAttack_Level"); int prevPowerAttack5 = GetLocalInt(OBJECT_SELF, "prevPowerAttack5"); int prevPowerAttack1 = GetLocalInt(OBJECT_SELF, "prevPowerAttack1"); int powerAttack5Amount = amount / 5; @@ -89,4 +92,5 @@ void main() } SetLocalInt(OBJECT_SELF, "prevPowerAttack1", powerAttack1Amount); } -} \ No newline at end of file + */ + } \ No newline at end of file diff --git a/nwn/nwnprc/trunk/users/jaysyn/hp_string_util.nss b/nwn/nwnprc/trunk/users/jaysyn/hp_string_util.nss new file mode 100644 index 00000000..4a17e000 --- /dev/null +++ b/nwn/nwnprc/trunk/users/jaysyn/hp_string_util.nss @@ -0,0 +1,99 @@ +//:://///////////////////////////////////////////// +//:: String Util +//:: hp_string_util +//::////////////////////////////////////////////// +/* + A util class for providing useful string functions. +*/ +//::////////////////////////////////////////////// +//:: Created By: Rakiov +//:: Created On: 22.05.2005 +//::////////////////////////////////////////////// + +// +// StringSplit +// Takes a string and splits it by " " into a json list of strings +// i.e. "this is a test" returns +// { +// "this", +// "is", +// "a", +// "test" +// } +// +// Parameters: +// string input the string input +// +// Returns: +// json the json list of words +// +json StringSplit(string input); + +// +// TrimString +// Takes a string and trims any leading whitespace characters +// i.e. " this is a test" returns +// "this is a test" +// +// Parameters: +// input string the input string to trim +// +// Returns: +// string the trimmed string +// +string TrimString(string input); + +json StringSplit(string input) +{ + json retValue = JsonArray(); + + string subString = ""; + //trim any whitespace characters first + string currString = TrimString(input); + + // loop until we process the whole string + while(currString != "") + { + string currChar = GetStringLeft(currString, 1); + if (currChar != "" && currChar != " ") + { + // if the current character isn't nothing or whitespace, then add it + // to the current sub string. + subString += currChar; + } + else + { + // otherwise if the substring is not empty, then add it to the list + // of words to return + if(subString != "") + { + retValue = JsonArrayInsert(retValue, JsonString(subString)); + subString = ""; + } + } + + // pop and move to next character + currString = GetStringRight(currString, GetStringLength(currString)-1); + } + + // if there is any sub string left at the end of the loop, add it to the list + if(subString != "") + { + retValue = JsonArrayInsert(retValue, JsonString(subString)); + } + + return retValue; +} + +string TrimString(string input) +{ + string retValue = input; + + // while the string is not empty and we are looking at a whitespace, pop it. + while(retValue != "" && GetStringLeft(retValue, 1) == " ") + { + retValue = GetStringRight(retValue, GetStringLength(retValue)-1); + } + + return retValue; +} \ No newline at end of file diff --git a/nwn/nwnprc/trunk/users/jaysyn/ha_pa_events.nss b/nwn/nwnprc/trunk/users/jaysyn/prc_onnui.nss similarity index 100% rename from nwn/nwnprc/trunk/users/jaysyn/ha_pa_events.nss rename to nwn/nwnprc/trunk/users/jaysyn/prc_onnui.nss