234 lines
9.0 KiB
Plaintext
234 lines
9.0 KiB
Plaintext
//////////////////////////////////
|
|
/// Script: fxw_inc
|
|
/// Purpose: include file for a Wand of FX
|
|
/// Authors: Jhenne (tallonzek@hotmail.com)
|
|
/// Dopple (dopple@why-bother-me.com)
|
|
//////////////////////////////////
|
|
// function for OnActivateItem
|
|
|
|
object oDM = GetLastSpeaker();
|
|
object oMyTarget = GetLocalObject(oDM, "FXWandTarget");
|
|
location lTargetLoc = GetLocalLocation(oDM, "FXWandLoc");
|
|
int nRandom;
|
|
float fRandom;
|
|
|
|
void FXWand_Firestorm()
|
|
{
|
|
|
|
// FireStorm Effect
|
|
|
|
location lDMLoc = GetLocation ( oDM);
|
|
|
|
// tell the DM object to rain fire and destruction
|
|
AssignCommand ( oDM, ApplyEffectAtLocation ( DURATION_TYPE_INSTANT, EffectVisualEffect ( VFX_FNF_METEOR_SWARM), lTargetLoc));
|
|
AssignCommand ( oDM, DelayCommand (1.0, ApplyEffectAtLocation ( DURATION_TYPE_INSTANT, EffectVisualEffect (VFX_FNF_SCREEN_SHAKE), lTargetLoc)));
|
|
|
|
// create some fires
|
|
object oTargetArea = GetArea(oDM);
|
|
int nXPos, nYPos, nCount;
|
|
for(nCount = 0; nCount < 15; nCount++)
|
|
{
|
|
nXPos = Random(30) - 15;
|
|
nYPos = Random(30) - 15;
|
|
|
|
vector vNewVector = GetPosition(oDM);
|
|
vNewVector.x += nXPos;
|
|
vNewVector.y += nYPos;
|
|
|
|
location lFireLoc = Location(oTargetArea, vNewVector, 0.0);
|
|
object oFire = CreateObject ( OBJECT_TYPE_PLACEABLE, "plc_flamelarge", lFireLoc, FALSE);
|
|
object oDust = CreateObject ( OBJECT_TYPE_PLACEABLE, "plc_dustplume", lFireLoc, FALSE);
|
|
DelayCommand ( 10.0, DestroyObject ( oFire));
|
|
DelayCommand ( 14.0, DestroyObject ( oDust));
|
|
}
|
|
|
|
}
|
|
|
|
void FXWand_Earthquake()
|
|
{
|
|
// Earthquake Effect by Jhenne, 06/29/02
|
|
// declare variables used for targetting and commands.
|
|
location lDMLoc = GetLocation ( oDM);
|
|
|
|
// tell the DM object to shake the screen
|
|
AssignCommand( oDM, ApplyEffectAtLocation ( DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SCREEN_SHAKE), lTargetLoc));
|
|
AssignCommand ( oDM, DelayCommand( 2.8, ApplyEffectAtLocation ( DURATION_TYPE_INSTANT, EffectVisualEffect ( VFX_FNF_SCREEN_BUMP), lTargetLoc)));
|
|
AssignCommand ( oDM, DelayCommand( 3.0, ApplyEffectAtLocation ( DURATION_TYPE_INSTANT, EffectVisualEffect ( VFX_FNF_SCREEN_SHAKE), lTargetLoc)));
|
|
AssignCommand ( oDM, DelayCommand( 4.5, ApplyEffectAtLocation ( DURATION_TYPE_INSTANT, EffectVisualEffect ( VFX_FNF_SCREEN_BUMP), lTargetLoc)));
|
|
AssignCommand ( oDM, DelayCommand( 5.8, ApplyEffectAtLocation ( DURATION_TYPE_INSTANT, EffectVisualEffect ( VFX_FNF_SCREEN_BUMP), lTargetLoc)));
|
|
// tell the DM object to play an earthquake sound
|
|
AssignCommand ( oDM, PlaySound ("as_cv_boomdist1"));
|
|
AssignCommand ( oDM, DelayCommand ( 2.0, PlaySound ("as_wt_thunderds3")));
|
|
AssignCommand ( oDM, DelayCommand ( 4.0, PlaySound ("as_cv_boomdist1")));
|
|
// create a dust plume at the DM and clicking location
|
|
object oTargetArea = GetArea(oDM);
|
|
int nXPos, nYPos, nCount;
|
|
for(nCount = 0; nCount < 15; nCount++)
|
|
{
|
|
nXPos = Random(30) - 15;
|
|
nYPos = Random(30) - 15;
|
|
|
|
vector vNewVector = GetPosition(oDM);
|
|
vNewVector.x += nXPos;
|
|
vNewVector.y += nYPos;
|
|
|
|
location lDustLoc = Location(oTargetArea, vNewVector, 0.0);
|
|
object oDust = CreateObject ( OBJECT_TYPE_PLACEABLE, "plc_dustplume", lDustLoc, FALSE);
|
|
DelayCommand ( 4.0, DestroyObject ( oDust));
|
|
}
|
|
}
|
|
|
|
void FXWand_EarthquakeDamage()
|
|
{
|
|
// Earthquake Effect by Jhenne, 06/29/02
|
|
// declare variables used for targetting and commands.
|
|
location lDMLoc = GetLocation ( oDM);
|
|
|
|
// tell the DM object to shake the screen
|
|
AssignCommand( oDM, ApplyEffectAtLocation ( DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SCREEN_SHAKE), lTargetLoc));
|
|
AssignCommand ( oDM, DelayCommand( 2.8, ApplyEffectAtLocation ( DURATION_TYPE_INSTANT, EffectVisualEffect ( VFX_FNF_SCREEN_BUMP), lTargetLoc)));
|
|
AssignCommand ( oDM, DelayCommand( 3.0, ApplyEffectAtLocation ( DURATION_TYPE_INSTANT, EffectVisualEffect ( VFX_FNF_SCREEN_SHAKE), lTargetLoc)));
|
|
AssignCommand ( oDM, DelayCommand( 4.5, ApplyEffectAtLocation ( DURATION_TYPE_INSTANT, EffectVisualEffect ( VFX_FNF_SCREEN_BUMP), lTargetLoc)));
|
|
AssignCommand ( oDM, DelayCommand( 5.8, ApplyEffectAtLocation ( DURATION_TYPE_INSTANT, EffectVisualEffect ( VFX_FNF_SCREEN_BUMP), lTargetLoc)));
|
|
// tell the DM object to play an earthquake sound
|
|
AssignCommand ( oDM, PlaySound ("as_cv_boomdist1"));
|
|
AssignCommand ( oDM, DelayCommand ( 2.0, PlaySound ("as_wt_thunderds3")));
|
|
AssignCommand ( oDM, DelayCommand ( 4.0, PlaySound ("as_cv_boomdist1")));
|
|
object oTargetArea = GetArea(oDM);
|
|
|
|
object oKnockdownTarget = GetFirstObjectInShape(SHAPE_CUBE, 15.0, lDMLoc, OBJECT_TYPE_CREATURE);
|
|
while(GetIsObjectValid(oKnockdownTarget))
|
|
{
|
|
if (GetIsDM(oKnockdownTarget) == FALSE)
|
|
{
|
|
if (GetSkillRank ( SKILL_DISCIPLINE, oKnockdownTarget) <= 9)
|
|
{
|
|
nRandom=d6();
|
|
fRandom=IntToFloat(nRandom);
|
|
DelayCommand(fRandom, AssignCommand ( oKnockdownTarget, ApplyEffectToObject (DURATION_TYPE_TEMPORARY, EffectKnockdown(), oKnockdownTarget, 6.0)));
|
|
DelayCommand(fRandom, AssignCommand ( oKnockdownTarget, ApplyEffectToObject (DURATION_TYPE_INSTANT, EffectDamage(d20(), DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_PLUS_FIVE), oKnockdownTarget)));
|
|
}
|
|
}
|
|
oKnockdownTarget = GetNextObjectInShape(SHAPE_CUBE, 15.0, lDMLoc, OBJECT_TYPE_CREATURE);
|
|
}
|
|
|
|
//Create dust plumes in random locations around the DM
|
|
int nXPos, nYPos, nCount;
|
|
for(nCount = 0; nCount < 15; nCount++)
|
|
{
|
|
nXPos = Random(30) - 15;
|
|
nYPos = Random(30) - 15;
|
|
|
|
vector vNewVector = GetPosition(oDM);
|
|
vNewVector.x += nXPos;
|
|
vNewVector.y += nYPos;
|
|
|
|
location lDustLoc = Location(oTargetArea, vNewVector, 0.0);
|
|
object oDust = CreateObject ( OBJECT_TYPE_PLACEABLE, "plc_dustplume", lDustLoc, FALSE);
|
|
DelayCommand ( 4.0, DestroyObject ( oDust));
|
|
}
|
|
}
|
|
|
|
void FXWand_AppearEvil()
|
|
{
|
|
location lTarget = GetLocation( oDM);
|
|
|
|
AssignCommand( oDM, ApplyEffectAtLocation ( DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SUMMON_GATE), lTarget));
|
|
}
|
|
|
|
void FXWand_AppearGood()
|
|
{
|
|
location lTarget = GetLocation( oDM);
|
|
|
|
AssignCommand( oDM, ApplyEffectAtLocation ( DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SUMMON_CELESTIAL), lTarget));
|
|
}
|
|
|
|
void FXWand_SummonEvil()
|
|
{
|
|
location lTarget = GetLocation( oDM);
|
|
|
|
AssignCommand( oDM, DelayCommand( 5.0, ApplyEffectAtLocation ( DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SUMMON_GATE), lTargetLoc)));
|
|
}
|
|
|
|
|
|
void FXWand_SummonGood()
|
|
{
|
|
location lTarget = GetLocation( oDM);
|
|
|
|
AssignCommand( oDM, DelayCommand( 5.0, ApplyEffectAtLocation ( DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SUMMON_CELESTIAL), lTargetLoc)));
|
|
}
|
|
|
|
void FXWand_DelayedSummon()
|
|
{
|
|
|
|
AssignCommand ( oDM, DelayCommand ( 5.0, ApplyEffectAtLocation ( DURATION_TYPE_INSTANT, EffectVisualEffect ( VFX_FNF_SUMMON_MONSTER_3), lTargetLoc )));
|
|
}
|
|
|
|
void FXWand_WolfHowl()
|
|
{
|
|
// Wolves Howling by Jhenne, 06/29/02
|
|
|
|
// get a random number and tell the DM object to play the matching sound.
|
|
switch (Random(4))
|
|
{
|
|
case 0: AssignCommand ( oDM, PlaySound("as_an_wolfhowl1"));
|
|
break;
|
|
case 1: AssignCommand ( oDM, PlaySound("as_an_wolfhowl2"));
|
|
break;
|
|
case 2: AssignCommand ( oDM, PlaySound("as_an_wolveshwl1"));
|
|
break;
|
|
case 3: AssignCommand ( oDM, PlaySound("as_an_wolveshow2"));
|
|
break;
|
|
}
|
|
}
|
|
|
|
void FXWand_Lightning()
|
|
{
|
|
// Lightning Strike by Jhenne. 06/29/02
|
|
|
|
// tell the DM object to create a Lightning visual effect at targetted location
|
|
AssignCommand( oDM, ApplyEffectAtLocation ( DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_LIGHTNING_M), lTargetLoc));
|
|
// tell the DM object to play a thunderclap
|
|
AssignCommand ( oDM, PlaySound ("as_wt_thundercl3"));
|
|
// create a scorch mark where the lightning hit
|
|
object oScorch = CreateObject ( OBJECT_TYPE_PLACEABLE, "plc_weathmark", lTargetLoc, FALSE);
|
|
object oTargetArea = GetArea(oDM);
|
|
int nXPos, nYPos, nCount;
|
|
for(nCount = 0; nCount < 5; nCount++)
|
|
{
|
|
nXPos = Random(10) - 5;
|
|
nYPos = Random(10) - 5;
|
|
|
|
vector vNewVector = GetPositionFromLocation(lTargetLoc);
|
|
vNewVector.x += nXPos;
|
|
vNewVector.y += nYPos;
|
|
|
|
location lNewLoc = Location(oTargetArea, vNewVector, 0.0);
|
|
AssignCommand( oDM, ApplyEffectAtLocation ( DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_LIGHTNING_S), lNewLoc));
|
|
}
|
|
DelayCommand ( 20.0, DestroyObject ( oScorch));
|
|
}
|
|
|
|
void FXWand_WomanScream()
|
|
{
|
|
// Woman's Scream by Jhenne, 06/29/02
|
|
|
|
// get a random number and tell the DM object to play the matching sound.
|
|
switch (Random(7))
|
|
{
|
|
case 0: AssignCommand ( oDM, PlaySound("as_pl_screamf1"));
|
|
break;
|
|
case 1: AssignCommand ( oDM, PlaySound("as_pl_screamf2"));
|
|
break;
|
|
case 2: AssignCommand ( oDM, PlaySound("as_pl_screamf3"));
|
|
break;
|
|
case 3: AssignCommand ( oDM, PlaySound("as_pl_screamf4"));
|
|
break;
|
|
case 4: AssignCommand ( oDM, PlaySound("as_pl_screamf5"));
|
|
break;
|
|
case 5: AssignCommand ( oDM, PlaySound("as_pl_screamf6"));
|
|
break;
|
|
case 6: AssignCommand (oDM, PlaySound("as_pl_skriekf2"));
|
|
}
|
|
}
|