From 5f749871cd54dcf1377ed64bd7cdfadb8996614f Mon Sep 17 00:00:00 2001 From: Jaysyn904 <68194417+Jaysyn904@users.noreply.github.com> Date: Sun, 14 Dec 2025 22:31:30 -0500 Subject: [PATCH] 2025/12/14 Late Update Moved Hidden Talent a from a masterfeat to a dynamic conversation. Updated PRC8 version number. --- nwn/nwnprc/trunk/2das/feat.2da | 94 +++---- nwn/nwnprc/trunk/2das/masterfeats.2da | 254 +++++++++--------- nwn/nwnprc/trunk/include/prc_feat_const.nss | 1 + nwn/nwnprc/trunk/include/prc_inc_function.nss | 2 +- nwn/nwnprc/trunk/include/prc_inc_switch.nss | 2 +- nwn/nwnprc/trunk/include/psi_inc_core.nss | 53 ++++ nwn/nwnprc/trunk/include/psi_inc_ppoints.nss | 4 +- .../trunk/psionics/hidden_talent_cv.nss | 174 ++++++++++++ nwn/nwnprc/trunk/scripts/prc_feats.nss | 2 +- nwn/nwnprc/trunk/scripts/prc_levelup.nss | 9 +- nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml | 8 +- .../users/Jaysyn/imprint_power_stone.nss | 239 ++++++++++++++++ 12 files changed, 657 insertions(+), 185 deletions(-) create mode 100644 nwn/nwnprc/trunk/psionics/hidden_talent_cv.nss create mode 100644 nwn/nwnprc/trunk/users/Jaysyn/imprint_power_stone.nss 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