Update 13/03/23
This is the combo I'm using now. It's not the same as the old version; it's a bit closer to the xbox dlc.
Code: Select all
// forward declaration of attack animations
Animation("stand_comboattack1a"); // slash attack
Animation("stand_comboattack2a"); // melee transition to sprint attack part 1
Animation("stand_comboattack2b"); // melee transition to sprint attack part 2
Animation("stand_punchcombo"); // hand-to-hand attack
Animation("stand_comboattack3a"); // dash attack part 1
Animation("stand_comboattack3b"); // dash attack part 2
Animation("stand_comboattack3c"); // dash attack land
Animation("jumpattack1"); // jump attack
Animation("jumpattack3"); // jump attack land
// secondary weapons are same as all_hero_luke_jedi.combo (and so are several other states)
OffhandAnimation("stand_useforce", "FIRE")
{
Loop("FinalFrame");
AimType("Torso");
BlendInTime(0.15);
BlendOutTime(0.15);
}
OffhandAnimation("stand_useforce", "FIRE2");
OffhandAnimation("stand_useforce", "CHARGE");
ThrowAnimation("stand_throw");
State("CATCH_SABRE")
{
Posture("Stand");
Animation("stand_catch")
{
AimType("None");
BlendOutTime(0.2);
}
InputLock("All", "!Thrust");
AlignedToThrust();
}
State("IDLE")
{
Duration(0.0); // infinite duration
EnergyRestoreRate();
InputLock(0.15, "Sprint", "Jump", "Crouch");
Transition("DEFLECT")
{
If()
{
Break(); // all transitions are breaking if Duration is 0
Posture("Stand", "Crouch");
Energy(">=", 2.5);
Button("FireSecondary", "Press");
}
}
Transition("BACK_ATTACK")
{
If()
{
Break();
Posture("Stand", "Crouch");
Button("Fire", "Press");
Thrust(">", 0.25);
ThrustAngle(135, 225);
}
}
Transition("ATTACK1")
{
If()
{
Break();
Posture("Stand", "Crouch");
Button("Fire", "Press");
}
}
Transition("DASHATTACK1A")
{
EnergyCost(40.0);
If()
{
Break();
Posture("Sprint");
Button("Fire", "Press");
}
}
Transition("JUMPATTACK_FALL")
{
If()
{
Break();
Posture("Jump", "Jet");
//The following should be true during a jetjump, jump, or fall
// unless we're more than 0.35 seconds from the apex
//NOTE: This may not allow jedi to jump attack during longer falls
// or falling from a force jump when it could.
//VelocityY(">", -6.3);
Button("Fire", "Press");
}
}
}
State("DEFLECT")
{
Posture("Stand");
Sound("imp_weap_lightsabre_block");
Animation("stand_block_idle")
{
Loop();
AimType("None");
BlendInTime(0.15);
BlendOutTime(0.15);
LowResPose(0, "Frames");
}
Duration(0.0); // infinite duration
EnergyRestoreRate(-10.0); // drain energy while waiting to deflect
Deflect()
{
DeflectAngle(-60, 60); // deflect anything from forward arc
EnergyCost(0.0);
DeflectAnimation("stand_block_front1", "Forward")
{
BlendInTime(0.00);
BlendOutTime(0.05);
LowResPose(5, "Frames");
}
DeflectAnimation("stand_block_front2", "Forward")
{
BlendInTime(0.00);
BlendOutTime(0.05);
LowResPose(5, "Frames");
}
DeflectAnimation("stand_block_left1", "Left")
{
BlendInTime(0.00);
BlendOutTime(0.05);
LowResPose(5, "Frames");
}
DeflectAnimation("stand_block_left2", "Left")
{
BlendInTime(0.00);
BlendOutTime(0.05);
LowResPose(5, "Frames");
}
DeflectAnimation("stand_block_right1", "Right")
{
BlendInTime(0.00);
BlendOutTime(0.05);
LowResPose(5, "Frames");
}
DeflectAnimation("stand_block_right2", "Right")
{
BlendInTime(0.00);
BlendOutTime(0.05);
LowResPose(5, "Frames");
}
}
Transition("ATTACK1")
{
If()
{
Break();
Button("Fire", "Press");
}
}
Transition("DEFLECT_ROLL") // same as the code checking for rolling
{
EnergyCost(25.0);
If()
{
Break(); // all transitions are breaking if Duration is 0
Button("Crouch", "Press");
Thrust(">", 0.9);
ThrustAngle(-120, 120);
}
}
Transition("DEFLECT_CROUCH")
{
If()
{
Break(); // all transitions are breaking if Duration is 0
Button("Crouch", "Press");
}
}
Transition("DEFLECT_JUMP")
{
If()
{
Break(); // all transitions are breaking if Duration is 0
Button("Jump", "Press");
}
}
Transition("DEFLECT_SPRINT")
{
If()
{
Break(); // all transitions are breaking if Duration is 0
Button("Sprint", "Down");
}
}
Transition("IDLE")
{
If()
{
Break();
Energy("<=" 0.0); // stop deflecting when energy is drained
}
Or()
{
Break(20, "Frames");
Button("FireSecondary", "Press");
}
Or()
{
Break();
Button("Reload", "Press");
}
}
}
State("DEFLECT_ROLL")
{
Posture("Roll");
MustShowOneFrame();
Transition("IDLE")
{
If()
{
Break(1, "Frames");
}
}
}
State("DEFLECT_CROUCH")
{
Posture("Crouch");
MustShowOneFrame();
Transition("IDLE")
{
If()
{
Break(1, "Frames");
}
}
}
State("DEFLECT_JUMP")
{
Posture("Jump");
MustShowOneFrame();
Transition("IDLE")
{
If()
{
Break(1, "Frames");
}
}
}
State("DEFLECT_SPRINT")
{
Posture("Sprint");
MustShowOneFrame();
Transition("IDLE")
{
If()
{
Break(1, "Frames");
}
}
}
State("BACK_ATTACK")
{
Posture("Stand");
Animation("stand_attack_backwards")
{
BlendInTime(0.15);
BlendOutTime(0.3);
}
Sound("saber_swing");
InputLock("All", "!Thrust");
AlignedToThrust();
Attack()
{
DamageTime(4, 9, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(400);
Push(6.0);
}
Attack()
{
DamageTime(13, 20, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(400);
Push(6.0);
}
Transition("IDLE");
}
State("ATTACK1")
{
Posture("Stand");
Animation("stand_comboattack1a");
Sound("saber_swing", 5, "Frames");
InputLock("All", "!Thrust");
AlignedToThrust();
Attack()
{
DamageTime(4, 12, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(300);
Push(3.0);
}
Transition("ATTACK2")
{
If()
{
TimeStart(2, "Frames");
TimeEnd(18, "Frames"); // must be bigger than state duration
Posture("Stand");
Button("Fire", "Press");
}
Or()
{
TimeStart(2, "Frames");
TimeEnd(18, "Frames");
Posture("Stand");
Button("Reload", "Press");
}
}
Transition("RECOVER1");
}
State("RECOVER1")
{
Posture("Stand");
Animation("stand_comboattack1a")
{
AimType("None");
BlendInTime(0.15);
BlendOutTime(0.3);
}
InputLock("All", "!Thrust");
AlignedToThrust();
Transition("IDLE");
}
State("ATTACK2")
{
Posture("Stand");
Animation("stand_comboattack2a")
{
BlendInTime(0.06);
BlendOutTime(0.15);
BlendTimeTo("stand_comboattack2a_upper", 0.06);
}
Sound("saber_swing", 5, "Frames");
AlignedToThrust();
InputLock("All", "!Thrust");
AnimatedMove();
Attack()
{
AttackID("FistoAttack3");
DamageTime(5, 10, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(300);
Push(3.0);
}
Transition("ATTACK3") // hidden attack
{
If()
{
Break();
TimeStart(3, "Frames");
TimeEnd(10, "Frames");
Posture("Stand");
Button("Reload", "Press");
}
}
Transition("ATTACK2B");
}
State("ATTACK2B")
{
Posture("Stand");
Animation("stand_comboattack2b")
{
BlendInTime(0.06);
BlendOutTime(0.15);
}
Duration(10, "Frames");
InputLock("All", "!Thrust");
AnimatedMove()
{
VelocityZ(0.0)
VelocityX(0.0)
VelocityFromThrust(0.5)
VelocityFromStrafe(0.5)
}
AlignedToThrust();
Attack()
{
AttackID("FistoAttack3");
DamageTime(1, 4, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(125);
Push(3.0);
}
Transition("IDLE") // for deaths
{
If()
{
Break();
Posture("Any", "!Stand");
}
}
Transition("ATTACK3") // hidden attack
{
If()
{
Break();
TimeStart(0, "Frames");
TimeEnd(10, "Frames");
Posture("Stand");
Button("Reload", "Press");
}
}
Transition("ATTACK2C");
}
State("ATTACK2C")
{
Posture("Stand");
Animation("stand_comboattack2b");
Sound("saber_attack_three", 11, "Frames");
AlignedToThrust();
InputLock("All" "!Thrust");
AnimatedMove()
{
VelocityZ(20.0);
VelocityFromThrust(0.0);
VelocityFromStrafe(15.0);
Until()
{
Break(25, "Frames");
}
}
TurnFactor(0.3)
Attack()
{
DamageTime(11, 19, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(400);
Push(3.0);
}
Attack()
{
DamageTime(21, 29, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(400);
Push(3.0);
}
Transition("IDLE") // for deaths
{
If()
{
Break();
Posture("Any", "!Stand", "!Sprint");
}
}
Transition("ATTACK3") // hidden attack
{
If()
{
Break();
TimeStart(10, "Frames");
TimeEnd(35, "Frames");
Posture("Stand");
Button("Reload", "Press");
}
}
Transition("RECOVER2");
}
State("RECOVER2")
{
Posture("Stand", "Sprint");
Animation("stand_comboattack2b")
{
AimType("None");
BlendInTime(0.15);
BlendOutTime(0.15);
}
InputLock("All", "!Thrust");
AlignedToThrust();
Transition("IDLE");
}
// hidden hand-to-hand attack
// triggered by LLR or LRR
State("ATTACK3")
{
Posture("Stand");
TurnOffLightsaber();
Animation("stand_punchcombo")
{
BlendInTime(0.06);
BlendOutTime(0.15);
}
Sound("com_weap_melee_swing", 29, "Frames");
InputLock("All", "!Thrust");
AlignedToThrust();
AnimatedMove()
{
VelocityFromThrust(3.5);
VelocityFromStrafe(3.5);
}
Attack()
{
DamageTime(4, 9, "Frames");
DamageLength(1.6);
DamageWidth(0.8);
Damage(200);
Push(1.5);
}
Attack()
{
DamageTime(15, 18, "Frames");
DamageLength(-1);
DamageWidth(0.9);
Damage(200);
Push(1.5);
}
Attack()
{
DamageTime(28, 40, "Frames");
DamageLength(1.95);
DamageWidth(1.3);
Damage(500);
Push(3.0);
}
Transition("IDLE") // for deaths
{
If()
{
Break();
Posture("Any", "!Stand");
}
}
Transition("RECOVER3");
}
State("RECOVER3")
{
Posture("Stand");
Animation("stand_punchcombo")
{
AimType("None");
BlendInTime(0.15);
BlendOutTime(0.15);
}
InputLock("All", "!Thrust");
AlignedToThrust();
Transition("IDLE");
}
State("DASHATTACK1A")
{
Posture("Stand");
Animation("stand_comboattack3a");
{
AimType("FullBody");
BlendInTime(0.10);
BlendOutTime(0.25);
}
Sound("saber_attack_three", 8, "Frames");
InputLock("All", "!Thrust");
AlignedToThrust(1);
AnimatedMove()
{
VelocityZ(6.0);
VelocityX(0.0);
VelocityFromThrust(5.0);
VelocityFromStrafe(1.0);
}
TurnFactor(0.3);
Attack()
{
AttackID("FistoDashAttack");
DamageTime(9, 15, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(600);
Push(3.0);
}
Transition("IDLE") // for deaths
{
If()
{
Break();
Posture("Any", "!Stand", "!Sprint");
}
}
Transition("DASHATTACK1B");
}
State("DASHATTACK1B")
{
Posture("Jump");
MustShowOneFrame();
Animation("stand_comboattack3b")
{
AimType("FullBody");
BlendInTime(0.06);
BlendOutTime(0.15);
}
Duration(1, "Frames");
InputLock("All", "!Thrust");
AlignedToThrust(1);
AnimatedMove();
Attack()
{
AttackID("FistoDashAttack");
DamageTime(1, 1, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(600);
Push(3.0);
}
Transition("DASHATTACK1C");
}
State("DASHATTACK1C")
{
Posture("Stand", "Jump");
Animation("stand_comboattack3b")
{
AimType("FullBody");
BlendInTime(0.06);
BlendOutTime(0.15);
BlendTimeTo("stand_comboattack3c", 0.25);
}
Duration(15, "Frames");
InputLock("All", "!Thrust");
AlignedToThrust(1);
AnimatedMove();
Attack()
{
AttackID("FistoDashAttack");
DamageTime(2, 4, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(600);
Push(3.0);
}
Transition("DASHATTACK_LAND")
{
If()
{
Break();
Posture("Stand");
}
}
Transition("JUMPATTACK_FALL")
{
If()
{
Posture("Jump");
TimeStart(10, "Frames");
TimeEnd(16, "Frames");
Button("Fire", "Press");
}
}
Transition("IDLE")
{
If()
{
Break();
Posture("Any", "!Stand", "!Jump");
}
}
Transition("DASHATTACK1D");
}
State("DASHATTACK1D")
{
Posture("Stand", "Jump", "Jet");
Animation("stand_comboattack3b")
{
Loop("FinalFrame");
AimType("FullBody");
BlendInTime(0.06);
BlendOutTime(0.15);
BlendTimeTo("stand_comboattack3c", 0.25);
}
Duration(0.0); // infinite duration
InputLock("All", "!Thrust", "!Jump"); // allow jumping
AlignedToThrust(1);
AnimatedMove();
Transition("DASHATTACK_LAND")
{
If()
{
Break();
Posture("Stand");
}
}
Transition("JUMPATTACK_FALL")
{
If()
{
Break();
Posture("Jump", "Jet");
TimeStart(15, "Frames");
TimeEnd(36, "Frames");
Button("Fire", "Press");
}
}
Transition("IDLE")
{
If()
{
Break();
Posture("Any", "!Stand", "!Jump", "!Jet");
}
Or()
{
Break();
Posture("Jump", "Jet");
TimeStart(15, "Frames");
TimeEnd(36, "Frames");
Button("Jump", "Press"); // break state if jumping
}
}
}
State("DASHATTACK_LAND")
{
Posture("Stand");
Animation("stand_comboattack3c")
{
AimType("FullBody");
BlendInTime(0.15);
BlendOutTime(0.3);
}
InputLock("All", "!Thrust");
AlignedToThrust();
Transition("IDLE");
}
State("JUMPATTACK_FALL")
{
Posture("Jump");
Animation("jumpattack1")
{
Loop("FinalFrame");
AimType("None");
BlendInTime(0.15);
BlendOutTime(0.15);
BlendTimeTo("jumpattack3", 0.06);
}
Sound("saber_double", 2, "Frames");
Duration(0.0); // infinite duration
EnergyRestoreRate(0.0);
Gravity(4.0);
GravityVelocityTarget(-20.0);
AlignedToThrust();
AnimatedMove();
InputLock("All", "!Thrust");
Attack()
{
DamageTime(3, 16, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(300);
Push(3.0);
}
Transition("JUMPATTACK_LAND1")
{
If()
{
Break();
Posture("Stand");
}
}
Transition("IDLE")
{
If()
{
Break();
Posture("Any", "!Stand", "!Jump", "!Jet");
}
}
}
State("JUMPATTACK_LAND1")
{
Posture("Stand");
Animation("jumpattack3")
{
AimType("FullBody");
BlendInTime(0.15);
BlendOutTime(0.15);
}
Duration(4, "Frames");
EnergyRestoreRate(0.0);
AlignedToThrust(1);
AnimatedMove();
InputLock("All");
Attack()
{
DamageTime(1, 4, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(1000);
}
Transition("IDLE") // for deaths
{
If()
{
Break();
Posture("Any", "!Stand", "!Jump", "!Jet");
}
}
Transition("JUMPATTACK_LAND2");
}
State("JUMPATTACK_LAND2")
{
Posture("Stand");
Animation("jumpattack3")
{
BlendInTime(0.0);
BlendOutTime(0.15);
}
Duration(-1);
EnergyRestoreRate(0.0);
AlignedToThrust(1);
AnimatedMove();
InputLock("All");
PlayExplosion();
Transition("IDLE") // for deaths
{
If()
{
Break();
Posture("Any", "!Stand");
}
}
Transition("IDLE");
}
Hidden/Spoiler:
Code: Select all
// forward declaration of attack animations
Animation("stand_comboattack1a"); // slash attack
Animation("stand_comboattack2a"); // melee transition to sprint attack part 1
Animation("stand_comboattack2b"); // melee transition to sprint attack part 2
Animation("stand_punchcombo"); // hand-to-hand attack
Animation("stand_comboattack3a"); // dash attack part 1
Animation("stand_comboattack3b"); // dash attack part 2
Animation("stand_comboattack3c"); // dash attack land
Animation("jumpattack1"); // jump attack
Animation("jumpattack3"); // jump attack land
// secondary weapons are same as all_hero_luke_jedi.combo (and so are several other states)
OffhandAnimation("stand_useforce", "FIRE")
{
Loop("FinalFrame");
AimType("Torso");
BlendInTime(0.15);
BlendOutTime(0.15);
}
OffhandAnimation("stand_useforce", "FIRE2");
OffhandAnimation("stand_useforce", "CHARGE");
ThrowAnimation("stand_throw");
State("CATCH_SABRE")
{
Posture("Stand");
Animation("stand_catch")
{
AimType("None");
BlendOutTime(0.2);
}
InputLock("All", "!Thrust");
AlignedToThrust();
}
State("IDLE")
{
Duration(0.0); // infinite duration
EnergyRestoreRate();
InputLock(0.15, "Sprint", "Jump", "Crouch");
Transition("DEFLECT")
{
If()
{
Break(); // all transitions are breaking if Duration is 0
Posture("Stand", "Crouch");
Energy(">=", 2.5);
Button("FireSecondary", "Press");
}
}
Transition("BACK_ATTACK")
{
If()
{
Break();
Posture("Stand", "Crouch");
Button("Fire", "Press");
Thrust(">", 0.25);
ThrustAngle(135, 225);
}
}
Transition("ATTACK1")
{
If()
{
Break();
Posture("Stand", "Crouch");
Button("Fire", "Press");
}
}
Transition("DASHATTACK1A")
{
EnergyCost(40.0);
If()
{
Break();
Posture("Sprint");
Button("Fire", "Press");
}
}
Transition("JUMPATTACK_FALL")
{
If()
{
Break();
Posture("Jump", "Jet");
//The following should be true during a jetjump, jump, or fall
// unless we're more than 0.35 seconds from the apex
//NOTE: This may not allow jedi to jump attack during longer falls
// or falling from a force jump when it could.
//VelocityY(">", -6.3);
Button("Fire", "Press");
}
}
}
State("DEFLECT")
{
Posture("Stand");
Sound("imp_weap_lightsabre_block");
Animation("stand_block_idle")
{
Loop();
AimType("None");
BlendInTime(0.15);
BlendOutTime(0.15);
LowResPose(0, "Frames");
}
Duration(0.0); // infinite duration
EnergyRestoreRate(-10.0); // drain energy while waiting to deflect
Deflect()
{
DeflectAngle(-60, 60); // deflect anything from forward arc
EnergyCost(0.0);
DeflectAnimation("stand_block_front1", "Forward")
{
BlendInTime(0.00);
BlendOutTime(0.05);
LowResPose(5, "Frames");
}
DeflectAnimation("stand_block_front2", "Forward")
{
BlendInTime(0.00);
BlendOutTime(0.05);
LowResPose(5, "Frames");
}
DeflectAnimation("stand_block_left1", "Left")
{
BlendInTime(0.00);
BlendOutTime(0.05);
LowResPose(5, "Frames");
}
DeflectAnimation("stand_block_left2", "Left")
{
BlendInTime(0.00);
BlendOutTime(0.05);
LowResPose(5, "Frames");
}
DeflectAnimation("stand_block_right1", "Right")
{
BlendInTime(0.00);
BlendOutTime(0.05);
LowResPose(5, "Frames");
}
DeflectAnimation("stand_block_right2", "Right")
{
BlendInTime(0.00);
BlendOutTime(0.05);
LowResPose(5, "Frames");
}
}
Transition("ATTACK1")
{
If()
{
Break();
Button("Fire", "Press");
}
}
Transition("DEFLECT_ROLL") // same as the code checking for rolling
{
EnergyCost(25.0);
If()
{
Break(); // all transitions are breaking if Duration is 0
Button("Crouch", "Press");
Thrust(">", 0.9);
ThrustAngle(-120, 120);
}
}
Transition("DEFLECT_CROUCH")
{
If()
{
Break(); // all transitions are breaking if Duration is 0
Button("Crouch", "Press");
}
}
Transition("DEFLECT_JUMP")
{
If()
{
Break(); // all transitions are breaking if Duration is 0
Button("Jump", "Press");
}
}
Transition("DEFLECT_SPRINT")
{
If()
{
Break(); // all transitions are breaking if Duration is 0
Button("Sprint", "Down");
}
}
Transition("IDLE")
{
If()
{
Break();
Energy("<=" 0.0); // stop deflecting when energy is drained
}
Or()
{
Break(20, "Frames");
Button("FireSecondary", "Press");
}
Or()
{
Break();
Button("Reload", "Press");
}
}
}
State("DEFLECT_ROLL")
{
Posture("Roll");
MustShowOneFrame();
Transition("IDLE")
{
If()
{
Break(1, "Frames");
}
}
}
State("DEFLECT_CROUCH")
{
Posture("Crouch");
MustShowOneFrame();
Transition("IDLE")
{
If()
{
Break(1, "Frames");
}
}
}
State("DEFLECT_JUMP")
{
Posture("Jump");
MustShowOneFrame();
Transition("IDLE")
{
If()
{
Break(1, "Frames");
}
}
}
State("DEFLECT_SPRINT")
{
Posture("Sprint");
MustShowOneFrame();
Transition("IDLE")
{
If()
{
Break(1, "Frames");
}
}
}
State("BACK_ATTACK")
{
Posture("Stand");
Animation("stand_attack_backwards")
{
BlendInTime(0.15);
BlendOutTime(0.3);
}
Sound("saber_swing");
InputLock("All", "!Thrust");
AlignedToThrust();
Attack()
{
DamageTime(4, 9, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(400);
Push(6.0);
}
Attack()
{
DamageTime(13, 20, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(400);
Push(6.0);
}
Transition("IDLE");
}
State("ATTACK1")
{
Posture("Stand");
Animation("stand_comboattack1a");
Sound("saber_swing", 5, "Frames");
InputLock("All", "!Thrust");
AlignedToThrust();
Attack()
{
DamageTime(4, 12, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(300);
Push(3.0);
}
Transition("ATTACK2")
{
If()
{
TimeStart(2, "Frames");
TimeEnd(18, "Frames"); // must be bigger than state duration
Posture("Stand");
Button("Fire", "Press");
}
Or()
{
TimeStart(2, "Frames");
TimeEnd(18, "Frames");
Posture("Stand");
Button("Reload", "Press");
}
}
Transition("IDLE") // for deaths
{
If()
{
Break();
Posture("Any", "!Stand");
}
}
Transition("RECOVER1");
}
State("RECOVER1")
{
Posture("Stand");
Animation("stand_comboattack1a")
{
AimType("None");
BlendInTime(0.15);
BlendOutTime(0.3);
}
InputLock("All", "!Thrust");
AlignedToThrust();
Transition("IDLE");
}
State("ATTACK2")
{
Posture("Stand");
Animation("stand_comboattack2a")
{
BlendInTime(0.06);
BlendOutTime(0.15);
BlendTimeTo("stand_comboattack2a_upper", 0.06);
}
Sound("saber_swing", 5, "Frames");
InputLock("All", "!Thrust");
AlignedToThrust();
Duration(8, "Frames");
Attack()
{
AttackID("FistoAttack2");
DamageTime(5, 8, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(300);
Push(3.0);
}
Transition("ATTACK1B")
{
If()
{
TimeStart(1, "Frames");
TimeEnd(11, "Frames");
Posture("Stand");
Button("Fire", "Press");
}
}
Transition("ATTACK2B") // hidden attack
{
If()
{
TimeStart(3, "Frames");
TimeEnd(9, "Frames"); // must be bigger than state duration
Posture("Stand");
Button("Reload", "Down");
}
Or()
{
TimeStart(2, "Frames");
TimeEnd(9, "Frames"); // must be bigger than state duration
Posture("Stand");
Button("Sprint", "Press");
}
}
Transition("IDLE") // for deaths
{
If()
{
Break();
Posture("Any", "!Stand");
}
}
Transition("RECOVER2");
}
State("RECOVER2")
{
Posture("Stand");
Animation("stand_comboattack2a_upper")
{
AimType("None");
BlendInTime(0.06);
BlendOutTime(0.15);
BlendTimeTo("stand_comboattack1a", 0.06);
}
InputLock("All", "!Thrust");
AlignedToThrust();
Duration(-1);
Attack()
{
AttackID("FistoAttack2");
DamageTime(9, 10, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(300);
Push(3.0);
}
Transition("ATTACK1B")
{
If()
{
Break();
TimeStart(7, "Frames");
TimeEnd(13, "Frames");
Posture("Stand");
Button("Fire", "Press");
}
}
Transition("IDLE");
}
// this state is the same move as attack 1
// it is repeated to hide the hand-to-hand attack
State("ATTACK1B")
{
Posture("Stand");
Animation("stand_comboattack1a");
Sound("saber_swing", 5, "Frames");
InputLock("All", "!Thrust");
AlignedToThrust();
Attack()
{
DamageTime(4, 12, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(300);
Push(3.0);
}
Transition("ATTACK2")
{
If()
{
TimeStart(2, "Frames");
TimeEnd(18, "Frames"); // must be bigger than state duration
Posture("Stand");
Button("Fire", "Press");
}
}
Transition("ATTACK3") // hidden attack
{
If()
{
Break();
TimeStart(2, "Frames");
TimeEnd(18, "Frames");
Posture("Stand");
Button("Reload", "Press");
}
}
Transition("IDLE") // for deaths
{
If()
{
Break();
Posture("Any", "!Stand");
}
}
Transition("RECOVER1");
}
// hidden extension to attack 2
// triggered by: press L, hold R
State("ATTACK2B")
{
Posture("Stand");
Animation("stand_comboattack2a");
InputLock("All");
AlignedToThrust(1);
Duration(-1);
AnimatedMove();
Attack()
{
AttackID("FistoAttack2");
DamageTime(9, 10, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(300);
Push(3.0);
}
Transition("IDLE") // for deaths
{
If()
{
Break();
Posture("Any", "!Stand");
}
}
Transition("ATTACK2C");
}
State("ATTACK2C")
{
Posture("Stand");
Animation("stand_comboattack2b")
{
BlendInTime(0.06);
BlendOutTime(0.15);
}
InputLock("All");
AlignedToThrust();
AnimatedMove();
Duration(10, "Frames");
Attack()
{
AttackID("FistoAttack2");
DamageTime(1, 4, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(125);
Push(3.0);
}
Transition("IDLE") // for deaths
{
If()
{
Break();
Posture("Any", "!Stand");
}
}
Transition("ATTACK2D");
}
State("ATTACK2D")
{
Posture("Sprint");
Animation("stand_comboattack2b");
Sound("saber_attack_three", 11, "Frames");
InputLock("All" "!Thrust");
AlignedToThrust();
AnimatedMove()
{
VelocityZ(12.0);
VelocityFromThrust(0.0);
VelocityFromStrafe(3.0);
Until()
{
Break(25, "Frames");
}
}
Attack()
{
DamageTime(11, 19, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(400);
Push(3.0);
}
Attack()
{
DamageTime(21, 29, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(400);
Push(3.0);
}
Transition("IDLE") // for deaths
{
If()
{
Break();
Posture("Any", "!Stand", "!Sprint");
}
}
Transition("RECOVER2D");
}
State("RECOVER2D")
{
Posture("Stand", "Sprint");
Animation("stand_comboattack2b")
{
AimType("None");
BlendInTime(0.15);
BlendOutTime(0.15);
}
InputLock("All", "!Thrust");
AlignedToThrust();
Transition("IDLE");
}
// hidden hand-to-hand attack
// triggered by LRLR or LLLR
State("ATTACK3")
{
Posture("Stand");
TurnOffLightsaber();
Animation("stand_punchcombo")
{
BlendInTime(0.06);
BlendOutTime(0.15);
}
Sound("com_weap_melee_swing", 29, "Frames");
InputLock("All", "!Thrust");
AlignedToThrust();
AnimatedMove()
{
VelocityFromThrust(3.5);
VelocityFromStrafe(3.5);
}
Attack()
{
DamageTime(4, 9, "Frames");
DamageLength(1.6);
DamageWidth(0.8);
Damage(200);
Push(1.5);
}
Attack()
{
DamageTime(15, 18, "Frames");
DamageLength(-1);
DamageWidth(0.9);
Damage(200);
Push(1.5);
}
Attack()
{
DamageTime(28, 40, "Frames");
DamageLength(1.95);
DamageWidth(1.3);
Damage(500);
Push(3.0);
}
Transition("IDLE") // for deaths
{
If()
{
Break();
Posture("Any", "!Stand");
}
}
Transition("RECOVER3");
}
State("RECOVER3")
{
Posture("Stand");
Animation("stand_punchcombo")
{
AimType("None");
BlendInTime(0.15);
BlendOutTime(0.15);
}
InputLock("All", "!Thrust");
AlignedToThrust();
Transition("IDLE");
}
State("DASHATTACK1A")
{
Posture("Stand");
Animation("stand_comboattack3a");
{
AimType("FullBody");
BlendInTime(0.10);
BlendOutTime(0.25);
}
Sound("saber_attack_three", 8, "Frames");
InputLock("All", "!Thrust");
AlignedToThrust(1);
AnimatedMove()
{
VelocityZ(6.0);
VelocityX(0.0);
VelocityFromThrust(5.0);
VelocityFromStrafe(1.0);
}
TurnFactor(0.3);
Attack()
{
AttackID("FistoDashAttack");
DamageTime(9, 15, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(600);
Push(3.0);
}
Transition("IDLE") // for deaths
{
If()
{
Break();
Posture("Any", "!Stand", "!Sprint");
}
}
Transition("DASHATTACK1B");
}
State("DASHATTACK1B")
{
Posture("Jump");
MustShowOneFrame();
Animation("stand_comboattack3b")
{
AimType("FullBody");
BlendInTime(0.06);
BlendOutTime(0.15);
}
Duration(1, "Frames");
InputLock("All", "!Thrust");
AlignedToThrust(1);
AnimatedMove();
Attack()
{
AttackID("FistoDashAttack");
DamageTime(1, 1, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(600);
Push(3.0);
}
Transition("DASHATTACK1C");
}
State("DASHATTACK1C")
{
Posture("Stand", "Jump");
Animation("stand_comboattack3b")
{
AimType("FullBody");
BlendInTime(0.06);
BlendOutTime(0.15);
BlendTimeTo("stand_comboattack3c", 0.25);
}
Duration(15, "Frames");
InputLock("All", "!Thrust");
AlignedToThrust(1);
AnimatedMove();
Attack()
{
AttackID("FistoDashAttack");
DamageTime(2, 4, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(600);
Push(3.0);
}
Transition("DASHATTACK_LAND")
{
If()
{
Break();
Posture("Stand");
}
}
Transition("JUMPATTACK_FALL")
{
If()
{
Posture("Jump");
TimeStart(10, "Frames");
TimeEnd(16, "Frames");
Button("Fire", "Press");
}
}
Transition("IDLE")
{
If()
{
Break();
Posture("Any", "!Stand", "!Jump");
}
}
Transition("DASHATTACK1D");
}
State("DASHATTACK1D")
{
Posture("Stand", "Jump", "Jet");
Animation("stand_comboattack3b")
{
Loop("FinalFrame");
AimType("FullBody");
BlendInTime(0.06);
BlendOutTime(0.15);
BlendTimeTo("stand_comboattack3c", 0.25);
}
Duration(0.0); // infinite duration
InputLock("All", "!Thrust", "!Jump"); // allow jumping
AlignedToThrust(1);
AnimatedMove();
Transition("DASHATTACK_LAND")
{
If()
{
Break();
Posture("Stand");
}
}
Transition("JUMPATTACK_FALL")
{
If()
{
Break();
Posture("Jump", "Jet");
TimeStart(15, "Frames");
TimeEnd(36, "Frames");
Button("Fire", "Press");
}
}
Transition("IDLE")
{
If()
{
Break();
Posture("Any", "!Stand", "!Jump", "!Jet");
}
Or()
{
Break();
Posture("Jump", "Jet");
TimeStart(15, "Frames");
TimeEnd(36, "Frames");
Button("Jump", "Press"); // break state if jumping
}
}
}
State("DASHATTACK_LAND")
{
Posture("Stand");
Animation("stand_comboattack3c")
{
AimType("FullBody");
BlendInTime(0.15);
BlendOutTime(0.3);
}
InputLock("All", "!Thrust");
AlignedToThrust();
Transition("IDLE");
}
State("JUMPATTACK_FALL")
{
Posture("Jump");
Animation("jumpattack1")
{
Loop("FinalFrame");
AimType("None");
BlendInTime(0.15);
BlendOutTime(0.15);
BlendTimeTo("jumpattack3", 0.06);
}
Sound("saber_double", 2, "Frames");
Duration(0.0); // infinite duration
EnergyRestoreRate(0.0);
Gravity(4.0);
GravityVelocityTarget(-20.0);
AlignedToThrust();
AnimatedMove();
InputLock("All", "!Thrust");
Attack()
{
DamageTime(3, 16, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(300);
Push(3.0);
}
Transition("JUMPATTACK_LAND1")
{
If()
{
Break();
Posture("Stand");
}
}
Transition("IDLE")
{
If()
{
Break();
Posture("Any", "!Stand", "!Jump", "!Jet");
}
}
}
State("JUMPATTACK_LAND1")
{
Posture("Stand");
Animation("jumpattack3")
{
AimType("FullBody");
BlendInTime(0.15);
BlendOutTime(0.15);
}
Duration(4, "Frames");
EnergyRestoreRate(0.0);
AlignedToThrust(1);
AnimatedMove();
InputLock("All");
Attack()
{
DamageTime(1, 4, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(1000);
}
Transition("IDLE") // for deaths
{
If()
{
Break();
Posture("Any", "!Stand", "!Jump", "!Jet");
}
}
Transition("JUMPATTACK_LAND2");
}
State("JUMPATTACK_LAND2")
{
Posture("Stand");
Animation("jumpattack3")
{
BlendInTime(0.0);
BlendOutTime(0.15);
}
Duration(-1);
EnergyRestoreRate(0.0);
AlignedToThrust(1);
AnimatedMove();
InputLock("All");
PlayExplosion();
Transition("IDLE") // for deaths
{
If()
{
Break();
Posture("Any", "!Stand");
}
}
Transition("IDLE");
}
[\code]