Files
RATDOG/_module/nss/g_fireworksfinal.nss
Jaysyn904 0f13e6c538 Initial module commit
Initial module commit.
2021-08-29 23:34:48 -04:00

330 lines
17 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Fireworks Finale
//:: g_fireworksfinal
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
This is called by g_fireworks after so many fireworks have been shot. This is a
heavily scripted event. If you don't know what to do don't mess with it.
If you do edit it make sure you always use DelayCommand with the varible
"fTimeDelay" Make sure you increase "fTimeDelay" or everything will happen at
the same time.
*/
//:://////////////////////////////////////////////
//:: Created By: Jay Clark
//:: Created On: August 31, 2004
//:://////////////////////////////////////////////
void main()
{
object oSource = GetObjectByTag("FireworksSource");
object oArea = GetArea(oSource);
object oTarget;
string sTag;
effect eMissile = EffectVisualEffect(VFX_IMP_MIRV);
effect eDam = EffectDamage(1);
effect eFire = EffectVisualEffect(VFX_COM_HIT_FIRE);
//Single Targets to use later On!
//These can be used by you to make other patterns for the finale
object oSTarget1 = GetObjectByTag("FireworksSTarget1");
object oSTarget2 = GetObjectByTag("FireworksSTarget2");
object oSTarget3 = GetObjectByTag("FireworksSTarget3");
object oSTarget4 = GetObjectByTag("FireworksSTarget4");
object oSTarget5 = GetObjectByTag("FireworksSTarget5");
object oSTarget6 = GetObjectByTag("FireworksSTarget6");
object oSTarget7 = GetObjectByTag("FireworksSTarget7");
object oSTarget8 = GetObjectByTag("FireworksSTarget8");
object oSTarget9 = GetObjectByTag("FireworksSTarget9");
object oSTarget10 = GetObjectByTag("FireworksSTarget10");
object oSTarget11 = GetObjectByTag("FireworksSTarget11");
object oSTarget12 = GetObjectByTag("FireworksSTarget12");
object oMTarget = GetObjectByTag("FireworksMTarget3");
object oMTarget1 = GetObjectByTag("FireworksMTarget1");
object oMTarget2 = GetObjectByTag("FireworksMTarget2");
object oLTarget = GetObjectByTag("FireworksLTarget3");
object oLTarget1 = GetObjectByTag("FireworksLTarget1");
object oLTarget2 = GetObjectByTag("FireworksLTarget2");
int EffectNum;
int EffectNum1;
int i;
float fTimeDelay = 1.0;
float fDist, fDelay;
SetLocalInt(oSource,"NewMedFire",FALSE);
SetLocalInt(oSource,"NEWFIREWORK",FALSE);
SetLocalInt(oSource,"NOSPAWN",TRUE);
//Counter Clockwise with Howl
DelayCommand(fTimeDelay,SetLocalInt(oSource,"SmallFireWorks",3));; //Howl Circle
for(i=1;i<13;i++)
{
sTag = "FireworksSTarget" + IntToString(i);
oTarget = GetObjectByTag(sTag);
fDist = GetDistanceBetween(oSource, oTarget);
fDelay = fDist/(3.0 * log(fDist) + 2.0);
fDelay += fTimeDelay;
DelayCommand(fTimeDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oSource));
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
DelayCommand(fTimeDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oTarget));
fTimeDelay += 0.5;
fDelay += fTimeDelay;
}
fTimeDelay += 3.0;
//Clockwise with dispel
DelayCommand(fTimeDelay,SetLocalInt(oSource,"SmallFireWorks",2)); //Dispel
for(i=12;i>0;i--)
{
sTag = "FireworksSTarget" + IntToString(i);
oTarget = GetObjectByTag(sTag);
fDist = GetDistanceBetween(oSource, oTarget);
fDelay = fDist/(3.0 * log(fDist) + 2.0);
fDelay += fTimeDelay;
DelayCommand(fTimeDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oSource));
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
DelayCommand(fTimeDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oTarget));
fTimeDelay += 0.5;
fDelay += fTimeDelay;
}
fTimeDelay += 3.0;
//Order fire with Electric Burst
DelayCommand(fTimeDelay,SetLocalInt(oSource,"SmallFireWorks",9));
for(i=1;i<7;i++)
{
sTag = "FireworksSTarget" + IntToString(i);
oTarget = GetObjectByTag(sTag);
fDist = GetDistanceBetween(oSource, oTarget);
fDelay = fDist/(3.0 * log(fDist) + 2.0);
fDelay += fTimeDelay;
DelayCommand(fTimeDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oSource));
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
DelayCommand(fTimeDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oTarget));
fTimeDelay += 0.5;
fDelay += fTimeDelay;
sTag = "FireworksSTarget" + IntToString(i+6);
oTarget = GetObjectByTag(sTag);
fDist = GetDistanceBetween(oSource, oTarget);
fDelay = fDist/(3.0 * log(fDist) + 2.0);
fDelay += fTimeDelay;
DelayCommand(fTimeDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oSource));
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
DelayCommand(fTimeDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oTarget));
fTimeDelay += 0.5;
fDelay += fTimeDelay;
}
for(i=7;i<13;i++)
{
sTag = "FireworksSTarget" + IntToString(i);
oTarget = GetObjectByTag(sTag);
fDist = GetDistanceBetween(oSource, oTarget);
fDelay = fDist/(3.0 * log(fDist) + 2.0);
fDelay += fTimeDelay;
DelayCommand(fTimeDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oSource));
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
DelayCommand(fTimeDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oTarget));
fTimeDelay += 0.5;
fDelay += fTimeDelay;
sTag = "FireworksSTarget" + IntToString(i-6);
oTarget = GetObjectByTag(sTag);
fDist = GetDistanceBetween(oSource, oTarget);
fDelay = fDist/(3.0 * log(fDist) + 2.0);
fDelay += fTimeDelay;
DelayCommand(fTimeDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oSource));
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
DelayCommand(fTimeDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oTarget));
fTimeDelay += 0.5;
fDelay += fTimeDelay;
}
fTimeDelay += 3.0;
//Fire Medium Firework off followed by a Large shortly after
fDist = GetDistanceBetween(oSource, oMTarget);
fDelay = fDist/(3.0 * log(fDist) + 2.0);
fDelay += fTimeDelay;
DelayCommand(fTimeDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oSource));
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oMTarget));
DelayCommand(fTimeDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oMTarget));
fTimeDelay += 3.0;
fDist = GetDistanceBetween(oSource, oLTarget);
fDelay = fDist/(3.0 * log(fDist) + 2.0);
fDelay += fTimeDelay;
DelayCommand(fTimeDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oSource));
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oLTarget));
DelayCommand(fTimeDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oLTarget));
//Odd smalls go off with unused effects
fTimeDelay += 10.0;
EffectNum = 13;
fDist = GetDistanceBetween(oSource, oSTarget1);
fDelay = fDist/(3.0 * log(fDist) + 2.0);
fDelay += fTimeDelay;
DelayCommand(fTimeDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oSource));
DelayCommand(fTimeDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oSTarget1));
DelayCommand(fDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_FIREBALL),oSTarget1));
DelayCommand(fDelay+0.5,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(EffectNum),oSTarget1));
fDist = GetDistanceBetween(oSource, oSTarget3);
fDelay = fDist/(3.0 * log(fDist) + 2.0);
fDelay += fTimeDelay;
DelayCommand(fTimeDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oSource));
DelayCommand(fTimeDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oSTarget3));
DelayCommand(fDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_FIREBALL),oSTarget3));
DelayCommand(fDelay+0.5,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(EffectNum),oSTarget3));
fDist = GetDistanceBetween(oSource, oSTarget5);
fDelay = fDist/(3.0 * log(fDist) + 2.0);
fDelay += fTimeDelay;
DelayCommand(fTimeDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oSource));
DelayCommand(fTimeDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oSTarget5));
DelayCommand(fDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_FIREBALL),oSTarget5));
DelayCommand(fDelay+0.5,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(EffectNum),oSTarget5));
fDist = GetDistanceBetween(oSource, oSTarget7);
fDelay = fDist/(3.0 * log(fDist) + 2.0);
fDelay += fTimeDelay;
DelayCommand(fTimeDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oSource));
DelayCommand(fTimeDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oSTarget7));
DelayCommand(fDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_FIREBALL),oSTarget7));
DelayCommand(fDelay+0.5,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(EffectNum),oSTarget7));
fDist = GetDistanceBetween(oSource, oSTarget9);
fDelay = fDist/(3.0 * log(fDist) + 2.0);
fDelay += fTimeDelay;
DelayCommand(fTimeDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oSource));
DelayCommand(fTimeDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oSTarget9));
DelayCommand(fDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_FIREBALL),oSTarget9));
DelayCommand(fDelay+0.5,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(EffectNum),oSTarget9));
fDist = GetDistanceBetween(oSource, oSTarget11);
fDelay = fDist/(3.0 * log(fDist) + 2.0);
fDelay += fTimeDelay;
DelayCommand(fTimeDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oSource));
DelayCommand(fTimeDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oSTarget11));
DelayCommand(fDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_FIREBALL),oSTarget11));
DelayCommand(fDelay+0.5,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(EffectNum),oSTarget11));
//Even Small go off now
fTimeDelay += 2.0;
EffectNum1 = 13;
fDist = GetDistanceBetween(oSource, oSTarget2);
fDelay = fDist/(3.0 * log(fDist) + 2.0);
fDelay += fTimeDelay;
DelayCommand(fTimeDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oSource));
DelayCommand(fTimeDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oSTarget2));
DelayCommand(fDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_FIREBALL),oSTarget2));
DelayCommand(fDelay+0.5,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(EffectNum1),oSTarget2));
fDist = GetDistanceBetween(oSource, oSTarget4);
fDelay = fDist/(3.0 * log(fDist) + 2.0);
fDelay += fTimeDelay;
DelayCommand(fTimeDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oSource));
DelayCommand(fTimeDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oSTarget4));
DelayCommand(fDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_FIREBALL),oSTarget4));
DelayCommand(fDelay+0.5,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(EffectNum1),oSTarget4));
fDist = GetDistanceBetween(oSource, oSTarget6);
fDelay = fDist/(3.0 * log(fDist) + 2.0);
fDelay += fTimeDelay;
DelayCommand(fTimeDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oSource));
DelayCommand(fTimeDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oSTarget6));
DelayCommand(fDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_FIREBALL),oSTarget6));
DelayCommand(fDelay+0.5,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(EffectNum1),oSTarget6));
fDist = GetDistanceBetween(oSource, oSTarget8);
fDelay = fDist/(3.0 * log(fDist) + 2.0);
fDelay += fTimeDelay;
DelayCommand(fTimeDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oSource));
DelayCommand(fTimeDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oSTarget8));
DelayCommand(fDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_FIREBALL),oSTarget8));
DelayCommand(fDelay+0.5,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(EffectNum1),oSTarget8));
fDist = GetDistanceBetween(oSource, oSTarget10);
fDelay = fDist/(3.0 * log(fDist) + 2.0);
fDelay += fTimeDelay;
DelayCommand(fTimeDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oSource));
DelayCommand(fTimeDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oSTarget10));
DelayCommand(fDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_FIREBALL),oSTarget10));
DelayCommand(fDelay+0.5,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(EffectNum1),oSTarget10));
fDist = GetDistanceBetween(oSource, oSTarget12);
fDelay = fDist/(3.0 * log(fDist) + 2.0);
fDelay += fTimeDelay;
DelayCommand(fTimeDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oSource));
DelayCommand(fTimeDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oSTarget12));
DelayCommand(fDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_FIREBALL),oSTarget12));
DelayCommand(fDelay+0.5,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(EffectNum1),oSTarget12));
//Put some Rapid shot Random Mediums here
for(i=1;i<11;i++)
{
fDist = GetDistanceBetween(oSource, oMTarget);
fDelay = fDist/(3.0 * log(fDist) + 2.0);
fDelay += fTimeDelay;
DelayCommand(fTimeDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oSource));
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oMTarget));
DelayCommand(fTimeDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oMTarget));
fTimeDelay += 2.5;
}
//GRAND ENDING!
fTimeDelay += 6.0;
//Grand Ending here Weird without darkness with a dragon flight to a big explosion.
fDist = GetDistanceBetween(oSource, oLTarget);
fDelay = fDist/(3.0 * log(fDist) + 2.0);
fDelay += fTimeDelay;
DelayCommand(fTimeDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oSource));
DelayCommand(fTimeDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oLTarget));
DelayCommand(fDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_FIREBALL),oLTarget));
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(323), oLTarget));
fTimeDelay = fDelay + 1.0;
DelayCommand(fTimeDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(488), oLTarget));
fTimeDelay += 5.0;
DelayCommand(fTimeDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(464), oLTarget));
fTimeDelay += 4.0;
DelayCommand(fTimeDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(477), oLTarget));
for(i=1;i<13;i++)
{
sTag = "FireworksSTarget" + IntToString(i);
oTarget = GetObjectByTag(sTag);
fDist = GetDistanceBetween(oSource, oTarget);
fDelay = fDist/(3.0 * log(fDist) + 2.0);
fDelay += fTimeDelay;
DelayCommand(fTimeDelay,ApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oSource));
DelayCommand(fTimeDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oTarget));
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(193), oTarget));
DelayCommand(fDelay+0.5, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(407), oTarget));
DelayCommand(fDelay+1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(459), oTarget));
}
fTimeDelay += 5.0;
//Stop the Music
DelayCommand(fTimeDelay,MusicBattleStop(oArea));
//Turn TileLights back on
DelayCommand(fTimeDelay,ExecuteScript("g_lightson",oTarget));
//Clean up all the targets
fTimeDelay += 5.0;
DestroyObject(oSTarget1,fTimeDelay);
DestroyObject(oSTarget2,fTimeDelay);
DestroyObject(oSTarget3,fTimeDelay);
DestroyObject(oSTarget4,fTimeDelay);
DestroyObject(oSTarget5,fTimeDelay);
DestroyObject(oSTarget6,fTimeDelay);
DestroyObject(oSTarget7,fTimeDelay);
DestroyObject(oSTarget8,fTimeDelay);
DestroyObject(oSTarget9,fTimeDelay);
DestroyObject(oSTarget10,fTimeDelay);
DestroyObject(oSTarget11,fTimeDelay);
DestroyObject(oSTarget1,fTimeDelay);
DestroyObject(oMTarget,fTimeDelay);
DestroyObject(oMTarget2,fTimeDelay);
DestroyObject(oMTarget,fTimeDelay);
DestroyObject(oLTarget1,fTimeDelay);
DestroyObject(oLTarget,fTimeDelay);
DestroyObject(oLTarget,fTimeDelay);
//Allow for another show to start
DelayCommand(fTimeDelay,SetLocalInt(oArea,"FIREWORKSHOW",FALSE));
}