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
| # -----------------------------------------------------
# EDM - Extracteur de Messages - RmXP
# Par Krosk - v1.01
# -----------------------------------------------------
# Ce script à placer au dessus de Main vous permet d'extraire
# le texte de vos messages, dans vos events, sous forme de
# fichier texte .txt (codage Unicode/UTF-8), éditable par tout
# logiciel de traitement de texte, et qui permet de
# faciliter la correction orthographique entre autre.
#
# Quelques précautions s'imposent tout de même, car ce
# n'est pas un outil magique ! Ce script est sensible car
# il modifie directement les données de votre jeu !
# Il faut faire attention à ne pas l'utiliser n'importe comment,
# sous peine de voir vos textes décalés ou supprimés.
#
# -------------------------------------
# A propos de l'encodage de texte
# -------------------------------------
# Les fichiers textes créés par EDM sont codés sous le format
# UTF-8, le seul format compatible à ma connaissance entre
# les chaînes de caractère sous RMXP et nos accents français.
# Lorsque vous éditez ces fichiers, pensez s'il vous plaît
# à conserver cet encodage, sous peine de perdre vos accents,
# lorsque vous importez vos textes modifiés.
#
# Sous Bloc Note : L'enregistrement devrait se faire sous le format
# UTF-8 automatiquement. Vous pouvez quand même vous
# en assurer en faisant "Fichier", "Enregistrer sous",
# et en sélectionnant l'encodage UTF-8.
#
# Sous OpenOffice Writer : Après édition, l'enregistrement doit être manuel,
# en faisant "File", "Save As", et dans le champ
# "Type", assurez vous de prendre "Text encoded (.txt)".
#
# Sous les autres éditeurs : Enregistrez sous le format Unicode ou UTF-8.
# N'enregistrez pas sous le format ANSI.
#
# -------------------------------------
# Comment utiliser ce script
# -------------------------------------
# Collez ce script EDM au dessus de main.
#
# EDM ACTIVATE : réglez à true pour lancer EDM. Vous aurez
# une interface au démarrage de votre projet.
# EDM_MAP : Numéro ID de la map à réécrire.
#
# - Extraire le texte du jeu
# Le texte du jeu sera extrait dans le dossier EDMString du répertoire
# de votre jeu.
# Chaque carte qui contient du texte aura son propre fichier texte
# associé, avec dedans l'ensemble des évènements messages, dans un
# certain ordre.
# EDM fermera automatiquement le projet à la fin de la tâche.
#
# - Ecrire le texte dans le jeu
# Le texte de vos évènements messages sera réécrit à partir
# des fichiers textes extraits.
#
# Pour plus de contrôle :
# Si vous spécifiez EDM_MAP avec un numéro ID, seule cette carte sera corrigée.
# Si vous spécifiez EDM_MAP avec une liste d'ID, les maps respectives seront
# corrigées.
# Si vous écrivez EDM_MAP = 0, toutes les maps seront corrigées.
# Si vous écrivez EDM_MAP = -1, la fonction d'écriture sera désactivée
# pour éviter les écritures non intentionnelles.
#
# EDM fermera automatiquement le projet en test à la fin de la tâche.
# Il vous faudra fermer votre projet sous l'éditeur RMXP pour observer
# les changements.
#
# - Créer un Backup
# Vous pouvez sauvegarder l'état de vos messages.
# Les textes seront sauvegardés dans EDMBackup.
# C'est exactement la même fonction que l'extraction de texte.
#
# - Restaurer à partir d'un Backup
# En cas d'erreur de manipulation, vous pouvez charger le contenu du
# Backup, pour restaurer l'état de vos messages.
# C'est la même fonction que "Ecrire le texte dans le jeu", excepté
# qu'il prend le Backup comme source.
#
# Une fois que vous avez fini, vous pouvez désactiver EDM en écrivant false
# devant EDM_ACTIVATE.
#
# Le script n'est pas intrusif, et ne modifiera pas vos autres scripts.
# N'ayez pas peur en voyant ce script réécrire vos variables $fontface, ...
# il ne les réécrit que lorsque vous utilisez EDM.
#
# --------------------------------------
# Comment éditer vos fichiers textes
# --------------------------------------
# EDM extrait les lignes de message de vos évènements et les organise
# par fichier qui porte le nom MapXXX.txt, dans le dossier EDMString/.
#
# Chaque fichier texte est une succession de paragraphes, chaque paragraphe est
# un évènement "message".
#
# Les paragraphes sont de cette forme :
# ____________________#EDMTAG#START#2#1
# Bienvenue à l'auberge.
# Voulez-vous prendre une chambre ?
#
# Une ligne d'entête pour signaler le début d'un paragraphe, suivie
# de quelques lignes de texte qui correspondent aux lignes de message
# dans l'éditeur d'évènement RMXP.
#
#
# Pour éditer le texte, il vous suffit de l'ouvrir, de corriger les lignes de
# texte et d'enregistrer le fichier (voir - A propos de l'encodage de texte -).
#
# Vous pouvez ajouter ou supprimer des lignes de texte au sein d'un paragraphe.
# Par exemple :
#
# ____________________#EDMTAG#START#2#1
# Bienvenue à l'auberge.
# Voulez-vous prendre une chambre ?
# ____________________#EDMTAG#START#2#1
# Nous avons plusieurs tarifs.
# C'est pour combien de personnes ?
#
# Après modification :
#
# ____________________#EDMTAG#START#2#1
# Bienvenue à l'auberge.
# Nous avons actuellement des chambres de libre.
# Voulez-vous prendre une chambre ?
# ____________________#EDMTAG#START#2#1
# C'est pour combien de personnes ?
#
# EDM se charge de recréer correctement vos évènements de message.
#
# *****
# ATTENTION ! Une précaution est à prendre quand même, veuillez éviter d'ajouter
# plus de 4 lignes à un paragraphe. Je ne les prend pas en compte.
# Si vous voulez créer un paragraphe supplémentaire, faites le dans l'éditeur
# d'évènement RMXP et re-exportez vos textes.
#
# *****
# ATTENTION ! EDM n'est pas capable d'insérer un nouvel évènement message,
# et de créer un nouveau paragraphe ! Il n'est capable que de modifier
# les paragraphes existants et les redimensionner !
#
# Il s'agit avant tout d'un outil pour faciliter la correction orthographique
# et éventuellement la traduction, mais en aucun cas il ne remplace l'éditeur
# de texte !
#
# --------------------------------------------------------------------------
EDM_ACTIVATE = true
EDM_MAP = -1
if EDM_ACTIVATE
$fontface = "Arial"
$fontsize = 22
$data_system = load_data("Data/System.rxdata")
$game_system = Game_System.new
loop do
edt_read = false
edt_write = false
backup = false
dummy= Window_Command.new(440, ["EDM - Extracteur de Messages - Par Krosk"])
dummy.x = 100
dummy.y = 112
dummy.active = false
dummy.index = -1
window = Window_Command.new(320, ["Fermer EDM",
"Extraire le texte du jeu", "Insérer le texte après extraction",
"Créer un Backup", "Restaurer à partir d'un Backup"])
window.x = 160
window.y = 176
loop do
Graphics.update
Input.update
window.update
if Input.trigger?(Input::B)
exit
return
end
if Input.trigger?(Input::C)
case window.index
when 0
exit
when 1
edt_read = true
backup = false
when 2
edt_write = true
backup = false
when 3
edt_read = true
backup = true
when 4
edt_write = true
backup = true
end
break
end
end
window.dispose
dummy.dispose
if edt_read
if not backup
dummy = Window_Command.new(440, [
"Extraire le texte du jeu dans ./EDMString/"])
else
dummy = Window_Command.new(440, [
"Création d'une sauvegarde dans ./EDMBackup/"])
end
dummy.x = 100
dummy.y = 112
dummy.active = false
dummy.index = -1
window = Window_Command.new(320, ["Annuler",
"Confirmer l'extraction du texte"])
window.x = 160
window.y = 176
window.index = 1 if backup
utf_tag = ["EF", "BB", "BF"].pack("H2H2H2")
loop do
Graphics.update
Input.update
window.update
if Input.trigger?(Input::C) or backup
case window.index
when 0
break
when 1
map_infos = load_data("Data/MapInfos.rxdata")
for map_id in map_infos.keys
map_data = load_data(sprintf("Data/Map%03d.rxdata", map_id))
dir_string = backup ? "EDMBackup" : "EDMString"
string = sprintf(dir_string + "/Map%03d.txt", map_id)
Graphics.update
file = nil
for event in map_data.events
for i in 0...event[1].pages.size
for command in event[1].pages<i>.list
if command.code == 101
if file == nil
if not File.exist?(dir_string)
Dir.mkdir(dir_string)
end
file = File.open(string, "w")
file.write(utf_tag + string+"\n")
end
file.write(
"____________________#EDMTAG#START##{event[0]}##{i}\n")
file.write(command.parameters[0]+"\n")
end
if command.code == 401
file.write(command.parameters[0]+"\n")
end
end
end
end
file.close if file != nil
file = nil
end
dummy2 = Window_Command.new(500, ["Extraction terminée."])
dummy2.x = 70
dummy2.y = 272
dummy2.active = false
dummy2.index = -1
loop do
Graphics.update
Input.update
if Input.trigger?(Input::C)
exit
end
end
exit
end
end
if Input.trigger?(Input::B)
break
end
end
window.dispose
dummy.dispose
end
if edt_write
if not backup
case EDM_MAP
when 0
dummy = Window_Command.new(400, [
"Ecrire les textes de toutes les cartes."])
window = Window_Command.new(320, ["Annuler",
"Confirmer l'écriture du texte"])
when -1
dummy = Window_Command.new(400, ["Désactivé. Modifiez EDM_MAP."])
window = Window_Command.new(320, ["Retour"])
else
if EDM_MAP.type == Array
dummy = Window_Command.new(400, [
"Ecrire les textes des cartes d'ID:#{EDM_MAP.inspect}."])
else
dummy = Window_Command.new(400, [
"Ecrire les textes de la carte ID:#{EDM_MAP}."])
end
window = Window_Command.new(320, ["Annuler",
"Confirmer l'écriture du texte"])
end
else
dummy = Window_Command.new(400, ["Restauration du Backup."])
window = Window_Command.new(320, ["Restauration...", "... en cours"])
end
dummy.x = 120
dummy.y = 112
dummy.active = false
dummy.index = -1
window.x = 160
window.y = 176
window.index = 1 if backup
loop do
Graphics.update
Input.update
window.update
if Input.trigger?(Input::C) or backup
case window.index
when 0
break
when 1
map_infos = load_data("Data/MapInfos.rxdata")
for map_id in map_infos.keys
map_string = sprintf("Data/Map%03d.rxdata", map_id)
map_data = load_data(map_string)
string = sprintf("EDMString/Map%03d.txt", map_id)
string = sprintf("EDMBackup/Map%03d.txt", map_id) if backup
if not File.exist?(string)
next
end
if (EDM_MAP.type == Fixnum and map_id == EDM_MAP) or
(EDM_MAP.type == Array and EDM_MAP.include?(map_id)) or
(EDM_MAP.type == Fixnum and EDM_MAP == 0) or backup
file = File.open(string, "r")
# Suppression des tags
file.readline
# Buffer
buffer = []
ib = -1
file.readlines.each { |line|
if line.include?("EDMTAG")
ib += 1
buffer[ib] = []
else
buffer[ib].push(line.chomp)
end
}
ib101 = -1
for event in map_data.events
for page in event[1].pages
for i in 0...page.list.size
# Nettoyage préliminaire des paragraphes
if page.list<i>.code == 401
page.list<i> = nil
end
end
page.list.compact!
for command in page.list
# Début de message
if command.code == 101
ib101 += 1
command.parameters[0] = buffer[ib101].shift
# Construction du reste du paragraphe
while not buffer[ib101].empty?
page.list.insert(page.list.index(command) + 1,
RPG::EventCommand.new(401, 0, [buffer[ib101].pop]))
end
end
end
end
end
file.close
map_file = File.open(map_string, "wb")
Marshal.dump(map_data, map_file)
map_file.close
end
end
dummy2 = Window_Command.new(500, [
"Écriture terminée. Fermez votre projet sous RMXP."])
dummy2.x = 70
dummy2.y = 272
dummy2.active = false
dummy2.index = -1
loop do
Graphics.update
Input.update
if Input.trigger?(Input::C)
exit
end
end
end
end
if Input.trigger?(Input::B)
break
end
end
window.dispose
dummy.dispose
end
end
end |