Jump to content

Home

Dialoge Animations


Darth Balor

Recommended Posts

ok here goes. I'm editing a dialoge and I need to make so during a line of dialoge the speaker uses force crush on the listener whom after the crush will stay lifted in the air. This will be done to four different people in the same dialoge then while they are all in the are force drain is used on them killing please help.

Link to comment
Share on other sites

Having them stay lifted in the air after the force crush isn't so easy since the game doesn't have animations that excactly do this. The best I can think of would be to start the force crush and then play the animation that is normally used to show a character floating in a Kolto tank. This script should work for a single character:

// Force Crush the target for fDuration seconds.
void FakeForceCrush(object oVictim, float fDuration);

// Cast Force Drain and kill the victim.
void UseForceDrain(object oCaster, object oVictim);

void FakeForceCrush(object oVictim, float fDuration) {
AssignCommand(oVictim, ClearAllActions());
AssignCommand(oVictim, ActionPlayAnimation(10460, 1.0, fDuration));
DelayCommand(fDuration, AssignCommand(oVictim, ClearAllActions()));
}

void UseForceDrain(object oCaster, object oVictim) {
effect eBeam = EffectBeam(VFX_BEAM_DRAIN_LIFE, oCaster, BODY_NODE_HAND);
effect eVFX = EffectVisualEffect(VFX_PRO_DRAIN);
DelayCommand(0.3, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBeam, oVictim, 2.0));
DelayCommand(0.6, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVFX, oVictim));
DelayCommand(2.0, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDeath(), oVictim));
}

void main() {
int nCutsceneParameter = GetScriptParameter(1);
object oVictim = GetObjectByTag(GetScriptStringParameter());

       // Insert correct tag here.
object oDrainUser = GetObjectByTag("");

// Simulate force crush.
if(nCutsceneParameter == 0) {

	float fCrushDuration = 1.9;
	ActionPauseConversation();

	AssignCommand(oDrainUser, ClearAllActions());
	AssignCommand(oDrainUser, ActionPlayAnimation( ANIMATION_FIREFORGET_FORCE_CAST, 1.0, fCrushDuration));

	FakeForceCrush(oVictim, fCrushDuration);

	DelayCommand(fCrushDuration, ActionResumeConversation());
       }

       // Kill them with Force Drain.
if(nCutsceneParameter == 1) {

	AssignCommand(oDrainUser, ClearAllActions());
	AssignCommand(oDrainUser, ActionPlayAnimation( ANIMATION_FIREFORGET_FORCE_CAST, 1.0, 2.0));

	UseForceDrain(oDrainUser, oVictim);
      }
}

Call this script with script parameter P1 set to 0 in the dlg node where the Force Crush is supposed to start. You can pass the character's tag as a string parameter.

Then add dlg animation 1409 to all the subsequent nodes where the character should remain lifted in the air. Use the character's tag as participant of the animation.

When you reach the node where the character should die, call the script again. This time set the script parameter P1 to 1. Have this node run dlg animation 1409 as well.

 

If it isn't so important that the characters stay levitated in the air I think it would be less trouble to use Force Choke instead of Force Crush animation. Choking can be done with a simple dlg animation (number 10150) and stays active as long as you like while the animation for Force Crush only has a short duration. You can still kill them afterwards with Force Drain as in the script above.

Link to comment
Share on other sites

well this is for the rebuilt enclave scene, with restored lines kreia speaks directly to each master lifting each one into a force crush and holding them there until she drains them all. so this should work.

 

You can pass the character's tag as a string parameter.

Then add dlg animation 1409 to all the subsequent nodes where the character should remain lifted in the air. Use the character's tag as participant of the animation.

 

You can pass the character's tag as a string parameter.

the caster of the crush or the reciever?

 

1409 are you sure it says that is the point animation

Link to comment
Share on other sites

the caster of the crush or the reciever?
The tag for receiver is passed with the string parameter.

 

The tag of the caster is specified in this script line:

 

object oDrainUser = GetObjectByTag("");

 

You still need to put the correct tag in here which I forgot to mention.

 

1409 are you sure it says that is the point animation
1409 is floating in Kolto tank. Point would be 10409.
Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...