Aller au contenu

Photo

Community Patch discussion and development thread


  • Veuillez vous connecter pour répondre
919 réponses à ce sujet

#751
Shadooow

Shadooow
  • Members
  • 4 470 messages

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.



#752
Shadooow

Shadooow
  • Members
  • 4 470 messages

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.



#753
Agod

Agod
  • Members
  • 1 messages

Hi,

 

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

English Neverwinter Nights: Diamond [GOG] version.

Win7 Pro 64.



#754
Shadooow

Shadooow
  • Members
  • 4 470 messages

 

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 ?



#755
Shadooow

Shadooow
  • Members
  • 4 470 messages

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.


  • WhiteTiger aime ceci

#756
Pstemarie

Pstemarie
  • Members
  • 2 745 messages

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.


  • WhiteTiger aime ceci

#757
Shadooow

Shadooow
  • Members
  • 4 470 messages

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?


  • WhiteTiger aime ceci

#758
Gruftlord

Gruftlord
  • Members
  • 348 messages

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)?



#759
Shadooow

Shadooow
  • Members
  • 4 470 messages

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.


  • WhiteTiger aime ceci

#760
Gruftlord

Gruftlord
  • Members
  • 348 messages

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



#761
Shadooow

Shadooow
  • Members
  • 4 470 messages

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.


  • Squatting Monk, TheOneBlackRider et WhiteTiger aiment ceci

#762
Tonden_Ockay

Tonden_Ockay
  • Members
  • 564 messages

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.  



#763
R_TEAM

R_TEAM
  • Members
  • 19 messages

Hi,

 

nice new relase and impresive bug fixing list :)

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



#764
Shadooow

Shadooow
  • Members
  • 4 470 messages

Hi,

 

nice new relase and impresive bug fixing list :)

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...


  • WhiteTiger aime ceci

#765
Shadooow

Shadooow
  • Members
  • 4 470 messages

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.


  • WhiteTiger aime ceci

#766
Shadooow

Shadooow
  • Members
  • 4 470 messages

Small report.

 

So far decided to externalize "spell target type", ie. constant SPELL_TARGET_*. While this obviously won't allow to turn singletarget spells into area of effect, it allows to change a spell hostile to everyone into enemies only in spellhook without touching the spellscript. You can use it either directly for specific spell or dynamically. For example this would allow to code Archmage PrC's ability Mastery of Shapes.

 

Will rewrite also GetReflexAdjustedDamage function in order to allow modify evasion or to code similar ability like evasion and Im going to include the no evasion in armor rule I published on vault long time ago inside as a module switch.

 

Another possible externalizations:

damage type - to allow code Mastery of Elements ability of Archmage

saving throw type - to allow code ability that change saving throw of the spell, it would be really useful for NPCs as well, especially in high magic worlds where players can have (improved) evasion from items and thus reflex spells are quite easily overcome
 


  • WhiteTiger aime ceci

#767
WhiteTiger

WhiteTiger
  • Members
  • 479 messages

Cool community patch team. Keep it up!



#768
Shadooow

Shadooow
  • Members
  • 4 470 messages

Cool community patch team. Keep it up!

"the team" consist of single person :D


  • shadguy et WhiteTiger aiment ceci

#769
Malagant

Malagant
  • Members
  • 221 messages

What changes did you make to the IMProvments package originally by Adinz & Six? All it states is "1.0c - updated to 1.69/1.70/1.71 by shadooow" - no notes, no explanation (especially considering they were out long after 1.69 in the first place), and no discernible difference.



#770
Shadooow

Shadooow
  • Members
  • 4 470 messages

What changes did you make to the IMProvments package originally by Adinz & Six? All it states is "1.0c - updated to 1.69/1.70/1.71 by shadooow" - no notes, no explanation (especially considering they were out long after 1.69 in the first place), and no discernible difference.

its appearance.2da so i incorporated changes to that 2da from 1.71, that means:

- placeholder for hidden apperances (in order to prevent user from reusing these lines)

- various appearance fixes: footstep type, appearance sounds

there is more of this but im not sure whats in 1.71 already and whats in 1.72 im currently working on (edit: and i added into this only changes from 1.71)



#771
Malagant

Malagant
  • Members
  • 221 messages

No problem. I use these so I wasn't sure if it was something I'd need or not. Thank you for the information.



#772
Syrophir

Syrophir
  • Members
  • 5 messages

Hi, not sure if it's the right thread to ask but would I have to merge anything to use "CPP 1.72beta9" with Aielund modules (fake EMS) or am I good to go with CEP 2.6 (+ 2.61)?



#773
Shadooow

Shadooow
  • Members
  • 4 470 messages

Hi, not sure if it's the right thread to ask but would I have to merge anything to use "CPP 1.72beta9" with Aielund modules (fake EMS) or am I good to go with CEP 2.6 (+ 2.61)?

As a player, basically you shouldn't worry about compatibility at all. Of course there will always be something that will be disabled due to the conflict with the same file in module/hak etc. but thats not player's responsibility at all. You just have to expect that not everything from CPP will work, especially if module uses EMS/TonyK etc. and keep that in mind when posting a bug report.



#774
Shadooow

Shadooow
  • Members
  • 4 470 messages

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

 

This is probably last beta before final release. I tested all I could, now to be 100% sure everything works as intented this needs to be tested in uncontrollable environment as is persistent world. Im looking for volunteers who would like to use 1.72 on their PW - I will of course provide full support for any issue that might appear. I really hope there is someone who can do this as is nearly impossible to test every feature to make sure everything works as intented especially due to the ammount of them. PM me if you can help with final testing.

 

Neverwinter Nights Community Patch 1.72 beta 10 content:

Fixed broken stuff from previous Patch versions:
- fixed bug in a function ForcePolymorphEnd which did not ended polymorph correctly on a player that repolymorphed
- fixed nonfunctional temp hps on shapes from polymorph self and shapechange spells
- fixed stacking merged itemproperties in special case when repolymorph in multiplayer copied old merged itemproperties

 

Revisited features from previous Patch versions:
- Psionic inertial barrier: rescripted to use CPP spell engine to fix the targetting issues that any polymorph spell cant be cast on any object (which in vanilla isn't problem as the script is written to only apply effects on OBJECT_SELF, while 1.71 changed all these scripts to GetSpellTargetObject in order to provide custom content compatibility)
- Tenser Transformation: removed the int/cha/wis undocumented bonuses that were added in 1.70 to fix losing spell slots - but this code unfortunately didn't provided this functionality anyway
- removed undocumented overriding crate models from NWNEnhanced that were added in 1.70 (it doesn't look like there is any fix in them, only reskin)

New fixes and features:

Tileset fixes:
- tcn01_z06_01 - whole tile was mispositioned by 1 pixel in both X and Y directions
- tic01_j15_01 - fixed small polygon gap in floor around wall pillar
- tdc01_f14_01 - fixed polygon gaps in black coverage with tilefading enabled
- tdc01_f16_01 - fixed polygon gaps in black coverage with tilefading enabled
- tdc01_f20_01 - fixed polygon gaps in black coverage with tilefading enabled
- tdc01_g14_01 - fixed polygon gaps in black coverage with tilefading enabled
- tdc01_g15_01 - fixed polygon gaps in black coverage with tilefading enabled
 

Spells and spellabilities:
- Tide of battle (special spell): added missing target type - which allowed to hurt anyone even in NoPvP area
- Tenser Transformation: fixed losing the hp/attacks/fort when repolymorph happened, fixed not losing temp hp when polymorph was canceled before the actual spell expired (this is even backwards compatible - it will work even without rewritting the spell to use new polymorph engine)
- several spells which has no saving throw rescripted to allow use of the saving throw via spellhook (icestorm, heal, harm, vampiric touch, acid arrow and few more)
- spells that doesn't check spell resistance rescripted to allow add this check via spellhook (earthquake, crumble, greater thunderclap, creeping doom, dispels, breaches)

Scripts:
- 70_spellhook: fixed targetting bug that allows to cast any polymorph spell on any target no matter its range
- x2_inc_switches: added module switch which will disable a recursive check for polymorph end - this is useful to optimize the code in multiplayer
- x2_inc_switches: added module switch which will merge casting abilities from all items no matter what given shape merges in order to avoid losing spellslots in environment without NWNX (NWNX_Patch handles this automatically and in a better way)
- x2_inc_switches: added module switch to enforce DnD hardcore rules for evasion - evasion won't work in medium/heavy armor or when is character helpless (stun, paralysis, sleep, petrify, dying)
- x2_inc_switches: added module switch which will detach paralysis immunity from mind spells immunity (NWNX_Patch dependant feature)

Spell-engine related:
- added new field into spell engine structure, spell.DamageType, this is used to replace damage type in spells (eg. change all cold damage spells into fire or just for changing single spell damage type, eg. changing crumble sonic into magical)
- added new field into spell engine structure, spell.SavingThrow, this is used to replace saving throw the spell is imposing (eg. if player has Feat X, replace all fort saving throws with will) or even remove the saving throw (set to SAVING_THROW_NONE = 4 for this functionality), the spell in such case works as if the saving throw was always failed
- added new field into spell engine structure, spell.SR, this is used to disable (or enable) spell resistance check (eg. npc whose spells will ignore SR)
- added new field into spell engine structure, spell.TargetType, this is used to replace target type scheme spell checks (eg. change all selective hostile spells into standard hostile, or backwards, it also allows to turn aoe spells into singletarget, but not backwards)
- new spell overriding variable, use int SPELL_DAMAGE_TYPE_OVERRIDE on caster to override spell damage type. valid constants are DAMAGE_TYPE_*, check lexicon (http://www.nwnlexico...tle=Damage_type) for direct values if you plan to use this outside of script editor
- new spell overriding variable, use int SPECIAL_ABILITY_DAMAGE_TYPE_OVERRIDE on caster
- new spell overriding variable, use int ITEM_DAMAGE_TYPE_OVERRIDE on item
- new spell overriding variable, use int X_DAMAGE_TYPE_OVERRIDE on item or caster to override damage type of the spell with ID of X, example 368_DAMAGE_TYPE_OVERRIDE int 16 = ice storm with acid damage
- new spell overriding variable, use int SPELL_SAVING_THROW_OVERRIDE on caster to override saving throw that spell uses. Values: 1 - fortitude, 2 - reflex, 3 - will, 4 - none.
- new spell overriding variable, use int SPECIAL_ABILITY_SAVING_THROW_OVERRIDE on caster
- new spell overriding variable, use int ITEM_SAVING_THROW_OVERRIDE on item
- new spell overriding variable, use int X_SAVING_THROW_OVERRIDE on item or caster to override saving throw of the spell with ID of X, example 89_SAVING_THROW_OVERRIDE int 2 = implosion with reflex saving throw
- new spell overriding variable, use int SPELL_SR_OVERRIDE on caster to override whether spell checks spell resistance or not. Values: 1 - yes, -1 no.
- new spell overriding variable, use int SPECIAL_ABILITY_SR_OVERRIDE on caster
- new spell overriding variable, use int ITEM_SR_OVERRIDE on item
- new spell overriding variable, use int X_SR_OVERRIDE on item or caster to override spell resistance of the pell with ID of X, example 423_SR_OVERRIDE int -1 = bombardment spell will ignore SR
- new spell overriding variable, use int SPELL_TARGET_TYPE_OVERRIDE on caster to override target type scheme that spell uses. Values: 1 - all allies, 2 - single target, 3 - selective hostile, 4 - standard hostile.
- new spell overriding variable, use int SPECIAL_ABILITY_TARGET_TYPE_OVERRIDE on caster
- new spell overriding variable, use int ITEM_TARGET_TYPE_OVERRIDE on item
- new spell overriding variable, use int X_TARGET_TYPE_OVERRIDE on item or caster to override target type selection scheme of the spell with ID of X, example 367_TARGET_TYPE_OVERRIDE int 3 = horrid wilting which will not harm party members

Client:
- updated PC Widget tool to include 1.72 module switches

 

NWNX_Patch and NWNCX_Patch plugins (current version v1.13):
- enabled detaching immunity to paralysis from immunity to mind spells

 

 

Notes:

 

1) I had in plan to add more of the More TNO Placeables hak - however when browsing, I found out that its very hard to determine whats an improvement and whats "just a reskin". I decided I will not do it. If someone else wants to browse this hak and choose what it good addition into community patch, there is an override patch-hak I created for this.

 

2) Im also probably done with nwnx_patch. I had some things in plan but turned out they are out of my abilities (enabling flying - ie. set a X,Y position as walkable for flying creatures, softcode knockdown, enable open container GUI on equipped items, automatically equip new stack of throwing weapons, casting silent spell not breaking stealth mode). Unfortunately noone from those I sent sourcecode helped with anything so I dont expect any more help with this. What NWNX_Patch needs the most is some bigger rewrite to avoid collision with other plugins, unfortunately this is also out of my abilities (mostly). So if there are conflicts, you have to find out yourself and decide which plugin to prefer and which to disable.

 

3) The new spell script structure should be final (link example script for fireball). I don't think there is anything else that needs to be externalized like DamageCap, DamageType, SavingThrow and other were. Only remaining things are SAVING_THROW_TYPE_* which is not so important at all + it could be changed in MySavingThrows if someone wanted to do it. Also there is a shape type, but there are only 3 types, sphere, cube and line. Turning sphere into line has no sense, and sphere and cube are almost identical anyway. There will be always something I havent counted with and which will require to rewrite certain function or whole spellscript but current structure should be enough for majority of the features and almost everything should be now doable via spellhook without touching spellscripts at all.

 

4) Documentation. This will probably take me a whole month with the way Im active atm. This is my main task currently because peoples ask for features while they are already available here just not documented in a comprehensive way.


  • WhiteTiger aime ceci

#775
WildWhisper

WildWhisper
  • Members
  • 2 messages

Doesn`t work cleric`s Endure Elements on my Cleric/Bard build.

upd:

all resist elements like spells are broken. Or is it what called "balance"?