PDA

View Full Version : Changing the required level and power of force lightning?


Weiser_Cain
03-28-2004, 08:29 PM
I just watched the starwars trilogy and now I'd like to alter force lightning to be the ultimate ds force power it was in the movie. How could I add the disabling effect it had in the movie? Maybe knockdown?

sora
03-28-2004, 08:55 PM
i dont know anything about modding. but that sounds awsome. what would be cool, is it has the same effect as force push as you said. but it should almost drain all there life, and have them confused afterwards. sorry i dont know how to mod. cool idea though.

tk102
03-28-2004, 10:03 PM
Here's my first impressions of what would be necessary...

The first thing you would need to do is open up spells.2da. You said you want Force Lightning to the ultimate power so you'll need to make it 3rd in the line of Shock powers rather than 2nd. To do this, you would edit the prerequisites column for both FORCE_POWER_LIGHTNING (row 35) and FORCE_POWER_FORCE_STORM (row 25). Change row 35's entry to '43_25' and change row 25's entry to '43'. Next change the pips column of row 25 to '2' and change row 35 to '3'. Finally, change the guardian, consular, sentinel columns for rows 25 and 35 to whatever level you think Force Lightning and Force Storm should be attainable at. Maybe Force Lightning should be '18' across the board. Your call.

Okay now I think should do it for spells.2da. The next thing is to open up k_inc_force.nss. This is where force effects are handled. This is where you can have your fun. Locate the following line: case FORCE_POWER_LIGHTNING:
This is portion of the code is the bit you want to change.

The first thing I'd do is change this bit:

if(nDamage > 10)
{
nDamage = 10;
}
SWFP_DAMAGE = d6(nDamage); to something like
if(nDamage > 12)
{
nDamage = 12;
}
SWFP_DAMAGE = d8(nDamage);
Then to apply the Force Push effects change this bit
effect eLightning = EffectBeam(VFX_BEAM_LIGHTNING_DARK_L, OBJECT_SELF, BODY_NODE_HAND);
effect eDam = EffectDamage(SWFP_DAMAGE, SWFP_DAMAGE_TYPE);
object oUse = GetFirstObjectInShape(SWFP_SHAPE, 17.0, GetLocation(oTarget), FALSE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_PLACEABLE);
effect eBump = EffectVisualEffect(SWFP_DAMAGE_VFX);
int nCnt = 1;
// This will need to be changed to a double while get nearest in shape script.
//ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(1036), OBJECT_SELF);
while(GetIsObjectValid(oUse))
{
if(GetIsEnemy(oUse))
{
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId(), SWFP_HARMFUL));
//Make Immunity Checks
if(!ResistForce(OBJECT_SELF, oUse))
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, eBump, oUse);
if(!WillSave(oUse, Sp_GetJediDCSave(), SWFP_PRIVATE_SAVE_VERSUS_TYPE))
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oUse);
//ApplyEffectToObject(DURATION_TYPE_INSTANT, eForce, oUse);
}
else
{
SWFP_DAMAGE /= 2;
eDam = EffectDamage(SWFP_DAMAGE, SWFP_DAMAGE_TYPE);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oUse);

}
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLightning, oUse, fLightningDuration);
}
else
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectForceFizzle(), OBJECT_SELF);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectForceResisted(OBJECT_SELF), oTarget);
}
}
nCnt++;
oUse = GetNextObjectInShape(SWFP_SHAPE, 17.0, GetLocation(oTarget), FALSE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_PLACEABLE);
}to this (portions stolen from the Force Push section of code)
effect eLightning = EffectBeam(VFX_BEAM_LIGHTNING_DARK_L, OBJECT_SELF, BODY_NODE_HAND);
effect eLink1 = EffectForcePushed();
effect eLink2 = EffectStunned();
eLink2 = SetEffectIcon(eLink2, 11);
eLink1 = EffectLinkEffects(eLink1, EffectVisualEffect(VFX_IMP_FORCE_PUSH));
effect eDam = EffectDamage(SWFP_DAMAGE, SWFP_DAMAGE_TYPE);
object oUse = GetFirstObjectInShape(SWFP_SHAPE, 17.0, GetLocation(oTarget), FALSE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_PLACEABLE);
effect eBump = EffectVisualEffect(SWFP_DAMAGE_VFX);
int nCnt = 1;
int nResist;
int nSaves;
// This will need to be changed to a double while get nearest in shape script.
//ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(1036), OBJECT_SELF);
while(GetIsObjectValid(oUse))
{
if(GetIsEnemy(oUse))
{
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId(), SWFP_HARMFUL));
//Make Immunity Checks
if(!ResistForce(OBJECT_SELF, oUse))
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, eBump, oUse);
if(!WillSave(oUse, Sp_GetJediDCSave(), SWFP_PRIVATE_SAVE_VERSUS_TYPE))
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oUse);
//ApplyEffectToObject(DURATION_TYPE_INSTANT, eForce, oUse);
}
else
{
SWFP_DAMAGE /= 2;
eDam = EffectDamage(SWFP_DAMAGE, SWFP_DAMAGE_TYPE);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oUse);
}
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLightning, oUse, fLightningDuration);
// see if target gets pushed too
nResist = Sp_BlockingChecks(oTarget, eLink1, eLink2, eDam);
if(SP_CheckForcePushViability(oTarget, FALSE))
{
if(nResist == FALSE)
{
nSaves = Sp_MySavingThrows(oTarget);
if(nSaves == FALSE)
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink1, oTarget, 0.1);
DelayCommand(2.55, SP_MyApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink2, oTarget, 2.0));
}
else
{
eDamage = EffectDamage(GetHitDice(OBJECT_SELF)/2, SWFP_DAMAGE_TYPE);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink1, oTarget, 0.1);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FORCE_PUSH), oTarget);
}
}
}
else
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectForceFizzle(), OBJECT_SELF);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectForceResisted(OBJECT_SELF), oTarget);
}
}
nCnt++;
oUse = GetNextObjectInShape(SWFP_SHAPE, 17.0, GetLocation(oTarget), FALSE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_PLACEABLE);
}
I think that would do it.

Now k_inc_force.nss is an include file so I'm not sure how the nwnnsscomp.exe is able to pull it in. You might have to actually recompile k_sp1_generic.nss as well since it is the actual script that gets called from spells.2da.

Um, sorry about the length of the post. I hope that gets you started. PM me if things go awry.