More accurate battle animation shake
With dynrpg, we can perfect the screen and target shake feature from battle animations.
A quick dump shows some very strange behavior.
The values are strength, speed, x, y, and time.
This is an animation which does screen shake on frame 1.
SHAKE SCREEN: 3 4 -4 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 29
SHAKE SCREEN: 3 4 -4 0 28
SHAKE SCREEN: 3 4 -1 0 27
SHAKE SCREEN: 3 4 2 0 26
SHAKE SCREEN: 3 4 5 0 25
SHAKE SCREEN: 3 4 7 0 24
SHAKE SCREEN: 3 4 5 0 23
SHAKE SCREEN: 3 4 2 0 22
SHAKE SCREEN: 3 4 -1 0 21
SHAKE SCREEN: 3 4 -4 0 20
SHAKE SCREEN: 3 4 -6 0 19
SHAKE SCREEN: 3 4 -6 0 18
SHAKE SCREEN: 3 4 -3 0 17
SHAKE SCREEN: 3 4 3 0 15
SHAKE SCREEN: 3 4 6 0 14
SHAKE SCREEN: 3 4 6 0 13
SHAKE SCREEN: 3 4 4 0 12
SHAKE SCREEN: 3 4 1 0 11
SHAKE SCREEN: 3 4 -2 0 10
SHAKE SCREEN: 3 4 -5 0 9
SHAKE SCREEN: 3 4 -7 0 8
SHAKE SCREEN: 3 4 -5 0 7
SHAKE SCREEN: 3 4 -2 0 6
SHAKE SCREEN: 3 4 1 0 5
SHAKE SCREEN: 3 4 4 0 4
SHAKE SCREEN: 3 4 6 0 3
SHAKE SCREEN: 3 4 6 0 2
SHAKE SCREEN: 3 4 3 0 1
Target shake on frame 1
SHAKE MONSTER: 3 4 -4 0 30
SHAKE MONSTER: 3 4 -6 0 30
SHAKE MONSTER: 3 4 -6 0 30
SHAKE MONSTER: 3 4 -6 0 30
SHAKE MONSTER: 3 4 -6 0 30
SHAKE MONSTER: 3 4 -6 0 30
SHAKE MONSTER: 3 4 -6 0 30
SHAKE MONSTER: 3 4 -6 0 30
SHAKE MONSTER: 3 4 -6 0 30
SHAKE MONSTER: 3 4 -6 0 30
SHAKE MONSTER: 3 4 -6 0 29
SHAKE MONSTER: 3 4 -6 0 28
SHAKE MONSTER: 3 4 -4 0 27
SHAKE MONSTER: 3 4 -1 0 26
SHAKE MONSTER: 3 4 2 0 25
SHAKE MONSTER: 3 4 5 0 24
SHAKE MONSTER: 3 4 7 0 23
SHAKE MONSTER: 3 4 5 0 22
SHAKE MONSTER: 3 4 2 0 21
SHAKE MONSTER: 3 4 -1 0 20
SHAKE MONSTER: 3 4 -4 0 19
SHAKE MONSTER: 3 4 -6 0 18
SHAKE MONSTER: 3 4 -6 0 17
SHAKE MONSTER: 3 4 -3 0 16
SHAKE MONSTER: 3 4 3 0 14
SHAKE MONSTER: 3 4 6 0 13
SHAKE MONSTER: 3 4 6 0 12
SHAKE MONSTER: 3 4 4 0 11
SHAKE MONSTER: 3 4 1 0 10
SHAKE MONSTER: 3 4 -2 0 9
SHAKE MONSTER: 3 4 -5 0 8
SHAKE MONSTER: 3 4 -7 0 7
SHAKE MONSTER: 3 4 -5 0 6
SHAKE MONSTER: 3 4 -2 0 5
SHAKE MONSTER: 3 4 1 0 4
SHAKE MONSTER: 3 4 4 0 3
SHAKE MONSTER: 3 4 6 0 2
SHAKE MONSTER: 3 4 6 0 1
It looks like when you cause a shake, it animates 1 frame, gets stuck for 9 frames, and then animates down normally after that.
Wtf 2k3??
More test cases:
An animation with 40 frames which does a screen shake on frames 1, 3, and 5
SHAKE SCREEN: 3 4 -4 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 29
SHAKE SCREEN: 3 4 -4 0 28
SHAKE SCREEN: 3 4 -1 0 27
SHAKE SCREEN: 3 4 2 0 26
SHAKE SCREEN: 3 4 5 0 25
SHAKE SCREEN: 3 4 7 0 24
SHAKE SCREEN: 3 4 5 0 23
SHAKE SCREEN: 3 4 2 0 22
SHAKE SCREEN: 3 4 -1 0 21
SHAKE SCREEN: 3 4 -4 0 20
SHAKE SCREEN: 3 4 -6 0 19
SHAKE SCREEN: 3 4 -6 0 18
SHAKE SCREEN: 3 4 -3 0 17
SHAKE SCREEN: 3 4 3 0 15
SHAKE SCREEN: 3 4 6 0 14
SHAKE SCREEN: 3 4 6 0 13
SHAKE SCREEN: 3 4 4 0 12
SHAKE SCREEN: 3 4 1 0 11
SHAKE SCREEN: 3 4 -2 0 10
SHAKE SCREEN: 3 4 -5 0 9
SHAKE SCREEN: 3 4 -7 0 8
SHAKE SCREEN: 3 4 -5 0 7
SHAKE SCREEN: 3 4 -2 0 6
SHAKE SCREEN: 3 4 1 0 5
SHAKE SCREEN: 3 4 4 0 4
SHAKE SCREEN: 3 4 6 0 3
SHAKE SCREEN: 3 4 6 0 2
SHAKE SCREEN: 3 4 3 0 1
A battle animation does shake on frame 1, animation is only 1 frame long
SHAKE SCREEN: 3 4 -4 0 29
SHAKE SCREEN: 3 4 -4 0 28
SHAKE SCREEN: 3 4 -1 0 27
SHAKE SCREEN: 3 4 2 0 26
SHAKE SCREEN: 3 4 5 0 25
SHAKE SCREEN: 3 4 7 0 24
SHAKE SCREEN: 3 4 5 0 23
SHAKE SCREEN: 3 4 2 0 22
SHAKE SCREEN: 3 4 -1 0 21
SHAKE SCREEN: 3 4 -4 0 20
SHAKE SCREEN: 3 4 -6 0 19
SHAKE SCREEN: 3 4 -6 0 18
SHAKE SCREEN: 3 4 -3 0 17
SHAKE SCREEN: 3 4 3 0 15
SHAKE SCREEN: 3 4 6 0 14
SHAKE SCREEN: 3 4 6 0 13
SHAKE SCREEN: 3 4 4 0 12
SHAKE SCREEN: 3 4 1 0 11
SHAKE SCREEN: 3 4 -2 0 10
SHAKE SCREEN: 3 4 -5 0 9
SHAKE SCREEN: 3 4 -7 0 8
SHAKE SCREEN: 3 4 -5 0 7
SHAKE SCREEN: 3 4 -2 0 6
SHAKE SCREEN: 3 4 1 0 5
SHAKE SCREEN: 3 4 4 0 4
SHAKE SCREEN: 3 4 6 0 3
SHAKE SCREEN: 3 4 6 0 2
SHAKE SCREEN: 3 4 3 0 1
A battle animation doing a screen shake on frame 1, animation lasts 2 frames
SHAKE SCREEN: 3 4 -4 0 30
SHAKE SCREEN: 3 4 -6 0 30
SHAKE SCREEN: 3 4 -6 0 29
SHAKE SCREEN: 3 4 -4 0 28
SHAKE SCREEN: 3 4 -1 0 27
SHAKE SCREEN: 3 4 2 0 26
SHAKE SCREEN: 3 4 5 0 25
SHAKE SCREEN: 3 4 7 0 24
SHAKE SCREEN: 3 4 5 0 23
SHAKE SCREEN: 3 4 2 0 22
SHAKE SCREEN: 3 4 -1 0 21
SHAKE SCREEN: 3 4 -4 0 20
SHAKE SCREEN: 3 4 -6 0 19
SHAKE SCREEN: 3 4 -6 0 18
SHAKE SCREEN: 3 4 -3 0 17
SHAKE SCREEN: 3 4 3 0 15
SHAKE SCREEN: 3 4 6 0 14
SHAKE SCREEN: 3 4 6 0 13
SHAKE SCREEN: 3 4 4 0 12
SHAKE SCREEN: 3 4 1 0 11
SHAKE SCREEN: 3 4 -2 0 10
SHAKE SCREEN: 3 4 -5 0 9
SHAKE SCREEN: 3 4 -7 0 8
SHAKE SCREEN: 3 4 -5 0 7
SHAKE SCREEN: 3 4 -2 0 6
SHAKE SCREEN: 3 4 1 0 5
SHAKE SCREEN: 3 4 4 0 4
SHAKE SCREEN: 3 4 6 0 3
SHAKE SCREEN: 3 4 6 0 2
SHAKE SCREEN: 3 4 3 0 1
Some more investigation on how battle animations work.
Update Order
- Animate screen effects / weather / map battle animation
- This explains why map battle animation screen effects and sounds continue into the start of the battle.
- Animate battle animations on party members
- Animate battle animations on monsters
Animation play length
For battles only, RPG_RT will do the following:
num_frames = 0
if (animation_target != -2 && !animation.effects.empty()) {
num_frames = 2 * max(20, animation.effects.back().start_frame);
}
This explains the strange 40 frame limit behavior for battle animations.
Flash
For target and screen flash, RPG_RT actually pre-animates the (R,G,B,I) effect into a buffer and then each frame just forces the effects to these values. Screen effects are updated before animations, so while the screen update will animate the effects, the next call to battle animation update will force it back to the values in the animation.
https://github.com/fmatthew5876/DynRPG/blob/master/AnimationCurrent.h#L27
This explains why battle animations don't use the normal screen effects time chunks. It also explains why flash is disabled when a battle animation runs.
Shake
For target and screen shake, RPG_RT does similar thing, except this time it just animates the shake effect scope into a buffer. Only if it's 1 or 2, does RPG_RT force the effect on the screen or target.
https://github.com/fmatthew5876/DynRPG/blob/master/AnimationCurrent.h#L29
Is this resolved because it has patch available or not? @fmatthew5876