-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSHMCD-fixsave.py
64 lines (48 loc) · 1.6 KB
/
SHMCD-fixsave.py
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
import os
def read(name):
with open(name, 'rb') as fid:
return fid.read()
def write(name, data):
with open(name, "wb") as fid:
fid.write(data)
WINDOW = 128
DELIMITER = '\x05'
BACKUP_NAME = 'sh.mcd.specialbak'
COUNTER_FINISHED = 'ZBIIMKHNON'
def main():
saveat = '{}\\AppData\\LocalLow\\SUPERHOT_Team\\SHMCD'.format(os.environ['userprofile'])
print 'assuming superhot save dir at {}'.format(saveat)
os.chdir(saveat)
d = read('sh.mcd')
print 'backing up sh.mcd into {}'.format(BACKUP_NAME)
write(BACKUP_NAME, d)
#method No. 1
i = len(d)-WINDOW
while i > 0:
upperBlob = d[i:i+WINDOW]
if (upperBlob.isalpha() and upperBlob.isupper()):
break
i -= 1
if i > 0:
print 'found blob upper text {}'.format(d[i:i+WINDOW])
i += WINDOW
#method 2
elif i == 0:
i = d.rfind('JTAN')
else:
print 'wtf? i is negative? i: {} len(d): {}'.format(i, len(d))
endOfUPPERTEXT = i
lengthFix = d.find(DELIMITER, endOfUPPERTEXT)
start = d.find('ZB', lengthFix)
end = d.find(DELIMITER, start)
dn = d[:start] + COUNTER_FINISHED + d[end:]
print 'string before: {}'.format(repr(d[start-1:end+1]))
print 'string after: {}'.format(repr(dn[start-1:end+1 + len(dn) - len(d)]))
print 'positions: start {} end {} lengthFix {} endOfUPPERTEXT {}'.format(start, end, lengthFix, endOfUPPERTEXT)
b = bytearray(dn)
print 'fixing length: ', len(dn) - len(d)
b[lengthFix] += len(dn) - len(d)
write('sh.mcd', b)
os.system('pause')
if __name__ == '__main__':
main()