Skip to content

Commit 01915dd

Browse files
Major fix
String fix. And some minor technical functional, that will be very important in update soon.
1 parent 49b1508 commit 01915dd

File tree

1 file changed

+43
-9
lines changed

1 file changed

+43
-9
lines changed

gscScriptCompAndDecompiler.py

Lines changed: 43 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -221,15 +221,22 @@ class GscFile:
221221
#Библиотека команд, двумерный кортеж.
222222
#(n)(0) - команда;
223223
#(n)(1) - структура;
224-
#(n)(2) - определение (может быть пустым.
224+
#(n)(2) - определение (может быть пустым).
225225

226226
ConnectedStringsLibrary = [[0x0F, [1]],
227227
[0x51, [-3, -2]],
228228
[0x52, [-2]],
229229
[0x79, [1]]]
230230
#Библиотека связанных со строками аргументов.
231231
#(n)(0) - команда;
232-
#(n)(1) - кортеж связанных аргументов.
232+
#(n)(1) - список связанных аргументов.
233+
234+
#Далее костыли по связанным со смещениям аргументам.
235+
236+
ConnectedOffsetsLibrary = [[0x03, [0]],
237+
[0x05, [0]]]
238+
LabelsLibrary = []
239+
#Индекс равен номеру метки. Метки начинаются с @. Каждый элемент есть смещение.
233240

234241
def __init__(self, FileName, Mode):
235242
self.FileName = FileName
@@ -384,27 +391,53 @@ def DecompileGscToTxt(self):
384391
self.WriteFile()
385392

386393
StringCount = 0
394+
Offset = 0
387395
for CommandNumber in range(0, len(self.Commands)):
396+
#Во-первых, следует определить при необходимости метку.
397+
398+
#Здесь надо кое-что сперва определить...
388399
DontDef = 0
400+
DontKnow = 0
389401
MessageKostil = 0
390402
CommandName = ''
391403
for i in range(0, len(self.CommandsLibrary)):
392404
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
395413
break;
396414
if (DontDef == 0):
397415
CommandName = self.CommandsLibrary[i][2]
398416
else:
399417
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+
401435
ConStr = 0
402436
kk = 0
403437
for kk in range(0, len(self.ConnectedStringsLibrary)):
404438
if (self.Commands[CommandNumber] == self.ConnectedStringsLibrary[kk][0]):
405439
ConStr = 1
406440
break
407-
408441
if (ConStr > 0):
409442
kkk = 0
410443
StringsNew = []
@@ -416,15 +449,15 @@ def DecompileGscToTxt(self):
416449
while (StringCount < MessageNum):
417450
self.File.write('>' + str(StringCount) + '\n')
418451
self.File.write(self.FileStrings[StringCount].replace('^n', '\n') + '\n')
452+
StringCount += 1
419453
StringCount += 1
420454

421455
self.File.write("#" + CommandName + '\n')
422456
self.File.write(str(self.CommandArgs[CommandNumber]))
423457
for z in StringsNew:
424458
self.File.write("\n>-1\n" + z)
425459
else:
426-
self.File.write("#" + CommandName)
427-
self.File.write("\n")
460+
self.File.write("#" + CommandName + '\n')
428461
self.File.write(str(self.CommandArgs[CommandNumber]))
429462
if (CommandNumber != (len(self.Commands) - 1)):
430463
self.File.write("\n")
@@ -434,6 +467,7 @@ def DecompileGscToTxt(self):
434467
self.File.write(self.FileStrings[StringCount].replace('^', '\\'))
435468
StringCount += 1
436469
self.CloseFile()
470+
print("Контроль разборки секции команд: " + str(Offset) + " : " + str(len(self.FileStruct[1])))
437471
def CompileTxtToGsc(self):
438472
Lines = self.File.read().split('\n')
439473
i = 0
@@ -512,7 +546,7 @@ def CompileTxtToGsc(self):
512546
if (Lines[i][0] == '<'): #Комментарии.
513547
i += 1
514548
continue
515-
if ((Lines[i][0] == '#') or (Lines[i][0] == '>')):
549+
if ((Lines[i][0] == '#') or (Lines[i][0] == '>') or (Libes[i][0] == '@')):
516550
break
517551
if (KostilPer == 1):
518552
KostilPer = 0

0 commit comments

Comments
 (0)