@@ -50,10 +50,14 @@ class GscFile:
50
50
CommandsLibrary = ((0x03 , 'i' , 'JUMP_UNLESS' ),
51
51
(0x05 , 'i' , 'JUMP' ),
52
52
(0x0D , 'i' , 'PAUSE' ),
53
- (0x14 , 'ii' , 'IMAGE_DEF' ),
54
- (0x1A , '' , 'SCENE_SET' ), #IMAGE_SET?
53
+ (0x0C , 'ii' , 'CALL_SCRIPT' ), #[имя скрипта без начальных нулей, ???]
54
+ (0x14 , 'ii' , 'IMAGE_GET' ),
55
+ (0x1A , '' , 'IMAGE_SET' ),
55
56
(0x1C , 'iii' , 'BLEND_IMG' ),
57
+ (0x1E , 'iiiiii' , 'IMAGE_DEF' ),
56
58
(0x51 , 'iiiiiii' , 'MESSAGE' ),
59
+ (0x52 , 'iiiiii' , 'APPEND_MESSAGE' ),
60
+ (0x79 , 'ii' , 'GET_DIRECTORY' ),
57
61
(0xC8 , 'iiiiiiiiiii' , 'READ_SCENARIO' ), #??? Подправить число аргументов?
58
62
(0xFF , 'iiiii' , 'SPRITE' ),
59
63
(0x3500 , 'hhh' , 'AND' ),
@@ -62,10 +66,10 @@ class GscFile:
62
66
(0xAA00 , 'hhh' , 'ADD' ),
63
67
(0xF100 , 'hh' , 'ASSIGN' ),
64
68
(0x04 , 'i' , '' ),
69
+ (0x08 , '' , '' ),
65
70
(0x09 , 'h' , '' ),
66
- (0x0A , '' , '' ),
71
+ (0x0A , '' , '' ), #h в другом типе? Хм-м... #WAIT_FOR_CLICK?
67
72
(0x0B , '' , '' ),
68
- (0x0C , 'ii' , '' ),
69
73
(0x0E , 'hiiiiiiiiiiiiii' , '' ), #???
70
74
(0x0F , 'iiiiiiiiiiii' , '' ), #??? #Массив? Подправить число аргументов?
71
75
(0x10 , 'i' , '' ),
@@ -79,14 +83,13 @@ class GscFile:
79
83
(0x19 , 'ii' , '' ),
80
84
(0x1B , '' , '' ),
81
85
(0x1D , 'ii' , '' ),
82
- (0x1E , 'iiiiii' , '' ),
83
86
(0x20 , 'iiiiii' , '' ),
84
87
(0x21 , 'iiiii' , '' ),
85
88
(0x22 , 'iiiii' , '' ),
86
89
(0x23 , 'ii' , '' ),
87
90
(0x24 , 'ii' , '' ),
88
91
(0x25 , 'ii' , '' ),
89
- (0x26 , 'iiii' , '' ),
92
+ (0x26 , 'iiii' , '' ), #Возможно, где-то 'iii'?
90
93
(0x27 , 'iii' , '' ),
91
94
(0x28 , 'ii' , '' ),
92
95
(0x29 , 'ii' , '' ),
@@ -96,7 +99,7 @@ class GscFile:
96
99
(0x2D , 'ii' , '' ),
97
100
(0x2E , 'i' , '' ),
98
101
(0x2F , 'ii' , '' ),
99
- (0x30 , 'iii' , '' ),
102
+ (0x30 , 'iii' , '' ), #Возможно, где-то 'ii'?
100
103
(0x31 , 'ii' , '' ),
101
104
(0x32 , '' , '' ),
102
105
(0x33 , '' , '' ),
@@ -125,8 +128,6 @@ class GscFile:
125
128
(0x4B , 'iiiii' , '' ),
126
129
(0x4D , 'iiii' , '' ),
127
130
(0x50 , 'i' , '' ),
128
- (0x51 , 'iiiiiii' , '' ),
129
- (0x52 , 'iiiiii' , '' ),
130
131
(0x53 , 'i' , '' ),
131
132
(0x5A , 'iii' , '' ),
132
133
(0x5B , 'iiiii' , '' ),
@@ -144,6 +145,7 @@ class GscFile:
144
145
(0x67 , 'ii' , '' ),
145
146
(0x68 , 'iiii' , '' ),
146
147
(0x69 , 'ii' , '' ),
148
+ (0x6A , 'iiiii' , '' ),#TEMP!
147
149
(0x6E , 'iii' , '' ),
148
150
(0x6F , 'iii' , '' ),
149
151
(0x70 , 'i' , '' ),
@@ -153,7 +155,6 @@ class GscFile:
153
155
(0x74 , 'ii' , '' ),
154
156
(0x75 , 'ii' , '' ),
155
157
(0x78 , 'ii' , '' ),
156
- (0x79 , 'ii' , '' ),
157
158
(0x82 , 'iiii' , '' ),
158
159
(0x83 , 'iiiii' , '' ),
159
160
(0x84 , 'ii' , '' ),
@@ -184,12 +185,51 @@ class GscFile:
184
185
(0xE6 , 'i' , '' ),
185
186
(0xE7 , 'i' , '' ),
186
187
(0x1800 , 'hhh' , '' ),
188
+ (0x1810 , 'hhh' , '' ), #!!!
189
+ (0x1900 , 'hhh' , '' ),
190
+ (0x1910 , 'hhh' , '' ),
191
+ (0x2500 , 'hhh' , '' ),
192
+ (0x1A01 , 'hhh' , '' ), #!!!
193
+ (0x1A00 , 'hhh' , '' ),
194
+ (0x4400 , 'hhh' , '' ),
195
+ (0x4810 , 'hhh' , '' ), #!!!
196
+ (0x4900 , 'hhh' , '' ),
187
197
(0x5800 , 'hhh' , '' ),
188
- (0x7800 , 'hhh' , '' ))
189
- #Библиотека команд, двумерный массив.
190
- #[n][0] - команда;
191
- #[n][1] - структура;
192
- #[n][2] - определение (может быть пустым.
198
+ (0x6800 , 'hhh' , '' ),
199
+ (0x7800 , 'hhh' , '' ),
200
+ (0x8800 , 'hhh' , '' ),
201
+ (0x8A00 , 'hhh' , '' ),
202
+ (0x9800 , 'hhh' , '' ),
203
+ (0x9810 , 'hhh' , '' ), #!!!
204
+ (0x9A00 , 'hhh' , '' ),
205
+ (0xA100 , 'hhh' , '' ),
206
+ (0xA201 , 'hhh' , '' ), #!!
207
+ (0xA400 , 'hhh' , '' ),
208
+ (0xA500 , 'hhh' , '' ),
209
+ (0xA600 , 'hhh' , '' ),
210
+ (0xA800 , 'hhh' , '' ),
211
+ (0xA810 , 'hhh' , '' ), #!!!
212
+ (0xB400 , 'hhh' , '' ),
213
+ (0xB800 , 'hhh' , '' ),
214
+ (0xB900 , 'hhh' , '' ),
215
+ (0xC400 , 'hhh' , '' ),
216
+ (0xC800 , 'hhh' , '' ),
217
+ (0xD400 , 'hhh' , '' ),
218
+ (0xD800 , 'hhh' , '' ),
219
+ (0xE400 , 'hhh' , '' ),
220
+ (0xE800 , 'hhh' , '' ))
221
+ #Библиотека команд, двумерный кортеж.
222
+ #(n)(0) - команда;
223
+ #(n)(1) - структура;
224
+ #(n)(2) - определение (может быть пустым.
225
+
226
+ ConnectedStringsLibrary = [[0x0F , [1 ]],
227
+ [0x51 , [- 3 , - 2 ]],
228
+ [0x52 , [- 2 ]],
229
+ [0x79 , [1 ]]]
230
+ #Библиотека связанных со строками аргументов.
231
+ #(n)(0) - команда;
232
+ #(n)(1) - кортеж связанных аргументов.
193
233
194
234
def __init__ (self , FileName , Mode ):
195
235
self .FileName = FileName
@@ -357,20 +397,31 @@ def DecompileGscToTxt(self):
357
397
CommandName = self .CommandsLibrary [i ][2 ]
358
398
else :
359
399
CommandName = str (self .Commands [CommandNumber ])
360
- if (self .Commands [CommandNumber ] == 0x51 ):
361
- MessageKostil = 1
362
- if (MessageKostil == 1 ):
363
- MessageArgsTrue = self .CommandArgs [CommandNumber ]
364
- MessageNum = MessageArgsTrue [- 2 ]
365
- MessageArgsTrue [- 2 ] = - 1
366
- while (StringCount < MessageNum ):
367
- self .File .write ('>' + str (StringCount ) + '\n ' )
368
- self .File .write (self .FileStrings [StringCount ].replace ('^n' , '\n ' ) + '\n ' )
400
+
401
+ ConStr = 0
402
+ kk = 0
403
+ for kk in range (0 , len (self .ConnectedStringsLibrary )):
404
+ if (self .Commands [CommandNumber ] == self .ConnectedStringsLibrary [kk ][0 ]):
405
+ ConStr = 1
406
+ break
407
+
408
+ if (ConStr > 0 ):
409
+ kkk = 0
410
+ StringsNew = []
411
+ for kkk in range (len (self .ConnectedStringsLibrary [kk ][1 ])):
412
+ MessageArgsTrue = self .CommandArgs [CommandNumber ]
413
+ MessageNum = MessageArgsTrue [self .ConnectedStringsLibrary [kk ][1 ][kkk ]]
414
+ MessageArgsTrue [self .ConnectedStringsLibrary [kk ][1 ][kkk ]] = - 1
415
+ StringsNew .append (self .FileStrings [MessageNum ].replace ('^n' , '\n ' ))
416
+ while (StringCount < MessageNum ):
417
+ self .File .write ('>' + str (StringCount ) + '\n ' )
418
+ self .File .write (self .FileStrings [StringCount ].replace ('^n' , '\n ' ) + '\n ' )
369
419
StringCount += 1
420
+
370
421
self .File .write ("#" + CommandName + '\n ' )
371
422
self .File .write (str (self .CommandArgs [CommandNumber ]))
372
- self . File . write ( " \n >-1 \n " + self . FileStrings [ MessageNum ]. replace ( '^n' , ' \n ' ))
373
- StringCount += 1
423
+ for z in StringsNew :
424
+ self . File . write ( " \n >-1 \n " + z )
374
425
else :
375
426
self .File .write ("#" + CommandName )
376
427
self .File .write ("\n " )
@@ -436,33 +487,43 @@ def CompileTxtToGsc(self):
436
487
CommandNEW .append (int (CommandCTR [ii ]))
437
488
self .CommandArgs .append (CommandNEW )
438
489
i += 1
439
- if (CommandType == 0x51 ):
440
- String = ''
441
- i += 1
442
- KostilPer = 1
443
- while (i < len (Lines )):
444
- if (len (Lines [i ]) == 0 ):
490
+
491
+ ConStr = 0
492
+ kk = 0
493
+ for kk in range (0 , len (self .ConnectedStringsLibrary )):
494
+ if (CommandType == self .ConnectedStringsLibrary [kk ][0 ]):
495
+ ConStr = 1
496
+ break
497
+
498
+ if (ConStr > 0 ):
499
+ kkk = 0
500
+ for kkk in range (len (self .ConnectedStringsLibrary [kk ][1 ])):
501
+ String = ''
502
+ i += 1
503
+ KostilPer = 1
504
+ while (i < len (Lines )):
505
+ if (len (Lines [i ]) == 0 ):
506
+ if (KostilPer == 1 ):
507
+ KostilPer = 0
508
+ else :
509
+ String = String + '^n'
510
+ i += 1
511
+ continue
512
+ if (Lines [i ][0 ] == '<' ): #Комментарии.
513
+ i += 1
514
+ continue
515
+ if ((Lines [i ][0 ] == '#' ) or (Lines [i ][0 ] == '>' )):
516
+ break
445
517
if (KostilPer == 1 ):
446
518
KostilPer = 0
447
519
else :
448
520
String = String + '^n'
521
+ if (i >= len (Lines )):
522
+ i -= 1
523
+ String = String + Lines [i ]
449
524
i += 1
450
- continue
451
- if (Lines [i ][0 ] == '<' ): #Комментарии.
452
- i += 1
453
- continue
454
- if ((Lines [i ][0 ] == '#' ) or (Lines [i ][0 ] == '>' )):
455
- break
456
- if (KostilPer == 1 ):
457
- KostilPer = 0
458
- else :
459
- String = String + '^n'
460
- if (i >= len (Lines )):
461
- i -= 1
462
- String = String + Lines [i ]
463
- i += 1
464
- self .FileStrings .append (String )
465
- self .CommandArgs [- 1 ][- 2 ] = (len (self .FileStrings ) - 1 )
525
+ self .FileStrings .append (String )
526
+ self .CommandArgs [- 1 ][self .ConnectedStringsLibrary [kk ][1 ][kkk ]] = (len (self .FileStrings ) - 1 )
466
527
else :
467
528
i += 1
468
529
continue
@@ -602,7 +663,7 @@ def __init__(self):
602
663
self .root .resizable (width = False , height = False )
603
664
604
665
self .root .geometry ("400x420+{}+{}" .format ((self .root .winfo_screenwidth ()- 400 )// 2 , (self .root .winfo_screenheight ()- 420 )// 2 ))
605
- self .root .title ("GscScriptCompAndDecompiler by Tester" )
666
+ self .root .title ("GscScriptCompAndDecompiler by Tester 2.0 " )
606
667
607
668
self .LeftSide = Frame (self .root , width = 400 , heigh = 600 )
608
669
self .LeftSide .pack (side = 'left' )
@@ -657,7 +718,7 @@ def InitLeftSide(self):
657
718
#Техническое:
658
719
def SetLangRus (self ):
659
720
self .Language = "RUS"
660
- self .root .title ("GscScriptCompAndDecompiler от Tester-а" )
721
+ self .root .title ("GscScriptCompAndDecompiler от Tester-а 2.0 " )
661
722
self .Definer ['text' ] = " ОПРЕДЕЛИТЬ"
662
723
self .Clearer ['text' ] = " ОЧИСТИТЬ "
663
724
self .Undefiner ['text' ] = "РАЗОПРЕДЕЛИТЬ "
@@ -675,7 +736,7 @@ def SetLangRus(self):
675
736
self .Outer ['state' ] = DISABLED
676
737
def SetLangEng (self ):
677
738
self .Language = "ENG"
678
- self .root .title ("GscScriptCompAndDecompiler by Tester" )
739
+ self .root .title ("GscScriptCompAndDecompiler by Tester 2.0 " )
679
740
self .Definer ['text' ] = " DEFINE"
680
741
self .Clearer ['text' ] = " CLEAR "
681
742
self .Undefiner ['text' ] = "UNDEFINE "
@@ -774,11 +835,15 @@ def RebuildGscFromGsc(self):
774
835
self .Outer .insert (1.0 , "Something went wrong...\n Couldn't rebuilt this .gsc..." )
775
836
self .Outer ['state' ] = DISABLED
776
837
def DecompileToTxt (self ):
838
+ NewScript = GscFile (self .FileName , 0 )
839
+ NewScript .ReinitAll ()
840
+ NewScript .FileName = self .FileName
841
+ NewScript .DecompileGscToTxt ()
777
842
try :
778
- NewScript = GscFile (self .FileName , 0 )
779
- NewScript .ReinitAll ()
780
- NewScript .FileName = self .FileName
781
- NewScript .DecompileGscToTxt ()
843
+ # NewScript = GscFile(self.FileName, 0)
844
+ # NewScript.ReinitAll()
845
+ # NewScript.FileName = self.FileName
846
+ # NewScript.DecompileGscToTxt()
782
847
self .Outer ['state' ] = NORMAL
783
848
self .Outer .delete (1.0 , END )
784
849
if (self .Language == 'RUS' ):
@@ -795,11 +860,15 @@ def DecompileToTxt(self):
795
860
self .Outer .insert (1.0 , "Something went wrong...\n Couldn't decompile this .gsc..." )
796
861
self .Outer ['state' ] = DISABLED
797
862
def CompileFromTxt (self ):
863
+ NewScript = GscFile (self .FileName , 1 )
864
+ NewScript .ReinitAll ()
865
+ NewScript .FileName = self .FileName
866
+ NewScript .CompileTxtToGsc ()
798
867
try :
799
- NewScript = GscFile (self .FileName , 1 )
800
- NewScript .ReinitAll ()
801
- NewScript .FileName = self .FileName
802
- NewScript .CompileTxtToGsc ()
868
+ # NewScript = GscFile(self.FileName, 1)
869
+ # NewScript.ReinitAll()
870
+ # NewScript.FileName = self.FileName
871
+ # NewScript.CompileTxtToGsc()
803
872
self .Outer ['state' ] = NORMAL
804
873
self .Outer .delete (1.0 , END )
805
874
if (self .Language == 'RUS' ):
0 commit comments