Arcane spells and Armor

Scripted ALFA systems & related tech discussions (ACR)

Moderators: ALFA Administrators, Staff - Technical

User avatar
wvincenti
Rust Monster
Posts: 1129
Joined: Mon Jan 05, 2004 5:32 pm
Location: NJ, USA (GMT -5)

Re: Arcane spells and Armor

Post by wvincenti »

So it's buried in a footnote, not in the spell description?
Well that explains a lot of confusion.

That being said, I still wouldn't nerf the spell.
I don't see Ftr/Mages or Clerics taking over the world with unhittable ACs and the DMs still hold all of the cards.

-Bill
Zelknolf wrote:
The Player's Handbook (2003), Renton publisher, p 122, Armor Qualities subheading, par 5 wrote:Armor/ Shield Bonus: Each armor grants an armor bonus to AC, while shields grant a shield bonus to AC. The armor bonus from a suit of armor doesn't stack with other effects or items that grant an armor bonus, such as the mage armor spell or bracers of armor. Similarly, the shield bonus from a shield doesn't stack with other effects that grant a shield bonus, such as a shield spell.
  • Currently NWN1 ALFA: Ryld Ky'bler
    Currently NWN2: Gwindor Faelivrin, still not actually dead!

    Formerly: Timyin Tim, Glorfindel Inglorion and Beleg Thalionestel amongst others.
t-ice
Dungeon Master
Posts: 2106
Joined: Fri Apr 17, 2009 6:24 pm

Re: Arcane spells and Armor

Post by t-ice »

AC of 30+ for a lvl2 wiz/fght, or a wizzy buffing meleers, is good as "taking over the world" goes at appropriate CR, and a couple above.

AC = 10 + 8 armor + 1 dex + 4 tower + 3 CE + 4 mage armor = 30.

That's without Luck of Heroes or other buffs, such as barkskin, but assuming full plate. Also holds for a cleric with magic domain, where it's even more silly in self-buff (unless ACR removed that domain availability). Instant +4 armor at caster level 1.

Nothing is invulnerable, but that pretty much gives you at least a couple more CRs worth you can take, as opposed to using any other lvl1 spells than mage armor. There's good reason it doesn't stack in SRD. Also a point is that physical attacks tend to be the overwhelming majority of what PCs meet in PW practice, perhaps even disproportionally so. At low levels (and in real-time combat) AC just simply is king.

As far as mechanics is broken, this is it. Of course we can tell stories regardless of the mechanics, but while we are talking about and fixing the core rules, please take a shot at this.
Last edited by t-ice on Tue Nov 02, 2010 1:41 pm, edited 1 time in total.
User avatar
Blindhamsterman
Haste Bear
Posts: 2396
Joined: Fri Jun 04, 2004 11:13 am
Location: GMT

Re: Arcane spells and Armor

Post by Blindhamsterman »

t-ice wrote:AC of 30+ for a lvl2 wiz/fght, or a wizzy buffing meleers, is good as "taking over the world" goes at appropriate CR, and a couple above.

AC = 10 + 8 armor + 1 dex + 4 tower + 3 CE + 4 mage armor = 30.

That's without Luck of Heroes or other buffs, such as barkskin, but assuming full plate. Also holds for a cleric with magic domain, where it's even more silly in self-buff (unless ACR removed that domain availability). Instant +4 armor at caster level 1.

Nothing is invulnerable, but that pretty much gives you at least a couple more CRs worth you can take, as opposed to using any other lvl1 spells than mage armor. There's good reason it doesn't stack in SRD. Also a point is that physical attacks tend to be the overwhelming majority of what PCs meet in PW practice, perhaps even disproportionally so. At low levels (and in real-time combat) AC just simply is king.

As far as mechanics is broken, this is it. Of course we can tell stories regardless of the mechanics, but while we are talking about and fixing the core rules, please take a shot at this.
Think its worth noting... that anything with a CR of 1 or 2 vs the PC from above example is only hitting that PC on a 20 either way, i.e. an AC of 30 makes no difference what so ever...

Goblins and kobolds have +1 or +2 to attack, an orc likely has +3 or +4... a Troll has I believe +9 or +10 maybe. An Ogre Berzerker has something like +14.

All I'm saying here is that the +4 extra from mage armour isn't as broken as it seems on first inspection, as it makes little difference, those it makes unhittable, were most likely unhittable beforehand.

having said that, I am looking into a fix, but as seen in the other thread, Obsidian made a sensible fix for these spells very difficult.
User avatar
Regas
ALFA Representative
Posts: 2254
Joined: Thu May 20, 2004 1:00 am
Location: USA

Re: Arcane spells and Armor

Post by Regas »

I've tested the armor/ mage armor spell combo and it does not stack as advertised. The best I can get is a plus three to ac (I believe there's a stacking penalty of some sort by protection type). Shield does stack partially as well but doesn't last very long. Mirror Image is the same way. Also, the penalty for wearing armor is severe, -- spell failure. No mage in plate is going to be able to get off spells anyway. If you have players Clark Kenting in and out of armor, well -- the DMs know how to handle that.

Keep in mind that the entire engine is slanted to combat types so we should apply a bit common sense when trying to match core rules from PnP (e.g. is giving everyone max hps per level core rules? Doesn’t this grossly favor the fighters at the determent of rogues and mages?). If this is an issue because we are trying to introduce a new PrC, maybe we should look at the PrC; wizards, especially lower level ones, are the least survivable class in alfa as it is.
Game spy ID: Regas Seive
GMT -5(EST)
Zelknolf
Chosen of Forumamus, God of Forums
Posts: 6139
Joined: Tue Jul 05, 2005 7:04 pm

Re: Arcane spells and Armor

Post by Zelknolf »

A quick response to Bill -- it's in the passage before the armor stats that no one reads. And mentioned indirectly in the passages before the spell descriptions that no one reads. PHB authors expect us to read the PHB like a book. We expect to use it as a reference document. Disconnect is obvious. *fist shaken in the direction of responsible persons*


To the actual uberness of mage armor stacking:

Getting +3 AC on top of a chain shirt would probably be our most striking example of a power difference made by mage armor's stacking.

Assuming 14 dex on a human wiz/rog (aiming arcane trickster, no doubt!) in a chain shirt, we've got 16 AC without mage armor and 19 armor with. Let's say this level 2 goes up against some appropriate bad guys (say... kobolds with morning stars? Hollering horrible things in draconic -- like that your cheeks are pale. Would be horribly emasculating if you were one of them... I suppose it's a lizard thing). Average kobold warrior has 11 strength (13 base, -2 racial) and a +1 BAB. At one attack per round, the kobold will hit once 30% of the time (a roll of 15-20 is a hit) for an average of 4.5 damage per hit. About 1.35 damage/rd -- except that it's random, so, obviously not exact. If the same mage runs in with mage armor up, that kobold hits 15% of the time and does 0.675 damage/rd. That AT-hopeful is now taking 50% less damage, and has thus defended himself as displacement would. The difference is only slightly less severe if there are two kobolds (one gets flanking, so the mage takes about 43% less damage)

As a general rule, though, the more AC you have, the more valuable it is to get more -- until you get it high enough that your opponents have to start rolling 20s to hit you, especially if they need to roll 20s when buffed and flanking. It makes issues of stacking like this troublesome, even though I hope we all agree that low-level wizards could use some mercy.

That said, we had a solution in NWN1 that prevented stacking and still granted proper bonuses to targets in light armor. It'd require some refitting to make it cooperate with NWN2's setup for armor, but it could be done if someone's keen on passing me the baton on that.

//edited because I'm bad at math.
User avatar
Blindhamsterman
Haste Bear
Posts: 2396
Joined: Fri Jun 04, 2004 11:13 am
Location: GMT

Re: Arcane spells and Armor

Post by Blindhamsterman »

I'd be interested in seeing what you'd come up with in the past (nwn1 mage armour gave +1 natural, +1 dodge, +1 Enchanted Armour and +1 something else compared to nwn2s +4 enchanted armour that doesn't stack with the +1 of a chain shirt +1 but happily stacks with the +4 base AC improvement of the chain shirt itself)

I've spent some time looking at this over the past few days and nothing I've come up with has worked properly. The lack of AC_ARMOR_BONUS is silly IMO...
Zelknolf
Chosen of Forumamus, God of Forums
Posts: 6139
Joined: Tue Jul 05, 2005 7:04 pm

Re: Arcane spells and Armor

Post by Zelknolf »

NWN1 out of the box came with +1 armor enhancement, +1 natural enhancement, +1 deflection, and +1 dodge. NWN1 ALFA did not. In the final version, it took its AC bonus from the torso model (this would be the part that needs rejiggering -- obviously not how armor bonus is calculated in NWN2) of the worn armor and the base AC and used a pseudoheartbeat to prevent armor changes from causing trouble. It, thus, effectively dodged the issue of stacking with armor bonus and created a difficult-to-solve problem with stacking with other spells that PnP should stack with (namely, a fellow in totally normal clothes should be able to cast mage armor and magic vestment, and profit fully from both) and item properties it should stack with (i.e. padded armor +2 + mage armor = 6 AC [4 armor, 2 armor enhancement], not 4. But it gave 4 [1 armor, 2 armor enhancement, 3 armor enhancement], because there were few enough players in NWN1 by the time I was refining our spells to that kind of degree that I could look at our player base and confidently say "Not an issue.")
t-ice
Dungeon Master
Posts: 2106
Joined: Fri Apr 17, 2009 6:24 pm

Re: Arcane spells and Armor

Post by t-ice »

How about that AC_stackswitheverything_bonus thing you mentioned blindhamster?

If you can make a check that the spell on casting forces unequip on armor if that armor has AC above 0, and putting on such armor dispels the spell, then you could give 4 of that stackswitheverything bonus (or failing that, perhaps dodge which also stacks)?
Zelknolf
Chosen of Forumamus, God of Forums
Posts: 6139
Joined: Tue Jul 05, 2005 7:04 pm

Re: Arcane spells and Armor

Post by Zelknolf »

Are there reference documents anywhere that establish what scripting techniques are considered "kludges" and are, therefore, unacceptable? I have a fix for mage armor that will make it cooperate with magic armor / magic vestment / bracers of armor / regular armor / changes of gear during the spell's duration with PnP style stacking but it requires the addition of a placeholder creature in an OOC area in every module, the calling of a self-calling function (on a delay- that's easy to calibrate), and a scripted 2da lookup.


If those are unacceptable, a more-nerfed NWN1 version is inventable, which would have to strip mage armor on equipment changes.
User avatar
Ithildur
Dungeon Master
Posts: 3548
Joined: Wed Oct 06, 2004 7:46 am
Location: Best pizza town in the universe
Contact:

Re: Arcane spells and Armor

Post by Ithildur »

Keep in mind this isn't just an issue for ftr/mages or rogue/mage types. If you have a mage type friend he can instantly give your full plate fighter guy a +3 full plate that lasts hours really really cheaply via a lvl 1spellslot or a scroll. Alternately, someone with modest UMD can pull off a lvl1 Mage Armor scroll, on himself or others. Having people running around in cheap +3 armor is definitely going to impact gameplay and makes Magic Vestment, a lvl 2 or 3 cleric spell, completely redundant.

Oh, there's also the lvl 3 spell Improved/Greater Mage Armor. If not fixed, I'm pretty sure it'd make instant +5 armor possible.
Formerly: Aglaril Shaelara, Faerun's unlikeliest Bladesinger
Current main: Ky - something

It’s not the critic who counts...The credit belongs to the man who actually is in the arena, who strives violently, who errs and comes up short again and again...who if he wins, knows the triumph of high achievement, but who if he fails, fails while daring greatly.-T. Roosevelt
t-ice
Dungeon Master
Posts: 2106
Joined: Fri Apr 17, 2009 6:24 pm

Re: Arcane spells and Armor

Post by t-ice »

That's correct, Ithildur. Improved Mage Armor should either face the same remake, or rather preferably imo, just be removed.
Zelknolf
Chosen of Forumamus, God of Forums
Posts: 6139
Joined: Tue Jul 05, 2005 7:04 pm

Re: Arcane spells and Armor

Post by Zelknolf »

Class does not enter into my proposed fix, and said fix accounts for all sources of armor and armor enhancement bonuses that I am aware of. As far as the script is concerned, it doesn't matter if the target is a fighter or a mage who dumped feats into armor proficiency; it only checks if the target is getting armor and armor enhancement bonuses. And it only really needs to.

I would prefer to defer discussion of the level 3 spell until there is a plan for the spell being actively discussed. Attempting to grow a project as it is under development dooms it to either a variety of death that is typically created by Veilan or to a failure to properly handle quality as we saw with NWN2's original release. As it is, I would like to know what options for a fix are available. Once that is handled, we can have short and cozy discussions about how to handle greater mage armor and shield.
Zelknolf
Chosen of Forumamus, God of Forums
Posts: 6139
Joined: Tue Jul 05, 2005 7:04 pm

Re: Arcane spells and Armor

Post by Zelknolf »

Testers Needed:
http://rapidshare.com/files/429305225/m ... r_test.mod

Apologies for using rapidshare. It was convenient at the time.


This module contains a modified version of mage armor:
- Should not stack with any armor bonus
- Should stack with any armor enhancement bonus.
- Should update itself upon changes to gear or other buffs cast within 6 seconds
- Should not cooperate with improved mage armor. (see below)

This module does not contain a fix to improved mage armor. Don't test it. It's still broken.
This module does not contain a fix to shield. Don't test it. It's still broken.

Reproducability is key in any bugs found. The more information you can give me about what exactly was done to make effects misbehave, the more likely it is that I'll be able to figure out what has gone wrong.
User avatar
Blindhamsterman
Haste Bear
Posts: 2396
Joined: Fri Jun 04, 2004 11:13 am
Location: GMT

Re: Arcane spells and Armor

Post by Blindhamsterman »

won't let me download it to test. Intrigued as to what you went with for a work around however. Will try the download again in the morning.
Zelknolf
Chosen of Forumamus, God of Forums
Posts: 6139
Joined: Tue Jul 05, 2005 7:04 pm

Re: Arcane spells and Armor

Post by Zelknolf »

Make this into your nw_s0_magearm

Code: Select all

//==================================================
// Mage Armor
// By: Zelknolf
// Date: Nov 3, 2010
//==================================================
//
/*
	This version of Mage Armor is designed to bring
	the spell closer to the spell as described in
	the 3.5 PHB. Though the spell does not offer
	any special bonuses against incorporeal 
	attackers, it appropriately stacks / does not
	stack with magical armor, regular armor, armor-
	improving spells such as Magic Vestment, and
	bracers of armor.
*/
//==================================================

#include "nwn2_inc_spells"
#include "nw_i0_spells"
#include "x2_inc_spellhook" 

void CheckArmor(object oArmor, object oTarget, float fDuration);

void main()
{
	if (!X2PreSpellCastCode()) return;
	
	object oTarget = GetSpellTargetObject();
	object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget);
	
	int nBaseAC = 0;
	int nEnhancedAC = 0;
	int nCasterLevel = GetCasterLevel(oTarget);
	float fDuration = HoursToSeconds(nCasterLevel);	
	
		
	if(GetIsObjectValid(oArmor))
	{
		int nArmorType = GetArmorRulesType(oArmor);
		nBaseAC = StringToInt(Get2DAString("armorrulestats", "ACBONUS", nArmorType));
		itemproperty ipArmor = GetFirstItemProperty(oArmor);
		while(GetIsItemPropertyValid(ipArmor))
		{
			if(GetItemPropertyType(ipArmor) == ITEM_PROPERTY_AC_BONUS)
			{
				int nEnhancement = GetItemPropertyCostTableValue(ipArmor);
				if(nEnhancedAC < nEnhancement)
					nEnhancedAC = nEnhancement;		
			}
			ipArmor = GetNextItemProperty(oArmor);
		}	
	}
	
	int nMageArmorBonus = 4 - nBaseAC;
	effect eMageArmor, eDur, eLink;
	
	if(nMageArmorBonus < 1)
	{
		//=== This spell isn't helping right now. That's okay; the VFX will keep us warm at night ===//
		eLink = EffectVisualEffect(100000);
	}
	else
	{
		nMageArmorBonus += nEnhancedAC;
		eMageArmor = EffectACIncrease(nMageArmorBonus, AC_ARMOUR_ENCHANTMENT_BONUS);		
		eDur = EffectVisualEffect(100000);
		eLink = EffectLinkEffects(eMageArmor, eDur);
	}
	

	
	ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDuration);
	DelayCommand(6.0f, CheckArmor(oArmor, oTarget, fDuration));
}

void CheckArmor(object oArmor, object oTarget, float fDuration)
{
	fDuration -= 6.0f;
		
	//=== The spell has ended or expired. Return to save memory. ===//
	int bDispelled = TRUE;
	
	effect eEffect = GetFirstEffect(oTarget);	
	while(GetIsEffectValid(eEffect))
	{
		if(GetEffectType(eEffect)         == EFFECT_TYPE_VISUALEFFECT &&
		   GetEffectInteger(eEffect, 0)   == 100000 &&
		   GetEffectSubType(eEffect)      == SUBTYPE_MAGICAL &&
		   GetEffectDurationType(eEffect) == DURATION_TYPE_TEMPORARY)
		     bDispelled = FALSE;
		eEffect = GetNextEffect(oTarget);
	}

	if(bDispelled)
		return;
		
	//=== This is another mage armor spell. Return to save memory. ===//
	if(fDuration < 0.0f)
		return;

	//=== Armor has not changed. No need to calculate. ===//				
	if(oArmor == GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget))
	{
		DelayCommand(6.0f, CheckArmor(oArmor, oTarget, fDuration));
		return;
	}
	
	//=== Armor is new; we need to re-apply the effect with new calculations ===//
	eEffect = GetFirstEffect(oTarget);
	while(GetIsEffectValid(eEffect))
	{		
		if(GetEffectType(eEffect)         == EFFECT_TYPE_VISUALEFFECT &&
		   GetEffectInteger(eEffect, 0)   == 100000 &&
		   GetEffectSubType(eEffect)      == SUBTYPE_MAGICAL &&
		   GetEffectDurationType(eEffect) == DURATION_TYPE_TEMPORARY)
		     RemoveEffect(oTarget, eEffect);		
		eEffect = GetNextEffect(oTarget);
	}
	
	object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget);
	
	int nBaseAC = 0;
	int nEnhancedAC = 0;
	int nCasterLevel = GetCasterLevel(oTarget);
	float fDuration = HoursToSeconds(nCasterLevel);	
	
	if(GetIsObjectValid(oArmor))
	{
		int nArmorType = GetArmorRulesType(oArmor);
		nBaseAC = StringToInt(Get2DAString("armorrulestats", "ACBONUS", nArmorType));
		itemproperty ipArmor = GetFirstItemProperty(oArmor);
		while(GetIsItemPropertyValid(ipArmor))
		{
			if(GetItemPropertyType(ipArmor) == ITEM_PROPERTY_AC_BONUS)
			{
				int nEnhancement = GetItemPropertyCostTableValue(ipArmor);
				if(nEnhancedAC < nEnhancement)
					nEnhancedAC = nEnhancement;		
			}
			ipArmor = GetNextItemProperty(oArmor);
		}	
	}
	
	int nMageArmorBonus = 4 - nBaseAC;
	effect eMageArmor, eDur, eLink;
	
	if(nMageArmorBonus < 1)
	{
		//==== This is a placeholder. It exists in case someone casts dispel ===//
		eMageArmor = EffectSkillDecrease(0, 1);
	}
	else
	{
		nMageArmorBonus += nEnhancedAC;
		eMageArmor = EffectACIncrease(nMageArmorBonus, AC_ARMOUR_ENCHANTMENT_BONUS);		
	}
	
	eDur = EffectVisualEffect(100000);
	eLink = EffectLinkEffects(eMageArmor, eDur);
	
	ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDuration);	
	DelayCommand(6.0f, CheckArmor(oArmor, oTarget, fDuration));	
}
Locked