Community Patch 1.72 Beta 12 Released
download
To install it, follow as in 1.71 manual installation. Simply unpack the archive into folder with NWN files (thus if you do this right it will want to overwrite bunch of files which you have to confirm). The 1.72 is international, works for all languages as there are no changes in dialog.tlk file yet.
To uninstall it, either run 1.69 critical rebuild, 1.71 installation, or manually delete/rename the xp2patch.key file and rename the xp2patch171.key which is included in the 1.72 beta distribution.
Neverwinter Nights Community Patch 1.72 beta 12 content:
Fixed broken stuff from previous Patch versions:
- fixed 1.71 bug in Dirge where the spell had no effect on entering enemies and only heartbeat worked
- fixed several issues in 1.71 special AI for polymorphed creatures where such creatures get stuck when trying to use certain abilities and only performed melee attacks
- fixed 1.71 AI feature with heal/inflict spell substituting that could stuck creature due to the engine bug with TalentSpell
- fixed all the module-wise spell engine overrides from beta11 that weren't working due to the overlook in code
- added missing 70_inc_main library announced in beta11 (sorry overlooked)
Revisited features from previous Patch versions:
- removed module-wise spell engine override for caster level, DC and metamagic
- circle kick fix in nwnx_patch will work only for players now (often builder wants creature to switch targets and circle kick is easiest way to do that)
- the edge fix for chasm in forest and desert tileset reworked in order to make this fix custom content compatible (so it shows in custom tilesets based on forest/desert and modified forest/desert tilesets)
- battletide and dirge AI behavior changed from aura-like spells and moved to protection buffs as it was a bit weird to start with these spells and then use talents like fear aura + high AI was then able to cast battletide instantly which wasn't intended
- the variable to disallow identification of certain items renamed from DISALLOW_IDENTIFY to 72_DISALLOW_IDENTIFY
- nw_i0_spells: MySavingThrow will ignore paralysis immunity if the module switch 72_DISABLE_PARALYZE_MIND_SPELL_IMMUNITY is activated
- nw_i0_spells: DoSpellBreach feedback printed also for caster if its player
- 70_inc_main: NWNX_Patch_IsInUse() renamed to NWNXPatch_IsInUse() to unite with other plugin naming conventions)
New fixes and features:
Tileset fixes:
ttd01_z11_01 - new fix for the missing edge tile
ttf01_z11_01 - new fix for the missing edge tile
tcn01_h02_02 - fixed one part of the wall that didn't fade properly
tdc01_g17_01 - fixed polygon gaps in black coverage with tilefading enabled
tdc01_g17_02 - fixed polygon gaps in black coverage with tilefading enabled
tdc01_p13_01 - fixed polygon gaps + minor other fixes
tdt01_j11_01 - fixed polygon gaps in the wall
tdm01_c02_02 - fixed polygon gaps in the wall under water
tdm01_h17_01 - fixed polygon gap in the bottom edge of one pillar
tdm01_h18_01 - fixed polygon gaps in the bottom side of two pillars
ttr01_u04_01 - added missing black coverage to the upper arc, also filled the polygon gaps from bottom side of the arc which could be seen under specific camera angles
ttr01_v04_01 - added missing black coverage to the upper arc, also filled the polygon gaps from bottom side of the arc which could be seen under specific camera angles
2DAs:
- spells.2da: fixed Master reference for several shapeshifting subspells
- polymorph.2da: racial type of the super chicken polymorph form corrected to animal (was gnome)
Spells, feats and special abilities:
- Freedom of movement: added supernatural effect check as is in restoration spells - this allows to make a movement decrease effect which won’t be removed with this spell
- all poison special effects now controls poison immunity, if poisoned character acquired poison immunity the poison will fail
- Pit Fiend Ichor poison: the death will ignore death spells immunity only on hardcore and high difficult difficulty
- Blue Whinnis poison: the sleep effect will be removable by neutralize poison spell now
Scripts:
- added new item switch variable 72_DISABLE_ENCHANTMENT_SPELLS = 1, item with this variable won't be allowed to enhance with weapon/armor buffing spells
- 70_inc_ai: new library for AI functions, contains:
- bkTalentFilterLoc - copy of bkTalentFilter that uses talent on location
- bkTalentFilterSpell - copy of bkTalentFilter that uses ActionCastSpellToObject
- TalentShapechange - moved here from x0_i0_talent to provide backwards compatibility (in case that module had modified x0_i0_talent but unmodified nw_i0_generic, then some scripts might threw error when compiling before - this won't happen again)
- 70_inc_main: added new function NWNXPatch_DumpEffects(object) for effect debugging purposes
Other:
- scroll of Negative Energy Protection set identified
AI:
- improved several AI routines to allow handle defensive casting in everything that creature casts
- fixed combat of huge creatures like dragons who had much higher chance to magic than intented because their target was never "close enough"
- further improved spellcasting: removed a code that could sent creature to start melee attack prematurely
- creatures will be able to count with the limit override in Power Word: Kill spell. That limit however must be enforced with spell id variable, ie. "131_LIMIT_OVERRIDE" either on creature or module
- significantly improved AI for polymorphed creatures introduced in 1.71:
- creatures polymorphed into chicken, penguin and cow will no longer try to fight and will flee from enemies
- AI will now handle spellcasting while in polymorph, by a rule of thumb - everything that’s not an ordinary spell (UserType != 1) will be allowed to cast even polymorphed, if its ordinary spell and the innate level is 5 or higher then the polymorph will be canceled and creature will cast this spell
- however, creatures won't cancel polymorph earlier than after 3 rounds to avoid dumb situations
- AI will now handle also polymorph self, tenser's transformation and shapechange polymorphs
- AI will not use low CR polymorphs if the CR of the creature is way higher
- AI will keep a track of the shifter form spell limits and won't use talent which has all uses depleted
Spell-engine:
- added module-wise modifier for DC (ie. spellid_DC_MODIFIER on module object)
NWNX_Patch and NWNCX_Patch plugins (current version v1.15):
- fixed crash exploit with cursed items
- ApplyEffectToObject now allows to use DURATION_TYPE_EQUIPPED and DURATION_TYPE_INNATE
- improved OnClientLeave module event: the GetExitingObject() will now return fully valid player object, ie. you can get location and any other info there
- fixed OnHitCastSpell itemproperty overriding the spell concentration check which led into casted spells being incorrectly uninterruptable (issue details)
- complete rewrite of the effect caster level initialization:
- fixed caster level of spell effects cast from an item (which was set to last normal spell caster level or -1 if none such spell was cast by the creature)
- properly takes into account negative levels
- takes into account Pale Master levels if the appropriate module switch is active
- takes into account any custom prestige class levels if the conditions are met (ie. arcane class with prestige class with ArcSpellLvlMod or divine class with prestige class with DivSpellLvlMod). Custom content note: custom arcane class must have SpellCaster equal to 2 in classes.2da.
- takes into account community patch caster level override and modifier features (but only when creator is creature)
- added EffectDump function for the new effect caster level debugging purposes (this is unfortunately working only for server version of the nwnx_patch plugin)
Notes:
1) For ApplyEffectToObject, the new constants are: DURATION_TYPE_EQUIPPED = 3 and DURATION_TYPE_INNATE = 4. I forgot to add this into nwscript.nss so next time. However I have no idea how they behave. I copied this code from leo_x's linux plugin as I needed to make a change there so I included his improvements, but he has no description either. So you need to experiment a bit - make sure you post the results here.
2) The effect caster level is much complicated than it seems to be. On this page I wrote what it does normally and how it behaves now. To explain some of the terms inside that document. Delayed effect is an effect declared in a function that is delayed by DelayCommand or AssignCommand from spellscript. This is for example a case of Bigby's Clenched Fist spell where the stun effect is declared this way.
If you want to test this use NWNXPatch_DumpEffects(oPC); this will print (in server version) all effects (even internal) with all their informations into nwnx_patch.txt.
3) I'm not 100% confident with that -1 caster level on effects created in delays. When the creator is creature they come out undispellable, where previously they were always dispellable just the caster level was wrong and it could make dispel either incorrectly successful or unsuccessful. I think its just Bigby Clenched Fist that does this (inferno/hell inferno are making damage effects which are instant thus not subject to dispelling) and the stun is 1round long anyway so it probably not a problem and even then the stun comes from fist not fist caster so it should basically rely on fist presence anyway. Idk, your opinions?
4) Note that only effects are automatically taking into caster level calculation custom prestige classes, spellscripts will not do this and will only calculate PM levels (if enabled with module switch). This is actually intented to provide a support for custom content with its own spellscripts whose do not utilize CPP spell engine at all. For example, PRC has all spellscripts changed to account for their custom prestige classes that improves arcan/divine spellcasting. This all works correctly except the effects' caster level is unchanged. This will fix this issue (although PRC workarounded this by completely reworked dispels but due to this many spells have to work differently and the dispel is far from vanilla in behavior). Anyway. If you have custom prestige class that enhance arcane/divine spellcasting and you are using CPP spell engine, you need to use SPELL_CASTER_LEVEL_OVERRIDE or SPELL_CASTER_LEVEL_MODIFIER features (prefferably in spellhook) to take effect of your class levels into all spell scripts. And if you use SPELL_CASTER_LEVEL_OVERRIDE, the internal effect caster level will use this value over anything anyway.
Modifié par Shadooow, 24 janvier 2016 - 04:27 .