I was trying to make a monster skill that loops its effect if the target (player) is still within range. The animation speed is set to 2.
When I test the skill (both in-game and in-editor), the skill animation proceeds at speed 2 for the first iteration of the skill, but each subsequent iteration operates at speed 1 (which affects the timing of various effects within the skills that otherwise work properly).
Is there a way to make all iterations of a looping skill operate at the same animation speed?
Using <FLOAT>SPEED:2 in the main section of the skill produces the above issue. I've looked at numerous tutorials, forum posts, etc. and not seen any that explain my issue (or even mention looping skills, for that matter).
Hi SilverNexus and welcome!
The only way I can think of to make it foolproof (play at 2x speed every time) is to actually double the speed of the animation itself (instead of using a <FLOAT>SPEED definition in the skill .DAT).
Unfortunately the only way I know to do this is very tedious. It involves opening up the animation in XML (convert the .SKELETON with OGRETools) and changing the timing of each keyframe by hand (I've tried using a spreadsheet for this; it does reduce the time but not by much). Then converting it back to .SKELETON. The resulting new animation is what you then use for your skill.
Does anyone else have a method Silver could try?
Yo! I split off that little side-discussion about a keyframe editor (exciting!) so that we don't derail SilverNexus' topic (sorry SilverNexus)
...double the speed of the animation itself (instead of using a <FLOAT>SPEED definition in the skill .DAT).
Hey SilverNexus! If you want to try out this method, Kva co-created a brand new tool that will automate the keyframe editing
check it out!
Wow. I don't think I've ever had this quick and thorough a solution to my forum questions anywhere. I thank you for your promptness.
In the meantime, I've downloaded Retimer, but I'm not booted into Windows at the moment, so I'll give that a whirl later (hopefully later today). It sounds as though it will ease numerous processes involved with modding, so I expect it to do great things.
Hey Silver,
I might be able to find an easier solution to your problem. It sounds like a Skills quirk. If you would post the text from your skill's .dat file I'll take a look at it and see why this might be happening.
I lightly edited this so it didn't have unit types that don't exist outside my experimentation mod, so it should work out of the box (I think).
The intent was to make the Bloatfang Boss damage the player and heal itself by "eating" the player (damaging, not fully eating, but, well, close enough). It was intended for practice/learning more than anything, so its not balanced at all (just the scale effect by itself makes the skill become ridiculous; the boss becomes unreasonably big and hard to target).
Last I checked, the damage and healing both didn't work, but that's something I'll address once I get the animation and timing to work right.
[SKILL]
<STRING>NAME:BloatFang_Heal_Eat_Player
<STRING>SKILL_TYPE:OFFENSIVE
<STRING>ACTIVATION_TYPE:NORMAL
<STRING>TARGET_ALIGNMENT:EVIL
<STRING>TARGET_UNITTYPE:PLAYER
<STRING>ANIMATION:Special_Eat
<STRING>ANIMATIONLOOP:Special_Eat
<FLOAT>RANDOMRANGE:0
<FLOAT>RANGE:0.5
<FLOAT>TARGETRANGE:10
<BOOL>REQUIRES_TARGET:1
<BOOL>DONT_TARGET_SMASHABLES:1
<BOOL>STOP_ON_TARGET_DEATH:1
<FLOAT>SPEED:2
<BOOL>CONTINUOUSLOOPING:1
<BOOL>IGNORES_CAST_SPEED:1
<INTEGER>COOLDOWNMS:1200
<FLOAT>FINDTARGETANGLE:360
<INTEGER>DURATIONOVERRIDEMS:1440
<FLOAT>TURNRATEOVERRIDE:-1
<BOOL>INTERRUPTABLE:1
<BOOL>CAN_BE_SILENCED:0
<BOOL>STOPSWHENOUTOFRANGE:1
<STRING>TARGET:TARGET
<INTEGER64>UNIQUE_GUID:2670047190211345000
[TARGET_SPECIFIC_UNITS]
<STRING>UNIT:HUM_ARBITER_F
<STRING>UNIT:HUM_ARBITER_M
<STRING>UNIT:HUM_BERSERKER_BASE
<STRING>UNIT:HUM_BERSERKER_F
<STRING>UNIT:HUM_BERSERKER_M
<STRING>UNIT:HUM_ENGINEER_BASE
<STRING>UNIT:HUM_ENGINEER_F
<STRING>UNIT:HUM_ENGINEER_M
<STRING>UNIT:HUM_WANDERER_BASE
<STRING>UNIT:HUM_WANDERER_F
<STRING>UNIT:HUM_WANDERER_M
[/TARGET_SPECIFIC_UNITS]
[EVENT_START]
<STRING>FILE:media/skills/monsters/boss_bloatfang/consume_start.layout
<BOOL>PLACEONTARGET:1
<BOOL>DAMAGESHAPES_HIT_ONCE:1
<BOOL>APPLYEFFECTS:1
[/EVENT_START]
[EVENT_TRIGGER]
<BOOL>NODAMAGEREFLECTION:1
<BOOL>PLACEONTARGET:1
<BOOL>DAMAGESHAPES_HIT_ONCE:1
<BOOL>APPLYEFFECTS:1
<BOOL>APPLYEFFECTSALWAYS:1
[EFFECTS]
<STRING>TARGET:ENEMY
[EFFECT]
<STRING>NAME:Slow
<STRING>ACTIVATION:DYNAMIC
<STRING>DURATION:1.4
<STRING>TYPE:PERCENT SPEED
<BOOL>EXCLUSIVE:TRUE
<FLOAT>MIN:-100
<FLOAT>MAX:-100
[/EFFECT]
[EFFECT]
<STRING>NAME:Damage
<STRING>ACTIVATION:DYNAMIC
<STRING>DURATION:1.45
<STRING>TYPE:DAMAGE
<STRING>DAMAGE_TYPE:POISON
<BOOL>EXCLUSIVE:TRUE
<FLOAT>SOAKSCALE:0
<FLOAT>MIN:100
<FLOAT>MAX:600
<FLOAT>MINFORCE:0
<FLOAT>MAXFORCE:0
[/EFFECT]
[/EFFECTS]
[/EVENT_TRIGGER]
[EVENT_TRIGGER_TWO]
<STRING>FILE:media/skills/monsters/boss_bloatfang/consume.layout
<BOOL>NODAMAGEREFLECTION:1
<BOOL>PLACEONTARGET:1
<BOOL>DAMAGESHAPES_HIT_ONCE:1
<BOOL>APPLYEFFECTS:1
[EFFECTS]
<STRING>TARGET:SELF
[EFFECT]
<STRING>ACTIVATION:DYNAMIC
<STRING>DURATION:ALWAYS
<STRING>TYPE:PERCENT HP
<BOOL>SAVE:true
<FLOAT>MIN:2
<FLOAT>MAX:2
[/EFFECT]
[EFFECT]
<STRING>NAME:Heal_Effect
<STRING>ACTIVATION:DYNAMIC
<STRING>DURATION:.5
<STRING>TYPE:HP RECHARGE
<STRING>PARTICLE_FX:media/particles/events/BigHealthBonus.Layout
<BOOL>SAVE:true
<FLOAT>MIN:100
<FLOAT>MAX:600
<FLOAT>MINFORCE:0
<FLOAT>MAXFORCE:0
[/EFFECT]
[EFFECT]
<STRING>NAME:SCALE_EFFECT2
<STRING>ACTIVATION:PASSIVE
<STRING>DURATION:ALWAYS
<STRING>TYPE:SCALE
<BOOL>SAVE:true
<BOOL>EXCLUSIVE:true
<FLOAT>STARTSCALE:1
<FLOAT>ENDSCALE:1.001
<FLOAT>TIMETOSCALE:0.1
<FLOAT>TIMETOSCALEBACK:0.1
[/EFFECT]
[EFFECT]
<STRING>NAME:SCALE_EFFECT1
<STRING>ACTIVATION:PASSIVE
<STRING>DURATION:ALWAYS
<STRING>TYPE:SCALE
<BOOL>SAVE:true
<FLOAT>STARTSCALE:0
<FLOAT>ENDSCALE:0.001
<FLOAT>TIMETOSCALE:0.1
<FLOAT>TIMETOSCALEBACK:0.1
[/EFFECT]
[EFFECT]
<STRING>ACTIVATION:DYNAMIC
<STRING>DURATION:ALWAYS
<STRING>TYPE:DAMAGE BONUS
<BOOL>SAVE:true
<FLOAT>MIN:10
<FLOAT>MAX:10
[/EFFECT]
[/EFFECTS]
[/EVENT_TRIGGER_TWO]
[/SKILL]
Okay, I also want to see the bloatfang animation file, the one in your MODELS directory. I wanna see what sorts of modifications it has on it.
For now, though, I see you've got
<BOOL>IGNORES_CAST_SPEED:1which should make it ignore the line
<FLOAT>SPEED:2You probably don't need the IGNORES_CAST_SPEED property on this skill, since I doubt Bloatfang gets any cast speed modifiers to speak of. Try changing that, then post back here with your animation file if the change doesn't work.
Then we'll talk about your skill setup. But please read
this guide first, it has some fairly important information.
Nope, it didn't change it

.
The animation should be the stock animation, but I'll put it here just in case (and the XML of it, too).
heyo silver.
i think i may have found your problem.
<STRING>ANIMATIONLOOP:Special_Eat
<BOOL>CONTINUOUSLOOPING:1
the whole looping part should be dropped, i know its the core concept of the whole skill,
but special_eat, is not intended to be a looping animation, and that probably where your problem comes from.
if you observe looping animations they usually come as a pair, the starting part and the looping part, for an example heres is rapid fires 2 animations
<STRING>ANIMATION:special_rapidshot_rpistol_start
<STRING>ANIMATIONLOOP:special_rapidshot_rpistol_loop special_eat is a standalone animation lasting for 3 seconds.
from the looks of it, you've used the original skill that bloatfang uses as your base code (bloat fang_heal), which is good, but if you look back, you'll see that it was never a looping skill, just one that has a long animation
you could possibly use retimer to extend that animation to last for longer, or break it up into a starting animation and a looping animation, which could be too much work.
you could possibly use retimer to extend that animation to last for longer, or break it up into a starting animation and a looping animation, which could be too much work.
I could probably use Retimer to make the loop animation from the normal, and see how it works. If it still doesn't quite look right, I could make a specific start animation (specifically using Retimer).
Of course, Retimer would need to work in my locale for it to be worthwhile to use (those pesky floating point separators, anyway); otherwise, I'd simply have to do it manually. It'll probably take about as much time for the developers to find the locale issue and fix it as it would take for me to change all those animation values separately.
When I test the skill (both in-game and in-editor), the skill animation proceeds at speed 2 for the first iteration of the skill, but each subsequent iteration operates at speed 1 (which affects the timing of various effects within the skills that otherwise work properly).
hmm, so i looked back on your post and mine and forgot to give you a piece of crucial information.
your setup of using special eat as the starting and looping animation works, only if you set your cast speed to 1
the thing is the looping part of an animation cannot be changed by cast speed but the starting part can,
so whats happening here is that your starting animation is played at 2 cast speed, then the looping part comes in and is played at 1 cast speed
you could do as phan suggested and make a new animation thats 2x faster, then use your current setup and play it at 1 cast speed