Cinco De Mayo Update
Warforged Scouts can take Warforged Juggernaut. Updated PRC8 version number. FEAT_EXTRA_GRANTED_MANEUVER is for Crusaders, not Swordsages. FEAT_EXTRA_GRANTED_MANEUVER now shows all 5 granted maneuvers after 19th lvl. Mirror Image onCastAt script now uses PRCGetCasterLevel() Summon Hamatula now uses PRCGetCasterLevel() Spiritual Weapon now uses PRCGetCasterLevel() Heal & Harm now SignalEvent on placeables. DEITY$ only knows how many modules this broke. Updated human readable changelog. Added current list of PRC8 additions.
This commit is contained in:
161
PRC8 Additions.txt
Normal file
161
PRC8 Additions.txt
Normal file
@@ -0,0 +1,161 @@
|
|||||||
|
CLASSES / PRESTIGE CLASSES
|
||||||
|
Fochlucan Lyrist
|
||||||
|
Verdant Lord
|
||||||
|
Lion of Talisid
|
||||||
|
|
||||||
|
RACIAL TYPES
|
||||||
|
Nezumi (OA)
|
||||||
|
Korobokuru (OA)
|
||||||
|
Warforged Scout (Eberron)
|
||||||
|
Shyft (Planescape)
|
||||||
|
Maeluth (Planescape)
|
||||||
|
Mechanatrix (Planescape)
|
||||||
|
Wispling (Planescape)
|
||||||
|
|
||||||
|
TEMPLATES
|
||||||
|
Baelnorn template
|
||||||
|
|
||||||
|
DOMAINS
|
||||||
|
Chaos
|
||||||
|
Glory
|
||||||
|
Law
|
||||||
|
Luck
|
||||||
|
Madness
|
||||||
|
Mind
|
||||||
|
Moon
|
||||||
|
|
||||||
|
FEATS
|
||||||
|
Combat Focus
|
||||||
|
Combat Awareness
|
||||||
|
Combat Stability
|
||||||
|
Combat Defense
|
||||||
|
Combat Vitality
|
||||||
|
Combat Strike
|
||||||
|
Choke Hold
|
||||||
|
Pain Touch
|
||||||
|
Ki Shout
|
||||||
|
Great Ki Shout
|
||||||
|
Freezing the Lifeblood
|
||||||
|
Falling Star Strike
|
||||||
|
Unbalancing Strike
|
||||||
|
Plant Defiance
|
||||||
|
Plant Control
|
||||||
|
Favored of the Companions
|
||||||
|
Create Infusion
|
||||||
|
Magical Artisan: Create Infusion
|
||||||
|
Craft Scepter
|
||||||
|
Magical Artisan: Craft Scepter
|
||||||
|
Improved Critical (touch attack)
|
||||||
|
Improved Critical (ray)
|
||||||
|
Weapon Focus (touch attack)
|
||||||
|
Epic Weapon Focus (touch attack)
|
||||||
|
|
||||||
|
Builder / System Feats
|
||||||
|
Intrinsic Armor
|
||||||
|
Intrinsic Weapon
|
||||||
|
|
||||||
|
SPELLS
|
||||||
|
Control Plants
|
||||||
|
Forestfold
|
||||||
|
Creeping Cold
|
||||||
|
Greater Creeping Cold
|
||||||
|
Immunity from Elements
|
||||||
|
Adrenaline Surge
|
||||||
|
Regeneration Line
|
||||||
|
Regenerate Ring
|
||||||
|
Regenerate Circle
|
||||||
|
Summoning
|
||||||
|
Summon Nature<72>s Ally I<>IX
|
||||||
|
Leonal<EFBFBD>s Roar
|
||||||
|
Repair Damage (spell line)
|
||||||
|
|
||||||
|
PSIONICS
|
||||||
|
Defensive Manifestation
|
||||||
|
|
||||||
|
INFUSIONS
|
||||||
|
Armor Enhancement (Lesser / Standard / Greater)
|
||||||
|
Resistance Item
|
||||||
|
Weapon Augmentation (Lesser / Standard / Personal)
|
||||||
|
|
||||||
|
CRAFTING SYSTEMS / ECONOMY
|
||||||
|
Create Infusion crafting system
|
||||||
|
Scepter crafting system
|
||||||
|
Offline PnP magical crafting system
|
||||||
|
|
||||||
|
Craftable Items
|
||||||
|
Aroma of Death
|
||||||
|
Beetle Elixir
|
||||||
|
Harness of Armor
|
||||||
|
|
||||||
|
New Base Item Types
|
||||||
|
Crafted Vial
|
||||||
|
Mundane Herb
|
||||||
|
Infused Herb
|
||||||
|
Mundane Scepter
|
||||||
|
Enchanted Scepter
|
||||||
|
|
||||||
|
Materials
|
||||||
|
Botanical material
|
||||||
|
Glassteel
|
||||||
|
|
||||||
|
SYSTEMS / GAMEPLAY MECHANICS
|
||||||
|
Scrying System Overhaul
|
||||||
|
Area-blocked scrying variables
|
||||||
|
Source-blocked scrying variables
|
||||||
|
Unified handling across spells/powers
|
||||||
|
Player Appearance System
|
||||||
|
Runtime player model swapping via racialappear.2da
|
||||||
|
|
||||||
|
Spell Systems
|
||||||
|
Spell Cancellation system
|
||||||
|
Spell Effect Viewer system
|
||||||
|
Spell Duration tracking UI
|
||||||
|
|
||||||
|
Summoning / Scaling
|
||||||
|
LevelUpSummon() system
|
||||||
|
Summon scaling framework (HD/class scaling)
|
||||||
|
|
||||||
|
Combat / Mechanics
|
||||||
|
Grapple removes invisibility rule enforcement
|
||||||
|
Double chakra bind system (Incarnum expansion)
|
||||||
|
Double totem bind system
|
||||||
|
|
||||||
|
UI / NUI SYSTEMS
|
||||||
|
NUI Spellcasting system
|
||||||
|
NUI Spell Effect Viewer
|
||||||
|
NUI Spell Duration Viewer
|
||||||
|
NUI Level-up spell selector
|
||||||
|
Power Attack GUI system
|
||||||
|
prc_onplayergui event system
|
||||||
|
NUI event dispatch framework
|
||||||
|
|
||||||
|
FRAMEWORKS / BACKEND SYSTEMS
|
||||||
|
JSON / Data Systems
|
||||||
|
JSON summoning support library
|
||||||
|
JSON spell/creature handling utilities
|
||||||
|
NWNx / PRCX Integration
|
||||||
|
Optional PRCX shim system / NWNxEE compatibility layer
|
||||||
|
|
||||||
|
SCRIPTING / ENGINE UTILITIES (NEW FUNCTIONS)
|
||||||
|
GenerateRandomName()
|
||||||
|
GetIsAlchemical()
|
||||||
|
VectorToPerpendicular()
|
||||||
|
GetCurrentUnixTimestamp()
|
||||||
|
LevelUpSummon()
|
||||||
|
json_GetFirstKnownSpell()
|
||||||
|
json_GetNextKnownSpell()
|
||||||
|
GetHealerCompanionBonus()
|
||||||
|
CelestialTemplateEffects()
|
||||||
|
MakeCelestialCreatureFromTemplate()
|
||||||
|
|
||||||
|
Item Properties
|
||||||
|
Expanded Damage Resistance tiers
|
||||||
|
Material-based crafting properties
|
||||||
|
Quality-based item properties
|
||||||
|
|
||||||
|
OTHER SYSTEMS / FEATURES
|
||||||
|
DM character inspection tool (view templates/effects)
|
||||||
|
Spell effect click-to-inspect system
|
||||||
|
PRC options system expansions (player toggles)
|
||||||
|
Dynamic conversation system expansions
|
||||||
|
Summon AI/stat scaling improvements
|
||||||
3645
PRC8_ChangeLog.txt
3645
PRC8_ChangeLog.txt
File diff suppressed because it is too large
Load Diff
@@ -3,8 +3,9 @@
|
|||||||
LABEL ReqType ReqParam1 ReqParam2
|
LABEL ReqType ReqParam1 ReqParam2
|
||||||
0 Warforged RACE 149 ****
|
0 Warforged RACE 149 ****
|
||||||
1 WarforgedCharger RACE 145 ****
|
1 WarforgedCharger RACE 145 ****
|
||||||
2 ScriptVar VAR PRC_AllowJuggernaut 0
|
2 WarforgedScout RACE 144 ****
|
||||||
3 Base_Attack BAB 5 ****
|
3 ScriptVar VAR PRC_AllowJuggernaut 0
|
||||||
4 AdamantineBody_WarForged FEAT 4781 ****
|
4 Base_Attack BAB 5 ****
|
||||||
5 PowerAtk FEAT 28 ****
|
5 AdamantineBody_WarForged FEAT 4781 ****
|
||||||
6 ImprovedBullrush FEAT 2806 ****
|
6 PowerAtk FEAT 28 ****
|
||||||
|
7 ImprovedBullrush FEAT 2806 ****
|
||||||
|
|||||||
@@ -1066,7 +1066,7 @@ void spellsDispelAoE(object oTargetAoE, object oCaster, int nCasterLevel)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
nChance += ((nCasterLevel + (GetAbilityScoreForClass(nClassCaster, oCaster)-10)/2) - (GetCasterLevel(oCreator))); // yes this is a sucky stupid hack
|
nChance += ((nCasterLevel + (GetAbilityScoreForClass(nClassCaster, oCaster)-10)/2) - (PRCGetCasterLevel(oCreator))); // yes this is a sucky stupid hack
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// the AI does cheat here, because it can not react as well as a player to
|
// the AI does cheat here, because it can not react as well as a player to
|
||||||
|
|||||||
@@ -76,7 +76,7 @@
|
|||||||
|
|
||||||
/* This variable MUST be updated with every new version of the PRC!!! */
|
/* This variable MUST be updated with every new version of the PRC!!! */
|
||||||
|
|
||||||
const string PRC_VERSION = "PRC8 4.89";
|
const string PRC_VERSION = "PRC8 4.91";
|
||||||
|
|
||||||
/* This variable MUST be updated every time 'assemble_spellbooks.bat' is run!!! */
|
/* This variable MUST be updated every time 'assemble_spellbooks.bat' is run!!! */
|
||||||
|
|
||||||
|
|||||||
@@ -251,7 +251,7 @@ int GetMaxReadiedCount(object oPC, int nList)
|
|||||||
int nMaxReadied = StringToInt(Get2DACache(GetAMSKnownFileName(nList), "ManeuversReadied", nLevel-1));
|
int nMaxReadied = StringToInt(Get2DACache(GetAMSKnownFileName(nList), "ManeuversReadied", nLevel-1));
|
||||||
// Add in the custom modifier
|
// Add in the custom modifier
|
||||||
nMaxReadied += GetReadiedManeuversModifier(oPC, nList);
|
nMaxReadied += GetReadiedManeuversModifier(oPC, nList);
|
||||||
if(nList == MANEUVER_LIST_SWORDSAGE)
|
if(nList == MANEUVER_LIST_CRUSADER)
|
||||||
nMaxReadied += GetHasFeat(FEAT_EXTRA_GRANTED_MANEUVER, oPC);
|
nMaxReadied += GetHasFeat(FEAT_EXTRA_GRANTED_MANEUVER, oPC);
|
||||||
|
|
||||||
if(DEBUG) DoDebug("tob_inc_recovery: MaxManeuvers Readied: " +IntToString(nMaxReadied));
|
if(DEBUG) DoDebug("tob_inc_recovery: MaxManeuvers Readied: " +IntToString(nMaxReadied));
|
||||||
@@ -398,16 +398,30 @@ void GrantRandomManeuver(object oPC, int nList = MANEUVER_LIST_CRUSADER)
|
|||||||
SetLocalInt(oPC, "ManeuverGranted" + IntToString(i), nMoveId);
|
SetLocalInt(oPC, "ManeuverGranted" + IntToString(i), nMoveId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ListGrantedManeuvers(object oPC)
|
void ListGrantedManeuvers(object oPC)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int nMaxGranted = StringToInt(Get2DACache(GetAMSKnownFileName(MANEUVER_LIST_CRUSADER), "ManeuversGranted", GetLevelByClass(CLASS_TYPE_CRUSADER, oPC)-1));
|
||||||
|
nMaxGranted += GetHasFeat(FEAT_EXTRA_GRANTED_MANEUVER, oPC);
|
||||||
|
|
||||||
|
for(i = 1; i <= nMaxGranted; i++)
|
||||||
|
{
|
||||||
|
int nMoveId = GetLocalInt(oPC, "ManeuverGranted" + IntToString(i));
|
||||||
|
int nExpended = GetIsManeuverExpended(oPC, MANEUVER_LIST_CRUSADER, nMoveId);
|
||||||
|
if (nMoveId > 0 && !nExpended) FloatingTextStringOnCreature(GetManeuverName(nMoveId) + " is granted", oPC, FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void ListGrantedManeuvers(object oPC)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for(i = 1; i <= 4; i++)
|
for(i = 1; i <= 5; i++)
|
||||||
{
|
{
|
||||||
int nMoveId = GetLocalInt(oPC, "ManeuverGranted" + IntToString(i));
|
int nMoveId = GetLocalInt(oPC, "ManeuverGranted" + IntToString(i));
|
||||||
int nExpended = GetIsManeuverExpended(oPC, MANEUVER_LIST_CRUSADER, nMoveId);
|
int nExpended = GetIsManeuverExpended(oPC, MANEUVER_LIST_CRUSADER, nMoveId);
|
||||||
if (nMoveId > 0 && !nExpended) FloatingTextStringOnCreature(GetManeuverName(nMoveId) + " is granted", oPC, FALSE);
|
if (nMoveId > 0 && !nExpended) FloatingTextStringOnCreature(GetManeuverName(nMoveId) + " is granted", oPC, FALSE);
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
|
|
||||||
void GrantManeuvers(object oPC, int nList = MANEUVER_LIST_CRUSADER)
|
void GrantManeuvers(object oPC, int nList = MANEUVER_LIST_CRUSADER)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ void main()
|
|||||||
|
|
||||||
// Get the caster of the potential dispel
|
// Get the caster of the potential dispel
|
||||||
object oCaster = GetLastSpellCaster();
|
object oCaster = GetLastSpellCaster();
|
||||||
int nCasterLevel = GetCasterLevel(oCaster);
|
int nCasterLevel = PRCGetCasterLevel(oCaster);
|
||||||
|
|
||||||
if(DEBUG) DoDebug("mirror_image_sa: EVENT_NPC_ONSPELLCASTAT triggered.");
|
if(DEBUG) DoDebug("mirror_image_sa: EVENT_NPC_ONSPELLCASTAT triggered.");
|
||||||
|
|
||||||
@@ -33,10 +33,10 @@ void main()
|
|||||||
// Ensure oOriginalCaster is valid
|
// Ensure oOriginalCaster is valid
|
||||||
if (GetIsObjectValid(oOriginalCaster))
|
if (GetIsObjectValid(oOriginalCaster))
|
||||||
{
|
{
|
||||||
if(DEBUG) DoDebug("mirror_image_sa: Original caster found. Caster level: " + IntToString(GetCasterLevel(oOriginalCaster)));
|
if(DEBUG) DoDebug("mirror_image_sa: Original caster found. Caster level: " + IntToString(PRCGetCasterLevel(oOriginalCaster)));
|
||||||
|
|
||||||
// Determine the DC for the dispel check
|
// Determine the DC for the dispel check
|
||||||
int nDispelDC = 11 + GetCasterLevel(oOriginalCaster);
|
int nDispelDC = 11 + PRCGetCasterLevel(oOriginalCaster);
|
||||||
if(DEBUG) DoDebug("mirror_image_sa: Dispel DC: " + IntToString(nDispelDC));
|
if(DEBUG) DoDebug("mirror_image_sa: Dispel DC: " + IntToString(nDispelDC));
|
||||||
|
|
||||||
// Determine the maximum cap for the dispel check
|
// Determine the maximum cap for the dispel check
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ void main()
|
|||||||
{
|
{
|
||||||
//Declare major variables
|
//Declare major variables
|
||||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||||
int nDuration = GetCasterLevel(OBJECT_SELF);
|
int nDuration = PRCGetCasterLevel(OBJECT_SELF);
|
||||||
object oPC = OBJECT_SELF;
|
object oPC = OBJECT_SELF;
|
||||||
effect eSummon = EffectSummonCreature("NW_DMVROCK");
|
effect eSummon = EffectSummonCreature("NW_DMVROCK");
|
||||||
if(GetPRCSwitch(MARKER_PRC_COMPANION))
|
if(GetPRCSwitch(MARKER_PRC_COMPANION))
|
||||||
|
|||||||
@@ -83,6 +83,12 @@ int DoSpell(object oCaster, object oTarget, int nSpellID)
|
|||||||
{
|
{
|
||||||
if(bMass) fDelay = PRCGetRandomDelay();
|
if(bMass) fDelay = PRCGetRandomDelay();
|
||||||
int iTombTainted = GetHasFeat(FEAT_TOMB_TAINTED_SOUL, oTarget) && GetAlignmentGoodEvil(oTarget) != ALIGNMENT_GOOD;
|
int iTombTainted = GetHasFeat(FEAT_TOMB_TAINTED_SOUL, oTarget) && GetAlignmentGoodEvil(oTarget) != ALIGNMENT_GOOD;
|
||||||
|
|
||||||
|
// Signal placeables even if they're not creatures
|
||||||
|
if(GetObjectType(oTarget) == OBJECT_TYPE_PLACEABLE)
|
||||||
|
{
|
||||||
|
SignalEvent(oTarget, EventSpellCastAt(oCaster, nSpellID, FALSE));
|
||||||
|
}
|
||||||
|
|
||||||
iHeal = GetObjectType(oTarget) == OBJECT_TYPE_CREATURE &&
|
iHeal = GetObjectType(oTarget) == OBJECT_TYPE_CREATURE &&
|
||||||
((!bIsHeal && (MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD || iTombTainted)) ||
|
((!bIsHeal && (MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD || iTombTainted)) ||
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ void main()
|
|||||||
{
|
{
|
||||||
// Get the caster of the spell
|
// Get the caster of the spell
|
||||||
object oCaster = GetLastSpellCaster();
|
object oCaster = GetLastSpellCaster();
|
||||||
int nCasterLevel = GetCasterLevel(oCaster);
|
int nCasterLevel = PRCGetCasterLevel(oCaster);
|
||||||
|
|
||||||
if(DEBUG) DoDebug("sp_spiritweapon: EVENT_NPC_ONSPELLCASTAT triggered.");
|
if(DEBUG) DoDebug("sp_spiritweapon: EVENT_NPC_ONSPELLCASTAT triggered.");
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user