@@ -221,15 +221,22 @@ class GscFile:
221
221
#Библиотека команд, двумерный кортеж.
222
222
#(n)(0) - команда;
223
223
#(n)(1) - структура;
224
- #(n)(2) - определение (может быть пустым.
224
+ #(n)(2) - определение (может быть пустым) .
225
225
226
226
ConnectedStringsLibrary = [[0x0F , [1 ]],
227
227
[0x51 , [- 3 , - 2 ]],
228
228
[0x52 , [- 2 ]],
229
229
[0x79 , [1 ]]]
230
230
#Библиотека связанных со строками аргументов.
231
231
#(n)(0) - команда;
232
- #(n)(1) - кортеж связанных аргументов.
232
+ #(n)(1) - список связанных аргументов.
233
+
234
+ #Далее костыли по связанным со смещениям аргументам.
235
+
236
+ ConnectedOffsetsLibrary = [[0x03 , [0 ]],
237
+ [0x05 , [0 ]]]
238
+ LabelsLibrary = []
239
+ #Индекс равен номеру метки. Метки начинаются с @. Каждый элемент есть смещение.
233
240
234
241
def __init__ (self , FileName , Mode ):
235
242
self .FileName = FileName
@@ -384,27 +391,53 @@ def DecompileGscToTxt(self):
384
391
self .WriteFile ()
385
392
386
393
StringCount = 0
394
+ Offset = 0
387
395
for CommandNumber in range (0 , len (self .Commands )):
396
+ #Во-первых, следует определить при необходимости метку.
397
+
398
+ #Здесь надо кое-что сперва определить...
388
399
DontDef = 0
400
+ DontKnow = 0
389
401
MessageKostil = 0
390
402
CommandName = ''
391
403
for i in range (0 , len (self .CommandsLibrary )):
392
404
DontDef = 1
393
- if ((self .Commands [CommandNumber ] == self .CommandsLibrary [i ][0 ]) and (self .CommandsLibrary [i ][2 ] != '' )):
394
- DontDef = 0
405
+ DontKnow = 1
406
+ #if ((self.Commands[CommandNumber] == self.CommandsLibrary[i][0]) and (self.CommandsLibrary[i][2] != '')):
407
+ # DontDef = 0
408
+ # break;
409
+ if (self .Commands [CommandNumber ] == self .CommandsLibrary [i ][0 ]):
410
+ if (self .CommandsLibrary [i ][2 ] != '' ):
411
+ DontDef = 0
412
+ DontKnow = 0
395
413
break ;
396
414
if (DontDef == 0 ):
397
415
CommandName = self .CommandsLibrary [i ][2 ]
398
416
else :
399
417
CommandName = str (self .Commands [CommandNumber ])
400
-
418
+ #Во-вторых, получить смещение после сей итерации.
419
+ Offset += 2 #Все команды двухбайтовы.
420
+ if (DontKnow == 0 ):
421
+ for OfferI in self .CommandsLibrary [i ][1 ]:
422
+ if ((OfferI == 'h' ) or (OfferI == 'H' )):
423
+ Offset += 2
424
+ elif ((OfferI == 'i' ) or (OfferI == 'I' )):
425
+ Offset += 4
426
+ else :
427
+ if ((self .Commands [CommandNumber ] & 0xf000 ) == 0xf000 ):
428
+ Offset += 4
429
+ elif ((self .Commands [CommandNumber ] & 0xf000 ) == 0x0000 ):
430
+ Offset += 0
431
+ else :
432
+ Offset += 6
433
+ #Ну и далее всё остальное.
434
+
401
435
ConStr = 0
402
436
kk = 0
403
437
for kk in range (0 , len (self .ConnectedStringsLibrary )):
404
438
if (self .Commands [CommandNumber ] == self .ConnectedStringsLibrary [kk ][0 ]):
405
439
ConStr = 1
406
440
break
407
-
408
441
if (ConStr > 0 ):
409
442
kkk = 0
410
443
StringsNew = []
@@ -416,15 +449,15 @@ def DecompileGscToTxt(self):
416
449
while (StringCount < MessageNum ):
417
450
self .File .write ('>' + str (StringCount ) + '\n ' )
418
451
self .File .write (self .FileStrings [StringCount ].replace ('^n' , '\n ' ) + '\n ' )
452
+ StringCount += 1
419
453
StringCount += 1
420
454
421
455
self .File .write ("#" + CommandName + '\n ' )
422
456
self .File .write (str (self .CommandArgs [CommandNumber ]))
423
457
for z in StringsNew :
424
458
self .File .write ("\n >-1\n " + z )
425
459
else :
426
- self .File .write ("#" + CommandName )
427
- self .File .write ("\n " )
460
+ self .File .write ("#" + CommandName + '\n ' )
428
461
self .File .write (str (self .CommandArgs [CommandNumber ]))
429
462
if (CommandNumber != (len (self .Commands ) - 1 )):
430
463
self .File .write ("\n " )
@@ -434,6 +467,7 @@ def DecompileGscToTxt(self):
434
467
self .File .write (self .FileStrings [StringCount ].replace ('^' , '\\ ' ))
435
468
StringCount += 1
436
469
self .CloseFile ()
470
+ print ("Контроль разборки секции команд: " + str (Offset ) + " : " + str (len (self .FileStruct [1 ])))
437
471
def CompileTxtToGsc (self ):
438
472
Lines = self .File .read ().split ('\n ' )
439
473
i = 0
@@ -512,7 +546,7 @@ def CompileTxtToGsc(self):
512
546
if (Lines [i ][0 ] == '<' ): #Комментарии.
513
547
i += 1
514
548
continue
515
- if ((Lines [i ][0 ] == '#' ) or (Lines [i ][0 ] == '>' )):
549
+ if ((Lines [i ][0 ] == '#' ) or (Lines [i ][0 ] == '>' ) or ( Libes [ i ][ 0 ] == '@' ) ):
516
550
break
517
551
if (KostilPer == 1 ):
518
552
KostilPer = 0
0 commit comments