Bienvenue visiteur !
|
Statistiques
Liste des membres
Contact
Mentions légales
436 connectés actuellement
30732784 visiteurs depuis l'ouverture
2763 visiteurs aujourd'hui
Partenaires
Tous nos partenaires
Devenir partenaire
|
Messages postés par LittleGamer Nombre de messages référencés sur Oniromancie (non supprimés): 385 Aller à la page: 1 2 3 4 5 6 7 8 9 10
Posté dans Forum - Far From the Fourth Wall |
LittleGamer -
posté le 16/11/2019 à 12:14:49. (414 messages postés) |
| Ah oui Savior : Will you save the world ?. Je t'avoue que je m'en suis rappelé hier soir mais j'ai eu la flemme d'éditer mais si tu l'as trouvé ça va.
Je ne sais pas si MTarzaim passe encore. Avant il postait régulièrement, mais ça fait 5 ans que je ne passe plus ici qu'en touriste. Essaies de le mp au pire.
Citation: Merci pour les conseils, je vais nettoyer et réduire la palette de couleurs sur les psd de mes tilesets. Et merci a vous deux pour les encouragements ^^ |
Après ça ne le fais que si un sprite / une partie de tes tileset dénotent vraiment des autres. Ce n'est pas forcément prioritaire je pense, rien que sur les screens c'est cohérent : les sprites de potager font écho au vert des sprites des arbres.
Par contre petite erreur graphique que je n'avais pas vu hier, les arbres ne suivent pas les mêmes méthodes d'ombrage. Certains n'ont que deux couleurs pour leur ombre, sous les feuilles / au sol, et d'autres ont quatre couleurs.
Ce n'est cependant pas essentiel : sur un premier jeu, il vaut mieux que le jeu entier soit fonctionnel. Les détails des ombres, c'est pas forcément l'essentiel.
Citation: Le principe de base est encrée dans ma tête depuis longtemps mais je ne parviens toujours pas a implanter des détails et des dialogues de PNJ convenable. |
Personnellement, ce que je faisais à l'époque où j'utilisais RM, c'était de me dire que chaque PNJ devait dire quelque chose "d'intéressant", quitte à en mettre moins ou à mettre des PNJ a qui le joueur ne pouvait pas parler (cette dernière solution peut toutefois être problématique dans un jeu comme le tiens où l'interaction avec les PNJ est au centre du gameplay). Par intéressant, ça pouvait comporter plusieurs domaines :
- Le joueur apprend un truc sur le jeu, le gameplay, sur ce qu'il peut faire ("eh tu savais que les slimes flambaient super facilement ? On a vu ça en faisant tomber une torche sur l'un d'eux dans la mine..." = le joueur malin comprend que les sorts de feu sont super efficace sur les slimes de la mine qu'il va pas tarder à traverser). On les trouve surtout au début du jeu, pour indiquer les éléments basiques de gameplay ("tu peux sauvegarder en écrivant dans ton journal")
- Le joueur apprend un truc sur le lore : probablement le plus fréquent dans un jeu type RPG. C'est souvent sur la ville dans laquelle on se trouve ou sur un élément qu'on voit plus tard en jeu.
- Des micro histoires. C'est les plus délicates car elles sont souvent inutiles à l'expérience, toutefois, elles peuvent mener à des quêtes ou indiquer un objectif caché, ou juste susciter une émotion chez le joueur (parfois proche du lore du coup).
Dans ton cas, si je comprends bien, il faudrait essayer de trouver un juste milieu entre les deux premières formes de dialogues. Si j'ai bien compris, ton jeu propose en fait au joueur de jouer avec son lore (= le fait d'être un jeu, dont les persos sont conscients qu'ils sont dans un jeu). Et du coup, tu interagis surtout par des actions sur la map. Essaies de voir si ma méthode fonctionne, ou essaies de t'en faire une propre à ton jeu. C'est surement la meilleure solution car ma méthode est pas universelle, à chaque jeu son moule ! Mais tu peux t'inspirer de l'idée
Citation: a ce propos vous sauriez ou je pourrais tenter de rallier des gens a mon projet ?
Dans le maigre espoir que l'idée de base intéresse d'autres personnes, seul je m'éparpille un peu trop facilement et j'ai une plume assez médiocre. |
Sur ce forum tu as le topic de recrutement dans la section entraide, sinon essaies d'en parler sur d'autres forums. Y a le forum création de jeu de JeuxVideo.com, pas très actif, mais y a des gars sympas aussi.
|
Posté dans Forum - One-sword into darkness [RM2k3] |
LittleGamer -
posté le 15/11/2019 à 21:41:22. (414 messages postés) |
| J'ai survolé le topic après lecture du premier post, ça a l'air très bon, le pixel art est vraiment agréable à regarder et l'animation a l'air propre. Bon courage pour la suite !
|
Posté dans Forum - Far From the Fourth Wall |
LittleGamer -
posté le 15/11/2019 à 21:31:56. (414 messages postés) |
| Intéressant, ça me rappelle le petit jeu de MTarzaim fait il y a quelques années. Je ne sais plus son nom, c'était après un énième débat sur la faisabilité des MMO...
J'avoue que j'ai failli critiquer les sprites pokémon, mais en vrai, c'est rare de voir du rip et même si c'est moins bien que du full custom, c'est souvent mieux que les RTP pour le joueur (pas pour la légalité du jeu en revanche, mais bon à niveau amateur on est pas trop ennuyé). Le mixing n'est pas choquant. Si vraiment tu sens qu'un sprite ne correspond pas, tu peux t'exercer à le modifier sur PaintDOTNet ou autre logiciel simple (pas forcément photoshop mais pas Paint Windows). Une astuce simple, c'est d'harmoniser les palettes de couleurs. Tes couleurs les plus fréquentes sont celles des deux jeux GBA, donc si un sprite de Stardew Valley te semble plus détaillé que les autres ou dans des tons ou teintes de couleurs différentes, tu peux essayer de l'harmoniser en prenant les couleurs des autres sprites.
Après ça peut être plus compliqué que ça sur certains sprites, genre ceux avec des contours / sans contour, avec un dithering marqué, etc.
Le mapping a l'air propre dans son style, fais juste gaffe au lampadaire sur de l'herbe, c'est un peu bizarre, mais sinon bravo, c'est cohérent.
Citation: Le Némésis : D'abord allié du héro (dans une "partie" précédente) il apprend a ses côté que le temps dans sa réalité ne suit son cours qu'en fonction de nous, joueur. (bien qu'il l'apprenne d'une manière détourné, quelque chose comme une prophétie qu'il me reste encore a définir clairement) |
Je te recommande de compléter ça sur papier avant de trop t'avancer dans ton projet. Il serait dommage de devoir modifier des éléments que tu as durement implanté parce que tes idées n'étaient pas bien en place
C'est ton premier projet ?
|
Posté dans Forum - Un projet sur la liberté d'action et ses conséquences |
LittleGamer -
posté le 20/03/2016 à 18:01:52. (414 messages postés) |
| Le système des sujets me rappellent un peu Dwarf Fortress. C'est vraiment ultra complet comme boulot, bravo pour ton travail. J'aime beaucoup ton projet, c'est un de ceux que je suis depuis que j'avais commencé à faire des jeux (J'ai commencé il y 5 ans mais arrêté l'an dernier).
Je respecte grandement ton travail.
|
Posté dans Forum - Squibreeze : l'écureuil le plus fort du monde |
LittleGamer -
posté le 30/05/2015 à 14:22:19. (414 messages postés) |
| Je viens de découvrir ce topic. Au début j'étais un peu sceptique mais au fur et à mesure des messages, ça donne assez envie en fait !
Bravo pour avoir tenu ton projet aussi longtemps malgré des obligations extérieures au développement. Je le trouve très beau sur les derniers screens, ça donne très envie ! Peut-être juste un peu bordélique sur le deuxième screen (beaucoup d'élements différents), mais après faut voir en jeu.
|
Posté dans Forum - [VX] Problème script de panorama |
LittleGamer -
posté le 16/11/2014 à 19:27:01. (414 messages postés) |
| Bon j'ai pas trop le temps de voir en détails ce soir, mais déjà le jeu ne crash pas ! Ca devrait le faire donc.
Merci Joke
Nukikoudi : C'est donc pour ça que ça ne marche pas x) C'est original comme problème de script...
|
Posté dans Forum - [VX] Problème script de panorama |
LittleGamer -
posté le 08/11/2014 à 15:21:09. (414 messages postés) |
| Domaine concerné: Script
Logiciel utilisé: VX
Bonjour,
J'ai trouvé ce script ce sur ce site, mais il est buggé. Il affiche un message d'erreur au lancement d'une nouvelle partie.
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
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
| #==============================================================================
# (RMVX) ~ Multi-panorama ~
# de Lufia
# v 1.0
#==============================================================================
# Ce script permet d'afficher plusieurs panoramas / fogs en même temps durant le jeu.
# Nombre maximum de panoramas :
MAX_PANORAMAS = 20
#
# Les images sont à placer dans le dossier Parallaxes.
# Les commandes suivantes sont à utiliser en insertion de script.
#
# Afficher un panorama :
# show_pano(id, name, z, opacity, blend_type, zoom_x, zoom_y, autoscroll_x_speed,
# autoscroll_y_speed, move_x_speed, move_y_speed)
# id : numéro du panorama (de 0 à MAX_PANORAMAS - 1)
# name : nom du fchier dans Graphics/Parallaxes
# z : coordonnée en z, si ce nombre est grand, le panorama apparaît au-dessus d'autres
# éléments de la carte
# opacity : opacité (de 0 à 255, nombre décimaux autorisés)
# blend_type : type de transparence (0 : normale, 1 : addition, 2 : soustraction)
# zoom_x : zoom en x (taille normale : 100.0)
# zoom_y : zoom en y (taille normale : 100.0)
# autoscroll_x_speed : vitesse de défilement horizontal
# autoscroll_y_speed : vitesse de défilement vertical
# move_x_speed : scrolling parallaxe en x (même vitesse que la carte : 2)
# move_y_speed : scrolling parallaxe en y (même vitesse que la carte : 2)
# ex : show_pano(0, "MonPano", -1, 160, 1, 54.3, 100, -10, 0, 2, 1)
#
# Modifier un panorama :
# change_pano_properties(id, z, opacity, blend_type, zoom_x, zoom_y, autoscroll_x_speed,
# autoscroll_y_speed, move_x_speed, move_y_speed, duration, wait_for_end)
# duration : temps de transition (en frames)
# wait_for_end : attendre la fin de la transition ? (oui : true / non : false)
# ex : change_pano_properties(0, 20, 255, 0, 100, 100, 0, 15, 2, 2, 20, true)
#
# Modifier le ton d'un panorama :
# change_pano_tone(id, red, green, blue, gray, duration, wait_for_end)
# red : ajustement du rouge (de -255 à 255)
# green : ajustement du vert (de -255 à 255)
# blue : ajustement du bleu (de -255 à 255)
# gray : ajustement du gris (de -255 à 255)
# ex : change_pano_tone(0, 100, -100, 0, 35, 15, false)
#
# Modifier la couleur d'un panorama :
# change_pano_color(id, red, green, blue, alpha, duration, wait_for_end)
# red : valeur du rouge (de 0 à 255)
# green : valeur du vert (de 0 à 255)
# blue : valeur du bleu (de 0 à 255)
# alpha : alpha blending (de 0 à 255)
# ex : change_pano_color(0, 255, 100, 0, 0, 0, false)
#
# Effacer un panorama :
# hide_pano(args)
# args : ids des panoramas
# ex : hide_pano(1, 3, 12)
#
#==============================================================================
# Merci à Zeus81 pour ses précieux conseils.
# Enjoy !
#==============================================================================
#==============================================================================
# ** Game_Panorama
#------------------------------------------------------------------------------
# This class handles panoramas. This class is used within the Game_Map class.
#==============================================================================
class Game_Panorama
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :id
attr_accessor :name
attr_accessor :z
attr_accessor :opacity
attr_accessor :blend_type
attr_accessor :zoom_x
attr_accessor :zoom_y
attr_accessor :color
attr_accessor :tone
attr_accessor :autoscroll_x_speed
attr_accessor :autoscroll_y_speed
attr_accessor :move_x_speed
attr_accessor :move_y_speed
#--------------------------------------------------------------------------
# * Object initialization
# id : panorama number
#--------------------------------------------------------------------------
def initialize(id)
@id = id
@name = ""
@z = 0
@opacity = 255.0
@target_opacity = 255.0
@blend_type = 0
@zoom_x = 100.0
@target_zoom_x = 100.0
@zoom_y = 100.0
@target_zoom_y = 100.0
@color = Color.new(0, 0, 0, 0)
@target_color = Color.new(0, 0, 0, 0)
@tone = Tone.new(0, 0, 0, 0)
@target_tone = Tone.new(0, 0, 0, 0)
@autoscroll_x_speed = 0
@autoscroll_y_speed = 0
@move_x_speed = 0.0
@move_y_speed = 0.0
@duration = 0
@tone_duration = 0
@color_duration = 0
end
#--------------------------------------------------------------------------
# * Show panorama
# name : filename
# z : z coordinate
# opacity : sprite opacity
# blend_type : blend type
# zoom_x : x axis zoom
# zoom_y : y axis zoom
# autoscroll_x_speed : x axis autoscroll speed
# autoscroll_y_speed : y axis autoscroll speed
# move_x_speed : x axis scroll speed
# move_y_speed : y axis scroll speed
#--------------------------------------------------------------------------
def show(name, z, opacity, blend_type, zoom_x, zoom_y, autoscroll_x_speed,
autoscroll_y_speed, move_x_speed, move_y_speed)
@name = name
@z = z
@opacity = opacity.to_f
@target_opacity = opacity
@blend_type = blend_type
@zoom_x = zoom_x.to_f
@target_zoom_x = @zoom_x
@zoom_y = zoom_y.to_f
@target_zoom_y = @zoom_y
@color = Color.new(0, 0, 0, 0)
@target_color = @color.clone
@tone = Tone.new(0, 0, 0, 0)
@target_tone = @tone.clone
@autoscroll_x_speed = autoscroll_x_speed
@autoscroll_y_speed = autoscroll_y_speed
@move_x_speed = move_x_speed.to_f
@move_y_speed = move_y_speed.to_f
end
#--------------------------------------------------------------------------
# * Erase panorama
#--------------------------------------------------------------------------
def hide
@name = ""
end
#--------------------------------------------------------------------------
# * Change panorama properties
# z : z coordinate
# zoom_x : x axis zoom
# zoom_y : y axis zoom
# blend_type : blend type
# opacity : sprite opacity
# duration : transition time
#--------------------------------------------------------------------------
def change_opacity(z, zoom_x, zoom_y, opacity, blend_type, autoscroll_x_speed,
autoscroll_y_speed, move_x_speed, move_y_speed, duration)
@z = z
@blend_type = blend_type
@autoscroll_x_speed = autoscroll_x_speed
@autoscroll_y_speed = autoscroll_y_speed
@move_x_speed = move_x_speed.to_f
@move_y_speed = move_y_speed.to_f
@target_zoom_x = zoom_x.to_f
@target_zoom_y = zoom_y.to_f
@target_opacity = opacity.to_f
@duration = duration
if duration == 0
@zoom_x = @target_zoom_x
@zoom_y = @target_zoom_y
@opacity = @target_opacity
end
end
#--------------------------------------------------------------------------
# * Change panorama tone
# tone : new tone (Tone object)
# duration : transition time
#--------------------------------------------------------------------------
def change_tone(tone, duration)
@target_tone = tone.clone
@tone_duration = duration
if duration == 0
@tone = @target_tone.clone
end
end
#--------------------------------------------------------------------------
# * Change panorama color
# color : new color (Color object)
# duration : transition time
#--------------------------------------------------------------------------
def change_color(color, duration)
@target_color = color.clone
@color_duration = duration
if duration == 0
@color = @target_color.clone
end
end
#--------------------------------------------------------------------------
# * Frame update
#--------------------------------------------------------------------------
def update
if @duration > 0
d = @duration
@zoom_x = (@zoom_x * (d-1) + @target_zoom_x) / d
@zoom_y = (@zoom_y * (d-1) + @target_zoom_y) / d
@opacity = (@opacity * (d-1) + @target_opacity) / d
@duration -= 1
end
if @tone_duration > 0
d = @tone_duration
@tone.red = (@tone.red * (d-1) + @target_tone.red) / d
@tone.green = (@tone.green * (d-1) + @target_tone.green) / d
@tone.blue = (@tone.blue * (d-1) + @target_tone.blue) / d
@tone.gray = (@tone.gray * (d-1) + @target_tone.gray) / d
@tone_duration -= 1
end
if @color_duration > 0
d = @color_duration
@color.red = (@color.red * (d-1) + @target_color.red) / d
@color.green = (@color.green * (d-1) + @target_color.green) / d
@color.blue = (@color.blue * (d-1) + @target_color.blue) / d
@color.alpha = (@color.alpha * (d-1) + @target_color.alpha) / d
@color_duration -= 1
end
end
end
#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
# This class handles maps. It includes scrolling and passage determination
# functions. The instance of this class is referenced by $game_map.
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :panoramas
#--------------------------------------------------------------------------
# * Object initialization
#--------------------------------------------------------------------------
alias lufia_multipano_initialize initialize
def initialize
@panoramas = []
for i in 0...MAX_PANORAMAS
@panoramas.push(Game_Panorama.new(i))
end
lufia_multipano_initialize
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
alias lufia_multipano_update update
def update
@panoramas.each { |i| i.update }
lufia_multipano_update
end
end
#==============================================================================
# ** Sprite_Panorama
#------------------------------------------------------------------------------
# This plane is used to display panoramas. It observes a instance of the
# Game_Panorama class and automatically changes plane properties.
#==============================================================================
class Sprite_Panorama < Plane
#--------------------------------------------------------------------------
# * Object initialization
# pano : panorama (Game_Panorama)
#--------------------------------------------------------------------------
def initialize(pano)
super()
@pano = pano
@name = ""
update
end
#--------------------------------------------------------------------------
# * Frame update
#--------------------------------------------------------------------------
def update
if @pano.name != @name
@name = @pano.name
if @name.empty?
self.bitmap = nil
self.visible = false
else
self.bitmap = Cache.parallax(@name)
@width_x_8, @height_x_8 = self.bitmap.width * 8, self.bitmap.height * 8
@scroll_x = @scroll_y = 0
self.visible = true
end
end
unless @name.empty?
self.z = @pano.z
self.opacity = @pano.opacity
self.blend_type = @pano.blend_type
self.zoom_x = @pano.zoom_x / 100.0
self.zoom_y = @pano.zoom_y / 100.0
self.color = @pano.color
self.tone = @pano.tone
@scroll_x = (@scroll_x + @pano.autoscroll_x_speed) % @width_x_8
@scroll_y = (@scroll_y + @pano.autoscroll_y_speed) % @height_x_8
self.ox = (@scroll_x + $game_map.display_x * @pano.move_x_speed) / 8
self.oy = (@scroll_y + $game_map.display_y * @pano.move_y_speed) / 8
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
#--------------------------------------------------------------------------
# * Create parallax
#--------------------------------------------------------------------------
alias lufia_multipano_create_parallax create_parallax
def create_parallax
@sprites_panoramas = []
for i in 0...MAX_PANORAMAS
@sprites_panoramas.push(Sprite_Panorama.new($game_map.panoramas))
end
lufia_multipano_create_parallax
end
#--------------------------------------------------------------------------
# * Dispose parallax
#--------------------------------------------------------------------------
alias lufia_multipano_dispose_parallax dispose_parallax
def dispose_parallax
lufia_multipano_dispose_parallax
@sprites_panoramas.each { |i| i.dispose if i != nil }
end
#--------------------------------------------------------------------------
# * Update parallax
#--------------------------------------------------------------------------
alias lufia_multipano_update_parallax update_parallax
def update_parallax
lufia_multipano_update_parallax
for pano in @sprites_panoramas
pano.update
end
end
end
#==============================================================================
# ** Game_Interpreter
#------------------------------------------------------------------------------
# An interpreter for executing event commands. This class is used within the
# Game_Map, Game_Troop, and Game_Event classes.
#==============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# * Show panorama
# id : panorama number
# name : filemane
# z : z coordinate
# opacity : sprite opacity
# blend_type : blend type
# zoom_x : x axis zoom
# zoom_y : y axis zoom
# autoscroll_x_speed : x axis autoscroll speed
# autoscroll_y_speed : y axis autoscroll speed
# move_x_speed : x axis scroll speed
# move_y_speed : y axis scroll speed
#--------------------------------------------------------------------------
def show_pano(id, name, z, opacity, blend_type, zoom_x, zoom_y, autoscroll_x_speed,
autoscroll_y_speed, move_x_speed, move_y_speed)
$game_map.panoramas[id].show(name, z, opacity, blend_type, zoom_x, zoom_y, autoscroll_x_speed,
autoscroll_y_speed, move_x_speed, move_y_speed)
return true
end
#--------------------------------------------------------------------------
# * Erase panorama
# args : panorama numbers
#--------------------------------------------------------------------------
def hide_pano(*args)
args.each { |id| $game_map.panoramas[id].hide }
return true
end
#--------------------------------------------------------------------------
# * Change panorama properties
# id : panorama number
# z : z coordinate
# zoom_x : x axis zoom
# zoom_y : y axis zoom
# opacity : sprite opacity
# blend_type : blend type
# autoscroll_x_speed : x axis autoscroll speed
# autoscroll_y_speed : y axis autoscroll speed
# move_x_speed : x axis scroll speed
# move_y_speed : y axis scroll speed
# duration : transition time
# wait_for_end : wait for end of transition?
#--------------------------------------------------------------------------
def change_pano_properties(id, z, opacity, blend_type, zoom_x, zoom_y, autoscroll_x_speed,
autoscroll_y_speed, move_x_speed, move_y_speed, duration, wait_for_end)
$game_map.panoramas[id].change_opacity(z, zoom_x, zoom_y, opacity, blend_type, autoscroll_x_speed,
autoscroll_y_speed, move_x_speed, move_y_speed, duration)
@wait_count = duration if wait_for_end
return true
end
#--------------------------------------------------------------------------
# * Change panorama tone
# id : panorama number
# red : red value (-255 - 255)
# green : green value (-255 - 255)
# blue : blue value (-255 - 255)
# gray : grayscale value (-255 - 255)
# duration : transition time
# wait_for_end : wait for end of transition?
#--------------------------------------------------------------------------
def change_pano_tone(id, red, green, blue, gray, duration, wait_for_end)
$game_map.panoramas[id].change_tone(Tone.new(red, green, blue, gray), duration)
@wait_count = duration if wait_for_end
return true
end
#--------------------------------------------------------------------------
# * Change panorama color
# id : panorama number
# red : red value (0 - 255)
# green : green value (0 - 255)
# blue : blue value (0 - 255)
# alpha : alpha blending (0 - 255)
# duration : transition time
# wait_for_end : wait for end of transition?
#--------------------------------------------------------------------------
def change_pano_color(id, red, green, blue, alpha, duration, wait_for_end)
$game_map.panoramas[id].change_color(Color.new(red, green, blue, alpha), duration)
@wait_count = duration if wait_for_end
return true
end
end |
Il affiche l'erreur suivante : Script panorama line 607: NoMethodError occured.
Undefined method `name' for #<Array:0x32cb7b0>
Je ne vois pas du tout ce qu'il faut faire pour corriger cette erreur, mes compétences en script étant très basiques.
Quelqu'un a-t-il la solution ?
Merci d'avance !
EDIT : Pas de réponse ? Allez, je tente un up quand même, pour voir.
|
Posté dans Forum - [Unity] [Crowdfunding] God is a Cube - (update 17 Juillet) Programming Puzzle Game avec nanomachines |
LittleGamer -
posté le 05/11/2014 à 14:30:24. (414 messages postés) |
| Je me risque à upper le topic pour réagir à ce projet qui me semble juste énorme.
J'ai vu la présentation hier, lu en survolant, en regardant les images, et n'est rien compris. C'est assez abstrait au premier abord.
J'ai relu en détails aujourd'hui, car j'arrêtais pas de repenser à certains trucs, notamment l’immensité de cubes et de chiffres gérés par le programme (et le joueur).
Et ça a l'air excellent. Je pense avoir compris au moins la base du gameplay, et ça me donne très envie d'essayer. C'est un ovni ce projet, mais qui peut devenir un sacré truc.
Bon, pour nuancer un peu les éloges quand même, je rejoint ce qui a déjà été dit : C'est pas très clair (j'ai du lire deux fois quand même) et au final on a toujours pas le but précis du jeu (devenir le plus puissant possible c'est ça ?). Il faut donc bel et bien que tu recentre un peu le dev' sur le gameplay, car personne va accrocher sinon.
Il faut savoir se mettre au niveau des autres. Et surtout quand on veut vendre quoi. Perso, j'ai peu de notions en programmation, mais je suis conscient que là y a du lourd. Mais beaucoup de gens réaliseront même pas l'étendue du truc, et il vaut peut-être mieux leur parler d'abord de ce qui peut les intéresser pour ensuite expliquer à ceux qui sont encore là pourquoi c'est énorme.
Bonne continuation en tout cas, si le jeu sort, payant ou non, j'y jouerai
|
Posté dans Forum - Questions idiotes sur RM [PAS Script] |
LittleGamer -
posté le 30/10/2014 à 21:47:24. (414 messages postés) |
| Je suis pas sur qu'il y ait une commande pour les changer de configuration de déplacement comme ça (regarde quand même dans "Déplacer un événement" pour être sur mais je crois pas).
Mais tu peux faire autrement. Active un interrupteur au moment de la téléportation, et donne aux 10 événements une deuxième page qui ne s'active que si l'interrupteur en question est activé. Sur cette page, met les dans la bonne direction, en direction fixe, et pas en déplacement aléatoire. Ils changeront automatiquement normalement.
|
Posté dans Forum - La Route de la Gloire (VX) |
LittleGamer -
posté le 19/10/2014 à 22:07:11. (414 messages postés) |
| Le trailer date un petit peu maintenant, mais reste assez représentatif du jeu ^^
La version complète risque de se faire attendre encore très longtemps. ça fait déjà 3 ans que je suis sur le jeu, j'avance lentement. Surtout que cette année j'ai le bac, donc j'ai plus trop le temps...
Je suis content que ça plaise à quelqu'un en tout cas !
|
Posté dans Forum - [VX] Plusieurs polices d'écriture en jeu |
LittleGamer -
posté le 02/09/2014 à 20:43:51. (414 messages postés) |
| Domaine concerné: Système Logiciel utilisé: VX Bonsoir,
Savez vous si il est possible d'avoir deux polices d'écriture en jeu ? Je voudrais utiliser un script qui va permettre de lire des livres en jeu (je l'ai et il est fonctionnel, je vais peut-être le mettre dans la rubrique script, il à été dur à trouver. C'est celui d'Omega7 si y en a qui connaissent), et je voudrais pouvoir mettre des polices d'écritures différentes du reste du jeu dans les livres.
Je suppose qu'il faudra les mettre dans les fichiers du jeu et/ou configurer un installeur, mais surtout, j'aimerais savoir comment indiquer au jeu quelle police il doit utiliser.
Éventuellement, serait-il possible d'afficher deux polices à la dans deux menus affichés en même temps ?
Le script des livres (au cas où) :
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
| # =============================================================================
# Simple ReadBooks Scene
# Version: 1.0
# Author: Omegas7
# http://omegadev.biz or http://omegas7.blogspot.com
# -----------------------------------------------------------------------------
# Creates a book that may be called through an event script call.
# -----------------------------------------------------------------------------
# FEATURES:
# > 1.0
# > Independent book graphic for each book.
# > Book sound effect.
# > Unlimited books and pages allowed.
# > Window telling the pages you are on.
# > Displays two pages simulateously.
# > Use script call for opening a book.
# > Display pictures (also unlimited)
# > Book title window.
# -----------------------------------------------------------------------------
# USAGE: Adding a book to your database.
#
# This is the basic code template for your book, which is placed below:
# Titles[ID] = "My Title"
# Pages[ID][PageNumber] = ["So this is this is a page." , "This is the second line"]
# Graphics[ID] = "Graphic file name for book located in Pictures folder"
# Sounds[ID] = "Sound file name for book located in Audio/SE/ folder"
#
# Where ID is the ID number of the book in this script. Note that the
# first book is 0, then the other is 1, then 2, and so on...
# Let's say you want your book's first page to have three lines of text:
# Pages[ID][0] = ["First line" , "Second line", "Third line"]
# That 0 means the first page. It is an array with three strings.
# What if I want to make two pages? Well, put
# Pages[ID][1] = ["This is the second page!!"]
# Note the 1 there. It means second page.
# Remember that each line is inside quotes " " and separated by a comma.
# See examples in demo!
#
# ADDING PICTURES:
#
# All your pictures for books must be in Graphics/Pictures/ folder.
# If a book needs a picture (let's say, book ID 5), on page 4, we put this line:
# Pictures[5][4] = [ ['ImageName',X,Y] ]
# X and Y and screen coordinates.
# When thinking on X and Y, always think the page will be the left one.
# If the page is the second one (right half of the screen), the script should
# move the image automatically.
#
# OPENING A BOOK:
#
# Use the event script call command, and type:
# $scene = ReadBook.new(ID)
# Where ID is the ID number of the book in the script.
#
# IMPORTANT:
# When you add/remove a book, remember to update the
# HOW_MANY_BOOKS_EXIST
# number below.
# =============================================================================
module OmegaX
module ReadBookData
HOW_MANY_BOOKS_EXIST = 4 # Please update when you add a book
Titles = [] # <- Don't edit
Pages = [] # <- Don't edit
Graphics = [] # <- Don't edit
Sounds = [] # <- Don't edit
Pictures = [] # <- Don't edit
for i in 0...HOW_MANY_BOOKS_EXIST
Pages[i] = []
Pictures[i] = []
end # <- Don't edit
# PUT BOOK DATA BELOW HERE
Titles[0] = "Stupid's guide to glory"
Pages[0][0] = ["So you're reading this",
"because you're an idiot.","Well, this book with teach","you the path to glory!!"]
Pages[0][1] = ["First of all, you will need","lots of gold! How?",
"Very easy! Just go into an","epic quest and kill 200","dragons!!!"]
Pages[0][2] = ["Good! Now that you have","lots of money, you can",
"now go and buy your very","own castle in middle of",
"town! You will get lots of","respect! You are now","GLORIOUS!!","","End."]
Graphics[0] = "Book01"
Sounds[0] = "Book"
Titles[1] = "The one-page book"
Pages[1][0] = ["That's right, people!","this book only has ONE",
"PAGE!! BUT it is SUPER","heavy!! It is all thanks",
"to our new paper","compression system! Now",
"500 trees fit in one single","and compact book!","Umm... yeah. That's all."]
Graphics[1] = "Book01"
Sounds[1] = "Book"
Titles[2] = "Lots of pages book"
Pages[2][0] = ["Welcome to this test!","I will test a lot of","pages!"]
Pages[2][1] = ["This is page 2."]
Pages[2][2] = ["Page 3..."]
Pages[2][3] = ["This is the awesome","page 4!!"]
Pages[2][4] = ["This is page 5.","","END!"]
Graphics[2] = "Book01"
Sounds[2] = "Book"
Titles[3] = "The monster book"
Pages[3][0] = ["Below you can see a","terrible monster:"]
Pages[3][1] = ["And again:"]
Pages[3][2] = ["And again, but twice:"]
Graphics[3] = "Book01"
Sounds[3] = "Book"
Pictures[3][0] = [ ['MONSTER',85,120] ]
Pictures[3][1] = [ ['MONSTER',85,120] ]
Pictures[3][2] = [ ['MONSTER',85,120], ['MONSTER',85,160] ]
end
end
class ReadBook < Scene_Base
include OmegaX::ReadBookData
def initialize(id)
@id = id
@page = 0
end
def start
create_menu_background
Audio.se_play("Audio/SE/#{Sounds[@id]}")
@title = Window_Base.new(0,0,544,50)
@title.contents.font.size = 16
@title.contents.draw_text(0,0,500,17,"You're reading: #{Titles[@id]}")
@title.z = 500
@graphic = Sprite_Base.new
@graphic.bitmap = Cache.picture(Graphics[@id].to_s)
@graphic.z = 500
@page1 = Window_Base.new(72,70,210,250)
@page2 = Window_Base.new(272,70,210,250)
@page1.contents.font.size = @page2.contents.font.size = 14
@page1.z = @page2.z = 501
@page1.opacity = @page2.opacity = 0
@info = Window_Base.new(100,416 - 50,344,50)
@info.contents.font.size = 14
@info.z = 500
@pictures = []
draw_pages
end
def update
if Input.trigger?(Input:: B)
finish
end
if Input.trigger?(Input::RIGHT)
if Pages[@id].size > 1
if @page + 2 < Pages[@id].size
Audio.se_play("Audio/SE/#{Sounds[@id]}")
@page += 1
draw_pages
end
end
end
if Input.trigger?(Input::LEFT)
if Pages[@id].size > 1
if @page >= 1
Audio.se_play("Audio/SE/#{Sounds[@id]}")
@page -= 1
draw_pages
end
end
end
end
def draw_pages
for i in 0...@pictures.size
@pictures[i].dispose
@pictures[i] = nil
end
@pictures.compact!
@page1.contents.clear
@page2.contents.clear
reading = []
if Pages[@id][@page] != nil
for i in 0...Pages[@id][@page].size
@page1.contents.draw_text(0,i * 17,205,18,Pages[@id][@page][i].to_s)
end
if @page + 1 == 0
reading[0] = Pages[@id].size
else
reading[0] = @page + 1
end
if Pictures[@id][@page] != nil
for i in 0...Pictures[@id][@page].size
@pictures.push(Sprite_Base.new)
x = @pictures.size - 1
@pictures[x].bitmap = Cache.picture(Pictures[@id][@page][i][0])
@pictures[x].x = Pictures[@id][@page][i][1]
@pictures[x].y = Pictures[@id][@page][i][2]
@pictures[x].z = 501
end
end
end
if Pages[@id][@page + 1] != nil
for i in 0...Pages[@id][@page + 1].size
@page2.contents.draw_text(0,i * 17,205,18,Pages[@id][@page + 1][i].to_s)
end
if Pictures[@id][@page] != nil
for i in 0...Pictures[@id][@page + 1].size
@pictures.push(Sprite_Base.new)
x = @pictures.size - 1
@pictures[x].bitmap = Cache.picture(Pictures[@id][@page + 1][i][0])
@pictures[x].x = Pictures[@id][@page + 1][i][1] + @page2.x - 64
@pictures[x].y = Pictures[@id][@page + 1][i][2]
@pictures[x].z = 501
end
end
reading[1] = @page + 2
end
if @page + 1 == Pages[@id].size || @page + 1 == 0
@page2.contents.clear
reading[1] = nil
end
reading.compact!
@info.contents.clear
if reading.size > 1
@info.contents.draw_text(0,-2,322,15,"Reading pages #{reading[0]} and #{reading[1]}",1)
else
@info.contents.draw_text(0,-2,322,15,"Reading page #{reading[0]}",1)
end
end
def finish
Sound.play_cancel
@title.dispose
@graphic.dispose
@info.dispose
@page1.dispose
@page2.dispose
for i in 0...@pictures.size
@pictures[i].dispose
@pictures[i] = nil
end
@pictures.compact!
$scene = Scene_Map.new
end
end |
Merci d'avance
|
Posté dans Forum - [VX] Recherche d'un script pour reprendre une musique après un combat. |
LittleGamer -
posté le 10/07/2014 à 16:15:22. (414 messages postés) |
| Je teste ça ^^
Encore un problème avec le ME : Cette fois il s'arrête plus au retour sur la map, mais le BGM reprend bien sur la map...
Pour être sur, il fallait bien enlever tout ça pour le process victory ? Rien de plus ou de moins ?
C'est tordu n'empêche ^^"
EDIT : C'est bon le chargement marche !
|
Posté dans Forum - [VX] Recherche d'un script pour reprendre une musique après un combat. |
LittleGamer -
posté le 10/07/2014 à 15:59:47. (414 messages postés) |
| Je reteste ça alors, ça faisait ce problème.
Par contre recharger la partie ne fonctionne pas : ça crash au moment de lancer le jeu avec le message Script Estheone ajout musique' line 95: NoMethodError occurred. undefined method `[]' for nil:NilClass
C'est peut-être parce que j'ai un script de sauvegarde ?
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
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
| #==========================================================================
# â— [VX] â—¦ Neo Save System V â—¦ â–¡
#---------------------------------------------------------------------------
# â—¦ Author: Woratana [woratana@hotmail.com]
# â—¦ Thaiware RPG Maker Community
# â—¦ Last Updated:
# â—¦ Version: 3.0 -> 5.0
# â—¦ Continued support by Helladen
# â—¦ (Screen Shot credit Wortana, Andreas21, and Cybersam)
#---------------------------------------------------------------------------
# â—¦ Log V:
# - Screenshot support for those who want tone/weather/sprites and
# unlike NSS 1.0 the screen is now centered.
# - Added an option to stay in save screen after you save the game
#---------------------------------------------------------------------------
# â—¦ Log IV:
# - New addition for hiding map names. You can control the switch to
# allow MAP_NO_NAME_LIST to work or not.
# - Revised some of the settings and script organization.
# - Added an option to disable the vocab::Gold text right of the number.
# - Added an option to use default opacity or not.
# - Swap tile compatibility support.
#---------------------------------------------------------------------------
# â—¦ Log III:
# - Change back to draw tile map as screenshot. Don't need any image.
# - For drawing tile map, the characters won't show on the tile map.
#---------------------------------------------------------------------------
# â—¦ Log II:
# - Screenshot DLL is not work with Vista Aero, so I remove it
# and use image for each map instead of screenshot.
# - Actor's level in last version (V.1) is incorrect.
#---------------------------------------------------------------------------
# â—¦ Features:
# - Unlimited save slots, you can choose max save slot
# - Many configuration options
# - Swap tile support
# - You can use image for scene's background
# - Choose your save file's name, and folder to store save files
# - Choose to show only information you want
# - Editable text for information's title
# - Draw tile map for map that player is currently on.
# - Remove text you don't want from map's name (e.g. tags for special script)
# - Choose map that you don't want to show the name on
# - Include save confirmation window before overwrite old save
#===========================================================================
module Wora_NSS Wora_NSS
#==========================================================================
# * START NEO SAVE SYSTEM - SETUP
#--------------------------------------------------------------------------
OPACITY_DEFAULT = true # This will use the default opacity for windows
# Please note that this will affect both opacitys below
NSS_WINDOW_OPACITY = 255 # All windows' opacity (Lowest 0 - 255 Highest)
# You can change this to 0 in case you want to use image for background
NSS_IMAGE_BG = '' # Background image file name, it must be in folder Picture
# use '' for no background
NSS_IMAGE_BG_OPACITY = 255 # Opacity for background image
# If you use the screen shot method this does not matter
SWAP_TILE = false # Make this false if you don't use the swap_tile script
SWAP_TILE_SWITCH = 84 # The switch needs to be the same as your swap tile
# switch, but if SWAP_TILE is false it does not matter
# If this is true it will screen shot the map, if false it will draw it
SCREENSHOT_IMAGE = true # Drawing the map is good because it doesn't require
# a .DLL or images for the screen shot, but it has sprites, tone, and
# weather. You need to turn on swap tile if you have this as false.
IMAGE_FILETYPE = '.png' # Image type for screenshot
# '.bmp', or '.jpg', or '.png'
# If this is true then the scene will not change when you save the game
SCENE_CHANGE = true # Changes Scene to map if true
MAX_SAVE_SLOT = 20 # Max save slots
SLOT_NAME = 'SLOT {id}'
# Name of the slot (show in save slots list), use {id} for slot ID
SAVE_FILE_NAME = 'Save {id}.rvdata'
# Save file name, you can also change its file type from .rvdata to other
# Use {id} for save slot ID
SAVE_PATH = '' # Path to store save file, e.g. 'Save/' or '' (for game folder)
SAVED_SLOT_ICON = 133 # Icon Index for saved slot
EMPTY_SLOT_ICON = 141 # Icon Index for empty slot
EMPTY_SLOT_TEXT = 'Vide' # Text to show for empty slot's data
DRAW_GOLD = true # Draw Gold
DRAW_PLAYTIME = true # Draw Playtime
DRAW_LOCATION = true # Draw location
DRAW_FACE = true # Draw Actor's face
DRAW_LEVEL = true # Draw Actor's level
DRAW_NAME = true # Draw Actor's name
DRAW_TEXT_GOLD = false # Draw the vocab::Gold text to the right of the number
PLAYTIME_TEXT = 'Temps de jeu: '
GOLD_TEXT = ' '
LOCATION_TEXT = 'Localisation: '
LV_TEXT = 'Lv. '
MAP_NAME_TEXT_SUB = %w{}
# Text that you want to remove from map name,
# e.g. %w{[LN] [DA]} will remove text '[LN]' and '[DA]' from map name
MAP_NO_NAME_LIST = [2] # ID of Map that will not show map name, e.g. [1,2,3]
MAP_NO_NAME = '???' # What you will use to call the map in the no name list
# This is a switch that can activate or deactivate maps from being displayed as
# MAP_NO_NAME. If it is off then maps will return back to normal.
MAP_NO_NAME_SWITCH = 95 # This switch has to be on for MAP_NO_NAME_LIST to work
MAP_BORDER = Color.new(0,0,0,200) # Map image border color (R,G,B,Opacity)
FACE_BORDER = Color.new(0,0,0,200) # Face border color
# Save confirmation window
SFC_Text_Confirm = 'Confirmer' # Text to confirm to save file
SFC_Text_Cancel = 'Annuler' # Text to cancel to save
SFC_Window_Width = 200 # Width of Confirmation Window
SFC_Window_X_Offset = 0 # Move Confirmation Window horizontally
SFC_Window_Y_Offset = 0 # Move Confirmation Window vertically
#-------------------------------------------------------------------------
# END NEO SAVE SYSTEM - SETUP (Edit below at your own risk)
#=========================================================================
#-------------------------------------------------------------
# Screenshot V2 by Andreas21 and Cybersam
#-------------------------------------------------------------
@screen = Win32API.new 'screenshot', 'Screenshot', %w(l l l l p l l), ''
@readini = Win32API.new 'kernel32', 'GetPrivateProfileStringA', %w(p p p p l p), 'l'
@findwindow = Win32API.new 'user32', 'FindWindowA', %w(p p), 'l'
module_function
def self.shot(file_name)
case IMAGE_FILETYPE
when '.bmp'; typid = 0
when '.jpg'; typid = 1
when '.png'; typid = 2
end
# Get Screenshot
filename = file_name + IMAGE_FILETYPE
@screen.call(0, 0, Graphics.width, Graphics.height, filename, self.handel,
typid)
end
def self.handel
game_name = "\0" * 256
@readini.call('Game','Title','',game_name,255,".\\Game.ini")
game_name.delete!("\0")
return @findwindow.call('RGSS Player',game_name)
end
end
class Scene_File < Scene_Base
include Wora_NSS
attr_reader :window_slotdetail
#-------------------------------------------------------------------------
# * Start processing
#-------------------------------------------------------------------------
def start
super
create_menu_background
if NSS_IMAGE_BG != ''
@bg = Sprite.new
@bg.bitmap = Cache.picture(NSS_IMAGE_BG)
@bg.opacity = NSS_IMAGE_BG_OPACITY
end
@help_window = Window_Help.new
command = []
(1..MAX_SAVE_SLOT).each do |i|
command << SLOT_NAME.clone.gsub!(/\{ID\}/i) { i.to_s }
end
@window_slotdetail = Window_NSS_SlotDetail.new
@window_slotlist = Window_SlotList.new(160, command)
@window_slotlist.y = @help_window.height
@window_slotlist.height = Graphics.height - @help_window.height
if OPACITY_DEFAULT == false
@help_window.opacity = NSS_WINDOW_OPACITY
@window_slotdetail.opacity = @window_slotlist.opacity = NSS_WINDOW_OPACITY
end
# Create Folder for Save file
if SAVE_PATH != ''
Dir.mkdir(SAVE_PATH) if !FileTest.directory?(SAVE_PATH)
end
if @saving
@index = $game_temp.last_file_index
@help_window.set_text(Vocab::SaveMessage)
else
@index = self.latest_file_index
@help_window.set_text(Vocab::LoadMessage)
(1..MAX_SAVE_SLOT).each do |i|
@window_slotlist.draw_item(i-1, false) if !@window_slotdetail.file_exist?(i)
end
end
@window_slotlist.index = @index
# Draw Information
@last_slot_index = @window_slotlist.index
@window_slotdetail.draw_data(@last_slot_index + 1)
end
#--------------------------------------------------------------------------
# * Termination Processing
#--------------------------------------------------------------------------
def terminate
super
dispose_menu_background
unless @bg.nil?
@bg.bitmap.dispose
@bg.dispose
end
@window_slotlist.dispose
@window_slotdetail.dispose
@help_window.dispose
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
super
if !@confirm_window.nil?
@confirm_window.update
if Input.trigger?(Input::C)
if @confirm_window.index == 0
determine_savefile
@confirm_window.dispose
@confirm_window = nil
else
Sound.play_cancel
@confirm_window.dispose
@confirm_window = nil
end
elsif Input.trigger?(Input::B)
Sound.play_cancel
@confirm_window.dispose
@confirm_window = nil
end
else
update_menu_background
@window_slotlist.update
if @window_slotlist.index != @last_slot_index
@last_slot_index = @window_slotlist.index
@window_slotdetail.draw_data(@last_slot_index + 1)
end
@help_window.update
update_savefile_selection
end
end
#--------------------------------------------------------------------------
# * Update Save File Selection
#--------------------------------------------------------------------------
def update_savefile_selection
if Input.trigger?(Input::C)
if @saving and @window_slotdetail.file_exist?(@last_slot_index + 1)
Sound.play_decision
text1 = SFC_Text_Confirm
text2 = SFC_Text_Cancel
@confirm_window = Window_Command.new(SFC_Window_Width,[text1,text2])
@confirm_window.x = ((544 - @confirm_window.width) / 2) + SFC_Window_X_Offset
@confirm_window.y = ((416 - @confirm_window.height) / 2) + SFC_Window_Y_Offset
else
determine_savefile
end
elsif Input.trigger?(Input::B)
Sound.play_cancel
return_scene
end
end
#--------------------------------------------------------------------------
# * Execute Save
#--------------------------------------------------------------------------
def do_save
if SCREENSHOT_IMAGE
File.rename(SAVE_PATH + 'temp' + IMAGE_FILETYPE,
make_filename(@last_slot_index).gsub(/\..*$/){ '_ss' } + IMAGE_FILETYPE)
end
file = File.open(make_filename(@last_slot_index), "wb")
write_save_data(file)
file.close
if SCENE_CHANGE
$scene = Scene_Map.new
else
$scene = Scene_File.new(true, false, false)
end
end
#--------------------------------------------------------------------------
# * Execute Load
#--------------------------------------------------------------------------
def do_load
file = File.open(make_filename(@last_slot_index), "rb")
read_save_data(file)
file.close
$scene = Scene_Map.new
RPG::BGM.fade(1500)
Graphics.fadeout(60)
Graphics.wait(40)
@last_bgm.play
@last_bgs.play
end
#--------------------------------------------------------------------------
# * Confirm Save File
#--------------------------------------------------------------------------
def determine_savefile
if @saving
Sound.play_save
do_save
else
if @window_slotdetail.file_exist?(@last_slot_index + 1)
Sound.play_load
do_load
else
Sound.play_buzzer
return
end
end
$game_temp.last_file_index = @last_slot_index
end
#--------------------------------------------------------------------------
# * Create Filename
# file_index : save file index (0-3)
#--------------------------------------------------------------------------
def make_filename(file_index)
return SAVE_PATH + SAVE_FILE_NAME.gsub(/\{ID\}/i) { (file_index + 1).to_s }
end
#--------------------------------------------------------------------------
# * Select File With Newest Timestamp
#--------------------------------------------------------------------------
def latest_file_index
latest_index = 0
latest_time = Time.at(0)
(1..MAX_SAVE_SLOT).each do |i|
file_name = make_filename(i - 1)
next if !@window_slotdetail.file_exist?(i)
file_time = File.mtime(file_name)
if file_time > latest_time
latest_time = file_time
latest_index = i - 1
end
end
return latest_index
end
class Window_SlotList < Window_Command
#--------------------------------------------------------------------------
# * Draw Item
#--------------------------------------------------------------------------
def draw_item(index, enabled = true)
rect = item_rect(index)
rect.x += 4
rect.width -= 8
icon_index = 0
self.contents.clear_rect(rect)
if $scene.window_slotdetail.file_exist?(index + 1)
icon_index = Wora_NSS::SAVED_SLOT_ICON
else
icon_index = Wora_NSS::EMPTY_SLOT_ICON
end
if !icon_index.nil?
rect.x -= 4
draw_icon(icon_index, rect.x, rect.y, enabled) # Draw Icon
rect.x += 26
rect.width -= 20
end
self.contents.clear_rect(rect)
self.contents.font.color = normal_color
self.contents.font.color.alpha = enabled ? 255 : 128
self.contents.draw_text(rect, @commands[index])
end
def cursor_down(wrap = false)
if @index < @item_max - 1 or wrap
@index = (@index + 1) % @item_max
end
end
def cursor_up(wrap = false)
if @index > 0 or wrap
@index = (@index - 1 + @item_max) % @item_max
end
end
end
class Window_NSS_SlotDetail < Window_Base
include Wora_NSS
def initialize
super(160, 56, 384, 360)
@data = []
@exist_list = []
@bitmap_list = {}
@map_name = []
end
def dispose
dispose_tilemap
super
end
def draw_data(slot_id)
contents.clear # 352, 328
dispose_tilemap
load_save_data(slot_id) if @data[slot_id].nil?
if @exist_list[slot_id]
save_data = @data[slot_id]
# DRAW SCREENSHOT
contents.fill_rect(0,30,352,160, MAP_BORDER)
if SCREENSHOT_IMAGE
if save_data['ss']
bitmap = get_bitmap(save_data['ss_path'])
rect = Rect.new((Graphics.width-348)/2,(Graphics.height-156)/2,348,156)
contents.blt(2,32,bitmap,rect)
end
else
if SWAP_TILE and $game_switches[SWAP_TILE_SWITCH]
create_swaptilemap(save_data['gamemap'].data, save_data['gamemap'].display_x,
save_data['gamemap'].display_y)
else
create_tilemap(save_data['gamemap'].data, save_data['gamemap'].display_x,
save_data['gamemap'].display_y)
end
end
if DRAW_GOLD
# DRAW GOLD
gold_textsize = contents.text_size(save_data['gamepar'].gold).width
goldt_textsize = contents.text_size(GOLD_TEXT).width
contents.font.color = system_color
contents.draw_text(0, 0, goldt_textsize, WLH, GOLD_TEXT)
contents.font.color = normal_color
contents.draw_text(goldt_textsize, 0, gold_textsize, WLH, save_data['gamepar'].gold)
if DRAW_TEXT_GOLD == false
gold_textsize = 0
goldt_textsize = 0
else
contents.draw_text(goldt_textsize + gold_textsize, 0, 200, WLH, Vocab::gold)
end
end
if DRAW_PLAYTIME
# DRAW PLAYTIME
hour = save_data['total_sec'] / 60 / 60
min = save_data['total_sec'] / 60 % 60
sec = save_data['total_sec'] % 60
time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
pt_textsize = contents.text_size(PLAYTIME_TEXT).width
ts_textsize = contents.text_size(time_string).width
contents.font.color = system_color
contents.draw_text(contents.width - ts_textsize - pt_textsize, 0,
pt_textsize, WLH, PLAYTIME_TEXT)
contents.draw_text(goldt_textsize + gold_textsize,0,200,WLH, Vocab::gold)
contents.font.color = normal_color
contents.draw_text(0, 0, contents.width, WLH, time_string, 2)
end
if DRAW_LOCATION
# DRAW LOCATION
lc_textsize = contents.text_size(LOCATION_TEXT).width
mn_textsize = contents.text_size(save_data['map_name']).width
contents.font.color = system_color
contents.draw_text(0, 190, contents.width, WLH, LOCATION_TEXT)
contents.font.color = normal_color
contents.draw_text(lc_textsize, 190, contents.width, WLH, save_data['map_name'])
end
# DRAW FACE & Level & Name
save_data['gamepar'].members.each_index do |i|
actor = save_data['gameactor'][save_data['gamepar'].members[i].id]
face_x_base = (i*80) + (i*8)
face_y_base = 216
lvn_y_plus = 10
lv_textsize = contents.text_size(actor.level).width
lvt_textsize = contents.text_size(LV_TEXT).width
if DRAW_FACE
# Draw Face
contents.fill_rect(face_x_base, face_y_base, 84, 84, FACE_BORDER)
draw_face(actor.face_name, actor.face_index, face_x_base + 2,
face_y_base + 2, 80)
end
if DRAW_LEVEL
# Draw Level
contents.font.color = system_color
contents.draw_text(face_x_base + 2 + 80 - lv_textsize - lvt_textsize,
face_y_base + 2 + 80 - WLH + lvn_y_plus, lvt_textsize, WLH, LV_TEXT)
contents.font.color = normal_color
contents.draw_text(face_x_base + 2 + 80 - lv_textsize,
face_y_base + 2 + 80 - WLH + lvn_y_plus, lv_textsize, WLH, actor.level)
end
if DRAW_NAME
# Draw Name
contents.draw_text(face_x_base, face_y_base + 2 + 80 + lvn_y_plus - 6, 84,
WLH, actor.name, 1)
end
end
else
contents.draw_text(0,0, contents.width, contents.height - WLH, EMPTY_SLOT_TEXT, 1)
end
end
def load_save_data(slot_id)
file_name = make_filename(slot_id)
if file_exist?(slot_id) or FileTest.exist?(file_name)
@exist_list[slot_id] = true
@data[slot_id] = {}
# Start load data
file = File.open(file_name, "r")
@data[slot_id]['time'] = file.mtime
@data[slot_id]['char'] = Marshal.load(file)
@data[slot_id]['frame'] = Marshal.load(file)
@data[slot_id]['last_bgm'] = Marshal.load(file)
@data[slot_id]['last_bgs'] = Marshal.load(file)
@data[slot_id]['gamesys'] = Marshal.load(file)
@data[slot_id]['gamemes'] = Marshal.load(file)
@data[slot_id]['gameswi'] = Marshal.load(file)
@data[slot_id]['gamevar'] = Marshal.load(file)
@data[slot_id]['gameselfvar'] = Marshal.load(file)
@data[slot_id]['gameactor'] = Marshal.load(file)
@data[slot_id]['gamepar'] = Marshal.load(file)
@data[slot_id]['gametro'] = Marshal.load(file)
@data[slot_id]['gamemap'] = Marshal.load(file)
@data[slot_id]['total_sec'] = @data[slot_id]['frame'] / Graphics.frame_rate
if SCREENSHOT_IMAGE
@data[slot_id]['ss_path'] = file_name.gsub(/\..*$/){'_ss'} + IMAGE_FILETYPE
@data[slot_id]['ss'] = FileTest.exist?(@data[slot_id]['ss_path'])
end
@data[slot_id]['map_name'] = get_mapname(@data[slot_id]['gamemap'].map_id)
file.close
else
@exist_list[slot_id] = false
@data[slot_id] = -1
end
end
def make_filename(file_index)
return SAVE_PATH + SAVE_FILE_NAME.gsub(/\{ID\}/i) { (file_index).to_s }
end
def file_exist?(slot_id)
return @exist_list[slot_id] if !@exist_list[slot_id].nil?
@exist_list[slot_id] = FileTest.exist?(make_filename(slot_id))
return @exist_list[slot_id]
end
def get_bitmap(path)
if !@bitmap_list.include?(path)
@bitmap_list[path] = Bitmap.new(path)
end
return @bitmap_list[path]
end
def get_mapname(map_id)
if @map_data.nil?
@map_data = load_data("Data/MapInfos.rvdata")
end
if @map_name[map_id].nil?
if MAP_NO_NAME_LIST.include?(map_id) and $game_switches[MAP_NO_NAME_SWITCH]
@map_name[map_id] = MAP_NO_NAME
else
@map_name[map_id] = @map_data[map_id].name
end
MAP_NAME_TEXT_SUB.each_index do |i|
@map_name[map_id].sub!(MAP_NAME_TEXT_SUB[i], '')
@mapname = @map_name[map_id]
end
end
return @map_name[map_id]
end
def create_tilemap(map_data, ox, oy)
@viewport = Viewport.new(self.x + 2 + 16, self.y + 32 + 16, 348,156)
@viewport.z = self.z
@tilemap = Tilemap.new(@viewport)
@tilemap.bitmaps[0] = Cache.system("TileA1")
@tilemap.bitmaps[1] = Cache.system("TileA2")
@tilemap.bitmaps[2] = Cache.system("TileA3")
@tilemap.bitmaps[3] = Cache.system("TileA4")
@tilemap.bitmaps[4] = Cache.system("TileA5")
@tilemap.bitmaps[5] = Cache.system("TileB")
@tilemap.bitmaps[6] = Cache.system("TileC")
@tilemap.bitmaps[7] = Cache.system("TileD")
@tilemap.bitmaps[8] = Cache.system("TileE")
@tilemap.map_data = map_data
@tilemap.ox = ox / 8 + 99
@tilemap.oy = oy / 8 + 90
end
def create_swaptilemap(map_data, ox, oy)
@viewport = Viewport.new(self.x + 2 + 16, self.y + 32 + 16, 348,156)
@viewport.z = self.z
@tilemap = Tilemap.new(@viewport)
tile1 = Cache_Swap_Tiles.swap($tileA1 + ".png") rescue nil
tile2 = Cache_Swap_Tiles.swap($tileA2 + ".png") rescue nil
tile3 = Cache_Swap_Tiles.swap($tileA3 + ".png") rescue nil
tile4 = Cache_Swap_Tiles.swap($tileA4 + ".png") rescue nil
tile5 = Cache_Swap_Tiles.swap($tileA5 + ".png") rescue nil
tile6 = Cache_Swap_Tiles.swap($tileB + ".png") rescue nil
tile7 = Cache_Swap_Tiles.swap($tileC + ".png") rescue nil
tile8 = Cache_Swap_Tiles.swap($tileD + ".png") rescue nil
tile9 = Cache_Swap_Tiles.swap($tileE + ".png") rescue nil
if $tileA1 != nil
@tilemap.bitmaps[0] = tile1
else
@tilemap.bitmaps[0] = Cache.system("TileA1")
end
if $tileA2 != nil
@tilemap.bitmaps[1] = tile2
else
@tilemap.bitmaps[1] = Cache.system("TileA2")
end
if $tileA3 != nil
@tilemap.bitmaps[2] = tile3
else
@tilemap.bitmaps[2] = Cache.system("TileA3")
end
if $tileA4 != nil
@tilemap.bitmaps[3] = tile4
else
@tilemap.bitmaps[3] = Cache.system("TileA4")
end
if $tileA5 != nil
@tilemap.bitmaps[4] = tile5
else
@tilemap.bitmaps[4] = Cache.system("TileA5")
end
if $tileB != nil
@tilemap.bitmaps[5] = tile6
else
@tilemap.bitmaps[5] = Cache.system("TileB")
end
if $tileC != nil
@tilemap.bitmaps[6] = tile7
else
@tilemap.bitmaps[6] = Cache.system("TileC")
end
if $tileD != nil
@tilemap.bitmaps[7] = tile8
else
@tilemap.bitmaps[7] = Cache.system("TileD")
end
if $tileE != nil
@tilemap.bitmaps[8] = tile9
else
@tilemap.bitmaps[8] = Cache.system("TileE")
end
@tilemap.map_data = map_data
@tilemap.ox = ox / 8 + 99
@tilemap.oy = oy / 8 + 90
end
def dispose_tilemap
unless @tilemap.nil?
@tilemap.dispose
@tilemap = nil
end
end
end
end
class Scene_Title < Scene_Base
def check_continue
file_name = Wora_NSS::SAVE_PATH + Wora_NSS::SAVE_FILE_NAME.gsub(/\{ID\}/i) { '*' }
@continue_enabled = (Dir.glob(file_name).size > 0)
end
end
class Scene_Map < Scene_Base
alias wora_nss_scemap_ter terminate
def terminate
Wora_NSS.shot(Wora_NSS::SAVE_PATH + 'temp')
wora_nss_scemap_ter
end
end
#======================================================================
# END - NEO SAVE SYSTEM by Woratana
#======================================================================
# Patch de modification du NeoSaveMachin de Wortanouille
# Par Sasuke (http://funkywork.blogspot.com)
class Scene_File < Scene_Base
#--------------------------------------------------------------------------
# * Execute Save
#--------------------------------------------------------------------------
def do_save
if SCREENSHOT_IMAGE
File.rename(SAVE_PATH + 'temp' + IMAGE_FILETYPE,
make_filename(@last_slot_index).gsub(/\..*$/){ '_ss' } + IMAGE_FILETYPE)
end
file = File.open(make_filename(@last_slot_index), "wb")
write_save_data(file)
file.close
$scene = Scene_Map.new
end
end |
C'est un script qui permet d'avoir 20 slots et une image du lieu de sauvegarde.
EDIT Zeus : Ah, bah je mettrai de quoi installer les codecs dans les fichiers du jeu alors. Ou j'essaierai de faire un installeur.
|
Posté dans Forum - [VX] Recherche d'un script pour reprendre une musique après un combat. |
LittleGamer -
posté le 10/07/2014 à 15:29:11. (414 messages postés) |
| Y a encore plus de scripts d'ajoutés en fait ^^" ils sont sur des points assez variés. ça bug pas vraiment, le seul qui pose parfois problème c'est le menu de fin de combat qui reste affiché sur la map dans quelques cas rares. Apparemment c'est un problème propre au script, pas de comptabilité.
Je test avec ça
EDIT : ça fonctionne quasiment ! Le problème là, c'est que la musique de la map reprend en même temps que le ME de victoire, et les deux sont joués simultanément du coup. Il y a moyen de régler ça ?
|
Posté dans Forum - [VX] Recherche d'un script pour reprendre une musique après un combat. |
LittleGamer -
posté le 10/07/2014 à 15:08:58. (414 messages postés) |
| Oui, mais à la base rien sur l'audio...
Le fait que j'utilise le SBS peut-être ? Je présume que c'est soit un script sur les combats, soit sur les musiques...
Alors si c'est ça, j'ai :
-Le SBS
-Un script qui stoppe le ME de victoire après le combat :
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
| #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
#_/ ◆ Forced Victory ME Stop - KGC_ForceStopVictoryME ◆ VX ◆
#_/ ◇ Last update : 2008/03/02 ◇
#_/ ◆ Translated by Mr. Anonymous ◆
#_/-----------------------------------------------------------------------------
#_/ Forces Battle Victory ME (Musical Effect) to stop when the scene returns
#_/ to the map.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
#==============================================================================#
# ★ Customization ★ #
#==============================================================================#
module KGC
module ForceStopVictoryME
# ◆ Fade out time (milli-second)
# If set to 0, the ME stops instantly upon scene change to map.
FADE_TIME = 1500
end
end
#------------------------------------------------------------------------------#
$imported = {} if $imported == nil
$imported["ForceStopVictoryME"] = true
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ● End Battle
# result : 結果 (0:Victory 1:Escape 2:Defeat)
#--------------------------------------------------------------------------
alias battle_end_KGC_ForceStopVictoryME battle_end
def battle_end(result)
battle_end_KGC_ForceStopVictoryME(result)
return if result != 0
@@_victory_me_thread = Thread.new {
time = KGC::ForceStopVictoryME::FADE_TIME
RPG::ME.fade(time) # Start ME Fade
sleep(time / 1000.0) # Wait until the fade is done.
RPG::ME.stop # Stop ME
}
end
end
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_ |
- Un script qui permet demettre la même musique de combat que la map si un interrupteur est enclenché :
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
| ##################################
#Musique Battle-Map sur Rpg Maker Vx
#par Monos
#
#Version 1.1 du 8 fevrier 2012
##################################
=begin
Permet d'avoir dans les combats la musique
de la carte et pas de musique de victoire.
=end
##############Configuration#########
=begin
Configuration : Changez le nombre par celui que vous voulez.
Quand l'interrupteur portant cette id est activé, la musique de combat est la même que celui de la map.
Et il n'y pas de musique de victoire.
=end
Id_switch_battle_me= 100
##########Script####################
class Scene_Map < Scene_Base
alias ancien_call_battle call_battle
def call_battle
@spriteset.update
Graphics.update
$game_player.make_encounter_count
$game_player.straighten
$game_temp.map_bgm = RPG::BGM.last
$game_temp.map_bgs = RPG::BGS.last
if $game_switches[Id_switch_battle_me]==false # Condition
RPG::BGM.stop
RPG::BGS.stop
Sound.play_battle_start
$game_system.battle_bgm.play
else
Sound.play_battle_start
end
$game_temp.next_scene = nil
$scene = Scene_Battle.new
end
end
class Scene_Battle < Scene_Base
alias ancien_process_victory process_victory
def process_victory
@info_viewport.visible = false
@message_window.visible = true
if $game_switches[Id_switch_battle_me]==false # Condition
RPG::BGM.stop
$game_system.battle_end_me.play
unless $BTEST
$game_temp.map_bgm.play
$game_temp.map_bgs.play
end
end
display_exp_and_gold
display_drop_items
display_level_up
battle_end(0)
end
end |
- Un menu de fin de combat :
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
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
| #===============================================================
# ● [VX] ◦ Rapport de combat V3
#--------------------------------------------------------------
# ◦ Par Blockade
# ◦ http://rpg-maker-vx.bbactif.com/forum.htm
# ◦ Crée le 06/04/2009
# ◦ Version 3.7
# ◦ Remerciment à Woratana, Moghunter
#--------------------------------------------------------------
#===============================================================
#===============================================================
# Notes de version :
#---------------------------------------------------------------
# ~ Version 1.0 :
# - Création du script
# ~ Version 2.0 :
# - Interface revue
# - Regroupement et classement des objets gagnés
# - Ajouts d'options de personalisations
# ~ Version 3.0 :
# - Le script distibue l'argent gagné correctement.
# - Module de configuration entiérement revu
# - Compatibilité améliorée
# - Pop-up lors d'un level up qui affiche les caractéristiques
# - Affiche les sorts gagnés
# ~ Version 3.5
# - Meilleur affichage des caractéristiques quand le héros gagne un niveau
# - Affichage du temps de combat
# ~ Version 3.6
# - Mise à la norme de mes scripts
# - Compatible avec 3 systèmes de combat : Combat VX, SBS, SBS avec ATB
# - Détecte automatiquement le SBS
# ~ Version 3.7
# - Correction d'un bug avec le SBS avec ATB, le rapport d'affichais deux fois
#===============================================================
#===============================================================
# Utilisation :
# Plug & Play, inserez le au dessus de Main !
# Jettez un coup d'oeil au module de configuration !
#===============================================================
module Blockade
module Config_Report
#===============================================================
# Blockade::Config_Report Début du Module de configuration
#===============================================================
#-------------------------------------------
# >> Configuration du texte
#--------------------------------------------
# > Texte contenu dans l'help_window
Text_help_window = "Rapport de Combat"
# > Alignement du texte (0:Gauche, 1:Milieu, 2: Droite)
Alignement_texte = 0
# > Texte pour le temps de combat :
Texte_temps_combat = "Temps : "
# > Alignement du Texte_temps_combat (0:Gauche, 1:Milieu, 2: Droite)
Alignement_texte_temps_combat = 2
# > Expérience (abrégée)
Exp = "Exp : "
# > Monnaie (abrégée)
Gold = "Gils : "
# > Niveau (abrégé)
Lvl = "Niv. "
# > Dans la fenêtre de drop
Drop_nil = "Aucun objet trouvé." # Si pas d'objet à la fin du combat
Drop_objets = "Objets trouvés :" # Si des objets sont trouvées
Drop_armures = "Armures trouvées :" # Si des armures sont trouvées
Drop_armes = "Armes trouvées :" # Si des armes sont trouvées
# > Dans la fenêtre de changement de niveau
Texte_hp = "HP " # Texte pour les Hp
Texte_mp = "MP " # Texte pour les Mp
Texte_atk = "Attaque " # Texte pour l'attaque
Texte_def = "Défense " # Texte pour la défense
Texte_int = "Intelligence " # Texte pour l'intelligence
Texte_agi = "Agilité " # Texte pour l'agilité
# > Couleur des noms de caracteristiques
Couleur_nom_carac = 4
# > Dans la fenêtre des nouveaux sorts
Couleur_new_skill = 4 # Couleur de Texte_new_skill
Texte_new_skill = "Nouveaux sorts : " # Texte pour introduire les nouveaux sorts
#-------------------------------------------
#-------------------------------------------
# >> Configuration des icones
#--------------------------------------------
# > Dans la fenêtre de changement de niveau
Icone_hp = 99 # Id de l'icone pour les PV
Icone_mp = 100 # Id de l'icone pour les PM
Icone_atk = 2 # Id de l'icone pour l'attaque
Icone_def = 52 # Id de l'icone pour la défense
Icone_int = 21 # Id de l'icone pour l'intelligence
Icone_agi = 48 # Id de l'icone pour l'agilité
# > Dans la fenêtre des sorts
Icone_new_skill = 130
#-------------------------------------------
#-------------------------------------------
# >> Configuration des sons
#--------------------------------------------
# > Quand un héros gagne un niveau
Lvl_up_sound = "Recovery" # Nom du SE
Lvl_up_volume = 80 # Volume entre 50-150
Lvl_up_tempo = 100 # Tempo entre 50-150
#===============================================================
# Blockade::Config_Report Fin du Module de configuration
#===============================================================
end
end
$imported = {} if $imported == nil
$imported["Rapport_CombatV3"] = true
#==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
# Scene qui gère les combats
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# * Prend le temps au début du combat
#--------------------------------------------------------------------------
alias start_battle_block start
def start
start_battle_block
@temps = Time.now
end
#--------------------------------------------------------------------------
# * Enpêche le rapport de s'afficher 2 fois (ATB fix)
#--------------------------------------------------------------------------
alias judge_win_loss_block judge_win_loss unless $@
def judge_win_loss
if defined?(::N02)
return unless @fin_combat.nil?
end
judge_win_loss_block
end
#--------------------------------------------------------------------------
# * Processus de victoire
#--------------------------------------------------------------------------
def process_victory
if defined?(::N01)
@status_window.visible = true
@message_window.visible = false
# ボスコラプスはウエイトを長く挟む
for enemy in $game_troop.members
break boss_wait = true if enemy.collapse_type == 3
end
wait(440) if boss_wait
wait(N01::WIN_WAIT) unless boss_wait
# 動けないアクターを除いて勝利アクション
for actor in $game_party.members
unless actor.restriction >= 4
@spriteset.set_action(true, actor.index,actor.win)
end
end
end
@info_viewport.visible = false
@message_window.visible = false
RPG::BGM.stop
$game_system.battle_end_me.play
unless $BTEST
$game_temp.map_bgm.play
$game_temp.map_bgs.play
end
new_temps = Time.now
temps = new_temps- @temps
if temps >= 60
@temps_combat = (temps / 60).truncate
@suffixe = @temps_combat > 1 ? "minutes" : "minute"
else
@temps_combat = temps.truncate
@suffixe = "secondes"
end
@exp =$game_troop.exp_total
@gold = $game_troop.gold_total
@drop = $game_troop.make_drop_items
$game_party.gain_gold(@gold)
ini_variable
Graphics.fadeout(30)
afficher_rapport
Graphics.fadein(20)
end
#--------------------------------------------------------------------------
# * Initialise les variables
#--------------------------------------------------------------------------
def ini_variable
@fin_combat = true
@actors_lvl_up = []
@num_passage= 0
end
#--------------------------------------------------------------------------
# * Afficher le rapport de combat
#--------------------------------------------------------------------------
def afficher_rapport
@help_window = Window_Help_Combat.new
@heros_window = []
y=55 ; i=0
for actor in $game_party.members
@heros_window[i] = Heros_Window.new(actor,y,@exp)
@actors_lvl_up.push([actor,@heros_window[i].get_old_carac,@heros_window[i].get_new_carac,@heros_window[i].get_new_skills]) if @heros_window[i].level_up
y +=74; i += 1
end
@gold_exp_window = Gold_Exp_Window.new(@gold,@exp)
@butin_window = Drop_Window.new(@drop)
@help_window.set_text(Blockade::Config_Report::Text_help_window,Blockade::Config_Report::Alignement_texte,Blockade::Config_Report::Texte_temps_combat + "#{@temps_combat} #{@suffixe} ",Blockade::Config_Report::Alignement_texte_temps_combat)
if @actors_lvl_up != []
RPG::SE.new(Blockade::Config_Report::Lvl_up_sound, Blockade::Config_Report::Lvl_up_volume, Blockade::Config_Report::Lvl_up_tempo).play
@actor_window = Carac_Window.new(@actors_lvl_up[@num_passage])
new_skill = @actors_lvl_up[@num_passage]
@actor_window2 = Skills_Window.new(@actors_lvl_up[@num_passage]) if @actors_lvl_up[@num_passage][3].size > 0
end
end
#--------------------------------------------------------------------------
# * Update
#--------------------------------------------------------------------------
alias update_block update unless $@
def update
if @fin_combat != true
update_block
else
# Si c'est la fin du combat
@help_window.update
@message_window.update
for i in 0...@heros_window.size
@heros_window[i].update
end
if @actors_lvl_up != []
@actor_window.update
@actor_window2.update if @actors_lvl_up[@num_passage][3].size > 0 # if @heros_window[@num_passage].get_new_skills.size > 0
if Input.trigger?(Input::C)
@num_passage += 1
@actor_window.dispose
@actor_window2.visible = false if @actor_window2 != nil
if @num_passage + 1 > @actors_lvl_up.size
Input.update
@actors_lvl_up = []
end # fin @num_passage
if @actors_lvl_up != []
RPG::SE.new(Blockade::Config_Report::Lvl_up_sound, Blockade::Config_Report::Lvl_up_volume, Blockade::Config_Report::Lvl_up_tempo).play
@actor_window = Carac_Window.new(@actors_lvl_up[@num_passage])
@actor_window2 = Skills_Window.new(@actors_lvl_up[@num_passage]) if @actors_lvl_up[@num_passage][3].size >0 # if @heros_window[@num_passage].get_new_skills.size > 0
end # fin @actors_lvl_up
end # fin input
else # si pas de lvl up
end
# Si on appuye sur Entrée
if Input.trigger?(Input::C) and @actors_lvl_up == []
@help_window.dispose
for i in 0...@heros_window.size
@heros_window[i].dispose
end
@gold_exp_window.dispose
@butin_window.dispose
if $BTEST
$scene = nil
else
Graphics.fadeout(30)
battle_end(0)
suppr_variables
end
end
end
end
#--------------------------------------------------------------------------
# * Reinitialise les variables
#--------------------------------------------------------------------------
def suppr_variables
@fin_combat = false
@actors_lvl_up = []
end
end
#==============================================================================
# ** Window_Help_Combat
#------------------------------------------------------------------------------
# This window shows skill and item explanations along with actor status.
#==============================================================================
class Window_Help_Combat < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 0, 544, WLH + 32)
end
#--------------------------------------------------------------------------
# * Set Text
# text : character string displayed in window
# align : alignment (0..flush left, 1..center, 2..flush right)
#--------------------------------------------------------------------------
def set_text(text1, align1,text2,align2)
if text1 != @text1 or align1 != @align1 or text2 != @text2 or align2 != @align2
self.contents.clear
self.contents.font.color = normal_color
self.contents.draw_text(4, 0, self.width - 40, WLH, text1, align1)
self.contents.draw_text(4, 0, self.width - 40, WLH, text2, align2)
@text1 = text1 ; @align = align2
@text2 = text2 ; @align2 = align2
end
end
end
#==============================================================================
# ** Skills_Window
#------------------------------------------------------------------------------
# Affiche les sorts
#==============================================================================
class Skills_Window < Window_Base
def initialize(actor_info)
@new_skills = actor_info[3]
super(300,58,244,230)
afficher_sorts
end
#--------------------------------------------------------------------------
# * Affiche les nouveaux sorts
#--------------------------------------------------------------------------
def afficher_sorts
self.contents.font.color = text_color(Blockade::Config_Report::Couleur_new_skill)
self.contents.draw_text(25,0, 200, WLH, Blockade::Config_Report::Texte_new_skill)
draw_icon(Blockade::Config_Report::Icone_new_skill,0,0)
y = 25
for skills in @new_skills
draw_item_name(skills,0,y)
y += 25
end
end
end
#==============================================================================
# ** Carac_Window
#------------------------------------------------------------------------------
# Affiche les caractérisqtiques
#==============================================================================
class Carac_Window < Window_Base
def initialize(actor)
@actor = actor[0]
@old_carac = actor[1]
@new_carac = actor[2]
@new_skills = actor[3]
x = 100
x = 0 if @new_skills.size > 0
super(x,58,300,230)
afficher_info_actor
afficher_icone
afficher_carac
end
#--------------------------------------------------------------------------
# * Affiche le nom et le niveau du héros
#--------------------------------------------------------------------------
def afficher_info_actor
draw_character(@actor.character_name, @actor.character_index, 20, 40)
self.contents.draw_text(40,0, 200, WLH, @actor.name)
self.contents.draw_text(40,20,200,WLH,Blockade::Config_Report::Lvl + @old_carac[0].to_s + " > " +
Blockade::Config_Report::Lvl + @new_carac[0].to_s)
end
#--------------------------------------------------------------------------
# * Affiche les icones
#--------------------------------------------------------------------------
def afficher_icone
draw_icon(Blockade::Config_Report::Icone_hp,0,50)
draw_icon(Blockade::Config_Report::Icone_mp ,0,75)
draw_icon(Blockade::Config_Report::Icone_atk ,0,100)
draw_icon(Blockade::Config_Report::Icone_def,0,125)
draw_icon(Blockade::Config_Report::Icone_int,0,150)
draw_icon(Blockade::Config_Report::Icone_agi,0,175)
end
#--------------------------------------------------------------------------
# * Affiche les caractéristiques
#--------------------------------------------------------------------------
def afficher_carac
self.contents.font.color = text_color(Blockade::Config_Report::Couleur_nom_carac)
self.contents.draw_text(25,50, 150, WLH, Blockade::Config_Report::Texte_hp)
self.contents.draw_text(25,75, 150, WLH, Blockade::Config_Report::Texte_mp)
self.contents.draw_text(25,100, 150, WLH, Blockade::Config_Report::Texte_atk)
self.contents.draw_text(25,125, 150, WLH, Blockade::Config_Report::Texte_def)
self.contents.draw_text(25,150, 150, WLH, Blockade::Config_Report::Texte_int)
self.contents.draw_text(25,175, 150, WLH, Blockade::Config_Report::Texte_agi)
self.contents.font.color = normal_color
y = 50
for i in 1...@new_carac.size
self.contents.draw_text(150,y, 105, WLH, @old_carac[i],0)
self.contents.draw_text(150,y, 110, WLH, "> ",1)
self.contents.font.color = power_up_color if @old_carac[i] < @new_carac[i]
self.contents.font.color.alpha = 128 if @old_carac[i] == @new_carac[i]
self.contents.draw_text(150,y, 105, WLH, @new_carac[i],2)
self.contents.font.color.alpha = 255
self.contents.font.color = normal_color
y +=25
end
end
end
#==============================================================================
# ** Gold_Exp_Window
#------------------------------------------------------------------------------
# Affiche l'argent et l'exp obtenus
#==============================================================================
class Gold_Exp_Window < Window_Base
def initialize(gold,exp)
super(0,350,200,65)
self.contents.draw_text(0,-6,200,WLH,Blockade::Config_Report::Exp + exp.to_s)
self.contents.draw_text(0,14,200,WLH,Blockade::Config_Report::Gold + gold.to_s)
end
end
#==============================================================================
# ** Heros_Window
#------------------------------------------------------------------------------
# Affiche les informations d'exp sur les héros
#==============================================================================
class Heros_Window < Window_Base
def initialize(actor,y,exp)
super(0,y,200,75)
@actor = actor
@exp = exp
afficher_info
end
#--------------------------------------------------------------------------
# * Affiche les informations
#--------------------------------------------------------------------------
def afficher_info
@level_up = false
last_lvl = @actor.level
last_hp = @actor.maxhp
last_mp = @actor.maxmp
last_atk = @actor.atk
last_def = @actor.def
last_spi = @actor.spi
last_agi = @actor.agi
last_skill = @actor.skills
@actor.gain_exp(@exp,false)
if @actor.level > last_lvl
@level_up = true
@old_carac = [last_lvl,last_hp,last_mp, last_atk, last_def, last_spi, last_agi]
@new_carac =[@actor.level, @actor.maxhp,@actor.maxmp,@actor.atk,@actor.def,@actor.spi,@actor.agi]
@new_skills = @actor.skills - last_skill
end
draw_character(@actor.character_name, @actor.character_index, 20, 40)
draw_actor_exp_meter(@actor,40,20)
self.contents.draw_text(40,0, 60, WLH, @actor.name)
self.contents.draw_text(110,0,60,WLH,Blockade::Config_Report::Lvl + @actor.level.to_s)
end
#--------------------------------------------------------------------------
# * Renvoie les anciennes caractérisques
#--------------------------------------------------------------------------
def get_old_carac
return @old_carac
end
#--------------------------------------------------------------------------
# * Renvoie les nouvelles caractérisques
#--------------------------------------------------------------------------
def get_new_carac
return @new_carac
end
#--------------------------------------------------------------------------
# * Renvoie les nouveaux sorts
#--------------------------------------------------------------------------
def get_new_skills
if @new_skills.size > 0
return @new_skills
else
return []
end
end
#--------------------------------------------------------------------------
# * Determine si le heros a pris un ou plusieurs niveaux
#--------------------------------------------------------------------------
def level_up
return @level_up
end
#--------------------------------------------------------------------------
# * Couleur 1 de la barre
#--------------------------------------------------------------------------
def exp_gauge_color1
return text_color(30)
end
#--------------------------------------------------------------------------
# * Couleur 1 de la barre
#--------------------------------------------------------------------------
def exp_gauge_color2
return text_color(31)
end
#--------------------------------------------------------------------------
# * Dessine la barre d'exp
#-------------------------------------------------------------------------
def draw_actor_exp_meter(actor, x, y, width = 100)
if actor.next_exp != 0
exp = actor.now_exp
else
exp = 1
end
gw = width * exp / [actor.next_exp, 1].max
gc1 = exp_gauge_color1
gc2 = exp_gauge_color2
self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 30, WLH, "Exp")
self.contents.font.color = normal_color
xr = x + width
self.contents.draw_text(xr - 60, y, 60, WLH, actor.next_rest_exp_s, 2)
end
end
#==============================================================================
# ** Drop_Window
#------------------------------------------------------------------------------
# Affiche les objets obtenus
#==============================================================================
class Drop_Window < Window_Base
def initialize(drop)
super(200,55,344,360)
@drop = drop
if @drop != []
trier_drop
regrouper
afficher_drop
donner_drop
else
afficher_mess
end
end
#--------------------------------------------------------------------------
# * Trie le drop en fonction du type d'objet
#-------------------------------------------------------------------------
def trier_drop
@armes = []
@armures = []
@items = []
for item in @drop
if item.is_a?(RPG::Item)
@items.push(item)
end
if item.is_a?(RPG::Armor)
@armures.push(item)
end
if item.is_a?(RPG::Weapon)
@armes.push(item)
end
end
end
#--------------------------------------------------------------------------
# * Regroupe les objets par nombre
#-------------------------------------------------------------------------
def regrouper
#-------------------------------------------------------
# Pour les objets
#------------------------------------------------------
if @items != []
@items_unique = @items.uniq
@regroupement_item = {}
for item in @items_unique
@regroupement_item[item] = 0
end
for item in @items
if @regroupement_item.include?(item)
@regroupement_item[item] += 1
end
end
end
#-------------------------------------------------------
# Pour les armures
#------------------------------------------------------
if @armures != []
@armure_unique = @armures.uniq
@regroupement_armures = {}
for armure in @armure_unique
@regroupement_armures[armure] = 0
end
for armure in @armures
if @regroupement_armures.include?(armure)
@regroupement_armures[armure] += 1
end
end
end
#-------------------------------------------------------
# Pour les armes
#------------------------------------------------------
if @armes != []
@armes_unique = @armes.uniq
@regroupement_armes = {}
for arme in @armes_unique
@regroupement_armes[arme] = 0
end
for arme in @armes
if @regroupement_armes.include?(arme)
@regroupement_armes[arme] += 1
end
end
end
end
#--------------------------------------------------------------------------
# * Affiche les objets
#-------------------------------------------------------------------------
def afficher_drop
y=0 # Initialisation de la coordonée y
#-------------------------------------------------------
# Pour les objets
#------------------------------------------------------
if @items != []
self.contents.draw_text(0,y,200,WLH,Blockade::Config_Report::Drop_objets)
y += 25
for item in @regroupement_item
draw_icon(item[0].icon_index, 0, y)
if item[1] > 1
quantite = " x" + item[1].to_s
else
quantite = ""
end
self.contents.draw_text(24, y, 172, WLH, item[0].name + quantite)
y+=25
end
end
y += 5 if @items.nil? == false # Si les objets on été affiché augmenter y de 5
#-------------------------------------------------------
# Pour les armures
#------------------------------------------------------
if @armures != []
self.contents.draw_text(0,y,200,WLH,Blockade::Config_Report::Drop_armures)
y += 25
for armure in @regroupement_armures
draw_icon(armure[0].icon_index, 0, y)
if armure[1] > 1
quantite = " x" + armure[1].to_s
else
quantite = ""
end
self.contents.draw_text(24, y, 172, WLH, armure[0].name + quantite)
y +=25
end
end
y += 5 if @armures.nil? == false # Si les armures on été affichées augmenter y de 5
#-------------------------------------------------------
# Pour les armes
#------------------------------------------------------
if @armes != []
self.contents.draw_text(0,y,200,WLH,Blockade::Config_Report::Drop_armes)
y += 25
for arme in @regroupement_armes
draw_icon(arme[0].icon_index, 0, y)
if arme[1] > 1
quantite = " x" + arme[1].to_s
else
quantite = ""
end
self.contents.draw_text(24, y, 172, WLH, arme[0].name + quantite)
y +=25
end
end
end
#-------------------------------------------------------
# Afficher un message si pas de drop
#------------------------------------------------------
def afficher_mess
self.contents.draw_text(0,0,360,WLH,Blockade::Config_Report::Drop_nil)
end
#-------------------------------------------------------
# Donne le drop à l'équipe
#------------------------------------------------------
def donner_drop
for item in @drop
$game_party.gain_item(item, 1)
end
end
end
#==============================================================================
# ** Game_Actor
#------------------------------------------------------------------------------
# Gére les données système sur les héros.
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# * Calcul de l'exp accumulée
#--------------------------------------------------------------------------
def now_exp
return @exp - @exp_list[@level]
end
#--------------------------------------------------------------------------
# * Calcul de l'exp a avoir pour gagner un niveau
#--------------------------------------------------------------------------
def next_exp
# return @exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0
return @exp_list[@level+1] > 0 ? (@exp_list[@level+1] - @exp_list[@level]).to_i : 0
end
end |
Je vais tester en passant les plus petits en commentaires. Si c'est le SBS par contre ça va être plus chiant à tester...
EDIT : Il semblerait que ce soit celui sur la musique de combat comme la map. En le désactivant, la musique de map n'était plus jouée pendant le combat, seulement, à la fin, une erreur avec le script de menu de fin de combat est survenue.
L'erreur dit : Script 'Menu fin de combat' line 173: NoMethodError occurred. undefind method `play' for nil:NilClass
En revanche, si on fuit le combat, ton script fonctionne et la musique reprend !
|
Posté dans Forum - [VX] Recherche d'un script pour reprendre une musique après un combat. |
LittleGamer -
posté le 10/07/2014 à 14:26:49. (414 messages postés) |
| Anh ! Merci, je teste tout de suite !
EDIT : Alors ça marche pas exactement comme prévu : La musique de la map ne se coupe pas, et du coup les musiques de la map et de combat sont jouées simultanément pendant les combats.
Il faut que je fasse quand même la pause et la reprise de l'audio + sur les maps ou c'était censé me dispenser d'ajouter un event par map ?
Avec ce script, serait-il possible d'ajouter quelques lignes au script qui démarre et finit les combats pour marquer la pause du BGM de la map et la reprise ?
|
Posté dans Forum - [VX] Recherche d'un script pour reprendre une musique après un combat. |
LittleGamer -
posté le 10/07/2014 à 12:12:00. (414 messages postés) |
| On avait pensé à celui la mais il va falloir mettre des events pour les musiques sur chaque map non ?
Pour le format ce n'est pas un problème : Coma8 à justement eu la merveilleuse idée de n'utiliser que du OGG pour pouvoir faire des intros.
Bon, si on ne trouve vraiment rien d'autre, on prendra celui la. Un grand merci Estheone, c'est pas la première fois que tu réponds à un de mes topics de demande d'aide. C'est très gentil de répondre à chaque fois
|
Posté dans Forum - [VX] Recherche d'un script pour reprendre une musique après un combat. |
LittleGamer -
posté le 09/07/2014 à 00:35:45. (414 messages postés) |
| Domaine concerné: Script
Logiciel utilisé: VX
Bonjour/soir.
Avec le compositeur de mon projet, on cherche un script qui permettrait de faire reprendre le BGM de la map là où il s'était arrêté avant un combat. Si il s'arrête à 1:38, il reprend à 1:38 au retour sur la map quoi.
Sauf qu'on trouve pas. On voudrait savoir si l'un de vous connaissait un script qui fasse ça.
D'après Coma8 (le compositeur), KGC en avait fait un vers 2008 mais qui empêchait d'utiliser un ME de victoire, et un autre scripteur, Bulletxt aurait fait un script semblable qui permettait aussi d'autres options comme un BGM de combat aléatoire ou une musique de combat comme la map.
Le problème c'est que ce dernier script ne marche pas, et l'auteur lui même le qualifie de dépassé.
Le script de Bulletxt : http://sourceforge.net/p/lodestone2d/code/HEAD/tree/Scripts-Dev/continue_bgm_after_battle.rb
et son topic : http://www.rpgmakervx.net/index.php?showtopic=16333&st=0&p=141783entry141783
Un autre plus d'actualité : http://forums.rpgmakerweb.com/index.php?%2Ftopic%2F3511-fmodex-audio-library%2F
Aussi, on vous demande si vous connaissez un script capable de faire ça. On commence à désespérer là. Si vous connaissez un jeu RM qui a fait ça, on veut bien savoir aussi, pour voir si l'auteur peut nous communiquer son secret sur la façon de faire reprendre les musiques...
Voilà, merci d'avance.
EDIT :
On a continuer un peu les recherches.
Donc on a trouvé le script FmodEx pour RM XP qui permettait de faire ce qu'on veut (plus d'autres trucs pour la musique). Mais évidemment il ne fonctionne pas sur VX.
Pour installer ce script, il faut mettre d'abord une DLL, puis trois scripts correctement placés dans la la base de donnée du jeu.
Je les ai placés comme dans la démo sur XP. Mais comme je m'y attendais un peu, ça n'a pas fonctionné sur VX.
Un message d'erreur m'affiche
" Script 'Game System*' line 30: NameError occured
undefined method `bgm_memorize' for class `Game_System' "
La limite de caractère dans les messages sur ce forum et l'impossibilité de poster deux messages d'affilé m'oblige à vous rediriger vers la démo du script qui contient les différents scripts via la démo... La voilà : http://www.hbgames.org/forums/viewtopic.php?t=55486
Voilà.
Je sais qu'on vous met ça un peu en vrac mais là on trouve vraiment plus ce qu'on peut faire.
On sait qu'il faut placer les scripts dans un certain ordre (FmodEx au dessus des Game_xxx), qu'il faut la DLL, qu'une erreur est provoquée ligne 30 du game system * et que c\'est à la base pour XP et non pour VX comme l'indique ce site : http://pastebin.com/ichhXdG0# en parlant de RGSS 2 (C'est boien le RGSS de VX non ?).
Bref.
Si quelqu'un sait utiliser ce script, sait si il y a possibilité de le faire fonctionner sur VX ou peut nous aider d'une quelconque façon, nous implorons son aide.
Merci d'avance.
|
Posté dans Forum - Bazar des créations ! |
LittleGamer -
posté le 05/07/2014 à 20:35:05. (414 messages postés) |
| J'aime beaucoup. Les deux personnages ont beaucoup de classe et le style utilisé en jette.
|
Posté dans Forum - [VX Ace][Mapping] Mais bordel comment est-ce qu'ils font ? |
LittleGamer -
posté le 04/07/2014 à 22:18:07. (414 messages postés) |
| J'ai trouvé cette technique par hasard y 2 ou 3 mois. Je pensais que les gens connaissaient x)
L'air de rien il m'a fallu 3 ans pour trouver. Peut-être qui on lisait les manuels d'utilisation de nos logiciels, on apprendrait des trucs ?
Je plussois Timtrack, tu peux mettre plus de plantes près de l'oasis, si ça colle à ce que tu veux décrire.
|
Posté dans Forum - [VX Ace][Mapping] Mais bordel comment est-ce qu'ils font ? |
LittleGamer -
posté le 03/07/2014 à 21:11:22. (414 messages postés) |
| C'est une astuce très utile pour embellir ses maps.
Si tu copie une portion de ta map avec le clic droit de ta souris en maintenant Shift et que tu la réaplique en maintenant toujours Shift, sa disposition sera exactement la même qu'à la base, même si t'as utilisé Shift comme sur le screen, et pas ré adapté comme ça le fait sur ta map de désert.
C'est plus dur à utiliser (et encore moins connu que le shift normal, que les novices ne trouvent pas toujours seuls) mais ça peut être très utile. Entraine toi pour ça aussi, si tu peux.
Je sais pas si c'est très compréhensible non plus, mais pour ça je vois moins comment l'expliquer par screen. Le montrer en le faisant, je pourrais, mais en screen... Je vois pas comment l'expliquer clairement, essais et tu comprendra.
|
Posté dans Forum - [VX Ace][Mapping] Mais bordel comment est-ce qu'ils font ? |
LittleGamer -
posté le 01/07/2014 à 22:27:08. (414 messages postés) |
| Un truc à corriger sur ta map de désert : En bas à droite y a une zone herbeuse. Mais elles sont délimitées avec la falaise.
C'est pas naturel ! Tu peux remédier à ça en utilisant la touche Shift. Quand tu pose un élément, si tu appuie sur Shift en cliquant, la façon dont l'herbe va être délimitée sur la case sera différente (je te laisse voir).
Si ensuite tu refait une de sable à coté de ton herbe redélimité, la délimitation de l'herbe redeviendra normale seulement à coté de la case de sable que t'as rajouté.
...ça n'a certainement pas l'air très clair. Mais il faut que tu essais pour comprendre, et que tu t'entrainer un peu à ça.
Je vais essayer de te mettrer un screen pour t'expliquer le principe.
EDIT : Voilà, en image c'est plus parlant :
Spoiler (cliquez pour afficher)
|
Posté dans Forum - La Route de la Gloire (VX) |
LittleGamer -
posté le 30/06/2014 à 21:26:54. (414 messages postés) |
| Content que tu apprécie le principe
Le choix des coéquipiers à une grande importance dans le fonctionnement du jeu. Énormément de dialogues changent selon ceux qui sont avec nous, la difficulté est adaptée selon ceux choisis et à certains points du jeu, certains coéquipiers peuvent donner leur avis au joueur sur un choix à faire, l'influençant en conséquence.
Parfois, certains alliés apprennent des sorts à d'autres, aussi... Tout dépend de la composition de l'équipe.
Edit new du 18 Octobre 2014
ça fait très longtemps que je n'ai pas donné d'informations sur l'avancé du projet.
Celui-ci n'est évidemment pas mort, et des nouveautés sont encore et toujours là ! Récapitulatif de celles-ci :
- Yuna, la prêtresse ou druidesse, a désormais sa quête personnelle d'achevée et disponible en jeu, sous certaines conditions : Il faut l'avoir dans son équipe, et arriver à un certain point du jeu, c'est tout !
Tout les autres personnages recrutables au début du jeu auront leur quête personnelle, que le joueur pourra accomplir. Les conditions d'obtention de ces quêtes peuvent varier : Ce sera une question de niveau pour Marae, par exemple, ou le besoin d'aller à un endroit précis pour d'autres.
2 personnages ont leurs quêtes liées. Je ne vous dis pas lesquels. Il restera possible de faire la quête même si vous ne les aurez pas tout les deux dans l'équipe, le déroulement de leur histoire changera juste un peu en conséquences.
- Des livres vont progressivement être implanté ! Il va être possible de les lire, ceux-ci apparaitront à l'écran, avec une apparence différence pour certains (on pourra trouver des couleurs différentes ou des livres en mauvais état par exemple).
Cela est possible grâce à un script d'Omega7 (un anglophone).
Pour l'instant, un seul livre est rédigé et est accessible dès le début du jeu en fouillant la maison de Lux. Celui-ci raconte l'histoire d'Astolia, sa ville natale, par l'écriture de son père. Il fait 28 pages (petite résolution oblige, les lignes ne font que peu de mots, ça ne représente pas 28 pages d'un vrai livre. On serait plus proche de 6-8 pages je pense, 10 à tout casser.)
J'implanterai les livres progressivement.
Screen : https://scontent-a-ams.xx.fbcdn.net/hphotos-xap1/v/t1.0-9/10629839_494581410677993_6053652921624180442_n.png?oh=a407b560f9a55cf1102a1d6ddcd4614d&oe=54C33EAA
- Un nouveau personnage jouable fait son entrée ! Ce qui porte déjà à 2 le nombre de personnages recrutables en cours d'aventure, en plus des 7 déjà présents au début du jeu.
Afin de pouvoir recruter ses deux persos même dans le cas d'une équipe déjà complète, j'étudie la possibilité de changer la composition de l'équipe en cours de jeu. L'équipe se trimballerait par exemple à 6 personnes, mais seulement 4 se battraient maximum.
Je ne donne pas trop d'infos sur ces deux personnages. Comme déjà indiqué, il y aura l'aventurière. Ceux qui ont déjà joués à la démo l'ont forcément rencontrés, mais l'autre est inédit et basé sur le personnage role play d'un ami.
Son nom est Scott Hopeless, et sa classe est poudrier... Mais je n'en dis pas plus !
- Le prochain donjon, que je vais faire pendant les vacances scolaires qui arrivent, prendra la forme de ruines (style ruines incas, dans l'architecture, avec beaucoup de murets et batiments de pierres). Sa particularité sera d'être visitable à la fois dans le monde normal et le Dark World, débloquant des voies sans issues dans un monde et inversement.
Ce passage ne sera pas en mode infiltration. J'en ai néanmoins implanté un
L'île Multa est toujours un monde ouvert, et vous aurez toujours de l'intérêt à vous promener sur l'île, ne serait-ce que pour observer l'évolution de la mentalité des gens, qui va beaucoup changer entre votre arrivé et les événements de l'histoire du jeu...
Et bien sur, toujours des ajouts divers et variés comme des armes, des compétences, etc...
Pour faire dans les statistiques, on approche des 200 maps.
Autre info importante : Le jeu est qualifié aux Alex d'Or ! Nous avons passés la phase des pré tests !
Pour finir sur cette petite new, il faut préciser que le développement du jeu va ralentir un peu. La faute aux cours : Je vise la mention Très Bien au bac, et Coma8, le compositeur, à aussi ses cours à lui (dans le supérieur en plus). Nous ne pouvons pas faire passer le jeu avant car cette année est décisive dans nos cursus. C'est pourquoi finir Multa avant 2015 sera impossible. Je pense qu'il me faudra quelques mois de plus.
Voilà, je reviendrai plus tard quand j'aurais d'autres news !
|
Posté dans Forum - La Route de la Gloire (VX) |
LittleGamer -
posté le 18/06/2014 à 23:00:28. (414 messages postés) |
| Le lien sera disponible d'ici quelques jours, Samedi si tout ce passe bien, j'attends la fin des examens du bac pour le reposter.
Le dernier lien de téléchargement est mort, et cette démo va justement remplacer l'ancienne, avec un peu plus de contenue.
Par ailleurs, avec Coma8, le compositeur du jeu, nous pensons nous inscrire aux Alex d'Or, puisque notre démo coïncide avec le concours. J'avais déjà envoyé une démo il y a deux ans, le jeu n'avait pas été nominé mais avait reçu d'assez bons retours dans les tests, malgré qu'il n'en fut qu'à ses débuts.
la fiche du jeu à la session 2012 et les tests.
|
Posté dans Forum - [Xp] Cherche script de chenille (caterpillar) |
LittleGamer -
posté le 25/05/2014 à 19:48:04. (414 messages postés) |
| Y a pas, dans le script, une ligne qui sert à dire "si l'interrupteur x est activé, désactiver la chenille" ?
Ce serait beaucoup plus simple. Tu l'activerai et désactiverait à chaque fois que tu ne veux pas voir la chenille. Après il faudra toujours faire des events des autres persos pour qu'ils apparaissent et tout ça, mais ça me parait moins casse bonbon si t'as juste à changer l'état d'un interrupteur.
|
Posté dans Forum - [VX] Adapter ce script a la taille de l'équipe au lieu du niveau. [Résolu] |
LittleGamer -
posté le 25/05/2014 à 19:43:13. (414 messages postés) |
| Domaine concerné: Script Logiciel utilisé: VX Bonjour,
Y a t'il un moyen de modifier ce script, ou de modifier les scripts de base de VX, pour que les stats des monstres s'améliorent ou diminuent selon le nombre de personnage dans l'équipe ?
Pour être précis, dans mon projet, on peut choisir son équipe, et aussi le nombre de personnages dans celle-ci. Or, faire le jeu à seulement 2 personnages est beaucoup plus difficile que de le faire à 4. Bien que cette hausse de difficulté soit voulue (le nombre de persos représente la difficulté dans le jeu, de facile à 4 à Très difficile si le héros reste seul), elle devient exagérée dès qu'on n'a plus que 2 personnages (voir 3 si ce sont des personnages plutôt défensifs).
Je voudrais donc pouvoir réguler la difficulté du jeu en changeant les stats des ennemis grâce à des variables. La première, celle qui indique le nombre de persos. Une autre qui indique le nombre de classes dites attaquantes dans l'équipe et une dernière le nombre de classe défensive (une classe polyvalente n'aurait pas besoin d'une variable dans mon cas). Ainsi, je pourrai choisir de devoir augmenter la défense des ennemis ou leur attaque selon la composition précise de l'équipe du joueur, et avoir un contrôle précis sur la difficulté.
Par exemple, si j'ai une équipe de 4 avec une classe attaquante, une défensive, une "très attaquante" et le héros (la polyvalence incarnée), je pourrais avoir 3 variables :
Nombre de persos : 3 (le héros n'est pas compté puisque forcément là, j'ai programmé (en event) la variable comme ça jusque là). Appelons la X.
Potentiel attaquant : 1+2 = 3 Appelons la Y.
Potentiel défensif : 1 Appelons la Z.
Ainsi, le gain d'XP et d'argent sera modifié comme c'est déjà le cas (j'ai déjà modifié ça y a quelques mois) et je pourrai changer le reste des stats, par exemple, dans le cas énoncé :
PV Max des ennemis+(PV Max des ennemis*(X*0.1))+(PV Max des ennemis*(Y*0.15))-(PV Max des ennemis*(Z*0.15))
Ainsi, je pourrai changer les stats des ennemis via des pourcentages adaptés par mes soins à chaque stats.
Je voudrais donc savoir si il est possible d'adapter ce script OU d'adapter les scripts de bases de RPG Maker VX pour faire ce genre de modifications, et surtout, j'aimerais que l'on m'explique comment cela fonctionne afin que je modifie moi même le script (ainsi vous n'êtes pas obligés de me macher le travail en faisant tout à ma place, même si je sais que j'en demande déjà beaucoup).
Je remercie d'avance ceux qui auront prit le temps de lire ma demande, et encore plus ceux qui y répondront ou m'aiguilleront.
|
Posté dans Forum - La Route de la Gloire (VX) |
LittleGamer -
posté le 26/02/2014 à 19:39:10. (414 messages postés) |
| Merci de vos conseils je vais re corriger la fréquence des combats et le coup des invocs.
Pour le scénario, je pense que le début ne changera pas. C'est dans la suite que ça bouge un peu plus.
Si tu parle d'un monstre ennemi, ils peuvent "sentir" Lux, donc le poursuivre à partir d'une certaine zone. Si c'est un soldat c'est effectivement un problème alors.
Verehn : Je changerai ces screens et les maps en jeu, merci
Edit new du 14 Juin 2014
Démo en approche !
Nouveautés par rapport à la dernière :
-Style de Lux (faceset et charset)
-Style de Laurence (idem, je vais changer le post de présentation d'ailleurs)
-Nouvelle classe recrutable à la fin de la démo : l'aventurière ! (Qui peut-elle bien être ??)
-Ré équilibrage drastique : Les ennemis voient leurs stats changer selon la composition de l'équipe !
-Un tiers du continent de Multa est explorable à la fin de la démo !
-La 3eme quête de Centura enfin disponible après 2 ans d'attentes, de report, d'annulation et de remise sur les rails foireuses !
-1 ou 2 campements (je sais plus si l'un des deux était déjà là à l'autre démo)
-Un deuxième souvenir de Sail à trouver (vous ne savez pas ce que c'est ? Cherchez bien !)
-Toujours moins de bugs !
-Encore quelques nouvelles musiques originales par Coma8 ! (Son Soundcloud : https://soundcloud.com/coma8/sets/la-route-de-la-gloire-by )
Je rappelle que cette démo est avant tout une démo de remplacement de liens morts pour l'ancienne qui date de Janvier. Les nouveautés ne sont donc pas aussi marquées qu'elles auraient du (je voulais que le continent de Multa soit finit à la base).
Cette démo arrive dans quelques jours. Pour patienter, vous pouvez retrouver toutes les infos sur le jeu en direct sur la page Facebook de mes projets et mon twitter.
Voilà, je vous retrouve dans quelques jours avec la démo, et dans quelques semaines, La Route de la Gloire fêtera son troisième anniversaire !
|
Posté dans Forum - [Scripts] Petites questions connes sur les SCRIPTS!! |
LittleGamer -
posté le 26/01/2014 à 18:53:39. (414 messages postés) |
| C'est peut-être moi qui le fait mal mais j'ai toujours une valeur infinie pour l'expérience nécessaire pour le prochain niveau :/
Dans le menu statut j'ai aussi du me tromper d'enplacement pour ajouter le to_i
|
Posté dans Forum - [Scripts] Petites questions connes sur les SCRIPTS!! |
LittleGamer -
posté le 26/01/2014 à 17:56:43. (414 messages postés) |
| Bonjour,
Je voudrai savoir si il y a moyen dans les scripts d'afficher des valeurs à virgule en arrondissant le résultat de manière à ne pas afficher la virgule (ou alors de n'afficher que les dixièmes ou centièmes).
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
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
| #===============================================================
# ● [VX] ◦ Rapport de combat V3
#--------------------------------------------------------------
# ◦ Par Blockade
# ◦ http://rpg-maker-vx.bbactif.com/forum.htm
# ◦ Crée le 06/04/2009
# ◦ Version 3.7
# ◦ Remerciment à Woratana, Moghunter
#--------------------------------------------------------------
#===============================================================
#===============================================================
# Notes de version :
#---------------------------------------------------------------
# ~ Version 1.0 :
# - Création du script
# ~ Version 2.0 :
# - Interface revue
# - Regroupement et classement des objets gagnés
# - Ajouts d'options de personalisations
# ~ Version 3.0 :
# - Le script distibue l'argent gagné correctement.
# - Module de configuration entiérement revu
# - Compatibilité améliorée
# - Pop-up lors d'un level up qui affiche les caractéristiques
# - Affiche les sorts gagnés
# ~ Version 3.5
# - Meilleur affichage des caractéristiques quand le héros gagne un niveau
# - Affichage du temps de combat
# ~ Version 3.6
# - Mise à la norme de mes scripts
# - Compatible avec 3 systèmes de combat : Combat VX, SBS, SBS avec ATB
# - Détecte automatiquement le SBS
# ~ Version 3.7
# - Correction d'un bug avec le SBS avec ATB, le rapport d'affichais deux fois
#===============================================================
#===============================================================
# Utilisation :
# Plug & Play, inserez le au dessus de Main !
# Jettez un coup d'oeil au module de configuration !
#===============================================================
module Blockade
module Config_Report
#===============================================================
# Blockade::Config_Report Début du Module de configuration
#===============================================================
#-------------------------------------------
# >> Configuration du texte
#--------------------------------------------
# > Texte contenu dans l'help_window
Text_help_window = "Rapport de Combat"
# > Alignement du texte (0:Gauche, 1:Milieu, 2: Droite)
Alignement_texte = 0
# > Texte pour le temps de combat :
Texte_temps_combat = "Temps : "
# > Alignement du Texte_temps_combat (0:Gauche, 1:Milieu, 2: Droite)
Alignement_texte_temps_combat = 2
# > Expérience (abrégée)
Exp = "Exp : "
# > Monnaie (abrégée)
Gold = "Gils : "
# > Niveau (abrégé)
Lvl = "Niv. "
# > Dans la fenêtre de drop
Drop_nil = "Aucun objet trouvé." # Si pas d'objet à la fin du combat
Drop_objets = "Objets trouvés :" # Si des objets sont trouvées
Drop_armures = "Armures trouvées :" # Si des armures sont trouvées
Drop_armes = "Armes trouvées :" # Si des armes sont trouvées
# > Dans la fenêtre de changement de niveau
Texte_hp = "HP " # Texte pour les Hp
Texte_mp = "MP " # Texte pour les Mp
Texte_atk = "Attaque " # Texte pour l'attaque
Texte_def = "Défense " # Texte pour la défense
Texte_int = "Intelligence " # Texte pour l'intelligence
Texte_agi = "Agilité " # Texte pour l'agilité
# > Couleur des noms de caracteristiques
Couleur_nom_carac = 4
# > Dans la fenêtre des nouveaux sorts
Couleur_new_skill = 4 # Couleur de Texte_new_skill
Texte_new_skill = "Nouveaux sorts : " # Texte pour introduire les nouveaux sorts
#-------------------------------------------
#-------------------------------------------
# >> Configuration des icones
#--------------------------------------------
# > Dans la fenêtre de changement de niveau
Icone_hp = 99 # Id de l'icone pour les PV
Icone_mp = 100 # Id de l'icone pour les PM
Icone_atk = 2 # Id de l'icone pour l'attaque
Icone_def = 52 # Id de l'icone pour la défense
Icone_int = 21 # Id de l'icone pour l'intelligence
Icone_agi = 48 # Id de l'icone pour l'agilité
# > Dans la fenêtre des sorts
Icone_new_skill = 130
#-------------------------------------------
#-------------------------------------------
# >> Configuration des sons
#--------------------------------------------
# > Quand un héros gagne un niveau
Lvl_up_sound = "Recovery" # Nom du SE
Lvl_up_volume = 80 # Volume entre 50-150
Lvl_up_tempo = 100 # Tempo entre 50-150
#===============================================================
# Blockade::Config_Report Fin du Module de configuration
#===============================================================
end
end
$imported = {} if $imported == nil
$imported["Rapport_CombatV3"] = true
#==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
# Scene qui gère les combats
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# * Prend le temps au début du combat
#--------------------------------------------------------------------------
alias start_battle_block start
def start
start_battle_block
@temps = Time.now
end
#--------------------------------------------------------------------------
# * Enpêche le rapport de s'afficher 2 fois (ATB fix)
#--------------------------------------------------------------------------
alias judge_win_loss_block judge_win_loss unless $@
def judge_win_loss
if defined?(::N02)
return unless @fin_combat.nil?
end
judge_win_loss_block
end
#--------------------------------------------------------------------------
# * Processus de victoire
#--------------------------------------------------------------------------
def process_victory
if defined?(::N01)
@status_window.visible = true
@message_window.visible = false
# ボスコラプスはウエイトを長く挟む
for enemy in $game_troop.members
break boss_wait = true if enemy.collapse_type == 3
end
wait(440) if boss_wait
wait(N01::WIN_WAIT) unless boss_wait
# 動けないアクターを除いて勝利アクション
for actor in $game_party.members
unless actor.restriction >= 4
@spriteset.set_action(true, actor.index,actor.win)
end
end
end
@info_viewport.visible = false
@message_window.visible = false
RPG::BGM.stop
$game_system.battle_end_me.play
unless $BTEST
$game_temp.map_bgm.play
$game_temp.map_bgs.play
end
new_temps = Time.now
temps = new_temps- @temps
if temps >= 60
@temps_combat = (temps / 60).truncate
@suffixe = @temps_combat > 1 ? "minutes" : "minute"
else
@temps_combat = temps.truncate
@suffixe = "secondes"
end
@exp =$game_troop.exp_total
@gold = $game_troop.gold_total
@drop = $game_troop.make_drop_items
$game_party.gain_gold(@gold)
ini_variable
Graphics.fadeout(30)
afficher_rapport
Graphics.fadein(20)
end
#--------------------------------------------------------------------------
# * Initialise les variables
#--------------------------------------------------------------------------
def ini_variable
@fin_combat = true
@actors_lvl_up = []
@num_passage= 0
end
#--------------------------------------------------------------------------
# * Afficher le rapport de combat
#--------------------------------------------------------------------------
def afficher_rapport
@help_window = Window_Help_Combat.new
@heros_window = []
y=55 ; i=0
for actor in $game_party.members
@heros_window[i] = Heros_Window.new(actor,y,@exp)
@actors_lvl_up.push([actor,@heros_window[i].get_old_carac,@heros_window[i].get_new_carac,@heros_window[i].get_new_skills]) if @heros_window[i].level_up
y +=74; i += 1
end
@gold_exp_window = Gold_Exp_Window.new(@gold,@exp)
@butin_window = Drop_Window.new(@drop)
@help_window.set_text(Blockade::Config_Report::Text_help_window,Blockade::Config_Report::Alignement_texte,Blockade::Config_Report::Texte_temps_combat + "#{@temps_combat} #{@suffixe} ",Blockade::Config_Report::Alignement_texte_temps_combat)
if @actors_lvl_up != []
RPG::SE.new(Blockade::Config_Report::Lvl_up_sound, Blockade::Config_Report::Lvl_up_volume, Blockade::Config_Report::Lvl_up_tempo).play
@actor_window = Carac_Window.new(@actors_lvl_up[@num_passage])
new_skill = @actors_lvl_up[@num_passage]
@actor_window2 = Skills_Window.new(@actors_lvl_up[@num_passage]) if @actors_lvl_up[@num_passage][3].size > 0
end
end
#--------------------------------------------------------------------------
# * Update
#--------------------------------------------------------------------------
alias update_block update unless $@
def update
if @fin_combat != true
update_block
else
# Si c'est la fin du combat
@help_window.update
@message_window.update
for i in 0...@heros_window.size
@heros_window[i].update
end
if @actors_lvl_up != []
@actor_window.update
@actor_window2.update if @actors_lvl_up[@num_passage][3].size > 0 # if @heros_window[@num_passage].get_new_skills.size > 0
if Input.trigger?(Input::C)
@num_passage += 1
@actor_window.dispose
@actor_window2.visible = false if @actor_window2 != nil
if @num_passage + 1 > @actors_lvl_up.size
Input.update
@actors_lvl_up = []
end # fin @num_passage
if @actors_lvl_up != []
RPG::SE.new(Blockade::Config_Report::Lvl_up_sound, Blockade::Config_Report::Lvl_up_volume, Blockade::Config_Report::Lvl_up_tempo).play
@actor_window = Carac_Window.new(@actors_lvl_up[@num_passage])
@actor_window2 = Skills_Window.new(@actors_lvl_up[@num_passage]) if @actors_lvl_up[@num_passage][3].size >0 # if @heros_window[@num_passage].get_new_skills.size > 0
end # fin @actors_lvl_up
end # fin input
else # si pas de lvl up
end
# Si on appuye sur Entrée
if Input.trigger?(Input::C) and @actors_lvl_up == []
@help_window.dispose
for i in 0...@heros_window.size
@heros_window[i].dispose
end
@gold_exp_window.dispose
@butin_window.dispose
if $BTEST
$scene = nil
else
Graphics.fadeout(30)
battle_end(0)
suppr_variables
end
end
end
end
#--------------------------------------------------------------------------
# * Reinitialise les variables
#--------------------------------------------------------------------------
def suppr_variables
@fin_combat = false
@actors_lvl_up = []
end
end
#==============================================================================
# ** Window_Help_Combat
#------------------------------------------------------------------------------
# This window shows skill and item explanations along with actor status.
#==============================================================================
class Window_Help_Combat < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 0, 544, WLH + 32)
end
#--------------------------------------------------------------------------
# * Set Text
# text : character string displayed in window
# align : alignment (0..flush left, 1..center, 2..flush right)
#--------------------------------------------------------------------------
def set_text(text1, align1,text2,align2)
if text1 != @text1 or align1 != @align1 or text2 != @text2 or align2 != @align2
self.contents.clear
self.contents.font.color = normal_color
self.contents.draw_text(4, 0, self.width - 40, WLH, text1, align1)
self.contents.draw_text(4, 0, self.width - 40, WLH, text2, align2)
@text1 = text1 ; @align = align2
@text2 = text2 ; @align2 = align2
end
end
end
#==============================================================================
# ** Skills_Window
#------------------------------------------------------------------------------
# Affiche les sorts
#==============================================================================
class Skills_Window < Window_Base
def initialize(actor_info)
@new_skills = actor_info[3]
super(300,58,244,230)
afficher_sorts
end
#--------------------------------------------------------------------------
# * Affiche les nouveaux sorts
#--------------------------------------------------------------------------
def afficher_sorts
self.contents.font.color = text_color(Blockade::Config_Report::Couleur_new_skill)
self.contents.draw_text(25,0, 200, WLH, Blockade::Config_Report::Texte_new_skill)
draw_icon(Blockade::Config_Report::Icone_new_skill,0,0)
y = 25
for skills in @new_skills
draw_item_name(skills,0,y)
y += 25
end
end
end
#==============================================================================
# ** Carac_Window
#------------------------------------------------------------------------------
# Affiche les caractérisqtiques
#==============================================================================
class Carac_Window < Window_Base
def initialize(actor)
@actor = actor[0]
@old_carac = actor[1]
@new_carac = actor[2]
@new_skills = actor[3]
x = 100
x = 0 if @new_skills.size > 0
super(x,58,300,230)
afficher_info_actor
afficher_icone
afficher_carac
end
#--------------------------------------------------------------------------
# * Affiche le nom et le niveau du héros
#--------------------------------------------------------------------------
def afficher_info_actor
draw_character(@actor.character_name, @actor.character_index, 20, 40)
self.contents.draw_text(40,0, 200, WLH, @actor.name)
self.contents.draw_text(40,20,200,WLH,Blockade::Config_Report::Lvl + @old_carac[0].to_s + " > " +
Blockade::Config_Report::Lvl + @new_carac[0].to_s)
end
#--------------------------------------------------------------------------
# * Affiche les icones
#--------------------------------------------------------------------------
def afficher_icone
draw_icon(Blockade::Config_Report::Icone_hp,0,50)
draw_icon(Blockade::Config_Report::Icone_mp ,0,75)
draw_icon(Blockade::Config_Report::Icone_atk ,0,100)
draw_icon(Blockade::Config_Report::Icone_def,0,125)
draw_icon(Blockade::Config_Report::Icone_int,0,150)
draw_icon(Blockade::Config_Report::Icone_agi,0,175)
end
#--------------------------------------------------------------------------
# * Affiche les caractéristiques
#--------------------------------------------------------------------------
def afficher_carac
self.contents.font.color = text_color(Blockade::Config_Report::Couleur_nom_carac)
self.contents.draw_text(25,50, 150, WLH, Blockade::Config_Report::Texte_hp)
self.contents.draw_text(25,75, 150, WLH, Blockade::Config_Report::Texte_mp)
self.contents.draw_text(25,100, 150, WLH, Blockade::Config_Report::Texte_atk)
self.contents.draw_text(25,125, 150, WLH, Blockade::Config_Report::Texte_def)
self.contents.draw_text(25,150, 150, WLH, Blockade::Config_Report::Texte_int)
self.contents.draw_text(25,175, 150, WLH, Blockade::Config_Report::Texte_agi)
self.contents.font.color = normal_color
y = 50
for i in 1...@new_carac.size
self.contents.draw_text(150,y, 105, WLH, @old_carac[i],0)
self.contents.draw_text(150,y, 110, WLH, "> ",1)
self.contents.font.color = power_up_color if @old_carac[i] < @new_carac[i]
self.contents.font.color.alpha = 128 if @old_carac[i] == @new_carac[i]
self.contents.draw_text(150,y, 105, WLH, @new_carac[i],2)
self.contents.font.color.alpha = 255
self.contents.font.color = normal_color
y +=25
end
end
end
#==============================================================================
# ** Gold_Exp_Window
#------------------------------------------------------------------------------
# Affiche l'argent et l'exp obtenus
#==============================================================================
class Gold_Exp_Window < Window_Base
def initialize(gold,exp)
super(0,350,200,65)
self.contents.draw_text(0,-6,200,WLH,Blockade::Config_Report::Exp + exp.to_s)
self.contents.draw_text(0,14,200,WLH,Blockade::Config_Report::Gold + gold.to_s)
end
end
#==============================================================================
# ** Heros_Window
#------------------------------------------------------------------------------
# Affiche les informations d'exp sur les héros
#==============================================================================
class Heros_Window < Window_Base
def initialize(actor,y,exp)
super(0,y,200,75)
@actor = actor
@exp = exp
afficher_info
end
#--------------------------------------------------------------------------
# * Affiche les informations
#--------------------------------------------------------------------------
def afficher_info
@level_up = false
last_lvl = @actor.level
last_hp = @actor.maxhp
last_mp = @actor.maxmp
last_atk = @actor.atk
last_def = @actor.def
last_spi = @actor.spi
last_agi = @actor.agi
last_skill = @actor.skills
@actor.gain_exp(@exp,false)
if @actor.level > last_lvl
@level_up = true
@old_carac = [last_lvl,last_hp,last_mp, last_atk, last_def, last_spi, last_agi]
@new_carac =[@actor.level, @actor.maxhp,@actor.maxmp,@actor.atk,@actor.def,@actor.spi,@actor.agi]
@new_skills = @actor.skills - last_skill
end
draw_character(@actor.character_name, @actor.character_index, 20, 40)
draw_actor_exp_meter(@actor,40,20)
self.contents.draw_text(40,0, 60, WLH, @actor.name)
self.contents.draw_text(110,0,60,WLH,Blockade::Config_Report::Lvl + @actor.level.to_s)
end
#--------------------------------------------------------------------------
# * Renvoie les anciennes caractérisques
#--------------------------------------------------------------------------
def get_old_carac
return @old_carac
end
#--------------------------------------------------------------------------
# * Renvoie les nouvelles caractérisques
#--------------------------------------------------------------------------
def get_new_carac
return @new_carac
end
#--------------------------------------------------------------------------
# * Renvoie les nouveaux sorts
#--------------------------------------------------------------------------
def get_new_skills
if @new_skills.size > 0
return @new_skills
else
return []
end
end
#--------------------------------------------------------------------------
# * Determine si le heros a pris un ou plusieurs niveaux
#--------------------------------------------------------------------------
def level_up
return @level_up
end
#--------------------------------------------------------------------------
# * Couleur 1 de la barre
#--------------------------------------------------------------------------
def exp_gauge_color1
return text_color(30)
end
#--------------------------------------------------------------------------
# * Couleur 1 de la barre
#--------------------------------------------------------------------------
def exp_gauge_color2
return text_color(31)
end
#--------------------------------------------------------------------------
# * Dessine la barre d'exp
#-------------------------------------------------------------------------
def draw_actor_exp_meter(actor, x, y, width = 100)
if actor.next_exp != 0
exp = actor.now_exp
else
exp = 1
end
gw = width * exp / [actor.next_exp, 1].max
gc1 = exp_gauge_color1
gc2 = exp_gauge_color2
self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 30, WLH, "Exp")
self.contents.font.color = normal_color
xr = x + width
self.contents.draw_text(xr - 60, y, 60, WLH, actor.next_rest_exp_s, 2)
end
end
#==============================================================================
# ** Drop_Window
#------------------------------------------------------------------------------
# Affiche les objets obtenus
#==============================================================================
class Drop_Window < Window_Base
def initialize(drop)
super(200,55,344,360)
@drop = drop
if @drop != []
trier_drop
regrouper
afficher_drop
donner_drop
else
afficher_mess
end
end
#--------------------------------------------------------------------------
# * Trie le drop en fonction du type d'objet
#-------------------------------------------------------------------------
def trier_drop
@armes = []
@armures = []
@items = []
for item in @drop
if item.is_a?(RPG::Item)
@items.push(item)
end
if item.is_a?(RPG::Armor)
@armures.push(item)
end
if item.is_a?(RPG::Weapon)
@armes.push(item)
end
end
end
#--------------------------------------------------------------------------
# * Regroupe les objets par nombre
#-------------------------------------------------------------------------
def regrouper
#-------------------------------------------------------
# Pour les objets
#------------------------------------------------------
if @items != []
@items_unique = @items.uniq
@regroupement_item = {}
for item in @items_unique
@regroupement_item[item] = 0
end
for item in @items
if @regroupement_item.include?(item)
@regroupement_item[item] += 1
end
end
end
#-------------------------------------------------------
# Pour les armures
#------------------------------------------------------
if @armures != []
@armure_unique = @armures.uniq
@regroupement_armures = {}
for armure in @armure_unique
@regroupement_armures[armure] = 0
end
for armure in @armures
if @regroupement_armures.include?(armure)
@regroupement_armures[armure] += 1
end
end
end
#-------------------------------------------------------
# Pour les armes
#------------------------------------------------------
if @armes != []
@armes_unique = @armes.uniq
@regroupement_armes = {}
for arme in @armes_unique
@regroupement_armes[arme] = 0
end
for arme in @armes
if @regroupement_armes.include?(arme)
@regroupement_armes[arme] += 1
end
end
end
end
#--------------------------------------------------------------------------
# * Affiche les objets
#-------------------------------------------------------------------------
def afficher_drop
y=0 # Initialisation de la coordonée y
#-------------------------------------------------------
# Pour les objets
#------------------------------------------------------
if @items != []
self.contents.draw_text(0,y,200,WLH,Blockade::Config_Report::Drop_objets)
y += 25
for item in @regroupement_item
draw_icon(item[0].icon_index, 0, y)
if item[1] > 1
quantite = " x" + item[1].to_s
else
quantite = ""
end
self.contents.draw_text(24, y, 172, WLH, item[0].name + quantite)
y+=25
end
end
y += 5 if @items.nil? == false # Si les objets on été affiché augmenter y de 5
#-------------------------------------------------------
# Pour les armures
#------------------------------------------------------
if @armures != []
self.contents.draw_text(0,y,200,WLH,Blockade::Config_Report::Drop_armures)
y += 25
for armure in @regroupement_armures
draw_icon(armure[0].icon_index, 0, y)
if armure[1] > 1
quantite = " x" + armure[1].to_s
else
quantite = ""
end
self.contents.draw_text(24, y, 172, WLH, armure[0].name + quantite)
y +=25
end
end
y += 5 if @armures.nil? == false # Si les armures on été affichées augmenter y de 5
#-------------------------------------------------------
# Pour les armes
#------------------------------------------------------
if @armes != []
self.contents.draw_text(0,y,200,WLH,Blockade::Config_Report::Drop_armes)
y += 25
for arme in @regroupement_armes
draw_icon(arme[0].icon_index, 0, y)
if arme[1] > 1
quantite = " x" + arme[1].to_s
else
quantite = ""
end
self.contents.draw_text(24, y, 172, WLH, arme[0].name + quantite)
y +=25
end
end
end
#-------------------------------------------------------
# Afficher un message si pas de drop
#------------------------------------------------------
def afficher_mess
self.contents.draw_text(0,0,360,WLH,Blockade::Config_Report::Drop_nil)
end
#-------------------------------------------------------
# Donne le drop à l'équipe
#------------------------------------------------------
def donner_drop
for item in @drop
$game_party.gain_item(item, 1)
end
end
end
#==============================================================================
# ** Game_Actor
#------------------------------------------------------------------------------
# Gére les données système sur les héros.
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# * Calcul de l'exp accumulée
#--------------------------------------------------------------------------
def now_exp
return @exp - @exp_list[@level]
end
#--------------------------------------------------------------------------
# * Calcul de l'exp a avoir pour gagner un niveau
#--------------------------------------------------------------------------
def next_exp
return @exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0
end
end |
C'est pour l'expérience et l'argent, qui s'affiche à la fin des combats (le script affiche un menu de fin de combat). Il faudrait aussi que cela soit possible dans le menu statut et le menu pause (pas modifiés eux).
Si j'ai besoin de ça, c'est parce que dans mon projet, j'ai ajouter un calcul de l'expérience et de l'argent en fonction de l'équipe et du nombre de perso. Quelques fois, on tombe sur des valeurs infinies, et voir un "niveau suivant dans 1578.33333333333334" fait pas très classe quoi ^^
Donc je voudrai savoir si il existe une ligne de code à ajouter qui permettrait de ne pas afficher une partie de la valeur.
Merci d'avance !
| Aller à la page: 1 2 3 4 5 6 7 8 9 10
|
|
|