Night.png);">
Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker

RM 95
RM 2000/2003
RM XP
RM VX/VX Ace
RM MV/MZ

Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

Sorties: "Dread Mac Farlane", (...) / Tutos: Checklist de la composition (...) / Sorties: Dread Mac Farlane - episode 8 / Sorties: Dread Mac Farlane - episode 7 / Jeux: Ce qui vit Dessous / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

618 connectés actuellement

29443695 visiteurs
depuis l'ouverture

9772 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

Level Up!

Lumen

ConsoleFun

Le Temple de Valor

Hellsoft

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 - Zelda of the Legend : A Link to the Awakening of the Past of Time - Fouigres of the Twilight Sword 2 Return of the Hylian

LittleGamer - posté le 16/11/2019 à 16:39:57. (414 messages postés)

Le rendu est sympathique, y a deux trois pentes un peu bizarre mais c'est un exercice intéressant.

Tu refais les maps de Zelda à toutes les sauces alors ? Tu continues celle d'ALttP dans LA ?


Aussi je connaissais pas ce logiciel, il a l'air sympatoche vu de loin.

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 :F 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 :sourire2


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.

Portion de code : Tout sélectionner

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ù) :

Portion de code : Tout sélectionner

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 Ace][Mapping] Mais bordel comment est-ce qu'ils font ?

LittleGamer - posté le 10/07/2014 à 18:15:31. (414 messages postés)

Peut-être mais avant de mettre des effets sur une map, il vaut mieux qu'elle soit bien mappée avant :)
Pour les effets d'éclairs bleus tu peux faire ça en event avec un random wait.

Posté dans Forum - [VX] Recherche d'un script pour reprendre une musique après un combat.

LittleGamer - posté le 10/07/2014 à 16:27:26. (414 messages postés)



ça fonctionne ! Merci de ton aide !

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 ?

image

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 ?

Portion de code : Tout sélectionner

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:48:18. (414 messages postés)

Je fais tout ça.

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 :

Portion de code : Tout sélectionner

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é :


Portion de code : Tout sélectionner

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 :

Portion de code : Tout sélectionner

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 - [Xp] System mgs carton

LittleGamer - posté le 09/07/2014 à 23:01:25. (414 messages postés)

La jarre peut être ouverte par en dessous aussi ;)

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=141783&#entry141783
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 ? :oO

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 - [VX] Adapter ce script a la taille de l'équipe au lieu du niveau. [Résolu]

LittleGamer - posté le 26/05/2014 à 18:45:45. (414 messages postés)

Merci Estheone, c'est exactement le genre d'explication que je recherchais, bien explicative sur le fonctionnement des scripts et qui ne me fait pas tout le boulot :)

Je vais m'atteler aux changements nécessaires. Encore merci !

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 27/01/2014 à 16:34:26. (414 messages postés)

Je vois, c'est plus logique en effet. Je vais faire ça, merci :)

EDIT : ça fonctionne parfaitement ! Encore merci de votre aide à vous tous :)

Posté dans Forum - [Scripts] Petites questions connes sur les SCRIPTS!!

LittleGamer - posté le 27/01/2014 à 08:56:56. (414 messages postés)

Je met ça ce soir en éditant ce post, j'suis en cours là.

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 à 18:33:45. (414 messages postés)

D'accord, et donc je dois mettre ça à chaque fois que la variable de l'expérience est affichée donc ? (le round ou le to_i )

Posté dans Forum - [Scripts] Petites questions connes sur les SCRIPTS!!

LittleGamer - posté le 26/01/2014 à 18:19:24. (414 messages postés)

C'est censé afficher les centièmes seulement là ? Si c'est le cas je pense que ça fonctionne.

Posté dans Forum - [Scripts] Petites questions connes sur les SCRIPTS!!

LittleGamer - posté le 26/01/2014 à 18:14:43. (414 messages postés)

Sans les parenthèses ça semble fonctionner, sinon ça met "syntaxe error occured"

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).

Portion de code : Tout sélectionner

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

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe - Mentions légales

Plan du site

Communauté: Accueil | Forum | Chat | Commentaires | News | Flash-news | Screen de la semaine | Sorties | Tests | Gaming-Live | Interviews | Galerie | OST | Blogs | Recherche
Apprendre: Visite guidée | RPG Maker 95 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker MV | Tutoriels | Guides | Making-of
Télécharger: Programmes | Scripts/Plugins | Ressources graphiques / sonores | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Tous les jeux | Jeux complets | Le cimetière | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Proposer
Ressources RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
Ressources RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
Ressources RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
Ressources RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis
Archives: Palmarès | L'Annuaire | Livre d'or | Le Wiki | Divers