User Tools

Site Tools


cerea2:build:wards

Wards

Magical wards are blocker objects that can block movement throught them, but they can be dispelled. Wards can either be one time, or they can be recharged after time, i.e. each dispel will just remove them for some time, and they will reappear after a while.

One time wards are mostly meant for DMs to create dynamically. Reappearing wards are the ones which should be used by the module builders.

One Time Wards

One time wards consists of placeable called “Ward” (look is like arcane circle). The placeable is plot object non static and it has cp_g_w_onspellcastat script on it which will be triggered when spell is cast on it. If no IgnoreOnSpellCastAt variable is set on the ward, and the spell cast at it is some kind of dispel magic spell, then it is an attempt to dispel the ward.

The difficulty of dispelling the ward is stored as local int variable DispelDC on the ward. If it is not set then default is 20.

Depending on the dispelling spell caster get some bonus to the dispelling attempt:

Spell Level cap Bonus
Lesser Dispel 5 0
Dispel Magic 10 10
Voracious Dispelling 10 10
Greater Dispelling 15 20
Pilfer Magic none 30
Mordenkainens Disjunction none 30

Then casters caster level is capped to level cap, and spellcraft skill and bonus are added to that. This gets the final skill. If skill + d20 check is successfull against the DC of the ward then ward is dispelled.

When ward is dispelled then it is destroyed and OnDeath event will then remove the associated blocking collision ball from the spot. Each ward placeable has also heartbeat script that will see that if ward is not initialized, then it will create the associated collision ball of suitable size. The ball size is taken from the WardSize variable of the ward or if that is not set, then the last 2 characters of the ward tag are used.

Variables on wards:

Variable Type Description
DispelDC Integer DC of dispelling the ward. Defaults to 20.
creator String Name of the person who created the ward.
IgnoreOnSpellCastAt Int If set then ignore spells.
CastSpellOnDispelFail Int Spell number that is cast on the dispeller when dispel fails.
CastSpellOnDispelFailMetaMagic Int Metamagic flags of spell to be casted when dispel fails.
CastSpellOnDispel Int Spell number that is cast on the dispeller when dispel succeeds.
CastSpellOnDispelMetaMagic Int Metamagic flags of spell to be casted when dispel succeeds.

Some calculations

Level 3 cleric/wizard is able to cast lesser dispel. Spellcraft is class skill so he might have 7 ranks. Thus level 3 cleric or level 3 wizard will be able to dispel ward having DC of 3 + 0 + 7 + 1 (roll) = 11 every time, and has 50% change of being able to dispell ward of DC of 20 and can succeed on DC 30 ward.

Level 10 cleric / wizard is able to cast dispel magic. They most likely have spill focus on spellcraft at that level, so they have skill of 15 in spellcraft (+ ability bonus of 2 or so). Thus they can dispel ward having DC of 10 (level) + 10 (bonus) + 15 (skill) + 1 = 36 every time. On that level they might have enough power to cast ritual of mordenkainens disjunction (level 9 spell). So with ritual they can dispel ward with DC of 10 (level) + 30 (bonus) + 15 (skill) + 1 = 56 every time…

My De Aylomeignequewizlindonnerwasfin is level 7 wizard, having spellcraft of 18 + 2 from heroism (cast normally) + 2 from Fox cunning (cast with ritual to save power) has skill of 22, and she can then cast mordenkainens disjunction with ritual of DC 24 (skill 22), so she has 10% fail probability in there, and then she can dispel ward having DC of 7 (level) + 30 (bonus) + 22 (skill) = 60 always..

Reappearing Wards

Reappearing wards are bit different from one time wards. First of all, they are completely invisible until you go too close. This is done so that module builder put down a trigger, that will actually spawn the visible part of the ward. The invisible blocker is created on the area enter, so people cannot go past them anyways. The idea is that we do not announce everybody that there is ward until they walk to it.

Module builder will set up trigger ct_q_w_ward that will check if ward is there at all. If not then it will check when it was last time dispelled and if it is long enough from last time, it will recreate the ward and blocker. If the blocker is there, but no visibile ward is present, then the visibile ward is created.

The visible ward is removed on the area exit if there is no one left on the area.

Variables on the trigger:

Variable Type Description
DispelDC int DC required to dispel the ward
WardSize int Size of the ward in meters (1-10)
WardLocation string Tag of WP where the ward will be put
WardOffTime int How many seconds before ward is recreated once dispelled. If negative do not recreate, if not set then use default of 120 seconds.

Note The tag of the trigger MUST be ct_g_w_ward.

Following variables are copied from the trigger to the ward: creator (String), IgnoreOnSpellCastAt (Int), CastSpellOnDispelFail (Int), CastSpellOnDispelFailMetaMagic (Int), CastSpellOnDispel (Int), CastSpellOnDispelMetaMagic (Int).

cerea2/build/wards.txt · Last modified: 2015/05/03 12:32 by 127.0.0.1