Skip to content

Commit c78f961

Browse files
Pre connected with offsets commands decompler
Decompile some commands with arguments connected with offsets such as 0x03 and 0x05 (JUMP and JUMP_UNLESS). You'll see no offsets in args, but a label numbers. A labels starts with a "@". Some labels with incorrect offsets may be not shown (if running a game with script with such they can just break it all). **DO NOTE: THOU CAN NOT COMPILE MOST SCRIPTS CORRECTLY WITH THE VERSION, FOR THERE IS NO LABEL COMPILER YET!!!** === *Now creating a label compiler...*
1 parent 01915dd commit c78f961

File tree

1 file changed

+40
-5
lines changed

1 file changed

+40
-5
lines changed

gscScriptCompAndDecompiler.py

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -235,8 +235,8 @@ class GscFile:
235235

236236
ConnectedOffsetsLibrary = [[0x03, [0]],
237237
[0x05, [0]]]
238-
LabelsLibrary = []
239-
#Индекс равен номеру метки. Метки начинаются с @. Каждый элемент есть смещение.
238+
Labels = []
239+
#[0] - индекс метки, [1] - смещение метки.
240240

241241
def __init__(self, FileName, Mode):
242242
self.FileName = FileName
@@ -392,9 +392,44 @@ def DecompileGscToTxt(self):
392392

393393
StringCount = 0
394394
Offset = 0
395+
396+
#Заранее находим указанные смещения.
397+
LabelNumber = 0
398+
for CommandNumber in range(0, len(self.Commands)):
399+
FindOffset = 0
400+
Marbas = 0
401+
doKnowOffset = -1
402+
while (Marbas < len(self.ConnectedOffsetsLibrary)):
403+
if (self.Commands[CommandNumber] == self.ConnectedOffsetsLibrary[Marbas][0]):
404+
FindOffset = 1
405+
break
406+
Marbas += 1
407+
if (FindOffset == 0):
408+
continue
409+
for Mardab in self.ConnectedOffsetsLibrary[Marbas][1]:
410+
#Сперва посмотрим, относится ли к какой метке.
411+
for Marmal in self.Labels:
412+
if (self.CommandArgs[CommandNumber][Mardab] == Marmal[1]):
413+
doKnowOffset = Marmal[0]
414+
break
415+
#Теперь рассудим.
416+
if (doKnowOffset == -1):
417+
self.Labels.append([])
418+
self.Labels[LabelNumber].append(LabelNumber)
419+
self.Labels[LabelNumber].append(self.CommandArgs[CommandNumber][Mardab])
420+
self.CommandArgs[CommandNumber][Mardab] = LabelNumber
421+
LabelNumber += 1
422+
else:
423+
self.CommandArgs[CommandNumber][Mardab] = doKnowOffset
424+
#Вывод метод для отладки.
425+
#print(self.Labels)
426+
427+
#Основная часть.
395428
for CommandNumber in range(0, len(self.Commands)):
396429
#Во-первых, следует определить при необходимости метку.
397-
430+
for Marmal in self.Labels:
431+
if (Offset == Marmal[1]):
432+
self.File.write('@' + str(Marmal[0]) + '\n')
398433
#Здесь надо кое-что сперва определить...
399434
DontDef = 0
400435
DontKnow = 0
@@ -493,7 +528,7 @@ def CompileTxtToGsc(self):
493528
if (Lines[i][0] == '<'): #Комментарии.
494529
i += 1
495530
continue
496-
if ((Lines[i][0] == '#') or (Lines[i][0] == '>')):
531+
if ((Lines[i][0] == '#') or (Lines[i][0] == '>') or (Lines[i][0] == '@')):
497532
break
498533
if (KostilPer == 1):
499534
KostilPer = 0
@@ -546,7 +581,7 @@ def CompileTxtToGsc(self):
546581
if (Lines[i][0] == '<'): #Комментарии.
547582
i += 1
548583
continue
549-
if ((Lines[i][0] == '#') or (Lines[i][0] == '>') or (Libes[i][0] == '@')):
584+
if ((Lines[i][0] == '#') or (Lines[i][0] == '>') or (Lines[i][0] == '@')):
550585
break
551586
if (KostilPer == 1):
552587
KostilPer = 0

0 commit comments

Comments
 (0)