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

Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

Tutos: Comparaison des Commandes (...) / Tutos: Equilibrer les combats / Guides: Les templates pour les tilesets (...) / Jeux: The Legend of Zelda: The Trident (...) / Jeux: PrincessNinjato saves SkyRealm (...) / Chat

Bienvenue
visiteur !





Désactiver
la neige


publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

127 connectés actuellement

10902981 visiteurs
depuis l'ouverture

1052 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Hellsoft

Planète Glutko

Le Comptoir Du clickeur

Kingdom Ultimate

RPG Maker - La Communauté

Offgame

Tous nos partenaires

Devenir
partenaire



Extension RGSS FmodEx

Une implémentation de FmodEx pour le RGSS1 réalisée en C/C++ mixé avec un peu de Ruby

Script pour RPG Maker XP
Ecrit par Nagato Yuki
Publié par Nagato Yuki (lui envoyer un message privé)
Signaler un script cassé

Introduction


Salut à tous, je vous présente l'un des premiers scripts utilisant le RGSS Linker.
Ce script est une petite réécriture du module Audio pour utiliser les fonctions qui ont été codées en C/C++ dans les DLLs RGSS FmodEx.dll et RGSS Linker.dll.
RGSS FmodEx.dll est évidemment dépendant de fmodex.dll donc pour éviter les problèmes de dépendances j'ai inclut le fichier dans l'archive suivante : https://www.mediafire.com/download/jrlci7hwh5z0zhe/Fichiers+DLL+FmodEX.zip
Vous devrez coller les fichiers à la racine de votre projet et tout devrait bien se passer.

Note : Les fichiers ont été analysés avec Kaspersky et ils ne contiennent pas de virus, si un virus est détecté par votre antivirus c'est au faux positif.
Le RGSS Linker est un peu spécial, il lie les fonctions du RGSS de manière dynamique en utilisant une métrique statique. Certains antivirus tel que Avast ont un peu de mal avec ça et s'affolent pour rien.
Note² : Comme le RGSS Linker est prévu pour RGSS104E.dll, il est logique que ceci n'est fonctionnel qu'avec le RGSS1. Cela dit, si des gens ont été assez courageux pour rétro-ingénier le RGSS3, suffira d'envoyer les résultats de la recherche affin de sortir un RGSS3 Linker et de recompiler la DLL RGSS FmodEx image (Ça peut très bien être compilé pour Ruby mais cela ne présente pas de grand intérêt ^^)

Sommaire


Voici des liens vers les différentes parties de ce post :
¤ Script RGSS Linker
¤ Script Audio (FmodEx)
¤ Méthodes de la classe FmodEx::Sound
¤ Méthodes du module FmodEx
¤ Crédits

Script RGSS Linker


Ce script permet de définir les méthodes nécessaires au fonctionnement du script d'après.
A noter que votre projet doit obligatoirement utiliser RGSS104E.dll pour que script fonctionne correctement.

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
#===
#RGSS Linker (Kernel)
#  Fonction permettant de charger des extensions utilisant le RGSS Linker
#---
#© 2015 - Nuri Yuri (塗 ゆり)
#===
module Kernel
  unless @RGSS_Linker #>Pour éviter le problème du RGSS Reset avec les projets sans loader
    
  @RGSS_Linker = {:core => Win32API.new("RGSS Linker.dll","RGSSLinker_Initialize","p","i")}
  Win32API.new("kernel32","GetPrivateProfileString","ppppip","i").call("Game","Library",0,lib_name = "\x00"*32,32,".//Game.ini")
  raise LoadError, "Failed to load RGSS Linker." unless(@RGSS_Linker[:core].call(lib_name)==1)
  lib_name = nil
  module_function
  #===
  #>Kernel.load_module
  #  Permet de charger une extension RGSS
  #---
  #E : module_filename : String : nom de fichier qui contient l'extension
  #    module_function : String : nom de la fonction qui va charger l'extension
  #===
  def load_module(module_filename, module_function)
    return if @RGSS_Linker[module_filename]
    mod = @RGSS_Linker[module_filename] = Win32API.new(module_filename, module_function, "", "")
    mod.call
  end
  
  end #>unless @RGSS_Linker
end



Script Audio (FmodEx)


Vous devez placer ce script après le script RGSS Linker. L'arborescence des scripts devrait ressembler à ça :
- Plein de scripts
- RGSS Linker
- Audio (FmodEx)
-
- Main

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
#===
#Audio (FmodEx)
#  Réécriture du module Audio pour intégrer l'utilisation de FmodEx
#---
#© 2015 - Nuri Yuri (塗 ゆり)
#© 2015 - GiraPrimal : Concept LOOP_TABLE
#---
#Script réalisé par des membres de Community Script Project
#===
module Audio
  LOOP_TABLE = [
  # [ "Audio/xxx/Nom_de_fichier", debut, fin ]
  # Ajoutez ici
   
 
  # Note : Pensez à ajouter une virgule après chaque ] 
  #        (sauf pour la dernière ligne et le ] ci-dessous).
  ]
  #---
  #>Mise en minuscule des noms de fichier pour améliorer la recherche
  #---
  LOOP_TABLE.each do |i| i[0].downcase! end
  
  unless @bgm_play #>Pour éviter le problème du RGSSReset
  #===
  #>Chargement et initialisation de FmodEx
  #===
  Kernel.load_module("RGSS FmodEx.dll","Init_FmodEx")
  ::FmodEx.init(32)
  #---
  #>Indication de la lib' utilisée par défauts
  #---
  @library = ::FmodEx
  #---
  #>Sauvegarde des fonctions du RGSS
  #---
  @bgm_play = method(:bgm_play)
  @bgm_fade = method(:bgm_fade)
  @bgm_stop = method(:bgm_stop)
  @bgs_play = method(:bgs_play)
  @bgs_fade = method(:bgs_fade)
  @bgs_stop = method(:bgs_stop)
  @me_play = method(:me_play)
  @me_fade = method(:me_fade)
  @me_stop = method(:me_stop)
  @se_play = method(:se_play)
  @se_stop = method(:se_stop)
  #---
  #>Définition des volumes
  #---
  @master_volume = 100
  @sfx_volume = 100
  #===
  #>Définition des extensions supportés par FmodEx
  #===
  EXT = ['.ogg', '.mp3', '.wav', '.mid', '.aac', '.wma', '.it', '.xm', '.mod', '.s3m', '.midi']
  #===
  #>Création/définition des fonctions
  #===
  module_function
  def bgm_play(file_name, volume = 100, pitch = 100)
    volume = volume * @master_volume / 100
    return @bgm_play.call(file_name, volume, pitch) if(@library != ::FmodEx)
    filename = check_file(file_name)
    bgm = ::FmodEx.bgm_play(filename, volume, pitch)
    loop_audio(bgm, file_name)
  end
  def bgm_fade(time)
    return @bgm_fade.call(time) if(@library != ::FmodEx)
    ::FmodEx.bgm_fade(time)
  end
  def bgm_stop
    return @bgm_stop.call if(@library != ::FmodEx)
    ::FmodEx.bgm_stop
  end
  def bgs_play(file_name, volume = 100, pitch = 100)
    volume = volume * @sfx_volume / 100
    return @bgs_play.call(file_name, volume, pitch) if(@library != ::FmodEx)
    filename = check_file(file_name)
    bgs = ::FmodEx.bgs_play(filename, volume, pitch)
    loop_audio(bgs, file_name)
  end
  def bgs_fade(time)
    return @bgs_fade.call(time) if(@library != ::FmodEx)
    ::FmodEx.bgs_fade(time)
  end
  def bgs_stop
    return @bgs_stop.call if(@library != ::FmodEx)
    ::FmodEx.bgs_stop
  end
  def me_play(file_name, volume = 100, pitch = 100)
    volume = volume * @master_volume / 100
    return @me_play.call(file_name, volume, pitch) if(@library != ::FmodEx)
    file_name = check_file(file_name)
    ::FmodEx.me_play(file_name, volume, pitch)
  end
  def me_fade(time)
    return @me_fade.call(time) if(@library != ::FmodEx)
    ::FmodEx.me_fade(time)
  end
  def me_stop
    return @me_stop.call if(@library != ::FmodEx)
    ::FmodEx.me_stop
  end
  def se_play(file_name, volume = 100, pitch = 100)
    volume = volume * @sfx_volume / 100
    return @se_play.call(file_name, volume, pitch) if(@library != ::FmodEx)
    file_name = check_file(file_name)
    ::FmodEx.se_play(file_name, volume, pitch)
  end
  def se_stop
    return @se_stop.call if(@library != ::FmodEx)
    ::FmodEx.se_stop
  end
  #===
  #>check_file
  #  Vérifie la présence du fichier et retourne le nom du fichier existant
  #  /!\ Ne corrige pas la connerie
  #====
  def check_file(file_name)
    return file_name if File.exist?(file_name)
    EXT.each do |ext|
      filename = file_name+ext
      return filename if File.exist?(filename)
    end
    return file_name
  end
  #===
  #>loop_audio
  # Fonction permettant de réaliser automatiquement l'appel de set_loop_points
  #===
  def loop_audio(sound, file_name)
    filename = file_name.downcase
    LOOP_TABLE.each do |i|
      if(i[0] == filename)
        return sound.set_loop_points(i[1], i[2])
      end
    end
  end
  end
end


Note : les début et fin contenus dans LOOP_TABLE doivent être exprimés en millisecondes. Ils ne s'appliquent que pour les BGM et BGS.

Méthodes de la classe FmodEx::Sound


Voici la liste des méthodes de la classe FmodEx::Sound.
Notez qu'à l'exception d'initialize, toutes les méthodes sont susceptibles de retourner nil (dans le cas où le son n'est plus utilisable).
Pensez à toujours vérifiquer que le résultat vaut autre chose que nil avant de l'utiliser dans des calculs.

Vous pouvez aussi créer un son indépendamment des BGM, BGS, ME et SE en utilisant la méthode new de FmodEx::Sound (avec les arguments de sa méthode initialize).
_____
initialize(filename, volume = 100, pitch = 100, position = 0, looping = true, streaming = true, *args)
Initialise un son
 Arguments : filename, volume, pitch, position, looping, streaming, memory_data, dls_file_name
 Optionnels à partir de volume (inclut)
 Si position est inférieur à 0, le son sera initialement en pause
 memory_data correspond à une chaine contenant le contenu du fichier.
 dls_file_name correspond au nom du fichier dls à charger pour les midis.

_____
stop
Arrêt d'un son (relache automatiquement la channel et le sound)
 Retourne true si l'arrêt a été effectué, false si l'arrêt n'est pas possible
 Lève une exception FmodEx::Error si FmodEx échoue et qu'aucun Thread de Fade est associé au sound.

_____
fade(time_ms)
Fade out d'un son
 L'utilisateur indique le temps en millisecondes
 Retourne true si le fade du sound a été déclenché, false sinon

_____
pause(pause_state)
Mise en pause d'un son
 L'utilisateur indique si il veut que le son soit en pause (true) ou joué (false)
 Retourne le statut de pause demandé, ou nil si cela n'est pas possible
 Lève une exception FmodEx::Error si FmodEx ne peut pas mettre le son en pause

_____
paused?
Récupération du statut "pause" d'un son
 Retourne true si le son est en pause, false sinon
 Lève une exception FmodEx::Error si FmodEx ne peut pas récupérer le statut

_____
set_loop_points(begin_pt, end_pt)
Indiquer les points de boucle du son
 Si le son est bouclé, l'utilisateur peut indiquer le début et la fin de la boucle en millisecondes
 Retourne true si cela a été réalisé, nil si cela n'est pas possible
 Lève une exception FmodEx::Error si FmodEx ne parvient pas à enregistrer les points de boucle

_____
set_looping(state)
Indiquer la possibilité de boucler
 L'utilisateur indique si il veut (true) ou non (false) que le son soit joué en boucle
 Retourne le statut demandé, nil si cela n'est pas possible
 Lève une exception FmodEx::Error si FmodEx ne parvient pas à modifier le statut du son

_____
looping?
Retourne si le son est joué ou non en boucle
 Lève une exception FmodEx::Error si FmodEx ne parvient pas à récupérer le statut

_____
set_position(position_ms)
Indiquer la position de lecture du son
 L'utilisateur indique la position en milliseconde de la lecture du son
 Retourne la position demandé si elle a pu être enregistrée
 Lève une exception FmodEx::Error si FmodEx ne parvient pas à modifier la position

_____
get_position
Retourne la position actuelle de la lecture du son
 Lève une exception FmodEx::Error si FmodEx échoue

_____
set_volume(volumeà
Indication du volume du son
 L'utilisateur indique le volume qu'il désire entre 0 et 100
 Retourne le volume demande si réalisé
 Lève une exception FmodEx::Error si FmodEx échoue

_____
get_volume
Retourne le volume du son
 Lève une exception FmodEx::Error si FmodEx ne parvient pas à retrouver le volume

_____
set_frequency(frequency)
Indiquer la fréquence de lecture du son
 L'utilisateur indique la fréquence à laquelle il veut que le son soit joué
 Retourne la fréquence indiqué si cela a été réalisé
 Lève une exception FmodEx::Error si FmodEx n'a pas pu changer la fréquence de lecture

_____
get_frequency
Récupérer la fréquence de lecture du son
 Lève une exception FmodEx::Error si FmodEx n'a pas pu retrouver la fréquence de lecture du son

_____
set_pan(pan)
Indiquer la balance du son (-100 = gauche, 0 = centre, 100 = droite)
 Retourne la valeur demandée
 Lève une exception FmodEx::Error si FmodEx ne parvient pas à modifier la balance.

_____
get_pan
Récupérer la balance du son
 Lève un exception FmodEx::Error si FmodEx ne parvient pas à retrouver la balance

_____
playing?
Savoir si FmodEx joue actuellement le son
 Retourne true si c'est le cas
 Lève une exception FmodEx::Error si FmodEx ne parvient pas à savoir ce qu'il fait de ce son

_____
length
Récupérer la longueur temporelle totale du son en millisecondes
 Lève une exception FmodEx::Error si FmodEx ne parvient pas à retrouver la longueur du son

Méthodes du module FmodEx


_____
FmodEx.init(nb_of_channels)
Initialisation de FmodEx
 L'utilisateur indique le nombre de channel désiré et la fonction
 Retourne true si réussi, false si déjà initialisé
 Lève une exception FmodEx::Error si FmodEx échoue dans sa tâche.

_____
FmodEx.bgm_play(filename, volume = 100, pitch = 100, streaming = true, *args)
Lire un BGM.
 Retourne le son du BGM en lecture.
 Arguments : filename [,volume [, pitch [, streaming [, memory [, dls]]]]]
 memory correspond au data en RAM du fichier audio.
 dls correspond au nom du fichier dls à utiliser avec les midis.

_____
FmodEx.bgm_stop
Arrêt d'un BGM.

_____
FmodEx.bgm_fade(time_ms)
Fade out du BGM l'utilisateur indique le temps de fade en millisecondes.

_____
FmodEx.bgm_sound
Récupérer l'objet FmodEx::Sound du BGM.
 Peut-être nil si aucun BGM n'est joué.

_____
FmodEx.bgs_play(filename, volume = 100, pitch = 100, streaming = true, *args)
Lire un BGS.
 Retourne le son du BGS en lecture.
 Arguments : filename [,volume [, pitch [, streaming [, memory [, dls]]]]]
 memory correspond au data en RAM du fichier audio.
 dls correspond au nom du fichier dls à utiliser avec les midis.

_____
FmodEx.bgs_stop
Arrêt d'un BGS.

_____
FmodEx.bgs_fade(time_ms)
Fade out du BGS l'utilisateur indique le temps de fade en millisecondes.

_____
FmodEx.bgs_sound(filename, volume = 100, pitch = 100, streaming = true, *args)
Récupérer l'objet FmodEx::Sound du BGS.
 Peut-être nil si aucun BGS n'est joué.

_____
FmodEx.me_play
Lire un ME.
 Retourne le son du me en lecture.
 Arguments : filename [,volume [, pitch [, streaming [, memory [, dls]]]]]
 memory correspond au data en RAM du fichier audio.
 dls correspond au nom du fichier dls à utiliser avec les midis.

_____
FmodEx.me_stop
Arrêt d'un ME.

_____
FmodEx.fade_out(time_ms)
Fade out du ME l'utilisateur indique le temps de fade en millisecondes.

_____
FmodEx.me_sound
Récupérer l'objet FmodEx::Sound du me.
 Peut-être nil si aucun ME n'est joué.

_____
FmodEx.se_play(filename, volume = 100, pitch = 100, streaming = true, *args)
Lire un SE.
 Retourne le son du se en lecture.
 Arguments : filename [,volume [, pitch [, streaming [, memory [, dls]]]]]
 memory correspond au data en RAM du fichier audio.
 dls correspond au nom du fichier dls à utiliser avec les midis.

_____
FmodEx.se_stop
Arrêt des SE.

Crédits


FIRELIGHT TECHNOLOGIES PTY LTD. - API FMOD Ex
Enterbrain - RGSS
Nuri Yuri - RGSS Linker, RGSS FmodEx, Audio (FmodEx)
GiraPrimal - LOOP_TABLE


Voilà, je pense que la chose est assez complète, si vous souhaitez utiliser le RGSS Linker passez par ici : https://github.com/NuriYuri/RGSS-Linker



zeus81 - posté le 27/05/2015 à 15:23:27 (11071 messages postés)

❤ 0

Citation:

Comme le RGSS Linker est prévu pour RGSS104E.dll, il est logique que ceci n'est fonctionnel qu'avec le RGSS1. Cela dit, si des gens ont été assez courageux pour rétro-ingénier le RGSS3, suffira d'envoyer les résultats de la recherche affin de sortir un RGSS3 Linker et de recompiler la DLL RGSS FmodEx

Commence par partager les sources du Linker. :P


catskart - posté le 27/05/2015 à 17:19:05 (170 messages postés)

❤ 0

Aaahhh, FmodEx, je connais déjà ce script et je l'utilise déjà dans ce projet, (ce script est magnifique !)

Par contre, je vais peut être essayer ses extentions, je vais vous en dire de mes nouvelles, surtout la méthode de loop qui est différent de ma méthode de fmodex, et qui semble meilleurs.

EDIT : Euh, la musique ne se boucle pas chez moi malgré que j'ai fais comme c'est indiqué... C'est normal ?


Nagato Yuki - posté le 27/05/2015 à 19:30:06 (351 messages postés)

❤ 0

@catskart : Si tu as utilisé le tableau LOOP_TABLE, le nom doit être le chemin relatif complet depuis la racine du fichier et sans l'extension (c'est préférable). Si t'as utilisé les tags LOOPSTART et LOOPLENGTH des méta données du fichier, ça doit être en sample PCM. Indique moi comment tu as fait et je vais voir pour une solution ou du moins chercher à débugger la chose x)

@Zeus : Les sources du Linker ne te seront d'aucune aide pour réaliser l'action décrite dans la citation, c'est plutôt les sources de la version de Ruby utilisés dans le RGSS3.

Pour les sources du RGSS Linker, je sais pas trop, l'Article L122-6-1 (18/12/2013) n'est pas trop clair lorsqu'il s'agit de faire fonctionner une partie d'un logiciel normalement libre mais volontairement non exporté par l'auteur du logiciel contenant la partie.
Au pire, je peux te montre un exemple et le principe globale de ce qui est fait. Après un linker ça à un objectif bien précis donc les sources d'un tel truc c'est un peu risible puis-ce que ça sert de passerelle, si t'as bien regardé tu remarque que la plupart des fonctions exportés font :

Portion de code : Tout sélectionner

1
2
3
4
push ebp
mov ebp,esp
pop ebp
jmp fonction_reelle


Ce qui donne en C/C++ pour la fonction rb_raise2(VALUE error_class, char* msg, ...) :

Portion de code : Tout sélectionner

1
2
3
4
5
6
 
_exportRGSSLinker void rb_raise2(VALUE klass,const char* a, va_list vaList)
{
        typedef void (*function_type)(VALUE,const char*, ...);
        return ((function_type)RGSS_Functions[_id_rb_raise2])(klass,a, vaList);
}



Après tu peux imaginer que RGSSLinker_Initialize sert à calibrer les pointeurs de fonction. Pour l'instant c'est tout ce que je peux te dire, du moins de manière publique.

Pokémon Workshop, le site de Making Pokémon sur RPG Maker~


catskart - posté le 27/05/2015 à 20:42:31 (170 messages postés)

❤ 0

Nagato Yuki a dit:


@catskart : Si tu as utilisé le tableau LOOP_TABLE, le nom doit être le chemin relatif complet depuis la racine du fichier et sans l'extension (c'est préférable). Si t'as utilisé les tags LOOPSTART et LOOPLENGTH des méta données du fichier, ça doit être en sample PCM. Indique moi comment tu as fait et je vais voir pour une solution ou du moins chercher à débugger la chose x)



J'ai utilisé LOOP_TABLE, j'ai fais comme tu l'as dit et ça ne bouclais pas.

image


Nagato Yuki - posté le 27/05/2015 à 21:05:51 (351 messages postés)

❤ 0

A première vue c'est correct, à mon avis c'est la fonction loop_audio qui ne trouve pas les boucles.
Remplace la ligne :

Portion de code : Tout sélectionner

1
filename = file_name.downcase


par

Portion de code : Tout sélectionner

1
filename = file_name.downcase.gsub(File.extname(file_name)) do nil end


Ça va corriger le problème de la musique qui est jouée mais avec son extension spécifiée. ("Audio/BGM/Franchir un obstacle.ogg" à la place de "Audio/BGM/Franchir un obstacle")

Sinon, c'est étrange comme problème (mauvaise conception de la fonction...), dans le pire des cas, utilise les méta données (LOOPSTART et LOOPLENGTH) sur Pokécommunity les membres me disent que ça fonctionne donc x)

Pokémon Workshop, le site de Making Pokémon sur RPG Maker~


catskart - posté le 27/05/2015 à 21:58:36 (170 messages postés)

❤ 0

Nagato Yuki a dit:


A première vue c'est correct, à mon avis c'est la fonction loop_audio qui ne trouve pas les boucles.
Remplace la ligne :

Portion de code : Tout sélectionner

1
filename = file_name.downcase


par

Portion de code : Tout sélectionner

1
filename = file_name.downcase.gsub(File.extname(file_name)) do nil end


Ça va corriger le problème de la musique qui est jouée mais avec son extension spécifiée. ("Audio/BGM/Franchir un obstacle.ogg" à la place de "Audio/BGM/Franchir un obstacle")

Sinon, c'est étrange comme problème (mauvaise conception de la fonction...), dans le pire des cas, utilise les méta données (LOOPSTART et LOOPLENGTH) sur Pokécommunity les membres me disent que ça fonctionne donc x)




Même ça le table loop ne marche pas.
Mais j'ai essayé les métadonnées et ça marche parfaitement, faut juste préciser que faut mettre les échantillons et non les millisecondes.

Mais merci quand même. :3

EDIT : Wow, en plus la musique ne recommence pas quand on change les pitchs du BGM ! J'adore ce script !
Mais pourquoi n'est-t-il pas dans la catégorie Son et musique des scripts du site ?


Nagato Yuki - posté le 28/05/2015 à 08:26:23 (351 messages postés)

❤ 0

Yep, et c'est mieux de préciser les échantillons car ça évite à FmodEx de tomber en plein milieu de ceux-ci x)
Faudra que je vois pour régler le délire de la loop table parce que chez moi ça fonctionne parfaitement (comment évent et même Audio.bgm_play("Audio/BGM/xxx") )

Pokémon Workshop, le site de Making Pokémon sur RPG Maker~

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

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 | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Jeux complets | Tous les jeux | 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