Polymorph Self
-
Just keeping this here, need to covnert it to 2da later
Name Race Port NWep1 Nwep2 Nwep3 Hide Weap S/D/C AC Hp Pixie Fey po_pixie_ Claw1d2 *** *** Grig/Pixie porperties Dagger 7/18/11 1 *** Sahuagin Reptilian po_sahuagin_ Claw1d4 Claw1d4 Bite 1d4 *** Trident 14/13/12 5 2 Dryad Fey po_dryad_ *** *** *** *** Dagger 10/15/11 *** *** Ochre Jelly Ooze po_ochrejelly_ *** *** Ochre SlamMed Ochre Prop Med *** 15/3/15 *** 8 Nymph Fey po_nymph_ *** *** *** *** Dagger 10/13/10 *** *** Grey Ooze Ooze po_grayooze_ *** *** Gray ooze slam Gray ooze props *** 12/3/11 *** *** Blink Dog Magical Beast po_blinkdog_ *** *** Bite 1d6 *** *** 10/17/10 3 *** Satyr Fey po_satyr_ *** *** Slam 1d6 *** *** 10/13/12 4 5 Wyvern Dragon po_wyvern_ Claw 2d6 Bite 2d7 Wyvern Tail *** *** 22/12/16 10 36
-
Regarding the transgender thing - it only applies to level 14+ so far, so it can't matter much. If you want to add the gender control I suggest doing it like so:
else if(ComparePolyStr(sFormID, "FROST GIANT")) { nPoly = (nFemale?308:259); nHD = 14; } ```Just set nFemale at the start to either TRUE or FALSE.
-
324 POLYMORPH_TYPE_WS_PARROT 325 POLYMORPH_TYPE_WS_SEAGULL 326 POLYMORPH_TYPE_WS_HORSE 327 POLYMORPH_TYPE_WS_SNAKE 328 POLYMORPH_TYPE_PS_PIXIE 329 POLYMORPH_TYPE_WS_SAHUAGIN 330 POLYMORPH_TYPE_PS_DRYAD 331 POLYMORPH_TYPE_WS_OCHREJELLY 332 POLYMORPH_TYPE_PS_NYMPH 333 POLYMORPH_TYPE_WS_GREYOOZE 334 POLYMORPH_TYPE_WS_BLINKDOG 335 POLYMORPH_TYPE_PS_SATYR 336 POLYMORPH_TYPE_WS_WYVERN
Will be the numeric codes for the new ones
-
There are two chickens.
BoMbardier beetle has a typo.
Grizzly turns to water elemental. Check code. -
@omg:
There are two chickens.
BoMbardier beetle has a typo.
Grizzly turns to water elemental. Check code.'Adding my own botchups.
Pixie not working.
Wyvern not working
Satyr not working.
Grey Ooze not working
Ochre not working.
Parrot not working.
Seagull becomes a Satyr.
Horse becomes a wyvern.
Sahuaging becoming an emerald golem.
Snake makes a nightmare -
And the present iteration of code
#include "x2_inc_spellhook" // Returns true if sCreatureName starts with sFormID int ComparePolyStr(string sFormID, string sCreatureName) { return GetStringLeft(sCreatureName, GetStringLength(sFormID)) == sFormID; } void main() { /* Spellcast Hook Code Added 2003-06-23 by GeorgZ If you want to make changes to all spells, check x2_inc_spellhook.nss to find out more */ if (!X2PreSpellCastCode()) { // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell return; } // End of Spell Cast Hook // No spell if already polymorphed. if (GetHasEffect(EFFECT_TYPE_POLYMORPH, OBJECT_SELF)) return; //Declare major variables object oTarget = GetSpellTargetObject(); effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH); effect ePoly; int nPoly = 0; int nHD = 0; string sFormID = GetStringUpperCase(GetLocalString(OBJECT_SELF, "sPolyFormID")); int nCasterLevel = GetCasterLevel(OBJECT_SELF); int nTargetHD = GetHitDice(oTarget); // Determine duration int nMetaMagic = GetMetaMagicFeat(); int nDuration = nCasterLevel; if (nMetaMagic == METAMAGIC_EXTEND) { nDuration = nDuration *2; //Duration is +100% } // -------------------------------- // --- Determine Polymorph type --- // HD 1 if(ComparePolyStr(sFormID, "EYEBALL")) { nPoly = 213; nHD = 1; } else if(ComparePolyStr(sFormID, "GOBLIN")) { nPoly = 157; nHD = 1; } else if(ComparePolyStr(sFormID, "HOBGOBLIN")) { nPoly = 163; nHD = 1; } else if(ComparePolyStr(sFormID, "KOBOLD")) { nPoly = 165; nHD = 1; } else if(ComparePolyStr(sFormID, "ORC")) { nPoly = 166; nHD = 1; } else if(ComparePolyStr(sFormID, "FIRE BEETLE")) { nPoly = 177; nHD = 1; } else if(ComparePolyStr(sFormID, "CHICKEN")) { nPoly = 40; nHD = 1; } else if(ComparePolyStr(sFormID, "FALCON")) { nPoly = 133; nHD = 1; } else if(ComparePolyStr(sFormID, "PENGUIN")) { nPoly = 26; nHD = 1; } else if(ComparePolyStr(sFormID, "RAVEN")) { nPoly = 134; nHD = 1; } else if(ComparePolyStr(sFormID, "RAT")) { nPoly = 144; nHD = 1; } else if(ComparePolyStr(sFormID, "OX")) { nPoly = 143; nHD = 1; } else if(ComparePolyStr(sFormID, "BADGER")) { nPoly = 25; nHD = 1; } else if(ComparePolyStr(sFormID, "BAT")) { nPoly = 140; nHD = 1; } else if(ComparePolyStr(sFormID, "COW")) { nPoly = 27; nHD = 1; } else if(ComparePolyStr(sFormID, "DEER")) { nPoly = 142; nHD = 1; } else if(ComparePolyStr(sFormID, "DIRE RAT")) { nPoly = 149; nHD = 1; } else if(ComparePolyStr(sFormID, "CHICKEN")) { nPoly = 40; nHD = 1; } else if(ComparePolyStr(sFormID, "WHITE STAG")) { nPoly = 145; nHD = 1; } else if(ComparePolyStr(sFormID, "PARROT")) { nPoly = 324; nHD = 1; } else if(ComparePolyStr(sFormID, "SEAGULL")) { nPoly = 325; nHD = 1; } else if(ComparePolyStr(sFormID, "HORSE")) { nPoly = 326; nHD = 1; } // HD 2 else if(ComparePolyStr(sFormID, "TROGLODYTE")) { nPoly = 312; nHD = 2; } else if(ComparePolyStr(sFormID, "LIZARDFOLK")) { nPoly = 170; nHD = 2; } else if(ComparePolyStr(sFormID, "GNOLL")) { nPoly = 158; nHD = 2; } else if(ComparePolyStr(sFormID, "DEEP ROTHE")) { nPoly = 190; nHD = 2; } else if(ComparePolyStr(sFormID, "KRENSHAR")) { nPoly = 194; nHD = 2; } else if(ComparePolyStr(sFormID, "BOMBADIER BEETLE")) { nPoly = 176; nHD = 2; } else if(ComparePolyStr(sFormID, "FAERIE DRAGON")) { nPoly = 224; nHD = 2; } else if(ComparePolyStr(sFormID, "PSEUDODRAGON")) { nPoly = 225; nHD = 2; } else if(ComparePolyStr(sFormID, "DOG")) { nPoly = 130; nHD = 2; } else if(ComparePolyStr(sFormID, "WOLF")) { nPoly = 23; nHD = 2; } else if(ComparePolyStr(sFormID, "SAHUAGIN")) { nPoly = 329; nHD = 2; } else if(ComparePolyStr(sFormID, "DRYAD")) { nPoly = 330; nHD = 2; } else if(ComparePolyStr(sFormID, "OCHRE JELLY")) { nPoly = 331; nHD = 2; } // HD 3 else if(ComparePolyStr(sFormID, "BUGBEAR")) { nPoly = 152; nHD = 3; } else if(ComparePolyStr(sFormID, "SEA HAG")) { nPoly = 168; nHD = 3; } else if(ComparePolyStr(sFormID, "STINK BEETLE")) { nPoly = 179; nHD = 3; } else if(ComparePolyStr(sFormID, "SWORD SPIDER")) { nPoly = 181; nHD = 3; } else if(ComparePolyStr(sFormID, "WYRMLING WHITE DRAGON")) { nPoly = 235; nHD = 3; } else if(ComparePolyStr(sFormID, "BLACK BEAR")) { nPoly = 131; nHD = 3; } else if(ComparePolyStr(sFormID, "COUGAR")) { nPoly = 135; nHD = 3; } else if(ComparePolyStr(sFormID, "CRAG CAT")) { nPoly = 136; nHD = 3; } else if(ComparePolyStr(sFormID, "LEOPARD")) { nPoly = 138; nHD = 3; } else if(ComparePolyStr(sFormID, "PANTHER")) { nPoly = 22; nHD = 3; } else if(ComparePolyStr(sFormID, "BOAR")) { nPoly = 24; nHD = 3; } else if(ComparePolyStr(sFormID, "DIRE BADGER")) { nPoly = 37; nHD = 3; } else if(ComparePolyStr(sFormID, "SNAKE")) { nPoly = 327; nHD = 3; } else if(ComparePolyStr(sFormID, "NYMPH")) { nPoly = 332; nHD = 3; } else if(ComparePolyStr(sFormID, "GRAY OOZE")) { nPoly = 333; nHD = 3; } // HD 4 else if(ComparePolyStr(sFormID, "OGRE")) { nPoly = 174; nHD = 4; } else if(ComparePolyStr(sFormID, "STINGER")) { nPoly = 169; nHD = 4; } else if(ComparePolyStr(sFormID, "GELATINOUS CUBE")) { nPoly = 208; nHD = 4; } else if(ComparePolyStr(sFormID, "GARGOYLE")) { nPoly = 191; nHD = 4; } else if(ComparePolyStr(sFormID, "GIANT SPIDER")) { nPoly = 180; nHD = 4; } else if(ComparePolyStr(sFormID, "WYRMLING BLACK DRAGON")) { nPoly = 226; nHD = 4; } else if(ComparePolyStr(sFormID, "WYRMLING BRASS DRAGON")) { nPoly = 228; nHD = 4; } else if(ComparePolyStr(sFormID, "WORG")) { nPoly = 258; nHD = 4; } else if(ComparePolyStr(sFormID, "BLINK DOG")) { nPoly = 334; nHD = 4; } // HD 5 else if(ComparePolyStr(sFormID, "ETTERCAP")) { nPoly = 212; nHD = 5; } else if(ComparePolyStr(sFormID, "HOOK HORROR")) { nPoly = 214; nHD = 5; } else if(ComparePolyStr(sFormID, "COCKATRICE")) { nPoly = 189; nHD = 5; } else if(ComparePolyStr(sFormID, "WYRMLING COPPER DRAGON")) { nPoly = 230; nHD = 5; } else if(ComparePolyStr(sFormID, "WYRMLING GREEN DRAGON")) { nPoly = 232; nHD = 5; } else if(ComparePolyStr(sFormID, "JAGUAR")) { nPoly = 137; nHD = 5; } else if(ComparePolyStr(sFormID, "LION")) { nPoly = 139; nHD = 5; } else if(ComparePolyStr(sFormID, "SATYR")) { nPoly = 335; nHD = 5; } // HD 6 else if(ComparePolyStr(sFormID, "DRIDER")) { nPoly = 211; nHD = 6; } else if(ComparePolyStr(sFormID, "FEMALE DRIDER")) { nPoly = 307; nHD = 6; } else if(ComparePolyStr(sFormID, "INTELLECT DEVOURER")) { nPoly = 215; nHD = 6; } else if(ComparePolyStr(sFormID, "TROLL")) { nPoly = 175; nHD = 6; } else if(ComparePolyStr(sFormID, "YUAN-TI")) { nPoly = 171; nHD = 6; } else if(ComparePolyStr(sFormID, "MINOTAUR")) { nPoly = 172; nHD = 6; } else if(ComparePolyStr(sFormID, "MEDUSA")) { nPoly = 167; nHD = 6; } else if(ComparePolyStr(sFormID, "BASILISK")) { nPoly = 197; nHD = 6; } else if(ComparePolyStr(sFormID, "MANTICORE")) { nPoly = 195; nHD = 6; } else if(ComparePolyStr(sFormID, "WYRMLING BLUE DRAGON")) { nPoly = 227; nHD = 6; } else if(ComparePolyStr(sFormID, "WYRMLING BRONZE DRAGON")) { nPoly = 229; nHD = 6; } else if(ComparePolyStr(sFormID, "BROWN BEAR")) { nPoly = 21; nHD = 6; } else if(ComparePolyStr(sFormID, "WINTER WOLF")) { nPoly = 257; nHD = 6; } else if(ComparePolyStr(sFormID, "DIRE WOLF")) { nPoly = 35; nHD = 6; } // HD 7 else if(ComparePolyStr(sFormID, "HARPY")) { nPoly = 173; nHD = 7; } else if(ComparePolyStr(sFormID, "STAG BEETLE")) { nPoly = 178; nHD = 7; } else if(ComparePolyStr(sFormID, "WYRMLING RED DRAGON")) { nPoly = 233; nHD = 7; } else if(ComparePolyStr(sFormID, "WYRMLING SILVER DRAGON")) { nPoly = 234; nHD = 7; } else if(ComparePolyStr(sFormID, "DIRE BOAR")) { nPoly = 36; nHD = 7; } // HD 8 else if(ComparePolyStr(sFormID, "MIND FLAYER")) { nPoly = 216; nHD = 8; } else if(ComparePolyStr(sFormID, "UMBER HULK")) { nPoly = 217; nHD = 8; } else if(ComparePolyStr(sFormID, "GORGON")) { nPoly = 192; nHD = 8; } else if(ComparePolyStr(sFormID, "SPHINX")) { nPoly = 193; nHD = 8; } else if(ComparePolyStr(sFormID, "WYRMLING GOLD DRAGON")) { nPoly = 231; nHD = 8; } else if(ComparePolyStr(sFormID, "POLAR BEAR")) { nPoly = 148; nHD = 8; } else if(ComparePolyStr(sFormID, "GRIZZLY BEAR")) { nPoly = 14; nHD = 8; } // HD 9 else if(ComparePolyStr(sFormID, "BATTLE DEVOURER")) { nPoly = 209; nHD = 9; } else if(ComparePolyStr(sFormID, "WILL O WISP")) { nPoly = 218; nHD = 9; } else if(ComparePolyStr(sFormID, "BULLETTE")) { nPoly = 313; nHD = 9; } // HD 10 else if(ComparePolyStr(sFormID, "ETTIN")) { nPoly = 187; nHD = 10; } else if(ComparePolyStr(sFormID, "GREY RENDER")) { nPoly = 221; nHD = 10; } else if(ComparePolyStr(sFormID, "DIRE SPIDER")) { nPoly = 188; nHD = 10; } // HD 11 else if(ComparePolyStr(sFormID, "BEHOLDER")) { nPoly = 210; nHD = 11; } // HD 12 else if(ComparePolyStr(sFormID, "HILL GIANT")) { nPoly = 222; nHD = 12; } else if(ComparePolyStr(sFormID, "DIRE BEAR")) { nPoly = 33; nHD = 12; } else if(ComparePolyStr(sFormID, "WYVERN")) { nPoly = 336; nHD = 12; } // HD 13 // HD 14 else if(ComparePolyStr(sFormID, "FROST GIANT")) { nPoly = 259; nHD = 14; } else if(ComparePolyStr(sFormID, "FROST GIANT FEMALE")) { nPoly = 308; nHD = 14; } // HD 15 else if(ComparePolyStr(sFormID, "FIRE GIANT")) { nPoly = 289; nHD = 14; } else if(ComparePolyStr(sFormID, "FIRE GIANT FEMALE")) { nPoly = 309; nHD = 15; } // Couldn't determine the form if (nPoly == 0) { SendMessageToPC(OBJECT_SELF, "Unknown form type. Check spelling."); // Default to chicken! nPoly = 40; } // Caster level not high enough for the form if (nHD > nCasterLevel) { SendMessageToPC(OBJECT_SELF, "Caster level is too low for this form."); // Default to chicken! nPoly = 40; } // Target hasn't enough HD for the form if (nHD > nTargetHD) { SendMessageToPC(OBJECT_SELF, "Target doesn't have enough HD for this form."); // Default to chicken! nPoly = 40; } ePoly = EffectPolymorph(nPoly); //Fire cast spell at event for the specified target SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_POLYMORPH_SELF, FALSE)); //Apply the VFX impact and effects AssignCommand(oTarget, ClearAllActions()); // prevents an exploit ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ePoly, oTarget, TurnsToSeconds(nDuration)); }
-
There are two chickens. - Fixed
BoMbardier beetle has a typo. - Fixed, was missing the first R
Grizzly turns to water elemental - Fixed, missing a 7 on the end
Pixie not working. - Heh, was missing from the code entirelySeagull becomes a Satyr. < it's the proper 325 in the script, but is registering as 335
Horse becomes a wyvern. <- again, jumping 10 spots higher.
Sahuaging becoming an emerald golem. <- 10 spots once more
Snake makes a nightmare < - and the sameWyvern not working
Satyr not working.
Grey Ooze not working
Ochre not working.
Parrot not working. -
Seagull becomes a Satyr. < it's the proper 325 in the script, but is registering as 335
Horse becomes a wyvern. <- again, jumping 10 spots higher.
Sahuaging becoming an emerald golem. <- 10 spots once more
Snake makes a nightmare < - and the sameWyvern not working
Satyr not working.
Grey Ooze not working
Ochre not working.
Parrot not working.I'm speculating these errors are because my 2da numbers aren't consecutive, since I skipped lines (it goes from 313 to 324, which is the same as the skip) to match the numbers for coa plug'n'play, gonna try filling in some placeholders.
-
Righto, errors are dead now.
Going to add the optional switch for splitting the forms up
Normal = Animal, Humanoid, Giant, Fey
Spell Focus = Dragon, Magical Beast, Vermin,
Greater Spell Focus = Abberation, Ooze -
As lovely as transgender polymorphing is, the male/female options should probably just go off the players gender with a check under the "FIRE GIANT" "FROST GIANT" etc
Magic people are not really bound by gender in magic. See Elminster Aumar/Elmara.
-
And with those added, flipped the default to Pixie (the only form from the previous polymorph self that is available to absolutely everyone), and added weapon property merging (otherwise many forms would be rendered combat useless by DR of any sort)
Here we go
//:://///////////////////////////////////////////// //:: Polymorph Self //:: NW_S0_PolySelf.nss //:: Copyright (c) 2001 Bioware Corp. //::////////////////////////////////////////////// /* The PC is able to changed their form to one of several forms. */ //::////////////////////////////////////////////// //:: Created By: Preston Watamaniuk //:: Created On: Jan 21, 2002 //::////////////////////////////////////////////// #include "x2_inc_spellhook" // Returns true if sCreatureName starts with sFormID int ComparePolyStr(string sFormID, string sCreatureName) { return GetStringLeft(sCreatureName, GetStringLength(sFormID)) == sFormID; } void main() { /* Spellcast Hook Code Added 2003-06-23 by GeorgZ If you want to make changes to all spells, check x2_inc_spellhook.nss to find out more */ if (!X2PreSpellCastCode()) { // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell return; } // End of Spell Cast Hook // No spell if already polymorphed. if (GetHasEffect(EFFECT_TYPE_POLYMORPH, OBJECT_SELF)) return; //Declare major variables object oTarget = GetSpellTargetObject(); effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH); effect ePoly; int nPoly = 0; int nHD = 0; string sFormID = GetStringUpperCase(GetLocalString(OBJECT_SELF, "sPolyFormID")); int nFeatTier = 0; //used for the splitting forms apart for Spell Focus and //greater spell focus transmutation. Uncomment line 226 to disable int nCasterLevel = GetCasterLevel(OBJECT_SELF); int nTargetHD = GetHitDice(oTarget); // Determine duration int nMetaMagic = GetMetaMagicFeat(); int nDuration = nCasterLevel; if (nMetaMagic == METAMAGIC_EXTEND) { nDuration = nDuration *2; //Duration is +100% } // -------------------------------- // --- Determine Polymorph type --- // HD 1 if(ComparePolyStr(sFormID, "EYEBALL")) { nPoly = 213; nHD = 1; nFeatTier = 2;} else if(ComparePolyStr(sFormID, "GOBLIN")) { nPoly = 157; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "HOBGOBLIN")) { nPoly = 163; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "KOBOLD")) { nPoly = 165; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "ORC")) { nPoly = 166; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "FIRE BEETLE")) { nPoly = 177; nHD = 1; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "CHICKEN")) { nPoly = 40; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "FALCON")) { nPoly = 133; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "PENGUIN")) { nPoly = 26; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "RAVEN")) { nPoly = 134; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "RAT")) { nPoly = 144; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "OX")) { nPoly = 143; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "BADGER")) { nPoly = 25; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "BAT")) { nPoly = 140; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "COW")) { nPoly = 27; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "DEER")) { nPoly = 142; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "DIRE RAT")) { nPoly = 149; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "WHITE STAG")) { nPoly = 145; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "PARROT")) { nPoly = 324; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "SEAGULL")) { nPoly = 325; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "HORSE")) { nPoly = 326; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "PIXIE")) { nPoly = 328; nHD = 1; nFeatTier = 0;} // HD 2 else if(ComparePolyStr(sFormID, "TROGLODYTE")) { nPoly = 312; nHD = 2; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "LIZARDFOLK")) { nPoly = 170; nHD = 2; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "GNOLL")) { nPoly = 158; nHD = 2; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "DEEP ROTHE")) { nPoly = 190; nHD = 2; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "KRENSHAR")) { nPoly = 194; nHD = 2; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "BOMBARDIER BEETLE")) { nPoly = 176; nHD = 2; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "FAERIE DRAGON")) { nPoly = 224; nHD = 2; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "PSEUDODRAGON")) { nPoly = 225; nHD = 2; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "DOG")) { nPoly = 130; nHD = 2; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "WOLF")) { nPoly = 23; nHD = 2; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "SAHUAGIN")) { nPoly = 329; nHD = 2; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "DRYAD")) { nPoly = 330; nHD = 2; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "OCHRE JELLY")) { nPoly = 331; nHD = 2; nFeatTier = 2;} // HD 3 else if(ComparePolyStr(sFormID, "BUGBEAR")) { nPoly = 152; nHD = 3; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "SEA HAG")) { nPoly = 168; nHD = 3; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "STINK BEETLE")) { nPoly = 179; nHD = 3; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "SWORD SPIDER")) { nPoly = 181; nHD = 3; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "WYRMLING WHITE DRAGON")) { nPoly = 235; nHD = 3; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "BLACK BEAR")) { nPoly = 131; nHD = 3; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "COUGAR")) { nPoly = 135; nHD = 3; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "CRAG CAT")) { nPoly = 136; nHD = 3; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "LEOPARD")) { nPoly = 138; nHD = 3; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "PANTHER")) { nPoly = 22; nHD = 3; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "BOAR")) { nPoly = 24; nHD = 3; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "DIRE BADGER")) { nPoly = 37; nHD = 3; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "SNAKE")) { nPoly = 327; nHD = 3; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "NYMPH")) { nPoly = 332; nHD = 3; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "GRAY OOZE")) { nPoly = 333; nHD = 3; nFeatTier = 2;} // HD 4 else if(ComparePolyStr(sFormID, "OGRE")) { nPoly = 174; nHD = 4; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "STINGER")) { nPoly = 169; nHD = 4; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "GELATINOUS CUBE")) { nPoly = 208; nHD = 4; nFeatTier = 2;} else if(ComparePolyStr(sFormID, "GARGOYLE")) { nPoly = 191; nHD = 4; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "GIANT SPIDER")) { nPoly = 180; nHD = 4; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "WYRMLING BLACK DRAGON")) { nPoly = 226; nHD = 4; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "WYRMLING BRASS DRAGON")) { nPoly = 228; nHD = 4; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "WORG")) { nPoly = 258; nHD = 4; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "BLINK DOG")) { nPoly = 334; nHD = 4; nFeatTier = 1;} // HD 5 else if(ComparePolyStr(sFormID, "ETTERCAP")) { nPoly = 212; nHD = 5; nFeatTier = 2;} else if(ComparePolyStr(sFormID, "HOOK HORROR")) { nPoly = 214; nHD = 5; nFeatTier = 2;} else if(ComparePolyStr(sFormID, "COCKATRICE")) { nPoly = 189; nHD = 5; nFeatTier = 2;} else if(ComparePolyStr(sFormID, "WYRMLING COPPER DRAGON")) { nPoly = 230; nHD = 5; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "WYRMLING GREEN DRAGON")) { nPoly = 232; nHD = 5; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "JAGUAR")) { nPoly = 137; nHD = 5; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "LION")) { nPoly = 139; nHD = 5; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "SATYR")) { nPoly = 335; nHD = 5; nFeatTier = 0;} // HD 6 else if(ComparePolyStr(sFormID, "DRIDER")) { nPoly = 211; nHD = 6; nFeatTier = 2;} else if(ComparePolyStr(sFormID, "FEMALE DRIDER")) { nPoly = 307; nHD = 6; nFeatTier = 2;} else if(ComparePolyStr(sFormID, "INTELLECT DEVOURER")) { nPoly = 215; nHD = 6; nFeatTier = 2;} else if(ComparePolyStr(sFormID, "TROLL")) { nPoly = 175; nHD = 6; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "YUAN-TI")) { nPoly = 171; nHD = 6; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "MINOTAUR")) { nPoly = 172; nHD = 6; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "MEDUSA")) { nPoly = 167; nHD = 6; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "BASILISK")) { nPoly = 197; nHD = 6; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "MANTICORE")) { nPoly = 195; nHD = 6; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "WYRMLING BLUE DRAGON")) { nPoly = 227; nHD = 6; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "WYRMLING BRONZE DRAGON")) { nPoly = 229; nHD = 6; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "BROWN BEAR")) { nPoly = 21; nHD = 6; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "WINTER WOLF")) { nPoly = 257; nHD = 6; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "DIRE WOLF")) { nPoly = 35; nHD = 6; nFeatTier = 0;} // HD 7 else if(ComparePolyStr(sFormID, "HARPY")) { nPoly = 173; nHD = 7; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "STAG BEETLE")) { nPoly = 178; nHD = 7; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "WYRMLING RED DRAGON")) { nPoly = 233; nHD = 7; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "WYRMLING SILVER DRAGON")) { nPoly = 234; nHD = 7; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "DIRE BOAR")) { nPoly = 36; nHD = 7; nFeatTier = 0;} // HD 8 else if(ComparePolyStr(sFormID, "MIND FLAYER")) { nPoly = 216; nHD = 8; nFeatTier = 2;} else if(ComparePolyStr(sFormID, "UMBER HULK")) { nPoly = 217; nHD = 8; nFeatTier = 2;} else if(ComparePolyStr(sFormID, "GORGON")) { nPoly = 192; nHD = 8; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "SPHINX")) { nPoly = 193; nHD = 8; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "WYRMLING GOLD DRAGON")) { nPoly = 231; nHD = 8; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "POLAR BEAR")) { nPoly = 148; nHD = 8; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "GRIZZLY BEAR")) { nPoly = 147; nHD = 8; nFeatTier = 0;} // HD 9 else if(ComparePolyStr(sFormID, "BATTLE DEVOURER")) { nPoly = 209; nHD = 9; nFeatTier = 2;} else if(ComparePolyStr(sFormID, "WILL O WISP")) { nPoly = 218; nHD = 9; nFeatTier = 2;} else if(ComparePolyStr(sFormID, "BULLETTE")) { nPoly = 313; nHD = 9; nFeatTier = 1;} // HD 10 else if(ComparePolyStr(sFormID, "ETTIN")) { nPoly = 187; nHD = 10; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "GREY RENDER")) { nPoly = 221; nHD = 10; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "DIRE SPIDER")) { nPoly = 188; nHD = 10; nFeatTier = 1;} // HD 11 else if(ComparePolyStr(sFormID, "BEHOLDER")) { nPoly = 210; nHD = 11; nFeatTier = 2;} // HD 12 else if(ComparePolyStr(sFormID, "HILL GIANT")) { nPoly = 222; nHD = 12; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "DIRE BEAR")) { nPoly = 33; nHD = 12; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "WYVERN")) { nPoly = 336; nHD = 12; nFeatTier = 1;} // HD 13 // HD 14 else if(ComparePolyStr(sFormID, "FROST GIANT")) { nPoly = 259; nHD = 14; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "FROST GIANT FEMALE")) { nPoly = 308; nHD = 14; nFeatTier = 0;} // HD 15 else if(ComparePolyStr(sFormID, "FIRE GIANT")) { nPoly = 289; nHD = 14; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "FIRE GIANT FEMALE")) { nPoly = 309; nHD = 15; nFeatTier = 0;} // Couldn't determine the form if (nPoly == 0) { SendMessageToPC(OBJECT_SELF, "Unknown form type. Check spelling."); // Default to pixie! (so the spell defaults back to one of the default nwn forms) nPoly = 328; } // Caster level not high enough for the form if (nHD > nCasterLevel) { SendMessageToPC(OBJECT_SELF, "Caster level is too low for this form."); // Default to pixie! (so the spell defaults back to one of the default nwn forms) nPoly = 328; } // Target hasn't enough HD for the form if (nHD > nTargetHD) { SendMessageToPC(OBJECT_SELF, "Target doesn't have enough HD for this form."); // Default to pixie! (so the spell defaults back to one of the default nwn forms) nPoly = 328; } //Spell Focuses for stronger racial variants ////nFeatTier = 0 ///uncomment this to disable the spell focus restrictions if (nFeatTier == 1 && GetHasFeat(FEAT_SPELL_FOCUS_TRANSMUTATION, OBJECT_SELF) != TRUE) { SendMessageToPC(OBJECT_SELF, "Selected form requires spell focus in transmutation"); // Default to pixie! (so the spell defaults back to one of the default nwn forms) nPoly = 328; } if (nFeatTier == 2 && GetHasFeat(FEAT_GREATER_SPELL_FOCUS_TRANSMUTATION, OBJECT_SELF) != TRUE) { SendMessageToPC(OBJECT_SELF, "Selected form requires greater spell focus in transmutation"); // Default to pixie! (so the spell defaults back to one of the default nwn forms) nPoly = 328; } ePoly = EffectPolymorph(nPoly); //copy their weapon properties so they don't suck completely int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1; object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); //Fire cast spell at event for the specified target SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_POLYMORPH_SELF, FALSE)); //Apply the VFX impact and effects AssignCommand(oTarget, ClearAllActions()); // prevents an exploit ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ePoly, oTarget, TurnsToSeconds(nDuration)); //copying the weapon properties object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); if (bWeapon) { IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE); } }
-
Would it be possible to list available forms here with informations about their stats and any special power they may have?
-
Would it be possible to list available forms here with informations about their stats and any special power they may have?
Stats are a bit of a pain, but match the nwn stats for whatever basic creature. The phyically powerful forms (Dire wolf/bear, bullette, hill giants, etc) are all fairly obvious.
Note on levels - You need the caster level, and the hit dice (total character level) to qualify. (Items cast at level 7, so thats the limit for non-mages, as well as needing the hit dice (IE a level 1 fighter with a polymorph charm can't become a crag cat).
As special abilities go
@Sethroy:By level
Level 1 Eyeball - Freedom of movement. Immunity Knockdown and sneak attack. Goblin Hobgoblin Kobold Orc Pixie Fire Beetle - Immune to mind effects Chicken Falcon Penguin Raven Rat Ox Badger Bat Cow Deer Dire rat - Disease bite Chicken White stag Seagull Parrot Horse Level 2 Troglodyte Lizardfolk Gnoll Sahuagin Deep Rothe Krenshar Bombadier Beetle - Mind immune. Faerie Dragon - True Seeing Pseudodragon - True Seeing Dog Wolf Dryad Ochre Jelly - Acid damage. Critical/Sneak immune. Mind Immune. Level 3 Bugbear Sea Hag Stink Beetle - Mind Immune Sword spider - Mind Immune Wyrmling White Dragon - True Seeing. Cold Immune. Paralysis Immune. Black Bear Cougar Crag Cat - Immunity : Enchantment Leopard Panther Boar Dire badger Nymph Gray Ooze - Acid Damage. mind immune. Critical immune. Snake - Poison attack. Level 4 Ogre Stinger Gelatinous Cube - Paralysis attack. Mind Immune. Critical Immune. Doesn't fit through doorways. Gargoyle - DR 10/+1 Giant spider - Poison Attack. Mind Immune. Wyrmling Black Dragon - True seeing. Acid immune. Paralysis immune. Wyrmling Brass Dragon - True seeing. Fire Immune. Paralysis Immune. Worg Blink Dog Level 5 Ettercap -Web Immune. Hook Horror Cockatrice Wyrmling Copper Dragon - True Seeing. Acid Immune. Paralysis Immune. Wyrmling Green Dragon - True Seeing. Poison immmune. Paralysis immune. Jaguar Lion Satyr Level 6 Drider - SR 14 Female Drider - SR 14 Intellect Devourerer - DR 20/+3\. electrical resist 5\. Immune to fire. Troll - Regen +5 Yuan-ti - SR 16 Minotaur Medusa Baislisk Manticore Wyrmling Blue Dragon - True Seeing. Immune to electrical. immune to paralysis. Wyrmling Bronze Dragon - True seeing. Immune to electrical. Immune to paralysis. Brown Bear Winter Wolf - Cold Damage. Immune to cold. Fire vulenerability. Dire wolf Level 7 Harpy Stag Beetle - Immune to mind effecting. Wyrmling Red Dragon - True Seeing. Immune to fire and paralysis Wyrmling Silver Dragon - True Seeing. Immune to cold and paralysis. Dire boar Level 8 Mind Flayer - SR 24\. Immune to mind effecting. Umber Hulk - Doesn't fit through doorways. Gorgon Sphinx Wyrmling Gold Dragon - True Seeing. Immune to fire and paralysis. Polar Bear Grizzly Bear Level 9 Battle Devourer - DR 20/+3\. Immmune to Fire/Electrical/Acid/Cold/Sonic. Will O Wisp - Immmune to the 5 elements, death magic, midn effecting, paralysis. Bullette Level 10 Ettin - Doesn't fit through doorways. Grey Render - Doesn't fit through doorways. Dire Spider 188 Level 11 Beholder - Freedom of movement. Immunity Knockdown and sneak attack. Level 12 Hill Giant - Doesn't fit through doorways. Wyvern - Poison attack (1 in 3 attack) Dire Bear Level 13 Level 14 Frost Giant 259 308/Fem - Immune to cold, vulnerable to fire. Doesn't fit through doorways. Level 15 Fire Giant 289, 309/Female - Immune to fire, vulnerable to cold. Doesn't fit through doorways.
The properties actually help explain the sorting of the Spell Focus requirement tweak a bit.
-
Here's the script with playable races added and transgender thing resolved. May want to check the codes for playable races.
Also, this version looks for the command on OBJECT_SELF, not on CoA token.
May also want to rename HALF-ORC and HALF-ELF to loose the dash.//:://///////////////////////////////////////////// //:: Polymorph Self //:: NW_S0_PolySelf.nss //:: Copyright (c) 2001 Bioware Corp. //::////////////////////////////////////////////// /* The PC is able to changed their form to one of several forms. */ //::////////////////////////////////////////////// //:: Created By: Preston Watamaniuk //:: Created On: Jan 21, 2002 //::////////////////////////////////////////////// #include "x2_inc_spellhook" // Returns true if sCreatureName starts with sFormID int ComparePolyStr(string sFormID, string sCreatureName) { return GetStringLeft(sCreatureName, GetStringLength(sFormID)) == sFormID; } void main() { /* Spellcast Hook Code Added 2003-06-23 by GeorgZ If you want to make changes to all spells, check x2_inc_spellhook.nss to find out more */ if (!X2PreSpellCastCode()) { // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell return; } // End of Spell Cast Hook // No spell if already polymorphed. if (GetHasEffect(EFFECT_TYPE_POLYMORPH, OBJECT_SELF)) return; //Declare major variables object oTarget = GetSpellTargetObject(); effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH); effect ePoly; int nPoly = 0; int nHD = 0; int isFemale = (GetGender(OBJECT_SELF) == GENDER_FEMALE); string sFormID = GetStringUpperCase(GetLocalString(OBJECT_SELF, "sPolyFormID")); int nFeatTier = 0; //used for the splitting forms apart for Spell Focus and //greater spell focus transmutation. Uncomment line 226 to disable int nCasterLevel = GetCasterLevel(OBJECT_SELF); int nTargetHD = GetHitDice(oTarget); // Determine duration int nMetaMagic = GetMetaMagicFeat(); int nDuration = nCasterLevel; if (nMetaMagic == METAMAGIC_EXTEND) { nDuration = nDuration *2; //Duration is +100% } // -------------------------------- // --- Determine Polymorph type --- // HD 1 if(ComparePolyStr(sFormID, "EYEBALL")) { nPoly = 213; nHD = 1; nFeatTier = 2;} else if(ComparePolyStr(sFormID, "GOBLIN")) { nPoly = 157; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "HOBGOBLIN")) { nPoly = 163; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "KOBOLD")) { nPoly = 165; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "ORC")) { nPoly = 166; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "FIRE BEETLE")) { nPoly = 177; nHD = 1; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "CHICKEN")) { nPoly = 40; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "FALCON")) { nPoly = 133; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "PENGUIN")) { nPoly = 26; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "RAVEN")) { nPoly = 134; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "RAT")) { nPoly = 144; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "OX")) { nPoly = 143; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "BADGER")) { nPoly = 25; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "BAT")) { nPoly = 140; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "COW")) { nPoly = 27; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "DEER")) { nPoly = 142; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "DIRE RAT")) { nPoly = 149; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "WHITE STAG")) { nPoly = 145; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "PARROT")) { nPoly = 324; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "SEAGULL")) { nPoly = 325; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "HORSE")) { nPoly = 326; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "PIXIE")) { nPoly = 328; nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "HUMAN")) { nPoly = (isFemale?306:164); nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "HALFLING")) { nPoly = (isFemale?305:162); nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "HALF-ORC")) { nPoly = (isFemale?304:161); nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "HALF-ELF")) { nPoly = (isFemale?303:160); nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "GNOME")) { nPoly = (isFemale?302:159); nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "ELF")) { nPoly = (isFemale?301:156); nHD = 1; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "DWARF")) { nPoly = (isFemale?300:155); nHD = 1; nFeatTier = 0;} // HD 2 else if(ComparePolyStr(sFormID, "TROGLODYTE")) { nPoly = 312; nHD = 2; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "LIZARDFOLK")) { nPoly = 170; nHD = 2; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "GNOLL")) { nPoly = 158; nHD = 2; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "DEEP ROTHE")) { nPoly = 190; nHD = 2; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "KRENSHAR")) { nPoly = 194; nHD = 2; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "BOMBARDIER BEETLE")) { nPoly = 176; nHD = 2; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "FAERIE DRAGON")) { nPoly = 224; nHD = 2; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "PSEUDODRAGON")) { nPoly = 225; nHD = 2; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "DOG")) { nPoly = 130; nHD = 2; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "WOLF")) { nPoly = 23; nHD = 2; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "SAHUAGIN")) { nPoly = 329; nHD = 2; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "DRYAD")) { nPoly = 330; nHD = 2; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "OCHRE JELLY")) { nPoly = 331; nHD = 2; nFeatTier = 2;} // HD 3 else if(ComparePolyStr(sFormID, "BUGBEAR")) { nPoly = 152; nHD = 3; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "SEA HAG")) { nPoly = 168; nHD = 3; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "STINK BEETLE")) { nPoly = 179; nHD = 3; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "SWORD SPIDER")) { nPoly = 181; nHD = 3; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "WYRMLING WHITE DRAGON")) { nPoly = 235; nHD = 3; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "BLACK BEAR")) { nPoly = 131; nHD = 3; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "COUGAR")) { nPoly = 135; nHD = 3; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "CRAG CAT")) { nPoly = 136; nHD = 3; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "LEOPARD")) { nPoly = 138; nHD = 3; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "PANTHER")) { nPoly = 22; nHD = 3; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "BOAR")) { nPoly = 24; nHD = 3; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "DIRE BADGER")) { nPoly = 37; nHD = 3; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "SNAKE")) { nPoly = 327; nHD = 3; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "NYMPH")) { nPoly = 332; nHD = 3; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "GRAY OOZE")) { nPoly = 333; nHD = 3; nFeatTier = 2;} // HD 4 else if(ComparePolyStr(sFormID, "OGRE")) { nPoly = 174; nHD = 4; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "STINGER")) { nPoly = 169; nHD = 4; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "GELATINOUS CUBE")) { nPoly = 208; nHD = 4; nFeatTier = 2;} else if(ComparePolyStr(sFormID, "GARGOYLE")) { nPoly = 191; nHD = 4; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "GIANT SPIDER")) { nPoly = 180; nHD = 4; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "WYRMLING BLACK DRAGON")) { nPoly = 226; nHD = 4; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "WYRMLING BRASS DRAGON")) { nPoly = 228; nHD = 4; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "WORG")) { nPoly = 258; nHD = 4; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "BLINK DOG")) { nPoly = 334; nHD = 4; nFeatTier = 1;} // HD 5 else if(ComparePolyStr(sFormID, "ETTERCAP")) { nPoly = 212; nHD = 5; nFeatTier = 2;} else if(ComparePolyStr(sFormID, "HOOK HORROR")) { nPoly = 214; nHD = 5; nFeatTier = 2;} else if(ComparePolyStr(sFormID, "COCKATRICE")) { nPoly = 189; nHD = 5; nFeatTier = 2;} else if(ComparePolyStr(sFormID, "WYRMLING COPPER DRAGON")) { nPoly = 230; nHD = 5; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "WYRMLING GREEN DRAGON")) { nPoly = 232; nHD = 5; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "JAGUAR")) { nPoly = 137; nHD = 5; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "LION")) { nPoly = 139; nHD = 5; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "SATYR")) { nPoly = 335; nHD = 5; nFeatTier = 0;} // HD 6 else if(ComparePolyStr(sFormID, "DRIDER")) { nPoly = (isFemale?307:211); nHD = 6; nFeatTier = 2;} else if(ComparePolyStr(sFormID, "INTELLECT DEVOURER")) { nPoly = 215; nHD = 6; nFeatTier = 2;} else if(ComparePolyStr(sFormID, "TROLL")) { nPoly = 175; nHD = 6; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "YUAN-TI")) { nPoly = 171; nHD = 6; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "MINOTAUR")) { nPoly = 172; nHD = 6; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "MEDUSA")) { nPoly = 167; nHD = 6; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "BASILISK")) { nPoly = 197; nHD = 6; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "MANTICORE")) { nPoly = 195; nHD = 6; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "WYRMLING BLUE DRAGON")) { nPoly = 227; nHD = 6; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "WYRMLING BRONZE DRAGON")) { nPoly = 229; nHD = 6; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "BROWN BEAR")) { nPoly = 21; nHD = 6; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "WINTER WOLF")) { nPoly = 257; nHD = 6; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "DIRE WOLF")) { nPoly = 35; nHD = 6; nFeatTier = 0;} // HD 7 else if(ComparePolyStr(sFormID, "HARPY")) { nPoly = 173; nHD = 7; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "STAG BEETLE")) { nPoly = 178; nHD = 7; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "WYRMLING RED DRAGON")) { nPoly = 233; nHD = 7; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "WYRMLING SILVER DRAGON")) { nPoly = 234; nHD = 7; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "DIRE BOAR")) { nPoly = 36; nHD = 7; nFeatTier = 0;} // HD 8 else if(ComparePolyStr(sFormID, "MIND FLAYER")) { nPoly = 216; nHD = 8; nFeatTier = 2;} else if(ComparePolyStr(sFormID, "UMBER HULK")) { nPoly = 217; nHD = 8; nFeatTier = 2;} else if(ComparePolyStr(sFormID, "GORGON")) { nPoly = 192; nHD = 8; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "SPHINX")) { nPoly = 193; nHD = 8; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "WYRMLING GOLD DRAGON")) { nPoly = 231; nHD = 8; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "POLAR BEAR")) { nPoly = 148; nHD = 8; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "GRIZZLY BEAR")) { nPoly = 147; nHD = 8; nFeatTier = 0;} // HD 9 else if(ComparePolyStr(sFormID, "BATTLE DEVOURER")) { nPoly = 209; nHD = 9; nFeatTier = 2;} else if(ComparePolyStr(sFormID, "WILL O WISP")) { nPoly = 218; nHD = 9; nFeatTier = 2;} else if(ComparePolyStr(sFormID, "BULLETTE")) { nPoly = 313; nHD = 9; nFeatTier = 1;} // HD 10 else if(ComparePolyStr(sFormID, "ETTIN")) { nPoly = 187; nHD = 10; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "GREY RENDER")) { nPoly = 221; nHD = 10; nFeatTier = 1;} else if(ComparePolyStr(sFormID, "DIRE SPIDER")) { nPoly = 188; nHD = 10; nFeatTier = 1;} // HD 11 else if(ComparePolyStr(sFormID, "BEHOLDER")) { nPoly = 210; nHD = 11; nFeatTier = 2;} // HD 12 else if(ComparePolyStr(sFormID, "HILL GIANT")) { nPoly = 222; nHD = 12; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "DIRE BEAR")) { nPoly = 33; nHD = 12; nFeatTier = 0;} else if(ComparePolyStr(sFormID, "WYVERN")) { nPoly = 336; nHD = 12; nFeatTier = 1;} // HD 13 // HD 14 else if(ComparePolyStr(sFormID, "FROST GIANT")) { nPoly = (isFemale?308:259); nHD = 14; nFeatTier = 0;} // HD 15 else if(ComparePolyStr(sFormID, "FIRE GIANT")) { nPoly = (isFemale?309:289); nHD = 14; nFeatTier = 0;} // Couldn't determine the form if (nPoly == 0) { SendMessageToPC(OBJECT_SELF, "Unknown form type. Check spelling."); // Default to pixie! (so the spell defaults back to one of the default nwn forms) nPoly = 328; } // Caster level not high enough for the form if (nHD > nCasterLevel) { SendMessageToPC(OBJECT_SELF, "Caster level is too low for this form."); // Default to pixie! (so the spell defaults back to one of the default nwn forms) nPoly = 328; } // Target hasn't enough HD for the form if (nHD > nTargetHD) { SendMessageToPC(OBJECT_SELF, "Target doesn't have enough HD for this form."); // Default to pixie! (so the spell defaults back to one of the default nwn forms) nPoly = 328; } //Spell Focuses for stronger racial variants ////nFeatTier = 0 ///uncomment this to disable the spell focus restrictions if (nFeatTier == 1 && GetHasFeat(FEAT_SPELL_FOCUS_TRANSMUTATION, OBJECT_SELF) != TRUE) { SendMessageToPC(OBJECT_SELF, "Selected form requires spell focus in transmutation"); // Default to pixie! (so the spell defaults back to one of the default nwn forms) nPoly = 328; } if (nFeatTier == 2 && GetHasFeat(FEAT_GREATER_SPELL_FOCUS_TRANSMUTATION, OBJECT_SELF) != TRUE) { SendMessageToPC(OBJECT_SELF, "Selected form requires greater spell focus in transmutation"); // Default to pixie! (so the spell defaults back to one of the default nwn forms) nPoly = 328; } ePoly = EffectPolymorph(nPoly); //copy their weapon properties so they don't suck completely int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1; object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); //Fire cast spell at event for the specified target SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_POLYMORPH_SELF, FALSE)); //Apply the VFX impact and effects AssignCommand(oTarget, ClearAllActions()); // prevents an exploit ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ePoly, oTarget, TurnsToSeconds(nDuration)); //copying the weapon properties object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); if (bWeapon) { IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE); } }
-
I really love this idea, but think it would steal alot of the Shifter's thunder and lose it's entertainment after a small while, like the trench coat.
Maybe it could be implimented as an application only perk?
Just thought I'd mention my opinion and bump the thread at the same time.
-
I disagree with King of Hearts pretty much entirely.
-
Make it as the PnP spell.
Just increase the atributes and natural skills.
No Supernatural powers from the creatrures.
-
To sound much less argumentative, what I meant was: I'd prefer to see more spells with roleplay value, or practical uses, rather than plain combat. Polymorph has a near-infinite array of options, but is limited to 5 poor choices.
-
This should be implemented next reset.
So watch out when you polymorph or you'll end up in pixy! (new default shape)TIP: Quicksloting a chat command like .ps goblin! would be equivalent to quicksloting the polymorph spell so that it turns you like a goblin.
Don't take a form with higher HD than your caster level or than the HD of your target.
Spell focus transmutation and greater spell focus transmutation help you unlock more forms in the list above. You can find which by reading the script (check the variable nFeatTier next to each form).
-
Is the actual command:
.ps goblin!
.ps goblin
"!" part of all of the commands?