❤ 1Gari Auteur : Roi of the Suisse
Logiciel : RPG Maker XP
Nombre de scripts : 0
Attention
Ceci n'est pas un script habituel, qu'il suffit de coller en bas de votre éditeur de script. Ce script demande de modifier les scripts existants de RPG Maker XP. C'est assez risqué, alors soyez méthodiques, sinon vous risquez de casser votre jeu. De la même façon, il sera un peu plus pénible de retirer le script de votre jeu, si jamais un jour vous n'en voulez plus.
Attention
Ce script ne gère pas la traduction des menus, des objets ou des compétences ! Il ne s'applique qu'à un jeu simple, ou avec des menus personnalisés.
Si vous savez le faire, vous pouvez insérer vous-même la traduction de vos menus en modifiant les scripts de votre jeu (Scene_Menu, Scene_Save, Scene_Load, Scene_End).
Il s'agit du script utilisé par les jeux Kujira no Hara et Polaris 03.
Game_Temp
Dans la classe Game_Temp, rajoutez deux accesseurs "message_traduction" et "choix_traduction" en dessous de l'accesseur "message_proc" :
1
2
3
4
5
| attr_accessor :message_text # message text
attr_accessor :message_proc # message callback (Proc)
attr_accessor :message_traduction # jeu multilingue
attr_accessor :choix_traduction # jeu multilingue |
Toujours dans la classe Game_Temp, plus bas, dans la méthode initialize, initialisez ces deux variables en dessous de "@message_proc" :
1
2
3
4
| @message_proc = nil
@message_traduction = nil # jeu multilingue
@choix_traduction = nil # jeu multilingue |
Window_Message
Dans la classe Window_Message, dans la méthode terminate_message, réinitialisez ces deux variables en dessous de "@message_proc" :
1
2
3
4
| $game_temp.message_proc = nil
$game_temp.message_traduction = nil # traduction effacee
$game_temp.choix_traduction = nil # traduction effacee |
Interpreter 1
Dans la classe Interpreter 1, à la fin de la méthode setup (juste après @branch.clear), initialisez ces deux variables :
1
2
3
4
5
6
7
| # Clear branch data hash
@branch.clear
# message actuel dans une autre langue
@message_traduction = nil
# choix actuel dans une autre langue
@choix_traduction = nil |
Beaucoup plus bas, toujours dans la classe Interpreter 1, dans la méthode setup_choices, remplacez :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| #--------------------------------------------------------------------------
# * Setup Choices
#--------------------------------------------------------------------------
def setup_choices(parameters)
# Set choice item count to choice_max
$game_temp.choice_max = parameters[0].size
# Set choice to message_text
for text in parameters[0]
$game_temp.message_text += text + "\n"
end
# Set cancel processing
$game_temp.choice_cancel_type = parameters[1] |
par :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| #--------------------------------------------------------------------------
# * Setup Choices
#--------------------------------------------------------------------------
def setup_choices(parameters)
if $game_temp.choix_traduction != nil
# une traduction des choix est disponible
alternatives = $game_temp.choix_traduction
else
# pas de traduction, on utilise les choix bruts
alternatives = parameters[0]
end
# choice_max に選択肢の項目数を設定
$game_temp.choice_max = alternatives.size
# Set choice to message_text
for text in alternatives
$game_temp.message_text += text + "\n"
end
# Set cancel processing
$game_temp.choice_cancel_type = parameters[1] |
Interpreter 2
Dans la classe Interpreter 2, dans la méthode execute_command, dans le grand "case" où il y a plein de "when/return", insérez une command_108 entre la command_106 et la command_111 :
1
2
3
4
5
6
7
8
9
10
| ...
when 106 # Wait
return command_106
when 108 # commentaire (pour y recuperer la traduction des messages)
return command_108
when 111 # Conditional Branch
return command_111
... |
Interpreter 3
Dans la classe Interpreter 3, dans la méthode command_101, remplacez :
1
2
3
4
5
| # Set message text on first line
$game_temp.message_text = @list[@index].parameters[0] + "\n"
line_count = 1 |
par :
1
2
3
4
5
6
7
8
9
10
11
| # Set message text on first line
if $game_temp.message_traduction == nil
# pas de traduction, on utilise le message tel quel
$game_temp.message_text = @list[@index].parameters[0] + "\n"
else
# une traduction est disponible pour ce message
$game_temp.message_text = $game_temp.message_traduction
end
line_count = 1 |
Code 401, message basique
Un peu plus loin, remplacez :
1
2
3
4
5
6
7
8
9
| # Loop
loop do
# If next event command text is on the second line or after
if @list[@index+1].code == 401
# Add the second line or after to message_text
$game_temp.message_text += @list[@index+1].parameters[0] + "\n"
line_count += 1 |
par :
1
2
3
4
5
6
7
8
9
10
11
12
| # Loop
loop do
# If next event command text is on the second line or after
if @list[@index+1].code == 401
# Add the second line or after to message_text
if $game_temp.message_traduction == nil
# pas de traduction, on utilise la ligne telle quelle
$game_temp.message_text += @list[@index+1].parameters[0] + "\n"
end
line_count += 1 |
Code 102, message à choix
Un peu plus loin, remplacez :
1
2
3
4
5
6
7
| # Advance index
@index += 1
# Choices setup
$game_temp.choice_start = line_count
setup_choices(@list[@index].parameters) |
par :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # Advance index
@index += 1
# Choices setup
# a quelle ligne commence le choix ?
if $game_temp.message_traduction == nil
# pas de traduction, donc nombre de lignes RM (commande 401)
$game_temp.choice_start = line_count
else
# traduction, donc nombre de lignes de la traduction
$game_temp.choice_start = $game_temp.message_traduction.scan(/\n/).size
end
setup_choices(@list[@index].parameters) |
Code 103, message à code numérique
Un peu plus loin, remplacez :
1
2
3
4
5
6
7
8
9
10
11
| # If number input window fits on screen
if line_count < 4
# Advance index
@index += 1
# Number input setup
$game_temp.num_input_start = line_count
$game_temp.num_input_variable_id = @list[@index].parameters[0]
$game_temp.num_input_digits_max = @list[@index].parameters[1]
end |
par :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| # If number input window fits on screen
if line_count < 4
# Advance index
@index += 1
# Number input setup
# a quelle ligne commence le code numerique ?
if $game_temp.message_traduction == nil
# pas de traduction, donc nombre de lignes RM (commande 401)
$game_temp.num_input_start = line_count
else
# traduction, donc nombre de lignes de la traduction
$game_temp.num_input_start = $game_temp.message_traduction.scan(/\n/).size
end
$game_temp.num_input_variable_id = @list[@index].parameters[0]
$game_temp.num_input_digits_max = @list[@index].parameters[1]
end |
Commande 108 : utiliser les commentaires comme traductions
Toujours dans la classe Interpreter 3, entre les méthodes command_106 (Wait) et command_111 (Conditional Branch), ajoutez la méthode suivante :
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
| #--------------------------------------------------------------------------
# ● Recuperer la traduction d'un message dans le commentaire au dessus
#--------------------------------------------------------------------------
def command_108
# les messages doivent etre traduits
if @parameters[0]["(en) "] && $game_variables[121] == 1
# ce commentaire est une traduction...
if @parameters[0]["|"]
# ...pour un CHOIX
# on decoupe les differentes alternatives
$game_temp.choix_traduction = @parameters[0][5..-1].split("|")
else
# ...pour un MESSAGE
# premiere ligne
$game_temp.message_traduction = @parameters[0][5..-1] + "\n"
# on collecte les autres lignes du commentaire
ligne = 1
while @list[@index+ligne].code == 408 do
$game_temp.message_traduction += @list[@index+ligne].parameters[0] + "\n"
ligne += 1
end
end
end
# fin
return true
end |
Utilisation du script
Au dessus de chaque message de votre jeu, il vous suffira d'ajouter un commentaire qui commence par "(en) " suivi d'un espace et de votre traduction en anglais :
Au dessus de chaque choix de votre jeu, il vous suffira de faire de même, en séparant les choix traduits par des barres verticales "|" (touche 6 du clavier + ALT GR) :
Ensuite, il vous faudra modifier la variable 121. Elle vaut 0 par défaut, ce qui correspond au français. Si vous la mettez à 1, les messages seront affichés en anglais.
Encore plus de langues !
Souvenez-vous, dans la classe Interpreter 3, nous avons rajouté une méthode command_108 qui traite les commentaires commençant par "(en) " lorsque la variable 121 vaut 1. Il suffit dans cette même méthode command_108 de modifier le "if" du début pour déclarer un autre préfixe et l'associer à une nouvelle valeur de la variable 121. Remplacez :
1
2
3
| def command_108
# les messages doivent etre traduits
if @parameters[0]["(en) "] && $game_variables[121] == 1 |
par :
1
2
3
4
5
| def command_108
# les messages doivent etre traduits
if (@parameters[0]["(en) "] && $game_variables[121] == 1) || # ANGLAIS
(@parameters[0]["(sp) "] && $game_variables[121] == 2) || # ESPAGNOL
(@parameters[0]["(de) "] && $game_variables[121] == 3) # ALLEMAND |
Remarquez le nouveau préfixe "(sp) " et le "$game_variables[121] == 2" associé. Remarquez le nouveau préfixe "(de) " et le "$game_variables[121] == 3" associé. Remarquez que la dernière langue n'a pas de "||". Le contenu du "if" reste le même.
Ainsi il vous suffira d'ajouter un commentaire commençant par "(sp) " au dessus des messages de votre jeu pour disposer d'une troisième langue.
Cela se fait en assignant la valeur 2 à la variable 121 du jeu.
Vous pouvez faire de même en rajoutant des "if" pour une valeur 3, une valeur 4 etc. et ainsi avoir un jeu polyglotte.
|