Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
106 lines
3.3 KiB
Plaintext
106 lines
3.3 KiB
Plaintext
//:://////////////////////////////////////////////
|
|
//:: FileName: "ss_ep_direwinter"
|
|
/* Purpose: Dire Winter - turns entire area the spell was cast in into a
|
|
winter-wonderland.
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Boneshank
|
|
//:: Last Updated On:
|
|
//:://////////////////////////////////////////////
|
|
|
|
#include "prc_alterations"
|
|
#include "inc_epicspells"
|
|
|
|
void DoWinterCheck(object oArea, float fDuration);
|
|
|
|
const int X2_TL_GROUNDTILE_ICE = 426;
|
|
|
|
void TLChangeAreaGroundTiles(object oArea, int nGroundTileConst, int nColumns, int nRows, float fZOffset = -0.4f )
|
|
{
|
|
// Author: Brad "Cutscene" Prince
|
|
// * flood area with tiles
|
|
object oTile;
|
|
// * put ice everywhere
|
|
vector vPos;
|
|
vPos.x = 5.0;
|
|
vPos.y = 0.0;
|
|
vPos.z = fZOffset;
|
|
float fFace = 0.0;
|
|
location lLoc;
|
|
|
|
// * fill x axis
|
|
int i, j;
|
|
for (i=0 ; i <= nColumns; i++)
|
|
{
|
|
vPos.y = -5.0;
|
|
// fill y
|
|
for (j=0; j <= nRows; j++)
|
|
{
|
|
vPos.y = vPos.y + 10.0;
|
|
lLoc = Location(oArea, vPos, fFace);
|
|
// Ice tile (even though it says water).
|
|
oTile = CreateObject(OBJECT_TYPE_PLACEABLE, "plc_invisobj", lLoc,FALSE, "x2_tmp_tile");
|
|
SetPlotFlag(oTile,TRUE);
|
|
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(nGroundTileConst), oTile);
|
|
}
|
|
vPos.x = vPos.x + 10.0;
|
|
}
|
|
|
|
}
|
|
|
|
void main()
|
|
{
|
|
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
|
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_EVOCATION);
|
|
|
|
if (!X2PreSpellCastCode())
|
|
{
|
|
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
|
return;
|
|
}
|
|
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_DIREWIN))
|
|
{
|
|
object oArea = GetArea(OBJECT_SELF);
|
|
float fDuration = HoursToSeconds(20) - 6.0;
|
|
TLChangeAreaGroundTiles(oArea, X2_TL_GROUNDTILE_ICE, 32, 32, 0.3);
|
|
SetWeather(oArea, WEATHER_SNOW);
|
|
// Add icy look to all placeables in area.
|
|
effect eIce = EffectVisualEffect(VFX_DUR_ICESKIN);
|
|
object oItem = GetFirstObjectInArea(oArea);
|
|
while (oItem != OBJECT_INVALID)
|
|
{
|
|
if (GetObjectType(oItem) == OBJECT_TYPE_PLACEABLE)
|
|
{
|
|
float fDelay = PRCGetRandomDelay();
|
|
DelayCommand(fDelay,
|
|
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY,
|
|
eIce, oItem, fDuration, TRUE, -1, GetTotalCastingLevel(OBJECT_SELF)));
|
|
}
|
|
oItem = GetNextObjectInArea(oArea);
|
|
}
|
|
DelayCommand(6.0, DoWinterCheck(oArea, fDuration));
|
|
DelayCommand(fDuration, SetWeather(oArea, WEATHER_USE_AREA_SETTINGS));
|
|
}
|
|
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
|
}
|
|
|
|
void DoWinterCheck(object oArea, float fDuration)
|
|
{
|
|
int nDam;
|
|
effect eDam;
|
|
object oTarget = GetFirstObjectInArea(oArea);
|
|
while (oTarget != OBJECT_INVALID)
|
|
{
|
|
if (GetObjectType(oTarget) == OBJECT_TYPE_CREATURE)
|
|
{
|
|
nDam = d6(2);
|
|
eDam = EffectDamage(nDam, DAMAGE_TYPE_COLD);
|
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
|
|
}
|
|
oTarget = GetNextObjectInArea(oArea);
|
|
}
|
|
fDuration -= 6.0;
|
|
if (fDuration > 1.0)
|
|
DelayCommand(6.0, DoWinterCheck(oArea, fDuration));
|
|
}
|