1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
| # Animation Partout v1.3 par Zeus81
#
# Faire insérer un script et écrire :
# $game_temp.animations << [id, hit, x, y, screen]
# id = Id de l'animation.
# hit = Animation Touché ou Manqué (Voir les réglages des animations).
# Pour Touché -> hit = true
# Pour Manqué -> hit = false
# x et y = Position ou sera affichée l'animation.
# On peux mettre des nombres décimaux pour plus de précision.
# screen = true pour considérer la position en pixels par rapport à l'écran.
# false pour la considérer en carreaux par rapport à la map.
# Exemple :
# $game_temp.animations << [1, true, 14, 7, false]
# Note :
# Dans les animations seuls les "Flash" sur l'écran seront visible,
# pas ceux sur la cible (forcement vu qu'il n'y en a pas).
# La portée de l'animation "Haut", "Milieu", "Bas" ne changera rien
# à sa position et si c'est "Ecran", ce sera comme si l'animation
# était faite sur n'importe quel évènement.
# Les animations s'affichent uniquement quand on est sur la map.
class Game_Temp
attr_accessor :animations
alias zeus81_animation_partout_game_temp_initialize initialize
def initialize
zeus81_animation_partout_game_temp_initialize
@animations = []
end
end
class Spriteset_Map
alias zeus81_animation_partout_spriteset_map_initialize initialize
def initialize
@animations_sprites = []
zeus81_animation_partout_spriteset_map_initialize
end
alias zeus81_animation_partout_spriteset_map_dispose dispose
def dispose
@animations_sprites.each {|sprite| sprite.dispose}
zeus81_animation_partout_spriteset_map_dispose
end
alias zeus81_animation_partout_spriteset_map_update update
def update
$game_temp.animations.each {|data| @animations_sprites << Sprite_Animation.new(@viewport3, *data)}
$game_temp.animations.clear
@animations_sprites.each {|sprite| sprite.update}
@animations_sprites.delete_if {|sprite| sprite.disposed?}
zeus81_animation_partout_spriteset_map_update
end
end
class Sprite_Animation
def initialize(viewport, animation, hit, x, y, screen=false)
return unless @animation = $data_animations[animation]
@viewport, @hit, @x, @y, @screen, @frame, @sprites, @bitmap =
viewport, hit, x, y, screen, -1, [],
RPG::Cache.animation(@animation.animation_name, @animation.animation_hue)
end
def dispose
@sprites.each {|sprite| sprite.dispose} if @sprites
@sprites = @animation = nil
end
def disposed?() !@animation end
def update
return unless @animation and Graphics.frame_count % 2 == 0
if (@frame += 1) < @animation.frame_max
if @animation.position == 3
x, y = @viewport.rect.width/2, @viewport.rect.height/2
elsif @screen
x, y = @x, @y
else
x, y = (@x*128-$game_map.display_x+3)/4+16, (@y*128-$game_map.display_y+3)/4
end
sprite_count, cell_data = -1, @animation.frames[@frame].cell_data
@sprites.each {|sprite| sprite.visible = false}
16.times do |i|
next unless pattern = cell_data[i, 0] and pattern != -1
@sprites << Sprite.new(@viewport) unless @sprites[sprite_count+=1]
sprite = @sprites[sprite_count]
sprite.bitmap = @bitmap
sprite.src_rect.set(pattern%5*192, pattern/5*192, 192, 192)
sprite.x = x + cell_data[i, 1]
sprite.y = y + cell_data[i, 2]
sprite.z = 2000
sprite.ox = sprite.oy = 96
sprite.zoom_x = sprite.zoom_y = cell_data[i, 3] / 100.0
sprite.angle = cell_data[i, 4]
sprite.mirror = (cell_data[i, 5] == 1)
sprite.opacity = cell_data[i, 6]
sprite.blend_type = cell_data[i, 7]
sprite.visible = true
end
for timing in @animation.timings
if timing.frame == @frame and (timing.condition == 0 or @hit == (timing.condition == 1))
$game_system.se_play(timing.se)
@viewport.flash(timing.flash_color, timing.flash_duration*2) if timing.flash_scope == 2
end
end
else dispose
end
end
end |