diff --git a/nwn/nwnprc/trunk/2das/feat.2da b/nwn/nwnprc/trunk/2das/feat.2da
index 1b1f81fb..8ea73767 100644
--- a/nwn/nwnprc/trunk/2das/feat.2da
+++ b/nwn/nwnprc/trunk/2das/feat.2da
@@ -25901,53 +25901,53 @@
25897 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
25898 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
25899 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
-25900 "## START PRC8 HIDDEN TALENT FEATS ##" **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
-25901 FEAT_HIDDEN_TALENT_BIOFEEDBACK 16990419 16823714 fot_protmagweap 999 **** **** **** **** **** 11 **** **** **** 0 0 1 12 **** 14479 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_BIOFEEDBACK 6 0 **** **** 1 **** 0 0
-25902 FEAT_HIDDEN_TALENT_BITE_WOLF 16990420 16824105 fot_bitewolf 999 **** **** **** **** **** 11 **** **** **** 0 0 1 10 **** 14421 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_BITE_WOLF 6 0 **** **** 1 **** 0 0
-25903 FEAT_HIDDEN_TALENT_BOLT 16990421 16823684 fot_minorseq 999 **** **** **** **** **** 11 **** **** **** 0 0 1 12 **** 14422 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_BOLT 6 0 **** **** 1 **** 0 0
-25904 FEAT_HIDDEN_TALENT_BURST 16990422 16823921 fot_exped 999 **** **** **** **** **** 11 **** **** **** 0 0 1 10 **** 14423 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_BURST 6 0 **** **** 1 **** 0 0
-25905 FEAT_HIDDEN_TALENT_CALLTOMIND 16990423 16823630 fot_knowalign 999 **** **** **** **** **** 11 **** **** **** 0 0 1 **** **** 14424 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CALLTOMIND 6 0 **** **** 1 **** 0 0
-25906 FEAT_HIDDEN_TALENT_CALL_WEAPONRY 16990424 16824111 fot_seeksword 999 **** **** **** **** **** 11 **** **** **** 0 0 1 9 **** 14425 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CALL_WEAPONRY 6 0 **** **** 1 **** 0 0
-25907 FEAT_HIDDEN_TALENT_CHAMELEON 16990425 16823642 fot_chameleon 999 **** **** **** **** **** 11 **** **** **** 0 0 1 10 **** 14482 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CHAMELEON 6 0 **** **** 1 **** 0 0
-25908 FEAT_HIDDEN_TALENT_CLAWS_BEAST 16990426 16824107 fot_clawbeast 999 **** **** **** **** **** 11 **** **** **** 0 0 1 10 **** 14427 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CLAWS_BEAST 6 0 **** **** 1 **** 0 0
-25909 FEAT_HIDDEN_TALENT_COMPRESSION 16990427 16824120 fot_compress 999 **** **** **** **** **** 11 **** **** **** 0 0 1 9 **** 14428 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_COMPRESSION 6 0 **** **** 1 **** 0 0
-25910 FEAT_HIDDEN_TALENT_CONCEALTHOUGHT 16990428 16823759 fot_nondetect 999 **** **** **** **** **** 11 **** **** **** 0 0 1 7 **** 14429 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CONCEALTHOUGHT 6 0 **** **** 1 **** 0 0
-25911 FEAT_HIDDEN_TALENT_CREATESOUND 16990429 16823869 fot_vocal 999 **** **** **** **** **** 11 **** **** **** 0 0 1 11 **** 14431 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CREATESOUND 6 1 **** **** 1 **** 0 0
-25912 FEAT_HIDDEN_TALENT_CRYSTALSHARD 16990430 16823632 fot_icestorm 999 **** **** **** **** **** 11 **** **** **** 0 0 1 2 **** 14432 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CRYSTALSHARD 6 1 **** **** 1 **** 0 0
-25913 FEAT_HIDDEN_TALENT_DAZE 16990431 16823650 fot_invisstalk 999 **** **** **** **** **** 11 **** **** **** 0 0 1 2 **** 14433 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DAZE 6 1 **** **** 1 **** 0 0
-25914 FEAT_HIDDEN_TALENT_DECELERATION 16990432 16823652 fot_Slow 999 **** **** **** **** **** 11 **** **** **** 0 0 1 1 **** 14434 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DECELERATION 6 1 **** **** 1 **** 0 0
-25915 FEAT_HIDDEN_TALENT_DEFPRECOG 16990433 16823708 fot_shield 999 **** **** **** **** **** 11 **** **** **** 0 0 1 13 **** 14435 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DEFPRECOG 6 0 **** **** 1 **** 0 0
-25916 FEAT_HIDDEN_TALENT_DEMORALIZE 16990434 16823686 fot_lowerres 999 **** **** **** **** **** 11 **** **** **** 0 0 1 8 **** 14436 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DEMORALIZE 6 0 **** **** 1 **** 0 0
-25917 FEAT_HIDDEN_TALENT_DISABLE 16990435 16823688 fot_enfeeble 999 **** **** **** **** **** 11 **** **** **** 0 0 1 2 **** 14438 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DISABLE 6 1 **** **** 1 **** 0 0
-25918 FEAT_HIDDEN_TALENT_DISSIPATINGTOUCH 16990436 16823656 fot_chilltouch 999 **** **** **** **** **** 11 **** **** **** 0 0 1 3 **** 14439 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DISSIPATINGTOUCH 6 1 **** **** 1 **** 0 0
-25919 FEAT_HIDDEN_TALENT_DISTRACT 16990437 16823690 fot_powerblind 999 **** **** **** **** **** 11 **** **** **** 0 0 1 2 **** 14440 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DISTRACT 6 1 **** **** 1 **** 0 0
-25920 FEAT_HIDDEN_TALENT_ELF_SIGHT 16990438 16823720 fot_infravis 999 **** **** **** **** **** 11 **** **** **** 0 0 1 10 **** 14370 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_ELF_SIGHT 6 0 **** **** 1 **** 0 0
-25921 FEAT_HIDDEN_TALENT_EMPATHY 16990439 16823761 fot_friends 999 **** **** **** **** **** 11 **** **** **** 0 0 1 **** **** 14441 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_EMPATHY 6 0 **** **** 1 **** 0 0
-25922 FEAT_HIDDEN_TALENT_EMPTYMIND 16990440 16823692 fot_detillusion 999 **** **** **** **** **** 11 **** **** **** 0 0 1 9 **** 14442 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_EMPTYMIND 6 0 **** **** 1 **** 0 0
-25923 FEAT_HIDDEN_TALENT_ENERGYRAY 16990441 16823694 fot_flamearrow 999 **** **** **** **** **** 11 **** **** **** 0 0 1 **** **** 14443 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_ENERGYRAY 6 1 **** **** 1 **** 0 0
-25924 FEAT_HIDDEN_TALENT_ENTANGLE 16990442 16823700 fot_entangle 999 **** **** **** **** **** 11 **** **** **** 0 0 1 2 **** 14448 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_ENTANGLE 6 1 **** **** 1 **** 0 0
-25925 FEAT_HIDDEN_TALENT_EXPANSION 16990443 16824128 fot_strength 999 **** **** **** **** **** 11 **** **** **** 0 0 1 9 **** 14449 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_EXPANSION 6 0 **** **** 1 **** 0 0
-25926 FEAT_HIDDEN_TALENT_FARHAND 16990444 16823763 fot_magicshort 999 **** **** **** **** **** 11 **** **** **** 0 0 1 2 **** 14450 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_FARHAND 6 0 **** **** 1 **** 0 0
-25927 FEAT_HIDDEN_TALENT_FORCESCREEN 16990445 16823658 fot_polyself 999 **** **** **** **** **** 11 **** **** **** 0 0 1 13 **** 14451 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_FORCESCREEN 6 0 **** **** 1 **** 0 0
-25928 FEAT_HIDDEN_TALENT_GREASE 16990446 16823702 fot_Grease 999 **** **** **** **** **** 11 **** **** **** 0 0 1 11 **** 14452 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_GREASE 6 1 **** **** 1 **** 0 0
-25929 FEAT_HIDDEN_TALENT_HAMMER 16990447 16823704 fot_hammer 999 **** **** **** **** **** 11 **** **** **** 0 0 1 10 **** 14453 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_HAMMER 6 1 **** **** 1 **** 0 0
-25930 FEAT_HIDDEN_TALENT_INERTIALARMOUR 16990448 16823660 fot_armor 999 **** **** **** **** **** 11 **** **** **** 0 0 1 9 **** 14454 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_INERTIALARMOUR 6 0 **** **** 1 **** 0 0
-25931 FEAT_HIDDEN_TALENT_MATTERAGITATION 16990449 16823765 fot_elementfire 999 **** **** **** **** **** 11 **** **** **** 0 0 1 3 **** 14455 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_MATTERAGITATION 6 1 **** **** 1 **** 0 0
-25932 FEAT_HIDDEN_TALENT_METAPHYSICAL_CLAW 16990450 16824134 fot_metaclaw 999 **** **** **** **** **** 11 **** **** **** 0 0 1 9 **** 14456 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_METAPHYSICAL_CLAW 6 0 **** **** 1 **** 0 0
-25933 FEAT_HIDDEN_TALENT_METAPHYSICAL_WEAPON 16990451 16824136 fot_protnormal 999 **** **** **** **** **** 11 **** **** **** 0 0 1 9 **** 14457 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_METAPHYSICAL_WEAPON 6 0 **** **** 1 **** 0 0
-25934 FEAT_HIDDEN_TALENT_MINDTHRUST 16990452 16823615 fot_skulltrap 999 **** **** **** **** **** 11 **** **** **** 0 0 1 2 **** 14458 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_MINDTHRUST 6 1 **** **** 1 **** 0 0
-25935 FEAT_HIDDEN_TALENT_MYLIGHT 16990453 16823706 fot_dawn 999 **** **** **** **** **** 11 **** **** **** 0 0 1 **** **** 14459 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_MYLIGHT 6 0 **** **** 1 **** 0 0
-25936 FEAT_HIDDEN_TALENT_OFFPRECOG 16990454 16823710 fot_snare 999 **** **** **** **** **** 11 **** **** **** 0 0 1 9 **** 14460 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_OFFPRECOG 6 0 **** **** 1 **** 0 0
-25937 FEAT_HIDDEN_TALENT_OFFPRESC 16990455 16823712 fot_sols 999 **** **** **** **** **** 11 **** **** **** 0 0 1 9 **** 14461 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_OFFPRESC 6 0 **** **** 1 **** 0 0
-25938 FEAT_HIDDEN_TALENT_PREVENOM 16990456 16824142 fot_grmalison 999 **** **** **** **** **** 11 **** **** **** 0 0 1 2 **** 14468 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_PREVENOM 6 0 **** **** 1 **** 0 0
-25939 FEAT_HIDDEN_TALENT_PREVENOM_WEAPON 16990457 16824144 fot_prevnmw 999 **** **** **** **** **** 11 **** **** **** 0 0 1 2 **** 14469 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_PREVENOM_WEAPON 6 0 **** **** 1 **** 0 0
-25940 FEAT_HIDDEN_TALENT_SKATE 16990458 16823767 fot_haste 999 **** **** **** **** **** 11 **** **** **** 0 0 1 10 **** 14470 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_SKATE 6 0 **** **** 1 **** 0 0
-25941 FEAT_HIDDEN_TALENT_STOMP 16990459 16823682 fot_stomp 999 **** **** **** **** **** 11 **** **** **** 0 0 1 2 **** 14471 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_STOMP 6 1 **** **** 1 **** 0 0
-25942 FEAT_HIDDEN_TALENT_SYNESTHETE 16990460 16823755 fot_physmirror 999 **** **** **** **** **** 11 **** **** **** 0 0 1 2 **** 14472 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_SYNESTHETE 6 0 **** **** 1 **** 0 0
-25943 FEAT_HIDDEN_TALENT_TELEMPATHICPRO 16990461 16823769 fot_charmanim 999 **** **** **** **** **** 11 **** **** **** 0 0 1 2 **** 14473 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_TELEMPATHICPRO 6 0 **** **** 1 **** 0 0
-25944 FEAT_HIDDEN_TALENT_THICKSKIN 16990462 16823670 fot_barkskin 999 **** **** **** **** **** 11 **** **** **** 0 0 1 13 **** 14474 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_THICKSKIN 6 0 **** **** 1 **** 0 0
-25945 FEAT_HIDDEN_TALENT_VIGOR 16990463 16823672 fot_horror 999 **** **** **** **** **** 11 **** **** **** 0 0 1 9 **** 14475 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_VIGOR 6 0 **** **** 1 **** 0 0
-25946 FEAT_HIDDEN_TALENT_GRIP_IRON 16990464 16790301 fot_metaclaw 999 **** **** **** **** **** 11 **** **** **** 0 0 1 10 **** 15686 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_GRIP_IRON 6 0 **** **** 1 **** 0 0
+25900 FEAT_HIDDEN_TALENT 16990417 16990418 ife_psifeats **** **** **** **** **** **** 11 **** **** **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT 6 0 **** **** 1 **** 0 1
+25901 FEAT_HIDDEN_TALENT_BIOFEEDBACK 16990419 16823714 fot_protmagweap 999 **** **** **** **** **** 11 **** **** **** 0 0 0 12 **** 14479 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_BIOFEEDBACK 6 0 **** **** **** **** 0 0
+25902 FEAT_HIDDEN_TALENT_BITE_WOLF 16990420 16824105 fot_bitewolf 999 **** **** **** **** **** 11 **** **** **** 0 0 0 10 **** 14421 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_BITE_WOLF 6 0 **** **** **** **** 0 0
+25903 FEAT_HIDDEN_TALENT_BOLT 16990421 16823684 fot_minorseq 999 **** **** **** **** **** 11 **** **** **** 0 0 0 12 **** 14422 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_BOLT 6 0 **** **** **** **** 0 0
+25904 FEAT_HIDDEN_TALENT_BURST 16990422 16823921 fot_exped 999 **** **** **** **** **** 11 **** **** **** 0 0 0 10 **** 14423 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_BURST 6 0 **** **** **** **** 0 0
+25905 FEAT_HIDDEN_TALENT_CALLTOMIND 16990423 16823630 fot_knowalign 999 **** **** **** **** **** 11 **** **** **** 0 0 0 **** **** 14424 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CALLTOMIND 6 0 **** **** **** **** 0 0
+25906 FEAT_HIDDEN_TALENT_CALL_WEAPONRY 16990424 16824111 fot_seeksword 999 **** **** **** **** **** 11 **** **** **** 0 0 0 9 **** 14425 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CALL_WEAPONRY 6 0 **** **** **** **** 0 0
+25907 FEAT_HIDDEN_TALENT_CHAMELEON 16990425 16823642 fot_chameleon 999 **** **** **** **** **** 11 **** **** **** 0 0 0 10 **** 14482 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CHAMELEON 6 0 **** **** **** **** 0 0
+25908 FEAT_HIDDEN_TALENT_CLAWS_BEAST 16990426 16824107 fot_clawbeast 999 **** **** **** **** **** 11 **** **** **** 0 0 0 10 **** 14427 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CLAWS_BEAST 6 0 **** **** **** **** 0 0
+25909 FEAT_HIDDEN_TALENT_COMPRESSION 16990427 16824120 fot_compress 999 **** **** **** **** **** 11 **** **** **** 0 0 0 9 **** 14428 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_COMPRESSION 6 0 **** **** **** **** 0 0
+25910 FEAT_HIDDEN_TALENT_CONCEALTHOUGHT 16990428 16823759 fot_nondetect 999 **** **** **** **** **** 11 **** **** **** 0 0 0 7 **** 14429 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CONCEALTHOUGHT 6 0 **** **** **** **** 0 0
+25911 FEAT_HIDDEN_TALENT_CREATESOUND 16990429 16823869 fot_vocal 999 **** **** **** **** **** 11 **** **** **** 0 0 0 11 **** 14431 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CREATESOUND 6 1 **** **** **** **** 0 0
+25912 FEAT_HIDDEN_TALENT_CRYSTALSHARD 16990430 16823632 fot_icestorm 999 **** **** **** **** **** 11 **** **** **** 0 0 0 2 **** 14432 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CRYSTALSHARD 6 1 **** **** **** **** 0 0
+25913 FEAT_HIDDEN_TALENT_DAZE 16990431 16823650 fot_invisstalk 999 **** **** **** **** **** 11 **** **** **** 0 0 0 2 **** 14433 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DAZE 6 1 **** **** **** **** 0 0
+25914 FEAT_HIDDEN_TALENT_DECELERATION 16990432 16823652 fot_Slow 999 **** **** **** **** **** 11 **** **** **** 0 0 0 1 **** 14434 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DECELERATION 6 1 **** **** **** **** 0 0
+25915 FEAT_HIDDEN_TALENT_DEFPRECOG 16990433 16823708 fot_shield 999 **** **** **** **** **** 11 **** **** **** 0 0 0 13 **** 14435 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DEFPRECOG 6 0 **** **** **** **** 0 0
+25916 FEAT_HIDDEN_TALENT_DEMORALIZE 16990434 16823686 fot_lowerres 999 **** **** **** **** **** 11 **** **** **** 0 0 0 8 **** 14436 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DEMORALIZE 6 0 **** **** **** **** 0 0
+25917 FEAT_HIDDEN_TALENT_DISABLE 16990435 16823688 fot_enfeeble 999 **** **** **** **** **** 11 **** **** **** 0 0 0 2 **** 14438 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DISABLE 6 1 **** **** **** **** 0 0
+25918 FEAT_HIDDEN_TALENT_DISSIPATINGTOUCH 16990436 16823656 fot_chilltouch 999 **** **** **** **** **** 11 **** **** **** 0 0 0 3 **** 14439 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DISSIPATINGTOUCH 6 1 **** **** **** **** 0 0
+25919 FEAT_HIDDEN_TALENT_DISTRACT 16990437 16823690 fot_powerblind 999 **** **** **** **** **** 11 **** **** **** 0 0 0 2 **** 14440 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DISTRACT 6 1 **** **** **** **** 0 0
+25920 FEAT_HIDDEN_TALENT_ELF_SIGHT 16990438 16823720 fot_infravis 999 **** **** **** **** **** 11 **** **** **** 0 0 0 10 **** 14370 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_ELF_SIGHT 6 0 **** **** **** **** 0 0
+25921 FEAT_HIDDEN_TALENT_EMPATHY 16990439 16823761 fot_friends 999 **** **** **** **** **** 11 **** **** **** 0 0 0 **** **** 14441 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_EMPATHY 6 0 **** **** **** **** 0 0
+25922 FEAT_HIDDEN_TALENT_EMPTYMIND 16990440 16823692 fot_detillusion 999 **** **** **** **** **** 11 **** **** **** 0 0 0 9 **** 14442 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_EMPTYMIND 6 0 **** **** **** **** 0 0
+25923 FEAT_HIDDEN_TALENT_ENERGYRAY 16990441 16823694 fot_flamearrow 999 **** **** **** **** **** 11 **** **** **** 0 0 0 **** **** 14443 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_ENERGYRAY 6 1 **** **** **** **** 0 0
+25924 FEAT_HIDDEN_TALENT_ENTANGLE 16990442 16823700 fot_entangle 999 **** **** **** **** **** 11 **** **** **** 0 0 0 2 **** 14448 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_ENTANGLE 6 1 **** **** **** **** 0 0
+25925 FEAT_HIDDEN_TALENT_EXPANSION 16990443 16824128 fot_strength 999 **** **** **** **** **** 11 **** **** **** 0 0 0 9 **** 14449 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_EXPANSION 6 0 **** **** **** **** 0 0
+25926 FEAT_HIDDEN_TALENT_FARHAND 16990444 16823763 fot_magicshort 999 **** **** **** **** **** 11 **** **** **** 0 0 0 2 **** 14450 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_FARHAND 6 0 **** **** **** **** 0 0
+25927 FEAT_HIDDEN_TALENT_FORCESCREEN 16990445 16823658 fot_polyself 999 **** **** **** **** **** 11 **** **** **** 0 0 0 13 **** 14451 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_FORCESCREEN 6 0 **** **** **** **** 0 0
+25928 FEAT_HIDDEN_TALENT_GREASE 16990446 16823702 fot_Grease 999 **** **** **** **** **** 11 **** **** **** 0 0 0 11 **** 14452 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_GREASE 6 1 **** **** **** **** 0 0
+25929 FEAT_HIDDEN_TALENT_HAMMER 16990447 16823704 fot_hammer 999 **** **** **** **** **** 11 **** **** **** 0 0 0 10 **** 14453 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_HAMMER 6 1 **** **** **** **** 0 0
+25930 FEAT_HIDDEN_TALENT_INERTIALARMOUR 16990448 16823660 fot_armor 999 **** **** **** **** **** 11 **** **** **** 0 0 0 9 **** 14454 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_INERTIALARMOUR 6 0 **** **** **** **** 0 0
+25931 FEAT_HIDDEN_TALENT_MATTERAGITATION 16990449 16823765 fot_elementfire 999 **** **** **** **** **** 11 **** **** **** 0 0 0 3 **** 14455 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_MATTERAGITATION 6 1 **** **** **** **** 0 0
+25932 FEAT_HIDDEN_TALENT_METAPHYSICAL_CLAW 16990450 16824134 fot_metaclaw 999 **** **** **** **** **** 11 **** **** **** 0 0 0 9 **** 14456 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_METAPHYSICAL_CLAW 6 0 **** **** **** **** 0 0
+25933 FEAT_HIDDEN_TALENT_METAPHYSICAL_WEAPON 16990451 16824136 fot_protnormal 999 **** **** **** **** **** 11 **** **** **** 0 0 0 9 **** 14457 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_METAPHYSICAL_WEAPON 6 0 **** **** **** **** 0 0
+25934 FEAT_HIDDEN_TALENT_MINDTHRUST 16990452 16823615 fot_skulltrap 999 **** **** **** **** **** 11 **** **** **** 0 0 0 2 **** 14458 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_MINDTHRUST 6 1 **** **** **** **** 0 0
+25935 FEAT_HIDDEN_TALENT_MYLIGHT 16990453 16823706 fot_dawn 999 **** **** **** **** **** 11 **** **** **** 0 0 0 **** **** 14459 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_MYLIGHT 6 0 **** **** **** **** 0 0
+25936 FEAT_HIDDEN_TALENT_OFFPRECOG 16990454 16823710 fot_snare 999 **** **** **** **** **** 11 **** **** **** 0 0 0 9 **** 14460 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_OFFPRECOG 6 0 **** **** **** **** 0 0
+25937 FEAT_HIDDEN_TALENT_OFFPRESC 16990455 16823712 fot_sols 999 **** **** **** **** **** 11 **** **** **** 0 0 0 9 **** 14461 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_OFFPRESC 6 0 **** **** **** **** 0 0
+25938 FEAT_HIDDEN_TALENT_PREVENOM 16990456 16824142 fot_grmalison 999 **** **** **** **** **** 11 **** **** **** 0 0 0 2 **** 14468 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_PREVENOM 6 0 **** **** **** **** 0 0
+25939 FEAT_HIDDEN_TALENT_PREVENOM_WEAPON 16990457 16824144 fot_prevnmw 999 **** **** **** **** **** 11 **** **** **** 0 0 0 2 **** 14469 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_PREVENOM_WEAPON 6 0 **** **** **** **** 0 0
+25940 FEAT_HIDDEN_TALENT_SKATE 16990458 16823767 fot_haste 999 **** **** **** **** **** 11 **** **** **** 0 0 0 10 **** 14470 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_SKATE 6 0 **** **** **** **** 0 0
+25941 FEAT_HIDDEN_TALENT_STOMP 16990459 16823682 fot_stomp 999 **** **** **** **** **** 11 **** **** **** 0 0 0 2 **** 14471 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_STOMP 6 1 **** **** **** **** 0 0
+25942 FEAT_HIDDEN_TALENT_SYNESTHETE 16990460 16823755 fot_physmirror 999 **** **** **** **** **** 11 **** **** **** 0 0 0 2 **** 14472 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_SYNESTHETE 6 0 **** **** **** **** 0 0
+25943 FEAT_HIDDEN_TALENT_TELEMPATHICPRO 16990461 16823769 fot_charmanim 999 **** **** **** **** **** 11 **** **** **** 0 0 0 2 **** 14473 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_TELEMPATHICPRO 6 0 **** **** **** **** 0 0
+25944 FEAT_HIDDEN_TALENT_THICKSKIN 16990462 16823670 fot_barkskin 999 **** **** **** **** **** 11 **** **** **** 0 0 0 13 **** 14474 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_THICKSKIN 6 0 **** **** **** **** 0 0
+25945 FEAT_HIDDEN_TALENT_VIGOR 16990463 16823672 fot_horror 999 **** **** **** **** **** 11 **** **** **** 0 0 0 9 **** 14475 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_VIGOR 6 0 **** **** **** **** 0 0
+25946 FEAT_HIDDEN_TALENT_GRIP_IRON 16990464 16790301 fot_metaclaw 999 **** **** **** **** **** 11 **** **** **** 0 0 0 10 **** 15686 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_GRIP_IRON 6 0 **** **** **** **** 0 0
25947 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
25948 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
25949 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
diff --git a/nwn/nwnprc/trunk/2das/masterfeats.2da b/nwn/nwnprc/trunk/2das/masterfeats.2da
index 7bd7e039..c144f7cf 100644
--- a/nwn/nwnprc/trunk/2das/masterfeats.2da
+++ b/nwn/nwnprc/trunk/2das/masterfeats.2da
@@ -1,129 +1,129 @@
2DA V2.0
- LABEL STRREF DESCRIPTION ICON
-0 ImprovedCritical 6489 228 ife_impcrit
-1 WeaponFocus 6490 436 ife_wepfoc
-2 WeaponSpecialization 6491 444 ife_wepspec
-3 SpellFocus 6492 426 ife_magic
-4 SkillFocus 6493 424 ife_skfoc
-5 FavoredEnemy 6566 6079 ife_racehate
-6 GreaterSpellFocus 2838 2791 ife_magic
-7 ArcaneDefense 2839 2823 ife_magic
-8 ResistEnergy 2840 2835 ife_magic
-9 WeaponOfChoice 83313 8728 ife_X2WpCh
-10 EpicWeaponFocus 83475 8415 ife_X2EWpFo
-11 EpicWeaponSpec 83481 8456 ife_X2WpSpec
-12 OverwhelmingCritical 83480 8524 ife_X2OvCrit
-13 DevastatingCrit 83482 3909 ife_X2DevCrit
-14 EpicSpell 83483 83484 ife_X2ESpell
-15 EpicSkillFocus 83485 4063 ife_X2skfoc
-16 EpicSpellFocus 83486 4084 ife_X2magic
-17 EpicEnergyResistance 83487 83488 ife_X2EResi
-18 **** **** **** ****
-19 **** **** **** ****
-20 **** **** **** ****
-21 **** **** **** ****
-22 **** **** **** ****
-23 **** **** **** ****
-24 **** **** **** ****
-25 **** **** **** ****
-26 **** **** **** ****
-27 **** **** **** ****
-28 **** **** **** ****
-29 **** **** **** ****
-30 **** **** **** ****
-31 **** **** **** ****
-32 **** **** **** ****
-33 **** **** **** ****
-34 **** **** **** ****
-35 **** **** **** ****
-36 **** **** **** ****
-37 **** **** **** ****
-38 **** **** **** ****
-39 **** **** **** ****
-40 **** **** **** ****
-41 **** **** **** ****
-42 **** **** **** ****
-43 **** **** **** ****
-44 **** **** **** ****
-45 **** **** **** ****
-46 **** **** **** ****
-47 **** **** **** ****
-48 **** **** **** ****
-49 **** **** **** ****
-50 SpellLikeAbility 16822760 16822761 ife_X2ESpell
-51 **** **** **** ****
-52 BindingFeats 16835231 16835232 fot_oracle
-53 IncarnumFeats 16838110 16838111 ife_psi_focus
-54 ShadowcastingFeats 16836244 16836245 ife_X1SDaze
-55 HatedFoe 16824268 16824269 ife_racehate
-56 Gather_Horde 16824322 16824323 ife_unseenwander
-57 Gather_Horde 16824324 16824325 ife_unseenwander
-58 Summon_Demon 16824528 16824529 ife_alertness
-59 DragonHeritage 16832504 16832505 ife_drag_group
-60 DraconicFeats 16832502 16832503 ife_drag_group
-61 Psionic_Breath 16832466 16832467 ife_X2DDBreath
-62 Dragonwrought 16832408 16832409 ife_drag_group
-63 DragonBlood 16832131 16832132 ife_DDHDincrease
-64 Minor_Aura 16828301 16828302 ife_lliiraaura
-65 Major_Aura 16828303 16828304 ife_lliiraaura
-66 Dragon_Affinity 16832585 16832586 ife_drag_group
-67 Draconic_Surge_Phys 16832587 16832588 ife_drag_group
-68 Draconic_Surge_Mental 16832589 16832590 ife_drag_group
-69 ToT_Immunities 16832661 16832662 dradis_immune
-70 TattooFocus 16822436 16822437 rw_scribetatoo
-71 Dragon_Shaman_Auras 16832707 16832708 ife_lliiraaura
-72 Totem_Dragons 16832709 16832710 dradis_gen
-73 Bonus_Draconic_Auras 16832802 16832832 ife_lliiraaura
-74 Major_Aura_Draconic 16832818 16832819 ife_lliiraaura
-75 MetabreathFeats 16832867 16832868 ife_X2DDBreath
-76 BreathChanneling 16832869 16832870 ife_DDHDincrease
-77 BreathEffects 16832922 16832923 ife_X2DDBreath
-78 BladeMeditation 16827008 16827009 ife_X2EpWM
-79 WarforgedArmor 16828215 16828216 ife_armor_h
-80 PsionicFeats 16822911 16822912 ife_psifeats
-81 MetaPsionicFeats 16822913 16822914 ife_metapsifeat
-82 AntiPsionicFeats 16826474 16826475 ife_antipsifeats
-83 DragonAugment 16832444 16832445 dradis_gen
-84 ShifterFeats 16828112 16828113 ife_X2OutShape
-85 PnP_Weapon_Prof_Simp 16834217 16834260 ife_weppro_sim
-86 PnP_Weapon_Prof_Mart 16834218 16834261 ife_weppro_mar
-87 PnP_Weapon_Prof_Exot 16834219 16834262 ife_weppro_ex
-88 UFavoredEnemy 16825439 6079 ife_racehate
-89 VileMartial 16825479 16825480 ife_combat
-90 FocusedSpellPenetr 16825325 16825324 ife_magic
-91 BondedSummoner 16826038 16826039 ife_mastelem
-92 ElementalConflag 16823300 16823301 ife_mastelem
-93 SanctifyMartial 16823244 16823245 ife_combat
-94 WeaponChoiceTempus 16822944 16822945 ife_X2WpCh
-95 Evilbrand 16822849 16822850 ife_X2BoneSk1
-96 Aberrant 16790214 16790215 ife_dfrm_gaunt
-97 ExaltedFeats 16854436 16854437 ife_holyrad
-98 **** **** **** ****
-99 **** **** **** ****
-100 **** **** **** ****
-101 MinorOozyTouch 16825040 16825041 is_ghoultch
-102 MajorOozyTouch 16825050 16825051 is_ghoultch
-103 ToBFeats 16836033 16836034 im_MithTornado
-104 BaneMagic 16793665 16793666 ife_banemagic
-105 MinstrelSongTier1 16823496 16823497 ife_minstrel
-106 FavoredDivSong1 16823500 16823505 ife_fom
-107 FavoredDivSong2 16823501 16823505 ife_fom
-108 FavoredDivSong3 16823502 16823505 ife_fom
-109 FavoredDivSong4 16823503 16823505 ife_fom
-110 FavoredDivSong5 16823504 16823505 ife_fom
-111 BonusDomains 16827845 16827846 rw_specialistdef
-112 FocusedLexicon 16827469 16827468 ife_racehate
-113 UtteranceFocus 16827483 16827482 ife_foc_spel
-114 ReserveFeats 16852238 16852239 ife_foc_spel
-115 **** **** **** ****
-116 **** **** **** ****
-117 DivineGift 16854432 16854433 ife_magic
-118 **** **** **** ****
-119 **** **** **** ****
-120 HiddenTalent 16990417 16990418 ife_psifeats
-121 SpecialAttack 16987216 16987217 ife_combat
-122 InvokerMarkerFeats 16854434 16854435 ife_magic
-123 AbilityFocus 16854430 16854431 ife_magic
-124 PsionDiscipline 16854428 16854429 ife_psifeats
-125 SpellcastingMarkerFeats 16854426 16854427 ife_magic
+ LABEL STRREF DESCRIPTION ICON
+0 ImprovedCritical 6489 228 ife_impcrit
+1 WeaponFocus 6490 436 ife_wepfoc
+2 WeaponSpecialization 6491 444 ife_wepspec
+3 SpellFocus 6492 426 ife_magic
+4 SkillFocus 6493 424 ife_skfoc
+5 FavoredEnemy 6566 6079 ife_racehate
+6 GreaterSpellFocus 2838 2791 ife_magic
+7 ArcaneDefense 2839 2823 ife_magic
+8 ResistEnergy 2840 2835 ife_magic
+9 WeaponOfChoice 83313 8728 ife_X2WpCh
+10 EpicWeaponFocus 83475 8415 ife_X2EWpFo
+11 EpicWeaponSpec 83481 8456 ife_X2WpSpec
+12 OverwhelmingCritical 83480 8524 ife_X2OvCrit
+13 DevastatingCrit 83482 3909 ife_X2DevCrit
+14 EpicSpell 83483 83484 ife_X2ESpell
+15 EpicSkillFocus 83485 4063 ife_X2skfoc
+16 EpicSpellFocus 83486 4084 ife_X2magic
+17 EpicEnergyResistance 83487 83488 ife_X2EResi
+18 **** **** **** ****
+19 **** **** **** ****
+20 **** **** **** ****
+21 **** **** **** ****
+22 **** **** **** ****
+23 **** **** **** ****
+24 **** **** **** ****
+25 **** **** **** ****
+26 **** **** **** ****
+27 **** **** **** ****
+28 **** **** **** ****
+29 **** **** **** ****
+30 **** **** **** ****
+31 **** **** **** ****
+32 **** **** **** ****
+33 **** **** **** ****
+34 **** **** **** ****
+35 **** **** **** ****
+36 **** **** **** ****
+37 **** **** **** ****
+38 **** **** **** ****
+39 **** **** **** ****
+40 **** **** **** ****
+41 **** **** **** ****
+42 **** **** **** ****
+43 **** **** **** ****
+44 **** **** **** ****
+45 **** **** **** ****
+46 **** **** **** ****
+47 **** **** **** ****
+48 **** **** **** ****
+49 **** **** **** ****
+50 SpellLikeAbility 16822760 16822761 ife_X2ESpell
+51 **** **** **** ****
+52 BindingFeats 16835231 16835232 fot_oracle
+53 IncarnumFeats 16838110 16838111 ife_psi_focus
+54 ShadowcastingFeats 16836244 16836245 ife_X1SDaze
+55 HatedFoe 16824268 16824269 ife_racehate
+56 Gather_Horde 16824322 16824323 ife_unseenwander
+57 Gather_Horde 16824324 16824325 ife_unseenwander
+58 Summon_Demon 16824528 16824529 ife_alertness
+59 DragonHeritage 16832504 16832505 ife_drag_group
+60 DraconicFeats 16832502 16832503 ife_drag_group
+61 Psionic_Breath 16832466 16832467 ife_X2DDBreath
+62 Dragonwrought 16832408 16832409 ife_drag_group
+63 DragonBlood 16832131 16832132 ife_DDHDincrease
+64 Minor_Aura 16828301 16828302 ife_lliiraaura
+65 Major_Aura 16828303 16828304 ife_lliiraaura
+66 Dragon_Affinity 16832585 16832586 ife_drag_group
+67 Draconic_Surge_Phys 16832587 16832588 ife_drag_group
+68 Draconic_Surge_Mental 16832589 16832590 ife_drag_group
+69 ToT_Immunities 16832661 16832662 dradis_immune
+70 TattooFocus 16822436 16822437 rw_scribetatoo
+71 Dragon_Shaman_Auras 16832707 16832708 ife_lliiraaura
+72 Totem_Dragons 16832709 16832710 dradis_gen
+73 Bonus_Draconic_Auras 16832802 16832832 ife_lliiraaura
+74 Major_Aura_Draconic 16832818 16832819 ife_lliiraaura
+75 MetabreathFeats 16832867 16832868 ife_X2DDBreath
+76 BreathChanneling 16832869 16832870 ife_DDHDincrease
+77 BreathEffects 16832922 16832923 ife_X2DDBreath
+78 BladeMeditation 16827008 16827009 ife_X2EpWM
+79 WarforgedArmor 16828215 16828216 ife_armor_h
+80 PsionicFeats 16822911 16822912 ife_psifeats
+81 MetaPsionicFeats 16822913 16822914 ife_metapsifeat
+82 AntiPsionicFeats 16826474 16826475 ife_antipsifeats
+83 DragonAugment 16832444 16832445 dradis_gen
+84 ShifterFeats 16828112 16828113 ife_X2OutShape
+85 PnP_Weapon_Prof_Simp 16834217 16834260 ife_weppro_sim
+86 PnP_Weapon_Prof_Mart 16834218 16834261 ife_weppro_mar
+87 PnP_Weapon_Prof_Exot 16834219 16834262 ife_weppro_ex
+88 UFavoredEnemy 16825439 6079 ife_racehate
+89 VileMartial 16825479 16825480 ife_combat
+90 FocusedSpellPenetr 16825325 16825324 ife_magic
+91 BondedSummoner 16826038 16826039 ife_mastelem
+92 ElementalConflag 16823300 16823301 ife_mastelem
+93 SanctifyMartial 16823244 16823245 ife_combat
+94 WeaponChoiceTempus 16822944 16822945 ife_X2WpCh
+95 Evilbrand 16822849 16822850 ife_X2BoneSk1
+96 Aberrant 16790214 16790215 ife_dfrm_gaunt
+97 ExaltedFeats 16854436 16854437 ife_holyrad
+98 **** **** **** ****
+99 **** **** **** ****
+100 **** **** **** ****
+101 MinorOozyTouch 16825040 16825041 is_ghoultch
+102 MajorOozyTouch 16825050 16825051 is_ghoultch
+103 ToBFeats 16836033 16836034 im_MithTornado
+104 BaneMagic 16793665 16793666 ife_banemagic
+105 MinstrelSongTier1 16823496 16823497 ife_minstrel
+106 FavoredDivSong1 16823500 16823505 ife_fom
+107 FavoredDivSong2 16823501 16823505 ife_fom
+108 FavoredDivSong3 16823502 16823505 ife_fom
+109 FavoredDivSong4 16823503 16823505 ife_fom
+110 FavoredDivSong5 16823504 16823505 ife_fom
+111 BonusDomains 16827845 16827846 rw_specialistdef
+112 FocusedLexicon 16827469 16827468 ife_racehate
+113 UtteranceFocus 16827483 16827482 ife_foc_spel
+114 ReserveFeats 16852238 16852239 ife_foc_spel
+115 **** **** **** ****
+116 **** **** **** ****
+117 DivineGift 16854432 16854433 ife_magic
+118 **** **** **** ****
+119 **** **** **** ****
+120 **** **** **** ****
+121 SpecialAttack 16987216 16987217 ife_combat
+122 InvokerMarkerFeats 16854434 16854435 ife_magic
+123 AbilityFocus 16854430 16854431 ife_magic
+124 PsionDiscipline 16854428 16854429 ife_psifeats
+125 SpellcastingMarkerFeats 16854426 16854427 ife_magic
diff --git a/nwn/nwnprc/trunk/include/prc_feat_const.nss b/nwn/nwnprc/trunk/include/prc_feat_const.nss
index 1ea69243..6fd8c94f 100644
--- a/nwn/nwnprc/trunk/include/prc_feat_const.nss
+++ b/nwn/nwnprc/trunk/include/prc_feat_const.nss
@@ -6287,6 +6287,7 @@ const int FEAT_DSONG_SPELLCASTING_NONE = 19592;
const int FEAT_OLLAM_SPELLCASTING_NONE = 19593;
//:: PRC8 Hidden Talent Feats
+const int FEAT_HIDDEN_TALENT = 25900;
const int FEAT_HIDDEN_TALENT_BIOFEEDBACK = 25901;
const int FEAT_HIDDEN_TALENT_BITE_WOLF = 25902;
const int FEAT_HIDDEN_TALENT_BOLT = 25903;
diff --git a/nwn/nwnprc/trunk/include/prc_inc_function.nss b/nwn/nwnprc/trunk/include/prc_inc_function.nss
index f1a0fea3..a3b24e5e 100644
--- a/nwn/nwnprc/trunk/include/prc_inc_function.nss
+++ b/nwn/nwnprc/trunk/include/prc_inc_function.nss
@@ -431,7 +431,7 @@ void EvalPRCFeats(object oPC)
ExecuteScript("moi_events", oPC);
if (GetIsBinder(oPC))
- ExecuteScript("bnd_events", oPC);
+ ExecuteScript("bnd_events", oPC);
// check if character with crafting feat has appropriate base item in her inventory
// x - moved from prc_onhb_indiv.nss
diff --git a/nwn/nwnprc/trunk/include/prc_inc_switch.nss b/nwn/nwnprc/trunk/include/prc_inc_switch.nss
index 035b27a6..1d377052 100644
--- a/nwn/nwnprc/trunk/include/prc_inc_switch.nss
+++ b/nwn/nwnprc/trunk/include/prc_inc_switch.nss
@@ -76,7 +76,7 @@
/* This variable MUST be updated with every new version of the PRC!!! */
- const string PRC_VERSION = "PRC8 4.74";
+ const string PRC_VERSION = "PRC8 4.75";
/* This variable MUST be updated every time 'assemble_spellbooks.bat' is run!!! */
diff --git a/nwn/nwnprc/trunk/include/psi_inc_core.nss b/nwn/nwnprc/trunk/include/psi_inc_core.nss
index 6a9de2b3..b4ca245f 100644
--- a/nwn/nwnprc/trunk/include/psi_inc_core.nss
+++ b/nwn/nwnprc/trunk/include/psi_inc_core.nss
@@ -1755,6 +1755,59 @@ int IsHiddenTalent(object oPC = OBJECT_SELF)
}
}
+int GetHiddenTalentPowerFromFeat(int nFeatID)
+{
+ // Map Hidden Talent feats to their corresponding power IDs
+ // Using the same mappings as GetIsHiddenTalentPower()
+ if(nFeatID == FEAT_HIDDEN_TALENT_BIOFEEDBACK) return POWER_BIOFEEDBACK;
+ if(nFeatID == FEAT_HIDDEN_TALENT_BITE_WOLF) return POWER_BITE_WOLF;
+ if(nFeatID == FEAT_HIDDEN_TALENT_BOLT) return POWER_BOLT;
+ if(nFeatID == FEAT_HIDDEN_TALENT_BURST) return POWER_BURST;
+ if(nFeatID == FEAT_HIDDEN_TALENT_CALLTOMIND) return POWER_CALLTOMIND;
+ if(nFeatID == FEAT_HIDDEN_TALENT_CALL_WEAPONRY) return POWER_CALL_WEAPONRY;
+ if(nFeatID == FEAT_HIDDEN_TALENT_CHAMELEON) return POWER_CHAMELEON;
+ if(nFeatID == FEAT_HIDDEN_TALENT_CLAWS_BEAST) return POWER_CLAWS_BEAST;
+ if(nFeatID == FEAT_HIDDEN_TALENT_COMPRESSION) return POWER_COMPRESSION;
+ if(nFeatID == FEAT_HIDDEN_TALENT_CONCEALTHOUGHT) return POWER_CONCEALTHOUGHT;
+ if(nFeatID == FEAT_HIDDEN_TALENT_CREATESOUND) return POWER_CREATESOUND;
+ if(nFeatID == FEAT_HIDDEN_TALENT_CRYSTALSHARD) return POWER_CRYSTALSHARD;
+ if(nFeatID == FEAT_HIDDEN_TALENT_DAZE) return POWER_DAZE;
+ if(nFeatID == FEAT_HIDDEN_TALENT_DECELERATION) return POWER_DECELERATION;
+ if(nFeatID == FEAT_HIDDEN_TALENT_DEFPRECOG) return POWER_DEFPRECOG;
+ if(nFeatID == FEAT_HIDDEN_TALENT_DEMORALIZE) return POWER_DEMORALIZE;
+ if(nFeatID == FEAT_HIDDEN_TALENT_DISABLE) return POWER_DISABLE;
+ if(nFeatID == FEAT_HIDDEN_TALENT_DISSIPATINGTOUCH)return POWER_DISSIPATINGTOUCH;
+ if(nFeatID == FEAT_HIDDEN_TALENT_DISTRACT) return POWER_DISTRACT;
+ if(nFeatID == FEAT_HIDDEN_TALENT_ELFSIGHT) return POWER_ELFSIGHT;
+ if(nFeatID == FEAT_HIDDEN_TALENT_EMPATHY) return POWER_EMPATHY;
+ if(nFeatID == FEAT_HIDDEN_TALENT_EMPTYMIND) return POWER_EMPTYMIND;
+ if(nFeatID == FEAT_HIDDEN_TALENT_ENTANGLE) return POWER_ENTANGLE;
+ if(nFeatID == FEAT_HIDDEN_TALENT_EXPANSION) return POWER_EXPANSION;
+ if(nFeatID == FEAT_HIDDEN_TALENT_FARHAND) return POWER_FARHAND;
+ if(nFeatID == FEAT_HIDDEN_TALENT_FORCESCREEN) return POWER_FORCESCREEN;
+ if(nFeatID == FEAT_HIDDEN_TALENT_GREASE) return POWER_GREASE;
+ if(nFeatID == FEAT_HIDDEN_TALENT_HAMMER) return POWER_HAMMER;
+ if(nFeatID == FEAT_HIDDEN_TALENT_INERTIALARMOUR) return POWER_INERTIALARMOUR;
+ if(nFeatID == FEAT_HIDDEN_TALENT_MATTERAGITATION) return POWER_MATTERAGITATION;
+ if(nFeatID == FEAT_HIDDEN_TALENT_METAPHYSICAL_CLAW) return POWER_METAPHYSICAL_CLAW;
+ if(nFeatID == FEAT_HIDDEN_TALENT_METAPHYSICAL_WEAPON) return POWER_METAPHYSICAL_WEAPON;
+ if(nFeatID == FEAT_HIDDEN_TALENT_MINDTHRUST) return POWER_MINDTHRUST;
+ if(nFeatID == FEAT_HIDDEN_TALENT_MYLIGHT) return POWER_MYLIGHT;
+ if(nFeatID == FEAT_HIDDEN_TALENT_OFFPRECOG) return POWER_OFFPRECOG;
+ if(nFeatID == FEAT_HIDDEN_TALENT_OFFPRESC) return POWER_OFFPRESC;
+ if(nFeatID == FEAT_HIDDEN_TALENT_PREVENOM) return POWER_PREVENOM;
+ if(nFeatID == FEAT_HIDDEN_TALENT_PREVENOM_WEAPON) return POWER_PREVENOM_WEAPON;
+ if(nFeatID == FEAT_HIDDEN_TALENT_SKATE) return POWER_SKATE;
+ if(nFeatID == FEAT_HIDDEN_TALENT_STOMP) return POWER_STOMP;
+ if(nFeatID == FEAT_HIDDEN_TALENT_SYNESTHETE) return POWER_SYNESTHETE;
+ if(nFeatID == FEAT_HIDDEN_TALENT_TELEMPATHICPRO) return POWER_TELEMPATHICPRO;
+ if(nFeatID == FEAT_HIDDEN_TALENT_THICKSKIN) return POWER_THICKSKIN;
+ if(nFeatID == FEAT_HIDDEN_TALENT_VIGOR) return POWER_VIGOR;
+ if(nFeatID == FEAT_HIDDEN_TALENT_GRIP_IRON) return POWER_GRIP_IRON;
+
+ return -1; // Not found
+}
+
int GetHiddenTalentCount(object oPC = OBJECT_SELF)
{
int nCount = 0;
diff --git a/nwn/nwnprc/trunk/include/psi_inc_ppoints.nss b/nwn/nwnprc/trunk/include/psi_inc_ppoints.nss
index 50724ced..ca66fbaf 100644
--- a/nwn/nwnprc/trunk/include/psi_inc_ppoints.nss
+++ b/nwn/nwnprc/trunk/include/psi_inc_ppoints.nss
@@ -142,8 +142,8 @@ int _GetFeatBonusPP(object oChar)
nBonusPP += 2;
//:: Hidden Talent
- if(IsHiddenTalent())
- nBonusPP += 2 * GetHiddenTalentCount(oChar);
+ if(GetHasFeat(FEAT_HIDDEN_TALENT, oChar))
+ nBonusPP += 2;
//:: Psionic Feats
int i;
diff --git a/nwn/nwnprc/trunk/psionics/hidden_talent_cv.nss b/nwn/nwnprc/trunk/psionics/hidden_talent_cv.nss
new file mode 100644
index 00000000..3bd9e992
--- /dev/null
+++ b/nwn/nwnprc/trunk/psionics/hidden_talent_cv.nss
@@ -0,0 +1,174 @@
+//:://////////////////////////////////////////////
+//:: Hidden Talent Power Conversation
+//:: hidden_talent_cv
+//:://////////////////////////////////////////////
+/** @file
+ This allows you to choose a psionic power for Hidden Talent feat
+
+ @author Modified from prc_favsoulweap.nss
+ @date Created - 2025.12.14
+*/
+//:://////////////////////////////////////////////
+//:://////////////////////////////////////////////
+
+#include "prc_inc_fork"
+#include "inc_item_props"
+#include "prc_x2_itemprop"
+#include "inc_dynconv"
+#include "psi_inc_psifunc"
+
+//////////////////////////////////////////////////
+/* Constant defintions */
+//////////////////////////////////////////////////
+
+const int STAGE_POWER_CHOICE = 0;
+const int STAGE_CONFIRMATION = 1;
+
+//////////////////////////////////////////////////
+/* Aid functions */
+//////////////////////////////////////////////////
+
+//////////////////////////////////////////////////
+/* Main function */
+//////////////////////////////////////////////////
+
+void main()
+{
+ //object oPC = GetPCSpeaker();
+ object oPC = OBJECT_SELF;
+ /* Get the value of the local variable set by the conversation script calling
+ * this script. Values:
+ * DYNCONV_ABORTED Conversation aborted
+ * DYNCONV_EXITED Conversation exited via the exit node
+ * DYNCONV_SETUP_STAGE System's reply turn
+ * 0 Error - something else called the script
+ * Other The user made a choice
+ */
+ int nValue = GetLocalInt(oPC, DYNCONV_VARIABLE);
+ // The stage is used to determine the active conversation node.
+ // 0 is the entry node.
+ int nStage = GetStage(oPC);
+
+ if(DEBUG) DoDebug("hidden_talent_cv: Entering Hidden Talent conversation");
+
+ // Check which of the conversation scripts called the scripts
+ if(nValue == 0) // All of them set the DynConv_Var to non-zero value, so something is wrong -> abort
+ return;
+
+ if(nValue == DYNCONV_SETUP_STAGE)
+ {
+ // Check if this stage is marked as already set up
+ // This stops list duplication when scrolling
+ if(!GetIsStageSetUp(nStage, oPC))
+ {
+ // variable named nStage determines the current conversation node
+ // Function SetHeader to set the text displayed to the PC
+ // Function AddChoice to add a response option for the PC. The responses are show in order added
+ if(nStage == STAGE_POWER_CHOICE)
+ {
+ string sHeader1 = "Select a 1st-level psionic power for Hidden Talent.\n";
+ sHeader1 += "This will grant you the ability to manifest this power as a psionic-like ability.";
+ SetHeader(sHeader1);
+
+ // Loop through all Hidden Talent feats (25901-25946)
+ int added = 0;
+ int i;
+ string sFeatName;
+
+ for(i = 25901; i <= 25946; i++)
+ {
+ // Get the feat name from the feats.2da
+ sFeatName = Get2DACache("feats", "NAME", i);
+ if(sFeatName != "" && sFeatName != "****")
+ {
+ // Convert the feat constant name to display name
+ // Remove "FEAT_HIDDEN_TALENT_" and replace underscores with spaces
+ string sDisplayName = GetStringByStrRef(StringToInt(sFeatName));
+ if(sDisplayName == "") sDisplayName = "Power " + IntToString(i);
+
+ AddChoice(sDisplayName, i, oPC);
+ added++;
+ }
+ }
+
+ if(added == 0)
+ {
+ AddChoice("No valid powers found.", 0, oPC);
+ }
+
+ MarkStageSetUp(STAGE_POWER_CHOICE, oPC); // This prevents the setup being run for this stage again until MarkStageNotSetUp is called for it
+ SetDefaultTokens(); // Set the next, previous, exit and wait tokens to default values
+ }
+ else if(nStage == STAGE_CONFIRMATION)//confirmation
+ {
+ int nChoice = GetLocalInt(oPC, "HiddenTalentPower");
+ AddChoice(GetStringByStrRef(4752), TRUE); // "Yes"
+ AddChoice(GetStringByStrRef(4753), FALSE); // "No"
+
+ string sText = "You have selected the Hidden Talent power.\n";
+ sText += "Is this correct?";
+
+ SetHeader(sText);
+ MarkStageSetUp(STAGE_CONFIRMATION, oPC);
+ }
+ }
+
+ // Do token setup
+ SetupTokens();
+ }
+ // End of conversation cleanup
+ else if(nValue == DYNCONV_EXITED)
+ {
+ // End of conversation cleanup
+ DeleteLocalInt(oPC, "HiddenTalentPower");
+ }
+ // Abort conversation cleanup.
+ // NOTE: This section is only run when the conversation is aborted
+ // while aborting is allowed. When it isn't, the dynconvo infrastructure
+ // handles restoring the conversation in a transparent manner
+ else if(nValue == DYNCONV_ABORTED)
+ {
+ // End of conversation cleanup
+ DeleteLocalInt(oPC, "HiddenTalentPower");
+ }
+ // Handle PC responses
+ else
+ {
+ // variable named nChoice is the value of the player's choice as stored when building the choice list
+ // variable named nStage determines the current conversation node
+ int nChoice = GetChoice(oPC);
+ if(nStage == STAGE_POWER_CHOICE)
+ {
+ // Go to this stage next
+ nStage = STAGE_CONFIRMATION;
+ SetLocalInt(oPC, "HiddenTalentPower", nChoice);
+ }
+ else if(nStage == STAGE_CONFIRMATION)//confirmation
+ {
+ if(nChoice == TRUE)
+ {
+ int nFeatID = GetLocalInt(oPC, "HiddenTalentPower");
+
+ // Grant the Hidden Talent feat directly
+ AddSkinFeat(nFeatID, nFeatID, GetPCSkin(oPC), oPC);
+
+ // Mark that Hidden Talent has been chosen
+ SetPersistantLocalInt(oPC, "HiddenTalentChosen", TRUE);
+
+ // And we're all done
+ AllowExit(DYNCONV_EXIT_FORCE_EXIT);
+ }
+ else
+ {
+ nStage = STAGE_POWER_CHOICE;
+ MarkStageNotSetUp(STAGE_POWER_CHOICE, oPC);
+ MarkStageNotSetUp(STAGE_CONFIRMATION, oPC);
+ }
+
+ DeleteLocalInt(oPC, "HiddenTalentPower");
+ }
+
+ // Store the stage value. If it has been changed, this clears out the choices
+ SetStage(nStage, oPC);
+ }
+}
\ No newline at end of file
diff --git a/nwn/nwnprc/trunk/scripts/prc_feats.nss b/nwn/nwnprc/trunk/scripts/prc_feats.nss
index 66f32f8c..2e0fe235 100644
--- a/nwn/nwnprc/trunk/scripts/prc_feats.nss
+++ b/nwn/nwnprc/trunk/scripts/prc_feats.nss
@@ -635,7 +635,7 @@ void PRCFeat_AddBonusFeats(object oPC, object oSkin)
if(!GetHasFeat(FEAT_COMBAT_MOVE_3, oPC))
AddSkinFeat(FEAT_COMBAT_MOVE_3, IP_CONST_FEAT_COMBAT_MOVE_3, oSkin, oPC);
- if(GetHasFeat(FEAT_WILD_TALENT, oPC))
+ if(GetHasFeat(FEAT_WILD_TALENT, oPC) || (GetHasFeat(FEAT_HIDDEN_TALENT, oPC)))
AddSkinFeat(FEAT_PSIONIC_FOCUS, IP_CONST_FEAT_PSIONIC_FOCUS, oSkin, oPC);
if(IsHiddenTalent())
diff --git a/nwn/nwnprc/trunk/scripts/prc_levelup.nss b/nwn/nwnprc/trunk/scripts/prc_levelup.nss
index 6d55fce8..8c567e40 100644
--- a/nwn/nwnprc/trunk/scripts/prc_levelup.nss
+++ b/nwn/nwnprc/trunk/scripts/prc_levelup.nss
@@ -60,7 +60,14 @@ void main()
ExecuteScript("prc_vassal_treas", oPC);
ExecuteScript("tob_evnt_recover", oPC);
ExecuteScript("moi_wchb_royal", oPC);
-
+
+ // Handle Hidden Talent
+ if(GetHasFeat(FEAT_HIDDEN_TALENT, oPC) && !GetPersistantLocalInt(oPC, "HiddenTalentChosen"))
+ {
+ // Trigger Hidden Talent power selection conversation
+ AssignCommand(oPC, ActionStartConversation(oPC, "hidden_talent_cv", TRUE, FALSE));
+ }
+
// Execute scripts hooked to this event for the player triggering it
ExecuteAllScriptsHookedToEvent(oPC, EVENT_ONPLAYERLEVELUP);
if(DEBUG) DoDebug("prc_levelup: Exiting");
diff --git a/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml b/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml
index d3db89a8..910564ed 100644
--- a/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml
+++ b/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml
@@ -5286,8 +5286,7 @@ Baelnorn Properties: +8 bonus to Hide, Listen, Move Silently, Search, Persuade,
Myconid
Algoid
****
- ****
-
+ ****
****
****
Abundant Step (Su)
@@ -14756,8 +14755,7 @@ Level:
Archetypal Form
Type of Feat: Builder's Tool
Prerequisite: A creature you don't want people to polymorph into
-Specifics: The presence of this feat on a creature, as tested for using GetHasFeat(), prevents the use of it as a template
-by users of PRC polymorphing mechanics (PnP Shifter, Soul Eater, etc.)
+Specifics: The presence of this feat on a creature, as tested for using GetHasFeat(), prevents the use of it as a template by users of PRC polymorphing mechanics (PnP Shifter, Soul Eater, etc.)
Use: Automatic, used in the function GetCanShiftIntoCreature() in prc_inc_shifting
Soak 4 Damage
Soak 6 Damage
@@ -76094,4 +76092,4 @@ Specifics: You gain a +4 perfection bonus on Will saving throws against charm an
Type of Feat: Exalted
Prerequisite: Wis 13+
Specifics: You gain a +2 bonus on saving throws to resist any fear effect, despair effect (such as the crushing despair spell), or similar mind-affecting condition, but not charms or compulsions (such as the charm person and dominate person spells)
-
+
\ No newline at end of file
diff --git a/nwn/nwnprc/trunk/users/Jaysyn/imprint_power_stone.nss b/nwn/nwnprc/trunk/users/Jaysyn/imprint_power_stone.nss
new file mode 100644
index 00000000..f0df5ba0
--- /dev/null
+++ b/nwn/nwnprc/trunk/users/Jaysyn/imprint_power_stone.nss
@@ -0,0 +1,239 @@
+// -----------------------------------------------------------------------------
+// Returns TRUE if the player used the last power to create a power stone
+// -----------------------------------------------------------------------------
+int CICraftCheckImprintPowerStone(object oSpellTarget, object oCaster, int nPowerID = 0)
+{
+ if(nPowerID == 0) nPowerID = PRCGetSpellId(); // Using same function for powers
+
+ // -------------------------------------------------------------------------
+ // check if imprint stone feat is there
+ // -------------------------------------------------------------------------
+ if (GetHasFeat(FEAT_IMPRINT_STONE, oCaster) != TRUE) // Placeholder feat constant
+ {
+ FloatingTextStrRefOnCreature(40487, oCaster); // Item Creation Failed - Don't know how to create that type of item
+ return TRUE;
+ }
+
+ // -------------------------------------------------------------------------
+ // Check if the power is allowed to be used with Imprint Stone
+ // -------------------------------------------------------------------------
+ if (CIGetIsSpellRestrictedFromCraftFeat(nPowerID, FEAT_IMPRINT_STONE)) // Using same restriction function
+ {
+ FloatingTextStrRefOnCreature(83451, oCaster); // can not be used with this feat
+ return TRUE;
+ }
+
+ // -------------------------------------------------------------------------
+ // XP/GP Cost Calculation
+ // -------------------------------------------------------------------------
+ int nPowerLevel = CIGetSpellInnateLevel(nPowerID,TRUE); // Using same function for power level
+ int nManifesterLevel = GetManifesterLevel(oCaster); // Placeholder function for manifester level
+ int nCost = nPowerLevel * nManifesterLevel * 25; // Power stone formula: level × manifester level × 25 gp
+
+ struct craft_cost_struct costs = GetModifiedCostsFromBase(nCost, oCaster, FEAT_IMPRINT_STONE, FALSE);
+
+ // -------------------------------------------------------------------------
+ // Does Player have enough gold?
+ // -------------------------------------------------------------------------
+ if(!GetHasGPToSpend(oCaster, costs.nGoldCost))
+ {
+ FloatingTextStrRefOnCreature(3786, oCaster); // Item Creation Failed - not enough gold!
+ return TRUE;
+ }
+
+ int nHD = GetHitDice(oCaster);
+ int nMinXPForLevel = ((nHD * (nHD - 1)) / 2) * 1000;
+ int nNewXP = GetXP(oCaster) - costs.nXPCost;
+
+ // -------------------------------------------------------------------------
+ // check for sufficient XP to cast power
+ // -------------------------------------------------------------------------
+ if (!GetHasXPToSpend(oCaster, costs.nXPCost))
+ {
+ FloatingTextStrRefOnCreature(3785, oCaster); // Item Creation Failed - Not enough XP
+ return TRUE;
+ }
+
+ //check power emulation (using same function)
+ if(!CheckAlternativeCrafting(oCaster, nPowerID, costs))
+ {
+ FloatingTextStringOnCreature("*Crafting failed!*", oCaster, FALSE);
+ return TRUE;
+ }
+
+ // -------------------------------------------------------------------------
+ // Here we imprint the power stone
+ // -------------------------------------------------------------------------
+ object oPowerStone = CICraftImprintPowerStone(oCaster, nPowerID); // New function to create power stone
+
+ // -------------------------------------------------------------------------
+ // Verify Results
+ // -------------------------------------------------------------------------
+ if (GetIsObjectValid(oPowerStone))
+ {
+ SetIdentified(oPowerStone,TRUE);
+ ActionPlayAnimation (ANIMATION_FIREFORGET_READ,1.0);
+ SpendXP(oCaster, costs.nXPCost);
+ SpendGP(oCaster, costs.nGoldCost);
+ DestroyObject (oSpellTarget);
+ FloatingTextStrRefOnCreature(8502, oCaster); // Item Creation successful
+
+ //advance time here (1 day per 1000 gp of base price)
+ int nTimeCost = nCost / 1000;
+ if(nTimeCost < 1) nTimeCost = 1;
+ AdvanceTimeForPlayer(oCaster, RoundsToSeconds(nTimeCost * 24 * 60)); // Convert days to rounds
+ return TRUE;
+ }
+ else
+ {
+ FloatingTextStrRefOnCreature(76417, oCaster); // Item Creation Failed
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+
+/ -----------------------------------------------------------------------------
+// Create and Return a power stone with an item property
+// matching nPowerID.
+// -----------------------------------------------------------------------------
+object CICraftImprintPowerStone(object oCreator, int nPowerID)
+{
+ if (DEBUG) DoDebug("CICraftImprintPowerStone: Enter (nPowerID=" + IntToString(nPowerID) + ")");
+
+ // Keep original and compute one-step master (if subradial)
+ int nPowerOriginal = nPowerID;
+ int nPowerMaster = nPowerOriginal;
+ if (GetIsSubradialSpell(nPowerOriginal))
+ {
+ nPowerMaster = GetMasterSpellFromSubradial(nPowerOriginal);
+ if (DEBUG) DoDebug("CICraftImprintPowerStone: subradial detected original=" + IntToString(nPowerOriginal) + " master=" + IntToString(nPowerMaster));
+ }
+
+ // Prefer iprp mapping for the original, fallback to master
+ int nPropID = IPGetIPConstCastSpellFromSpellID(nPowerOriginal);
+ int nPowerUsedForIP = nPowerOriginal;
+ if (nPropID < 0)
+ {
+ if (DEBUG) DoDebug("CICraftImprintPowerStone: no iprp for original " + IntToString(nPowerOriginal) + ", trying master " + IntToString(nPowerMaster));
+ nPropID = IPGetIPConstCastSpellFromSpellID(nPowerMaster);
+ nPowerUsedForIP = nPowerMaster;
+ }
+
+ // If neither original nor master has an iprp row, we can still try templates,
+ // but most templates expect a matching iprp. Bail out now if nothing found.
+ if (nPropID < 0)
+ {
+ if (DEBUG) DoDebug("CICraftImprintPowerStone: no iprp_spells entry for original/master -> aborting");
+ FloatingTextStringOnCreature("This power cannot be imprinted (no item property mapping).", oCreator, FALSE);
+ return OBJECT_INVALID;
+ }
+
+ if (DEBUG) DoDebug("CICraftImprintPowerStone: using power " + IntToString(nPowerUsedForIP) + " (iprp row " + IntToString(nPropID) + ") for item property");
+
+ // Material component check (based on resolved iprp row)
+ string sMat = GetMaterialComponentTag(nPropID);
+ if (sMat != "")
+ {
+ object oMat = GetItemPossessedBy(oCreator, sMat);
+ if (oMat == OBJECT_INVALID)
+ {
+ FloatingTextStrRefOnCreature(83374, oCreator); // Missing material component
+ return OBJECT_INVALID;
+ }
+ else
+ {
+ DestroyObject(oMat);
+ }
+ }
+
+ // Resolve manifester class and power stone template
+ int nClass = PRCGetLastSpellCastClass(); // Using same function for power manifestation class
+ string sClass = "";
+ switch (nClass)
+ {
+ case CLASS_TYPE_PSION: sClass = "Psion"; break;
+ case CLASS_TYPE_PSYCHIC_WARRIOR: sClass = "PsychicWarrior"; break;
+ case CLASS_TYPE_WILDER: sClass = "Wilder"; break;
+ }
+
+ object oTarget = OBJECT_INVALID;
+ string sResRef = "";
+
+ // Try to find a class-specific power stone template
+ if (sClass != "")
+ {
+ // Try original first (so if you made a subradial-specific template it will be used)
+ sResRef = Get2DACache("des_crft_powerstone", sClass, nPowerOriginal);
+ if (sResRef == "")
+ {
+ // fallback to the power that matched an iprp row (master or original)
+ sResRef = Get2DACache("des_crft_powerstone", sClass, nPowerUsedForIP);
+ }
+ if (sResRef != "")
+ {
+ oTarget = CreateItemOnObject(sResRef, oCreator);
+ if (DEBUG) DoDebug("CICraftImprintPowerStone: created template " + sResRef + " for class " + sClass);
+ // Ensure template uses the correct cast-spell property: replace the template's cast-spell IP with ours
+ if (oTarget != OBJECT_INVALID)
+ {
+ itemproperty ipIter = GetFirstItemProperty(oTarget);
+ while (GetIsItemPropertyValid(ipIter))
+ {
+ if (GetItemPropertyType(ipIter) == ITEM_PROPERTY_CAST_SPELL)
+ {
+ RemoveItemProperty(oTarget, ipIter);
+ break;
+ }
+ ipIter = GetNextItemProperty(oTarget);
+ }
+ itemproperty ipPower = ItemPropertyCastSpell(nPropID, IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE);
+ AddItemProperty(DURATION_TYPE_PERMANENT, ipPower, oTarget);
+ }
+ }
+ }
+
+ // If no template or sClass was empty, create generic power stone and add itemprop.
+ if (oTarget == OBJECT_INVALID)
+ {
+ sResRef = "craft_powerstone";
+ oTarget = CreateItemOnObject(sResRef, oCreator);
+ if (oTarget == OBJECT_INVALID)
+ {
+ WriteTimestampedLogEntry("CICraftImprintPowerStone: failed to create craft_powerstone template.");
+ return OBJECT_INVALID;
+ }
+ // Remove existing default IP and add correct one
+ itemproperty ipFirst = GetFirstItemProperty(oTarget);
+ if (GetIsItemPropertyValid(ipFirst))
+ RemoveItemProperty(oTarget, ipFirst);
+
+ itemproperty ipPower = ItemPropertyCastSpell(nPropID, IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE);
+ AddItemProperty(DURATION_TYPE_PERMANENT, ipPower, oTarget);
+ }
+
+ // Add PRC metadata (use the same power that matched the iprp row so metadata and IP line up)
+ if (GetPRCSwitch(PRC_SCRIBE_SCROLL_CASTER_LEVEL)) // Reusing same switch for power stones
+ {
+ int nManifesterLevel = GetManifesterLevel(oCreator); // Placeholder function
+ itemproperty ipLevel = ItemPropertyCastSpellCasterLevel(nPowerUsedForIP, nManifesterLevel);
+ AddItemProperty(DURATION_TYPE_PERMANENT, ipLevel, oTarget);
+
+ itemproperty ipMeta = ItemPropertyCastSpellMetamagic(nPowerUsedForIP, PRCGetMetaMagicFeat());
+ AddItemProperty(DURATION_TYPE_PERMANENT, ipMeta, oTarget);
+
+ int nDC = PRCGetSpellSaveDC(nPowerUsedForIP, GetSpellSchool(nPowerUsedForIP), OBJECT_SELF);
+ itemproperty ipDC = ItemPropertyCastSpellDC(nPowerUsedForIP, nDC);
+ AddItemProperty(DURATION_TYPE_PERMANENT, ipDC, oTarget);
+ }
+
+ if (oTarget == OBJECT_INVALID)
+ {
+ WriteTimestampedLogEntry("prc_x2_craft::CICraftImprintPowerStone failed - Resref: " + sResRef + " Class: " + sClass + "(" + IntToString(nClass) + ") " + " PowerID " + IntToString(nPowerID));
+ return OBJECT_INVALID;
+ }
+
+ if (DEBUG) DoDebug("CICraftImprintPowerStone: Success - created power stone " + sResRef + " for power " + IntToString(nPowerUsedForIP));
+ return oTarget;
+}
\ No newline at end of file