-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathFrame2Text.js
2633 lines (2569 loc) · 127 KB
/
Frame2Text.js
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
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
//= ============================================================================
// Frame2Text.js
// ----------------------------------------------------------------------------
// (C)2023-2024 Shick
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.0.1 2024/09/07:
// ・#125 プラグインコマンドMZを変換する際、オブジェクト型を取り扱えない不具合の修正
// 1.0.0 2024/01/20 Initial Version
// 0.1.0 2023/09/25 新規作成
//= ============================================================================
/* eslint-disable spaced-comment */
/*:
* @target MZ
* @plugindesc イベントコマンドをテキストファイル(.txtファイルなど)に出力するための開発支援プラグインです。ツクールMV・MZの両方に対応しています。
* @author inazumasoft:Shick
* @url https://raw.githubusercontent.com/yktsr/Text2Frame-MV/master/Frame2Text.js
*
* @command EXPORT_EVENT_TO_MESSAGE
* @text イベントをエクスポート
* @desc テキストにイベントをエクスポートします。出力するマップ・イベント・ページIDや、出力先のファイルの情報を指定します。
*
* @arg FileFolder
* @text 出力先フォルダ名
* @desc テキストファイルを出力するフォルダ名を設定します。デフォルトはtextです。
* @type string
* @default text
*
* @arg FileName
* @text 出力先ファイル名
* @desc 出力するテキストファイルのファイル名を設定します。デフォルトはmessage.txtです。
* @type string
* @default message.txt
*
* @arg MapID
* @text 出力するマップID
* @desc 出力するマップのIDを設定します。デフォルト値は1です。
* @type number
* @default 1
*
* @arg EventID
* @text 出力するイベントID
* @desc 出力するイベントのIDを設定します。デフォルト値は2です。
* @type number
* @default 2
*
* @arg PageID
* @text 出力するページID
* @desc 出力するページのIDを設定します。デフォルト値は1です。
* @type number
* @default 1
*
* @command EXPORT_CE_TO_MESSAGE
* @text コモンイベントをエクスポート
* @desc テキストにコモンイベントをエクスポートします。出力するコモンイベントのIDや、出力先のファイルの情報を指定します。
*
* @arg FileFolder
* @text 出力先フォルダ名
* @desc テキストファイルを出力するフォルダ名を設定します。デフォルトはtextです。
* @type string
* @default text
*
* @arg FileName
* @text 出力先ファイル名
* @desc 出力するテキストファイルのファイル名を設定します。デフォルトはmessage.txtです。
* @type string
* @default message.txt
*
* @arg CommonEventID
* @text 出力するコモンイベントID
* @desc 出力するコモンイベントIDを設定します。デフォルト値は1です。
* @type common_event
* @default 1
*
* @param Default Scenario Folder
* @text 出力フォルダ名
* @desc シナリオファイルを出力するフォルダ名を設定します。デフォルトはtextです。(MZでは無視されます)
* @default text
* @require 1
* @dir text
* @type string
*
* @param Default Scenario File
* @text 出力ファイル名
* @desc 出力するシナリオファイルのファイル名を設定します。デフォルトはmessage.txtです。(MZでは無視されます)
* @default message.txt
* @require 1
* @dir text
* @type string
*
* @param Default Common Event ID
* @text 出力するコモンイベントID
* @desc 出力するコモンイベントのIDを設定します。デフォルト値は1です。(MZでは無視されます)
* @default 1
* @type common_event
*
* @param Default MapID
* @text 出力するマップID
* @desc 出力するマップのIDを設定します。デフォルト値は1です。(MZでは無視されます)
* @default 1
* @type number
*
* @param Default EventID
* @text 出力するイベントID
* @desc 出力するイベントのIDを設定します。デフォルト値は2です。(MZでは無視されます)
* @default 2
* @type number
*
* @param Default PageID
* @text 出力するページID
* @desc 出力するページのIDを設定します。デフォルト値は1です。(MZでは無視されます)
* @default 1
* @type number
*
* @param IsDebug
* @text デバッグモードを利用する
* @desc F8のコンソールログにこのプラグインの詳細ログが出力されます。デフォルト値はfalseです。処理時間が伸びます。
* @default false
* @type boolean
*
* @param DisplayMsg
* @text メッセージ表示
* @desc 実行時に通常メッセージを表示します。OFFで警告以外のメッセージが表示されなくなります。デフォルト値はtrueです。
* @default true
* @type boolean
*
* @param DisplayWarning
* @text 警告文表示
* @desc 実行時に警告を表示します。OFFで警告が表示されなくなります。デフォルト値はtrueです。
* @default true
* @type boolean
*
* @param EnglishTag
* @text 英語タグ
* @desc ファイル出力時のタグ、パラメータの言語。デフォルト値はtrue(英語)です。
* @default true
* @type boolean
*
* @help
* 本プラグインはイベントコマンドをテキストファイル(.txtファイルなど)に
* 出力するための開発支援プラグインです。
*
* Text2Frameの逆の処理を行うプラグインであり、
* 既存のイベントをテキストに出力して管理したい場合や、
* Text2Frameで一度取り込んだイベントをイベントエディターで編集した後に
* 再度テキストに出力したい時に使用するプラグインです。
*
* Text2Frameについては、以下のページをご覧ください。
* https://github.com/yktsr/Text2Frame-MV
*
*
* -------------------------------------
* ツクールMVでの実行方法
* -------------------------------------
* 1. プロジェクトの最上位フォルダ(dataやimgのあるところ)にフォルダを作成する。
*
* 2. テキストファイルに出力したいマップID, イベントID, ページID、コモンイベン
* トIDをメモしておきます。
* ・マップIDは画面左のマップを、右クリック→「編集」として出るウィンドウの左
* 上に記載されています。
* ・イベントIDはイベントをダブルクリックして出るイベントエディターの左上に記
* 載されています。
* ・ページIDはイベントエディターのイベントの名前の下に記載されています。
* ・コモンイベントIDはデータベースのコモンイベントのデータリストから確認でき
* ます。
*
* 3. プラグインの管理画面から本プラグインのパラメータを下記の通り編集します。
* ・「出力フォルダ名」に1.で作成したフォルダ名を入力。
* (デフォルトはtextです)
* ・「出力ファイル名」に出力したいテキストファイル名を入力。
* (デフォルトはmessage.txtです)
* ・「出力するコモンイベントID」に2.でメモしたコモンイベントIDを入力。
* (デフォルトで1です)
* ・「出力するマップID」に2.でメモしたマップIDを入力。
* (デフォルトは1です)
* ・「出力するイベントID」に2.でメモしたイベントIDを入力。
* (デフォルトは2です)
* ・「出力するページID」に2.でメモしたページIDを入力。
* (デフォルトで1です)
* ・「英語タグ」にテキストに出力される言語をtrueかfalseで入力。
* (デフォルトでtrue(英語)です)
* - trueの場合の名前タグの例 :"<Name: ハロルド>"
* - falseの場合の名前タグの例:"<名前: ハロルド>"
*
* 4. 以下のうちいずれかを記述したプラグインコマンドを作成する。
* 【マップのイベントを出力したい場合】
* EXPORT_EVENT_TO_MESSAGE
* イベントをメッセージにエクスポ-ト
* 上記どちらかのプラグインコマンドを記載する
* 【コモンイベントを出力したい場合】
* EXPORT_CE_TO_MESSAGE
* コモンイベントをメッセージにエクスポート
* 上記どちらかのプラグインコマンドを記載する
*
* 5. 作成したイベントコマンドをテストプレイかイベントテストで実行する。
* 【成功した場合】
* 出力されたMapID、EventID、PageID、Common EventIDや
* フォルダ、ファイル名のメッセージが表示されます。
* 【失敗した場合】
* 「Save failed./ 保存に失敗しました ファイルが開いていないか確認してくだ
* さい」
* というメッセージが表示された場合は、指定したフォルダが作成されているか
* の確認と指定したファイルが開いていないかを確認してください。
*
*
* --------------------------------------
* ツクールMVでのプラグインコマンドの引数
* --------------------------------------
* ツクールMVでのプラグインコマンドに引数を設定することにより、
* プラグインパラメータで指定したテキストファイルやマップIDとは違うパラメータで
* 実行ができます。
*
* 例1:マップIDが1, イベントIDが2, ページIDが3をtext/message.txtに出力する
* EXPORT_EVENT_TO_MESSAGE text message.txt 1 2 3
* イベントをメッセージにエクスポ-ト text message.txt 1 2 3
*
* 例2:IDが3のコモンイベントをtext/message.txtに出力する
* EXPORT_CE_TO_MESSAGE text message.txt 3
* コモンイベントをメッセージにエクスポート text message.txt 3
*
* -------------------------------------
* ツクールMZでの実行方法
* -------------------------------------
* 1. プロジェクトの最上位フォルダ(dataやimgのあるところ)にフォルダを作成する。
*
* 2. テキストファイルに出力したいマップID, イベントID, ページID、コモンイベン
* トIDをメモしておきます。
* ・マップIDは画面左のマップを、右クリック→「編集」として出るウィンドウの
* 左上に記載されています。
* ・イベントIDはイベントをダブルクリックして出るイベントエディターの左上に
* 記載されています。
* ・ページIDはイベントエディターのイベントの名前の下に記載されています。
* ・コモンイベントIDはデータベースのコモンイベントのデータリストから確認で
* きます。
*
* 3. プラグインの管理画面から本プラグインのパラメータを下記の通り編集します。
* ・「英語タグ」にテキストに出力される言語をtrueかfalseで入力。
* (デフォルトでtrue(英語)です)
* - trueの場合の名前タグの例 :"<Name: リード>"
* - falseの場合の名前タグの例:"<名前: リード>"
*
* 4. 以下の手順でプラグインコマンドを作成する。
* 【マップのイベントを出力したい場合】
* ・「イベントをエクスポート」を選択。
* ・「出力フォルダ名」に1.で作成したフォルダ名を入力。
* (デフォルトはtextです)
* ・「出力ファイル名」に出力したいテキストファイル名を入力。
* (デフォルトはmessage.txtです)
* ・「出力するマップID」に2.でメモしたマップIDを入力。
* (デフォルトは1です)
* ・「出力するイベントID」に2.でメモしたイベントIDを入力。
* (デフォルトは2です)
* ・「出力するページID」に2.でメモしたページIDを入力。
* (デフォルトで1です)
* 【コモンイベントを出力したい場合】
* ・「コモンイベントをエクスポート」を選択。
* ・「出力フォルダ名」に1.で作成したフォルダ名を入力。
* (デフォルトはtextです)
* ・「出力ファイル名」に出力したいテキストファイル名を入力。
* (デフォルトはmessage.txtです)
* ・「出力するコモンイベントID」に2.でメモしたコモンイベントIDを入力。
* (デフォルトで1です)
*
* 5. 作成したイベントコマンドをテストプレイかイベントテストで実行する。
* 【成功した場合】
* 出力されたMapID、EventID、PageID、Common EventIDや
* フォルダ、ファイル名のメッセージが表示されます。
* 【失敗した場合】
* 「Save failed./ 保存に失敗しました ファイルが開いていないか確認してくだ
* さい」
* というメッセージが表示された場合は、指定したフォルダが作成されているか
* の確認と指定したファイルが開いていないかを確認してください。
*
* --------------------------------------
* 注意事項
* --------------------------------------
* プラグイン作者は、いかなる場合も破損したプロジェクトの復元には
* 応じられませんのでご注意ください。
* テキストファイルの文字コードはUTF-8にのみ対応しています。
*
* --------------------------------------
* Version
* --------------------------------------
* 1.0.1
* build: 81bc070a76bcd0246713b2872df90650ffc7ce70
*/
/* eslint-enable spaced-comment */
/* global Game_Interpreter, $gameMessage, process, PluginManager */
(function () {
'use strict'
var Laurus = Laurus || {} // eslint-disable-line no-var, no-use-before-define
Laurus.Frame2Text = {}
if (typeof PluginManager === 'undefined') {
Laurus.Frame2Text.FileFolder = 'test'
Laurus.Frame2Text.FileName = 'basic.txt'
Laurus.Frame2Text.CommonEventID = '1'
Laurus.Frame2Text.MapID = '1'
Laurus.Frame2Text.EventID = '1'
Laurus.Frame2Text.PageID = '1'
Laurus.Frame2Text.IsDebug = true
Laurus.Frame2Text.DisplayMsg = true
Laurus.Frame2Text.DisplayWarning = true
Laurus.Frame2Text.EnglishTag = true
globalThis.Game_Interpreter = {}
Game_Interpreter.prototype = {}
globalThis.$gameMessage = {}
$gameMessage.add = function () {}
} else {
// for default plugin command
Laurus.Frame2Text.Parameters = PluginManager.parameters('Frame2Text')
Laurus.Frame2Text.FileFolder = String(Laurus.Frame2Text.Parameters['Default Scenario Folder'])
Laurus.Frame2Text.FileName = String(Laurus.Frame2Text.Parameters['Default Scenario File'])
Laurus.Frame2Text.CommonEventID = String(Laurus.Frame2Text.Parameters['Default Common Event ID'])
Laurus.Frame2Text.MapID = String(Laurus.Frame2Text.Parameters['Default MapID'])
Laurus.Frame2Text.EventID = String(Laurus.Frame2Text.Parameters['Default EventID'])
Laurus.Frame2Text.PageID = String(Laurus.Frame2Text.Parameters['Default PageID'])
Laurus.Frame2Text.IsDebug = String(Laurus.Frame2Text.Parameters.IsDebug) === 'true'
Laurus.Frame2Text.DisplayMsg = String(Laurus.Frame2Text.Parameters.DisplayMsg) === 'true'
Laurus.Frame2Text.DisplayWarning = String(Laurus.Frame2Text.Parameters.DisplayWarning) === 'true'
Laurus.Frame2Text.EnglishTag = String(Laurus.Frame2Text.Parameters.EnglishTag) === 'true'
let PATH_SEP = '/'
let BASE_PATH = '.'
if (typeof require !== 'undefined') {
const path = require('path')
PATH_SEP = path.sep
BASE_PATH = path.dirname(process.mainModule.filename)
}
Laurus.Frame2Text.TextPath = `${BASE_PATH}${PATH_SEP}${Laurus.Frame2Text.FileFolder}${PATH_SEP}${Laurus.Frame2Text.FileName}`
Laurus.Frame2Text.MapPath = `${BASE_PATH}${PATH_SEP}data${PATH_SEP}Map${('000' + Laurus.Frame2Text.MapID).slice(
-3
)}.json`
Laurus.Frame2Text.CommonEventPath = `${BASE_PATH}${PATH_SEP}data${PATH_SEP}CommonEvents.json`
}
//= ============================================================================
// Game_Interpreter
//= ============================================================================
// for MZ plugin command
if (typeof PluginManager !== 'undefined' && PluginManager.registerCommand) {
PluginManager.registerCommand('Frame2Text', 'EXPORT_EVENT_TO_MESSAGE', function (args) {
const file_folder = args.FileFolder
const file_name = args.FileName
const map_id = args.MapID
const event_id = args.EventID
const page_id = args.PageID
this.pluginCommand('EXPORT_EVENT_TO_MESSAGE', [file_folder, file_name, map_id, event_id, page_id])
})
PluginManager.registerCommand('Frame2Text', 'EXPORT_CE_TO_MESSAGE', function (args) {
const file_folder = args.FileFolder
const file_name = args.FileName
const common_event_id = args.CommonEventID
this.pluginCommand('EXPORT_CE_TO_MESSAGE', [file_folder, file_name, common_event_id])
})
}
const _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand
Game_Interpreter.prototype.pluginCommand = function (command, args) {
_Game_Interpreter_pluginCommand.apply(this, arguments)
this.pluginCommandFrame2Text(command, args)
}
Game_Interpreter.prototype.pluginCommandFrame2Text = function (command, args) {
const addMessage = function (text) {
if (Laurus.Frame2Text.DisplayMsg) {
$gameMessage.add(text)
}
}
let PATH_SEP = '/'
let BASE_PATH = '.'
if (typeof require !== 'undefined') {
const path = require('path')
PATH_SEP = path.sep
BASE_PATH = path.dirname(process.mainModule.filename)
}
Laurus.Frame2Text.ExecMode = command.toUpperCase()
// 入力ファイル(MAPXXX.json)、出力ファイル(message.txt)の情報
switch (Laurus.Frame2Text.ExecMode) {
// for custom plugin command
case 'EXPORT_EVENT_TO_MESSAGE':
case 'イベントをメッセージにエクスポ-ト':
if (args[0]) Laurus.Frame2Text.FileFolder = args[0]
if (args[1]) Laurus.Frame2Text.FileName = args[1]
if (args[2]) Laurus.Frame2Text.MapID = args[2]
if (args[3]) Laurus.Frame2Text.EventID = args[3]
if (args[4]) Laurus.Frame2Text.PageID = args[4]
if (args[0] || args[1]) {
Laurus.Frame2Text.TextPath = `${BASE_PATH}${PATH_SEP}${Laurus.Frame2Text.FileFolder}${PATH_SEP}${Laurus.Frame2Text.FileName}`
Laurus.Frame2Text.MapPath = `${BASE_PATH}${PATH_SEP}data${PATH_SEP}Map${(
'000' + Laurus.Frame2Text.MapID
).slice(-3)}.json`
}
addMessage(
'======> MapID: ' +
Laurus.Frame2Text.MapID +
' -> EventID: ' +
Laurus.Frame2Text.EventID +
' -> PageID: ' +
Laurus.Frame2Text.PageID
)
break
case 'EXPORT_CE_TO_MESSAGE':
case 'コモンイベントをメッセージにエクスポート':
if (args.length === 3) {
Laurus.Frame2Text.ExecMode = 'EXPORT_CE_TO_MESSAGE'
Laurus.Frame2Text.FileFolder = args[0]
Laurus.Frame2Text.FileName = args[1]
Laurus.Frame2Text.CommonEventID = args[2]
Laurus.Frame2Text.TextPath = `${BASE_PATH}${PATH_SEP}${Laurus.Frame2Text.FileFolder}${PATH_SEP}${Laurus.Frame2Text.FileName}`
Laurus.Frame2Text.CommonEventPath = `${BASE_PATH}${PATH_SEP}data${PATH_SEP}CommonEvents.json`
}
addMessage('=====> Common EventID: ' + Laurus.Frame2Text.CommonEventID)
break
case 'COMMAND_LINE':
Laurus.Frame2Text = Object.assign(Laurus.Frame2Text, args[0])
break
case 'LIBRARY_EXPORT':
break
default:
return
}
const logger = {}
logger.log = function () {
if (Laurus.Frame2Text.IsDebug) {
console.debug.apply(console, arguments)
}
}
logger.error = function () {
console.error(Array.prototype.join.call(arguments))
}
const readText = function (filepath) {
try {
const fs = require('fs')
return fs.readFileSync(filepath, { encoding: 'utf8' })
} catch (e) {
throw new Error('File not found. / ファイルが見つかりません。\n' + filepath)
}
}
const readJsonData = function (filepath) {
try {
const jsondata = JSON.parse(readText(filepath))
if (typeof jsondata === 'object') {
return jsondata
} else {
throw new Error(
'Json syntax error. \nファイルが壊れています。RPG Makerでプロジェクトをセーブし直してください\n' + filepath
)
}
} catch (e) {
throw new Error(
'Json syntax error. \nファイルが壊れています。RPG Makerでプロジェクトをセーブし直してください\n' + filepath
)
}
}
const writeData = function (filepath, textData) {
try {
const fs = require('fs')
fs.writeFileSync(filepath, textData, { encoding: 'utf8' })
} catch (e) {
throw new Error(
'Save failed. / 保存に失敗しました。\n' + 'ファイルが開いていないか確認してください。\n' + filepath
)
}
}
let map_events
// プラグインコマンド(MZ)用の変数
let mzCount
switch (Laurus.Frame2Text.ExecMode) {
// 入力ファイル(MAPXXX.json)の内容を読み込む
case 'EXPORT_EVENT_TO_MESSAGE':
case 'イベントをメッセージにエクスポ-ト': {
const map_data = readJsonData(Laurus.Frame2Text.MapPath)
if (!map_data.events[Laurus.Frame2Text.EventID]) {
throw new Error(
'EventID not found. / EventIDが見つかりません。\n' + 'Event ID: ' + Laurus.Frame2Text.EventID
)
}
const pageID = Number(Laurus.Frame2Text.PageID) - 1
if (!map_data.events[Laurus.Frame2Text.EventID].pages[pageID]) {
throw new Error('PageID not found. / PageIDが見つかりません。\n' + 'Page ID: ' + Laurus.Frame2Text.PageID)
}
map_events = map_data.events[Laurus.Frame2Text.EventID].pages[pageID].list
break
}
// 入力ファイル(CommonEvents.json)の内容を読み込む
case 'EXPORT_CE_TO_MESSAGE':
case 'コモンイベントをメッセージにエクスポート': {
const ce_data = readJsonData(Laurus.Frame2Text.CommonEventPath)
if (ce_data.length - 1 < Laurus.Frame2Text.CommonEventID) {
throw new Error(
'Common Event not found. / コモンイベントが見つかりません。: ' + Laurus.Frame2Text.CommonEventID
)
}
const ce_events = ce_data[Laurus.Frame2Text.CommonEventID].list
map_events = ce_events
break
}
}
//* ********************************* */
// 出力ファイル(message.txt)の内容を作成
//* ********************************* */
// 改行コード
const newLine = '\n'
// カンマ
const comma = ', '
// インデント(半角空白)
// const space = ' '
// const baseIndent = 4
const EnglishTag = Laurus.Frame2Text.EnglishTag
// 関数
const getOnOffRadioButtonValue = (checkBoxValue) => {
if (checkBoxValue === 0) return EnglishTag ? 'ON' : 'オン'
else if (checkBoxValue === 1) return EnglishTag ? 'OFF' : 'オフ'
else return EnglishTag ? 'ON' : 'オン'
}
const getIncreaseOrDecrease = (operationValue) => {
if (operationValue === 0) return EnglishTag ? 'Increase' : '増やす'
else if (operationValue === 1) return EnglishTag ? 'Decrease' : '減らす'
else return EnglishTag ? 'Increase' : '増やす'
}
const getConstantOrVariable = (operandType, operandValue) => {
const variablesText = EnglishTag ? 'Variables[' + operandValue + ']' : '変数[' + operandValue + ']'
if (operandType === 0) return Number(operandValue)
else if (operandType === 1) return variablesText
else return Number(operandValue)
}
const getEnemyOrActor = (subjectType, subjectValue) => {
const actorsText = EnglishTag ? 'Actors[' + subjectValue + ']' : 'アクター[' + subjectValue + ']'
if (subjectType === 0) return Number(subjectValue) + 1
else if (subjectType === 1) return actorsText
else return Number(subjectValue)
}
const getFixedOrVariable = (operandType, operandValue) => {
const variablesText = EnglishTag ? 'Variables[' + operandValue + ']' : '変数[' + operandValue + ']'
if (operandType === 0) return Number(operandValue)
else if (operandType === 1) return variablesText
else if (operandType === 2) return EnglishTag ? 'Random' : 'ランダム'
else return Number(operandValue)
}
const getCheckBoxOnOffValue = (checkBoxValue) => {
if (checkBoxValue === 0) return EnglishTag ? 'OFF' : 'オフ'
else if (checkBoxValue === 1) return EnglishTag ? 'ON' : 'オン'
else if (checkBoxValue === false) return EnglishTag ? 'OFF' : 'オフ'
else if (checkBoxValue === true) return EnglishTag ? 'ON' : 'オン'
else return EnglishTag ? 'OFF' : 'オフ'
}
const getCheckBoxMessage = (checkBoxValue, message1, message2) => {
return checkBoxValue ? (EnglishTag ? message1 : message2) : (EnglishTag ? 'OFF' : 'オフ')
}
const getCheckBoxIncludeEquipmentValue = (checkBoxValue) => {
return getCheckBoxMessage(checkBoxValue, 'Include Equipment', '装備品を含む')
}
const getCheckBoxInitializeValue = (checkBoxValue) => {
return getCheckBoxMessage(checkBoxValue, 'Initialize', '初期化')
}
const getCheckBoxAllowKnockoutValue = (checkBoxValue) => {
return getCheckBoxMessage(checkBoxValue, 'Allow Knockout', '戦闘不能を許可')
}
const getCheckBoxShowLevelUpValue = (checkBoxValue) => {
return getCheckBoxMessage(checkBoxValue, 'Show Level Up', 'レベルアップを表示')
}
const getCheckBoxSaveEXPValue = (checkBoxValue) => {
return getCheckBoxMessage(checkBoxValue, 'Save EXP', '経験値の保存')
}
const getCheckBoxWaitforCompletionValue = (checkBoxValue) => {
return getCheckBoxMessage(checkBoxValue, 'Wait for Completion', '完了までウェイト')
}
const getCheckBoxRepeatMovementsValue = (checkBoxValue) => {
return getCheckBoxMessage(checkBoxValue, 'Repeat Movements', '動作を繰り返す')
}
const getCheckBoxSkipValue = (checkBoxValue) => {
return getCheckBoxMessage(checkBoxValue, 'Skip If Cannot Move', '移動できない場合は飛ばす')
}
const getCheckBoxPurchaseOnlyValue = (checkBoxValue) => {
return getCheckBoxMessage(checkBoxValue, 'Purchase Only', '購入のみ')
}
const getAddOrRemove = (operationType) => {
if (operationType === 0) return EnglishTag ? 'Add' : '加える'
else if (operationType === 1) return EnglishTag ? 'Remove' : '外す'
else return EnglishTag ? 'Add' : '加える'
}
const getDisableEnable = (radioButton) => {
if (radioButton === 0) return EnglishTag ? 'Disable' : '禁止'
else if (radioButton === 1) return EnglishTag ? 'Enable' : '許可'
else return EnglishTag ? 'Disable' : '禁止'
}
const getActorParameterValue = (actorParameter) => {
if (actorParameter === 0) return EnglishTag ? 'MaxHP' : '最大HP'
else if (actorParameter === 1) return EnglishTag ? 'MaxMP' : '最大MP'
else if (actorParameter === 2) return EnglishTag ? 'Attack' : '攻撃力'
else if (actorParameter === 3) return EnglishTag ? 'Defense' : '防御力'
else if (actorParameter === 4) return EnglishTag ? 'M.Attack' : '魔法力'
else if (actorParameter === 5) return EnglishTag ? 'M.Defense' : '魔法防御'
else if (actorParameter === 6) return EnglishTag ? 'Agility' : '敏捷性'
else if (actorParameter === 7) return EnglishTag ? 'Luck' : '運'
else return EnglishTag ? 'MaxHP' : '最大HP'
}
const getLearnOrForgot = (operationType) => {
if (operationType === 0) return EnglishTag ? 'Learn' : '覚える'
else if (operationType === 1) return EnglishTag ? 'Forget' : '忘れる'
else return EnglishTag ? 'Learn' : '覚える'
}
const getDirectOrVariablesValue = (location) => {
if (location === 0) return EnglishTag ? 'Direct' : '直接指定'
else if (location === 1) return EnglishTag ? 'WithVariables' : '変数で指定'
else if (location === 2) return EnglishTag ? 'Exchange' : '交換'
else return EnglishTag ? 'Direct' : '直接指定'
}
const getDirectOrVariablesOrCharacterValue = (location) => {
if (location === 0) return EnglishTag ? 'Direct' : '直接指定'
else if (location === 1) return EnglishTag ? 'WithVariables' : '変数で指定'
else if (location === 2) return EnglishTag ? 'Character' : 'キャラクター'
else return EnglishTag ? 'Direct' : '直接指定'
}
const getItemOrWeaponOrArmorValue = (location) => {
if (location === 0) return EnglishTag ? 'Item' : 'アイテム'
else if (location === 1) return EnglishTag ? 'Weapon' : '武器'
else if (location === 2) return EnglishTag ? 'Armor' : '防具'
else return EnglishTag ? 'Item' : 'アイテム'
}
const getStandardOrSpecifyValue = (price, priceValue) => {
if (price === 0) return EnglishTag ? 'Standard' : '標準'
else if (price === 1) return priceValue
else return EnglishTag ? 'Standard' : '標準'
}
const getDirectionValue = (direction) => {
if (direction === 0) return EnglishTag ? 'Retain' : 'そのまま'
else if (direction === 2) return EnglishTag ? 'Down' : '下'
else if (direction === 4) return EnglishTag ? 'Left' : '左'
else if (direction === 6) return EnglishTag ? 'Right' : '右'
else if (direction === 8) return EnglishTag ? 'Up' : '上'
else return EnglishTag ? 'Retain' : 'そのまま'
}
const getFadeValue = (fade) => {
if (fade === 0) return EnglishTag ? 'Black' : '黒'
else if (fade === 1) return EnglishTag ? 'White' : '白'
else if (fade === 2) return EnglishTag ? 'None' : 'なし'
else return EnglishTag ? 'Black' : '黒'
}
const getVehicleValue = (vehicle) => {
if (vehicle === 0) return EnglishTag ? 'Boat' : '小型船'
else if (vehicle === 1) return EnglishTag ? 'Ship' : '大型船'
else if (vehicle === 2) return EnglishTag ? 'Airship' : '飛行船'
else return EnglishTag ? 'Boat' : '小型船'
}
const getEventValue = (event) => {
if (event === -1) return EnglishTag ? 'Player' : 'プレイヤー'
if (event === 0) return EnglishTag ? 'This Event' : 'このイベント'
else return event
}
const getEventValue2 = (event) => {
if (event === -1) return EnglishTag ? 'Player' : 'プレイヤー'
if (event === 0) return EnglishTag ? 'ThisEvent' : 'このイベント'
else return event
}
const getSpeedValue = (speed) => {
if (speed === 1) return EnglishTag ? 'x8 slower' : '1/8倍速'
else if (speed === 2) return EnglishTag ? 'x4 slower' : '1/4倍速'
else if (speed === 3) return EnglishTag ? 'x2 slower' : '1/2倍速'
else if (speed === 4) return EnglishTag ? 'Normal' : '標準速'
else if (speed === 5) return EnglishTag ? 'x2 faster' : '2倍速'
else if (speed === 6) return EnglishTag ? 'x4 faster' : '4倍速'
else return EnglishTag ? 'x8 slower' : '1/8倍速'
}
const getFrequencyValue = (frequency) => {
if (frequency === 1) return EnglishTag ? 'Lowest' : '最低'
else if (frequency === 2) return EnglishTag ? 'Lower' : '低'
else if (frequency === 3) return EnglishTag ? 'Normal' : '標準'
else if (frequency === 4) return EnglishTag ? 'Higher' : '高'
else if (frequency === 5) return EnglishTag ? 'Highest' : '最高'
else return EnglishTag ? 'Lowest' : '最低'
}
const getBalloonIconValue = (balloonIcon) => {
if (balloonIcon === 1) return EnglishTag ? 'Exclamation' : 'びっくり'
else if (balloonIcon === 2) return EnglishTag ? 'Question' : 'はてな'
else if (balloonIcon === 3) return EnglishTag ? 'Music note' : '音符'
else if (balloonIcon === 4) return EnglishTag ? 'Heart' : 'ハート'
else if (balloonIcon === 5) return EnglishTag ? 'Anger' : '怒り'
else if (balloonIcon === 6) return EnglishTag ? 'Sweat' : '汗'
else if (balloonIcon === 7) return EnglishTag ? 'Flustration' : 'くしゃくしゃ'
else if (balloonIcon === 8) return EnglishTag ? 'Silence' : '沈黙'
else if (balloonIcon === 9) return EnglishTag ? 'Light bulb' : '電球'
else if (balloonIcon === 10) return EnglishTag ? 'zzz' : 'zzz'
else if (balloonIcon === 11) return EnglishTag ? 'User-defined1' : 'ユーザー定義1'
else if (balloonIcon === 12) return EnglishTag ? 'User-defined2' : 'ユーザー定義2'
else if (balloonIcon === 13) return EnglishTag ? 'User-defined3' : 'ユーザー定義3'
else if (balloonIcon === 14) return EnglishTag ? 'User-defined4' : 'ユーザー定義4'
else if (balloonIcon === 15) return EnglishTag ? 'User-defined5' : 'ユーザー定義5'
else return EnglishTag ? 'Exclamation' : 'びっくり'
}
const getPositionValue = (position, direct, x, y) => {
const originUpperLeft = EnglishTag ? 'Upper Left' : '左上'
const originCenter = EnglishTag ? 'Center' : '中央'
const originString = position === 0 ? originUpperLeft : originCenter
const variablesString = EnglishTag ? 'Variables' : '変数'
const positionString = EnglishTag ? 'Position' : '位置'
if (direct === 0) return `${positionString}[${originString}][${x}][${y}]`
else if (direct === 1) return `${positionString}[${originString}][${variablesString}[${x}]][${variablesString}[${y}]]`
}
const getScaleValue = (width, Height) => {
const scaleStr = EnglishTag ? 'Scale' : '拡大率'
return `${scaleStr}[${width}][${Height}]`
}
const getBlendModeValue = (blendMode) => {
if (blendMode === 0) return EnglishTag ? 'Normal' : '通常'
else if (blendMode === 1) return EnglishTag ? 'Additive' : '加算'
else if (blendMode === 2) return EnglishTag ? 'Multiply' : '乗算'
else if (blendMode === 3) return EnglishTag ? 'Screen' : 'スクリーン'
else return EnglishTag ? 'Normal' : '通常'
}
const getBlendValue = (opcity, blendMode) => {
const blendStr = EnglishTag ? 'Blend' : '合成'
const blendModeValue = getBlendModeValue(blendMode)
return `${blendStr}[${opcity}][${blendModeValue}]`
}
const getColorToneValue = (red, green, blue, gray) => {
const colorToneStr = EnglishTag ? 'ColorTone' : '色調'
if (red === 0 && green === 0 && blue === 0 && gray === 0) return EnglishTag ? 'ColorTone[Normal]' : '色調[通常]'
else if (red === -68 && green === -68 && blue === -68 && gray === 0) { return EnglishTag ? 'ColorTone[Dark]' : '色調[ダーク]' } else if (red === 34 && green === -34 && blue === -68 && gray === 170) { return EnglishTag ? 'ColorTone[Sepia]' : '色調[セピア]' } else if (red === 68 && green === -34 && blue === -34 && gray === 0) { return EnglishTag ? 'ColorTone[Sunset]' : '色調[夕暮れ]' } else if (red === -68 && green === -68 && blue === 0 && gray === 68) { return EnglishTag ? 'ColorTone[Night]' : '色調[夜]' } else return `${colorToneStr}[${red}][${green}][${blue}][${gray}]`
}
const getDurationValue = (duration, waitForCompletion) => {
const waitStr = EnglishTag ? 'Wait for Completion' : '完了までウェイト'
const durationStr = EnglishTag ? 'Duration' : '時間'
const wait = waitForCompletion ? waitStr : ''
if (duration === 60 && waitForCompletion === true) return `${durationStr}[${duration}][${wait}]`
else return `${durationStr}[${duration}][${wait}]`
}
const getEasingValue = (easing) => {
const easingStr = EnglishTag ? 'Easing' : 'イージング'
if (easing === 0) return EnglishTag ? `${easingStr}[Constant speed]` : `${easingStr}[一定速度]`
else if (easing === 1) return EnglishTag ? `${easingStr}[Slow start]` : `${easingStr}[ゆっくり始まる]`
else if (easing === 2) return EnglishTag ? `${easingStr}[Slow end]` : `${easingStr}[ゆっくり終わる]`
else if (easing === 3) return EnglishTag ? `${easingStr}[Slow start and end]` : `${easingStr}[ゆっくり始まってゆっくり終わる]`
else return EnglishTag ? `${easingStr}[Constant speed]` : `${easingStr}[一定速度]`
}
const getBackgroundValue = (background) => {
if (background === 0) return EnglishTag ? 'Window' : 'ウインドウ'
else if (background === 1) return EnglishTag ? 'Dim' : '暗くする'
else if (background === 2) return EnglishTag ? 'Transparent' : '透明'
else return EnglishTag ? 'Window' : 'ウインドウ'
}
const getWindowPositionValue = (windowPosition) => {
if (windowPosition === 0) return EnglishTag ? 'Top' : '上'
else if (windowPosition === 1) return EnglishTag ? 'Middle' : '中'
else if (windowPosition === 2) return EnglishTag ? 'Bottom' : '下'
else return EnglishTag ? 'Top' : '上'
}
const getChoiceWindowPositionValue = (windowPosition) => {
if (windowPosition === 0) return EnglishTag ? 'Left' : '左'
else if (windowPosition === 1) return EnglishTag ? 'Middle' : '中'
else if (windowPosition === 2) return EnglishTag ? 'Right' : '右'
else return EnglishTag ? 'Right' : '右'
}
const getDefaultChoiceValue = (defaultChoice) => {
if (defaultChoice === -1) return EnglishTag ? 'None' : 'なし'
else return defaultChoice + 1
}
const getCancelChoiceValue = (cancelChoice) => {
if (cancelChoice === -2) return EnglishTag ? 'Branch' : '分岐'
else if (cancelChoice === -1) return EnglishTag ? 'Disallow' : '禁止'
else return cancelChoice + 1
}
const getLocationInfoTypeValue = (infoType) => {
if (infoType === 0) return EnglishTag ? 'Terrain tag' : '地形タグ'
else if (infoType === 1) return EnglishTag ? 'Event Id' : 'イベントid'
else if (infoType === 2) return EnglishTag ? 'Layer 1' : 'レイヤー1'
else if (infoType === 3) return EnglishTag ? 'Layer 2' : 'レイヤー2'
else if (infoType === 4) return EnglishTag ? 'Layer 3' : 'レイヤー3'
else if (infoType === 5) return EnglishTag ? 'Layer 4' : 'レイヤー4'
else if (infoType === 6) return EnglishTag ? 'Region Id' : 'リージョンid'
else return EnglishTag ? 'Terrain tag' : '地形タグ'
}
const getActionTarget = (target) => {
if (target === -2) return EnglishTag ? 'Last Target' : 'ラストターゲット'
else if (target === -1) return EnglishTag ? 'Random' : 'ランダム'
else if (target === 0) return EnglishTag ? 'Index 1' : 'インデックス1'
else if (target === 1) return EnglishTag ? 'Index 2' : 'インデックス2'
else if (target === 2) return EnglishTag ? 'Index 3' : 'インデックス3'
else if (target === 3) return EnglishTag ? 'Index 4' : 'インデックス4'
else if (target === 4) return EnglishTag ? 'Index 5' : 'インデックス5'
else if (target === 5) return EnglishTag ? 'Index 6' : 'インデックス6'
else if (target === 6) return EnglishTag ? 'Index 7' : 'インデックス7'
else if (target === 7) return EnglishTag ? 'Index 8' : 'インデックス8'
else return EnglishTag ? 'Last Target' : 'ラストターゲット'
}
const getTimerValue = (timer) => {
if (timer === 0) return EnglishTag ? 'Start' : '始動'
else if (timer === 1) return EnglishTag ? 'Stop' : '停止'
else return EnglishTag ? 'Start' : '始動'
}
const getIndent = (indentValue) => {
const indent = ''
return indent
}
const getWeatherTypeValue = (weather) => {
if (weather === 'none') return EnglishTag ? 'None' : 'なし'
else if (weather === 'rain') return EnglishTag ? 'Rain' : '雨'
else if (weather === 'storm') return EnglishTag ? 'Storm' : '嵐'
else if (weather === 'snow') return EnglishTag ? 'Snow' : '雪'
else return EnglishTag ? 'None' : 'なし'
}
const getControlVariablesTag = (operation) => {
if (operation === 0) return EnglishTag ? '<Set: ' : '<代入: '
else if (operation === 1) return EnglishTag ? '<Add: ' : '<加算: '
else if (operation === 2) return EnglishTag ? '<Sub: ' : '<減算: '
else if (operation === 3) return EnglishTag ? '<Mul: ' : '<乗算: '
else if (operation === 4) return EnglishTag ? '<Div: ' : '<除算: '
else if (operation === 5) return EnglishTag ? '<Mod: ' : '<剰余: '
else return EnglishTag ? '<Set: ' : '<代入: '
}
const getGameData = (gameData) => {
if (gameData === 0) return EnglishTag ? 'Item' : 'アイテム'
else if (gameData === 1) return EnglishTag ? 'Weapon' : '武器'
else if (gameData === 2) return EnglishTag ? 'Armor' : '防具'
else if (gameData === 3) return EnglishTag ? 'Actor' : 'アクター'
else if (gameData === 4) return EnglishTag ? 'Enemy' : '敵キャラ'
else if (gameData === 5) return EnglishTag ? 'Character' : 'キャラクター'
else if (gameData === 6) return EnglishTag ? 'Party' : 'パーティ'
else if (gameData === 7) return EnglishTag ? 'その他' : 'その他'
else if (gameData === 8) return EnglishTag ? 'Last' : '直前'
else return EnglishTag ? 'Item' : 'アイテム'
}
const getGameDataActorParameter = (actorParameter) => {
if (actorParameter === 0) return EnglishTag ? 'Level' : 'レベル'
else if (actorParameter === 1) return EnglishTag ? 'Exp' : '経験値'
else if (actorParameter === 2) return EnglishTag ? 'HP' : 'HP'
else if (actorParameter === 3) return EnglishTag ? 'MP' : 'MP'
else if (actorParameter === 4) return EnglishTag ? 'MaxHp' : '最大HP'
else if (actorParameter === 5) return EnglishTag ? 'MaxMP' : '最大MP'
else if (actorParameter === 6) return EnglishTag ? 'Attack' : '攻撃力'
else if (actorParameter === 7) return EnglishTag ? 'Defense' : '防御力'
else if (actorParameter === 8) return EnglishTag ? 'M.Attack' : '魔法攻撃力'
else if (actorParameter === 9) return EnglishTag ? 'M.Defense' : '魔法防御力'
else if (actorParameter === 10) return EnglishTag ? 'Agility' : '敏捷性'
else if (actorParameter === 11) return EnglishTag ? 'Luck' : '運'
else return EnglishTag ? 'Level' : 'レベル'
}
const getGameDataEnemyParameter = (actorParameter) => {
if (actorParameter === 0) return EnglishTag ? 'HP' : 'HP'
else if (actorParameter === 1) return EnglishTag ? 'MP' : 'MP'
else if (actorParameter === 2) return EnglishTag ? 'MaxHp' : '最大HP'
else if (actorParameter === 3) return EnglishTag ? 'MaxMP' : '最大MP'
else if (actorParameter === 4) return EnglishTag ? 'Attack' : '攻撃力'
else if (actorParameter === 5) return EnglishTag ? 'Defense' : '防御力'
else if (actorParameter === 6) return EnglishTag ? 'M.Attack' : '魔法攻撃力'
else if (actorParameter === 7) return EnglishTag ? 'M.Defense' : '魔法防御力'
else if (actorParameter === 8) return EnglishTag ? 'Agility' : '敏捷性'
else if (actorParameter === 9) return EnglishTag ? 'Luck' : '運'
else return EnglishTag ? 'HP' : 'HP'
}
const getGameDataReference = (reference) => {
if (reference === 0) return EnglishTag ? 'MapX' : 'マップX'
else if (reference === 1) return EnglishTag ? 'MapY' : 'マップY'
else if (reference === 2) return EnglishTag ? 'Direction' : '方向'
else if (reference === 3) return EnglishTag ? 'ScreenX' : '画面X'
else if (reference === 4) return EnglishTag ? 'ScreenY' : '画面Y'
else return EnglishTag ? 'MapX' : 'マップX'
}
const getGameDataLast = (last) => {
if (last === 0) return EnglishTag ? 'Last Used Skill ID' : '直前に使用したスキルのID'
else if (last === 1) return EnglishTag ? 'Last Used Item ID' : '直前に使用したアイテムのID'
else if (last === 2) return EnglishTag ? 'Last Actor ID to Act' : '直前に行動したアクターのID'
else if (last === 3) return EnglishTag ? 'Last Enemy Index to Act' : '直前に行動した敵キャラのインデックス'
else if (last === 4) return EnglishTag ? 'Last Target Actor ID' : '直前に対象となったアクターのID'
else if (last === 5) return EnglishTag ? 'Last Target Enemy Index' : '直前に対象となった敵キャラのインデックス'
else return EnglishTag ? 'Last Used Skill ID' : '直前に使用したスキルのID'
}
const getGameDataOther = (other) => {
if (other === 0) return EnglishTag ? 'MapId' : 'マップid'
else if (other === 1) return EnglishTag ? 'PartyMembers' : 'パーティ人数'
else if (other === 2) return EnglishTag ? 'gold' : '所持金'
else if (other === 3) return EnglishTag ? 'steps' : '歩数'
else if (other === 4) return EnglishTag ? 'PlayTime' : 'プレイ時間'
else if (other === 5) return EnglishTag ? 'timer' : 'タイマー'
else if (other === 6) return EnglishTag ? 'SaveCount' : 'セーブ回数'
else if (other === 7) return EnglishTag ? 'BattleCount' : '戦闘回数'
else if (other === 8) return EnglishTag ? 'WinCount' : '勝利回数'
else if (other === 9) return EnglishTag ? 'EscapeCount' : '逃走回数'
else return EnglishTag ? 'PartyMembers' : 'パーティ人数'
}
const getEnemyTarget = (enemy) => {
if (enemy === -1) return EnglishTag ? 'Entire Troop' : '敵グループ全体'
else return Number(enemy) + 1
}
const getEnemyTarget2 = (enemy, targetAll) => {
if (enemy === -1 || targetAll) return EnglishTag ? 'Entire Troop' : '敵グループ全体'
else return Number(enemy) + 1
}
const getNone = (name) => {
if (name === '') return EnglishTag ? 'None' : 'なし'
else return name
}
// MZのプラグインパラメータをパースする補助関数
const parseMzArg = function (args_string) {
const args = []
let buffer = ''
let braceLevel = 0
for (const char of args_string) {
if (char === ',' && braceLevel === 0) {
args.push(buffer.trim())
buffer = ''
} else {
buffer += char
if (char === '[' || char === '{') {
braceLevel++
} else if (char === ']' || char === '}') {
braceLevel--
}
}
}
if (buffer) {
args.push(buffer.trim())
}
return args
}
// 出力するテキスト変数
// Laurus.Frame2Text.EnglishTagの値を別変数に代入
const decompile = function (map_events, EnglishTag) {
// イベントコード毎にループ
let text = ''
map_events.forEach(function (event) {
if (typeof event !== 'object') {
return
}
// インデント
const indent = getIndent(event.indent)
// 改行とインデントを追加する関数
const addNewLineIndent = (indent) => {
// 最初のタグだけ改行を入れない
text += text === '' ? indent : newLine + indent
}
/** ********************************************** */
// メッセージ
/** ********************************************** */
if (event.code === 101) {
const face = event.parameters[0]
const faceId = event.parameters[1]
const background = getBackgroundValue(event.parameters[2])
const windowPosition = getWindowPositionValue(event.parameters[3])
const name = event.parameters[4]
const faceTag = EnglishTag ? `<Face: ${face}(${faceId})>` : `<顔: ${face}(${faceId})>`
const backgroundTag = EnglishTag ? `<Background: ${background}>` : `<背景: ${background}>`
const windowPositionTag = EnglishTag ? `<WindowPosition: ${windowPosition}>` : `<位置: ${windowPosition}>`
const nameTagStr = EnglishTag ? `<Name: ${name}>` : `<名前: ${name}>`
const nameTag = name === '' || name === undefined ? '' : nameTagStr
addNewLineIndent(indent)
text += faceTag + backgroundTag + windowPositionTag + nameTag
}
if (event.code === 401) {
const showText = event.parameters[0]
addNewLineIndent(indent)
text += showText
}
if (event.code === 102) {
const background = getBackgroundValue(event.parameters[4]) + comma
const windowPosition = getChoiceWindowPositionValue(event.parameters[3]) + comma
const defaultChoice = getDefaultChoiceValue(event.parameters[2]) + comma
const cancelChoice = getCancelChoiceValue(event.parameters[1])
const tag = EnglishTag ? '<ShowChoices: ' : '<選択肢の表示: '
addNewLineIndent(indent)
text += tag + background + windowPosition + defaultChoice + cancelChoice + '>'
}
if (event.code === 402) {
const choice = event.parameters[1]
const tag = EnglishTag ? '<When: ' : '<選択肢: '
addNewLineIndent(indent)
text += tag + choice + '>'
}
if (event.code === 403) {
const tag = EnglishTag ? '<WhenCancel>' : '<キャンセルのとき>'
addNewLineIndent(indent)
text += tag
}
if (event.code === 404) {
const tag = EnglishTag ? '<End>' : '<分岐終了>'