Page 1 of 1

New Anim sets (semi-solved)

Posted: Fri Mar 06, 2009 12:36 pm
by Fiodis
So I made a custom anim set and it crashes with a CTD. The only Severity 3 error that seems to be related to it is:
Hidden/Spoiler:
[quote]Message Severity: 3
.\Source\SoldierAnimatorClass.cpp(1881)
Can't find soldier animation mace_sabre_stand_finishattack_land_full(_upper)


Message Severity: 3
.\Source\SoldierAnimatorClass.cpp(1881)
Can't find soldier animation mace_sabre_stand_finishattack_recover_full(_upper)[/quote]
This confuses me because the animation is clearly in the folder:
Hidden/Spoiler:
Image
And I munged it. And got a bunch of warnings in ZenAsset, but I always ignore those.

My LUA, maybe the MemoryPools are set up wrong somehow:
Hidden/Spoiler:
--
-- Copyright (c) 2005 Pandemic Studios, LLC. All rights reserved.
--

-- load the gametype script --
ScriptCB_DoFile("setup_teams")
ScriptCB_DoFile("ObjectiveConquest")

-- Republic Attacking (attacker is always #1)
REP = 1
CIS = 2
-- These variables do not change
ATT = 1
DEF = 2

---------------------------------------------------------------------------
-- FUNCTION: ScriptInit
-- PURPOSE: This function is only run once
-- INPUT:
-- OUTPUT:
-- NOTES: The name, 'ScriptInit' is a chosen convention, and each
-- mission script must contain a version of this function, as
-- it is called from C to start the mission.
---------------------------------------------------------------------------
function ScriptPostLoad()

DisableBarriers("dropship")
DisableBarriers("shield_03")
DisableBarriers("shield_02")
DisableBarriers("shield_01")
DisableBarriers("ctf")
DisableBarriers("ctf1")
DisableBarriers("ctf2")
DisableBarriers("ctf3")
DisableBarriers("coresh1")

EnableSPHeroRules()

cp1 = CommandPost:New{name = "CP1_CON"}
cp2 = CommandPost:New{name = "CP2_CON"}
--cp3 = CommandPost:New{name = "CP3_CON"}
cp4 = CommandPost:New{name = "CP4_CON"}
cp5 = CommandPost:New{name = "CP5_CON"}
cp7 = CommandPost:New{name = "CP7_CON"}
--cp8 = CommandPost:New{name = "CP8_CON"}

conquest = ObjectiveConquest:New{teamATT = ATT, teamDEF = DEF, textATT = "game.modes.con", textDEF = "game.modes.con2", multiplayerRules = true}

conquest:AddCommandPost(cp1)
conquest:AddCommandPost(cp2)
--conquest:AddCommandPost(cp3)
conquest:AddCommandPost(cp4)
conquest:AddCommandPost(cp5)
conquest:AddCommandPost(cp7)
--conquest:AddCommandPost(cp8)

conquest:Start()


checkcontrollablefunction = OnCharacterDispenseControllable (
function (player, controllable)
GetEntityClassName (controllable)
print (controllable)
end
)


end

function ScriptInit()
-- Designers, these two lines *MUST* be first!
StealArtistHeap(2048 * 1024)
SetPS2ModelMemory(4000000)

SetMemoryPoolSize ("Combo",60) -- should be ~ 2x number of jedi classes
SetMemoryPoolSize ("Combo::State",1000) -- should be ~12x #Combo
SetMemoryPoolSize ("Combo::Transition",1000) -- should be a bit bigger than #Combo::State
SetMemoryPoolSize ("Combo::Condition",1000) -- should be a bit bigger than #Combo::State
SetMemoryPoolSize ("Combo::Attack",800) -- should be ~8-12x #Combo
SetMemoryPoolSize ("Combo::DamageSample",6000) -- should be ~8-12x #Combo::Attack
SetMemoryPoolSize ("Combo::Deflect",200) -- should be ~1x #combo

ReadDataFile("ingame.lvl")

ReadDataFile("sound\\myg.lvl;myg1cw")

ReadDataFile("DC:SIDE\\rep.lvl",
--"rep_fly_assault_dome",
"rep_inf_ep3_rifleman",
"rep_inf_ep3_rocketeer",
"rep_inf_ep3_engineer",
"rep_inf_ep3_jettrooper",
"rep_inf_ep3_sniper",
"rep_inf_ep3_officer",
"rep_inf_ep3_grappletrooper",
"rep_fly_gunship_dome",
"rep_hover_fightertank",
"rep_inf_ep2_marine",
"rep_inf_ep2_rocketeer_chaingun",
"rep_inf_ep2_rocketeer",
"rep_hero_macewindu")
ReadDataFile("DC:SIDE\\cis.lvl",
"cis_inf_rifleman",
"cis_inf_rocketeer",
"cis_inf_engineer",
"cis_inf_sniper",
"cis_hover_aat",
"cis_fly_gunship_dome",
"cis_hero_countdooku",
"cis_inf_officer",
"cis_inf_droideka",
"cis_hero_darthmaul")
ReadDataFile("DC:SIDE\\des.lvl",
"tat_inf_jawa")

ReadDataFile("DC:SIDE\\tur.lvl",
"tur_bldg_recoilless_lg",
"tur_ME_ball_turret",
"tur_thing_turret01")


SetupTeams{

rep={
team = REP,
units = 32,
reinforcements = 1500,
soldier = {"rep_inf_ep3_rifleman", 9, 25},
assault = {"rep_inf_ep3_rocketeer", 1, 4},
engineer = {"rep_inf_ep3_engineer", 1, 4},
sniper = {"rep_inf_ep3_sniper", 1, 4},
officer = {"rep_inf_ep2_rocketeer", 1, 4},
special = {"rep_inf_ep3_grappletrooper", 1, 1},
pilot = {"rep_inf_ep2_rocketeer_chaingun", 1, 4},
marine = {"rep_hero_macewindu", 1, 4},
jawa = {"rep_inf_ep2_marine", 1, 4},


},

cis={
team = CIS,
units = 32,
reinforcements = 1500,
soldier = {"cis_inf_rifleman", 9, 25},
assault = {"cis_inf_rocketeer", 1, 4},
engineer = {"cis_inf_engineer", 1, 4},
sniper = {"cis_inf_sniper", 1, 4},
officer = {"cis_inf_officer", 1, 4},
special = {"cis_inf_droideka", 1, 4},
marine = {"cis_hero_countdooku", 1, 4},
pilot = {"cis_hero_darthmaul", 1, 4},
}
}


-- Hero Setup Section --


-- Level Stats
ClearWalkers()
AddWalkerType(0, 4)
AddWalkerType(2, 0)
local weaponCnt = 230
SetMemoryPoolSize("Aimer", 60)
SetMemoryPoolSize("AmmoCounter", weaponCnt)
SetMemoryPoolSize("BaseHint", 250)
SetMemoryPoolSize("EnergyBar", weaponCnt)
SetMemoryPoolSize("EntityCloth", 19)
SetMemoryPoolSize("EntityHover", 7)
SetMemoryPoolSize("EntityFlyer", 6)
SetMemoryPoolSize("EntitySoundStream", 1)
SetMemoryPoolSize("EntitySoundStatic", 76)
SetMemoryPoolSize("MountedTurret", 16)
SetMemoryPoolSize("Navigator", 50)
SetMemoryPoolSize("Obstacle", 500)
SetMemoryPoolSize("PathNode", 256)
SetMemoryPoolSize("TreeGridStack", 275)
SetMemoryPoolSize("UnitAgent", 50)
SetMemoryPoolSize("UnitController", 50)
SetMemoryPoolSize("Weapon", weaponCnt)
SetMemoryPoolSize("SoldierAnimation", 1000)

SetSpawnDelay(10.0, 0.25)
ReadDataFile("DC:SKN\\myg1.lvl", "myg1_conquest")
SetDenseEnvironment("false")
AddDeathRegion("deathregion")
SetMaxFlyHeight(20)
SetMaxPlayerFlyHeight(20)

-- Sound Stats

voiceSlow = OpenAudioStream("sound\\global.lvl", "rep_unit_vo_slow")
AudioStreamAppendSegments("sound\\global.lvl", "cis_unit_vo_slow", voiceSlow)
AudioStreamAppendSegments("sound\\global.lvl", "global_vo_slow", voiceSlow)

voiceQuick = OpenAudioStream("sound\\global.lvl", "rep_unit_vo_quick")
AudioStreamAppendSegments("sound\\global.lvl", "cis_unit_vo_quick", voiceQuick)

OpenAudioStream("sound\\global.lvl", "cw_music")
OpenAudioStream("sound\\myg.lvl", "myg1")
OpenAudioStream("sound\\myg.lvl", "myg1")
-- OpenAudioStream("sound\\global.lvl", "global_vo_quick")
-- OpenAudioStream("sound\\global.lvl", "global_vo_slow")
-- OpenAudioStream("sound\\myg.lvl", "myg1_emt")

SetBleedingVoiceOver(REP, REP, "rep_off_com_report_us_overwhelmed", 1)
SetBleedingVoiceOver(REP, CIS, "rep_off_com_report_enemy_losing", 1)
SetBleedingVoiceOver(CIS, REP, "cis_off_com_report_enemy_losing", 1)
SetBleedingVoiceOver(CIS, CIS, "cis_off_com_report_us_overwhelmed", 1)

SetLowReinforcementsVoiceOver(REP, REP, "rep_off_defeat_im", .1, 1)
SetLowReinforcementsVoiceOver(REP, CIS, "rep_off_victory_im", .1, 1)
SetLowReinforcementsVoiceOver(CIS, CIS, "cis_off_defeat_im", .1, 1)
SetLowReinforcementsVoiceOver(CIS, REP, "cis_off_victory_im", .1, 1)

SetOutOfBoundsVoiceOver(1, "Repleaving")
SetOutOfBoundsVoiceOver(2, "Cisleaving")

SetAmbientMusic(REP, 1.0, "rep_myg_amb_start", 0,1)
SetAmbientMusic(REP, 0.8, "rep_myg_amb_middle", 1,1)
SetAmbientMusic(REP, 0.2,"rep_myg_amb_end", 2,1)
SetAmbientMusic(CIS, 1.0, "cis_myg_amb_start", 0,1)
SetAmbientMusic(CIS, 0.8, "cis_myg_amb_middle", 1,1)
SetAmbientMusic(CIS, 0.2,"cis_myg_amb_end", 2,1)

SetVictoryMusic(REP, "rep_myg_amb_victory")
SetDefeatMusic (REP, "rep_myg_amb_defeat")
SetVictoryMusic(CIS, "cis_myg_amb_victory")
SetDefeatMusic (CIS, "cis_myg_amb_defeat")

SetSoundEffect("ScopeDisplayZoomIn", "binocularzoomin")
SetSoundEffect("ScopeDisplayZoomOut", "binocularzoomout")
--SetSoundEffect("WeaponUnableSelect", "com_weap_inf_weaponchange_null")
--SetSoundEffect("WeaponModeUnableSelect", "com_weap_inf_modechange_null")
SetSoundEffect("SpawnDisplayUnitChange", "shell_select_unit")
SetSoundEffect("SpawnDisplayUnitAccept", "shell_menu_enter")
SetSoundEffect("SpawnDisplaySpawnPointChange", "shell_select_change")
SetSoundEffect("SpawnDisplaySpawnPointAccept", "shell_menu_enter")
SetSoundEffect("SpawnDisplayBack", "shell_menu_exit")


--Camera Shizzle--

-- Collector Shot
AddCameraShot(0.008315, 0.000001, -0.999965, 0.000074, -64.894348, 5.541570, 201.711090);
AddCameraShot(0.633584, -0.048454, -0.769907, -0.058879, -171.257629, 7.728924, 28.249359);
AddCameraShot(-0.001735, -0.000089, -0.998692, 0.051092, -146.093109, 4.418306, -167.739212);
AddCameraShot(0.984182, -0.048488, 0.170190, 0.008385, 1.725611, 8.877428, 88.413887);
AddCameraShot(0.141407, -0.012274, -0.986168, -0.085598, -77.743042, 8.067328, 42.336128);
AddCameraShot(0.797017, 0.029661, 0.602810, -0.022434, -45.726467, 7.754435, -47.544712);
AddCameraShot(0.998764, 0.044818, -0.021459, 0.000963, -71.276566, 4.417432, 221.054550);
end
Also, I thought that if something were missing it would just use Luke's anim. Why doesn't it do that?

If you need my .combo file to help I'll post it.

Re: New Anim sets

Posted: Fri Mar 06, 2009 12:51 pm
by Teancum
You've probably hit the memory limit. That's a ton of animations. Remove the other jedi and see if it works.

Re: New Anim sets

Posted: Fri Mar 06, 2009 12:57 pm
by Fiodis
Too many animations in the combo, or too high a MemoryPool for melee anims?

And what is the limit, anyway?

EDIT - Removed other two Jedi, Maul and Dooku, both of which had custom combos, although neither were as complex as Mace's. Still crashes. Should I remove all units except Mace on one team and a SBD on the other?

EDIT 2 - I did that, and it still crashes, but with less errors. Here's the only ones apparently related to the new combo:
Hidden/Spoiler:
[code]Message Severity: 2
.\Source\SoldierAnimationData.cpp(249)
SoldierAnimationData[84d86099]::Animation[stand_attack1b_full]::BlendTimeTo: unknown anim 'stand_attack1b_end_upper' [79fbec9e]


Message Severity: 3
.\Source\SoldierAnimatorClass.cpp(1881)
Can't find soldier animation mace_sabre_stand_finishattack_land_full(_upper)


Message Severity: 3
.\Source\SoldierAnimatorClass.cpp(1881)
Can't find soldier animation mace_sabre_stand_finishattack_recover_full(_upper)[/code]
Those severity 3's are still there, as well as that severity 2. But I don't understand it; I removed a whole lot of units and it still crashes? How much must I take away?


You know what, here's the combo. Maybe I wrote something wrong. The goal of it is to have the main attack as a series of slashes without any pause, similar to Maveritchell's "light" combos in his upcoming Battlefront: Unleashed. Then, the third attack is an explosion with two of Vader's three jump attack anims. This is set to go off when the player, at the end of the second short slash, double-taps the secondary fire button. More complex than anything I've attempted before, so there is a high likelyhood I got something wrong. Can you spot anything?

The combo:
Hidden/Spoiler:
*old combo removed, look below*


Also, what's it talking about with that "(_upper)" complaint? I don't believe I have sabre_finishattack_land_full_upper referenced anywhere.


EDIT 2 - I believe I have fixed the Severity 2. The thing was looking for an anim called "stand_attack1b_end", whereas the one I had was "stand_attack1b_end_full". There's still the Severity 3's, though. I'll try renaming sabre_finishattack_land_full to sabre_finishattack_land_full_upper and see if that works.


EDIT 3 - ARGH! It still doesn't work! But the severity 3's haven't even changed, meaning it's looking for stand_finishattack_land_full when I replaced every mention of that with stand_finishattack_land_full_upper! Why does it persist in looking for things that I munged out of existance?



Edit number 4 - I have solved it. Sorry for freaking out earlier. Thank you everyone. This can be locked.


EDIT 5 - Ah, no it can't. I have the attacks going fluidly, but for some odd reason the explosion won't work. I get this:
Hidden/Spoiler:
Message Severity: 2
.\Source\Combo.cpp(2645)
Combo[84d86099]::State[ATTACK1]: unexpected data [e46f6ff3]

Message Severity: 2
.\Source\Combo.cpp(2645)
Combo[84d86099]::State[ATTACK2]: unexpected data [e46f6ff3]


Does anyone know what that's refering to? I suppose it means the extra transition in the ATTACK2 and 1 states that goes to the explosion, but I can't see anything wrong with it.


Old combo removed, the new one placed below.
Hidden/Spoiler:
OffhandAnimation("stand_useforce", "FIRE")
{
Loop("FinalFrame");
AimType("Torso");
BlendInTime(0.15);
BlendOutTime(0.15);
}
OffhandAnimation("stand_useforce", "FIRE2");
OffhandAnimation("stand_useforce", "CHARGE");

Animation("stand_attack1a_end");
Animation("stand_attack1b");
Animation("stand_attack1a_upper")
{
AimType("None");
BlendInTime(0.0);
BlendOutTime(0.15);
BlendTimeTo("stand_attack1a_end", 0.0);
BlendTimeTo("stand_attack1b", 0.0);
}
Animation("stand_attack1a_lower")
{
BlendInTime(0.15);
BlendOutTime(0.15);
BlendTimeTo("stand_attack1a_end", 0.0);
BlendTimeTo("stand_attack1b", 0.0);
}

// Throw stuff....
ThrowAnimation("stand_throw");

State("CATCH_SABRE")
{
Posture("Stand");
// Sound("saber_catch");
Animation("stand_catch")
{
AimType("None");
BlendOutTime(0.2);
}

InputLock("All", "!Thrust");
AlignedToThrust();
}

State("IDLE")
{
Duration(0.0); // infinite duration
EnergyRestoreRate(); // (0.0, "FromSoldier")
InputLock(0.15, "Sprint", "Jump", "Crouch");

Transition("BACK_ATTACK")
{
If()
{
Break(); // all transitions are breaking if Duration is 0
Posture("Stand", "Crouch");
Button("Fire", "Press");
Thrust(">", 0.25);
ThrustAngle(135, 225);
}
}
Transition("ATTACK1")
{
If()
{
Break(); // all transitions are breaking if Duration is 0
Posture("Stand", "Crouch");
Button("Fire", "Press");
}
}
Transition("DASHATTACK")
{
If()
{
Break(); // all transitions are breaking if Duration is 0
Posture("Sprint");
Button("Fire", "Press");
}
}
Transition("JUMPATTACK_FALL")
{
If()
{
Break(); // all transitions are breaking if Duration is 0
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 luke to jump attack during longer falls
// or falling from a force jump when it could.
//VelocityY(">", -6.3);
Button("Fire", "Press");
}
}
Transition("ATTACK3")
{
If()
{
Break(); // all transitions are breaking if Duration is 0
Posture("Stand", "Crouch");
Button("FireSecondary", "Press");
}
}
}


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(600);
Push(6.0);
}

Attack()
{
DamageTime(13, 20, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(600);
Push(6.0);
}

Transition("IDLE");
}

//Forward declare animations to allow BlendTimeTo references:
Animation("stand_attack1b_end_full");
Animation("finishattack_land_full");
Animation("finishattack_recover_full");
Animation("stand_attack1a_end_full");
Animation("stand_attack1a_full");

State("ATTACK1")
{
Posture("Stand");
Animation("stand_attack1a_full");
Sound("saber_swing");

InputLock("All", "!Thrust");
AlignedToThrust();
Attack()
{
DamageTime(2, 9, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(400);
Push(3.0);
}

DeflectAngle(-180, 180); // deflect anything from forward arc


EnergyRestoreRate(-10.0);

Transition("ATTACK2")
{
If()
{
TimeStart(4, "Frames");
TimeEnd(14, "Frames"); //, "SyncIfOvertime");
Posture("Stand");
Button("Fire", "Press");
}
}

Transition("ATTACK3")
{
If()
{
TimeStart(3, "Frames");
TimeEnd(18, "Frames"); //, "SyncIfOvertime");
Posture("Stand");
Button("FireSecondary", "Press");
}
}

Transition("RECOVER1");
}

State("RECOVER1")
{
Posture("Stand");
Animation("stand_attack1a_end_full")
{
// SyncType("attack1b_full", "ByTime");
AimType("None");
BlendInTime(0.15);
BlendOutTime(0.15);
}

InputLock("All", "!Thrust");
AlignedToThrust();

Transition("IDLE");
}

State("ATTACK2")
{
Posture("Stand");
Animation("stand_attack1b_full")
{
// SyncType("attack1b_full", "ByTime");
AimType("None");
BlendInTime(0.06);
BlendOutTime(0.15);
BlendTimeTo("stand_attack1b_end_full", 0.0);
BlendTimeTo("stand_attack1a_full", 0.0);
BlendTimeTo("finishattack_land_full", 0.0);
}
Sound("saber_swing");

InputLock("All", "!Thrust");
AlignedToThrust();
Attack()
{
AttackID("MaceA2");
DamageTime(1, 6, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(400);
Push(3.0);
}

DeflectAngle(-180, 180); // deflect anything from forward arc

EnergyRestoreRate(-10.0);

Transition("ATTACK3")
{
If()
{
TimeStart(3, "Frames");
TimeEnd(18, "Frames"); //, "SyncIfOvertime");
Posture("Stand");
Button("FireSecondary", "Press");
}
}

Transition("ATTACK1")
{
If()
{
TimeStart(3, "Frames");
TimeEnd(18, "Frames"); //, "SyncIfOvertime");
Posture("Stand");
Button("Fire", "Press");
}
}

Transition("RECOVER2");
}

State("RECOVER2")
{
Posture("Stand");
Animation("stand_attack1b_end_full")
{
// SyncType("attack1c", "ByTime");
AimType("None");
BlendInTime(0.15);
BlendOutTime(0.15);
}

Attack()
{
AttackID("MaceA2");
DamageTime(1, 3, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(500);
Push(3.0);
}


InputLock("All", "!Thrust");
AlignedToThrust();

Transition("IDLE");
}

State("ATTACK3")
{
Posture("Stand");
Animation("finishattack_land_full")
{
// SyncType("attack1c", "ByTime");
AimType("None");
BlendInTime(0.06);
BlendOutTime(0.15);
}
Sound("saber_attack_three", 10, "Frames");

EnergyRestoreRate(-100.0);

PlayExplosion(); // yep...

//set a duration so we will go to state RECOVER3 before the animation ends
Duration(18, "Frames");
AnimatedMove() // animation controls velocity for entire state
{
VelocityZ(0.0);
VelocityX(0.0);
VelocityFromThrust(8.0);
VelocityFromStrafe(3.0);
}
AlignedToThrust();

TurnFactor(0.5);

InputLock("All", "!Thrust"); // lock all controls for duration of state
Attack()
{
DamageTime(8, 16, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(800);
Push(5.0);
}

Attack()
{
AttackID("MaceA3");
DamageTime(16, 28, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(800);
Push(5.0);
}


Transition("ATTACK3_LAND");
}

State("ATTACK3_LAND")
{
Posture("Stand");
Animation("finishattack_recover_full")
{
// SyncType("attack1c", "ByTime");
AimType("None");
BlendInTime(0.06);
BlendOutTime(0.15);
}
Sound("saber_attack_three");

//set a duration so we will go to state RECOVER3 before the animation ends
AnimatedMove() // animation controls velocity for entire state
{
VelocityZ(0.0);
VelocityX(0.0);
VelocityFromThrust(0.5);
VelocityFromStrafe(0.5);
Until()
{
Break(28, "Frames");
}
}
AlignedToThrust();

TurnFactor(0.5);

InputLock("All", "!Thrust"); // lock all controls for duration of state

Attack()
{
AttackID("MaceA3");
DamageTime(16, 28, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(600);
Push(5.0);
}


Transition("IDLE");
}

State("DASHATTACK")
{
Posture("Stand");
Animation("stand_dashattack_full")
{
AimType("FullBody");
BlendInTime(0.10);
BlendOutTime(0.25);
}
Sound("saber_swing");

AnimatedMove()
{
VelocityZ(17.0);
VelocityX(0.0);
VelocityFromThrust(5.0);
VelocityFromStrafe(1.0);
}
TurnFactor(0.3);

Duration(14, "Frames");

InputLock("All", "!Thrust");
Attack()
{
DamageTime(1, 5, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(700);
Push(3.0);
}

Transition("DASHATTACK2");
}

State("DASHATTACK2")
{
Posture("Stand");
Animation("stand_dashattackend_full")
{
AimType("FullBody");
BlendInTime(0.10);
BlendOutTime(0.25);
}
Sound("saber_swing");

AnimatedMove()
{
VelocityZ(0.0);
VelocityX(0.0);
VelocityFromThrust(0.0);
VelocityFromStrafe(0.0);
}
TurnFactor(0.3);

InputLock("All");
Attack()
{
DamageTime(20, 23, "Frames");
DamageLength(1.5);
DamageWidth(0.75);
Damage(700);
Push(5.0);
}

Transition("ATTACK2")
{
If()
{
Break(24, "Frames");
TimeStart(0.0);
TimeEnd(0.25, "FromEnd"); //, "SyncIfOvertime");
Posture("Stand");
Button("Fire", "Press");
}
}

Transition("IDLE");
}

// forward declare jumpattack_land, since jumpattack_fall refers to it:
Animation("jumpattack_land_full");

State("JUMPATTACK_FALL")
{
Posture("Jump");

Animation("jumpattack_fall_full")
{
Loop("FinalFrame");
AimType("None");
BlendInTime(0.15);
BlendOutTime(0.15);
// BlendTimeTo("jumpattack_land", 0.15);
}

Sound("com_weap_throw");

Duration(0);

EnergyRestoreRate(0.0);

Gravity(4.0);
GravityVelocityTarget(-20.0); // accelerate us
AnimatedMove();
InputLock("All", "!Thrust"); // lock all buttons for duration of state

Transition("JUMPATTACK_LAND")
{
If()
{
Break();
Posture("Stand");
}
}
Transition("IDLE")
{
If()
{
Break();
Posture("Any", "!Stand", "!Jump", "!Jet");
}
}
}

State("JUMPATTACK_LAND")
{
Posture("Stand");

Animation("jumpattack_land_full")
{
AimType("FullBody");
//SyncType("jumpattack_land", "ByTime");
BlendInTime(0.00);
BlendOutTime(0.20);
}

Attack()
{
AttackID("Earthquake");
DamageTime(0, 4, "Frames");
DamageLength(1.0);
DamageWidth(0.5);
Damage(1200);
}

RestartAnimation();
Duration(4, "Frames");

EnergyRestoreRate(0.0);

AnimatedMove();
InputLock("All");

Transition("JUMPATTACK_LAND2");
}

State("JUMPATTACK_LAND2")
{
Posture("Stand");

Attack()
{
AttackID("Earthquake");
DamageTime(0, 6, "Frames");
DamageLength(1.5);
DamageWidth(0.5);
Damage(0);
}


Animation("jumpattack_end_full")
{
AimType("FullBody");
//SyncType("jumpattack_land", "ByTime");
BlendInTime(0.00);
BlendOutTime(0.20);
}

EnergyRestoreRate(0.0);


AnimatedMove();
InputLock("All");
}



Also the deflect prooperties I added to attacks 1 and 2 don't work. I got this before with some different animations when my MemoryPool for deflect was too low. Should I raise it some more?


EDIT 6 - Raised by about 1000, and still no improvement. Also, the AI doesn't spawn as this unit.

Re: New Anim sets (semi-solved)

Posted: Fri Mar 06, 2009 7:13 pm
by MetalcoreRancor
The game doesn't have a finishattack line after sabre.

You have to name it sabre_stand_finishattack etc

Otherwise it will crash.

Re: New Anim sets (semi-solved)

Posted: Fri Mar 06, 2009 7:19 pm
by Fiodis
Lol, yeah, I realized that half an hour ago but neglected to update this topic.

Afterwards I mapped it to "FireSecondary" and was extremely frustrated until I realized that "FireSecondary" meant block instead of right-click.


Well, I suppose this can be locked.