Anim Editor: Particle spawner tweaks

This commit is contained in:
Maruno17
2024-05-04 22:20:05 +01:00
parent dba28332f2
commit 8aacfe491f
10 changed files with 119 additions and 551 deletions

View File

@@ -47,7 +47,8 @@ module GameData
SPAWNER_TYPES = { SPAWNER_TYPES = {
"None" => :none, "None" => :none,
"RandomDirection" => :random_direction, "RandomDirection" => :random_direction,
"RandomDirectionGravity" => :random_direction_gravity "RandomDirectionGravity" => :random_direction_gravity,
"RandomUpDirectionGravity" => :random_up_direction_gravity
} }
# Properties that apply to the animation in general, not to individual # Properties that apply to the animation in general, not to individual

View File

@@ -535,7 +535,8 @@ AnimationEditor::SidePanes.add_property(:particle_pane, :spawner, {
values = { values = {
:none => _INTL("None"), :none => _INTL("None"),
:random_direction => _INTL("Random direction"), :random_direction => _INTL("Random direction"),
:random_direction_gravity => _INTL("Random direction gravity") :random_direction_gravity => _INTL("Random dir. with gravity"),
:random_up_direction_gravity => _INTL("Random up dir. gravity")
} }
pane.add_labelled_dropdown_list(:spawner, _INTL("Spawner"), values, :none) pane.add_labelled_dropdown_list(:spawner, _INTL("Spawner"), values, :none)
} }
@@ -552,6 +553,12 @@ AnimationEditor::SidePanes.add_property(:particle_pane, :spawn_quantity, {
else else
control.enable control.enable
end end
},
:apply_value => proc { |value, editor|
AnimationEditor::SidePanes.get_pane(:particle_pane)[:apply_value].call(:spawn_quantity, value, editor)
editor.components[:particle_list].change_particle_commands(editor.particle_index)
editor.components[:play_controls].duration = editor.components[:particle_list].duration
editor.refresh
} }
}) })

View File

@@ -64,7 +64,8 @@ module AnimationEditor::ParticleDataHelper
end end
# Used to determine which keyframes the particle is visible in, which is # Used to determine which keyframes the particle is visible in, which is
# indicated in the timeline by a coloured bar. # indicated in the timeline by a coloured bar. 0=not visible, 1=visible,
# 2=visible because of spawner delay.
# NOTE: Particles are assumed to be not visible at the start of the # NOTE: Particles are assumed to be not visible at the start of the
# animation, and automatically become visible when the particle has # animation, and automatically become visible when the particle has
# its first command. This does not apply to the "User" and "Target" # its first command. This does not apply to the "User" and "Target"
@@ -75,8 +76,8 @@ module AnimationEditor::ParticleDataHelper
raise _INTL("Couldn't get default value for property {1} for particle {2}.", raise _INTL("Couldn't get default value for property {1} for particle {2}.",
property, particle[:name]) property, particle[:name])
end end
value = GameData::Animation::PARTICLE_KEYFRAME_DEFAULT_VALUES[:visible] value = GameData::Animation::PARTICLE_KEYFRAME_DEFAULT_VALUES[:visible] ? 1 : 0
value = true if ["User", "Target", "SE"].include?(particle[:name]) value = 1 if ["User", "Target", "SE"].include?(particle[:name])
ret = [] ret = []
if !["User", "Target", "SE"].include?(particle[:name]) if !["User", "Target", "SE"].include?(particle[:name])
earliest = duration earliest = duration
@@ -84,15 +85,31 @@ module AnimationEditor::ParticleDataHelper
next if !value.is_a?(Array) || value.empty? next if !value.is_a?(Array) || value.empty?
earliest = value[0][0] if earliest > value[0][0] earliest = value[0][0] if earliest > value[0][0]
end end
ret[earliest] = true ret[earliest] = 1
end end
if particle[:visible] if particle[:visible]
particle[:visible].each { |cmd| ret[cmd[0]] = cmd[2] } particle[:visible].each { |cmd| ret[cmd[0]] = (cmd[2]) ? 1 : 0 }
end end
duration.times do |i| duration.times do |i|
value = ret[i] if !ret[i].nil? value = ret[i] if !ret[i].nil?
ret[i] = value ret[i] = value
end end
qty = particle[:spawn_quantity] || 1 if particle[:spawner] && particle[:spawner] != :none
if (particle[:spawner] || :none) != :none
qty = particle[:spawn_quantity] || 1
delay = AnimationPlayer::Helper.get_particle_delay(particle, qty - 1)
if delay > 0
count = -1
duration.times do |i|
if ret[i] == 1 # Visible
count = 0
elsif ret[i] == 0 && count >= 0 && count < delay # Not visible and within delay
ret[i] = 2
count += 1
end
end
end
end
return ret return ret
end end

View File

@@ -518,7 +518,7 @@ class AnimationEditor::ParticleList < UIControls::BaseControl
end end
sprites_need_changing = ensure_sprites sprites_need_changing = ensure_sprites
if @duration != old_duration || sprites_need_changing if @duration != old_duration || sprites_need_changing
@keyframe = @keyframe.clamp(0, @duration - 1) @keyframe = @keyframe.clamp(-1, @duration - 1)
@row_index = @row_index.clamp(0, @particle_list.length - 1) @row_index = @row_index.clamp(0, @particle_list.length - 1)
create_sprites create_sprites
end end
@@ -737,7 +737,7 @@ class AnimationEditor::ParticleList < UIControls::BaseControl
each_visible_keyframe do |i| each_visible_keyframe do |i|
draw_x = TIMELINE_LEFT_BUFFER + (i * KEYFRAME_SPACING) - @left_pos draw_x = TIMELINE_LEFT_BUFFER + (i * KEYFRAME_SPACING) - @left_pos
# Draw bg # Draw bg
if i < @duration - DURATION_BUFFER && visible_cmds[i] if i < @duration - DURATION_BUFFER && visible_cmds[i] == 1
bg_spr.bitmap.fill_rect(draw_x, ROW_SPACING, KEYFRAME_SPACING, ROW_HEIGHT - ROW_SPACING, bg_color) bg_spr.bitmap.fill_rect(draw_x, ROW_SPACING, KEYFRAME_SPACING, ROW_HEIGHT - ROW_SPACING, bg_color)
end end
# Draw hover highlight # Draw hover highlight
@@ -772,20 +772,40 @@ class AnimationEditor::ParticleList < UIControls::BaseControl
end end
end end
next if i >= @duration - DURATION_BUFFER next if i >= @duration - DURATION_BUFFER
next if !visible_cmds[i]
# Draw outline
outline_color = Color.black outline_color = Color.black
case visible_cmds[i]
when 1 # Particle is visible
# Draw outline
if is_property if is_property
outline_color = CONTROL_BG_COLORS[@particles[p_index][:focus]] || Color.magenta outline_color = CONTROL_BG_COLORS[@particles[p_index][:focus]] || Color.magenta
end end
bg_spr.bitmap.fill_rect(draw_x, ROW_SPACING, KEYFRAME_SPACING, 1, outline_color) # Top bg_spr.bitmap.fill_rect(draw_x, ROW_SPACING, KEYFRAME_SPACING, 1, outline_color) # Top
bg_spr.bitmap.fill_rect(draw_x, ROW_HEIGHT - 1, KEYFRAME_SPACING, 1, outline_color) # Bottom bg_spr.bitmap.fill_rect(draw_x, ROW_HEIGHT - 1, KEYFRAME_SPACING, 1, outline_color) # Bottom
if i <= 0 || !visible_cmds[i - 1] if i <= 0 || visible_cmds[i - 1] != 1
bg_spr.bitmap.fill_rect(draw_x, ROW_SPACING, 1, ROW_HEIGHT - ROW_SPACING, outline_color) # Left bg_spr.bitmap.fill_rect(draw_x, ROW_SPACING, 1, ROW_HEIGHT - ROW_SPACING, outline_color) # Left
end end
if i == @duration - DURATION_BUFFER - 1 || (i < @duration - 1 && !visible_cmds[i + 1]) if i == @duration - DURATION_BUFFER - 1 || (i < @duration - 1 && visible_cmds[i + 1] != 1)
bg_spr.bitmap.fill_rect(draw_x + KEYFRAME_SPACING, ROW_SPACING, 1, ROW_HEIGHT - ROW_SPACING, outline_color) # Right bg_spr.bitmap.fill_rect(draw_x + KEYFRAME_SPACING, ROW_SPACING, 1, ROW_HEIGHT - ROW_SPACING, outline_color) # Right
end end
when 2 # Particle is a spawner and delays its particles into this frame
if !is_property
# Draw dotted outline
KEYFRAME_SPACING.times do |j|
next if j.odd?
bg_spr.bitmap.fill_rect(draw_x + j, ROW_SPACING, 1, 1, outline_color) # Top
bg_spr.bitmap.fill_rect(draw_x + j, ROW_HEIGHT - 1, 1, 1, outline_color) # Bottom
end
(ROW_HEIGHT - ROW_SPACING).times do |j|
next if j.odd?
if i <= 0 || visible_cmds[i - 1] != 2
bg_spr.bitmap.fill_rect(draw_x, ROW_SPACING + j, 1, 1, outline_color) # Left
end
if i == @duration - DURATION_BUFFER - 1 || (i < @duration - 1 && visible_cmds[i + 1] != 2)
bg_spr.bitmap.fill_rect(draw_x + KEYFRAME_SPACING, ROW_SPACING + j, 1, 1, outline_color) # Right
end
end
end
end
end end
end end
@@ -1027,7 +1047,7 @@ class AnimationEditor::ParticleList < UIControls::BaseControl
def update_input def update_input
# Left/right to change current keyframe # Left/right to change current keyframe
if Input.triggerex?(:LEFT) || Input.repeatex?(:LEFT) if Input.triggerex?(:LEFT) || Input.repeatex?(:LEFT)
if @keyframe > 0 if @keyframe >= 0
@keyframe -= 1 @keyframe -= 1
scroll_to_keyframe(@keyframe) scroll_to_keyframe(@keyframe)
set_changed set_changed

View File

@@ -21,6 +21,7 @@ class AnimationPlayer
@slowdown = 1 @slowdown = 1
@timer_start = nil @timer_start = nil
@anim_sprites = [] # Each is a ParticleSprite @anim_sprites = [] # Each is a ParticleSprite
@spawner_sprites = []
@duration = total_duration @duration = total_duration
end end
@@ -168,29 +169,36 @@ class AnimationPlayer
end end
end end
end end
# Add spawner commands
add_spawner_commands(particle_sprite, particle, instance, delay)
# Finish up # Finish up
@anim_sprites.push(particle_sprite) @anim_sprites.push(particle_sprite)
@spawner_sprites.push([particle_sprite, particle, target_idx, instance, delay]) if spawner_type != :none
end end
def add_spawner_commands(particle_sprite, particle, instance, delay) def add_spawner_commands(particle_sprite, particle, target_idx, instance, delay, add_as_spawner = true)
spawner_type = particle[:spawner] || :none
return if spawner_type == :none
@spawner_sprites.push([particle_sprite, particle, target_idx, instance, delay]) if add_as_spawner
life_start = AnimationPlayer::Helper.get_first_command_frame(particle) life_start = AnimationPlayer::Helper.get_first_command_frame(particle)
life_end = AnimationPlayer::Helper.get_last_command_frame(particle) life_end = AnimationPlayer::Helper.get_last_command_frame(particle)
life_end = AnimationPlayer::Helper.get_duration(particles) if life_end < 0 life_end = AnimationPlayer::Helper.get_duration(particles) if life_end < 0
lifetime = life_end - life_start lifetime = life_end - life_start
spawner_type = particle[:spawner] || :none
case spawner_type case spawner_type
when :random_direction, :random_direction_gravity when :random_direction, :random_direction_gravity, :random_up_direction_gravity
if spawner_type == :random_up_direction_gravity
angle = 30 + rand(120)
else
angle = rand(360) angle = rand(360)
angle = rand(360) if angle >= 180 && spawner_type == :random_direction_gravity # Prefer upwards angles angle = rand(360) if angle >= 180 && spawner_type == :random_direction_gravity # Prefer upwards angles
speed = rand(150, 250) end
speed = rand(200, 400)
start_x_speed = speed * Math.cos(angle * Math::PI / 180) start_x_speed = speed * Math.cos(angle * Math::PI / 180)
start_y_speed = -speed * Math.sin(angle * Math::PI / 180) start_y_speed = -speed * Math.sin(angle * Math::PI / 180)
start_x = (start_x_speed * 0.05) + rand(-8, 8) start_x = (start_x_speed * 0.05) + rand(-8, 8)
start_y = (start_y_speed * 0.05) + rand(-8, 8) start_y = (start_y_speed * 0.05) + rand(-8, 8)
# Set initial positions # Set initial positions
[:x, :y].each do |property| [:x, :y].each do |property|
particle_sprite.delete_processes(property)
if particle[property] && !particle[property].empty?
offset = (property == :x) ? start_x : start_y offset = (property == :x) ? start_x : start_y
particle[property].each do |cmd| particle[property].each do |cmd|
next if cmd[1] > 0 next if cmd[1] > 0
@@ -198,11 +206,12 @@ class AnimationPlayer
break break
end end
end end
end
# Set movements # Set movements
particle_sprite.add_move_process(:x, particle_sprite.add_move_process(:x,
(life_start + delay) * slowdown, lifetime * slowdown, (life_start + delay) * slowdown, lifetime * slowdown,
start_x + (start_x_speed * lifetime / 20.0), :linear) start_x + (start_x_speed * lifetime / 20.0), :linear)
if spawner_type == :random_direction_gravity if [:random_direction_gravity, :random_up_direction_gravity].include?(spawner_type)
particle_sprite.add_move_process(:y, particle_sprite.add_move_process(:y,
(life_start + delay) * slowdown, lifetime * slowdown, (life_start + delay) * slowdown, lifetime * slowdown,
[start_y_speed / slowdown, AnimationPlayer::Helper::GRAVITY_STRENGTH.to_f / (slowdown * slowdown)], :gravity) [start_y_speed / slowdown, AnimationPlayer::Helper::GRAVITY_STRENGTH.to_f / (slowdown * slowdown)], :gravity)
@@ -241,6 +250,8 @@ class AnimationPlayer
# yet started. # yet started.
def reset_anim_sprites def reset_anim_sprites
@anim_sprites.each { |particle| particle.reset_processes } @anim_sprites.each { |particle| particle.reset_processes }
# Randomise spawner particle properties
@spawner_sprites.each { |spawner| add_spawner_commands(*spawner, false) }
end end
#----------------------------------------------------------------------------- #-----------------------------------------------------------------------------

View File

@@ -49,6 +49,10 @@ class AnimationPlayer::ParticleSprite
@processes.push([property, start_frame, duration, value, interpolation, nil, nil]) @processes.push([property, start_frame, duration, value, interpolation, nil, nil])
end end
def delete_processes(property)
@processes.delete_if { |process| process[0] == property }
end
# Sets sprite's initial For looping purposes. # Sets sprite's initial For looping purposes.
def reset_processes def reset_processes
initialize_values initialize_values

View File

@@ -4,9 +4,10 @@
module AnimationPlayer::Helper module AnimationPlayer::Helper
PROPERTIES_SET_BY_SPAWNER = { PROPERTIES_SET_BY_SPAWNER = {
:random_direction => [:x, :y], :random_direction => [:x, :y],
:random_direction_gravity => [:x, :y] :random_direction_gravity => [:x, :y],
:random_up_direction_gravity => [:x, :y]
} }
GRAVITY_STRENGTH = 300 GRAVITY_STRENGTH = 500
BATTLE_MESSAGE_BAR_HEIGHT = 96 # NOTE: You shouldn't need to change this. BATTLE_MESSAGE_BAR_HEIGHT = 96 # NOTE: You shouldn't need to change this.
module_function module_function
@@ -18,6 +19,10 @@ module AnimationPlayer::Helper
particle.each_pair do |property, value| particle.each_pair do |property, value|
next if !value.is_a?(Array) || value.empty? next if !value.is_a?(Array) || value.empty?
max = value.last[0] + value.last[1] # Keyframe + duration max = value.last[0] + value.last[1] # Keyframe + duration
# Particle spawners can delay their particles; account for this
if (particle[:spawner] || :none) != :none
max += get_particle_delay(particle, (particle[:spawn_quantity] || 1) - 1)
end
ret = max if ret < max ret = max if ret < max
end end
end end
@@ -51,7 +56,7 @@ module AnimationPlayer::Helper
# For spawner particles # For spawner particles
def get_particle_delay(particle, instance) def get_particle_delay(particle, instance)
case particle[:spawner] || :none case particle[:spawner] || :none
when :random_direction, :random_direction_gravity when :random_direction, :random_direction_gravity, :random_up_direction_gravity
return instance / 4 return instance / 4
end end
return 0 return 0

View File

@@ -25,11 +25,11 @@ Name = Essentials
MoveColorBlue = 1,1,0 MoveColorBlue = 1,1,0
MoveOpacity = 1,4,0 MoveOpacity = 1,4,0
SetVisible = 5,false SetVisible = 5,false
<Spark 1> <Spark spawner>
Graphic = Normal/Pound spark Graphic = Normal/Pound spark
Focus = Target Focus = Target
SetX = 0,-11 Spawner = RandomDirectionGravity
SetY = 0,-17 SpawnQuantity = 7
SetZ = 0,5 SetZ = 0,5
SetZoomX = 0,50 SetZoomX = 0,50
SetZoomY = 0,50 SetZoomY = 0,50
@@ -39,142 +39,11 @@ Name = Essentials
SetColorBlue = 0,128 SetColorBlue = 0,128
SetColorAlpha = 0,255 SetColorAlpha = 0,255
MoveOpacity = 0,1,255 MoveOpacity = 0,1,255
MoveX = 0,13,-94
MoveY = 0,13,-68,EaseOut
MoveZoomX = 4,9,0 MoveZoomX = 4,9,0
MoveZoomY = 4,9,0 MoveZoomY = 4,9,0
MoveOpacity = 4,9,0 MoveOpacity = 4,9,0
MoveColorGreen = 4,9,96,EaseOut MoveColorGreen = 4,9,96,EaseOut
MoveColorBlue = 4,9,32,EaseOut MoveColorBlue = 4,9,32,EaseOut
SetVisible = 13,false SetVisible = 13,false
<Spark 2>
Graphic = Normal/Pound spark
Focus = Target
SetX = 1,-3
SetY = 1,-24
SetZ = 1,5
SetZoomX = 1,50
SetZoomY = 1,50
SetOpacity = 1,0
SetColorRed = 1,248
SetColorGreen = 1,248
SetColorBlue = 1,128
SetColorAlpha = 1,255
MoveOpacity = 1,1,255
MoveX = 1,13,-40
MoveY = 1,13,-116,EaseOut
MoveZoomX = 5,9,0
MoveZoomY = 5,9,0
MoveOpacity = 5,9,0
MoveColorGreen = 5,9,96,EaseOut
MoveColorBlue = 5,9,32,EaseOut
<Spark 3>
Graphic = Normal/Pound spark
Focus = Target
SetX = 0,8
SetY = 0,-7
SetZ = 0,5
SetZoomX = 0,50
SetZoomY = 0,50
SetOpacity = 0,0
SetColorRed = 0,248
SetColorGreen = 0,248
SetColorBlue = 0,128
SetColorAlpha = 0,255
MoveOpacity = 0,1,255
MoveX = 0,13,14
MoveY = 0,13,-89,EaseOut
MoveZoomX = 4,9,0
MoveZoomY = 4,9,0
MoveOpacity = 4,9,0
MoveColorGreen = 4,9,96,EaseOut
MoveColorBlue = 4,9,32,EaseOut
SetVisible = 13,false
<Spark 4>
Graphic = Normal/Pound spark
Focus = Target
SetX = 1,7
SetY = 1,-6
SetZ = 1,5
SetZoomX = 1,50
SetZoomY = 1,50
SetOpacity = 1,0
SetColorRed = 1,248
SetColorGreen = 1,248
SetColorBlue = 1,128
SetColorAlpha = 1,255
MoveOpacity = 1,1,255
MoveX = 1,13,58
MoveY = 1,13,-108,EaseOut
MoveZoomX = 5,9,0
MoveZoomY = 5,9,0
MoveOpacity = 5,9,0
MoveColorGreen = 5,9,96,EaseOut
MoveColorBlue = 5,9,32,EaseOut
<Spark 5>
Graphic = Normal/Pound spark
Focus = Target
SetX = 0,25
SetY = 0,-4
SetZ = 0,5
SetZoomX = 0,50
SetZoomY = 0,50
SetOpacity = 0,0
SetColorRed = 0,248
SetColorGreen = 0,248
SetColorBlue = 0,128
SetColorAlpha = 0,255
MoveOpacity = 0,1,255
MoveX = 0,13,87
MoveY = 0,13,-9,EaseOut
MoveZoomX = 4,9,0
MoveZoomY = 4,9,0
MoveOpacity = 4,9,0
MoveColorGreen = 4,9,96,EaseOut
MoveColorBlue = 4,9,32,EaseOut
SetVisible = 13,false
<Spark 6>
Graphic = Normal/Pound spark
Focus = Target
SetX = 0,18
SetY = 0,-9
SetZ = 0,5
SetZoomX = 0,50
SetZoomY = 0,50
SetOpacity = 0,0
SetColorRed = 0,248
SetColorGreen = 0,248
SetColorBlue = 0,128
SetColorAlpha = 0,255
MoveOpacity = 0,1,255
MoveX = 0,13,115
MoveY = 0,13,-47,EaseOut
MoveZoomX = 4,9,0
MoveZoomY = 4,9,0
MoveOpacity = 4,9,0
MoveColorGreen = 4,9,96,EaseOut
MoveColorBlue = 4,9,32,EaseOut
SetVisible = 13,false
<Spark 7>
Graphic = Normal/Pound spark
Focus = Target
SetX = 1,-3
SetY = 1,-5
SetZ = 1,5
SetZoomX = 1,50
SetZoomY = 1,50
SetOpacity = 1,0
SetColorRed = 1,248
SetColorGreen = 1,248
SetColorBlue = 1,128
SetColorAlpha = 1,255
MoveOpacity = 1,1,255
MoveX = 1,13,-112
MoveY = 1,13,-26,EaseOut
MoveZoomX = 5,9,0
MoveZoomY = 5,9,0
MoveOpacity = 5,9,0
MoveColorGreen = 5,9,96,EaseOut
MoveColorBlue = 5,9,32,EaseOut
<SE> <SE>
Play = 0,Normal/Pound Play = 0,Normal/Pound

View File

@@ -56,11 +56,11 @@ Name = Essentials
SetColorAlpha = 2,255 SetColorAlpha = 2,255
MoveOpacity = 2,7,0 MoveOpacity = 2,7,0
SetVisible = 9,false SetVisible = 9,false
<Spark 1> <Spark spawner>
Graphic = Normal/Scratch spark Graphic = Normal/Scratch spark
Focus = Target Focus = Target
SetX = 0,-11 Spawner = RandomDirectionGravity
SetY = 0,-17 SpawnQuantity = 12
SetZ = 0,5 SetZ = 0,5
SetZoomX = 0,40 SetZoomX = 0,40
SetZoomY = 0,40 SetZoomY = 0,40
@@ -70,250 +70,11 @@ Name = Essentials
SetColorBlue = 0,128 SetColorBlue = 0,128
SetColorAlpha = 0,255 SetColorAlpha = 0,255
MoveOpacity = 0,1,255 MoveOpacity = 0,1,255
MoveX = 0,13,-57
MoveY = 0,13,-54,EaseOut
MoveZoomX = 4,9,0 MoveZoomX = 4,9,0
MoveZoomY = 4,9,0 MoveZoomY = 4,9,0
MoveOpacity = 4,9,0 MoveOpacity = 4,9,0
MoveColorGreen = 4,9,96,EaseOut MoveColorGreen = 4,9,96,EaseOut
MoveColorBlue = 4,9,32,EaseOut MoveColorBlue = 4,9,32,EaseOut
SetVisible = 13,false SetVisible = 13,false
<Spark 2>
Graphic = Normal/Scratch spark
Focus = Target
SetX = 1,-3
SetY = 1,-24
SetZ = 1,5
SetZoomX = 1,40
SetZoomY = 1,40
SetOpacity = 1,0
SetColorRed = 1,248
SetColorGreen = 1,248
SetColorBlue = 1,128
SetColorAlpha = 1,255
MoveOpacity = 1,1,255
MoveX = 1,13,-40
MoveY = 1,13,-116,EaseOut
MoveZoomX = 5,9,0
MoveZoomY = 5,9,0
MoveOpacity = 5,9,0
MoveColorGreen = 5,9,96,EaseOut
MoveColorBlue = 5,9,32,EaseOut
SetVisible = 14,false
<Spark 3>
Graphic = Normal/Scratch spark
Focus = Target
SetX = 2,8
SetY = 2,-7
SetZ = 2,5
SetZoomX = 2,40
SetZoomY = 2,40
SetOpacity = 2,0
SetColorRed = 2,248
SetColorGreen = 2,248
SetColorBlue = 2,128
SetColorAlpha = 2,255
MoveOpacity = 2,1,255
MoveX = 2,13,-1
MoveY = 2,13,-94,EaseOut
MoveZoomX = 6,9,0
MoveZoomY = 6,9,0
MoveOpacity = 6,9,0
MoveColorGreen = 6,9,96,EaseOut
MoveColorBlue = 6,9,32,EaseOut
<Spark 4>
Graphic = Normal/Scratch spark
Focus = Target
SetX = 1,7
SetY = 1,-6
SetZ = 1,5
SetZoomX = 1,40
SetZoomY = 1,40
SetOpacity = 1,0
SetColorRed = 1,248
SetColorGreen = 1,248
SetColorBlue = 1,128
SetColorAlpha = 1,255
MoveOpacity = 1,1,255
MoveX = 1,13,50
MoveY = 1,13,-106,EaseOut
MoveZoomX = 5,9,0
MoveZoomY = 5,9,0
MoveOpacity = 5,9,0
MoveColorGreen = 5,9,96,EaseOut
MoveColorBlue = 5,9,32,EaseOut
SetVisible = 14,false
<Spark 5>
Graphic = Normal/Scratch spark
Focus = Target
SetX = 2,25
SetY = 2,-4
SetZ = 2,5
SetZoomX = 2,40
SetZoomY = 2,40
SetOpacity = 2,0
SetColorRed = 2,248
SetColorGreen = 2,248
SetColorBlue = 2,128
SetColorAlpha = 2,255
MoveOpacity = 2,1,255
MoveX = 2,13,78
MoveY = 2,13,-28,EaseOut
MoveZoomX = 6,9,0
MoveZoomY = 6,9,0
MoveOpacity = 6,9,0
MoveColorGreen = 6,9,96,EaseOut
MoveColorBlue = 6,9,32,EaseOut
<Spark 6>
Graphic = Normal/Scratch spark
Focus = Target
SetX = 0,18
SetY = 0,-9
SetZ = 0,5
SetZoomX = 0,40
SetZoomY = 0,40
SetOpacity = 0,0
SetColorRed = 0,248
SetColorGreen = 0,248
SetColorBlue = 0,128
SetColorAlpha = 0,255
MoveOpacity = 0,1,255
MoveX = 0,13,117
MoveY = 0,13,-77,EaseOut
MoveZoomX = 4,9,0
MoveZoomY = 4,9,0
MoveOpacity = 4,9,0
MoveColorGreen = 4,9,96,EaseOut
MoveColorBlue = 4,9,32,EaseOut
SetVisible = 13,false
<Spark 7>
Graphic = Normal/Scratch spark
Focus = Target
SetX = 2,-3
SetY = 2,-5
SetZ = 2,5
SetZoomX = 2,40
SetZoomY = 2,40
SetOpacity = 2,0
SetColorRed = 2,248
SetColorGreen = 2,248
SetColorBlue = 2,128
SetColorAlpha = 2,255
MoveOpacity = 2,1,255
MoveX = 2,13,-112
MoveY = 2,13,-26,EaseOut
MoveZoomX = 6,9,0
MoveZoomY = 6,9,0
MoveOpacity = 6,9,0
MoveColorGreen = 6,9,96,EaseOut
MoveColorBlue = 6,9,32,EaseOut
<Spark 8>
Graphic = Normal/Scratch spark
Focus = Target
SetX = 0,21
SetY = 0,4
SetZ = 0,5
SetZoomX = 0,40
SetZoomY = 0,40
SetOpacity = 0,0
SetColorRed = 0,248
SetColorGreen = 0,248
SetColorBlue = 0,128
SetColorAlpha = 0,255
MoveOpacity = 0,1,255
MoveX = 0,13,93
MoveY = 0,13,40,EaseIn
MoveZoomX = 4,9,0
MoveZoomY = 4,9,0
MoveOpacity = 4,9,0
MoveColorGreen = 4,9,96,EaseOut
MoveColorBlue = 4,9,32,EaseOut
SetVisible = 13,false
<Spark 9>
Graphic = Normal/Scratch spark
Focus = Target
SetX = 2,-7
SetY = 2,4
SetZ = 2,5
SetZoomX = 2,40
SetZoomY = 2,40
SetOpacity = 2,0
SetColorRed = 2,248
SetColorGreen = 2,248
SetColorBlue = 2,128
SetColorAlpha = 2,255
MoveOpacity = 2,1,255
MoveX = 2,13,-63
MoveY = 2,13,43,EaseIn
MoveZoomX = 6,9,0
MoveZoomY = 6,9,0
MoveOpacity = 6,9,0
MoveColorGreen = 6,9,96,EaseOut
MoveColorBlue = 6,9,32,EaseOut
<Spark 10>
Graphic = Normal/Scratch spark
Focus = Target
SetX = 1,-1
SetY = 1,3
SetZ = 1,5
SetZoomX = 1,40
SetZoomY = 1,40
SetOpacity = 1,0
SetColorRed = 1,248
SetColorGreen = 1,248
SetColorBlue = 1,128
SetColorAlpha = 1,255
MoveOpacity = 1,1,255
MoveX = 1,13,47
MoveY = 1,13,58,EaseIn
MoveZoomX = 5,9,0
MoveZoomY = 5,9,0
MoveOpacity = 5,9,0
MoveColorGreen = 5,9,96,EaseOut
MoveColorBlue = 5,9,32,EaseOut
SetVisible = 14,false
<Spark 11>
Graphic = Normal/Scratch spark
Focus = Target
SetX = 0,10
SetY = 0,-4
SetZ = 0,5
SetZoomX = 0,40
SetZoomY = 0,40
SetOpacity = 0,0
SetColorRed = 0,248
SetColorGreen = 0,248
SetColorBlue = 0,128
SetColorAlpha = 0,255
MoveOpacity = 0,1,255
MoveX = 0,13,66
MoveY = 0,13,11,EaseIn
MoveZoomX = 4,9,0
MoveZoomY = 4,9,0
MoveOpacity = 4,9,0
MoveColorGreen = 4,9,96,EaseOut
MoveColorBlue = 4,9,32,EaseOut
SetVisible = 13,false
<Spark 12>
Graphic = Normal/Scratch spark
Focus = Target
SetX = 2,4
SetY = 2,-2
SetZ = 2,5
SetZoomX = 2,40
SetZoomY = 2,40
SetOpacity = 2,0
SetColorRed = 2,248
SetColorGreen = 2,248
SetColorBlue = 2,128
SetColorAlpha = 2,255
MoveOpacity = 2,1,255
MoveX = 2,13,8
MoveY = 2,13,80,EaseIn
MoveZoomX = 6,9,0
MoveZoomY = 6,9,0
MoveOpacity = 6,9,0
MoveColorGreen = 6,9,96,EaseOut
MoveColorBlue = 6,9,32,EaseOut
<SE> <SE>
Play = 0,Normal/Scratch Play = 0,Normal/Scratch

View File

@@ -43,11 +43,11 @@ Name = Essentials
MoveZoomY = 5,4,100 MoveZoomY = 5,4,100
MoveOpacity = 5,4,0 MoveOpacity = 5,4,0
SetVisible = 9,false SetVisible = 9,false
<Spark 1> <Spark spawner>
Graphic = Normal/Tackle spark Graphic = Normal/Tackle spark
Focus = Target Focus = Target
SetX = 4,-11 Spawner = RandomDirectionGravity
SetY = 4,-17 SpawnQuantity = 7
SetZ = 4,5 SetZ = 4,5
SetZoomX = 4,50 SetZoomX = 4,50
SetZoomY = 4,50 SetZoomY = 4,50
@@ -57,138 +57,11 @@ Name = Essentials
SetColorBlue = 4,128 SetColorBlue = 4,128
SetColorAlpha = 4,255 SetColorAlpha = 4,255
MoveOpacity = 4,1,255 MoveOpacity = 4,1,255
MoveX = 4,13,-102
MoveY = 4,13,-68,EaseOut
MoveZoomX = 8,9,0 MoveZoomX = 8,9,0
MoveZoomY = 8,9,0 MoveZoomY = 8,9,0
MoveOpacity = 8,9,0 MoveOpacity = 8,9,0
MoveColorGreen = 8,9,96,EaseOut MoveColorGreen = 8,9,96,EaseOut
MoveColorBlue = 8,9,32,EaseOut MoveColorBlue = 8,9,32,EaseOut
<Spark 2> SetVisible = 17,false
Graphic = Normal/Tackle spark
Focus = Target
SetX = 5,-3
SetY = 5,-24
SetZ = 5,5
SetZoomX = 5,50
SetZoomY = 5,50
SetOpacity = 5,0
SetColorRed = 5,248
SetColorGreen = 5,248
SetColorBlue = 5,128
SetColorAlpha = 5,255
MoveOpacity = 5,1,255
MoveX = 5,13,-40
MoveY = 5,13,-116,EaseOut
MoveZoomX = 9,9,0
MoveZoomY = 9,9,0
MoveOpacity = 9,9,0
MoveColorGreen = 9,9,96,EaseOut
MoveColorBlue = 9,9,32,EaseOut
<Spark 3>
Graphic = Normal/Tackle spark
Focus = Target
SetX = 4,8
SetY = 4,-7
SetZ = 4,5
SetZoomX = 4,50
SetZoomY = 4,50
SetOpacity = 4,0
SetColorRed = 4,248
SetColorGreen = 4,248
SetColorBlue = 4,128
SetColorAlpha = 4,255
MoveOpacity = 4,1,255
MoveX = 4,13,-1
MoveY = 4,13,-94,EaseOut
MoveZoomX = 8,9,0
MoveZoomY = 8,9,0
MoveOpacity = 8,9,0
MoveColorGreen = 8,9,96,EaseOut
MoveColorBlue = 8,9,32,EaseOut
<Spark 4>
Graphic = Normal/Tackle spark
Focus = Target
SetX = 5,7
SetY = 5,-6
SetZ = 5,5
SetZoomX = 5,50
SetZoomY = 5,50
SetOpacity = 5,0
SetColorRed = 5,248
SetColorGreen = 5,248
SetColorBlue = 5,128
SetColorAlpha = 5,255
MoveOpacity = 5,1,255
MoveX = 5,13,50
MoveY = 5,13,-106,EaseOut
MoveZoomX = 9,9,0
MoveZoomY = 9,9,0
MoveOpacity = 9,9,0
MoveColorGreen = 9,9,96,EaseOut
MoveColorBlue = 9,9,32,EaseOut
<Spark 5>
Graphic = Normal/Tackle spark
Focus = Target
SetX = 4,25
SetY = 4,-4
SetZ = 4,5
SetZoomX = 4,50
SetZoomY = 4,50
SetOpacity = 4,0
SetColorRed = 4,248
SetColorGreen = 4,248
SetColorBlue = 4,128
SetColorAlpha = 4,255
MoveOpacity = 4,1,255
MoveX = 4,13,78
MoveY = 4,13,-28,EaseOut
MoveZoomX = 8,9,0
MoveZoomY = 8,9,0
MoveOpacity = 8,9,0
MoveColorGreen = 8,9,96,EaseOut
MoveColorBlue = 8,9,32,EaseOut
<Spark 6>
Graphic = Normal/Tackle spark
Focus = Target
SetX = 4,18
SetY = 4,-9
SetZ = 4,5
SetZoomX = 4,50
SetZoomY = 4,50
SetOpacity = 4,0
SetColorRed = 4,248
SetColorGreen = 4,248
SetColorBlue = 4,128
SetColorAlpha = 4,255
MoveOpacity = 4,1,255
MoveX = 4,13,117
MoveY = 4,13,-77,EaseOut
MoveZoomX = 8,9,0
MoveZoomY = 8,9,0
MoveOpacity = 8,9,0
MoveColorGreen = 8,9,96,EaseOut
MoveColorBlue = 8,9,32,EaseOut
<Spark 7>
Graphic = Normal/Tackle spark
Focus = Target
SetX = 5,-3
SetY = 5,-5
SetZ = 5,5
SetZoomX = 5,50
SetZoomY = 5,50
SetOpacity = 5,0
SetColorRed = 5,248
SetColorGreen = 5,248
SetColorBlue = 5,128
SetColorAlpha = 5,255
MoveOpacity = 5,1,255
MoveX = 5,13,-112
MoveY = 5,13,-26,EaseOut
MoveZoomX = 9,9,0
MoveZoomY = 9,9,0
MoveOpacity = 9,9,0
MoveColorGreen = 9,9,96,EaseOut
MoveColorBlue = 9,9,32,EaseOut
<SE> <SE>
Play = 4,Normal/Tackle Play = 4,Normal/Tackle