Bienvenue visiteur !
|
Statistiques
Liste des membres
Contact
Mentions légales
347 connectés actuellement
30732289 visiteurs depuis l'ouverture
2267 visiteurs aujourd'hui
Partenaires
Tous nos partenaires
Devenir partenaire
|
❤ 0 Auteur : zou & NanakyTim
Logiciel : RPG Maker XP
Nombre de scripts : 1
Voici un script pour RMXP que j'ai réalisé, il permet d'afficher une animation à la surface de l'eau de façon aléatoire lorsqu'il pleut afin d'ajouter une touche de réalisme. L'effet est automatique et s'adapte à l'intensité de la météo.
L'animation s'applique sur les surfaces avec pour numéro de terrain 7 (configurable).
Il vous faut télécharger l'image suivante (par loly74) :
Ou l'ancienne version (non recommandée) :
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
| #==============================================================================
# ** Sprite_Rain par zou, édité par NanakyTim
# Version 2.0
#------------------------------------------------------------------------------
# Log :
# - remplacement des réécritures par des alias
# - suppression des modifications apportées aux autres effets météo natifs.
# - deux nouvelles valeurs configurables de terrain.
#------------------------------------------------------------------------------
# Ce script permet d'afficher un effet de pluie à la surface de l'eau
#
# Il vous suffit de configurer l'eau en lui attribuant un terrain.
# Vous pouvez définir jusqu'à 3 terrains (sur 8).
# Si vous souhaitez n'en utiliser qu'un seul,
# mettez la même valeur pour chaque "terrain_tag".
#==============================================================================
class Sprite_Rain < Sprite
TERRAIN_TAG = 7 # Terrain où l'effet sera affiché pendant la pluie
TERRAIN_TAG_2 = 7 # Terrain où l'effet sera affiché pendant la pluie
TERRAIN_TAG_3 = 7 # Terrain où l'effet sera affiché pendant la pluie
# Ce script nécessite une image "Picture" nommée "wave".
# L'image doit être de dimensions 20x18 pixels.
# Si vous n'avez pas téléchargé cette image ou ne savez pas où la trouver :
# http://img96.xooimage.com/files/c/d/d/wave-401339a.png
# par loly74
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(viewport)
super(viewport)
self.bitmap = Bitmap.new(640,480)
@waves = []
end
#--------------------------------------------------------------------------
# * Dispose
#--------------------------------------------------------------------------
def dispose
if self.bitmap != nil
self.bitmap.dispose
end
super
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
super
self.bitmap.clear
return if $game_screen.weather_max == 0 or $game_screen.weather_type == 3
x = $game_map.display_x/128
y = $game_map.display_y/128
for i in x...x+20
for j in y...y+15
if $game_map.terrain_tag(i,j) == TERRAIN_TAG or
$game_map.terrain_tag(i,j) == TERRAIN_TAG_2 or
$game_map.terrain_tag(i,j) == TERRAIN_TAG_3
r = rand(1000)
if r < $game_screen.weather_max/2
x2 = 32*i + 12 + r/5
y2 = 32*j + 12 + r/5
down = $game_map.terrain_tag(i,j+1) != TERRAIN_TAG && $game_map.terrain_tag(i,j+1) != TERRAIN_TAG_2 && $game_map.terrain_tag(i,j+1) != TERRAIN_TAG_3
up = $game_map.terrain_tag(i,j-1) != TERRAIN_TAG && $game_map.terrain_tag(i,j+1) != TERRAIN_TAG_2 && $game_map.terrain_tag(i,j+1) != TERRAIN_TAG_3
next if up and down
y2 -= 16 if down
y2 += 4 if up
@waves.push(Wave.new(x2,y2))
end
end
end
end
for i in 0...@waves.size
@waves[i].life += 1
life = @waves[i].life
if life == 10
@waves[i] = nil
else
rect = Rect.new(@waves[i].x-$game_map.display_x/4-life/2, @waves[i].y-$game_map.display_y/4-life/2, 5+life,5+life)
self.bitmap.stretch_blt(rect, RPG::Cache.picture("wave"), Rect.new(0,0,20,18),255-25*life)
end
end
@waves.compact!
end
end
#==============================================================================
# ** Wave
#==============================================================================
class Wave
attr_accessor :life, :x, :y
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(x,y)
@life = 0
@x = x
@y = y
end
end
class Spriteset_Map
alias rain_water_effect_initialize initialize
def initialize
@rain = Sprite_Rain.new(@viewport1)
rain_water_effect_initialize
@rain = Sprite_Rain.new(@viewport1)
end
alias rain_water_effect_dispose dispose
def dispose
@rain.dispose
rain_water_effect_dispose
end
alias rain_water_effect_update update
def update
@rain.update
rain_water_effect_update
end
end |
Version 1.0 (archive)
Spoiler (cliquez pour afficher)
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
| #==============================================================================
# ** Sprite_Rain
# Par zou
# Version 1.0
#------------------------------------------------------------------------------
# This sprite is used to display animations at the water's surface during
# raining.
#==============================================================================
class Sprite_Rain < Sprite
TERRAIN_TAG = 1 # Choose the terrain tag
# This scipt need a picture named "wave" 20x18
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(viewport)
super(viewport)
self.bitmap = Bitmap.new(640,480)
@waves = []
end
#--------------------------------------------------------------------------
# * Dispose
#--------------------------------------------------------------------------
def dispose
if self.bitmap != nil
self.bitmap.dispose
end
super
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
super
self.bitmap.clear
return if $game_screen.weather_max == 0 or $game_screen.weather_type == 3
x = $game_map.display_x/128
y = $game_map.display_y/128
for i in x...x+20
for j in y...y+15
if $game_map.terrain_tag(i,j) == TERRAIN_TAG
r = rand(1000)
if r < $game_screen.weather_max/2
x2 = 32*i + 12 + r/5
y2 = 32*j + 12 + r/5
down = $game_map.terrain_tag(i,j+1) != TERRAIN_TAG
up = $game_map.terrain_tag(i,j-1) != TERRAIN_TAG
next if up and down
y2 -= 16 if down
y2 += 4 if up
@waves.push(Wave.new(x2,y2))
end
end
end
end
for i in 0...@waves.size
@waves[i].life += 1
life = @waves[i].life
if life == 10
@waves[i] = nil
else
rect = Rect.new(@waves[i].x-$game_map.display_x/4-life/2, @waves[i].y-$game_map.display_y/4-life/2, 5+life,5+life)
self.bitmap.stretch_blt(rect, RPG::Cache.picture("wave"), Rect.new(0,0,20,18),255-25*life)
end
end
@waves.compact!
end
end
#==============================================================================
# ** Wave
#==============================================================================
class Wave
attr_accessor :life, :x, :y
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(x,y)
@life = 0
@x = x
@y = y
end
end
module RPG
class Weather
def initialize(viewport = nil)
@type = 0
@max = 0
@ox = 0
@oy = 0
color1 = Color.new(200, 200, 255, 255)
color2 = Color.new(255, 255, 255, 128)
@rain_bitmap = Bitmap.new(2, 8)
@rain_bitmap.fill_rect(0, 4, 1, 4, color1)
@rain_bitmap.fill_rect(1, 0, 1, 4, color1)
@storm_bitmap = Bitmap.new(3, 12)
@storm_bitmap.fill_rect(2, 0, 1, 4, color2)
@storm_bitmap.fill_rect(1, 4, 1, 4, color1)
@storm_bitmap.fill_rect(0, 8, 1, 4, color2)
@snow_bitmap = Bitmap.new(4, 4)
@snow_bitmap.fill_rect(0, 1, 4, 2, color2)
@snow_bitmap.fill_rect(1, 0, 2, 4, color2)
@snow_bitmap.fill_rect(1, 1, 2, 2, color1)
@sprites = []
for i in 1..40
sprite = Sprite.new(viewport)
sprite.z = 1000
sprite.visible = false
sprite.opacity = 0
@sprites.push(sprite)
end
end
def update
return if @type == 0
for i in 1..@max
sprite = @sprites[i]
if sprite == nil
break
end
if @type == 1
sprite.x -= 2
sprite.y += 20
sprite.opacity -= 8
end
if @type == 2
sprite.x -= 5
sprite.y += 16
sprite.opacity -= 12
end
if @type == 3
sprite.x -= 1
sprite.y += 6
sprite.opacity -= 3
end
x = sprite.x - @ox
y = sprite.y - @oy
if sprite.opacity < 64 or x < -50 or x > 750 or y < -300 or y > 500
sprite.x = rand(800) - 50 + @ox
sprite.y = rand(800) - 200 + @oy
sprite.opacity = 255
end
end
end
end
end
#==============================================================================
# ** Spriteset_Map
#------------------------------------------------------------------------------
# This class brings together map screen sprites, tilemaps, etc.
# It's used within the Scene_Map class.
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
# Make viewports
@viewport1 = Viewport.new(0, 0, 640, 480)
@viewport2 = Viewport.new(0, 0, 640, 480)
@viewport3 = Viewport.new(0, 0, 640, 480)
@viewport2.z = 200
@viewport3.z = 5000
# Make tilemap
@tilemap = Tilemap.new(@viewport1)
@tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
for i in 0..6
autotile_name = $game_map.autotile_names[i]
@tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
end
@tilemap.map_data = $game_map.data
@tilemap.priorities = $game_map.priorities
# Make panorama plane
@panorama = Plane.new(@viewport1)
@panorama.z = -1000
# Make fog plane
@fog = Plane.new(@viewport1)
@fog.z = 3000
# Make rain bitmap
@rain = Sprite_Rain.new(@viewport1)
@rain.z = 0
# Make character sprites
@character_sprites = []
for i in $game_map.events.keys.sort
sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
@character_sprites.push(sprite)
end
@character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
# Make weather
@weather = RPG::Weather.new(@viewport1)
# Make picture sprites
@picture_sprites = []
for i in 1..50
@picture_sprites.push(Sprite_Picture.new(@viewport2,
$game_screen.pictures[i]))
end
# Make timer sprite
@timer_sprite = Sprite_Timer.new
# Frame update
update
end
#--------------------------------------------------------------------------
# * Dispose
#--------------------------------------------------------------------------
def dispose
# Dispose of tilemap
@tilemap.tileset.dispose
for i in 0..6
@tilemap.autotiles[i].dispose
end
@tilemap.dispose
# Dispose of panorama plane
@panorama.dispose
# Dispose of fog plane
@fog.dispose
# Dispose of rain bitmap
@rain.dispose
# Dispose of character sprites
for sprite in @character_sprites
sprite.dispose
end
# Dispose of weather
@weather.dispose
# Dispose of picture sprites
for sprite in @picture_sprites
sprite.dispose
end
# Dispose of timer sprite
@timer_sprite.dispose
# Dispose of viewports
@viewport1.dispose
@viewport2.dispose
@viewport3.dispose
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# If panorama is different from current one
if @panorama_name != $game_map.panorama_name or
@panorama_hue != $game_map.panorama_hue
@panorama_name = $game_map.panorama_name
@panorama_hue = $game_map.panorama_hue
if @panorama.bitmap != nil
@panorama.bitmap.dispose
@panorama.bitmap = nil
end
if @panorama_name != ""
@panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
end
Graphics.frame_reset
end
# If fog is different than current fog
if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue
@fog_name = $game_map.fog_name
@fog_hue = $game_map.fog_hue
if @fog.bitmap != nil
@fog.bitmap.dispose
@fog.bitmap = nil
end
if @fog_name != ""
@fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
end
Graphics.frame_reset
end
# Update rain
@rain.update
# Update tilemap
@tilemap.ox = $game_map.display_x / 4
@tilemap.oy = $game_map.display_y / 4
@tilemap.update
# Update panorama plane
@panorama.ox = $game_map.display_x / 8
@panorama.oy = $game_map.display_y / 8
# Update fog plane
@fog.zoom_x = $game_map.fog_zoom / 100.0
@fog.zoom_y = $game_map.fog_zoom / 100.0
@fog.opacity = $game_map.fog_opacity
@fog.blend_type = $game_map.fog_blend_type
@fog.ox = $game_map.display_x / 4 + $game_map.fog_ox
@fog.oy = $game_map.display_y / 4 + $game_map.fog_oy
@fog.tone = $game_map.fog_tone
# Update character sprites
for sprite in @character_sprites
sprite.update
end
# Update weather graphic
@weather.type = $game_screen.weather_type
@weather.max = $game_screen.weather_max
@weather.ox = $game_map.display_x / 4
@weather.oy = $game_map.display_y / 4
@weather.update
# Update picture sprites
for sprite in @picture_sprites
sprite.update
end
# Update timer sprite
@timer_sprite.update
# Set screen color tone and shake position
@viewport1.tone = $game_screen.tone
@viewport1.ox = $game_screen.shake
# Set screen flash color
@viewport3.color = $game_screen.flash_color
# Update viewports
@viewport1.update
@viewport3.update
end
end |
Mis à jour le 21 octobre 2020.
|
loly74 -
posté le 07/08/2013 à 19:42:48 (861 messages postés)
- | Ex Couteau Suisse Agréé | Le script fonctionne normalement
Ce script ne fonctionne pas avec la météo : neige
vous pouvez configurer l'ID du terrain à la ligne 9 du script:
Je vous conseille l'ID 7 pour être compatible avec l'AMSU de Zeus.
Je n'arrive pas à enregistrer ton image, Zou :/, je ne sais pas si c'est le cas de tout le monde...
voici ma version:
à placer dans le dossier picture avec le nom "wave".
si vous voulez modifier l'image, ne faites pas le O plus gros que le mien, au risque de voir des C en jeu.
voilà! Nice Script
|
Travaille actuellement sur Roadelicious | Mes Musiques! | Anciens projets : Sylvan Melody, Terkass |Le making, c'est réaliser le meilleur jeu du monde... à vos yeux."Les RTP c'est quand même très limité. Quand on réalise un jeu, on réalise un univers qui va avec, et cet univers il passe beaucoup par les graphismes, et l'identité qu'on leur donne." |
Troma -
posté le 08/08/2013 à 01:09:59 (6392 messages postés)
| Je procrastine | Hop ! Super , j'utilise.
Merci.
|
ꀎꀎꀎꀎꀎꀎꀎ |
zou -
posté le 08/08/2013 à 11:13:42 (2197 messages postés)
| | Merci Loly pour la petite description supplémentaire
Oui c'est fait exprès pour la neige ^^
|
loly74 -
posté le 08/08/2013 à 21:29:48 (861 messages postés)
- | Ex Couteau Suisse Agréé | Attention: Le script n'est pas compatible avec le script d'ombres et lumières de Zeus!
Sûrement parce qu'ils fonctionnent de la même manière.
|
Travaille actuellement sur Roadelicious | Mes Musiques! | Anciens projets : Sylvan Melody, Terkass |Le making, c'est réaliser le meilleur jeu du monde... à vos yeux."Les RTP c'est quand même très limité. Quand on réalise un jeu, on réalise un univers qui va avec, et cet univers il passe beaucoup par les graphismes, et l'identité qu'on leur donne." |
zou -
posté le 09/08/2013 à 00:09:56 (2197 messages postés)
| | Ah c'est du au fait que j'ai pas mis d'alias dans Spritset_Map :/
Je peux corriger ça, sinon j'ai fait un script de gestion des lumières compatible et très simple d'utilisation pour XP : http://www.rpg-maker.fr/index.php?page=forum&id=22475
|
loly74 -
posté le 09/08/2013 à 00:50:22 (861 messages postés)
- | Ex Couteau Suisse Agréé | Ah c'est intéressant, ça. Mais bon, J'ai déjà le script de Zeus que j'utilise sur mon projet. par contre, si tu veux faire un script de gestion du soleil avec les ombres qui bougent, ça m'interesse.
|
Travaille actuellement sur Roadelicious | Mes Musiques! | Anciens projets : Sylvan Melody, Terkass |Le making, c'est réaliser le meilleur jeu du monde... à vos yeux."Les RTP c'est quand même très limité. Quand on réalise un jeu, on réalise un univers qui va avec, et cet univers il passe beaucoup par les graphismes, et l'identité qu'on leur donne." |
zou -
posté le 09/08/2013 à 21:51:01 (2197 messages postés)
| | oulaa, ça devient hyper complexe, c'est possible que dans un jeu en 3D
|
Zadé -
posté le 02/06/2014 à 01:04:25 (16 messages postés)
| | Avec ça c'est sure que les effets météos seront plus realistes.
avec les explications de loly74 on comprend qu'on peut aussi personnaliser ces effets .
|
Max180 -
posté le 19/03/2020 à 18:26:38 (8 messages postés)
| ... | Coucou,
enfin un script cool qui marche !!!
Merci beaucoup !
Cordialement
|
Rituit Maxime |
NanakyTim -
posté le 06/07/2020 à 19:48:04 (23817 messages postés)
| | Excellent script.
Néanmoins, il réécrivait totalement les classes "Spriteset_Map" et "Weather" ce qui le rendait incompatible avec une grande majorité de scripts. J'ai corrigé le problème avec des alias.
J'ai également :
- effacé les modifications des effets météo natifs (pour ne pas les forcer au sein de ce script).
- Ajouter deux nouvelles valeurs configurables de terrain. On peut donc l'afficher sur 3 terrains au total (contre 1 auparavant).
- défini la valeur de terrain par défaut à "7" pour le rendre nativement compatible avec l'AMS Ultimate.
- ajouté l'image de loly74 dans la description du script pour ceux qui ne savent pas où la récupérer (au cas où).
Pour que Gaga ne pleure pas, l'ancienne version buggée :
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
| #==============================================================================
# ** Sprite_Rain
# Par zou
# Version 1.0
#------------------------------------------------------------------------------
# This sprite is used to display animations at the water's surface during
# raining.
#==============================================================================
class Sprite_Rain < Sprite
TERRAIN_TAG = 1 # Choose the terrain tag
# This scipt need a picture named "wave" 20x18
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(viewport)
super(viewport)
self.bitmap = Bitmap.new(640,480)
@waves = []
end
#--------------------------------------------------------------------------
# * Dispose
#--------------------------------------------------------------------------
def dispose
if self.bitmap != nil
self.bitmap.dispose
end
super
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
super
self.bitmap.clear
return if $game_screen.weather_max == 0 or $game_screen.weather_type == 3
x = $game_map.display_x/128
y = $game_map.display_y/128
for i in x...x+20
for j in y...y+15
if $game_map.terrain_tag(i,j) == TERRAIN_TAG
r = rand(1000)
if r < $game_screen.weather_max/2
x2 = 32*i + 12 + r/5
y2 = 32*j + 12 + r/5
down = $game_map.terrain_tag(i,j+1) != TERRAIN_TAG
up = $game_map.terrain_tag(i,j-1) != TERRAIN_TAG
next if up and down
y2 -= 16 if down
y2 += 4 if up
@waves.push(Wave.new(x2,y2))
end
end
end
end
for i in 0...@waves.size
@waves<i>.life += 1
life = @waves<i>.life
if life == 10
@waves<i> = nil
else
rect = Rect.new(@waves<i>.x-$game_map.display_x/4-life/2, @waves<i>.y-$game_map.display_y/4-life/2, 5+life,5+life)
self.bitmap.stretch_blt(rect, RPG::Cache.picture("wave"), Rect.new(0,0,20,18),255-25*life)
end
end
@waves.compact!
end
end
#==============================================================================
# ** Wave
#==============================================================================
class Wave
attr_accessor :life, :x, :y
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(x,y)
@life = 0
@x = x
@y = y
end
end
module RPG
class Weather
def initialize(viewport = nil)
@type = 0
@max = 0
@ox = 0
@oy = 0
color1 = Color.new(200, 200, 255, 255)
color2 = Color.new(255, 255, 255, 128)
@rain_bitmap = Bitmap.new(2, 8)
@rain_bitmap.fill_rect(0, 4, 1, 4, color1)
@rain_bitmap.fill_rect(1, 0, 1, 4, color1)
@storm_bitmap = Bitmap.new(3, 12)
@storm_bitmap.fill_rect(2, 0, 1, 4, color2)
@storm_bitmap.fill_rect(1, 4, 1, 4, color1)
@storm_bitmap.fill_rect(0, 8, 1, 4, color2)
@snow_bitmap = Bitmap.new(4, 4)
@snow_bitmap.fill_rect(0, 1, 4, 2, color2)
@snow_bitmap.fill_rect(1, 0, 2, 4, color2)
@snow_bitmap.fill_rect(1, 1, 2, 2, color1)
@sprites = []
for i in 1..40
sprite = Sprite.new(viewport)
sprite.z = 1000
sprite.visible = false
sprite.opacity = 0
@sprites.push(sprite)
end
end
def update
return if @type == 0
for i in 1..@max
sprite = @sprites<i>
if sprite == nil
break
end
if @type == 1
sprite.x -= 2
sprite.y += 20
sprite.opacity -= 8
end
if @type == 2
sprite.x -= 5
sprite.y += 16
sprite.opacity -= 12
end
if @type == 3
sprite.x -= 1
sprite.y += 6
sprite.opacity -= 3
end
x = sprite.x - @ox
y = sprite.y - @oy
if sprite.opacity < 64 or x < -50 or x > 750 or y < -300 or y > 500
sprite.x = rand(800) - 50 + @ox
sprite.y = rand(800) - 200 + @oy
sprite.opacity = 255
end
end
end
end
end
#==============================================================================
# ** Spriteset_Map
#------------------------------------------------------------------------------
# This class brings together map screen sprites, tilemaps, etc.
# It's used within the Scene_Map class.
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
# Make viewports
@viewport1 = Viewport.new(0, 0, 640, 480)
@viewport2 = Viewport.new(0, 0, 640, 480)
@viewport3 = Viewport.new(0, 0, 640, 480)
@viewport2.z = 200
@viewport3.z = 5000
# Make tilemap
@tilemap = Tilemap.new(@viewport1)
@tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
for i in 0..6
autotile_name = $game_map.autotile_names<i>
@tilemap.autotiles<i> = RPG::Cache.autotile(autotile_name)
end
@tilemap.map_data = $game_map.data
@tilemap.priorities = $game_map.priorities
# Make panorama plane
@panorama = Plane.new(@viewport1)
@panorama.z = -1000
# Make fog plane
@fog = Plane.new(@viewport1)
@fog.z = 3000
# Make rain bitmap
@rain = Sprite_Rain.new(@viewport1)
@rain.z = 0
# Make character sprites
@character_sprites = []
for i in $game_map.events.keys.sort
sprite = Sprite_Character.new(@viewport1, $game_map.events<i>)
@character_sprites.push(sprite)
end
@character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
# Make weather
@weather = RPG::Weather.new(@viewport1)
# Make picture sprites
@picture_sprites = []
for i in 1..50
@picture_sprites.push(Sprite_Picture.new(@viewport2,
$game_screen.pictures<i>))
end
# Make timer sprite
@timer_sprite = Sprite_Timer.new
# Frame update
update
end
#--------------------------------------------------------------------------
# * Dispose
#--------------------------------------------------------------------------
def dispose
# Dispose of tilemap
@tilemap.tileset.dispose
for i in 0..6
@tilemap.autotiles<i>.dispose
end
@tilemap.dispose
# Dispose of panorama plane
@panorama.dispose
# Dispose of fog plane
@fog.dispose
# Dispose of rain bitmap
@rain.dispose
# Dispose of character sprites
for sprite in @character_sprites
sprite.dispose
end
# Dispose of weather
@weather.dispose
# Dispose of picture sprites
for sprite in @picture_sprites
sprite.dispose
end
# Dispose of timer sprite
@timer_sprite.dispose
# Dispose of viewports
@viewport1.dispose
@viewport2.dispose
@viewport3.dispose
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# If panorama is different from current one
if @panorama_name != $game_map.panorama_name or
@panorama_hue != $game_map.panorama_hue
@panorama_name = $game_map.panorama_name
@panorama_hue = $game_map.panorama_hue
if @panorama.bitmap != nil
@panorama.bitmap.dispose
@panorama.bitmap = nil
end
if @panorama_name != ""
@panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
end
Graphics.frame_reset
end
# If fog is different than current fog
if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue
@fog_name = $game_map.fog_name
@fog_hue = $game_map.fog_hue
if @fog.bitmap != nil
@fog.bitmap.dispose
@fog.bitmap = nil
end
if @fog_name != ""
@fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
end
Graphics.frame_reset
end
# Update rain
@rain.update
# Update tilemap
@tilemap.ox = $game_map.display_x / 4
@tilemap.oy = $game_map.display_y / 4
@tilemap.update
# Update panorama plane
@panorama.ox = $game_map.display_x / 8
@panorama.oy = $game_map.display_y / 8
# Update fog plane
@fog.zoom_x = $game_map.fog_zoom / 100.0
@fog.zoom_y = $game_map.fog_zoom / 100.0
@fog.opacity = $game_map.fog_opacity
@fog.blend_type = $game_map.fog_blend_type
@fog.ox = $game_map.display_x / 4 + $game_map.fog_ox
@fog.oy = $game_map.display_y / 4 + $game_map.fog_oy
@fog.tone = $game_map.fog_tone
# Update character sprites
for sprite in @character_sprites
sprite.update
end
# Update weather graphic
@weather.type = $game_screen.weather_type
@weather.max = $game_screen.weather_max
@weather.ox = $game_map.display_x / 4
@weather.oy = $game_map.display_y / 4
@weather.update
# Update picture sprites
for sprite in @picture_sprites
sprite.update
end
# Update timer sprite
@timer_sprite.update
# Set screen color tone and shake position
@viewport1.tone = $game_screen.tone
@viewport1.ox = $game_screen.shake
# Set screen flash color
@viewport3.color = $game_screen.flash_color
# Update viewports
@viewport1.update
@viewport3.update
end
end
|
Ne pas utiliser (sauf si vous aimez les bugs de compatibilité). Préférez la version tout en haut !
|
Héros ou Fléau ? Devenez le Roi de Quineroy ! ~ Plongez dans l'univers sombre du Darkans ! ~ Dimens Reis... Allez y faire un tour. ~ Rangez votre chambre ! ~ Avez-vous peur du noir ? ~ Sauvez le futur, en allant dans le passé: BOCALATOR... | |
|
|