Thurler

Labyrinth 2 Bestiary Python Script

Feb 21st, 2020 (edited)
126
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. def skipPastSequence(target, bufsize=0):
  2.   match_index = 0
  3.   buf = []
  4.   resbuf = []
  5.   while match_index < len(target):
  6.     char = f.read(1)
  7.     if bufsize > 0:
  8.       if len(buf) == bufsize:
  9.         buf.pop(0)
  10.       buf.append(char)
  11.     if char == target[match_index]:
  12.       match_index += 1
  13.     else:
  14.       if bufsize > 0:
  15.         resbuf = buf[::]
  16.       match_index = 0
  17.   return "".join(resbuf) if bufsize > 0 else None
  18.  
  19. def convertByteArray(arr):
  20.   return [hex(ord(x)) for x in arr]
  21.  
  22. def convertNumber(arr):
  23.   res = 0
  24.   for i, val in enumerate([ord(x) for x in arr]):
  25.     res += (256**i) * val
  26.   return res
  27.  
  28. def readEnemyData(f, o):
  29.   lv = skipPastSequence("\xB8\x08\x00\x00\x00\x6B\xC8\x00\x8B\x55\xEC\xC7\x84\x0A\xC8\x00\x00\x00", 4)
  30.   o.write(str(convertNumber(lv))+',')
  31.   hp = f.read(4)
  32.   f.read(7)
  33.   hp2 = f.read(4)
  34.   o.write(str(convertNumber(hp + hp2))+',')
  35.   f.read(41)
  36.   atk = f.read(4)
  37.   o.write(str(convertNumber(atk))+',')
  38.   f.read(29)
  39.   df = f.read(4)
  40.   o.write(str(convertNumber(df))+',')
  41.   f.read(29)
  42.   mag = f.read(4)
  43.   o.write(str(convertNumber(mag))+',')
  44.   f.read(29)
  45.   mnd = f.read(4)
  46.   o.write(str(convertNumber(mnd))+',')
  47.   f.read(29)
  48.   spd = f.read(4)
  49.   o.write(str(convertNumber(spd))+',')
  50.   f.read(29)
  51.   acc = f.read(4)
  52.   o.write(str(convertNumber(acc))+',')
  53.   f.read(29)
  54.   eva = f.read(4)
  55.   o.write(str(convertNumber(eva))+',')
  56.   f.read(20)
  57.   money = f.read(4)
  58.   o.write(str(convertNumber(money))+',')
  59.   f.read(19)
  60.   exp = f.read(4)
  61.   o.write(str(convertNumber(exp))+',')
  62.   skipPastSequence("\xC7\x81\xBC\x0B\x00\x00\x00\x00\x00\x00\xB8\x08\x00\x00"+
  63.                    "\x00\x6B\xC8\x0A\x8B\x55\xEC\xC7\x84\x0A\xC8\x00\x00\x00")
  64.   fir = f.read(4)
  65.   o.write(str(convertNumber(fir))+',')
  66.   f.read(29)
  67.   cld = f.read(4)
  68.   o.write(str(convertNumber(cld))+',')
  69.   f.read(29)
  70.   wnd = f.read(4)
  71.   o.write(str(convertNumber(wnd))+',')
  72.   f.read(29)
  73.   ntr = f.read(4)
  74.   o.write(str(convertNumber(ntr))+',')
  75.   f.read(29)
  76.   mys = f.read(4)
  77.   o.write(str(convertNumber(mys))+',')
  78.   f.read(29)
  79.   spi = f.read(4)
  80.   o.write(str(convertNumber(spi))+',')
  81.   f.read(29)
  82.   drk = f.read(4)
  83.   o.write(str(convertNumber(drk))+',')
  84.   f.read(29)
  85.   phy = f.read(4)
  86.   o.write(str(convertNumber(phy))+',')
  87.   f.read(29)
  88.   voi = f.read(4)
  89.   o.write(str(convertNumber(voi))+',')
  90.   f.read(29)
  91.   psn = f.read(4)
  92.   o.write(str(convertNumber(psn))+',')
  93.   f.read(29)
  94.   par = f.read(4)
  95.   o.write(str(convertNumber(par))+',')
  96.   f.read(29)
  97.   hvy = f.read(4)
  98.   o.write(str(convertNumber(hvy))+',')
  99.   f.read(29)
  100.   shk = f.read(4)
  101.   o.write(str(convertNumber(shk))+',')
  102.   f.read(29)
  103.   trr = f.read(4)
  104.   o.write(str(convertNumber(trr))+',')
  105.   f.read(29)
  106.   sil = f.read(4)
  107.   o.write(str(convertNumber(sil))+',')
  108.   f.read(29)
  109.   dth = f.read(4)
  110.   o.write(str(convertNumber(dth))+',')
  111.   f.read(29)
  112.   dbfatk = f.read(4)
  113.   o.write(str(convertNumber(dbfatk))+',')
  114.   f.read(29)
  115.   dbfdef = f.read(4)
  116.   o.write(str(convertNumber(dbfdef))+',')
  117.   f.read(29)
  118.   dbfmag = f.read(4)
  119.   o.write(str(convertNumber(dbfmag))+',')
  120.   f.read(29)
  121.   dbfmnd = f.read(4)
  122.   o.write(str(convertNumber(dbfmnd))+',')
  123.   f.read(29)
  124.   dbfspd = f.read(4)
  125.   o.write(str(convertNumber(dbfspd))+',')
  126.   f.read(29)
  127.   dbfacc = f.read(4)
  128.   o.write(str(convertNumber(dbfacc))+',')
  129.   f.read(29)
  130.   dbfeva = f.read(4)
  131.   o.write(str(convertNumber(dbfeva)))
  132.   o.write('\n')
  133.   return convertNumber(hp+hp2)
  134.  
  135. with open("laby2.exe", 'rb') as f:
  136.   with open("output.csv", 'w') as o:
  137.     f.read(1264720)
  138.     c = 0
  139.     while True:
  140.       c += 1
  141.       print readEnemyData(f, o), c
  142.       o.flush()
  143.  
  144. print "DONE"
RAW Paste Data