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
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
| #=============================================
# Script créé par Corbaque
#---------------------------------------------
# Modification du menu titre,
# Les mouvements circulaires sont réglés pour
# Trois Eléments, ci vous en voulez plus,
# Contactez moi : http://snakerpgmxp.free.fr
# Ce script peut circuler librement sur le web
# Tant que je (Corbaque) suis cité.
#=============================================
# ¤ Définition du nom de la scène
class Scene_Title
# * à l'initialisation
def initialize
# - définition de variables locale :
# Sprites (images)
@a = Choix_1.new
@a.x = -200
@b = Choix_2.new
@b.x = -200
@c = Choix_3.new
@c.x = -200
@a.opacity = 200
@t = Titre.new
@t.x = 220
@t.y = 190
@t.opacity = 200
# chaine de caractères
@dir = nil
# numérique
@i = 0
$index = 0
@memory = 0
@premier = 0
# switch
@continuer = false
# fin de la fonction
end
# à l'appelle du script
def main
# Appelle la fonction battle_test lors du test du combat
if $BTEST
battle_test
return
end
# chargement des données du jeu
$data_actors = load_data("Data/Actors.rxdata")
$data_classes = load_data("Data/Classes.rxdata")
$data_skills = load_data("Data/Skills.rxdata")
$data_items = load_data("Data/Items.rxdata")
$data_weapons = load_data("Data/Weapons.rxdata")
$data_armors = load_data("Data/Armors.rxdata")
$data_enemies = load_data("Data/Enemies.rxdata")
$data_troops = load_data("Data/Troops.rxdata")
$data_states = load_data("Data/States.rxdata")
$data_animations = load_data("Data/Animations.rxdata")
$data_tilesets = load_data("Data/Tilesets.rxdata")
$data_common_events = load_data("Data/CommonEvents.rxdata")
$data_system = load_data("Data/System.rxdata")
# défintion de $game_system, l'élément de controle principale du jeu
$game_system = Game_System.new
# définition du fond
@fond = Sprite.new
@fond.bitmap = RPG::Cache.title("fond")
@fond.zoom_x = 2.5
@fond.zoom_y = 2.5
@fondarr = Sprite.new
@fondarr.bitmap = RPG::Cache.title("fond")
@fondarr.zoom_x = 2.5
@fondarr.zoom_y = 2.5
# place le fond arrière derrière les autres images
@fondarr.z = -5
# Jouer une musique
$game_system.bgm_play($data_system.title_bgm)
# en 4 fois, chercher si le fichier Save(id).rxdata
# existe, i auguemente à chaque fois
for i in 0..3
if FileTest.exist?("Save#{i+1}.rxdata")
@continuer = true
end
end
# Fondu de 40 frames (deux secondes)
Graphics.transition(40)
# Tant que $scene est égale à cette scene
while $scene == self
# Mise à jour graphique
Graphics.update
# Mise à jour de l'appui sur bouton
Input.update
# Appelle la fonction update
update
# Fin de la boucle (tant que)
end
# Arrêt de la mise à jour graphique
Graphics.freeze
# supression des sprites
@a.dispose
@b.dispose
@c.dispose
@t.dispose
@fond.dispose
@fondarr
# fin de la fonction
end
# définition de la fonction update
def update
# effet sur le fond, facultatif
if @premier != 50
@fond.z = 100
@fond.zoom_x -= 0.025
@fond.zoom_y -= 0.025
@fondarr.zoom_x -= 0.025
@fondarr.zoom_y -= 0.025
@premier += 1
else
@fond.opacity -= 5
end
# Mise à jour des sprites
@a.update
@b.update
@c.update
@t.update
@fond.update
# Conditions sur le déplacement des fenêtres
if Input.trigger?(Input::RIGHT) and @memory == 0
@memory = @i
$game_system.se_play($data_system.cursor_se)
$index -= 1
if $index < 0
$index = 2 # 2 => nombre de choix - 1
end
@dir = "right"
elsif Input.trigger?(Input::LEFT) and @memory == 0
@memory = @i
$game_system.se_play($data_system.cursor_se)
$index += 1
$index %= 3 # 3 => # nombre de choix
@dir = "left"
elsif @i >= @memory + 30 and @dir == "right"# 30 => nombre de point par mouvement
@memory = 0
@dir = nil
elsif @i <= @memory - 30 and @dir == "left" # 30 => nombre de point par mouvement
@memory = 0
@dir = nil
elsif @dir == "left"
@i -= 1
elsif @dir == "right"
@i += 1
# fin des conditions
end
=begin
Déplacement des fenêtre en cercle celon l'index (@i)
traduction :
Position x de la fenêtre est égale à :
rayon du cercle multiplié par le cosinus du produit
de l'index par PI divisé par 45
le tout adittionner au centre du cercle
cette methode peu sembler un peu barbare, mais pour
construire un cercle ou faire un mouvement circulaire
en radian, le calcule ce fait ainsi :
Un nombre multiplié par le double de PI divisé par le
nombre de fraction du cercle, c'est pourquoi le nombre
de fractions du cercle est divisée par deux (simplification)
le point seras déplacé sur le cercle celon l'index
pour les coordonées y, c'est le même systême, mise à part que
le cosinus est remplacé par un sinus.
=end
@a.x = 200 * Math.cos(@i * Math::PI / 45) + 270
@a.y = 100 * Math.sin(@i * Math::PI / 45) + 190
@b.x = 200 * Math.cos((@i + 30) * Math::PI / 45) + 270
@b.y = 100 * Math.sin((@i + 30) * Math::PI / 45) + 190
@c.x = 200 * Math.cos((@i + 60) * Math::PI / 45) + 270
@c.y = 100 * Math.sin((@i + 60) * Math::PI / 45) + 190
# Conditions servant à modifier l'opacitée des fenêtres celon
# Leur position x
if @a.x <= 370
@a.opacity -= 5
elsif @a.x >= 220 and @a.opacity <= 200
@a.opacity += 5
end
if @b.x <= 370
@b.opacity -= 5
elsif @b.x >= 220 and @b.opacity <= 200
@b.opacity += 5
end
if @c.x <= 370
@c.opacity -= 5
elsif @c.x >= 220 and @c.opacity <= 200
@c.opacity += 5
end
# Si la touche Action/selection est appuyée
if Input.trigger?(Input::C)
# dans la variable @index
case $index
# Quand elle est égale à 0
when 0
# Lancer le jeu
Audio.me_play("Audio/ME/015-Mystery01", 80, 50)
until @a.zoom_x >= 7 # petit effet sympas ^^
Graphics.update
@a.update
@a.x -= 2
@a.y -= 2
@a.zoom_x += 0.04
@a.zoom_y += 0.04
@a.opacity -= 2
end
go
when 1
# Chargement d'une partie
if @continuer == true
$game_system.se_play($data_system.buzzer_se)
return
else
Audio.me_play("Audio/ME/015-Mystery01", 80, 50)
until @b.zoom_x >= 7 # petit effet sympas ^^
Graphics.update
@b.update
@b.x -= 2
@b.y -= 2
@b.zoom_x += 0.04
@b.zoom_y += 0.04
@b.opacity -= 2
end
$scene = Scene_Load.new
end
when 2
# Quitter
$game_system.se_play($data_system.decision_se)
Audio.bgm_fade(800)
Audio.bgs_fade(800)
Audio.me_fade(800)
$scene = nil
# fin de la case
end
# fin de la condition
end
# fin de la fonction
end
# définition de la fonction go
def go
# ensemble de définition de variables et d'appels servant à lancer le jeu
Audio.bgm_stop
Graphics.frame_count = 0
$game_screen = Game_Screen.new
$game_temp = Game_Temp.new
$game_system = Game_System.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
$game_party.setup_starting_members
$game_map.setup($data_system.start_map_id)
$game_player.moveto($data_system.start_x, $data_system.start_y)
$game_player.refresh
$game_map.autoplay
$game_map.update
$scene = Scene_Map.new
end
# définition de la fonction battle_test
def battle_test
# ensemble de définition de variables et d'appels servant à tester un combat
$data_actors = load_data("Data/BT_Actors.rxdata")
$data_classes = load_data("Data/BT_Classes.rxdata")
$data_skills = load_data("Data/BT_Skills.rxdata")
$data_items = load_data("Data/BT_Items.rxdata")
$data_weapons = load_data("Data/BT_Weapons.rxdata")
$data_armors = load_data("Data/BT_Armors.rxdata")
$data_enemies = load_data("Data/BT_Enemies.rxdata")
$data_troops = load_data("Data/BT_Troops.rxdata")
$data_states = load_data("Data/BT_States.rxdata")
$data_animations = load_data("Data/BT_Animations.rxdata")
$data_tilesets = load_data("Data/BT_Tilesets.rxdata")
$data_common_events = load_data("Data/BT_CommonEvents.rxdata")
$data_system = load_data("Data/BT_System.rxdata")
Graphics.frame_count = 0
$game_temp = Game_Temp.new
$game_system = Game_System.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_screen = Game_Screen.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
$game_party.setup_battle_test_members
$game_temp.battle_troop_id = $data_system.test_troop_id
$game_temp.battle_can_escape = true
$game_map.battleback_name = $data_system.battleback_name
$game_system.se_play($data_system.battle_start_se)
$game_system.bgm_play($game_system.battle_bgm)
$scene = Scene_Battle.new
end
# fin du script
end
#=====================================================
# Les quatres scripts suivant ont étés à la base créés
# par Corbaque
#-----------------------------------------------------
# La plupart des données sont modifiables, certains
# problèmes peuvent être décelés, rien de bien méchant,
# mais le principal est de savoir personnaliser son
# sprite. Vous pouvez trouver des explications en fin de script.
#=====================================================
#<><><><><><><><><><><><><><><><>
# Sprite affichant le nom du jeu
#<><><><><><><><><><><><><><><><>
class Titre < Sprite
def initialize()
super()
self.bitmap = Bitmap.new(200, 200)
self.bitmap.font.name = "Gessele" # Police de caractère différente
self.bitmap.font.italic = true # Police en Italique
end
def update
# supprime le contenu du sprite (pour mettre à jour)
self.bitmap.clear
# défini la couleur du texte
self.bitmap.font.color = Color.new(0, 200, 250, 255)
# défini la taille du texte
self.bitmap.font.size = 50
# défini le texte
self.bitmap.draw_text(4, -44, 200, 200, "Titre du Jeu")
# défini la couleur du texte
self.bitmap.font.color = Color.new(0, 0, 250, 100)
# défini la taille du texte
self.bitmap.font.size = 50
# défini le texte
self.bitmap.draw_text(3, -43, 200, 200, "Titre du Jeu")
# affiche des lignes
self.bitmap.fill_rect(4, 65, 180, 1, Color.new(0, 200, 250, 50))
self.bitmap.fill_rect(4, 66, 180, 1, Color.new(0, 200, 250, 100))
self.bitmap.fill_rect(4, 67, 180, 1, Color.new(0, 200, 250, 150))
self.bitmap.fill_rect(4, 68, 180, 1, Color.new(0, 200, 250, 100))
self.bitmap.fill_rect(4, 69, 180, 1, Color.new(0, 200, 250, 50))
end
end
#<><><><><><><><><><><><><><><><>
# Sprites affichant les choix
#<><><><><><><><><><><><><><><><>
# - Nouvelle partie
class Choix_1 < Sprite
def initialize()
super()
self.bitmap = RPG::Cache.picture("1") # "1" est le nom de l'image
end
end
# - Chargement
class Choix_2 < Sprite
def initialize()
super()
self.bitmap = RPG::Cache.picture("2")
end
end
# - Quitter
class Choix_3 < Sprite
def initialize()
super()
self.bitmap = RPG::Cache.picture("3")
end
end
# /!\ Personnaliser son sprite /!\
=begin
Modifier ses position X et Y est inutile, puisque la scene les
modifie en permanence (mouvements) de même pour l'opacité.
Par contre, l'angle, le blend_type, le ton...
Voici un simple extrait de la doc d'rpgmakerXP traduite en français
pourquoi refaire ce qui existe (le tout à été adapté au contexte)!
- self.z
La coordonnée Z du sprite.
Plus cette valeur est élevé,
plus le sprite sera affiché près du joueur.
Si plusieurs objets partage la même valeur Z,
l'objet crée le plus récemment sera le plus près du joueur.
- self.ox
L'abscisse du point de départ du sprite.
- self.oy
L'abscisse du point départ du sprite.
- self.zoom_x
Le niveau de Zoom horizontal. 1.0 dénote la taille normal de pixel.
- self.zoom_y
Le niveau de Zoom vertical. 1.0 dénote la taille normal de pixel.
- self.angle
L'angle de rotation du sprite.
Spécifies plus de 360 degrés pour une rotation en sens anti-horaire.
Cependant, dessiner un sprite tournant
prend des ressources, donc éviter les abus.
- self.mirror
Drapeau démontrant que le sprite est retourné horizontalement. Si TRUE(vrai), le sprite sera dessiné retourné.
- self.bush_depth
La profondeur de camouflage pour ce sprite.
C'est une valeur de pixel indiquant combien la partie basse du sprite
sera affichée comme semi-transaparente.
- self.blend_type
La mode de transparence du sprite(0: normal, 1: addition, 2: soustraction).
- self.color
La couleur (Color.new(rouge, vert, bleu, alpha/opacitée) à être mélangée
avec le sprite pour la transparence.
Les valeurs Alpha sont utilisées pour le taux de mélange.
- self.tone
Le ton de couleur du sprite (Tone.new(rouge, vert, bleu, [gris])).
Voila tout, bon courage !
=end |