Author Topic: Community Patch discussion and development thread  (Read 21035 times)

Legacy_Shadooow

  • Hero Member
  • *****
  • Posts: 7698
  • Karma: +0/-0
Community Patch discussion and development thread
« Reply #750 on: July 26, 2015, 05:41:49 pm »


               


Couple posts above there was a question in regard to font.


http://www.dafont.com/neverwinter.font


Did you mean NWN font?




Yes but this has been solved unless someone still wants to offer a new "main GUI" for this project. Then he would need neverwinter font to do it as the Community Patch label is in current gui written by exactly this font.


               
               

               
            

Legacy_Shadooow

  • Hero Member
  • *****
  • Posts: 7698
  • Karma: +0/-0
Community Patch discussion and development thread
« Reply #751 on: July 31, 2015, 04:00:12 am »


               

So Ive decided to add another two spell override features, so far.


 


SPELL_TARGET_OVERRIDE, object variable that can override an actual spell target. This can be helpful for DMs who want to cast a self-targetted spell on a creature or perhaps for some boss weird immunity where specific spell targeted on him will be returned back on caster (but it wont look like actual spell turning I think as the projectile wont be send back so dunno). Either way this variable expects a scripting system via spellhook.


 


X_LIMIT_OVERRIDE int Y, where X is an ID of the spell (87 implosion, 640 Epic spell Greater Ruin etc.) and Y is an actual limit value. Due to the speciality of this variable there is no ITEM_ / SPECIAL_ABILITY_ / SPELL_ variant only ID version since this cant be really used globally as each spell has different limit, so each spell must be set standalone. Can be used on item though, if an item has spell you want to change limit for, you can set this variable on that item and it will work.


Current spells allowing this modifications are: isaac missile storms (number of maximum missiles), greater ruin (35d6), hellball (10d6 on element damage). Power Word: Kill (100hp limit), Tide of battle monster only spell (100 damage).


This will allow to easily make a monster who will do either less (for whatever reason lol) or more damage with these spells without need to modify spells scripts. For example 640_LIMIT_OVERRIDE int 50 will mean 50d6 damage on single cast of Greater Ruin by this monster.


I cant think of any other spell which can use this, if you think I forgot some tell me I might add it into list.



               
               

               
            

Legacy_Agod

  • Newbie
  • *
  • Posts: 1
  • Karma: +0/-0
Community Patch discussion and development thread
« Reply #752 on: August 08, 2015, 01:16:29 pm »


               

Hi,


 


game crashes every time i try to start with the patch172_beta8.


English Neverwinter Nights: Diamond [GOG] version.


Win7 Pro 64.



               
               

               
            

Legacy_Shadooow

  • Hero Member
  • *****
  • Posts: 7698
  • Karma: +0/-0
Community Patch discussion and development thread
« Reply #753 on: August 08, 2015, 01:38:35 pm »


               


 


Hi,


 


game crashes every time i try to start with the patch172_beta8.


English Neverwinter Nights: Diamond [GOG] version.


Win7 Pro 64.


 




GOG version shouldnt be bugged anymore. But try running 1.69 critical rebuild first.


 


If that doesnt fix the issue then we need to clarify.


Are you installing 1.71 ? or 1.72beta? For past several 1.72betas you need to have 1.71 installed, but last beta should be standalone though.


 


A file size of the NWN/data/xp2patch.bif ?


               
               

               
            

Legacy_Shadooow

  • Hero Member
  • *****
  • Posts: 7698
  • Karma: +0/-0
Community Patch discussion and development thread
« Reply #754 on: August 25, 2015, 08:47:58 am »


               

Im currently compiling together fixed/polished release of the Community Patch 1.71.


 


This will include fixes for several issues that has been found since 1.71 release:


- fix for SpellCastAt event (rare bug that disallowed to finish a quest in SoU where player was supposed to heal NPC with healer's kit)


- cure wound spells not automatically maximizing the result on low difficulty


- cure light wounds heals 4d8 instead of 1d8 (only happens if spells.2da isn't merged to use 70_s0_curewounds)


- spellsIsLightVunerable function always return TRUE due to the bug in code which results into Sunbeam spell doing 6d6 damage all the time and Sunburst can kill any undead that fail save not just vampires


- messed up description/name for one Gruums and Shou Disciple feats


+ tweaked Gruumsh blinding spittle targettype (so its not possible to miss on the floor)


+ colorized Gruums and Shou Disciple class icons


+ special workaround in battletide spell to fix issue where NPCs cast it on enemy due to the wrongly merged spells.2da


 


also removed unneccesary files from patch171.hak and included new auto 2DA merger from leo_x.


 


However, before I will upload this, I need to make sure thats all of it. Few peoples reported "some" issues during campaign and single player modules. I tried to get a details from them but they couldn't tell me. Im not sure if its real then or just some attempt to negative advertisement, but if there is anyone who had this kind of issues in any singleplayer module, please tell me module name, detail of the issue, where and how this issue happened and if you could provide a savegame that would be even better.



               
               

               
            

Legacy_Pstemarie

  • Hero Member
  • *****
  • Posts: 4368
  • Karma: +0/-0
Community Patch discussion and development thread
« Reply #755 on: August 25, 2015, 03:51:47 pm »


               

Might not have been attempts at negative advertisement - sometimes people report a bug, realize they were mistaken, then don't bother to follow up or don't bother responding to requests for more information. You'd be surprised how often I've dealt with this type of stuff with Q.


 


Perhaps you should outline minimal criteria for bug reporting that, if not met, will not constitute a bug report. If they can't provide enough detail so you can replicate it, then I wouldn't worry about it.



               
               

               
            

Legacy_Shadooow

  • Hero Member
  • *****
  • Posts: 7698
  • Karma: +0/-0
Community Patch discussion and development thread
« Reply #756 on: August 29, 2015, 09:29:43 am »


               

Ok, anyway since 1.72 is delayed and will be delayed by a lot due to the new features Im planning which needs a lot of testing, I will soon release a polished version of the 1.71.


 


Except obvious fixes for things announed and missing, for things broken by 1.71 itself and revisited features, is there anything else you would want in this version?



               
               

               
            

Legacy_Gruftlord

  • Sr. Member
  • ****
  • Posts: 490
  • Karma: +0/-0
Community Patch discussion and development thread
« Reply #757 on: August 29, 2015, 11:42:36 am »


               

Why not release this as 1.72 and start working on your new features for a 1.73 version? That way it's less confusing for people (1.71old and 1.71new).


 


I think what you are experiencing is coined 'development hell' (usually applied to games development) where a software is never released, because features and scope are constantly added or changed, and the üroject never reaches a state where it is feature locked and allowed to be beta tested.


 


For future progress, it might be wise to set some goals and a beta plan, with a clear idea that no new features be added during a beta, and the will to rather releases upgrades within a managable scope rather than continuing to add features ad infinitum. Like say: give it some months to colled all the ideas you want to add, while working on it. Then once you know what you want to have for the next version, write that down and try to get it implemented. You then need to find a state where you say: ok now we have the features for the next release, we start testing now. Any new ideas that come up after that point need to be written down and postponed for the next release. Only coding work on the project should focus on getting the wrapped up version bug free and released. after that we begin anew.


 


How long has 1.72 been in beta now (let alone been worked on since the release of 1.70)?



               
               

               
            

Legacy_Shadooow

  • Hero Member
  • *****
  • Posts: 7698
  • Karma: +0/-0
Community Patch discussion and development thread
« Reply #758 on: August 29, 2015, 12:37:01 pm »


               


Why not release this as 1.72 and start working on your new features for a 1.73 version? That way it's less confusing for people (1.71old and 1.71new)




Well I dont really want to make 1.73 really. Majority of the 1.72 features are bound to the nwncx plugin that can be developed standalone after 1.72 final will be done.


 


Still there is a stuff that needs to be added into 1.71, and Ive done this last year when I released 1.71 with 1.70 as well. I called it "(remastered)" and added into it this kind of stuff:


- fixes for issues raised by CPP


- revisited features, that is something which was slightly changed over 1.70 and 1.71


- removed things that were wrong, nonfunctional or simply not used by game at all


- things that should be there but were forgotten (not sure whether anything in this category was readded into 1.70)


 


The "remastered" 1.71 was in plan to come with 1.72 as well for users that doesn't appreciate the advanced 1.72 features, and some of the more hardcore type of fixes and in order to reduce the number of additional packages like "fixforissue1.erf" "fixforissue2.erf" etc. These fixes are better distribute as new release anyway so they don't occupy module resources/override and don't conflict with different packages changing same resource or incoming 1.72.


 


So far, I have around 10 fixes (mostly rare issues or issues with CPP extra features), 4 revisited features, 2 removals and 2 "should-be-there" kind (constants for wounding itemproperty and weapon vfx NONE). And thats all I planned, but if there is something specific from 1.72 which someone would like to see in this fixed 1.71 release for some reason, I will consider such request and might add it.



               
               

               
            

Legacy_Gruftlord

  • Sr. Member
  • ****
  • Posts: 490
  • Karma: +0/-0
Community Patch discussion and development thread
« Reply #759 on: August 29, 2015, 01:51:23 pm »


               

Weren't there some ai fixes and tweaks for 1.72 beta? I'd like to see those.



               
               

               
            

Legacy_Shadooow

  • Hero Member
  • *****
  • Posts: 7698
  • Karma: +0/-0
Community Patch discussion and development thread
« Reply #760 on: August 30, 2015, 01:13:14 pm »


               

Community Patch 1.72 Beta 9 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.


 


Beta9 contains new auto 2DA merged, called 2dilate from leo_x. It has so many advantages over previous tool. The output is readable so there is no longer need to re-save the merged 2das with some 2da editor, also its reliable and it even allows user to select what he wants to merge and what not (in a limited extend controlled by 2da merging schemas that I prepared). You can find it in 1.72 builders resources.


 


Just one warning, this release changelog is huuge wall of text which most of it is understandable only by builders. However feel free to ask for details on anything I wrote. The changelog has limited space so it can't contain all details and factors around.


 


Neverwinter Nights Community Patch 1.72 beta 9 content:

Fixed broken stuff from previous Patch versions:

- Barbarian rage and Mighty rage abilities: fixed selfstacking of the ac penalty + any possible custom effects applied via epicrages that might stack

- Cure light wounds: due to the typo actually healed 3d8 hitpoints more

- Sunburst: added missing kill feedback in case spell killed vampire

- Undeath to death: added missing kill feedback

- fixed quite a critical bug in spellsIsLightVulnerable function which was always true; this caused Sunbeam to always do 6d6 damage instead of 3d6 and allowed Sunburst to kill any undead not just vampires

- readded fix for associates able to speak while they shouldn't be, that somehow didn't get added although it has been announced in beta5

- Greater Sanctuary, Melf's Acid Arrow, Tenser's Transformation, Bigby's Clenched Fist and Bigby's Crushing Fist: fixed some of the declarations of caster level to account for spell overrides

- fixed bug where creature in darkness couldn't use gaze abilities even if she had ultravision/trueseeing

- fixed bug where creature in darkness was considered immune to the gaze effects, even if she had ultravision/trueseeing

- fixed two tiles from beta8 that threw SQRT Domain error when placing


 


Revisited features from previous Patch versions:

- edit comments in the various scripts has been improved so its easier to see what was changed in 1.72 over 1.71

- Delayed Blast Fireball and Glyph of Warding spells were given an exception from the AOE behavior, thus they will affect spell mantle as they very probably should

- Continual flame: the previous solution removed, spell will again mark item as stolen, however this time only in multiplayer


 


HAK version:

- added quickened banshee visual effect into hak version - builders are recommended to add this vfx into their haks, as players without CP installed might think that banshee is bugged and is killing faster than it should, which isn't true, banshee kills quicker now as should and those with CP installed will see both death effect and wailing visual perfectly synchronized


 


New fixes and features:

Tileset fixes:

ttd01_edge.2da - fixed missing cliff edge tile in the corner of the area

tid01_b10_01 - fixed polygon gaps in floor

tid01_b11_01 - fixed polygon gaps in floor

tid01_d15_01 - fixed polygon gap in wall

tcn01_e04_02 - fixed polygon gaps in black coverage with tilefading enabled

 


2DAs:

- itemprops.2da: cast spell itemproperty will be available also on healer kits and thieves tools

- visualeffects.2da: added two new hidden visual effects, VFX_DUR_QUESTION_MARK and VFX_DUR_EXCLAMATION_MARK. Note: this will be visible only for players with this community patch version installed

- diffsettings.2da: very difficult difficulty extra damage reduced from 200% to 150% so this difficulty is more playable now when CP adds so many small features under it such as faster aura activating, smarter AI in reaction on Black Blade of Disaster and some more

- feat.2da: Blinding speed AI category changed to aura in order to force to use this feat as soon as possible and without checking close combat


 


Spells and spellabilities:

- All creature auras (blind, fear, menace, stun, unnatural): made supernatural as per DnD rules; this has basically only one effect, to prevent the same monster who stunned/feared/blinded you with his own aura to dispel that effect from you with Mordekainen's Disjunction or beholder dispel

- Battletide: added special workaround to handle how AI casts this spell. (Default AI casts this spell on enemy and then gives benefits to caster, community patch changed every spell to give benefits to target to fix potions and enable 2da customization, but if someone didnt merged spells.2da properly AI could cast this on player and give aura to player, thats a reason for this extra workaround in spellscript)

- Bard Song and Curse Song: improved lvl 30 song attack bonus, damage, will, fort and reflex by +1 from balance reasons

- Bigby's Forceful Hand: stun vfx will no longer appear on target who has not been affected by this spell at all

- Bless: duration of the visual effect in case of cast on item corrected to match with effect duration

- Blinding Speed: no longer requires concentration and thus cannot be interrupted anymore

- Chaotic shield: effects made undispellable (extraordinary)

- Choking powder: effects made undispellable (extraordinary)

- Darkness: aoe effects are now undispellable (extraordinary)

- Deafning Clang: the deafness onhit is now undispellable (extraordinary)

- Delayed blast fireball: when cast directly on single target make explosion immediately without making AOE object, this modificating is especially useful for PWs as AOEs have negative impact on monster AI and lags

- Gelatiouns cube paralysis: effects made undispellable (extraordinary)

- Identify: added custom content support when the spell is modified to cast on item instead of caster, in such case the spell will identify targetted item without any check

- Implosion: a small code improvement that allows to modify this spell to affect caster without need to code anything else to prevent the bug with automatic death without any roll

- Searing light: damage dice against undead targets raised from k6 to k8 to match spell description

- Shield of faith: removed the visual effect that was shared with protection against evil (to prevent mistaking these two), added "cessate" visual effect (this will run at the end of the duration as a kind of feedback "you just lost some beneficial spell"

- Sleep: shape size wasn't correct (started with HUGE then continued with LARGE, which caused issues)

- Time Stop: a small code improvement which will force multiplayer behavior when there is creature with immunity nearby

- Thunderstone: added sonic saving throw subtype, effects made undispellable (extraordinary)

Scripts:

- 70_spellhook: under Hardcore and higher difficulty, reading scrolls won't be possible under blindness/darkness anymore unless character has true seeing or ultravision effects

- 70_inc_spells: Bodak added into list of creatures vulnerable to light (which will allow to kill any bodak with Sunburst spell)

- 70_inc_spells: custom function GetHasSpellEffectSpecific improved to allow pass -1 as an effect type when you don't want to check any specific effect type just an effect with specific spell id and specific creator

- 70_inc_spells: new function DurationToSeconds that is intented to use instead of Rounds/Turns/HoursToSeconds calls

- 70_s2_aoo: new script that softcodes Attack of Opportunity where builder can decide when to allow and when not or give some bonus to the attacker or victim

- 70_s2_devattk: incorporated the new possibility in the module switch MODULE_SWITCH_DEVASTATING_CRITICAL_ONCE_PER_TARGET

- nw_s2_palm: added new code that softcodes Quivering Palm attack and allows builder to modify its functionality

- nwscript: added new ITEM_VISUAL_NONE constant for ItemPropertyVisualEffect function

- nwscript: added nwscript constant for hidded visual effect VFX_COM_GIB, this effect will explode player body leaves nothing visible not even corpse and also locks camera

- nwscript: added nwscript constants for two unlocked visual effects VFX_DUR_QUESTION_MARK and VFX_DUR_EXCLAMATION_MARK

- x0_i0_spells: spells will now work on dying players, this will solve the weird behavior where player drops below 1 hp by some aoe spell like creeping doom and then he lay in the aoe not taking any damage at all

- x2_inc_switches: the module switch for one roll only devastating behavior has now two possible values, 1: for everyone 2: only for players, meaning monsters with devast will work normally imposing roll vs fort on every critical hit

- x2_im_can* scripts: the variables to disable item crafting can now be used also locally, ie. item with these variables won't be allowed to change


 


Spell engine:

- added new field into spell engine structure, spell.Range, this is used to replace radius size range in spells with area of effect

- added new field into spell engine structure, spell.DurationType, this is used to replace RoundsToSeconds,TurnsToSeconds and HoursToSecond calls with new function DurationToSeconds

- added new field into spell engine structure, spell.DamageCap, this is used to replace a damage cap in various damaging spells, spells affected: blade barrier, burning hands, call of lightning, chain lightning, cone of cold, delayed fireball, fireball, fire storm, flame strike, hammer of gods, horrid wilting, lightning bolt, searing light, sunbeam, vampire touch, bombardment, earthquake, firebrand, sunburst, mestil's acid breath, crumble, gedlees' electric loop, glyph of warding, horizikaul's boom, ice dagger, scincilating sphere, undeath to death

- added new field into spell engine structure, spell.Limit, this is used to replace cap/limit of the various spells, this can be number of missiles, or damage if its not based on hitdice or max hitpoints affected etc, spells affected: epic hellball, epic greater ruin, power word: kill, isaac lesser missile storm, isaac greater missile storm, tide of battle

- new spell overriding variable, use int SPELL_METAMAGIC_MODIFIER on caster to add metamagic on top of already existing metamagic (if any), example SPELL_METAMAGIC_MODIFIER int 2 = every spell cast will be also extended to any of the used metamagic. This is only useable for spells, not special abilities and not items as those cant be already enhanced by metamagic so override is the only variable thats needed there.

- new spell overriding variable, use int SPELL_DAMAGE_CAP_OVERRIDE on caster to override spell damage cap (if any), example SPELL_DAMAGE_CAP_OVERRIDE int 80 = every spell that has a damage cap will have this cap raised to the 80, thus for example Horrid Wilting 1d8 per level up to 80d8 damage.

- new spell overriding variable, use int SPELL_DAMAGE_CAP_MODIFIER on caster to modify spell damage cap (if any), example SPELL_DAMAGE_CAP_MODIFIER int 10 = every spell that has a damage cap will have this cap raised by 10, thus for example Horrid Wilting 1d8 per level up to 35d8 damage.

- new spell overriding variable, use int SPECIAL_ABILITY_DAMAGE_CAP_OVERRIDE on creature

- new spell overriding variable, use int SPECIAL_ABILITY_DAMAGE_CAP_MODIFIER on creature

- new spell overriding variable, use int ITEM_DAMAGE_CAP_OVERRIDE on item

- new spell overriding variable, use int ITEM_DAMAGE_CAP_MODIFIER on item

- new spell overriding variable, use float SPELL_RANGE_OVERRIDE on caster to override spell area of effect height, example SPELL_RANGE_OVERRIDE float 10.0 = sets all spells to have RADIUS_SIZE_COLOSSAL

- new spell overriding variable, use float SPELL_RANGE_MODIFIER on caster to modify spell area of effect height, example SPELL_RANGE_MODIFIER float 2.0 = all spells will have their area of effect heighten by 2.0

- new spell overriding variable, use float SPECIAL_ABILITY_RANGE_OVERRIDE on caster

- new spell overriding variable, use float SPECIAL_ABILITY_RANGE_MODIFIER on caster

- new spell overriding variable, use float ITEM_RANGE_OVERRIDE on item

- new spell overriding variable, use float ITEM_RANGE_MODIFIER on item

- new spell overriding variable, use int SPELL_DURATION_TYPE_OVERRIDE on caster to override spell duration type, 4 possible values, 1 - seconds, 2 - rounds, 3 - turns, 4 - hours. Example: SPELL_DURATION_TYPE_OVERRIDE int 2 = all spells will lasts rounds.

- new spell overriding variable, use int SPELL_DURATION_TYPE_MODIFIER on caster to modify spell duration type. Example: SPELL_DURATION_TYPE_MODIFIER int 1 = spells that lasted seconds will last rounds, spell that lasted rounds will last turns and so on.

- new spell overriding variable, use int SPECIAL_ABILITY_DURATION_TYPE_OVERRIDE on caster

- new spell overriding variable, use int SPECIAL_ABILITY_DURATION_TYPE_MODIFIER on caster

- new spell overriding variable, use int ITEM_DURATION_TYPE_OVERRIDE on item

- new spell overriding variable, use int ITEM_DURATION_TYPE_MODIFIER on item

- new spell overriding variable, use float SPELL_DURATION_OVERRIDE on caster to override spell exact duration, note this happens *after* extending the value you will use won't be doubled anymore. Example: SPELL_DURATION_OVERRIDE float 18.0 = all spells will last only 3rounds.

- new spell overriding variable, use float SPELL_DURATION_MODIFIER on caster to modify spell exact duration, note this happens *after* extending the value you will use won't be doubled anymore. Example: SPELL_DURATION_MODIFIER float 6.0 = all spells will last one round more.

- new spell overriding variable, use float SPECIAL_ABILITY_DURATION_OVERRIDE on caster

- new spell overriding variable, use float SPECIAL_ABILITY_DURATION_MODIFIER on caster

- new spell overriding variable, use float ITEM_DURATION_OVERRIDE on item

- new spell overriding variable, use float ITEM_DURATION_MODIFIER on item

- new spell overriding variable, use int X_CASTER_LEVEL_OVERRIDE on item or caster to override caster level of the spell with ID of X, example 368_CASTER_LEVEL_OVERRIDE int 80 = ice storm with caster level 80

- new spell overriding variable, use int X_DC_OVERRIDE on item or caster to override DC of the spell with ID of X, example 87_CASTER_LEVEL_OVERRIDE int 60 = implosion with DC 60

- new spell overriding variable, use int X_METAMAGIC_OVERRIDE on item or caster to override metamagic of the spell with ID of X, example 463_CASTER_LEVEL_OVERRIDE int 7 = extended, empowered and maximiyed Bigby's Crushing Hand

- new spell overriding variable, use int X_DAMAGE_CAP_OVERRIDE on item or caster to override damage cap of the spell with ID of X, example 58_CASTER_LEVEL_OVERRIDE int 40 = fireball doing 1k6/level up to 40k6

- new spell overriding variable, use float X_RANGE_OVERRIDE on item or caster to override area of effect height of the spell with ID of X, example 114_RANGE_OVERRIDE float 20.0 = Mass Heal will have height of 20.0 (twice as much as RADIUS_SIZE_COLOSSAL)

- new spell overriding variable, use int X_DURATION_TYPE_OVERRIDE on item or caster to override duration type of the spell with ID of X, 4 possible values, 1 - seconds, 2 - rounds, 3 - turns, 4 - hours. Example: 88_DURATION_TYPE_OVERRIDE int 2 = Improved Invisibility will last level/rounds instead of level/turns.

- new spell overriding variable, use float X_DURATION_OVERRIDE on item or caster to override exact duration of the spell with ID of X, note this happens *after* extending the value you will use won't be doubled anymore. Example: 443_DURATION_OVERRIDE float 24.0 = Greater Sanctuary will last 4 rounds only.

- new spell overriding variable, use int X_LIMIT_OVERRIDE Y on item or caster to override various limit of the spell with ID of X, where X is an ID of the spell (448 IGMS, 640 Greater Ruin etc.) and Y is an actual limit value. Example 448_LIMIT_OVERRIDE 50 = Isaac Greater Missile Storm doing up to 50 missiles (if caster has 50caster level). Due to the speciality of this variable there is no ITEM_ / SPECIAL_ABILITY_ / SPELL_ variant only ID version since this can't be really used globally as each spell has different limit, so each spell must be set standalone.

- new spell overriding variable, use object SPELL_TARGET_OVERRIDE on caster to override an actual target of the spell. This is designed mostly for DMs in mind (for example, DM uses DM tool feat on NPC to mark her as a target of the spells, then whatever spell he casts on himself will be cast on this creature), can be used for other purposed eg. sharing spells with familiars. Either way this variable expects a scripting system via spellhook.

Client:


- added few colorized feat icons from the Amethyst Dragon

- new metamagic icons in radial menu/spellbook

- fixed epic spell scroll icons (the fix is only partial, its not an actual scroll but spell icon instead, still its better than "TEMP")


 


NWNX_Patch and NWNCX_Patch plugins (current version v1.12):

- added some more debug informations to make bugtracking easier

- fixed nonfunctional FavoredEnemyFeat feature and FE_MODIFIER variable

- enabled Spontaneous Casting for other classes than cleric, this is controlled by already existing collumn in spells.2da SpontaneouslyCast, where value is now ID of class that can cast the spell spontaneously. 10 = Wizard, 3 = Druid, 2 = Cleric. Value of 1 will for compatibility reasons works as Cleric, obviously. Bard and Sorcerer are not able to use this anyway since they already cast spontaneously and everything. Its not possible to select more than one class but if you would want to make a spontaneous spell for both cleric and druid for example you can always create a two version of that spell, one that will be in druid spellbook one that will be in cleric spellbook only.

- softcoded quivering palm feat, Deathless Mastery feat now grants immunity (which doesn't apply in vanilla due to an overlook)

- softcoded attacks of opportunity + aoo disabled when casting or doing rogue actions, also when wearing magical staff in hand


 


 


 


Notes:


 


This update is huge. I finally decided to step up in the radical spellscript change. Most calls of the RoundsToSeconds, TurnsToSeconds and HoursToSeconds were replaced by new function DurationToSeconds, and spellscripts now uses four new structure elements, spell.Range, spell.DurationType, spell.DamageCap and spell.Limit. And this is just a start. If this change and the new features arising from this will be appreciated, I plan to add also spell.DamageType which would allow to dynamically change spell damage type.


 


Anyway from this reason, the final 1.72 has to be delayed as this might add new issues, I bet I overlooked some spells as usually, actually in the process of rewriting all spells I found out that in few 1.71 spellscripts the spellsDeclareMajorVariables was declared before spellhook which means that spell overrides weren't functional for these spells, this is of course foxed now.


 


I also had to change the spellscript organization a bit. From this reason and the fact that there is so many changes already, I no longer care about backwards comparability. That means that I removed huge wall of comments, unused variables, lines that was commented out and extra blank lines, all with one purpose. To make spellscripts effcient,, easy to read and easy to compare against each other.


 


The new spell script organization is this:


1) pre-declaration, that is filling up spell.Range, spell.DurationType, spell.DamageCap and spell.Limit


2) spellhook [2a) internal spellhook in 70_spellhook, 2b) module spellhook if any]


3) declaration of the spell engine structure via spellsDeclareMajorVariables();


4) spell code


 


You have to follow this new spellscript organization, otherwise the spell-engine overriding features won't work correctly. Pre-declaration has to happen before spellhook, otherwise it won't be possible to read these informations in spellhook.


 


To get access to these informations in module spellhook, use this:



 


int spellDamageCap = GetLocalInt(OBJECT_SELF,"70_SPELLHOOK_DAMAGECAP");

int spellDurationType = GetLocalInt(OBJECT_SELF,"70_SPELLHOOK_DURATION");

int spellLimit = GetLocalInt(OBJECT_SELF,"70_SPELLHOOK_LIMIT");

float spellRange = GetLocalFloat(OBJECT_SELF,"70_SPELLHOOK_RANGE");



 


As for new spell overrides. Except the examples I showed in the beta9 changelog, this can be used to:


- make items which will extend duration of certain spells when carried in inventory


- new itemproperties to do this like "Extended Spell Duration: +1 round" or "Increased Spell Damage Cap: +1"


- enforce a fixed duration for some of the problematic spells like Greater Sanctuary


- new metamagic feats that will automatically make spells heightened or lasts longer


 


Most of these new overrides is however not very practical to use manually. Most of the times you will want to do this in spellhook dynamically. In spellhook, you can read current spell range, damagecap, durationtype and limit and then you can decide whether and how to modify it. In case of fixed duration for example, you should check whether extend metamagic was used before you set duration override as the duration modifications are resolved *after* extending in spellscript.



               
               

               
            

Legacy_Tonden_Ockay

  • Hero Member
  • *****
  • Posts: 891
  • Karma: +0/-0
Community Patch discussion and development thread
« Reply #761 on: August 30, 2015, 01:39:24 pm »


               

I want to say " Very Nice Work Shadooow " Thanks for doing all this work for the community to enjoy. Its people like you who help keep this this 13 year old game a live and help make it what it is today.  



               
               

               
            

Legacy_R_TEAM

  • Newbie
  • *
  • Posts: 22
  • Karma: +0/-0
Community Patch discussion and development thread
« Reply #762 on: August 30, 2015, 08:10:32 pm »


               

Hi,


 


nice new relase and impresive bug fixing list '<img'>


But i have an question ..


In the beta8 Relase it was an Override folder with spells.2da ... in the beta9 it is no override folder more - so i have to remove the spells.2da from the beta8 from the override folder ?


 


Regards


R-TEAM



               
               

               
            

Legacy_Shadooow

  • Hero Member
  • *****
  • Posts: 7698
  • Karma: +0/-0
Community Patch discussion and development thread
« Reply #763 on: August 30, 2015, 08:25:58 pm »


               


Hi,


 


nice new relase and impresive bug fixing list '<img'>


But i have an question ..


In the beta8 Relase it was an Override folder with spells.2da ... in the beta9 it is no override folder more - so i have to remove the spells.2da from the beta8 from the override folder ?


 


Regards


R-TEAM




if there was something like this it was misfit that shouldnt be there, definitely get rid of it it can be anything since im workng on several projects simultaneously...


               
               

               
            

Legacy_Shadooow

  • Hero Member
  • *****
  • Posts: 7698
  • Karma: +0/-0
Community Patch discussion and development thread
« Reply #764 on: August 30, 2015, 08:40:40 pm »


               

BTW share your thoughts about spell rewrite, check out some spellscripts compare them with 1.71 or vanilla version, tell me what you think about readability and reusability.


 


Tell me what do you think about structure element names (ie. spell.DurationType, spell.DamageCap, spell.Limit ...) and variables names (ie. SPECIAL_ABILITY_DURATION_TYPE_OVERRIDE...), are they convinient, do they easily identify what informaton are they holding? Are they easy to remember? And if answer for any of this is no, how would you named it?


 


Is there anything more you would want to externalize?


 


Should spells with +1/level max 15 (lke greater dispelling) be added to the spell.DamageCap or should there be new variable for that like "spell.Cap" ?


 


 


 


Also got one proposal, when I was working on all of this I realized that the spell variables for items are neccessary complicated. There is actually no need for a variables with ITEM_ prefix as those are set on the item directly so they can't conflict with anything. I think that if items used SPELL_ prefix variables just wth the caveat of settng that on item, it would be easier to use, remember and describe in readme hehe. There is little issue with backwards compatibilty as its a bit unfortunate for those using this feature in 1.71 would then have to rewrite variables on all these items manually. Is it however possible to keep code checking both old way and new way so it shouldnt be problem. Even if not, I dont think the number of such items would be too high, and there is always a possibility to rename the variable dynamically via script in OnAcquire event or maybe OnClientEnter.